@ketvietlab/ketjs 0.1.2 → 0.1.3

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 (299) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +8 -2
  3. package/dist/agent/capabilities.d.ts +1 -3
  4. package/dist/agent/capabilities.d.ts.map +1 -1
  5. package/dist/agent/capabilities.js +10 -1
  6. package/dist/agent/capabilities.js.map +1 -1
  7. package/dist/agent/permissions.d.ts +43 -1
  8. package/dist/agent/permissions.d.ts.map +1 -1
  9. package/dist/agent/permissions.js +50 -2
  10. package/dist/agent/permissions.js.map +1 -1
  11. package/dist/cli.js +246 -97
  12. package/dist/cli.js.map +1 -1
  13. package/dist/codegen/dts.d.ts.map +1 -1
  14. package/dist/codegen/dts.js +1 -0
  15. package/dist/codegen/dts.js.map +1 -1
  16. package/dist/data/changeset.d.ts +12 -0
  17. package/dist/data/changeset.d.ts.map +1 -1
  18. package/dist/data/changeset.js +73 -17
  19. package/dist/data/changeset.js.map +1 -1
  20. package/dist/data/expr.d.ts +16 -0
  21. package/dist/data/expr.d.ts.map +1 -1
  22. package/dist/data/expr.js +33 -5
  23. package/dist/data/expr.js.map +1 -1
  24. package/dist/data/fleet.d.ts +41 -1
  25. package/dist/data/fleet.d.ts.map +1 -1
  26. package/dist/data/fleet.js +100 -11
  27. package/dist/data/fleet.js.map +1 -1
  28. package/dist/data/migrate.d.ts +20 -0
  29. package/dist/data/migrate.d.ts.map +1 -1
  30. package/dist/data/migrate.js +86 -3
  31. package/dist/data/migrate.js.map +1 -1
  32. package/dist/data/physical.d.ts +5 -0
  33. package/dist/data/physical.d.ts.map +1 -0
  34. package/dist/data/physical.js +196 -0
  35. package/dist/data/physical.js.map +1 -0
  36. package/dist/data/pool.d.ts +2 -1
  37. package/dist/data/pool.d.ts.map +1 -1
  38. package/dist/data/pool.js +159 -31
  39. package/dist/data/pool.js.map +1 -1
  40. package/dist/data/query.d.ts +10 -1
  41. package/dist/data/query.d.ts.map +1 -1
  42. package/dist/data/query.js +136 -27
  43. package/dist/data/query.js.map +1 -1
  44. package/dist/data/sqlite.d.ts.map +1 -1
  45. package/dist/data/sqlite.js +350 -52
  46. package/dist/data/sqlite.js.map +1 -1
  47. package/dist/data/time.d.ts +13 -0
  48. package/dist/data/time.d.ts.map +1 -1
  49. package/dist/data/time.js +61 -17
  50. package/dist/data/time.js.map +1 -1
  51. package/dist/index.d.ts +43 -22
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +32 -16
  54. package/dist/index.js.map +1 -1
  55. package/dist/kernel/audit.d.ts +27 -0
  56. package/dist/kernel/audit.d.ts.map +1 -0
  57. package/dist/kernel/audit.js +67 -0
  58. package/dist/kernel/audit.js.map +1 -0
  59. package/dist/kernel/classification.d.ts +26 -0
  60. package/dist/kernel/classification.d.ts.map +1 -0
  61. package/dist/kernel/classification.js +73 -0
  62. package/dist/kernel/classification.js.map +1 -0
  63. package/dist/kernel/compose.d.ts +6 -2
  64. package/dist/kernel/compose.d.ts.map +1 -1
  65. package/dist/kernel/compose.js +269 -15
  66. package/dist/kernel/compose.js.map +1 -1
  67. package/dist/kernel/define.d.ts +2 -3
  68. package/dist/kernel/define.d.ts.map +1 -1
  69. package/dist/kernel/define.js +22 -12
  70. package/dist/kernel/define.js.map +1 -1
  71. package/dist/kernel/diff.d.ts.map +1 -1
  72. package/dist/kernel/diff.js +28 -4
  73. package/dist/kernel/diff.js.map +1 -1
  74. package/dist/kernel/graph.js +1 -1
  75. package/dist/kernel/graph.js.map +1 -1
  76. package/dist/kernel/i18n.d.ts +10 -1
  77. package/dist/kernel/i18n.d.ts.map +1 -1
  78. package/dist/kernel/i18n.js +34 -1
  79. package/dist/kernel/i18n.js.map +1 -1
  80. package/dist/kernel/layout.d.ts +97 -0
  81. package/dist/kernel/layout.d.ts.map +1 -1
  82. package/dist/kernel/layout.js +294 -12
  83. package/dist/kernel/layout.js.map +1 -1
  84. package/dist/kernel/menu.d.ts +33 -2
  85. package/dist/kernel/menu.d.ts.map +1 -1
  86. package/dist/kernel/menu.js +99 -7
  87. package/dist/kernel/menu.js.map +1 -1
  88. package/dist/kernel/modules.d.ts +3 -3
  89. package/dist/kernel/modules.d.ts.map +1 -1
  90. package/dist/kernel/modules.js +21 -21
  91. package/dist/kernel/modules.js.map +1 -1
  92. package/dist/kernel/permissions.d.ts +10 -0
  93. package/dist/kernel/permissions.d.ts.map +1 -0
  94. package/dist/kernel/permissions.js +365 -0
  95. package/dist/kernel/permissions.js.map +1 -0
  96. package/dist/kernel/schedule.d.ts +23 -0
  97. package/dist/kernel/schedule.d.ts.map +1 -0
  98. package/dist/kernel/schedule.js +83 -0
  99. package/dist/kernel/schedule.js.map +1 -0
  100. package/dist/kernel/types.d.ts.map +1 -1
  101. package/dist/kernel/types.js +5 -4
  102. package/dist/kernel/types.js.map +1 -1
  103. package/dist/kernel/workspace.d.ts +92 -14
  104. package/dist/kernel/workspace.d.ts.map +1 -1
  105. package/dist/kernel/workspace.js +128 -49
  106. package/dist/kernel/workspace.js.map +1 -1
  107. package/dist/pdf/assets/Inter-Bold.ttf +0 -0
  108. package/dist/pdf/assets/Inter-Regular.ttf +0 -0
  109. package/dist/pdf/assets/Inter-SemiBold.ttf +0 -0
  110. package/dist/pdf/assets/LICENSE.txt +92 -0
  111. package/dist/pdf/font.d.ts +10 -0
  112. package/dist/pdf/font.d.ts.map +1 -0
  113. package/dist/pdf/font.js +83 -0
  114. package/dist/pdf/font.js.map +1 -0
  115. package/dist/pdf/image.d.ts +8 -0
  116. package/dist/pdf/image.d.ts.map +1 -0
  117. package/dist/pdf/image.js +94 -0
  118. package/dist/pdf/image.js.map +1 -0
  119. package/dist/pdf/index.d.ts +15 -0
  120. package/dist/pdf/index.d.ts.map +1 -0
  121. package/dist/pdf/index.js +17 -0
  122. package/dist/pdf/index.js.map +1 -0
  123. package/dist/pdf/markup.d.ts +19 -0
  124. package/dist/pdf/markup.d.ts.map +1 -0
  125. package/dist/pdf/markup.js +146 -0
  126. package/dist/pdf/markup.js.map +1 -0
  127. package/dist/pdf/render.d.ts +14 -0
  128. package/dist/pdf/render.d.ts.map +1 -0
  129. package/dist/pdf/render.js +387 -0
  130. package/dist/pdf/render.js.map +1 -0
  131. package/dist/scaffold/index.js +6 -6
  132. package/dist/scaffold/index.js.map +1 -1
  133. package/dist/scaffold/templates/{app.test.ts.tmpl → deployment.test.ts.tmpl} +3 -3
  134. package/dist/scaffold/templates/ket.workspace.ts.tmpl +4 -6
  135. package/dist/scaffold/templates/module.ts.tmpl +1 -4
  136. package/dist/server/assets.d.ts +23 -0
  137. package/dist/server/assets.d.ts.map +1 -0
  138. package/dist/server/assets.js +97 -0
  139. package/dist/server/assets.js.map +1 -0
  140. package/dist/server/boot.d.ts +157 -38
  141. package/dist/server/boot.d.ts.map +1 -1
  142. package/dist/server/boot.js +360 -138
  143. package/dist/server/boot.js.map +1 -1
  144. package/dist/server/config.d.ts +30 -10
  145. package/dist/server/config.d.ts.map +1 -1
  146. package/dist/server/config.js +73 -17
  147. package/dist/server/config.js.map +1 -1
  148. package/dist/server/ctx.d.ts +10 -0
  149. package/dist/server/ctx.d.ts.map +1 -1
  150. package/dist/server/ctx.js +266 -48
  151. package/dist/server/ctx.js.map +1 -1
  152. package/dist/server/development.d.ts +10 -0
  153. package/dist/server/development.d.ts.map +1 -0
  154. package/dist/server/development.js +15 -0
  155. package/dist/server/development.js.map +1 -0
  156. package/dist/server/fn.d.ts +22 -3
  157. package/dist/server/fn.d.ts.map +1 -1
  158. package/dist/server/fn.js +116 -32
  159. package/dist/server/fn.js.map +1 -1
  160. package/dist/server/form.d.ts +33 -0
  161. package/dist/server/form.d.ts.map +1 -0
  162. package/dist/server/form.js +47 -0
  163. package/dist/server/form.js.map +1 -0
  164. package/dist/server/http.d.ts +55 -3
  165. package/dist/server/http.d.ts.map +1 -1
  166. package/dist/server/http.js +306 -22
  167. package/dist/server/http.js.map +1 -1
  168. package/dist/server/idem.d.ts +3 -2
  169. package/dist/server/idem.d.ts.map +1 -1
  170. package/dist/server/idem.js +12 -4
  171. package/dist/server/idem.js.map +1 -1
  172. package/dist/server/jobs.js +1 -1
  173. package/dist/server/jobs.js.map +1 -1
  174. package/dist/server/log/combinators.d.ts +42 -0
  175. package/dist/server/log/combinators.d.ts.map +1 -0
  176. package/dist/server/log/combinators.js +270 -0
  177. package/dist/server/log/combinators.js.map +1 -0
  178. package/dist/server/log/console.d.ts +12 -0
  179. package/dist/server/log/console.d.ts.map +1 -0
  180. package/dist/server/log/console.js +96 -0
  181. package/dist/server/log/console.js.map +1 -0
  182. package/dist/server/log/file.d.ts +11 -0
  183. package/dist/server/log/file.d.ts.map +1 -0
  184. package/dist/server/log/file.js +61 -0
  185. package/dist/server/log/file.js.map +1 -0
  186. package/dist/server/log/index.d.ts +23 -0
  187. package/dist/server/log/index.d.ts.map +1 -0
  188. package/dist/server/log/index.js +45 -0
  189. package/dist/server/log/index.js.map +1 -0
  190. package/dist/server/log/logger.d.ts +53 -0
  191. package/dist/server/log/logger.d.ts.map +1 -0
  192. package/dist/server/log/logger.js +94 -0
  193. package/dist/server/log/logger.js.map +1 -0
  194. package/dist/server/log/memory.d.ts +11 -0
  195. package/dist/server/log/memory.d.ts.map +1 -0
  196. package/dist/server/log/memory.js +25 -0
  197. package/dist/server/log/memory.js.map +1 -0
  198. package/dist/server/log/types.d.ts +112 -0
  199. package/dist/server/log/types.d.ts.map +1 -0
  200. package/dist/server/log/types.js +58 -0
  201. package/dist/server/log/types.js.map +1 -0
  202. package/dist/server/policy.d.ts +29 -0
  203. package/dist/server/policy.d.ts.map +1 -0
  204. package/dist/server/policy.js +29 -0
  205. package/dist/server/policy.js.map +1 -0
  206. package/dist/server/queue.d.ts +1 -1
  207. package/dist/server/queue.d.ts.map +1 -1
  208. package/dist/server/queue.js.map +1 -1
  209. package/dist/server/ratelimit.d.ts +48 -0
  210. package/dist/server/ratelimit.d.ts.map +1 -0
  211. package/dist/server/ratelimit.js +102 -0
  212. package/dist/server/ratelimit.js.map +1 -0
  213. package/dist/server/respond.d.ts.map +1 -1
  214. package/dist/server/respond.js +16 -1
  215. package/dist/server/respond.js.map +1 -1
  216. package/dist/server/runtime.d.ts +18 -3
  217. package/dist/server/runtime.d.ts.map +1 -1
  218. package/dist/server/runtime.js +32 -2
  219. package/dist/server/runtime.js.map +1 -1
  220. package/dist/server/schedule.d.ts +18 -0
  221. package/dist/server/schedule.d.ts.map +1 -0
  222. package/dist/server/schedule.js +70 -0
  223. package/dist/server/schedule.js.map +1 -0
  224. package/dist/server/sequence.d.ts +42 -0
  225. package/dist/server/sequence.d.ts.map +1 -0
  226. package/dist/server/sequence.js +97 -0
  227. package/dist/server/sequence.js.map +1 -0
  228. package/dist/server/session.d.ts +21 -0
  229. package/dist/server/session.d.ts.map +1 -1
  230. package/dist/server/session.js +84 -10
  231. package/dist/server/session.js.map +1 -1
  232. package/dist/server/sessionstore.d.ts +3 -1
  233. package/dist/server/sessionstore.d.ts.map +1 -1
  234. package/dist/server/sessionstore.js +7 -3
  235. package/dist/server/sessionstore.js.map +1 -1
  236. package/dist/server/storage/index.d.ts +1 -1
  237. package/dist/server/storage/index.d.ts.map +1 -1
  238. package/dist/server/storage/index.js +61 -1
  239. package/dist/server/storage/index.js.map +1 -1
  240. package/dist/server/storage/types.d.ts +8 -0
  241. package/dist/server/storage/types.d.ts.map +1 -1
  242. package/dist/server/storage/types.js +58 -0
  243. package/dist/server/storage/types.js.map +1 -1
  244. package/dist/server/tenants.d.ts +20 -18
  245. package/dist/server/tenants.d.ts.map +1 -1
  246. package/dist/server/tenants.js +133 -84
  247. package/dist/server/tenants.js.map +1 -1
  248. package/dist/server/transport/types.js +2 -2
  249. package/dist/server/transport/types.js.map +1 -1
  250. package/dist/server/worker.d.ts +19 -3
  251. package/dist/server/worker.d.ts.map +1 -1
  252. package/dist/server/worker.js +168 -21
  253. package/dist/server/worker.js.map +1 -1
  254. package/dist/testing.d.ts +26 -10
  255. package/dist/testing.d.ts.map +1 -1
  256. package/dist/testing.js +41 -14
  257. package/dist/testing.js.map +1 -1
  258. package/dist/theme/contracts.d.ts +14 -1
  259. package/dist/theme/contracts.d.ts.map +1 -1
  260. package/dist/theme/contracts.js +35 -6
  261. package/dist/theme/contracts.js.map +1 -1
  262. package/dist/theme/index.d.ts +1 -1
  263. package/dist/theme/index.d.ts.map +1 -1
  264. package/dist/theme/index.js +1 -1
  265. package/dist/theme/index.js.map +1 -1
  266. package/dist/theme/joint-runtime.d.ts +33 -0
  267. package/dist/theme/joint-runtime.d.ts.map +1 -0
  268. package/dist/theme/joint-runtime.js +121 -0
  269. package/dist/theme/joint-runtime.js.map +1 -0
  270. package/dist/theme/joints.d.ts.map +1 -1
  271. package/dist/theme/joints.js +15 -97
  272. package/dist/theme/joints.js.map +1 -1
  273. package/dist/theme/ktl/compile.d.ts +4 -0
  274. package/dist/theme/ktl/compile.d.ts.map +1 -1
  275. package/dist/theme/ktl/compile.js +54 -1
  276. package/dist/theme/ktl/compile.js.map +1 -1
  277. package/dist/theme/ktl/parser.d.ts +4 -0
  278. package/dist/theme/ktl/parser.d.ts.map +1 -1
  279. package/dist/theme/ktl/parser.js +8 -0
  280. package/dist/theme/ktl/parser.js.map +1 -1
  281. package/dist/theme/render.d.ts +8 -0
  282. package/dist/theme/render.d.ts.map +1 -1
  283. package/dist/theme/render.js +88 -118
  284. package/dist/theme/render.js.map +1 -1
  285. package/dist/theme/tokens.d.ts +6 -0
  286. package/dist/theme/tokens.d.ts.map +1 -1
  287. package/dist/theme/tokens.js +6 -0
  288. package/dist/theme/tokens.js.map +1 -1
  289. package/dist/theme/viewmodel.d.ts +24 -0
  290. package/dist/theme/viewmodel.d.ts.map +1 -1
  291. package/dist/theme/viewmodel.js +75 -6
  292. package/dist/theme/viewmodel.js.map +1 -1
  293. package/dist/types.d.ts +304 -56
  294. package/dist/types.d.ts.map +1 -1
  295. package/package.json +6 -2
  296. package/dist/kernel/apps.d.ts +0 -43
  297. package/dist/kernel/apps.d.ts.map +0 -1
  298. package/dist/kernel/apps.js +0 -234
  299. package/dist/kernel/apps.js.map +0 -1
@@ -0,0 +1,83 @@
1
+ const u16 = (b, o) => new DataView(b.buffer, b.byteOffset, b.byteLength).getUint16(o);
2
+ const i16 = (b, o) => new DataView(b.buffer, b.byteOffset, b.byteLength).getInt16(o);
3
+ const u32 = (b, o) => new DataView(b.buffer, b.byteOffset, b.byteLength).getUint32(o);
4
+ export function parseTrueType(bytes) {
5
+ const tables = {};
6
+ const count = u16(bytes, 4);
7
+ for (let i = 0; i < count; i++) {
8
+ const at = 12 + i * 16;
9
+ const tag = String.fromCharCode(...bytes.slice(at, at + 4));
10
+ tables[tag] = { offset: u32(bytes, at + 8), length: u32(bytes, at + 12) };
11
+ }
12
+ for (const tag of ['head', 'hhea', 'hmtx', 'maxp', 'cmap'])
13
+ if (!tables[tag])
14
+ throw new Error(`font misses ${tag}`);
15
+ const head = tables.head.offset;
16
+ const hhea = tables.hhea.offset;
17
+ const hmtx = tables.hmtx.offset;
18
+ const numGlyphs = u16(bytes, tables.maxp.offset + 4);
19
+ const metrics = u16(bytes, hhea + 34);
20
+ const widths = [];
21
+ for (let glyph = 0; glyph < numGlyphs; glyph++)
22
+ widths.push(u16(bytes, hmtx + Math.min(glyph, metrics - 1) * 4));
23
+ const cmap = tables.cmap.offset;
24
+ const subtables = u16(bytes, cmap + 2);
25
+ let chosen = 0;
26
+ for (let i = 0; i < subtables; i++) {
27
+ const at = cmap + 4 + i * 8;
28
+ const platform = u16(bytes, at);
29
+ const encoding = u16(bytes, at + 2);
30
+ const offset = cmap + u32(bytes, at + 4);
31
+ const format = u16(bytes, offset);
32
+ if (platform === 3 && ((encoding === 10 && format === 12) || (!chosen && encoding === 1 && format === 4)))
33
+ chosen = offset;
34
+ }
35
+ if (!chosen)
36
+ throw new Error('font has no Unicode cmap');
37
+ const format = u16(bytes, chosen);
38
+ const glyphOf = format === 12
39
+ ? (point) => {
40
+ const groups = u32(bytes, chosen + 12);
41
+ for (let i = 0; i < groups; i++) {
42
+ const at = chosen + 16 + i * 12;
43
+ const start = u32(bytes, at);
44
+ const end = u32(bytes, at + 4);
45
+ if (point >= start && point <= end)
46
+ return u32(bytes, at + 8) + point - start;
47
+ }
48
+ return 0;
49
+ }
50
+ : (point) => {
51
+ if (point > 0xffff)
52
+ return 0;
53
+ const segCount = u16(bytes, chosen + 6) / 2;
54
+ const endCodes = chosen + 14;
55
+ const startCodes = endCodes + segCount * 2 + 2;
56
+ const deltas = startCodes + segCount * 2;
57
+ const ranges = deltas + segCount * 2;
58
+ for (let i = 0; i < segCount; i++) {
59
+ const end = u16(bytes, endCodes + i * 2);
60
+ if (point > end)
61
+ continue;
62
+ const start = u16(bytes, startCodes + i * 2);
63
+ if (point < start)
64
+ return 0;
65
+ const delta = i16(bytes, deltas + i * 2);
66
+ const range = u16(bytes, ranges + i * 2);
67
+ if (!range)
68
+ return (point + delta) & 0xffff;
69
+ const glyph = u16(bytes, ranges + i * 2 + range + (point - start) * 2);
70
+ return glyph ? (glyph + delta) & 0xffff : 0;
71
+ }
72
+ return 0;
73
+ };
74
+ return {
75
+ bytes,
76
+ unitsPerEm: u16(bytes, head + 18),
77
+ ascent: i16(bytes, hhea + 4),
78
+ descent: i16(bytes, hhea + 6),
79
+ glyphOf,
80
+ widthOf: (glyph) => widths[glyph] ?? widths[0] ?? 0,
81
+ };
82
+ }
83
+ //# sourceMappingURL=font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/font.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACzG,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACxG,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAWzG,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,MAAM,GAA0B,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;IAC3E,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC,MAAM,CAAA;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC,MAAM,CAAA;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC,MAAM,CAAA;IAChC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;IACrC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAElE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC,MAAM,CAAA;IAChC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IACtC,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACjC,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC;YACvG,MAAM,GAAG,MAAM,CAAA;IACnB,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACjC,MAAM,OAAO,GACX,MAAM,KAAK,EAAE;QACX,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE;YAChB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,CAAA;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAA;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;gBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC9B,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;oBAAE,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAA;YAC/E,CAAC;YACD,OAAO,CAAC,CAAA;QACV,CAAC;QACH,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE;YAChB,IAAI,KAAK,GAAG,MAAM;gBAAE,OAAO,CAAC,CAAA;YAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YAC3C,MAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAA;YAC5B,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAA;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxC,IAAI,KAAK,GAAG,GAAG;oBAAE,SAAQ;gBACzB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC5C,IAAI,KAAK,GAAG,KAAK;oBAAE,OAAO,CAAC,CAAA;gBAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxC,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,MAAM,CAAA;gBAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;gBACtE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7C,CAAC;YACD,OAAO,CAAC,CAAA;QACV,CAAC,CAAA;IACP,OAAO;QACL,KAAK;QACL,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC;QAC7B,OAAO;QACP,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;KACpD,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type PdfImage = {
2
+ width: number;
3
+ height: number;
4
+ bytes: Uint8Array;
5
+ filter: '/DCTDecode' | '/FlateDecode';
6
+ };
7
+ export declare function parseImage(bytes: Uint8Array): PdfImage;
8
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/image.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,EAAE,YAAY,GAAG,cAAc,CAAA;CACtC,CAAA;AA0FD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAItD"}
@@ -0,0 +1,94 @@
1
+ import { deflateSync, inflateSync } from 'node:zlib';
2
+ const u32 = (bytes, at) => new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(at);
3
+ const concat = (chunks) => {
4
+ const out = new Uint8Array(chunks.reduce((sum, chunk) => sum + chunk.length, 0));
5
+ let at = 0;
6
+ for (const chunk of chunks) {
7
+ out.set(chunk, at);
8
+ at += chunk.length;
9
+ }
10
+ return out;
11
+ };
12
+ const paeth = (a, b, c) => {
13
+ const p = a + b - c;
14
+ const pa = Math.abs(p - a);
15
+ const pb = Math.abs(p - b);
16
+ const pc = Math.abs(p - c);
17
+ return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
18
+ };
19
+ function png(bytes) {
20
+ const width = u32(bytes, 16);
21
+ const height = u32(bytes, 20);
22
+ const depth = bytes[24];
23
+ const color = bytes[25];
24
+ const interlace = bytes[28];
25
+ if (depth !== 8 || ![2, 6].includes(color) || interlace !== 0)
26
+ throw new Error('PNG images must be non-interlaced 8-bit RGB or RGBA');
27
+ const parts = [];
28
+ for (let at = 8; at + 12 <= bytes.length;) {
29
+ const length = u32(bytes, at);
30
+ const type = String.fromCharCode(...bytes.slice(at + 4, at + 8));
31
+ if (type === 'IDAT')
32
+ parts.push(bytes.slice(at + 8, at + 8 + length));
33
+ at += length + 12;
34
+ }
35
+ const packed = inflateSync(concat(parts));
36
+ const channels = color === 6 ? 4 : 3;
37
+ const stride = width * channels;
38
+ const raw = new Uint8Array(height * stride);
39
+ let input = 0;
40
+ for (let y = 0; y < height; y++) {
41
+ const filter = packed[input++];
42
+ for (let x = 0; x < stride; x++) {
43
+ const value = packed[input++];
44
+ const left = x >= channels ? raw[y * stride + x - channels] : 0;
45
+ const above = y ? raw[(y - 1) * stride + x] : 0;
46
+ const upperLeft = y && x >= channels ? raw[(y - 1) * stride + x - channels] : 0;
47
+ raw[y * stride + x] =
48
+ filter === 0
49
+ ? value
50
+ : filter === 1
51
+ ? (value + left) & 255
52
+ : filter === 2
53
+ ? (value + above) & 255
54
+ : filter === 3
55
+ ? (value + Math.floor((left + above) / 2)) & 255
56
+ : filter === 4
57
+ ? (value + paeth(left, above, upperLeft)) & 255
58
+ : 0;
59
+ }
60
+ }
61
+ const rgb = new Uint8Array(width * height * 3);
62
+ for (let from = 0, to = 0; from < raw.length; from += channels, to += 3) {
63
+ const alpha = channels === 4 ? raw[from + 3] / 255 : 1;
64
+ rgb[to] = Math.round(raw[from] * alpha + 255 * (1 - alpha));
65
+ rgb[to + 1] = Math.round(raw[from + 1] * alpha + 255 * (1 - alpha));
66
+ rgb[to + 2] = Math.round(raw[from + 2] * alpha + 255 * (1 - alpha));
67
+ }
68
+ return { width, height, bytes: deflateSync(rgb), filter: '/FlateDecode' };
69
+ }
70
+ function jpeg(bytes) {
71
+ for (let at = 2; at + 9 < bytes.length;) {
72
+ if (bytes[at] !== 0xff) {
73
+ at++;
74
+ continue;
75
+ }
76
+ const marker = bytes[at + 1];
77
+ const length = (bytes[at + 2] << 8) | bytes[at + 3];
78
+ if ([0xc0, 0xc1, 0xc2, 0xc3].includes(marker)) {
79
+ const height = (bytes[at + 5] << 8) | bytes[at + 6];
80
+ const width = (bytes[at + 7] << 8) | bytes[at + 8];
81
+ return { width, height, bytes, filter: '/DCTDecode' };
82
+ }
83
+ at += 2 + length;
84
+ }
85
+ throw new Error('JPEG dimensions are missing');
86
+ }
87
+ export function parseImage(bytes) {
88
+ if (bytes[0] === 0x89 && String.fromCharCode(...bytes.slice(1, 4)) === 'PNG')
89
+ return png(bytes);
90
+ if (bytes[0] === 0xff && bytes[1] === 0xd8)
91
+ return jpeg(bytes);
92
+ throw new Error('report images must be PNG or JPEG');
93
+ }
94
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { CompileOpts, Scope } from '../theme/ktl/compile.ts';
2
+ export { parseReportMarkup, renderReportHtml } from './markup.ts';
3
+ export type { ReportDocument, ReportElement, ReportNode, ReportTag } from './markup.ts';
4
+ export { renderPdf } from './render.ts';
5
+ export type { PdfRenderOptions } from './render.ts';
6
+ export { parseTrueType } from './font.ts';
7
+ export type { TrueTypeFont } from './font.ts';
8
+ export { parseImage } from './image.ts';
9
+ export type { PdfImage } from './image.ts';
10
+ /** Static Inter shipped with the framework for deterministic server-side PDF output. */
11
+ export declare const interFontUrl: (weight?: 'regular' | 'semibold' | 'bold') => URL;
12
+ export declare function compileReportTemplate(source: string, opts?: Omit<CompileOpts, 'mode'>): {
13
+ render(scope: Scope): import("./markup.ts").ReportElement;
14
+ };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,wFAAwF;AACxF,eAAO,MAAM,YAAY,YAAY,SAAS,GAAG,UAAU,GAAG,MAAM,KAAe,GAIhF,CAAA;AAEH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAM;IAGtF,MAAM,QAAQ,KAAK;EAItB"}
@@ -0,0 +1,17 @@
1
+ import { compileKtl } from '../theme/ktl/compile.js';
2
+ import { parseReportMarkup } from './markup.js';
3
+ export { parseReportMarkup, renderReportHtml } from './markup.js';
4
+ export { renderPdf } from './render.js';
5
+ export { parseTrueType } from './font.js';
6
+ export { parseImage } from './image.js';
7
+ /** Static Inter shipped with the framework for deterministic server-side PDF output. */
8
+ export const interFontUrl = (weight = 'regular') => new URL(`./assets/Inter-${weight === 'semibold' ? 'SemiBold' : weight === 'bold' ? 'Bold' : 'Regular'}.ttf`, import.meta.url);
9
+ export function compileReportTemplate(source, opts = {}) {
10
+ const template = compileKtl(source, { ...opts, mode: 'report' });
11
+ return {
12
+ render(scope) {
13
+ return parseReportMarkup(template.render(scope));
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvC,wFAAwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,GAAoC,SAAS,EAAO,EAAE,CACvF,IAAI,GAAG,CACL,kBAAkB,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,EACnG,OAAO,IAAI,CAAC,GAAG,CAChB,CAAA;AAEH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,IAAI,GAA8B,EAAE;IACxF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAChE,OAAO;QACL,MAAM,CAAC,KAAY;YACjB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAClD,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type ReportText = {
2
+ kind: 'text';
3
+ value: string;
4
+ };
5
+ export type ReportElement = {
6
+ kind: 'element';
7
+ tag: ReportTag;
8
+ attrs: Record<string, string>;
9
+ children: ReportNode[];
10
+ };
11
+ export type ReportNode = ReportText | ReportElement;
12
+ export type ReportDocument = ReportElement;
13
+ export type ReportTag = 'report' | 'header' | 'footer' | 'section' | 'stack' | 'row' | 'text' | 'table' | 'thead' | 'tbody' | 'tr' | 'th' | 'td' | 'image' | 'page-break';
14
+ export declare function parseReportMarkup(source: string, limits?: {
15
+ maxNodes?: number;
16
+ maxText?: number;
17
+ }): ReportDocument;
18
+ export declare function renderReportHtml(document: ReportDocument): string;
19
+ //# sourceMappingURL=markup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/markup.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACxD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,SAAS,CAAA;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AACD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,aAAa,CAAA;AACnD,MAAM,MAAM,cAAc,GAAG,aAAa,CAAA;AAE1C,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,OAAO,GACP,KAAK,GACL,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,YAAY,CAAA;AAoDhB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,cAAc,CAsEhB;AAKD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiBjE"}
@@ -0,0 +1,146 @@
1
+ import { KetError } from '../kernel/errors.js';
2
+ const TAGS = new Set([
3
+ 'report',
4
+ 'header',
5
+ 'footer',
6
+ 'section',
7
+ 'stack',
8
+ 'row',
9
+ 'text',
10
+ 'table',
11
+ 'thead',
12
+ 'tbody',
13
+ 'tr',
14
+ 'th',
15
+ 'td',
16
+ 'image',
17
+ 'page-break',
18
+ ]);
19
+ const ATTRS = new Set([
20
+ 'paper',
21
+ 'orientation',
22
+ 'margin',
23
+ 'margin-top',
24
+ 'margin-right',
25
+ 'margin-bottom',
26
+ 'margin-left',
27
+ 'size',
28
+ 'weight',
29
+ 'tone',
30
+ 'align',
31
+ 'gap',
32
+ 'width',
33
+ 'height',
34
+ 'columns',
35
+ 'label',
36
+ 'src',
37
+ 'alt',
38
+ ]);
39
+ const entities = (value) => value.replace(/&(#x[0-9a-f]+|#\d+|amp|lt|gt|quot|apos);/gi, (_, entity) => {
40
+ if (entity === 'amp')
41
+ return '&';
42
+ if (entity === 'lt')
43
+ return '<';
44
+ if (entity === 'gt')
45
+ return '>';
46
+ if (entity === 'quot')
47
+ return '"';
48
+ if (entity === 'apos')
49
+ return "'";
50
+ const point = entity[1]?.toLowerCase() === 'x' ? Number.parseInt(entity.slice(2), 16) : Number(entity.slice(1));
51
+ return Number.isFinite(point) ? String.fromCodePoint(point) : '';
52
+ });
53
+ export function parseReportMarkup(source, limits = {}) {
54
+ if (source.length > (limits.maxText ?? 1_000_000))
55
+ throw new KetError({
56
+ code: 'E_REPORT_MARKUP_LIMIT',
57
+ message: 'rendered report markup exceeds its size limit',
58
+ });
59
+ if (/<!DOCTYPE|<!ENTITY|<\?|<!--/i.test(source))
60
+ throw new KetError({
61
+ code: 'E_REPORT_MARKUP_UNSAFE',
62
+ message: 'report markup cannot contain declarations',
63
+ });
64
+ const roots = [];
65
+ const stack = [];
66
+ const token = /<[^>]+>|[^<]+/g;
67
+ let count = 0;
68
+ for (const match of source.matchAll(token)) {
69
+ const value = match[0];
70
+ if (!value.startsWith('<')) {
71
+ if (!value.trim())
72
+ continue;
73
+ const node = { kind: 'text', value: entities(value) };
74
+ (stack.at(-1)?.children ?? roots).push(node);
75
+ count++;
76
+ continue;
77
+ }
78
+ if (value.startsWith('</')) {
79
+ const name = value.slice(2, -1).trim();
80
+ const open = stack.pop();
81
+ if (!open || open.tag !== name)
82
+ throw new KetError({ code: 'E_REPORT_MARKUP_CLOSE', message: `unexpected closing tag </${name}>` });
83
+ continue;
84
+ }
85
+ const selfClosing = value.endsWith('/>');
86
+ const inside = value.slice(1, selfClosing ? -2 : -1).trim();
87
+ const name = inside.match(/^[a-z][a-z-]*/)?.[0];
88
+ if (!name || !TAGS.has(name))
89
+ throw new KetError({ code: 'E_REPORT_MARKUP_TAG', message: `unsupported report tag <${name ?? '?'}>` });
90
+ const attrs = {};
91
+ const rest = inside.slice(name.length);
92
+ let consumed = '';
93
+ for (const attr of rest.matchAll(/\s+([a-z][a-z-]*)\s*=\s*(["'])(.*?)\2/g)) {
94
+ const key = attr[1];
95
+ if (!ATTRS.has(key))
96
+ throw new KetError({
97
+ code: 'E_REPORT_MARKUP_ATTR',
98
+ message: `unsupported attribute "${key}" on <${name}>`,
99
+ });
100
+ attrs[key] = entities(attr[3]);
101
+ consumed += attr[0];
102
+ }
103
+ if (rest.trim() !== consumed.trim())
104
+ throw new KetError({ code: 'E_REPORT_MARKUP_ATTR', message: `malformed attribute on <${name}>` });
105
+ const node = { kind: 'element', tag: name, attrs, children: [] };
106
+ (stack.at(-1)?.children ?? roots).push(node);
107
+ count++;
108
+ if (count > (limits.maxNodes ?? 20_000))
109
+ throw new KetError({ code: 'E_REPORT_MARKUP_LIMIT', message: 'report markup has too many nodes' });
110
+ if (!selfClosing && name !== 'page-break' && name !== 'image')
111
+ stack.push(node);
112
+ }
113
+ if (stack.length)
114
+ throw new KetError({
115
+ code: 'E_REPORT_MARKUP_OPEN',
116
+ message: `unclosed report tag <${stack.at(-1)?.tag}>`,
117
+ });
118
+ if (roots.length !== 1 || roots[0]?.kind !== 'element' || roots[0].tag !== 'report')
119
+ throw new KetError({
120
+ code: 'E_REPORT_MARKUP_ROOT',
121
+ message: 'report markup needs exactly one <report> root',
122
+ });
123
+ return roots[0];
124
+ }
125
+ const esc = (value) => value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;');
126
+ export function renderReportHtml(document) {
127
+ const render = (node) => {
128
+ if (node.kind === 'text')
129
+ return esc(node.value);
130
+ if (node.tag === 'page-break')
131
+ return '<div class="ket-report-page-break"></div>';
132
+ if (node.tag === 'image')
133
+ return `<div class="ket-report-image" data-image-key="${esc(node.attrs.src ?? '')}" aria-label="${esc(node.attrs.alt ?? '')}"></div>`;
134
+ const tag = ['table', 'thead', 'tbody', 'tr'].includes(node.tag)
135
+ ? node.tag
136
+ : node.tag === 'th' || node.tag === 'td'
137
+ ? node.tag
138
+ : 'div';
139
+ const attrs = Object.entries(node.attrs)
140
+ .map(([key, value]) => ` data-${key}="${esc(value)}"`)
141
+ .join('');
142
+ return `<${tag} class="ket-report-${node.tag}"${attrs}>${node.children.map(render).join('')}</${tag}>`;
143
+ };
144
+ return render(document);
145
+ }
146
+ //# sourceMappingURL=markup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markup.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/markup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AA6B9C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAY;IAC9B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,YAAY;CACb,CAAC,CAAA;AACF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;IACpB,OAAO;IACP,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,eAAe;IACf,aAAa;IACb,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,KAAK;IACL,KAAK;CACN,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAU,EAAE,CACzC,KAAK,CAAC,OAAO,CAAC,4CAA4C,EAAE,CAAC,CAAC,EAAE,MAAc,EAAE,EAAE;IAChF,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,GAAG,CAAA;IAChC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IAC/B,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IAC/B,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACjC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACjC,MAAM,KAAK,GACT,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACnG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAClE,CAAC,CAAC,CAAA;AAEJ,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,MAAM,GAA4C,EAAE;IAEpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QAC/C,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAA;IACJ,IAAI,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,2CAA2C;SACrD,CAAC,CAAA;IAEJ,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAoB,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,gBAAgB,CAAA;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAAE,SAAQ;YAC3B,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAChE;YAAA,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7C,KAAK,EAAE,CAAA;YACP,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;YACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;gBAC5B,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,IAAI,GAAG,EAAE,CAAC,CAAA;YACrG,SAAQ;QACV,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAA0B,CAAA;QACxE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,2BAA2B,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC,CAAA;QACzG,MAAM,KAAK,GAA2B,EAAE,CAAA;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAA;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBACjB,MAAM,IAAI,QAAQ,CAAC;oBACjB,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,0BAA0B,GAAG,SAAS,IAAI,GAAG;iBACvD,CAAC,CAAA;YACJ,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAA;YACxC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;YACjC,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,2BAA2B,IAAI,GAAG,EAAE,CAAC,CAAA;QACnG,MAAM,IAAI,GAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC9E;QAAA,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,KAAK,EAAE,CAAA;QACP,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;YACrC,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAA;QACpG,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjF,CAAC;IACD,IAAI,KAAK,CAAC,MAAM;QACd,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,wBAAwB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG;SACtD,CAAC,CAAA;IACJ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ;QACjF,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAA;IACJ,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,KAAa,EAAU,EAAE,CACpC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;AAE1G,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAU,EAAE;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,IAAI,CAAC,GAAG,KAAK,YAAY;YAAE,OAAO,2CAA2C,CAAA;QACjF,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO;YACtB,OAAO,iDAAiD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,UAAU,CAAA;QACvI,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;gBACtC,CAAC,CAAC,IAAI,CAAC,GAAG;gBACV,CAAC,CAAC,KAAK,CAAA;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;aACrD,IAAI,CAAC,EAAE,CAAC,CAAA;QACX,OAAO,IAAI,GAAG,sBAAsB,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAA;IACxG,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReportDocument } from './markup.ts';
2
+ export type PdfRenderOptions = {
3
+ /** Inter Regular, retained as the fallback for backwards compatibility. */
4
+ font: Uint8Array;
5
+ /** Inter SemiBold used by table headings and `weight="semibold"`. */
6
+ semiboldFont?: Uint8Array;
7
+ /** Inter Bold used by `weight="bold"`. */
8
+ boldFont?: Uint8Array;
9
+ /** Attachment bytes keyed by the `<image src="...">` identifier. */
10
+ images?: Record<string, Uint8Array>;
11
+ maxPages?: number;
12
+ };
13
+ export declare function renderPdf(document: ReportDocument, options: PdfRenderOptions): Uint8Array;
14
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAA;AAI5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,UAAU,CAAA;IAChB,qEAAqE;IACrE,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAuND,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,UAAU,CA4QzF"}