@pbkware/fielded-text-web 0.1.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 (482) hide show
  1. package/dist/api/ft-reader.js +59 -0
  2. package/dist/api/ft-reader.js.map +1 -0
  3. package/dist/api/ft-serialization.js +147 -0
  4. package/dist/api/ft-serialization.js.map +1 -0
  5. package/dist/api/ft-writer-settings.js +31 -0
  6. package/dist/api/ft-writer-settings.js.map +1 -0
  7. package/dist/api/ft-writer.js +22 -0
  8. package/dist/api/ft-writer.js.map +1 -0
  9. package/dist/factory/ft-field-factory.js +86 -0
  10. package/dist/factory/ft-field-factory.js.map +1 -0
  11. package/dist/factory/ft-meta-constructor.js +16 -0
  12. package/dist/factory/ft-meta-constructor.js.map +1 -0
  13. package/dist/factory/ft-meta-factory.js +30 -0
  14. package/dist/factory/ft-meta-factory.js.map +1 -0
  15. package/dist/factory/ft-sequence-constructor.js +11 -0
  16. package/dist/factory/ft-sequence-constructor.js.map +1 -0
  17. package/dist/factory/ft-sequence-factory.js +18 -0
  18. package/dist/factory/ft-sequence-factory.js.map +1 -0
  19. package/dist/factory/ft-sequence-item-constructor.js +11 -0
  20. package/dist/factory/ft-sequence-item-constructor.js.map +1 -0
  21. package/dist/factory/ft-sequence-item-factory.js +18 -0
  22. package/dist/factory/ft-sequence-item-factory.js.map +1 -0
  23. package/dist/factory/ft-sequence-redirect-constructor.js +13 -0
  24. package/dist/factory/ft-sequence-redirect-constructor.js.map +1 -0
  25. package/dist/factory/ft-sequence-redirect-factory.js +176 -0
  26. package/dist/factory/ft-sequence-redirect-factory.js.map +1 -0
  27. package/dist/factory/ft-substitution-constructor.js +23 -0
  28. package/dist/factory/ft-substitution-constructor.js.map +1 -0
  29. package/dist/factory/ft-substitution-factory.js +37 -0
  30. package/dist/factory/ft-substitution-factory.js.map +1 -0
  31. package/dist/fields/definitions/ft-boolean-field-definition.js +36 -0
  32. package/dist/fields/definitions/ft-boolean-field-definition.js.map +1 -0
  33. package/dist/fields/definitions/ft-date-time-field-definition.js +39 -0
  34. package/dist/fields/definitions/ft-date-time-field-definition.js.map +1 -0
  35. package/dist/fields/definitions/ft-decimal-field-definition.js +32 -0
  36. package/dist/fields/definitions/ft-decimal-field-definition.js.map +1 -0
  37. package/dist/fields/definitions/ft-field-definition-list.js +26 -0
  38. package/dist/fields/definitions/ft-field-definition-list.js.map +1 -0
  39. package/dist/fields/definitions/ft-field-definition.js +245 -0
  40. package/dist/fields/definitions/ft-field-definition.js.map +1 -0
  41. package/dist/fields/definitions/ft-float-field-definition.js +32 -0
  42. package/dist/fields/definitions/ft-float-field-definition.js.map +1 -0
  43. package/dist/fields/definitions/ft-generic-field-definition.js +30 -0
  44. package/dist/fields/definitions/ft-generic-field-definition.js.map +1 -0
  45. package/dist/fields/definitions/ft-integer-field-definition.js +33 -0
  46. package/dist/fields/definitions/ft-integer-field-definition.js.map +1 -0
  47. package/dist/fields/definitions/ft-string-field-definition.js +21 -0
  48. package/dist/fields/definitions/ft-string-field-definition.js.map +1 -0
  49. package/dist/fields/instances/ft-boolean-field.js +38 -0
  50. package/dist/fields/instances/ft-boolean-field.js.map +1 -0
  51. package/dist/fields/instances/ft-date-time-field.js +35 -0
  52. package/dist/fields/instances/ft-date-time-field.js.map +1 -0
  53. package/dist/fields/instances/ft-decimal-field.js +35 -0
  54. package/dist/fields/instances/ft-decimal-field.js.map +1 -0
  55. package/dist/fields/instances/ft-field-list.js +56 -0
  56. package/dist/fields/instances/ft-field-list.js.map +1 -0
  57. package/dist/fields/instances/ft-field.js +561 -0
  58. package/dist/fields/instances/ft-field.js.map +1 -0
  59. package/dist/fields/instances/ft-float-field.js +35 -0
  60. package/dist/fields/instances/ft-float-field.js.map +1 -0
  61. package/dist/fields/instances/ft-generic-field.js +173 -0
  62. package/dist/fields/instances/ft-generic-field.js.map +1 -0
  63. package/dist/fields/instances/ft-integer-field.js +35 -0
  64. package/dist/fields/instances/ft-integer-field.js.map +1 -0
  65. package/dist/fields/instances/ft-string-field.js +34 -0
  66. package/dist/fields/instances/ft-string-field.js.map +1 -0
  67. package/dist/index.d.ts +3483 -0
  68. package/dist/index.js +133 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/meta/fields/ft-boolean-meta-field.js +65 -0
  71. package/dist/meta/fields/ft-boolean-meta-field.js.map +1 -0
  72. package/dist/meta/fields/ft-date-time-meta-field.js +55 -0
  73. package/dist/meta/fields/ft-date-time-meta-field.js.map +1 -0
  74. package/dist/meta/fields/ft-decimal-meta-field.js +55 -0
  75. package/dist/meta/fields/ft-decimal-meta-field.js.map +1 -0
  76. package/dist/meta/fields/ft-float-meta-field.js +55 -0
  77. package/dist/meta/fields/ft-float-meta-field.js.map +1 -0
  78. package/dist/meta/fields/ft-generic-meta-field.js +32 -0
  79. package/dist/meta/fields/ft-generic-meta-field.js.map +1 -0
  80. package/dist/meta/fields/ft-integer-meta-field.js +55 -0
  81. package/dist/meta/fields/ft-integer-meta-field.js.map +1 -0
  82. package/dist/meta/fields/ft-meta-field-list.js +183 -0
  83. package/dist/meta/fields/ft-meta-field-list.js.map +1 -0
  84. package/dist/meta/fields/ft-meta-field.js +351 -0
  85. package/dist/meta/fields/ft-meta-field.js.map +1 -0
  86. package/dist/meta/fields/ft-string-meta-field.js +27 -0
  87. package/dist/meta/fields/ft-string-meta-field.js.map +1 -0
  88. package/dist/meta/ft-meta-defaults.js +152 -0
  89. package/dist/meta/ft-meta-defaults.js.map +1 -0
  90. package/dist/meta/ft-meta.js +391 -0
  91. package/dist/meta/ft-meta.js.map +1 -0
  92. package/dist/meta/sequences/core/ft-meta-sequence-item-list.js +82 -0
  93. package/dist/meta/sequences/core/ft-meta-sequence-item-list.js.map +1 -0
  94. package/dist/meta/sequences/core/ft-meta-sequence-item.js +62 -0
  95. package/dist/meta/sequences/core/ft-meta-sequence-item.js.map +1 -0
  96. package/dist/meta/sequences/core/ft-meta-sequence-list.js +164 -0
  97. package/dist/meta/sequences/core/ft-meta-sequence-list.js.map +1 -0
  98. package/dist/meta/sequences/core/ft-meta-sequence.js +96 -0
  99. package/dist/meta/sequences/core/ft-meta-sequence.js.map +1 -0
  100. package/dist/meta/sequences/redirects/ft-boolean-meta-sequence-redirect.js +40 -0
  101. package/dist/meta/sequences/redirects/ft-boolean-meta-sequence-redirect.js.map +1 -0
  102. package/dist/meta/sequences/redirects/ft-case-insensitive-string-meta-sequence-redirect.js +40 -0
  103. package/dist/meta/sequences/redirects/ft-case-insensitive-string-meta-sequence-redirect.js.map +1 -0
  104. package/dist/meta/sequences/redirects/ft-date-meta-sequence-redirect.js +45 -0
  105. package/dist/meta/sequences/redirects/ft-date-meta-sequence-redirect.js.map +1 -0
  106. package/dist/meta/sequences/redirects/ft-exact-date-time-meta-sequence-redirect.js +40 -0
  107. package/dist/meta/sequences/redirects/ft-exact-date-time-meta-sequence-redirect.js.map +1 -0
  108. package/dist/meta/sequences/redirects/ft-exact-decimal-meta-sequence-redirect.js +40 -0
  109. package/dist/meta/sequences/redirects/ft-exact-decimal-meta-sequence-redirect.js.map +1 -0
  110. package/dist/meta/sequences/redirects/ft-exact-float-meta-sequence-redirect.js +40 -0
  111. package/dist/meta/sequences/redirects/ft-exact-float-meta-sequence-redirect.js.map +1 -0
  112. package/dist/meta/sequences/redirects/ft-exact-integer-meta-sequence-redirect.js +40 -0
  113. package/dist/meta/sequences/redirects/ft-exact-integer-meta-sequence-redirect.js.map +1 -0
  114. package/dist/meta/sequences/redirects/ft-exact-string-meta-sequence-redirect.js +40 -0
  115. package/dist/meta/sequences/redirects/ft-exact-string-meta-sequence-redirect.js.map +1 -0
  116. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect-list.js +85 -0
  117. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect-list.js.map +1 -0
  118. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect.js +68 -0
  119. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect.js.map +1 -0
  120. package/dist/meta/sequences/redirects/ft-null-meta-sequence-redirect.js +21 -0
  121. package/dist/meta/sequences/redirects/ft-null-meta-sequence-redirect.js.map +1 -0
  122. package/dist/meta/substitutions/ft-meta-substitution-list.js +51 -0
  123. package/dist/meta/substitutions/ft-meta-substitution-list.js.map +1 -0
  124. package/dist/meta-serialization/format/ft-json-meta-serialization.js +283 -0
  125. package/dist/meta-serialization/format/ft-json-meta-serialization.js.map +1 -0
  126. package/dist/meta-serialization/format/ft-xml-meta-serialization.js +706 -0
  127. package/dist/meta-serialization/format/ft-xml-meta-serialization.js.map +1 -0
  128. package/dist/meta-serialization/format/meta-serializer-options.js +12 -0
  129. package/dist/meta-serialization/format/meta-serializer-options.js.map +1 -0
  130. package/dist/meta-serialization/ft-meta-serialization.js +59 -0
  131. package/dist/meta-serialization/ft-meta-serialization.js.map +1 -0
  132. package/dist/meta-serialization/styles/ft-boolean-styles-meta-serialization.js +83 -0
  133. package/dist/meta-serialization/styles/ft-boolean-styles-meta-serialization.js.map +1 -0
  134. package/dist/meta-serialization/styles/ft-date-time-styles-meta-serialization.js +54 -0
  135. package/dist/meta-serialization/styles/ft-date-time-styles-meta-serialization.js.map +1 -0
  136. package/dist/meta-serialization/styles/ft-number-styles-meta-serialization.js +199 -0
  137. package/dist/meta-serialization/styles/ft-number-styles-meta-serialization.js.map +1 -0
  138. package/dist/meta-serialization/types/boolean-meta-serialization.js +39 -0
  139. package/dist/meta-serialization/types/boolean-meta-serialization.js.map +1 -0
  140. package/dist/meta-serialization/types/char-meta-serialization.js +32 -0
  141. package/dist/meta-serialization/types/char-meta-serialization.js.map +1 -0
  142. package/dist/meta-serialization/types/date-time-meta-serialization.js +227 -0
  143. package/dist/meta-serialization/types/date-time-meta-serialization.js.map +1 -0
  144. package/dist/meta-serialization/types/decimal-meta-serialization.js +12 -0
  145. package/dist/meta-serialization/types/decimal-meta-serialization.js.map +1 -0
  146. package/dist/meta-serialization/types/enums/data-type-meta-serialisation.js +55 -0
  147. package/dist/meta-serialization/types/enums/data-type-meta-serialisation.js.map +1 -0
  148. package/dist/meta-serialization/types/enums/end-of-line-auto-write-type-meta-serialization.js +50 -0
  149. package/dist/meta-serialization/types/enums/end-of-line-auto-write-type-meta-serialization.js.map +1 -0
  150. package/dist/meta-serialization/types/enums/end-of-line-type-meta-serialization.js +49 -0
  151. package/dist/meta-serialization/types/enums/end-of-line-type-meta-serialization.js.map +1 -0
  152. package/dist/meta-serialization/types/enums/heading-constraint-meta-serialization.js +55 -0
  153. package/dist/meta-serialization/types/enums/heading-constraint-meta-serialization.js.map +1 -0
  154. package/dist/meta-serialization/types/enums/last-line-ended-type-meta-serialization.js +48 -0
  155. package/dist/meta-serialization/types/enums/last-line-ended-type-meta-serialization.js.map +1 -0
  156. package/dist/meta-serialization/types/enums/pad-alignment-meta-serialization.js +52 -0
  157. package/dist/meta-serialization/types/enums/pad-alignment-meta-serialization.js.map +1 -0
  158. package/dist/meta-serialization/types/enums/pad-char-type-meta-serialization.js +52 -0
  159. package/dist/meta-serialization/types/enums/pad-char-type-meta-serialization.js.map +1 -0
  160. package/dist/meta-serialization/types/enums/quoted-type-meta-serialization.js +52 -0
  161. package/dist/meta-serialization/types/enums/quoted-type-meta-serialization.js.map +1 -0
  162. package/dist/meta-serialization/types/enums/sequence-invokation-delay-meta-serialization.js +47 -0
  163. package/dist/meta-serialization/types/enums/sequence-invokation-delay-meta-serialization.js.map +1 -0
  164. package/dist/meta-serialization/types/enums/sequence-redirect-type-meta-serialisation.js +88 -0
  165. package/dist/meta-serialization/types/enums/sequence-redirect-type-meta-serialisation.js.map +1 -0
  166. package/dist/meta-serialization/types/enums/substitution-type-meta-serialization.js +47 -0
  167. package/dist/meta-serialization/types/enums/substitution-type-meta-serialization.js.map +1 -0
  168. package/dist/meta-serialization/types/enums/truncate-type-meta-serialization.js +56 -0
  169. package/dist/meta-serialization/types/enums/truncate-type-meta-serialization.js.map +1 -0
  170. package/dist/meta-serialization/types/float-meta-serialization.js +99 -0
  171. package/dist/meta-serialization/types/float-meta-serialization.js.map +1 -0
  172. package/dist/meta-serialization/types/integer-float-meta-serialization.js +52 -0
  173. package/dist/meta-serialization/types/integer-float-meta-serialization.js.map +1 -0
  174. package/dist/meta-serialization/types/integer-meta-serialization.js +50 -0
  175. package/dist/meta-serialization/types/integer-meta-serialization.js.map +1 -0
  176. package/dist/meta-serialization/types/string-meta-serialization.js +35 -0
  177. package/dist/meta-serialization/types/string-meta-serialization.js.map +1 -0
  178. package/dist/meta-serialization/utils/implicit-explicit-index-sorter.js +57 -0
  179. package/dist/meta-serialization/utils/implicit-explicit-index-sorter.js.map +1 -0
  180. package/dist/meta-serialization/utils/meta-serialization-redirect-sequence-resolver.js +33 -0
  181. package/dist/meta-serialization/utils/meta-serialization-redirect-sequence-resolver.js.map +1 -0
  182. package/dist/meta-serialization/utils/meta-serialization-sequence-name-resolver.js +67 -0
  183. package/dist/meta-serialization/utils/meta-serialization-sequence-name-resolver.js.map +1 -0
  184. package/dist/meta-serialization/utils/sequence-item-field-indices.js +70 -0
  185. package/dist/meta-serialization/utils/sequence-item-field-indices.js.map +1 -0
  186. package/dist/sequences/core/ft-sequence-invokation-list.js +91 -0
  187. package/dist/sequences/core/ft-sequence-invokation-list.js.map +1 -0
  188. package/dist/sequences/core/ft-sequence-invokation.js +143 -0
  189. package/dist/sequences/core/ft-sequence-invokation.js.map +1 -0
  190. package/dist/sequences/core/ft-sequence-item-list.js +34 -0
  191. package/dist/sequences/core/ft-sequence-item-list.js.map +1 -0
  192. package/dist/sequences/core/ft-sequence-item.js +46 -0
  193. package/dist/sequences/core/ft-sequence-item.js.map +1 -0
  194. package/dist/sequences/core/ft-sequence-list.js +62 -0
  195. package/dist/sequences/core/ft-sequence-list.js.map +1 -0
  196. package/dist/sequences/core/ft-sequence.js +59 -0
  197. package/dist/sequences/core/ft-sequence.js.map +1 -0
  198. package/dist/sequences/redirects/ft-boolean-sequence-redirect.js +33 -0
  199. package/dist/sequences/redirects/ft-boolean-sequence-redirect.js.map +1 -0
  200. package/dist/sequences/redirects/ft-case-insensitive-string-sequence-redirect.js +33 -0
  201. package/dist/sequences/redirects/ft-case-insensitive-string-sequence-redirect.js.map +1 -0
  202. package/dist/sequences/redirects/ft-date-sequence-redirect.js +37 -0
  203. package/dist/sequences/redirects/ft-date-sequence-redirect.js.map +1 -0
  204. package/dist/sequences/redirects/ft-exact-date-time-sequence-redirect.js +33 -0
  205. package/dist/sequences/redirects/ft-exact-date-time-sequence-redirect.js.map +1 -0
  206. package/dist/sequences/redirects/ft-exact-decimal-sequence-redirect.js +33 -0
  207. package/dist/sequences/redirects/ft-exact-decimal-sequence-redirect.js.map +1 -0
  208. package/dist/sequences/redirects/ft-exact-float-sequence-redirect.js +33 -0
  209. package/dist/sequences/redirects/ft-exact-float-sequence-redirect.js.map +1 -0
  210. package/dist/sequences/redirects/ft-exact-integer-sequence-redirect.js +33 -0
  211. package/dist/sequences/redirects/ft-exact-integer-sequence-redirect.js.map +1 -0
  212. package/dist/sequences/redirects/ft-exact-string-sequence-redirect.js +33 -0
  213. package/dist/sequences/redirects/ft-exact-string-sequence-redirect.js.map +1 -0
  214. package/dist/sequences/redirects/ft-null-sequence-redirect.js +20 -0
  215. package/dist/sequences/redirects/ft-null-sequence-redirect.js.map +1 -0
  216. package/dist/sequences/redirects/ft-sequence-redirect-list.js +35 -0
  217. package/dist/sequences/redirects/ft-sequence-redirect-list.js.map +1 -0
  218. package/dist/sequences/redirects/ft-sequence-redirect.js +47 -0
  219. package/dist/sequences/redirects/ft-sequence-redirect.js.map +1 -0
  220. package/dist/serialization/char-reader.js +178 -0
  221. package/dist/serialization/char-reader.js.map +1 -0
  222. package/dist/serialization/declaration-parser.js +176 -0
  223. package/dist/serialization/declaration-parser.js.map +1 -0
  224. package/dist/serialization/delimited-field-parser.js +278 -0
  225. package/dist/serialization/delimited-field-parser.js.map +1 -0
  226. package/dist/serialization/embedded-meta-parser.js +129 -0
  227. package/dist/serialization/embedded-meta-parser.js.map +1 -0
  228. package/dist/serialization/fixed-width-field-parser.js +196 -0
  229. package/dist/serialization/fixed-width-field-parser.js.map +1 -0
  230. package/dist/serialization/formatting/ft-boolean-field-formatter.js +113 -0
  231. package/dist/serialization/formatting/ft-boolean-field-formatter.js.map +1 -0
  232. package/dist/serialization/formatting/ft-date-time-field-formatter.js +54 -0
  233. package/dist/serialization/formatting/ft-date-time-field-formatter.js.map +1 -0
  234. package/dist/serialization/formatting/ft-decimal-field-formatter.js +46 -0
  235. package/dist/serialization/formatting/ft-decimal-field-formatter.js.map +1 -0
  236. package/dist/serialization/formatting/ft-declared-parameters-formatter.js +52 -0
  237. package/dist/serialization/formatting/ft-declared-parameters-formatter.js.map +1 -0
  238. package/dist/serialization/formatting/ft-field-formatter.js +15 -0
  239. package/dist/serialization/formatting/ft-field-formatter.js.map +1 -0
  240. package/dist/serialization/formatting/ft-float-field-formatter.js +46 -0
  241. package/dist/serialization/formatting/ft-float-field-formatter.js.map +1 -0
  242. package/dist/serialization/formatting/ft-integer-field-formatter.js +47 -0
  243. package/dist/serialization/formatting/ft-integer-field-formatter.js.map +1 -0
  244. package/dist/serialization/formatting/ft-string-field-formatter.js +14 -0
  245. package/dist/serialization/formatting/ft-string-field-formatter.js.map +1 -0
  246. package/dist/serialization/ft-declared-parameters.js +199 -0
  247. package/dist/serialization/ft-declared-parameters.js.map +1 -0
  248. package/dist/serialization/ft-serialization-reader.js +865 -0
  249. package/dist/serialization/ft-serialization-reader.js.map +1 -0
  250. package/dist/serialization/ft-serialization-writer.js +633 -0
  251. package/dist/serialization/ft-serialization-writer.js.map +1 -0
  252. package/dist/serialization/ft-text-reader.js +48 -0
  253. package/dist/serialization/ft-text-reader.js.map +1 -0
  254. package/dist/serialization/ft-text-writer.js +46 -0
  255. package/dist/serialization/ft-text-writer.js.map +1 -0
  256. package/dist/serialization/heading-line-record-parser.js +253 -0
  257. package/dist/serialization/heading-line-record-parser.js.map +1 -0
  258. package/dist/serialization/line-parser.js +205 -0
  259. package/dist/serialization/line-parser.js.map +1 -0
  260. package/dist/serialization/serialization-core.js +551 -0
  261. package/dist/serialization/serialization-core.js.map +1 -0
  262. package/dist/substitutions/ft-substitution-list.js +54 -0
  263. package/dist/substitutions/ft-substitution-list.js.map +1 -0
  264. package/dist/tsdoc-metadata.json +11 -0
  265. package/dist/types/enums/ft-boolean-styles.js +12 -0
  266. package/dist/types/enums/ft-boolean-styles.js.map +1 -0
  267. package/dist/types/enums/ft-data-type.js +12 -0
  268. package/dist/types/enums/ft-data-type.js.map +1 -0
  269. package/dist/types/enums/ft-end-of-line-auto-write-type.js +10 -0
  270. package/dist/types/enums/ft-end-of-line-auto-write-type.js.map +1 -0
  271. package/dist/types/enums/ft-end-of-line-type.js +9 -0
  272. package/dist/types/enums/ft-end-of-line-type.js.map +1 -0
  273. package/dist/types/enums/ft-heading-constraint.js +11 -0
  274. package/dist/types/enums/ft-heading-constraint.js.map +1 -0
  275. package/dist/types/enums/ft-last-line-ended-type.js +9 -0
  276. package/dist/types/enums/ft-last-line-ended-type.js.map +1 -0
  277. package/dist/types/enums/ft-line-type.js +13 -0
  278. package/dist/types/enums/ft-line-type.js.map +1 -0
  279. package/dist/types/enums/ft-meta-element-type.js +12 -0
  280. package/dist/types/enums/ft-meta-element-type.js.map +1 -0
  281. package/dist/types/enums/ft-meta-reference-type.js +10 -0
  282. package/dist/types/enums/ft-meta-reference-type.js.map +1 -0
  283. package/dist/types/enums/ft-meta-serialization-format.js +15 -0
  284. package/dist/types/enums/ft-meta-serialization-format.js.map +1 -0
  285. package/dist/types/enums/ft-pad-alignment.js +9 -0
  286. package/dist/types/enums/ft-pad-alignment.js.map +1 -0
  287. package/dist/types/enums/ft-pad-char-type.js +9 -0
  288. package/dist/types/enums/ft-pad-char-type.js.map +1 -0
  289. package/dist/types/enums/ft-quoted-type.js +9 -0
  290. package/dist/types/enums/ft-quoted-type.js.map +1 -0
  291. package/dist/types/enums/ft-read-record-result.js +9 -0
  292. package/dist/types/enums/ft-read-record-result.js.map +1 -0
  293. package/dist/types/enums/ft-sequence-invokation-delay.js +8 -0
  294. package/dist/types/enums/ft-sequence-invokation-delay.js.map +1 -0
  295. package/dist/types/enums/ft-sequence-redirect-type.js +15 -0
  296. package/dist/types/enums/ft-sequence-redirect-type.js.map +1 -0
  297. package/dist/types/enums/ft-substitution-type.js +12 -0
  298. package/dist/types/enums/ft-substitution-type.js.map +1 -0
  299. package/dist/types/enums/ft-truncate-type.js +11 -0
  300. package/dist/types/enums/ft-truncate-type.js.map +1 -0
  301. package/dist/types/errors/ft-internal-error.js +14 -0
  302. package/dist/types/errors/ft-internal-error.js.map +1 -0
  303. package/dist/types/errors/ft-serialization-error.js +49 -0
  304. package/dist/types/errors/ft-serialization-error.js.map +1 -0
  305. package/dist/types/errors/ft-serialization-exception.js +78 -0
  306. package/dist/types/errors/ft-serialization-exception.js.map +1 -0
  307. package/dist/types/events/ft-field-heading-ready-event-args.js +2 -0
  308. package/dist/types/events/ft-field-heading-ready-event-args.js.map +1 -0
  309. package/dist/types/events/ft-field-value-ready-event-args.js +2 -0
  310. package/dist/types/events/ft-field-value-ready-event-args.js.map +1 -0
  311. package/dist/types/events/ft-heading-line-finished-event-args.js +2 -0
  312. package/dist/types/events/ft-heading-line-finished-event-args.js.map +1 -0
  313. package/dist/types/events/ft-heading-line-started-event-args.js +2 -0
  314. package/dist/types/events/ft-heading-line-started-event-args.js.map +1 -0
  315. package/dist/types/events/ft-record-finished-event-args.js +2 -0
  316. package/dist/types/events/ft-record-finished-event-args.js.map +1 -0
  317. package/dist/types/events/ft-record-started-event-args.js +2 -0
  318. package/dist/types/events/ft-record-started-event-args.js.map +1 -0
  319. package/dist/types/events/ft-sequence-redirected-event-args.js +2 -0
  320. package/dist/types/events/ft-sequence-redirected-event-args.js.map +1 -0
  321. package/package.json +84 -0
  322. package/src/api/ft-reader.ts +106 -0
  323. package/src/api/ft-serialization.ts +216 -0
  324. package/src/api/ft-writer-settings.ts +76 -0
  325. package/src/api/ft-writer.ts +26 -0
  326. package/src/factory/ft-field-factory.ts +94 -0
  327. package/src/factory/ft-meta-constructor.ts +16 -0
  328. package/src/factory/ft-meta-factory.ts +34 -0
  329. package/src/factory/ft-sequence-constructor.ts +11 -0
  330. package/src/factory/ft-sequence-factory.ts +22 -0
  331. package/src/factory/ft-sequence-item-constructor.ts +11 -0
  332. package/src/factory/ft-sequence-item-factory.ts +22 -0
  333. package/src/factory/ft-sequence-redirect-constructor.ts +19 -0
  334. package/src/factory/ft-sequence-redirect-factory.ts +197 -0
  335. package/src/factory/ft-substitution-constructor.ts +24 -0
  336. package/src/factory/ft-substitution-factory.ts +43 -0
  337. package/src/fields/definitions/ft-boolean-field-definition.ts +49 -0
  338. package/src/fields/definitions/ft-date-time-field-definition.ts +52 -0
  339. package/src/fields/definitions/ft-decimal-field-definition.ts +43 -0
  340. package/src/fields/definitions/ft-field-definition-list.ts +33 -0
  341. package/src/fields/definitions/ft-field-definition.ts +276 -0
  342. package/src/fields/definitions/ft-float-field-definition.ts +43 -0
  343. package/src/fields/definitions/ft-generic-field-definition.ts +49 -0
  344. package/src/fields/definitions/ft-integer-field-definition.ts +44 -0
  345. package/src/fields/definitions/ft-string-field-definition.ts +26 -0
  346. package/src/fields/instances/ft-boolean-field.ts +49 -0
  347. package/src/fields/instances/ft-date-time-field.ts +44 -0
  348. package/src/fields/instances/ft-decimal-field.ts +44 -0
  349. package/src/fields/instances/ft-field-list.ts +68 -0
  350. package/src/fields/instances/ft-field.ts +691 -0
  351. package/src/fields/instances/ft-float-field.ts +44 -0
  352. package/src/fields/instances/ft-generic-field.ts +219 -0
  353. package/src/fields/instances/ft-integer-field.ts +44 -0
  354. package/src/fields/instances/ft-string-field.ts +40 -0
  355. package/src/index.ts +185 -0
  356. package/src/meta/fields/ft-boolean-meta-field.ts +79 -0
  357. package/src/meta/fields/ft-date-time-meta-field.ts +68 -0
  358. package/src/meta/fields/ft-decimal-meta-field.ts +68 -0
  359. package/src/meta/fields/ft-float-meta-field.ts +68 -0
  360. package/src/meta/fields/ft-generic-meta-field.ts +38 -0
  361. package/src/meta/fields/ft-integer-meta-field.ts +68 -0
  362. package/src/meta/fields/ft-meta-field-list.ts +208 -0
  363. package/src/meta/fields/ft-meta-field.ts +399 -0
  364. package/src/meta/fields/ft-string-meta-field.ts +34 -0
  365. package/src/meta/ft-meta-defaults.ts +151 -0
  366. package/src/meta/ft-meta.ts +453 -0
  367. package/src/meta/sequences/core/ft-meta-sequence-item-list.ts +97 -0
  368. package/src/meta/sequences/core/ft-meta-sequence-item.ts +78 -0
  369. package/src/meta/sequences/core/ft-meta-sequence-list.ts +203 -0
  370. package/src/meta/sequences/core/ft-meta-sequence.ts +127 -0
  371. package/src/meta/sequences/redirects/ft-boolean-meta-sequence-redirect.ts +49 -0
  372. package/src/meta/sequences/redirects/ft-case-insensitive-string-meta-sequence-redirect.ts +49 -0
  373. package/src/meta/sequences/redirects/ft-date-meta-sequence-redirect.ts +54 -0
  374. package/src/meta/sequences/redirects/ft-exact-date-time-meta-sequence-redirect.ts +49 -0
  375. package/src/meta/sequences/redirects/ft-exact-decimal-meta-sequence-redirect.ts +49 -0
  376. package/src/meta/sequences/redirects/ft-exact-float-meta-sequence-redirect.ts +49 -0
  377. package/src/meta/sequences/redirects/ft-exact-integer-meta-sequence-redirect.ts +49 -0
  378. package/src/meta/sequences/redirects/ft-exact-string-meta-sequence-redirect.ts +49 -0
  379. package/src/meta/sequences/redirects/ft-meta-sequence-redirect-list.ts +99 -0
  380. package/src/meta/sequences/redirects/ft-meta-sequence-redirect.ts +89 -0
  381. package/src/meta/sequences/redirects/ft-null-meta-sequence-redirect.ts +25 -0
  382. package/src/meta/substitutions/ft-meta-substitution-list.ts +54 -0
  383. package/src/meta-serialization/format/ft-json-meta-serialization.ts +288 -0
  384. package/src/meta-serialization/format/ft-xml-meta-serialization.ts +885 -0
  385. package/src/meta-serialization/format/meta-serializer-options.ts +21 -0
  386. package/src/meta-serialization/ft-meta-serialization.ts +60 -0
  387. package/src/meta-serialization/styles/ft-boolean-styles-meta-serialization.ts +88 -0
  388. package/src/meta-serialization/styles/ft-date-time-styles-meta-serialization.ts +50 -0
  389. package/src/meta-serialization/styles/ft-number-styles-meta-serialization.ts +212 -0
  390. package/src/meta-serialization/types/boolean-meta-serialization.ts +36 -0
  391. package/src/meta-serialization/types/char-meta-serialization.ts +28 -0
  392. package/src/meta-serialization/types/date-time-meta-serialization.ts +220 -0
  393. package/src/meta-serialization/types/decimal-meta-serialization.ts +13 -0
  394. package/src/meta-serialization/types/enums/data-type-meta-serialisation.ts +52 -0
  395. package/src/meta-serialization/types/enums/end-of-line-auto-write-type-meta-serialization.ts +47 -0
  396. package/src/meta-serialization/types/enums/end-of-line-type-meta-serialization.ts +46 -0
  397. package/src/meta-serialization/types/enums/heading-constraint-meta-serialization.ts +52 -0
  398. package/src/meta-serialization/types/enums/last-line-ended-type-meta-serialization.ts +45 -0
  399. package/src/meta-serialization/types/enums/meta-element-type-meta-serialization.ts +36 -0
  400. package/src/meta-serialization/types/enums/pad-alignment-meta-serialization.ts +54 -0
  401. package/src/meta-serialization/types/enums/pad-char-type-meta-serialization.ts +54 -0
  402. package/src/meta-serialization/types/enums/quoted-type-meta-serialization.ts +54 -0
  403. package/src/meta-serialization/types/enums/sequence-invokation-delay-meta-serialization.ts +44 -0
  404. package/src/meta-serialization/types/enums/sequence-redirect-type-meta-serialisation.ts +86 -0
  405. package/src/meta-serialization/types/enums/substitution-type-meta-serialization.ts +44 -0
  406. package/src/meta-serialization/types/enums/truncate-type-meta-serialization.ts +58 -0
  407. package/src/meta-serialization/types/float-meta-serialization.ts +96 -0
  408. package/src/meta-serialization/types/integer-float-meta-serialization.ts +46 -0
  409. package/src/meta-serialization/types/integer-meta-serialization.ts +44 -0
  410. package/src/meta-serialization/types/string-meta-serialization.ts +32 -0
  411. package/src/meta-serialization/utils/implicit-explicit-index-sorter.ts +61 -0
  412. package/src/meta-serialization/utils/meta-serialization-redirect-sequence-resolver.ts +43 -0
  413. package/src/meta-serialization/utils/meta-serialization-sequence-name-resolver.ts +85 -0
  414. package/src/meta-serialization/utils/sequence-item-field-indices.ts +76 -0
  415. package/src/sequences/core/ft-sequence-invokation-list.ts +109 -0
  416. package/src/sequences/core/ft-sequence-invokation.ts +166 -0
  417. package/src/sequences/core/ft-sequence-item-list.ts +40 -0
  418. package/src/sequences/core/ft-sequence-item.ts +59 -0
  419. package/src/sequences/core/ft-sequence-list.ts +73 -0
  420. package/src/sequences/core/ft-sequence.ts +75 -0
  421. package/src/sequences/redirects/ft-boolean-sequence-redirect.ts +42 -0
  422. package/src/sequences/redirects/ft-case-insensitive-string-sequence-redirect.ts +46 -0
  423. package/src/sequences/redirects/ft-date-sequence-redirect.ts +48 -0
  424. package/src/sequences/redirects/ft-exact-date-time-sequence-redirect.ts +46 -0
  425. package/src/sequences/redirects/ft-exact-decimal-sequence-redirect.ts +46 -0
  426. package/src/sequences/redirects/ft-exact-float-sequence-redirect.ts +46 -0
  427. package/src/sequences/redirects/ft-exact-integer-sequence-redirect.ts +46 -0
  428. package/src/sequences/redirects/ft-exact-string-sequence-redirect.ts +46 -0
  429. package/src/sequences/redirects/ft-null-sequence-redirect.ts +27 -0
  430. package/src/sequences/redirects/ft-sequence-redirect-list.ts +42 -0
  431. package/src/sequences/redirects/ft-sequence-redirect.ts +68 -0
  432. package/src/serialization/char-reader.ts +203 -0
  433. package/src/serialization/declaration-parser.ts +203 -0
  434. package/src/serialization/delimited-field-parser.ts +296 -0
  435. package/src/serialization/embedded-meta-parser.ts +147 -0
  436. package/src/serialization/fixed-width-field-parser.ts +220 -0
  437. package/src/serialization/formatting/ft-boolean-field-formatter.ts +114 -0
  438. package/src/serialization/formatting/ft-date-time-field-formatter.ts +61 -0
  439. package/src/serialization/formatting/ft-decimal-field-formatter.ts +52 -0
  440. package/src/serialization/formatting/ft-declared-parameters-formatter.ts +60 -0
  441. package/src/serialization/formatting/ft-field-formatter.ts +18 -0
  442. package/src/serialization/formatting/ft-float-field-formatter.ts +52 -0
  443. package/src/serialization/formatting/ft-integer-field-formatter.ts +53 -0
  444. package/src/serialization/formatting/ft-string-field-formatter.ts +15 -0
  445. package/src/serialization/formatting/index.ts +7 -0
  446. package/src/serialization/ft-declared-parameters.ts +232 -0
  447. package/src/serialization/ft-serialization-reader.ts +953 -0
  448. package/src/serialization/ft-serialization-writer.ts +760 -0
  449. package/src/serialization/ft-text-reader.ts +64 -0
  450. package/src/serialization/ft-text-writer.ts +61 -0
  451. package/src/serialization/heading-line-record-parser.ts +285 -0
  452. package/src/serialization/line-parser.ts +231 -0
  453. package/src/serialization/serialization-core.ts +632 -0
  454. package/src/substitutions/ft-substitution-list.ts +60 -0
  455. package/src/types/enums/ft-boolean-styles.ts +17 -0
  456. package/src/types/enums/ft-data-type.ts +21 -0
  457. package/src/types/enums/ft-end-of-line-auto-write-type.ts +14 -0
  458. package/src/types/enums/ft-end-of-line-type.ts +13 -0
  459. package/src/types/enums/ft-heading-constraint.ts +15 -0
  460. package/src/types/enums/ft-last-line-ended-type.ts +13 -0
  461. package/src/types/enums/ft-line-type.ts +17 -0
  462. package/src/types/enums/ft-meta-element-type.ts +16 -0
  463. package/src/types/enums/ft-meta-reference-type.ts +14 -0
  464. package/src/types/enums/ft-meta-serialization-format.ts +19 -0
  465. package/src/types/enums/ft-pad-alignment.ts +13 -0
  466. package/src/types/enums/ft-pad-char-type.ts +13 -0
  467. package/src/types/enums/ft-quoted-type.ts +13 -0
  468. package/src/types/enums/ft-read-record-result.ts +13 -0
  469. package/src/types/enums/ft-sequence-invokation-delay.ts +12 -0
  470. package/src/types/enums/ft-sequence-redirect-type.ts +19 -0
  471. package/src/types/enums/ft-substitution-type.ts +16 -0
  472. package/src/types/enums/ft-truncate-type.ts +15 -0
  473. package/src/types/errors/ft-internal-error.ts +15 -0
  474. package/src/types/errors/ft-serialization-error.ts +53 -0
  475. package/src/types/errors/ft-serialization-exception.ts +86 -0
  476. package/src/types/events/ft-field-heading-ready-event-args.ts +9 -0
  477. package/src/types/events/ft-field-value-ready-event-args.ts +9 -0
  478. package/src/types/events/ft-heading-line-finished-event-args.ts +6 -0
  479. package/src/types/events/ft-heading-line-started-event-args.ts +6 -0
  480. package/src/types/events/ft-record-finished-event-args.ts +6 -0
  481. package/src/types/events/ft-record-started-event-args.ts +6 -0
  482. package/src/types/events/ft-sequence-redirected-event-args.ts +9 -0
@@ -0,0 +1,49 @@
1
+ // Exact string meta sequence redirect
2
+
3
+ import { FtSequenceRedirectType } from '../../../types/enums/ft-sequence-redirect-type.js';
4
+ import type { FtMetaSequenceList } from '../core/ft-meta-sequence-list.js';
5
+ import { FtMetaSequenceRedirect } from './ft-meta-sequence-redirect.js';
6
+
7
+ /**
8
+ * Meta sequence redirect that triggers when a field value exactly matches a specific string (case-sensitive).
9
+ * Used in metadata to define sequence transitions based on exact string field values.
10
+ * @public
11
+ */
12
+ export class FtExactStringMetaSequenceRedirect extends FtMetaSequenceRedirect {
13
+ /** The standard type identifier for exact string redirects */
14
+ static readonly TYPE = FtSequenceRedirectType.ExactString;
15
+ /** Default string value */
16
+ static readonly DEFAULT_VALUE = '';
17
+
18
+ private _value: string;
19
+
20
+ constructor() {
21
+ super(FtExactStringMetaSequenceRedirect.TYPE);
22
+ this._value = FtExactStringMetaSequenceRedirect.DEFAULT_VALUE;
23
+ }
24
+
25
+ /** The string value to match exactly for triggering the redirect */
26
+ get value(): string {
27
+ return this._value;
28
+ }
29
+
30
+ set value(val: string) {
31
+ this._value = val;
32
+ }
33
+
34
+ override loadDefaults(): void {
35
+ super.loadDefaults();
36
+ this._value = FtExactStringMetaSequenceRedirect.DEFAULT_VALUE;
37
+ }
38
+
39
+ createCopy(sequenceList: FtMetaSequenceList, sourceSequenceList: FtMetaSequenceList): FtMetaSequenceRedirect {
40
+ const redirect = new FtExactStringMetaSequenceRedirect();
41
+ redirect.assign(this, sequenceList, sourceSequenceList);
42
+ return redirect;
43
+ }
44
+
45
+ protected override assign(source: FtMetaSequenceRedirect, sequenceList: FtMetaSequenceList, sourceSequenceList: FtMetaSequenceList): void {
46
+ super.assign(source, sequenceList, sourceSequenceList);
47
+ this._value = (source as FtExactStringMetaSequenceRedirect)._value;
48
+ }
49
+ }
@@ -0,0 +1,99 @@
1
+ // Meta sequence redirect list - manages redirects for a sequence item
2
+
3
+ import { FtSequenceRedirectType } from '../../../types/enums/ft-sequence-redirect-type.js';
4
+ import { FtUnreachableCaseError } from '../../../types/errors/ft-internal-error.js';
5
+ import type { FtMetaSequenceList } from '../core/ft-meta-sequence-list.js';
6
+ import { FtBooleanMetaSequenceRedirect } from './ft-boolean-meta-sequence-redirect.js';
7
+ import { FtCaseInsensitiveStringMetaSequenceRedirect } from './ft-case-insensitive-string-meta-sequence-redirect.js';
8
+ import { FtDateMetaSequenceRedirect } from './ft-date-meta-sequence-redirect.js';
9
+ import { FtExactDateTimeMetaSequenceRedirect } from './ft-exact-date-time-meta-sequence-redirect.js';
10
+ import { FtExactDecimalMetaSequenceRedirect } from './ft-exact-decimal-meta-sequence-redirect.js';
11
+ import { FtExactFloatMetaSequenceRedirect } from './ft-exact-float-meta-sequence-redirect.js';
12
+ import { FtExactIntegerMetaSequenceRedirect } from './ft-exact-integer-meta-sequence-redirect.js';
13
+ import { FtExactStringMetaSequenceRedirect } from './ft-exact-string-meta-sequence-redirect.js';
14
+ import type { FtMetaSequenceRedirect } from './ft-meta-sequence-redirect.js';
15
+ import { FtNullMetaSequenceRedirect } from './ft-null-meta-sequence-redirect.js';
16
+
17
+ /**
18
+ * List of meta sequence redirects for a sequence item.
19
+ * Manages the collection of redirects that determine when to switch sequences.
20
+ * @public
21
+ */
22
+ export class FtMetaSequenceRedirectList {
23
+ private readonly _list: FtMetaSequenceRedirect[] = [];
24
+
25
+ get count(): number {
26
+ return this._list.length;
27
+ }
28
+
29
+ get(index: number): FtMetaSequenceRedirect {
30
+ return this._list[index];
31
+ }
32
+
33
+ set(redirects: readonly FtMetaSequenceRedirect[]): void {
34
+ const count = redirects.length;
35
+ this._list.length = count;
36
+ for (let i = 0; i < count; i++) {
37
+ this._list[i] = redirects[i];
38
+ }
39
+ }
40
+
41
+ new(type: FtSequenceRedirectType): FtMetaSequenceRedirect {
42
+ const redirect = this.createMetaSequenceRedirect(type);
43
+ this.add(redirect);
44
+ return redirect;
45
+ }
46
+
47
+ remove(redirect: FtMetaSequenceRedirect): void {
48
+ const index = this._list.indexOf(redirect);
49
+ if (index >= 0) {
50
+ this._list.splice(index, 1);
51
+ }
52
+ }
53
+
54
+ removeAt(index: number): void {
55
+ this._list.splice(index, 1);
56
+ }
57
+
58
+ clear(): void {
59
+ this._list.length = 0;
60
+ }
61
+
62
+ assign(source: FtMetaSequenceRedirectList, sequenceList: FtMetaSequenceList, sourceSequenceList: FtMetaSequenceList): void {
63
+ this._list.length = 0;
64
+
65
+ for (let i = 0; i < source.count; i++) {
66
+ const redirect = source.get(i).createCopy(sequenceList, sourceSequenceList);
67
+ this.add(redirect);
68
+ }
69
+ }
70
+
71
+ private add(redirect: FtMetaSequenceRedirect): void {
72
+ this._list.push(redirect);
73
+ }
74
+
75
+ private createMetaSequenceRedirect(type: FtSequenceRedirectType): FtMetaSequenceRedirect {
76
+ switch (type) {
77
+ case FtSequenceRedirectType.Null:
78
+ return new FtNullMetaSequenceRedirect();
79
+ case FtSequenceRedirectType.Boolean:
80
+ return new FtBooleanMetaSequenceRedirect();
81
+ case FtSequenceRedirectType.ExactString:
82
+ return new FtExactStringMetaSequenceRedirect();
83
+ case FtSequenceRedirectType.CaseInsensitiveString:
84
+ return new FtCaseInsensitiveStringMetaSequenceRedirect();
85
+ case FtSequenceRedirectType.ExactInteger:
86
+ return new FtExactIntegerMetaSequenceRedirect();
87
+ case FtSequenceRedirectType.ExactFloat:
88
+ return new FtExactFloatMetaSequenceRedirect();
89
+ case FtSequenceRedirectType.ExactDecimal:
90
+ return new FtExactDecimalMetaSequenceRedirect();
91
+ case FtSequenceRedirectType.ExactDateTime:
92
+ return new FtExactDateTimeMetaSequenceRedirect();
93
+ case FtSequenceRedirectType.Date:
94
+ return new FtDateMetaSequenceRedirect();
95
+ default:
96
+ throw new FtUnreachableCaseError('MSRLCMSR22113', type);
97
+ }
98
+ }
99
+ }
@@ -0,0 +1,89 @@
1
+ // Abstract base class for meta sequence redirects
2
+
3
+ import { FtSequenceInvokationDelay } from '../../../types/enums/ft-sequence-invokation-delay.js';
4
+ import { FtSequenceRedirectType } from '../../../types/enums/ft-sequence-redirect-type.js';
5
+ import type { FtMetaSequenceList } from '../core/ft-meta-sequence-list.js';
6
+ import type { FtMetaSequence } from '../core/ft-meta-sequence.js';
7
+
8
+ /**
9
+ * Default invokation delay for sequence redirects.
10
+ * @public
11
+ */
12
+ export const DEFAULT_INVOKATION_DELAY = FtSequenceInvokationDelay.AfterField;
13
+
14
+ /**
15
+ * Abstract base class for meta sequence redirects.
16
+ * Sequence redirects define conditional transitions from one sequence to another
17
+ * based on field values in the metadata.
18
+ * @public
19
+ */
20
+ export abstract class FtMetaSequenceRedirect {
21
+ private readonly _type: FtSequenceRedirectType;
22
+ private _sequence: FtMetaSequence | undefined;
23
+ private _invokationDelay: FtSequenceInvokationDelay;
24
+
25
+ protected constructor(type: FtSequenceRedirectType) {
26
+ this._type = type;
27
+ this._invokationDelay = DEFAULT_INVOKATION_DELAY;
28
+ }
29
+
30
+ /** The type identifier for this redirect */
31
+ get type(): FtSequenceRedirectType {
32
+ return this._type;
33
+ }
34
+
35
+ /** The target sequence to redirect to when this redirect is triggered */
36
+ get sequence(): FtMetaSequence | undefined {
37
+ return this._sequence;
38
+ }
39
+
40
+ set sequence(value: FtMetaSequence | undefined) {
41
+ this._sequence = value;
42
+ }
43
+
44
+ /** When the redirect should be invoked relative to field processing */
45
+ get invokationDelay(): FtSequenceInvokationDelay {
46
+ return this._invokationDelay;
47
+ }
48
+
49
+ set invokationDelay(value: FtSequenceInvokationDelay) {
50
+ this._invokationDelay = value;
51
+ }
52
+
53
+ /** Reset this redirect to default values */
54
+ loadDefaults(): void {
55
+ this._invokationDelay = DEFAULT_INVOKATION_DELAY;
56
+ }
57
+
58
+ /**
59
+ * Assign values from another redirect to this one.
60
+ * @param source - The source redirect to copy from
61
+ * @param sequenceList - The destination sequence list
62
+ * @param sourceSequenceList - The source sequence list
63
+ * @internal
64
+ */
65
+ protected assign(source: FtMetaSequenceRedirect, sequenceList: FtMetaSequenceList, sourceSequenceList: FtMetaSequenceList): void {
66
+ this._invokationDelay = source._invokationDelay;
67
+
68
+ if (source._sequence) {
69
+ const sequenceIndex = sourceSequenceList.indexOf(source._sequence);
70
+ if (sequenceIndex < 0) {
71
+ throw new Error('Source sequence not found in source sequence list');
72
+ }
73
+ if (sequenceIndex >= sequenceList.count) {
74
+ throw new Error(`Sequence index ${sequenceIndex} out of range`);
75
+ }
76
+ this._sequence = sequenceList.get(sequenceIndex);
77
+ } else {
78
+ this._sequence = undefined;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Create a deep copy of this redirect.
84
+ * @param sequenceList - The destination sequence list
85
+ * @param sourceSequenceList - The source sequence list
86
+ * @returns A new redirect instance with copied values
87
+ */
88
+ abstract createCopy(sequenceList: FtMetaSequenceList, sourceSequenceList: FtMetaSequenceList): FtMetaSequenceRedirect;
89
+ }
@@ -0,0 +1,25 @@
1
+ // Null meta sequence redirect
2
+
3
+ import { FtSequenceRedirectType } from '../../../types/enums/ft-sequence-redirect-type.js';
4
+ import type { FtMetaSequenceList } from '../core/ft-meta-sequence-list.js';
5
+ import { FtMetaSequenceRedirect } from './ft-meta-sequence-redirect.js';
6
+
7
+ /**
8
+ * Meta sequence redirect that triggers when a field value is null.
9
+ * Used in metadata to define sequence transitions based on null field values.
10
+ * @public
11
+ */
12
+ export class FtNullMetaSequenceRedirect extends FtMetaSequenceRedirect {
13
+ /** The standard type identifier for null redirects */
14
+ static readonly TYPE = FtSequenceRedirectType.Null;
15
+
16
+ constructor() {
17
+ super(FtNullMetaSequenceRedirect.TYPE);
18
+ }
19
+
20
+ createCopy(sequenceList: FtMetaSequenceList, sourceSequenceList: FtMetaSequenceList): FtMetaSequenceRedirect {
21
+ const redirect = new FtNullMetaSequenceRedirect();
22
+ redirect.assign(this, sequenceList, sourceSequenceList);
23
+ return redirect;
24
+ }
25
+ }
@@ -0,0 +1,54 @@
1
+ import { FtSubstitutionFactory } from '../../factory/ft-substitution-factory.js';
2
+ import { FtSubstitutionType } from '../../types/enums/ft-substitution-type.js';
3
+ import { FtMetaDefaults } from '../ft-meta-defaults.js';
4
+
5
+ /**
6
+ * @public
7
+ */
8
+ export class FtMetaSubstitution {
9
+ constructor(
10
+ public id = 0,
11
+ public token: string = FtMetaDefaults.Substitution.Token,
12
+ public type: FtSubstitutionType = FtMetaDefaults.Substitution.Type,
13
+ public value = '',
14
+ ) {}
15
+ }
16
+
17
+ /**
18
+ * @public
19
+ */
20
+ export class FtMetaSubstitutionList {
21
+ private substitutions: FtMetaSubstitution[] = [];
22
+
23
+ get count(): number {
24
+ return this.substitutions.length;
25
+ }
26
+
27
+ get(index: number): FtMetaSubstitution {
28
+ return this.substitutions[index];
29
+ }
30
+
31
+ new(type: FtSubstitutionType = FtSubstitutionType.String, token = '\\', value = ''): FtMetaSubstitution {
32
+ const sub = FtSubstitutionFactory.createMetaSubstitution();
33
+ sub.id = this.substitutions.length;
34
+ sub.type = type;
35
+ sub.token = token;
36
+ sub.value = value;
37
+ this.substitutions.push(sub);
38
+ return sub;
39
+ }
40
+
41
+ clear(): void {
42
+ this.substitutions = [];
43
+ }
44
+
45
+ assign(source: FtMetaSubstitutionList): void {
46
+ this.clear();
47
+
48
+ for (let i = 0; i < source.count; i++) {
49
+ const sourceSub = source.get(i);
50
+ const targetSub = this.new(sourceSub.type, sourceSub.token, sourceSub.value);
51
+ targetSub.id = sourceSub.id;
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,288 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
+ /* eslint-disable @typescript-eslint/restrict-plus-operands */
3
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
4
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
5
+ /* eslint-disable @typescript-eslint/no-explicit-any */
6
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
7
+ import { FtBooleanMetaField } from '../../meta/fields/ft-boolean-meta-field.js';
8
+ import { FtDateTimeMetaField } from '../../meta/fields/ft-date-time-meta-field.js';
9
+ import { FtDecimalMetaField } from '../../meta/fields/ft-decimal-meta-field.js';
10
+ import { FtFloatMetaField } from '../../meta/fields/ft-float-meta-field.js';
11
+ import { FtIntegerMetaField } from '../../meta/fields/ft-integer-meta-field.js';
12
+ import { FtMetaField } from '../../meta/fields/ft-meta-field.js';
13
+ import { FtStringMetaField } from '../../meta/fields/ft-string-meta-field.js';
14
+ import { FtMeta } from '../../meta/ft-meta.js';
15
+ import { DataTypeMetaSerialization } from '../types/enums/data-type-meta-serialisation.js';
16
+ import { EndOfLineAutoWriteTypeMetaSerialization } from '../types/enums/end-of-line-auto-write-type-meta-serialization.js';
17
+ import { EndOfLineTypeMetaSerialization } from '../types/enums/end-of-line-type-meta-serialization.js';
18
+ import { HeadingConstraintMetaSerialization } from '../types/enums/heading-constraint-meta-serialization.js';
19
+ import { LastLineEndedTypeMetaSerialization } from '../types/enums/last-line-ended-type-meta-serialization.js';
20
+ import { PadAlignmentMetaSerialization } from '../types/enums/pad-alignment-meta-serialization.js';
21
+ import { PadCharTypeMetaSerialization } from '../types/enums/pad-char-type-meta-serialization.js';
22
+ import { QuotedTypeMetaSerialization } from '../types/enums/quoted-type-meta-serialization.js';
23
+ import { TruncateTypeMetaSerialization } from '../types/enums/truncate-type-meta-serialization.js';
24
+ import { FtMetaSerializerOptions } from './meta-serializer-options.js';
25
+
26
+ /**
27
+ * Serializes and deserializes FtMeta to/from JSON format.
28
+ * This provides a simpler alternative to XML serialization.
29
+ * @public
30
+ */
31
+ export class FtJsonMetaSerialization {
32
+ /**
33
+ * Serialize an FtMeta object to JSON string.
34
+ */
35
+ serialize(meta: FtMeta, _options?: FtMetaSerializerOptions): string {
36
+ const obj: any = {
37
+ culture: meta.culture.name,
38
+ delimiterChar: meta.delimiterChar,
39
+ quoteChar: meta.quoteChar,
40
+ lineCommentChar: meta.lineCommentChar,
41
+ endOfLineType: EndOfLineTypeMetaSerialization.serialize(meta.endOfLineType),
42
+ endOfLineChar: meta.endOfLineChar,
43
+ endOfLineAutoWriteType: EndOfLineAutoWriteTypeMetaSerialization.serialize(meta.endOfLineAutoWriteType),
44
+ lastLineEndedType: LastLineEndedTypeMetaSerialization.serialize(meta.lastLineEndedType),
45
+ allowEndOfLineCharInQuotes: meta.allowEndOfLineCharInQuotes,
46
+ ignoreBlankLines: meta.ignoreBlankLines,
47
+ ignoreExtraChars: meta.ignoreExtraChars,
48
+ allowIncompleteRecords: meta.allowIncompleteRecords,
49
+ stuffedEmbeddedQuotes: meta.stuffedEmbeddedQuotes,
50
+ substitutionsEnabled: meta.substitutionsEnabled,
51
+ substitutionChar: meta.substitutionChar,
52
+ headingLineCount: meta.headingLineCount,
53
+ mainHeadingLineIndex: meta.mainHeadingLineIndex,
54
+ headingConstraint: HeadingConstraintMetaSerialization.serialize(meta.headingConstraint, undefined),
55
+ headingQuotedType: QuotedTypeMetaSerialization.serialize(meta.headingQuotedType, true, undefined),
56
+ headingAlwaysWriteOptionalQuote: meta.headingAlwaysWriteOptionalQuote,
57
+ headingWritePrefixSpace: meta.headingWritePrefixSpace,
58
+ headingPadAlignment: PadAlignmentMetaSerialization.serialize(meta.headingPadAlignment, true, undefined),
59
+ headingPadCharType: PadCharTypeMetaSerialization.serialize(meta.headingPadCharType, true, undefined),
60
+ headingPadChar: meta.headingPadChar,
61
+ headingTruncateType: TruncateTypeMetaSerialization.serialize(meta.headingTruncateType, true, undefined),
62
+ headingTruncateChar: meta.headingTruncateChar,
63
+ headingEndOfValueChar: meta.headingEndOfValueChar,
64
+ };
65
+
66
+ // Serialize fields
67
+ const fields: any[] = [];
68
+ for (let i = 0; i < meta.fieldList.count; i++) {
69
+ const field = meta.fieldList.get(i);
70
+ fields.push(this.serializeField(field, meta));
71
+ }
72
+ obj.fields = fields;
73
+
74
+ // Serialize substitutions
75
+ const substitutions: any[] = [];
76
+ for (let i = 0; i < meta.substitutionList.count; i++) {
77
+ const sub = meta.substitutionList.get(i);
78
+ substitutions.push({
79
+ token: sub.token,
80
+ value: sub.value,
81
+ type: sub.type,
82
+ });
83
+ }
84
+ obj.substitutions = substitutions;
85
+
86
+ // Serialize sequences (simplified - just names and root status)
87
+ const sequences: any[] = [];
88
+ for (let i = 0; i < meta.sequenceList.count; i++) {
89
+ const seq = meta.sequenceList.get(i);
90
+ const seqObj: any = {
91
+ name: seq.name,
92
+ root: seq.root,
93
+ };
94
+
95
+ // Serialize items (field references)
96
+ const items: any[] = [];
97
+ for (let j = 0; j < seq.itemList.count; j++) {
98
+ const item = seq.itemList.get(j);
99
+ // Store field ID or index to reconstruct later
100
+ const field = item.field;
101
+ items.push({
102
+ fieldId: field.id,
103
+ fieldName: field.name,
104
+ });
105
+ }
106
+ seqObj.items = items;
107
+
108
+ sequences.push(seqObj);
109
+ }
110
+ obj.sequences = sequences;
111
+
112
+ return JSON.stringify(obj, null, 2);
113
+ }
114
+
115
+ /**
116
+ * Deserialize JSON string to an FtMeta object.
117
+ */
118
+ deserialize(json: string, _warnings?: string[]): FtMeta {
119
+ const warnings = new Array<string>();
120
+ const obj = JSON.parse(json) as Record<string, any>;
121
+ const meta = new FtMeta();
122
+
123
+ // Deserialize core properties
124
+ if (obj.culture) {
125
+ // Try to set locale from culture name
126
+ try {
127
+ meta.culture = DotNetLocaleSettings.createInvariant(); // Keep default if not parseable
128
+ } catch {
129
+ // Ignore culture parsing errors
130
+ }
131
+ }
132
+ meta.delimiterChar = obj.delimiterChar;
133
+ meta.quoteChar = obj.quoteChar;
134
+ meta.lineCommentChar = obj.lineCommentChar;
135
+ meta.endOfLineType = EndOfLineTypeMetaSerialization.deserialize(obj.endOfLineType, warnings);
136
+ meta.endOfLineChar = obj.endOfLineChar;
137
+ meta.endOfLineAutoWriteType = EndOfLineAutoWriteTypeMetaSerialization.deserialize(obj.endOfLineAutoWriteType, warnings);
138
+ meta.lastLineEndedType = LastLineEndedTypeMetaSerialization.deserialize(obj.lastLineEndedType, warnings);
139
+ meta.allowEndOfLineCharInQuotes = obj.allowEndOfLineCharInQuotes;
140
+ meta.ignoreBlankLines = obj.ignoreBlankLines;
141
+ meta.ignoreExtraChars = obj.ignoreExtraChars;
142
+ meta.allowIncompleteRecords = obj.allowIncompleteRecords;
143
+ meta.stuffedEmbeddedQuotes = obj.stuffedEmbeddedQuotes;
144
+ meta.substitutionsEnabled = obj.substitutionsEnabled;
145
+ meta.substitutionChar = obj.substitutionChar;
146
+ meta.headingLineCount = obj.headingLineCount;
147
+ meta.mainHeadingLineIndex = obj.mainHeadingLineIndex;
148
+ meta.headingConstraint = HeadingConstraintMetaSerialization.deserialize(obj.headingConstraint, undefined, warnings);
149
+ meta.headingQuotedType = QuotedTypeMetaSerialization.deserialize(obj.headingQuotedType, true, undefined, warnings);
150
+ meta.headingAlwaysWriteOptionalQuote = obj.headingAlwaysWriteOptionalQuote;
151
+ meta.headingWritePrefixSpace = obj.headingWritePrefixSpace;
152
+ meta.headingPadAlignment = PadAlignmentMetaSerialization.deserialize(obj.headingPadAlignment, true, undefined, warnings);
153
+ meta.headingPadCharType = PadCharTypeMetaSerialization.deserialize(obj.headingPadCharType, true, undefined, warnings);
154
+ meta.headingPadChar = obj.headingPadChar;
155
+ meta.headingTruncateType = TruncateTypeMetaSerialization.deserialize(obj.headingTruncateType, true, undefined, warnings);
156
+ meta.headingTruncateChar = obj.headingTruncateChar;
157
+ meta.headingEndOfValueChar = obj.headingEndOfValueChar;
158
+
159
+ // Deserialize fields
160
+ if (obj.fields) {
161
+ for (const fieldObj of obj.fields) {
162
+ const dataType = DataTypeMetaSerialization.deserialize(fieldObj.dataType, warnings);
163
+ const field = meta.fieldList.new(dataType);
164
+ this.deserializeFieldProperties(field, fieldObj, meta, warnings);
165
+ }
166
+ }
167
+
168
+ // Deserialize substitutions
169
+ if (obj.substitutions) {
170
+ for (const subObj of obj.substitutions) {
171
+ const sub = meta.substitutionList.new(subObj.type, subObj.token, subObj.value);
172
+ }
173
+ }
174
+
175
+ // Deserialize sequences
176
+ if (obj.sequences) {
177
+ for (const seqObj of obj.sequences) {
178
+ const sequence = meta.sequenceList.new();
179
+ sequence.name = seqObj.name;
180
+ sequence.root = seqObj.root;
181
+
182
+ if (seqObj.items) {
183
+ for (const itemObj of seqObj.items) {
184
+ // Find field by name first (more reliable), then by ID
185
+ let field: FtMetaField | undefined;
186
+ if (itemObj.fieldName) {
187
+ field = meta.fieldList.find(itemObj.fieldName);
188
+ } else if (itemObj.fieldId !== undefined && itemObj.fieldId !== 0) {
189
+ field = meta.fieldList.findById(itemObj.fieldId);
190
+ }
191
+ if (field !== undefined) {
192
+ const item = sequence.itemList.new(field);
193
+ } else {
194
+ warnings.push(`Field for sequence item not found: ${itemObj.fieldName || 'ID ' + itemObj.fieldId}`);
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }
200
+
201
+ return meta;
202
+ }
203
+
204
+ private serializeField(field: FtMetaField, _meta: FtMeta): Record<string, any> {
205
+ // some meta root properties are default for their corresponding field property
206
+ const obj: Record<string, any> = {
207
+ id: field.id,
208
+ name: field.name,
209
+ dataType: DataTypeMetaSerialization.serialize(field.dataType),
210
+ headings: field.headings,
211
+ fixedWidth: field.fixedWidth,
212
+ width: field.width,
213
+ constant: field.constant,
214
+ null: field.null,
215
+ valueQuotedType: QuotedTypeMetaSerialization.serialize(field.valueQuotedType, false, undefined),
216
+ valueAlwaysWriteOptionalQuote: field.valueAlwaysWriteOptionalQuote,
217
+ valueWritePrefixSpace: field.valueWritePrefixSpace,
218
+ valuePadAlignment: PadAlignmentMetaSerialization.serialize(field.valuePadAlignment, false, undefined),
219
+ valuePadCharType: PadCharTypeMetaSerialization.serialize(field.valuePadCharType, false, undefined),
220
+ valuePadChar: field.valuePadChar,
221
+ valueTruncateType: TruncateTypeMetaSerialization.serialize(field.valueTruncateType, false, undefined),
222
+ valueTruncateChar: field.valueTruncateChar,
223
+ valueEndOfValueChar: field.valueEndOfValueChar,
224
+ };
225
+
226
+ // Type-specific fields
227
+ if (field instanceof FtStringMetaField) {
228
+ // String fields have no additional properties
229
+ } else if (field instanceof FtBooleanMetaField) {
230
+ obj.styles = field.styles;
231
+ obj.trueText = field.trueText;
232
+ obj.falseText = field.falseText;
233
+ } else if (field instanceof FtIntegerMetaField || field instanceof FtFloatMetaField || field instanceof FtDecimalMetaField) {
234
+ obj.style = field.styles;
235
+ obj.format = field.format;
236
+ } else if (field instanceof FtDateTimeMetaField) {
237
+ obj.style = field.styles;
238
+ obj.format = field.format;
239
+ }
240
+
241
+ return obj;
242
+ }
243
+
244
+ private deserializeFieldProperties(field: FtMetaField, obj: Record<string, any>, meta: FtMeta, warnings: string[]): void {
245
+ // meta already has root properties deserialized, so can be used when root property is default
246
+ field.name = obj.name;
247
+ field.headings = obj.headings || [];
248
+ field.fixedWidth = obj.fixedWidth;
249
+ field.width = obj.width;
250
+ field.constant = obj.constant;
251
+ field.null = obj.null;
252
+ field.valueQuotedType = QuotedTypeMetaSerialization.deserialize(obj.valueQuotedType, false, undefined, warnings);
253
+ field.valueAlwaysWriteOptionalQuote = obj.valueAlwaysWriteOptionalQuote;
254
+ field.valueWritePrefixSpace = obj.valueWritePrefixSpace;
255
+ field.valuePadAlignment = PadAlignmentMetaSerialization.deserialize(obj.valuePadAlignment, false, undefined, warnings);
256
+ field.valuePadCharType = PadCharTypeMetaSerialization.deserialize(obj.valuePadCharType, false, undefined, warnings);
257
+ field.valuePadChar = obj.valuePadChar;
258
+ field.valueTruncateType = TruncateTypeMetaSerialization.deserialize(obj.valueTruncateType, false, undefined, warnings);
259
+ field.valueTruncateChar = obj.valueTruncateChar;
260
+ field.valueEndOfValueChar = obj.valueEndOfValueChar;
261
+
262
+ // Type-specific properties
263
+ if (field instanceof FtBooleanMetaField && obj.styles !== undefined) {
264
+ if (obj.styles) field.styles = obj.styles;
265
+ if (obj.trueText) field.trueText = obj.trueText;
266
+ if (obj.falseText) field.falseText = obj.falseText;
267
+ } else if (field instanceof FtIntegerMetaField || field instanceof FtFloatMetaField || field instanceof FtDecimalMetaField) {
268
+ if (obj.styles) field.styles = obj.styles;
269
+ if (obj.format) field.format = obj.format;
270
+ } else if (field instanceof FtDateTimeMetaField) {
271
+ if (obj.styles) field.styles = obj.styles;
272
+ if (obj.format) field.format = obj.format;
273
+ }
274
+ }
275
+ }
276
+
277
+ /** @public */
278
+ export namespace FtJsonMetaSerialization {
279
+ export function serialize(meta: FtMeta, options?: FtMetaSerializerOptions): string {
280
+ const serializer = new FtJsonMetaSerialization();
281
+ return serializer.serialize(meta, options);
282
+ }
283
+
284
+ export function deserialize(json: string, warnings?: string[]): FtMeta {
285
+ const deserializer = new FtJsonMetaSerialization();
286
+ return deserializer.deserialize(json, warnings);
287
+ }
288
+ }