@pdfme/schemas 5.5.10-dev.11 → 5.5.10-dev.125

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 (398) hide show
  1. package/package.json +44 -60
  2. package/src/barcodes/helper.ts +2 -2
  3. package/src/barcodes/types.ts +2 -2
  4. package/src/builtins.ts +8 -0
  5. package/src/date/helper.ts +118 -70
  6. package/src/graphics/image.ts +3 -3
  7. package/src/graphics/signature.ts +136 -0
  8. package/src/index.ts +4 -4
  9. package/src/multiVariableText/propPanel.ts +17 -8
  10. package/src/multiVariableText/types.ts +2 -2
  11. package/src/multiVariableText/uiRender.ts +18 -31
  12. package/src/multiVariableText/variables.ts +63 -0
  13. package/src/tables/tableHelper.ts +3 -2
  14. package/src/tables/types.ts +2 -2
  15. package/src/tables/uiRender.ts +1 -1
  16. package/src/tables.ts +1 -0
  17. package/src/text/helper.ts +22 -5
  18. package/src/text/pdfRender.ts +2 -5
  19. package/src/text/types.ts +2 -2
  20. package/src/utils.ts +87 -14
  21. package/tsconfig.build.json +14 -0
  22. package/tsconfig.json +14 -4
  23. package/vite.config.mts +51 -0
  24. package/dist/cjs/__tests__/barcode.test.js +0 -354
  25. package/dist/cjs/__tests__/barcode.test.js.map +0 -1
  26. package/dist/cjs/__tests__/multiVariableText.test.js +0 -102
  27. package/dist/cjs/__tests__/multiVariableText.test.js.map +0 -1
  28. package/dist/cjs/__tests__/text.test.js +0 -419
  29. package/dist/cjs/__tests__/text.test.js.map +0 -1
  30. package/dist/cjs/__tests__/utils.test.js +0 -193
  31. package/dist/cjs/__tests__/utils.test.js.map +0 -1
  32. package/dist/cjs/src/barcodes/constants.js +0 -21
  33. package/dist/cjs/src/barcodes/constants.js.map +0 -1
  34. package/dist/cjs/src/barcodes/helper.js +0 -161
  35. package/dist/cjs/src/barcodes/helper.js.map +0 -1
  36. package/dist/cjs/src/barcodes/index.js +0 -18
  37. package/dist/cjs/src/barcodes/index.js.map +0 -1
  38. package/dist/cjs/src/barcodes/pdfRender.js +0 -29
  39. package/dist/cjs/src/barcodes/pdfRender.js.map +0 -1
  40. package/dist/cjs/src/barcodes/propPanel.js +0 -241
  41. package/dist/cjs/src/barcodes/propPanel.js.map +0 -1
  42. package/dist/cjs/src/barcodes/types.js +0 -3
  43. package/dist/cjs/src/barcodes/types.js.map +0 -1
  44. package/dist/cjs/src/barcodes/uiRender.js +0 -91
  45. package/dist/cjs/src/barcodes/uiRender.js.map +0 -1
  46. package/dist/cjs/src/checkbox/index.js +0 -62
  47. package/dist/cjs/src/checkbox/index.js.map +0 -1
  48. package/dist/cjs/src/constants.js +0 -6
  49. package/dist/cjs/src/constants.js.map +0 -1
  50. package/dist/cjs/src/date/date.js +0 -9
  51. package/dist/cjs/src/date/date.js.map +0 -1
  52. package/dist/cjs/src/date/dateTime.js +0 -9
  53. package/dist/cjs/src/date/dateTime.js.map +0 -1
  54. package/dist/cjs/src/date/helper.js +0 -462
  55. package/dist/cjs/src/date/helper.js.map +0 -1
  56. package/dist/cjs/src/date/time.js +0 -9
  57. package/dist/cjs/src/date/time.js.map +0 -1
  58. package/dist/cjs/src/date/types.js +0 -3
  59. package/dist/cjs/src/date/types.js.map +0 -1
  60. package/dist/cjs/src/graphics/image.js +0 -172
  61. package/dist/cjs/src/graphics/image.js.map +0 -1
  62. package/dist/cjs/src/graphics/imagehelper.js +0 -124
  63. package/dist/cjs/src/graphics/imagehelper.js.map +0 -1
  64. package/dist/cjs/src/graphics/svg.js +0 -112
  65. package/dist/cjs/src/graphics/svg.js.map +0 -1
  66. package/dist/cjs/src/index.js +0 -41
  67. package/dist/cjs/src/index.js.map +0 -1
  68. package/dist/cjs/src/multiVariableText/helper.js +0 -55
  69. package/dist/cjs/src/multiVariableText/helper.js.map +0 -1
  70. package/dist/cjs/src/multiVariableText/index.js +0 -16
  71. package/dist/cjs/src/multiVariableText/index.js.map +0 -1
  72. package/dist/cjs/src/multiVariableText/pdfRender.js +0 -20
  73. package/dist/cjs/src/multiVariableText/pdfRender.js.map +0 -1
  74. package/dist/cjs/src/multiVariableText/propPanel.js +0 -148
  75. package/dist/cjs/src/multiVariableText/propPanel.js.map +0 -1
  76. package/dist/cjs/src/multiVariableText/types.js +0 -3
  77. package/dist/cjs/src/multiVariableText/types.js.map +0 -1
  78. package/dist/cjs/src/multiVariableText/uiRender.js +0 -146
  79. package/dist/cjs/src/multiVariableText/uiRender.js.map +0 -1
  80. package/dist/cjs/src/radioGroup/index.js +0 -93
  81. package/dist/cjs/src/radioGroup/index.js.map +0 -1
  82. package/dist/cjs/src/sanitize.js +0 -57
  83. package/dist/cjs/src/sanitize.js.map +0 -1
  84. package/dist/cjs/src/select/index.js +0 -175
  85. package/dist/cjs/src/select/index.js.map +0 -1
  86. package/dist/cjs/src/shapes/line.js +0 -76
  87. package/dist/cjs/src/shapes/line.js.map +0 -1
  88. package/dist/cjs/src/shapes/rectAndEllipse.js +0 -140
  89. package/dist/cjs/src/shapes/rectAndEllipse.js.map +0 -1
  90. package/dist/cjs/src/tables/cell.js +0 -126
  91. package/dist/cjs/src/tables/cell.js.map +0 -1
  92. package/dist/cjs/src/tables/classes.js +0 -467
  93. package/dist/cjs/src/tables/classes.js.map +0 -1
  94. package/dist/cjs/src/tables/dynamicTemplate.js +0 -66
  95. package/dist/cjs/src/tables/dynamicTemplate.js.map +0 -1
  96. package/dist/cjs/src/tables/helper.js +0 -189
  97. package/dist/cjs/src/tables/helper.js.map +0 -1
  98. package/dist/cjs/src/tables/index.js +0 -15
  99. package/dist/cjs/src/tables/index.js.map +0 -1
  100. package/dist/cjs/src/tables/pdfRender.js +0 -109
  101. package/dist/cjs/src/tables/pdfRender.js.map +0 -1
  102. package/dist/cjs/src/tables/propPanel.js +0 -108
  103. package/dist/cjs/src/tables/propPanel.js.map +0 -1
  104. package/dist/cjs/src/tables/tableHelper.js +0 -200
  105. package/dist/cjs/src/tables/tableHelper.js.map +0 -1
  106. package/dist/cjs/src/tables/types.js +0 -3
  107. package/dist/cjs/src/tables/types.js.map +0 -1
  108. package/dist/cjs/src/tables/uiRender.js +0 -368
  109. package/dist/cjs/src/tables/uiRender.js.map +0 -1
  110. package/dist/cjs/src/text/constants.js +0 -97
  111. package/dist/cjs/src/text/constants.js.map +0 -1
  112. package/dist/cjs/src/text/extraFormatter.js +0 -49
  113. package/dist/cjs/src/text/extraFormatter.js.map +0 -1
  114. package/dist/cjs/src/text/helper.js +0 -504
  115. package/dist/cjs/src/text/helper.js.map +0 -1
  116. package/dist/cjs/src/text/icons/index.js +0 -16
  117. package/dist/cjs/src/text/icons/index.js.map +0 -1
  118. package/dist/cjs/src/text/index.js +0 -15
  119. package/dist/cjs/src/text/index.js.map +0 -1
  120. package/dist/cjs/src/text/pdfRender.js +0 -170
  121. package/dist/cjs/src/text/pdfRender.js.map +0 -1
  122. package/dist/cjs/src/text/propPanel.js +0 -161
  123. package/dist/cjs/src/text/propPanel.js.map +0 -1
  124. package/dist/cjs/src/text/types.js +0 -3
  125. package/dist/cjs/src/text/types.js.map +0 -1
  126. package/dist/cjs/src/text/uiRender.js +0 -231
  127. package/dist/cjs/src/text/uiRender.js.map +0 -1
  128. package/dist/cjs/src/utils.js +0 -230
  129. package/dist/cjs/src/utils.js.map +0 -1
  130. package/dist/esm/__tests__/barcode.test.js +0 -349
  131. package/dist/esm/__tests__/barcode.test.js.map +0 -1
  132. package/dist/esm/__tests__/multiVariableText.test.js +0 -100
  133. package/dist/esm/__tests__/multiVariableText.test.js.map +0 -1
  134. package/dist/esm/__tests__/text.test.js +0 -384
  135. package/dist/esm/__tests__/text.test.js.map +0 -1
  136. package/dist/esm/__tests__/utils.test.js +0 -191
  137. package/dist/esm/__tests__/utils.test.js.map +0 -1
  138. package/dist/esm/src/barcodes/constants.js +0 -18
  139. package/dist/esm/src/barcodes/constants.js.map +0 -1
  140. package/dist/esm/src/barcodes/helper.js +0 -151
  141. package/dist/esm/src/barcodes/helper.js.map +0 -1
  142. package/dist/esm/src/barcodes/index.js +0 -16
  143. package/dist/esm/src/barcodes/index.js.map +0 -1
  144. package/dist/esm/src/barcodes/pdfRender.js +0 -25
  145. package/dist/esm/src/barcodes/pdfRender.js.map +0 -1
  146. package/dist/esm/src/barcodes/propPanel.js +0 -237
  147. package/dist/esm/src/barcodes/propPanel.js.map +0 -1
  148. package/dist/esm/src/barcodes/types.js +0 -2
  149. package/dist/esm/src/barcodes/types.js.map +0 -1
  150. package/dist/esm/src/barcodes/uiRender.js +0 -87
  151. package/dist/esm/src/barcodes/uiRender.js.map +0 -1
  152. package/dist/esm/src/checkbox/index.js +0 -57
  153. package/dist/esm/src/checkbox/index.js.map +0 -1
  154. package/dist/esm/src/constants.js +0 -3
  155. package/dist/esm/src/constants.js.map +0 -1
  156. package/dist/esm/src/date/date.js +0 -7
  157. package/dist/esm/src/date/date.js.map +0 -1
  158. package/dist/esm/src/date/dateTime.js +0 -7
  159. package/dist/esm/src/date/dateTime.js.map +0 -1
  160. package/dist/esm/src/date/helper.js +0 -422
  161. package/dist/esm/src/date/helper.js.map +0 -1
  162. package/dist/esm/src/date/time.js +0 -7
  163. package/dist/esm/src/date/time.js.map +0 -1
  164. package/dist/esm/src/date/types.js +0 -2
  165. package/dist/esm/src/date/types.js.map +0 -1
  166. package/dist/esm/src/graphics/image.js +0 -170
  167. package/dist/esm/src/graphics/image.js.map +0 -1
  168. package/dist/esm/src/graphics/imagehelper.js +0 -120
  169. package/dist/esm/src/graphics/imagehelper.js.map +0 -1
  170. package/dist/esm/src/graphics/svg.js +0 -110
  171. package/dist/esm/src/graphics/svg.js.map +0 -1
  172. package/dist/esm/src/index.js +0 -21
  173. package/dist/esm/src/index.js.map +0 -1
  174. package/dist/esm/src/multiVariableText/helper.js +0 -50
  175. package/dist/esm/src/multiVariableText/helper.js.map +0 -1
  176. package/dist/esm/src/multiVariableText/index.js +0 -14
  177. package/dist/esm/src/multiVariableText/index.js.map +0 -1
  178. package/dist/esm/src/multiVariableText/pdfRender.js +0 -16
  179. package/dist/esm/src/multiVariableText/pdfRender.js.map +0 -1
  180. package/dist/esm/src/multiVariableText/propPanel.js +0 -145
  181. package/dist/esm/src/multiVariableText/propPanel.js.map +0 -1
  182. package/dist/esm/src/multiVariableText/types.js +0 -2
  183. package/dist/esm/src/multiVariableText/types.js.map +0 -1
  184. package/dist/esm/src/multiVariableText/uiRender.js +0 -142
  185. package/dist/esm/src/multiVariableText/uiRender.js.map +0 -1
  186. package/dist/esm/src/radioGroup/index.js +0 -88
  187. package/dist/esm/src/radioGroup/index.js.map +0 -1
  188. package/dist/esm/src/sanitize.js +0 -50
  189. package/dist/esm/src/sanitize.js.map +0 -1
  190. package/dist/esm/src/select/index.js +0 -170
  191. package/dist/esm/src/select/index.js.map +0 -1
  192. package/dist/esm/src/shapes/line.js +0 -74
  193. package/dist/esm/src/shapes/line.js.map +0 -1
  194. package/dist/esm/src/shapes/rectAndEllipse.js +0 -137
  195. package/dist/esm/src/shapes/rectAndEllipse.js.map +0 -1
  196. package/dist/esm/src/tables/cell.js +0 -121
  197. package/dist/esm/src/tables/cell.js.map +0 -1
  198. package/dist/esm/src/tables/classes.js +0 -460
  199. package/dist/esm/src/tables/classes.js.map +0 -1
  200. package/dist/esm/src/tables/dynamicTemplate.js +0 -62
  201. package/dist/esm/src/tables/dynamicTemplate.js.map +0 -1
  202. package/dist/esm/src/tables/helper.js +0 -181
  203. package/dist/esm/src/tables/helper.js.map +0 -1
  204. package/dist/esm/src/tables/index.js +0 -13
  205. package/dist/esm/src/tables/index.js.map +0 -1
  206. package/dist/esm/src/tables/pdfRender.js +0 -102
  207. package/dist/esm/src/tables/pdfRender.js.map +0 -1
  208. package/dist/esm/src/tables/propPanel.js +0 -105
  209. package/dist/esm/src/tables/propPanel.js.map +0 -1
  210. package/dist/esm/src/tables/tableHelper.js +0 -197
  211. package/dist/esm/src/tables/tableHelper.js.map +0 -1
  212. package/dist/esm/src/tables/types.js +0 -2
  213. package/dist/esm/src/tables/types.js.map +0 -1
  214. package/dist/esm/src/tables/uiRender.js +0 -361
  215. package/dist/esm/src/tables/uiRender.js.map +0 -1
  216. package/dist/esm/src/text/constants.js +0 -94
  217. package/dist/esm/src/text/constants.js.map +0 -1
  218. package/dist/esm/src/text/extraFormatter.js +0 -45
  219. package/dist/esm/src/text/extraFormatter.js.map +0 -1
  220. package/dist/esm/src/text/helper.js +0 -457
  221. package/dist/esm/src/text/helper.js.map +0 -1
  222. package/dist/esm/src/text/icons/index.js +0 -13
  223. package/dist/esm/src/text/icons/index.js.map +0 -1
  224. package/dist/esm/src/text/index.js +0 -13
  225. package/dist/esm/src/text/index.js.map +0 -1
  226. package/dist/esm/src/text/pdfRender.js +0 -166
  227. package/dist/esm/src/text/pdfRender.js.map +0 -1
  228. package/dist/esm/src/text/propPanel.js +0 -158
  229. package/dist/esm/src/text/propPanel.js.map +0 -1
  230. package/dist/esm/src/text/types.js +0 -2
  231. package/dist/esm/src/text/types.js.map +0 -1
  232. package/dist/esm/src/text/uiRender.js +0 -224
  233. package/dist/esm/src/text/uiRender.js.map +0 -1
  234. package/dist/esm/src/utils.js +0 -218
  235. package/dist/esm/src/utils.js.map +0 -1
  236. package/dist/node/__tests__/barcode.test.js +0 -354
  237. package/dist/node/__tests__/barcode.test.js.map +0 -1
  238. package/dist/node/__tests__/multiVariableText.test.js +0 -102
  239. package/dist/node/__tests__/multiVariableText.test.js.map +0 -1
  240. package/dist/node/__tests__/text.test.js +0 -419
  241. package/dist/node/__tests__/text.test.js.map +0 -1
  242. package/dist/node/__tests__/utils.test.js +0 -193
  243. package/dist/node/__tests__/utils.test.js.map +0 -1
  244. package/dist/node/src/barcodes/constants.js +0 -21
  245. package/dist/node/src/barcodes/constants.js.map +0 -1
  246. package/dist/node/src/barcodes/helper.js +0 -161
  247. package/dist/node/src/barcodes/helper.js.map +0 -1
  248. package/dist/node/src/barcodes/index.js +0 -18
  249. package/dist/node/src/barcodes/index.js.map +0 -1
  250. package/dist/node/src/barcodes/pdfRender.js +0 -29
  251. package/dist/node/src/barcodes/pdfRender.js.map +0 -1
  252. package/dist/node/src/barcodes/propPanel.js +0 -241
  253. package/dist/node/src/barcodes/propPanel.js.map +0 -1
  254. package/dist/node/src/barcodes/types.js +0 -3
  255. package/dist/node/src/barcodes/types.js.map +0 -1
  256. package/dist/node/src/barcodes/uiRender.js +0 -91
  257. package/dist/node/src/barcodes/uiRender.js.map +0 -1
  258. package/dist/node/src/checkbox/index.js +0 -62
  259. package/dist/node/src/checkbox/index.js.map +0 -1
  260. package/dist/node/src/constants.js +0 -6
  261. package/dist/node/src/constants.js.map +0 -1
  262. package/dist/node/src/date/date.js +0 -9
  263. package/dist/node/src/date/date.js.map +0 -1
  264. package/dist/node/src/date/dateTime.js +0 -9
  265. package/dist/node/src/date/dateTime.js.map +0 -1
  266. package/dist/node/src/date/helper.js +0 -462
  267. package/dist/node/src/date/helper.js.map +0 -1
  268. package/dist/node/src/date/time.js +0 -9
  269. package/dist/node/src/date/time.js.map +0 -1
  270. package/dist/node/src/date/types.js +0 -3
  271. package/dist/node/src/date/types.js.map +0 -1
  272. package/dist/node/src/graphics/image.js +0 -172
  273. package/dist/node/src/graphics/image.js.map +0 -1
  274. package/dist/node/src/graphics/imagehelper.js +0 -124
  275. package/dist/node/src/graphics/imagehelper.js.map +0 -1
  276. package/dist/node/src/graphics/svg.js +0 -112
  277. package/dist/node/src/graphics/svg.js.map +0 -1
  278. package/dist/node/src/index.js +0 -41
  279. package/dist/node/src/index.js.map +0 -1
  280. package/dist/node/src/multiVariableText/helper.js +0 -55
  281. package/dist/node/src/multiVariableText/helper.js.map +0 -1
  282. package/dist/node/src/multiVariableText/index.js +0 -16
  283. package/dist/node/src/multiVariableText/index.js.map +0 -1
  284. package/dist/node/src/multiVariableText/pdfRender.js +0 -20
  285. package/dist/node/src/multiVariableText/pdfRender.js.map +0 -1
  286. package/dist/node/src/multiVariableText/propPanel.js +0 -148
  287. package/dist/node/src/multiVariableText/propPanel.js.map +0 -1
  288. package/dist/node/src/multiVariableText/types.js +0 -3
  289. package/dist/node/src/multiVariableText/types.js.map +0 -1
  290. package/dist/node/src/multiVariableText/uiRender.js +0 -146
  291. package/dist/node/src/multiVariableText/uiRender.js.map +0 -1
  292. package/dist/node/src/radioGroup/index.js +0 -93
  293. package/dist/node/src/radioGroup/index.js.map +0 -1
  294. package/dist/node/src/sanitize.js +0 -57
  295. package/dist/node/src/sanitize.js.map +0 -1
  296. package/dist/node/src/select/index.js +0 -175
  297. package/dist/node/src/select/index.js.map +0 -1
  298. package/dist/node/src/shapes/line.js +0 -76
  299. package/dist/node/src/shapes/line.js.map +0 -1
  300. package/dist/node/src/shapes/rectAndEllipse.js +0 -140
  301. package/dist/node/src/shapes/rectAndEllipse.js.map +0 -1
  302. package/dist/node/src/tables/cell.js +0 -126
  303. package/dist/node/src/tables/cell.js.map +0 -1
  304. package/dist/node/src/tables/classes.js +0 -467
  305. package/dist/node/src/tables/classes.js.map +0 -1
  306. package/dist/node/src/tables/dynamicTemplate.js +0 -66
  307. package/dist/node/src/tables/dynamicTemplate.js.map +0 -1
  308. package/dist/node/src/tables/helper.js +0 -189
  309. package/dist/node/src/tables/helper.js.map +0 -1
  310. package/dist/node/src/tables/index.js +0 -15
  311. package/dist/node/src/tables/index.js.map +0 -1
  312. package/dist/node/src/tables/pdfRender.js +0 -109
  313. package/dist/node/src/tables/pdfRender.js.map +0 -1
  314. package/dist/node/src/tables/propPanel.js +0 -108
  315. package/dist/node/src/tables/propPanel.js.map +0 -1
  316. package/dist/node/src/tables/tableHelper.js +0 -200
  317. package/dist/node/src/tables/tableHelper.js.map +0 -1
  318. package/dist/node/src/tables/types.js +0 -3
  319. package/dist/node/src/tables/types.js.map +0 -1
  320. package/dist/node/src/tables/uiRender.js +0 -368
  321. package/dist/node/src/tables/uiRender.js.map +0 -1
  322. package/dist/node/src/text/constants.js +0 -97
  323. package/dist/node/src/text/constants.js.map +0 -1
  324. package/dist/node/src/text/extraFormatter.js +0 -49
  325. package/dist/node/src/text/extraFormatter.js.map +0 -1
  326. package/dist/node/src/text/helper.js +0 -504
  327. package/dist/node/src/text/helper.js.map +0 -1
  328. package/dist/node/src/text/icons/index.js +0 -16
  329. package/dist/node/src/text/icons/index.js.map +0 -1
  330. package/dist/node/src/text/index.js +0 -15
  331. package/dist/node/src/text/index.js.map +0 -1
  332. package/dist/node/src/text/pdfRender.js +0 -170
  333. package/dist/node/src/text/pdfRender.js.map +0 -1
  334. package/dist/node/src/text/propPanel.js +0 -161
  335. package/dist/node/src/text/propPanel.js.map +0 -1
  336. package/dist/node/src/text/types.js +0 -3
  337. package/dist/node/src/text/types.js.map +0 -1
  338. package/dist/node/src/text/uiRender.js +0 -231
  339. package/dist/node/src/text/uiRender.js.map +0 -1
  340. package/dist/node/src/utils.js +0 -230
  341. package/dist/node/src/utils.js.map +0 -1
  342. package/dist/types/__tests__/barcode.test.d.ts +0 -1
  343. package/dist/types/__tests__/multiVariableText.test.d.ts +0 -1
  344. package/dist/types/__tests__/text.test.d.ts +0 -1
  345. package/dist/types/__tests__/utils.test.d.ts +0 -1
  346. package/dist/types/src/barcodes/constants.d.ts +0 -4
  347. package/dist/types/src/barcodes/helper.d.ts +0 -21
  348. package/dist/types/src/barcodes/index.d.ts +0 -4
  349. package/dist/types/src/barcodes/pdfRender.d.ts +0 -3
  350. package/dist/types/src/barcodes/propPanel.d.ts +0 -3
  351. package/dist/types/src/barcodes/types.d.ts +0 -10
  352. package/dist/types/src/barcodes/uiRender.d.ts +0 -3
  353. package/dist/types/src/checkbox/index.d.ts +0 -6
  354. package/dist/types/src/constants.d.ts +0 -2
  355. package/dist/types/src/date/date.d.ts +0 -2
  356. package/dist/types/src/date/dateTime.d.ts +0 -2
  357. package/dist/types/src/date/helper.d.ts +0 -8
  358. package/dist/types/src/date/time.d.ts +0 -2
  359. package/dist/types/src/date/types.d.ts +0 -17
  360. package/dist/types/src/graphics/image.d.ts +0 -5
  361. package/dist/types/src/graphics/imagehelper.d.ts +0 -4
  362. package/dist/types/src/graphics/svg.d.ts +0 -4
  363. package/dist/types/src/index.d.ts +0 -19
  364. package/dist/types/src/multiVariableText/helper.d.ts +0 -3
  365. package/dist/types/src/multiVariableText/index.d.ts +0 -4
  366. package/dist/types/src/multiVariableText/pdfRender.d.ts +0 -3
  367. package/dist/types/src/multiVariableText/propPanel.d.ts +0 -3
  368. package/dist/types/src/multiVariableText/types.d.ts +0 -5
  369. package/dist/types/src/multiVariableText/uiRender.d.ts +0 -3
  370. package/dist/types/src/radioGroup/index.d.ts +0 -7
  371. package/dist/types/src/sanitize.d.ts +0 -1
  372. package/dist/types/src/select/index.d.ts +0 -7
  373. package/dist/types/src/shapes/line.d.ts +0 -6
  374. package/dist/types/src/shapes/rectAndEllipse.d.ts +0 -175
  375. package/dist/types/src/tables/cell.d.ts +0 -4
  376. package/dist/types/src/tables/classes.d.ts +0 -69
  377. package/dist/types/src/tables/dynamicTemplate.d.ts +0 -7
  378. package/dist/types/src/tables/helper.d.ts +0 -265
  379. package/dist/types/src/tables/index.d.ts +0 -4
  380. package/dist/types/src/tables/pdfRender.d.ts +0 -3
  381. package/dist/types/src/tables/propPanel.d.ts +0 -3
  382. package/dist/types/src/tables/tableHelper.d.ts +0 -10
  383. package/dist/types/src/tables/types.d.ts +0 -88
  384. package/dist/types/src/tables/uiRender.d.ts +0 -3
  385. package/dist/types/src/text/constants.d.ts +0 -23
  386. package/dist/types/src/text/extraFormatter.d.ts +0 -25
  387. package/dist/types/src/text/helper.d.ts +0 -39
  388. package/dist/types/src/text/icons/index.d.ts +0 -9
  389. package/dist/types/src/text/index.d.ts +0 -4
  390. package/dist/types/src/text/pdfRender.d.ts +0 -3
  391. package/dist/types/src/text/propPanel.d.ts +0 -3
  392. package/dist/types/src/text/types.d.ts +0 -28
  393. package/dist/types/src/text/uiRender.d.ts +0 -11
  394. package/dist/types/src/utils.d.ts +0 -40
  395. package/eslint.config.mjs +0 -22
  396. package/tsconfig.cjs.json +0 -10
  397. package/tsconfig.esm.json +0 -11
  398. package/tsconfig.node.json +0 -11
@@ -1,100 +0,0 @@
1
- import { substituteVariables, validateVariables } from '../src/multiVariableText/helper.js';
2
- describe('substituteVariables', () => {
3
- it('should substitute variables in a string', () => {
4
- const text = 'Hello, {name}!';
5
- const variables = { name: 'World' };
6
- const result = substituteVariables(text, variables);
7
- expect(result).toBe('Hello, World!');
8
- });
9
- it('should handle special characters in variable names', () => {
10
- const text = 'Hello, {*na-me}!';
11
- const variables = { '*na-me': 'World' };
12
- const result = substituteVariables(text, variables);
13
- expect(result).toBe('Hello, World!');
14
- });
15
- it('should handle numeric variable names', () => {
16
- let text = 'Hello, {123}!';
17
- let variables = { '123': 'World' };
18
- let result = substituteVariables(text, variables);
19
- expect(result).toBe('Hello, World!');
20
- });
21
- it('should remove variables that were not substituted', () => {
22
- const text = 'Hello, {name}! Welcome to {place}.';
23
- const variables = { name: 'World' };
24
- const result = substituteVariables(text, variables);
25
- expect(result).toBe('Hello, World! Welcome to .');
26
- });
27
- it('should handle empty input strings', () => {
28
- const text = '';
29
- const variables = { name: 'World' };
30
- const result = substituteVariables(text, variables);
31
- expect(result).toBe('');
32
- });
33
- it('should handle empty variables', () => {
34
- const text = 'Hello, {name}!';
35
- const variables = {};
36
- const result = substituteVariables(text, variables);
37
- expect(result).toBe('Hello, !');
38
- });
39
- it('should handle variables as a JSON string', () => {
40
- const text = 'Hello, {name}!';
41
- const variables = '{"name": "World"}';
42
- const result = substituteVariables(text, variables);
43
- expect(result).toBe('Hello, World!');
44
- });
45
- it('should handle invalid JSON string for variables', () => {
46
- const text = 'Hello, {name}!';
47
- const variables = 'invalid json';
48
- expect(() => substituteVariables(text, variables)).toThrow(SyntaxError);
49
- });
50
- });
51
- describe('validateVariables', () => {
52
- // @ts-ignore
53
- const schema = {
54
- name: 'test',
55
- variables: ['var1', 'var2'],
56
- required: true,
57
- };
58
- it('should return true for valid input with all required variables', () => {
59
- const value = JSON.stringify({ var1: 'value1', var2: 'value2' });
60
- expect(validateVariables(value, schema)).toBe(true);
61
- });
62
- it('should throw an error for missing required variables', () => {
63
- const value = JSON.stringify({ var1: 'value1' });
64
- expect(() => validateVariables(value, schema)).toThrow('[@pdfme/generator] variable var2 is missing for field test');
65
- });
66
- it('should return false for missing non-required variables', () => {
67
- // @ts-ignore
68
- const nonRequiredSchema = {
69
- name: 'test',
70
- variables: ['var1', 'var2'],
71
- required: false,
72
- };
73
- const value = JSON.stringify({ var1: 'value1' });
74
- expect(validateVariables(value, nonRequiredSchema)).toBe(false);
75
- });
76
- it('should throw an error for invalid JSON input', () => {
77
- const value = '{ var1: value1 var2: value2 }'; // Invalid JSON
78
- expect(() => validateVariables(value, schema)).toThrow(SyntaxError);
79
- });
80
- it('should return true for a string with no variables', () => {
81
- // @ts-ignore
82
- const readOnlyText = {
83
- name: 'test',
84
- variables: [],
85
- required: true,
86
- };
87
- const value = '';
88
- expect(validateVariables(value, readOnlyText)).toBe(true);
89
- });
90
- it('should return false for a string with variables but no input JSON and required set to false', () => {
91
- // @ts-ignore
92
- const readOnlyText = {
93
- variables: ['var'],
94
- required: false,
95
- };
96
- const value = '';
97
- expect(validateVariables(value, readOnlyText)).toBe(false);
98
- });
99
- });
100
- //# sourceMappingURL=multiVariableText.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiVariableText.test.js","sourceRoot":"","sources":["../../../__tests__/multiVariableText.test.ts"],"names":[],"mappings":"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"}
@@ -1,384 +0,0 @@
1
- import { readFileSync } from 'fs';
2
- import * as path from 'path';
3
- import { getDefaultFont } from '@pdfme/common';
4
- import { calculateDynamicFontSize, getBrowserVerticalFontAdjustments, getFontDescentInPt, getFontKitFont, getSplittedLines, filterStartJP, filterEndJP, } from '../src/text/helper.js';
5
- import { LINE_START_FORBIDDEN_CHARS, LINE_END_FORBIDDEN_CHARS } from '../src/text/constants.js';
6
- const sansData = readFileSync(path.join(__dirname, `/assets/fonts/SauceHanSansJP.ttf`));
7
- const serifData = readFileSync(path.join(__dirname, `/assets/fonts/SauceHanSerifJP.ttf`));
8
- const getSampleFont = () => ({
9
- SauceHanSansJP: { fallback: true, data: sansData },
10
- SauceHanSerifJP: { data: serifData },
11
- });
12
- const getTextSchema = () => {
13
- const textSchema = {
14
- name: 'test',
15
- type: 'text',
16
- content: 'test',
17
- position: { x: 0, y: 0 },
18
- width: 50,
19
- height: 20,
20
- alignment: 'left',
21
- verticalAlignment: 'top',
22
- fontColor: '#000000',
23
- backgroundColor: '#ffffff',
24
- lineHeight: 1,
25
- characterSpacing: 1,
26
- fontSize: 14,
27
- };
28
- return textSchema;
29
- };
30
- describe('getSplitPosition test with mocked font width calculations', () => {
31
- /**
32
- * To simplify these tests we mock the widthOfTextAtSize function to return
33
- * the length of the text in number of characters.
34
- * Therefore, setting the boxWidthInPt to 5 should result in a split after 5 characters.
35
- */
36
- let widthOfTextAtSizeSpy;
37
- beforeAll(() => {
38
- // @ts-ignore
39
- widthOfTextAtSizeSpy = jest.spyOn(require('../src/text/helper'), 'widthOfTextAtSize');
40
- widthOfTextAtSizeSpy.mockImplementation((text) => {
41
- return text.length;
42
- });
43
- });
44
- afterAll(() => {
45
- widthOfTextAtSizeSpy.mockRestore();
46
- });
47
- const mockedFont = {};
48
- const mockCalcValues = {
49
- font: mockedFont,
50
- fontSize: 12,
51
- characterSpacing: 1,
52
- boxWidthInPt: 5,
53
- };
54
- it('does not split an empty string', () => {
55
- expect(getSplittedLines('', mockCalcValues)).toEqual(['']);
56
- });
57
- it('does not split a short line', () => {
58
- expect(getSplittedLines('a', mockCalcValues)).toEqual(['a']);
59
- expect(getSplittedLines('aaaa', mockCalcValues)).toEqual(['aaaa']);
60
- });
61
- it('splits a line to the nearest previous breakable char', () => {
62
- expect(getSplittedLines('aaa bbb', mockCalcValues)).toEqual(['aaa', 'bbb']);
63
- expect(getSplittedLines('top-hat', mockCalcValues)).toEqual(['top-', 'hat']);
64
- expect(getSplittedLines('top—hat', mockCalcValues)).toEqual(['top—', 'hat']); // em dash
65
- expect(getSplittedLines('top–hat', mockCalcValues)).toEqual(['top–', 'hat']); // en dash
66
- });
67
- it('splits a line where the split point is on a breakable char', () => {
68
- expect(getSplittedLines('aaaaa bbbbb', mockCalcValues)).toEqual(['aaaaa', 'bbbbb']);
69
- expect(getSplittedLines('left-hand', mockCalcValues)).toEqual(['left-', 'hand']);
70
- });
71
- it('splits a long line in the middle of a word if too long', () => {
72
- expect(getSplittedLines('aaaaaa bbb', mockCalcValues)).toEqual(['aaaaa', 'a bbb']);
73
- expect(getSplittedLines('aaaaaa-a b', mockCalcValues)).toEqual(['aaaaa', 'a-a b']);
74
- expect(getSplittedLines('aaaaa-aa b', mockCalcValues)).toEqual(['aaaaa', '-aa b']);
75
- });
76
- it('splits a long line without breakable chars at exactly 5 chars', () => {
77
- expect(getSplittedLines('abcdef', mockCalcValues)).toEqual(['abcde', 'f']);
78
- });
79
- it('splits a very long line without breakable chars at exactly 5 chars', () => {
80
- expect(getSplittedLines('abcdefghijklmn', mockCalcValues)).toEqual(['abcde', 'fghij', 'klmn']);
81
- });
82
- it('splits a line with lots of words', () => {
83
- expect(getSplittedLines('a b c d e', mockCalcValues)).toEqual(['a b c', 'd e']);
84
- });
85
- });
86
- describe('getSplittedLines test with real font width calculations', () => {
87
- const font = getDefaultFont();
88
- const baseCalcValues = {
89
- fontSize: 12,
90
- characterSpacing: 1,
91
- boxWidthInPt: 40,
92
- };
93
- it('should not split a line when the text is shorter than the width', async () => {
94
- const _cache = new Map();
95
- await getFontKitFont(getTextSchema().fontName, font, _cache).then((fontKitFont) => {
96
- const fontWidthCalcs = Object.assign({}, baseCalcValues, { font: fontKitFont });
97
- const result = getSplittedLines('short', fontWidthCalcs);
98
- expect(result).toEqual(['short']);
99
- });
100
- });
101
- it('should split a line when the text is longer than the width', async () => {
102
- const _cache = new Map();
103
- await getFontKitFont(getTextSchema().fontName, font, _cache).then((fontKitFont) => {
104
- const fontWidthCalcs = Object.assign({}, baseCalcValues, { font: fontKitFont });
105
- const result = getSplittedLines('this will wrap', fontWidthCalcs);
106
- expect(result).toEqual(['this', 'will', 'wrap']);
107
- });
108
- });
109
- it('should split a line in the middle when unspaced text will not fit on a line', async () => {
110
- const _cache = new Map();
111
- await getFontKitFont(getTextSchema().fontName, font, _cache).then((fontKitFont) => {
112
- const fontWidthCalcs = Object.assign({}, baseCalcValues, { font: fontKitFont });
113
- const result = getSplittedLines('thiswillbecut', fontWidthCalcs);
114
- expect(result).toEqual(['thiswi', 'llbecu', 't']);
115
- });
116
- });
117
- it('should not split text when it is impossible due to size constraints', async () => {
118
- const _cache = new Map();
119
- await getFontKitFont(getTextSchema().fontName, font, _cache).then((fontKitFont) => {
120
- const fontWidthCalcs = Object.assign({}, baseCalcValues, { font: fontKitFont });
121
- fontWidthCalcs.boxWidthInPt = 2;
122
- const result = getSplittedLines('thiswillnotbecut', fontWidthCalcs);
123
- expect(result).toEqual(['thiswillnotbecut']);
124
- });
125
- });
126
- });
127
- describe('calculateDynamicFontSize with Default font', () => {
128
- let fontKitFont;
129
- beforeAll(async () => {
130
- fontKitFont = await getFontKitFont('SauceHanSansJP', getDefaultFont(), new Map());
131
- });
132
- it('should return default font size when dynamicFontSizeSetting is not provided', async () => {
133
- const textSchema = getTextSchema();
134
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value: 'test' });
135
- expect(result).toBe(14);
136
- });
137
- it('should return default font size when dynamicFontSizeSetting max is less than min', async () => {
138
- const textSchema = getTextSchema();
139
- textSchema.dynamicFontSize = { min: 11, max: 10, fit: 'vertical' };
140
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value: 'test' });
141
- expect(result).toBe(14);
142
- });
143
- it('should calculate a dynamic font size of vertical fit between min and max', async () => {
144
- const textSchema = getTextSchema();
145
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
146
- const value = 'test with a length string\n and a new line';
147
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
148
- expect(result).toBe(19.25);
149
- });
150
- it('should calculate a dynamic font size of horizontal fit between min and max', async () => {
151
- const textSchema = getTextSchema();
152
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'horizontal' };
153
- const value = 'test with a length string\n and a new line';
154
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
155
- expect(result).toBe(11.25);
156
- });
157
- it('should calculate a dynamic font size between min and max regardless of current font size', async () => {
158
- const textSchema = getTextSchema();
159
- textSchema.fontSize = 2;
160
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
161
- const value = 'test with a length string\n and a new line';
162
- let result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
163
- expect(result).toBe(19.25);
164
- textSchema.fontSize = 40;
165
- result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
166
- expect(result).toBe(19.25);
167
- });
168
- it('should return min font size when content is too big to fit given constraints', async () => {
169
- const textSchema = getTextSchema();
170
- textSchema.width = 10;
171
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
172
- const value = 'test with a length string\n and a new line';
173
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
174
- expect(result).toBe(10);
175
- });
176
- it('should return max font size when content is too small to fit given constraints', async () => {
177
- const textSchema = getTextSchema();
178
- textSchema.width = 1000;
179
- textSchema.height = 200;
180
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
181
- const value = 'test with a length string\n and a new line';
182
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
183
- expect(result).toBe(30);
184
- });
185
- it('should not reduce font size below 0', async () => {
186
- const textSchema = getTextSchema();
187
- textSchema.dynamicFontSize = { min: -5, max: 10, fit: 'vertical' };
188
- textSchema.width = 4;
189
- textSchema.height = 1;
190
- const value = 'a very \nlong \nmulti-line \nstring\nto';
191
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
192
- expect(result).toBeGreaterThan(0);
193
- });
194
- it('should calculate a dynamic font size when a starting font size is passed that is lower than the eventual', async () => {
195
- const textSchema = getTextSchema();
196
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
197
- const value = 'test with a length string\n and a new line';
198
- const startingFontSize = 18;
199
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value, startingFontSize });
200
- expect(result).toBe(19.25);
201
- });
202
- it('should calculate a dynamic font size when a starting font size is passed that is higher than the eventual', async () => {
203
- const textSchema = getTextSchema();
204
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'horizontal' };
205
- const value = 'test with a length string\n and a new line';
206
- const startingFontSize = 36;
207
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value, startingFontSize });
208
- expect(result).toBe(11.25);
209
- });
210
- it('should calculate a dynamic font size using vertical fit as a default if no fit provided', async () => {
211
- const textSchema = getTextSchema();
212
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
213
- const value = 'test with a length string\n and a new line';
214
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
215
- expect(result).toBe(19.25);
216
- });
217
- });
218
- describe('calculateDynamicFontSize with Custom font', () => {
219
- let fontKitFont;
220
- beforeAll(async () => {
221
- fontKitFont = await getFontKitFont('SauceHanSansJP', getSampleFont(), new Map());
222
- });
223
- it('should return smaller font size when dynamicFontSizeSetting is provided with horizontal fit', async () => {
224
- const textSchema = getTextSchema();
225
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'horizontal' };
226
- const value = 'あいうあいうあい';
227
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
228
- expect(result).toBe(16.75);
229
- });
230
- it('should return smaller font size when dynamicFontSizeSetting is provided with vertical fit', async () => {
231
- const textSchema = getTextSchema();
232
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
233
- const value = 'あいうあいうあい';
234
- const result = calculateDynamicFontSize({ textSchema, fontKitFont, value });
235
- expect(result).toBe(26);
236
- });
237
- it('should return min font size when content is too big to fit given constraints', async () => {
238
- const textSchema = getTextSchema();
239
- textSchema.dynamicFontSize = { min: 20, max: 30, fit: 'vertical' };
240
- const value = 'あいうあいうあいうあいうあいうあいうあいうあいうあいう';
241
- const result = await calculateDynamicFontSize({ textSchema, fontKitFont, value });
242
- expect(result).toBe(20);
243
- });
244
- it('should return max font size when content is too small to fit given constraints', async () => {
245
- const textSchema = getTextSchema();
246
- textSchema.dynamicFontSize = { min: 10, max: 30, fit: 'vertical' };
247
- const value = 'あ';
248
- const result = await calculateDynamicFontSize({ textSchema, fontKitFont, value });
249
- expect(result).toBe(30);
250
- });
251
- it('should return min font size when content is multi-line with too many lines for the container', async () => {
252
- const textSchema = getTextSchema();
253
- textSchema.dynamicFontSize = { min: 5, max: 20, fit: 'vertical' };
254
- const value = 'あ\nいう\nあ\nいう\nあ\nいう\nあ\nいう\nあ\nいう\nあ\nいう';
255
- const result = await calculateDynamicFontSize({ textSchema, fontKitFont, value });
256
- expect(result).toBe(5);
257
- });
258
- });
259
- describe('getFontDescentInPt test', () => {
260
- test('it gets a descent size relative to the font size', () => {
261
- expect(getFontDescentInPt({ descent: -400, unitsPerEm: 1000 }, 12)).toBe(-4.800000000000001);
262
- expect(getFontDescentInPt({ descent: 54, unitsPerEm: 1000 }, 20)).toBe(1.08);
263
- expect(getFontDescentInPt({ descent: -512, unitsPerEm: 2048 }, 54)).toBe(-13.5);
264
- });
265
- });
266
- describe('getBrowserVerticalFontAdjustments test', () => {
267
- // Font with a base line-height of 1.349
268
- const font = { ascent: 1037, descent: -312, unitsPerEm: 1000 };
269
- test('it gets a top adjustment when vertically aligning top', () => {
270
- expect(getBrowserVerticalFontAdjustments(font, 12, 1.0, 'top')).toEqual({
271
- topAdj: 2.791301999999999,
272
- bottomAdj: 0,
273
- });
274
- expect(getBrowserVerticalFontAdjustments(font, 36, 2.0, 'top')).toEqual({
275
- topAdj: 8.373906,
276
- bottomAdj: 0,
277
- });
278
- });
279
- test('it gets a bottom adjustment when vertically aligning middle or bottom', () => {
280
- expect(getBrowserVerticalFontAdjustments(font, 12, 1.0, 'bottom')).toEqual({
281
- topAdj: 0,
282
- bottomAdj: 2.791302,
283
- });
284
- expect(getBrowserVerticalFontAdjustments(font, 12, 1.15, 'middle')).toEqual({
285
- topAdj: 0,
286
- bottomAdj: 1.5916020000000004,
287
- });
288
- });
289
- test('it does not get a bottom adjustment if the line height exceeds that of the font', () => {
290
- expect(getBrowserVerticalFontAdjustments(font, 12, 1.35, 'bottom')).toEqual({
291
- topAdj: 0,
292
- bottomAdj: 0,
293
- });
294
- });
295
- test('it does not get a bottom adjustment if the font base line-height is 1.0 or less', () => {
296
- const thisFont = { ascent: 900, descent: -50, unitsPerEm: 1000 };
297
- expect(getBrowserVerticalFontAdjustments(thisFont, 20, 1.0, 'bottom')).toEqual({
298
- topAdj: 0,
299
- bottomAdj: 0,
300
- });
301
- });
302
- });
303
- describe('filterStartJP', () => {
304
- test('空の配列を渡すと空の配列を返す', () => {
305
- expect(filterStartJP([])).toEqual([]);
306
- });
307
- test('禁則文字を含まない行はそのまま返す', () => {
308
- const input = ['これは', '普通の', '文章です。'];
309
- expect(filterStartJP(input)).toEqual(input);
310
- });
311
- test('行頭の禁則文字を前の行の末尾に移動する', () => {
312
- const input = ['これは', '。文章', 'です'];
313
- const expected = ['これは。', '文章', 'です'];
314
- expect(filterStartJP(input)).toEqual(expected);
315
- });
316
- test('複数の禁則文字を正しく処理する', () => {
317
- const input = ['これは', '。とても', '、長い', '」文章', 'です'];
318
- const expected = ['これは。', 'とても、', '長い」', '文章', 'です'];
319
- expect(filterStartJP(input)).toEqual(expected);
320
- });
321
- test('空の行を保持する', () => {
322
- const input = ['これは', '', '。文章', 'です'];
323
- const expected = ['これは。', '', '文章', 'です'];
324
- expect(filterStartJP(input)).toEqual(expected);
325
- });
326
- test('1文字の行(禁則文字のみ)はそのまま保持する', () => {
327
- const input = ['これは', '。', '文章', 'です'];
328
- // const expected = ['これは。', '文章', 'です'];
329
- const expected = ['これは', '。', '文章', 'です'];
330
- expect(filterStartJP(input)).toEqual(expected);
331
- });
332
- test('すべての禁則文字を正しく処理する', () => {
333
- const input = LINE_START_FORBIDDEN_CHARS.map((char) => ['この', char + '文字']).flat();
334
- const expected = LINE_START_FORBIDDEN_CHARS.map((char) => [
335
- 'この' + char,
336
- '文字',
337
- ]).flat();
338
- expect(filterStartJP(input)).toEqual(expected);
339
- });
340
- });
341
- describe('filterEndJP', () => {
342
- test('空の配列を渡すと空の配列を返す', () => {
343
- expect(filterEndJP([])).toEqual([]);
344
- });
345
- test('禁則文字を含まない行はそのまま返す', () => {
346
- const input = ['これは', '普通の', '文章です。'];
347
- expect(filterEndJP(input)).toEqual(input);
348
- });
349
- test('行末の禁則文字を次の行の先頭に移動する', () => {
350
- const input = ['これは「', '文章', 'です。'];
351
- const expected = ['これは', '「文章', 'です。'];
352
- expect(filterEndJP(input)).toEqual(expected);
353
- });
354
- test('複数の禁則文字を正しく処理する', () => {
355
- const input = ['これは「', '長い『', '文章(', 'です。'];
356
- const expected = ['これは', '「長い', '『文章', '(です。'];
357
- expect(filterEndJP(input)).toEqual(expected);
358
- });
359
- // Cant understand purpose of this test...
360
- // test('空の行を保持する', () => {
361
- // const input = ['これは「', '', '文章', 'です。'];
362
- // const expected = ['これは', '「', '', '文章', 'です。'];
363
- // expect(filterEndJP(input)).toEqual(expected);
364
- // });
365
- test('1文字の行(禁則文字のみ)はそのまま保持する', () => {
366
- const input = ['これは', '「', '文章', 'です。'];
367
- const expected = ['これは', '「', '文章', 'です。'];
368
- expect(filterEndJP(input)).toEqual(expected);
369
- });
370
- test('すべての禁則文字を正しく処理する', () => {
371
- const input = LINE_END_FORBIDDEN_CHARS.map((char) => ['これは' + char, '文章']).flat();
372
- const expected = LINE_END_FORBIDDEN_CHARS.map((char) => [
373
- 'これは',
374
- char + '文章',
375
- ]).flat();
376
- expect(filterEndJP(input)).toEqual(expected);
377
- });
378
- test('最後の行の禁則文字は移動しない', () => {
379
- const input = ['これは「', '文章「', 'です「'];
380
- const expected = ['これは', '「文章', '「です「'];
381
- expect(filterEndJP(input)).toEqual(expected);
382
- });
383
- });
384
- //# sourceMappingURL=text.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.test.js","sourceRoot":"","sources":["../../../__tests__/text.test.ts"],"names":[],"mappings":"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"}