@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,197 @@
1
+ import { Err, Ok, Result } from '@pbkware/js-utils';
2
+ import { FtBooleanSequenceRedirect } from '../sequences/redirects/ft-boolean-sequence-redirect.js';
3
+ import { FtCaseInsensitiveStringSequenceRedirect } from '../sequences/redirects/ft-case-insensitive-string-sequence-redirect.js';
4
+ import { FtDateSequenceRedirect } from '../sequences/redirects/ft-date-sequence-redirect.js';
5
+ import { FtExactDateTimeSequenceRedirect } from '../sequences/redirects/ft-exact-date-time-sequence-redirect.js';
6
+ import { FtExactDecimalSequenceRedirect } from '../sequences/redirects/ft-exact-decimal-sequence-redirect.js';
7
+ import { FtExactFloatSequenceRedirect } from '../sequences/redirects/ft-exact-float-sequence-redirect.js';
8
+ import { FtExactIntegerSequenceRedirect } from '../sequences/redirects/ft-exact-integer-sequence-redirect.js';
9
+ import { FtExactStringSequenceRedirect } from '../sequences/redirects/ft-exact-string-sequence-redirect.js';
10
+ import { FtNullSequenceRedirect } from '../sequences/redirects/ft-null-sequence-redirect.js';
11
+ import { FtSequenceRedirect } from '../sequences/redirects/ft-sequence-redirect.js';
12
+ import { FtSequenceRedirectType } from '../types/enums/ft-sequence-redirect-type.js';
13
+ import { FtSequenceRedirectConstructor } from './ft-sequence-redirect-constructor.js';
14
+
15
+ // Concrete constructor implementations
16
+ class NullSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
17
+ createSequenceRedirect(index: number): FtSequenceRedirect {
18
+ return new FtNullSequenceRedirect(index);
19
+ }
20
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
21
+ return FtNullSequenceRedirect.TYPE;
22
+ }
23
+ }
24
+
25
+ class BooleanSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
26
+ createSequenceRedirect(index: number): FtSequenceRedirect {
27
+ return new FtBooleanSequenceRedirect(index);
28
+ }
29
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
30
+ return FtBooleanSequenceRedirect.TYPE;
31
+ }
32
+ }
33
+
34
+ class ExactStringSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
35
+ createSequenceRedirect(index: number): FtSequenceRedirect {
36
+ return new FtExactStringSequenceRedirect(index);
37
+ }
38
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
39
+ return FtExactStringSequenceRedirect.TYPE;
40
+ }
41
+ }
42
+
43
+ class CaseInsensitiveStringSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
44
+ createSequenceRedirect(index: number): FtSequenceRedirect {
45
+ return new FtCaseInsensitiveStringSequenceRedirect(index);
46
+ }
47
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
48
+ return FtCaseInsensitiveStringSequenceRedirect.TYPE;
49
+ }
50
+ }
51
+
52
+ class ExactIntegerSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
53
+ createSequenceRedirect(index: number): FtSequenceRedirect {
54
+ return new FtExactIntegerSequenceRedirect(index);
55
+ }
56
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
57
+ return FtExactIntegerSequenceRedirect.TYPE;
58
+ }
59
+ }
60
+
61
+ class ExactFloatSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
62
+ createSequenceRedirect(index: number): FtSequenceRedirect {
63
+ return new FtExactFloatSequenceRedirect(index);
64
+ }
65
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
66
+ return FtExactFloatSequenceRedirect.TYPE;
67
+ }
68
+ }
69
+
70
+ class ExactDecimalSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
71
+ createSequenceRedirect(index: number): FtSequenceRedirect {
72
+ return new FtExactDecimalSequenceRedirect(index);
73
+ }
74
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
75
+ return FtExactDecimalSequenceRedirect.TYPE;
76
+ }
77
+ }
78
+
79
+ class ExactDateTimeSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
80
+ createSequenceRedirect(index: number): FtSequenceRedirect {
81
+ return new FtExactDateTimeSequenceRedirect(index);
82
+ }
83
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
84
+ return FtExactDateTimeSequenceRedirect.TYPE;
85
+ }
86
+ }
87
+
88
+ class DateSequenceRedirectConstructor extends FtSequenceRedirectConstructor {
89
+ createSequenceRedirect(index: number): FtSequenceRedirect {
90
+ return new FtDateSequenceRedirect(index);
91
+ }
92
+ protected getSequenceRedirectType(): FtSequenceRedirectType {
93
+ return FtDateSequenceRedirect.TYPE;
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Factory for creating sequence redirects.
99
+ * Manages a registry of redirect types and their constructors.
100
+ * @public
101
+ */
102
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
103
+ export class FtSequenceRedirectFactory {
104
+ private static constructorList: FtSequenceRedirectConstructor[] = [];
105
+
106
+ // Static initializer - register standard constructors
107
+ private static initialized = (() => {
108
+ FtSequenceRedirectFactory.constructorList = [];
109
+ FtSequenceRedirectFactory.constructorList.push(new NullSequenceRedirectConstructor());
110
+ FtSequenceRedirectFactory.constructorList.push(new BooleanSequenceRedirectConstructor());
111
+ FtSequenceRedirectFactory.constructorList.push(new CaseInsensitiveStringSequenceRedirectConstructor());
112
+ FtSequenceRedirectFactory.constructorList.push(new DateSequenceRedirectConstructor());
113
+ FtSequenceRedirectFactory.constructorList.push(new ExactDateTimeSequenceRedirectConstructor());
114
+ FtSequenceRedirectFactory.constructorList.push(new ExactDecimalSequenceRedirectConstructor());
115
+ FtSequenceRedirectFactory.constructorList.push(new ExactFloatSequenceRedirectConstructor());
116
+ FtSequenceRedirectFactory.constructorList.push(new ExactIntegerSequenceRedirectConstructor());
117
+ FtSequenceRedirectFactory.constructorList.push(new ExactStringSequenceRedirectConstructor());
118
+ return true;
119
+ })();
120
+
121
+ static registerConstructor(constructor: FtSequenceRedirectConstructor): void {
122
+ if (FtSequenceRedirectFactory.tryFindConstructorByType(constructor.sequenceRedirectType)) {
123
+ throw new Error(`SequenceRedirect type ${constructor.sequenceRedirectType} is already registered`);
124
+ }
125
+ if (FtSequenceRedirectFactory.tryFindConstructorByName(constructor.sequenceRedirectTypeName)) {
126
+ throw new Error(`SequenceRedirect type name "${constructor.sequenceRedirectTypeName}" is already registered`);
127
+ }
128
+ FtSequenceRedirectFactory.constructorList.push(constructor);
129
+ }
130
+
131
+ static getRegisteredConstructors(): FtSequenceRedirectConstructor[] {
132
+ return [...FtSequenceRedirectFactory.constructorList];
133
+ }
134
+
135
+ static unregisterAllConstructors(): void {
136
+ FtSequenceRedirectFactory.constructorList = [];
137
+ }
138
+
139
+ // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
140
+ static unregisterConstructor(constructorOrType: FtSequenceRedirectConstructor | FtSequenceRedirectType | string): void {
141
+ if (typeof constructorOrType === 'number') {
142
+ const idx = FtSequenceRedirectFactory.constructorList.findIndex((c) => c.sequenceRedirectType === constructorOrType);
143
+ if (idx >= 0) {
144
+ FtSequenceRedirectFactory.constructorList.splice(idx, 1);
145
+ }
146
+ } else if (typeof constructorOrType === 'string') {
147
+ const lowerName = constructorOrType.toLowerCase();
148
+ const idx = FtSequenceRedirectFactory.constructorList.findIndex((c) => c.sequenceRedirectTypeName.toLowerCase() === lowerName);
149
+ if (idx >= 0) {
150
+ FtSequenceRedirectFactory.constructorList.splice(idx, 1);
151
+ }
152
+ } else {
153
+ const idx = FtSequenceRedirectFactory.constructorList.indexOf(constructorOrType);
154
+ if (idx >= 0) {
155
+ FtSequenceRedirectFactory.constructorList.splice(idx, 1);
156
+ }
157
+ }
158
+ }
159
+
160
+ // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
161
+ static createSequenceRedirect(index: number, typeOrName: FtSequenceRedirectType | string): FtSequenceRedirect {
162
+ const constructor =
163
+ typeof typeOrName === 'number'
164
+ ? FtSequenceRedirectFactory.tryFindConstructorByType(typeOrName)
165
+ : FtSequenceRedirectFactory.tryFindConstructorByName(typeOrName);
166
+
167
+ if (!constructor) {
168
+ throw new Error(`No constructor found for sequence redirect type: ${typeOrName}`);
169
+ }
170
+ return constructor.createSequenceRedirect(index);
171
+ }
172
+
173
+ static getName(type: FtSequenceRedirectType): string {
174
+ const constructor = FtSequenceRedirectFactory.tryFindConstructorByType(type);
175
+ if (!constructor) {
176
+ throw new Error(`No constructor found for type: ${type}`);
177
+ }
178
+ return constructor.sequenceRedirectTypeName;
179
+ }
180
+
181
+ static tryGetType(typeName: string): Result<FtSequenceRedirectType, boolean> {
182
+ const constructor = FtSequenceRedirectFactory.tryFindConstructorByName(typeName);
183
+ if (constructor) {
184
+ return new Ok(constructor.sequenceRedirectType);
185
+ }
186
+ return new Err(false);
187
+ }
188
+
189
+ private static tryFindConstructorByType(type: FtSequenceRedirectType): FtSequenceRedirectConstructor | undefined {
190
+ return FtSequenceRedirectFactory.constructorList.find((c) => c.sequenceRedirectType === type);
191
+ }
192
+
193
+ private static tryFindConstructorByName(typeName: string): FtSequenceRedirectConstructor | undefined {
194
+ const lowerName = typeName.toLowerCase();
195
+ return FtSequenceRedirectFactory.constructorList.find((c) => c.sequenceRedirectTypeName.toLowerCase() === lowerName);
196
+ }
197
+ }
@@ -0,0 +1,24 @@
1
+ import { FtMetaSubstitution } from '../meta/substitutions/ft-meta-substitution-list.js';
2
+ import { FtSubstitution } from '../substitutions/ft-substitution-list.js';
3
+
4
+ /**
5
+ * Base constructor class for creating substitution instances.
6
+ * Can be extended to provide custom substitution creation logic.
7
+ * @public
8
+ */
9
+ export class FtSubstitutionConstructor {
10
+ /**
11
+ * Create a new FtSubstitution instance for runtime use.
12
+ * @param index - The index of the substitution in the list
13
+ */
14
+ createSubstitution(index: number): FtSubstitution {
15
+ return new FtSubstitution(index);
16
+ }
17
+
18
+ /**
19
+ * Create a new FtMetaSubstitution instance for metadata definition.
20
+ */
21
+ createMetaSubstitution(): FtMetaSubstitution {
22
+ return new FtMetaSubstitution();
23
+ }
24
+ }
@@ -0,0 +1,43 @@
1
+ import { FtMetaSubstitution } from '../meta/substitutions/ft-meta-substitution-list.js';
2
+ import { FtSubstitution } from '../substitutions/ft-substitution-list.js';
3
+ import { FtSubstitutionConstructor } from './ft-substitution-constructor.js';
4
+
5
+ /**
6
+ * Factory for creating substitution instances.
7
+ * Provides a global constructor that can be replaced to customize substitution creation.
8
+ * @public
9
+ */
10
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
11
+ export class FtSubstitutionFactory {
12
+ private static _constructor: FtSubstitutionConstructor = new FtSubstitutionConstructor();
13
+
14
+ /**
15
+ * Get the current substitution constructor.
16
+ */
17
+ static getConstructor(): FtSubstitutionConstructor {
18
+ return FtSubstitutionFactory._constructor;
19
+ }
20
+
21
+ /**
22
+ * Set a custom substitution constructor.
23
+ * Use this to provide custom initialization logic for all substitution instances.
24
+ */
25
+ static setConstructor(value: FtSubstitutionConstructor): void {
26
+ FtSubstitutionFactory._constructor = value;
27
+ }
28
+
29
+ /**
30
+ * Create a new FtSubstitution instance using the current constructor.
31
+ * @param index - The index of the substitution in the list
32
+ */
33
+ static createSubstitution(index: number): FtSubstitution {
34
+ return FtSubstitutionFactory._constructor.createSubstitution(index);
35
+ }
36
+
37
+ /**
38
+ * Create a new FtMetaSubstitution instance using the current constructor.
39
+ */
40
+ static createMetaSubstitution(): FtMetaSubstitution {
41
+ return FtSubstitutionFactory._constructor.createMetaSubstitution();
42
+ }
43
+ }
@@ -0,0 +1,49 @@
1
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtBooleanMetaField } from '../../meta/fields/ft-boolean-meta-field.js';
3
+ import { FtBooleanFieldFormatter } from '../../serialization/formatting/ft-boolean-field-formatter.js';
4
+ import { FtBooleanStyles } from '../../types/enums/ft-boolean-styles.js';
5
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
6
+ import { FtGenericFieldDefinition } from './ft-generic-field-definition.js';
7
+
8
+ /**
9
+ * Field definition for boolean fields.
10
+ * @public
11
+ */
12
+ export class FtBooleanFieldDefinition extends FtGenericFieldDefinition<boolean> {
13
+ static readonly AUTO_LEFT_PAD = false;
14
+
15
+ declare protected formatter: FtBooleanFieldFormatter;
16
+
17
+ constructor(index: number) {
18
+ const formatter = new FtBooleanFieldFormatter();
19
+ super(FtDataType.Boolean, 'boolean', formatter, FtBooleanFieldDefinition.AUTO_LEFT_PAD, index);
20
+ }
21
+
22
+ get falseText(): string {
23
+ return this.formatter.falseText;
24
+ }
25
+
26
+ get trueText(): string {
27
+ return this.formatter.trueText;
28
+ }
29
+
30
+ get styles(): FtBooleanStyles {
31
+ return this.formatter.styles;
32
+ }
33
+
34
+ override loadMeta(metaField: FtBooleanMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
35
+ super.loadMeta(metaField, myCulture, myMainHeadingIndex);
36
+
37
+ this.formatter.falseText = metaField.falseText;
38
+ this.formatter.trueText = metaField.trueText;
39
+ this.formatter.styles = metaField.styles;
40
+ }
41
+
42
+ getValueText(value: boolean): string {
43
+ return this.formatter.toText(value);
44
+ }
45
+
46
+ parseValueText(text: string): boolean {
47
+ return this.formatter.parse(text);
48
+ }
49
+ }
@@ -0,0 +1,52 @@
1
+ import { DotNetDateTimeStyles, DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtDateTimeMetaField } from '../../meta/fields/ft-date-time-meta-field.js';
3
+ import { FtMetaField } from '../../meta/fields/ft-meta-field.js';
4
+ import { FtDateTimeFieldFormatter } from '../../serialization/formatting/ft-date-time-field-formatter.js';
5
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
6
+ import { FtGenericFieldDefinition } from './ft-generic-field-definition.js';
7
+
8
+ /**
9
+ * Field definition for DateTime fields.
10
+ * @public
11
+ */
12
+ export class FtDateTimeFieldDefinition extends FtGenericFieldDefinition<Date> {
13
+ static readonly AUTO_LEFT_PAD = true;
14
+
15
+ declare protected formatter: FtDateTimeFieldFormatter;
16
+
17
+ private _constantValue: Date = new Date(FtDateTimeMetaField.DEFAULT_VALUE);
18
+
19
+ constructor(index: number) {
20
+ const formatter = new FtDateTimeFieldFormatter();
21
+ super(FtDataType.DateTime, 'Date', formatter, FtDateTimeFieldDefinition.AUTO_LEFT_PAD, index);
22
+ }
23
+
24
+ get format(): string {
25
+ return this.formatter.format;
26
+ }
27
+
28
+ get styles(): DotNetDateTimeStyles {
29
+ return this.formatter.styles;
30
+ }
31
+
32
+ get constantValue(): Date {
33
+ return this._constantValue;
34
+ }
35
+
36
+ override loadMeta(metaField: FtMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
37
+ super.loadMeta(metaField, myCulture, myMainHeadingIndex);
38
+
39
+ const dateTimeMetaField = metaField as FtDateTimeMetaField;
40
+ this.formatter.format = dateTimeMetaField.format;
41
+ this.formatter.styles = dateTimeMetaField.styles;
42
+ this._constantValue = dateTimeMetaField.value;
43
+ }
44
+
45
+ getValueText(value: Date): string {
46
+ return this.formatter.toText(value);
47
+ }
48
+
49
+ parseValueText(text: string): Date {
50
+ return this.formatter.parse(text);
51
+ }
52
+ }
@@ -0,0 +1,43 @@
1
+ import { DotNetLocaleSettings, DotNetNumberStyles } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtDecimalMetaField } from '../../meta/fields/ft-decimal-meta-field.js';
3
+ import { FtDecimalFieldFormatter } from '../../serialization/formatting/ft-decimal-field-formatter.js';
4
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
5
+ import { FtGenericFieldDefinition } from './ft-generic-field-definition.js';
6
+
7
+ /**
8
+ * Field definition for decimal fields.
9
+ * @public
10
+ */
11
+ export class FtDecimalFieldDefinition extends FtGenericFieldDefinition<number> {
12
+ static readonly AUTO_LEFT_PAD = true;
13
+
14
+ declare protected formatter: FtDecimalFieldFormatter;
15
+
16
+ constructor(index: number) {
17
+ const formatter = new FtDecimalFieldFormatter();
18
+ super(FtDataType.Decimal, 'number', formatter, FtDecimalFieldDefinition.AUTO_LEFT_PAD, index);
19
+ }
20
+
21
+ get format(): string {
22
+ return this.formatter.format;
23
+ }
24
+
25
+ get styles(): DotNetNumberStyles {
26
+ return this.formatter.styles;
27
+ }
28
+
29
+ override loadMeta(metaField: FtDecimalMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
30
+ super.loadMeta(metaField, myCulture, myMainHeadingIndex);
31
+
32
+ this.formatter.format = metaField.format;
33
+ this.formatter.styles = metaField.styles;
34
+ }
35
+
36
+ getValueText(value: number): string {
37
+ return this.formatter.toText(value);
38
+ }
39
+
40
+ parseValueText(text: string): number {
41
+ return this.formatter.parse(text);
42
+ }
43
+ }
@@ -0,0 +1,33 @@
1
+ import { FtFieldFactory } from '../../factory/ft-field-factory.js';
2
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
3
+ import { FtFieldDefinition } from './ft-field-definition.js';
4
+
5
+ /**
6
+ * List of field definitions.
7
+ * @public
8
+ */
9
+ export class FtFieldDefinitionList {
10
+ private _items: FtFieldDefinition[] = [];
11
+
12
+ get count(): number {
13
+ return this._items.length;
14
+ }
15
+
16
+ get(index: number): FtFieldDefinition {
17
+ return this._items[index];
18
+ }
19
+
20
+ add(definition: FtFieldDefinition): void {
21
+ this._items.push(definition);
22
+ }
23
+
24
+ new(dataType: FtDataType): FtFieldDefinition {
25
+ const definition = FtFieldFactory.createFieldDefinition(dataType, this.count);
26
+ this._items.push(definition);
27
+ return definition;
28
+ }
29
+
30
+ clear(): void {
31
+ this._items = [];
32
+ }
33
+ }