@aidc-toolkit/gs1 1.0.43 → 1.0.44-beta

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 (221) hide show
  1. package/dist/abstract-identifier-creator.d.ts +41 -0
  2. package/dist/abstract-identifier-creator.d.ts.map +1 -0
  3. package/dist/abstract-identifier-creator.js +73 -0
  4. package/dist/abstract-identifier-creator.js.map +1 -0
  5. package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts +36 -0
  6. package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts.map +1 -0
  7. package/dist/abstract-non-gtin-numeric-identifier-creator.js +37 -0
  8. package/dist/abstract-non-gtin-numeric-identifier-creator.js.map +1 -0
  9. package/dist/abstract-numeric-identifier-creator.d.ts +34 -0
  10. package/dist/abstract-numeric-identifier-creator.d.ts.map +1 -0
  11. package/dist/abstract-numeric-identifier-creator.js +154 -0
  12. package/dist/abstract-numeric-identifier-creator.js.map +1 -0
  13. package/dist/character-set.d.ts +27 -0
  14. package/dist/character-set.d.ts.map +1 -0
  15. package/dist/character-set.js +83 -0
  16. package/dist/character-set.js.map +1 -0
  17. package/dist/check.d.ts +81 -0
  18. package/dist/check.d.ts.map +1 -0
  19. package/dist/check.js +218 -0
  20. package/dist/check.js.map +1 -0
  21. package/dist/content-character-set-creators.d.ts +4 -0
  22. package/dist/content-character-set-creators.d.ts.map +1 -0
  23. package/dist/content-character-set-creators.js +9 -0
  24. package/dist/content-character-set-creators.js.map +1 -0
  25. package/dist/content-character-set.d.ts +26 -0
  26. package/dist/content-character-set.d.ts.map +1 -0
  27. package/dist/content-character-set.js +18 -0
  28. package/dist/content-character-set.js.map +1 -0
  29. package/dist/gcp-length-cache.d.ts +89 -0
  30. package/dist/gcp-length-cache.d.ts.map +1 -0
  31. package/dist/gcp-length-cache.js +240 -0
  32. package/dist/gcp-length-cache.js.map +1 -0
  33. package/dist/gcp-length-data.d.ts +108 -0
  34. package/dist/gcp-length-data.d.ts.map +1 -0
  35. package/dist/gcp-length-data.js +53 -0
  36. package/dist/gcp-length-data.js.map +1 -0
  37. package/dist/gcp-length.d.ts +97 -0
  38. package/dist/gcp-length.d.ts.map +1 -0
  39. package/dist/gcp-length.js +368 -0
  40. package/dist/gcp-length.js.map +1 -0
  41. package/dist/gtin-creator.d.ts +47 -0
  42. package/dist/gtin-creator.d.ts.map +1 -0
  43. package/dist/gtin-creator.js +64 -0
  44. package/dist/gtin-creator.js.map +1 -0
  45. package/dist/gtin-descriptor.d.ts +22 -0
  46. package/dist/gtin-descriptor.d.ts.map +1 -0
  47. package/dist/gtin-descriptor.js +2 -0
  48. package/dist/gtin-descriptor.js.map +1 -0
  49. package/dist/gtin-length.d.ts +64 -0
  50. package/dist/gtin-length.d.ts.map +1 -0
  51. package/dist/gtin-length.js +36 -0
  52. package/dist/gtin-length.js.map +1 -0
  53. package/dist/gtin-type.d.ts +26 -0
  54. package/dist/gtin-type.d.ts.map +1 -0
  55. package/dist/gtin-type.js +7 -0
  56. package/dist/gtin-type.js.map +1 -0
  57. package/dist/gtin-validator.d.ts +132 -0
  58. package/dist/gtin-validator.d.ts.map +1 -0
  59. package/dist/gtin-validator.js +349 -0
  60. package/dist/gtin-validator.js.map +1 -0
  61. package/dist/identifier-creator.d.ts +31 -0
  62. package/dist/identifier-creator.d.ts.map +1 -0
  63. package/dist/identifier-creator.js +2 -0
  64. package/dist/identifier-creator.js.map +1 -0
  65. package/dist/identifier-creators.d.ts +118 -0
  66. package/dist/identifier-creators.d.ts.map +1 -0
  67. package/dist/identifier-creators.js +92 -0
  68. package/dist/identifier-creators.js.map +1 -0
  69. package/dist/identifier-descriptor.d.ts +27 -0
  70. package/dist/identifier-descriptor.d.ts.map +1 -0
  71. package/dist/identifier-descriptor.js +2 -0
  72. package/dist/identifier-descriptor.js.map +1 -0
  73. package/dist/identifier-descriptors.d.ts +106 -0
  74. package/dist/identifier-descriptors.d.ts.map +1 -0
  75. package/dist/identifier-descriptors.js +262 -0
  76. package/dist/identifier-descriptors.js.map +1 -0
  77. package/dist/identifier-extension.d.ts +82 -0
  78. package/dist/identifier-extension.d.ts.map +1 -0
  79. package/dist/identifier-extension.js +79 -0
  80. package/dist/identifier-extension.js.map +1 -0
  81. package/dist/identifier-type.d.ts +62 -0
  82. package/dist/identifier-type.d.ts.map +1 -0
  83. package/dist/identifier-type.js +54 -0
  84. package/dist/identifier-type.js.map +1 -0
  85. package/dist/identifier-validator.d.ts +85 -0
  86. package/dist/identifier-validator.d.ts.map +1 -0
  87. package/dist/identifier-validator.js +107 -0
  88. package/dist/identifier-validator.js.map +1 -0
  89. package/dist/identifier-validators.d.ts +131 -0
  90. package/dist/identifier-validators.d.ts.map +1 -0
  91. package/dist/identifier-validators.js +167 -0
  92. package/dist/identifier-validators.js.map +1 -0
  93. package/dist/index.d.ts +63 -2205
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +36 -3
  96. package/dist/index.js.map +1 -0
  97. package/dist/leader-type.d.ts +26 -0
  98. package/dist/leader-type.d.ts.map +1 -0
  99. package/dist/leader-type.js +18 -0
  100. package/dist/leader-type.js.map +1 -0
  101. package/dist/locale/en/locale-resources.d.ts +48 -0
  102. package/dist/locale/en/locale-resources.d.ts.map +1 -0
  103. package/dist/locale/en/locale-resources.js +47 -0
  104. package/dist/locale/en/locale-resources.js.map +1 -0
  105. package/dist/locale/fr/locale-resources.d.ts +48 -0
  106. package/dist/locale/fr/locale-resources.d.ts.map +1 -0
  107. package/dist/locale/fr/locale-resources.js +47 -0
  108. package/dist/locale/fr/locale-resources.js.map +1 -0
  109. package/dist/locale/i18n.d.ts +27 -0
  110. package/dist/locale/i18n.d.ts.map +1 -0
  111. package/dist/locale/i18n.js +35 -0
  112. package/dist/locale/i18n.js.map +1 -0
  113. package/dist/non-gtin-numeric-identifier-creator.d.ts +12 -0
  114. package/dist/non-gtin-numeric-identifier-creator.d.ts.map +1 -0
  115. package/dist/non-gtin-numeric-identifier-creator.js +2 -0
  116. package/dist/non-gtin-numeric-identifier-creator.js.map +1 -0
  117. package/dist/non-gtin-numeric-identifier-descriptor.d.ts +22 -0
  118. package/dist/non-gtin-numeric-identifier-descriptor.d.ts.map +1 -0
  119. package/dist/non-gtin-numeric-identifier-descriptor.js +2 -0
  120. package/dist/non-gtin-numeric-identifier-descriptor.js.map +1 -0
  121. package/dist/non-gtin-numeric-identifier-type.d.ts +26 -0
  122. package/dist/non-gtin-numeric-identifier-type.d.ts.map +1 -0
  123. package/dist/non-gtin-numeric-identifier-type.js +8 -0
  124. package/dist/non-gtin-numeric-identifier-type.js.map +1 -0
  125. package/dist/non-gtin-numeric-identifier-validator.d.ts +12 -0
  126. package/dist/non-gtin-numeric-identifier-validator.d.ts.map +1 -0
  127. package/dist/non-gtin-numeric-identifier-validator.js +10 -0
  128. package/dist/non-gtin-numeric-identifier-validator.js.map +1 -0
  129. package/dist/non-numeric-identifier-creator.d.ts +40 -0
  130. package/dist/non-numeric-identifier-creator.d.ts.map +1 -0
  131. package/dist/non-numeric-identifier-creator.js +82 -0
  132. package/dist/non-numeric-identifier-creator.js.map +1 -0
  133. package/dist/non-numeric-identifier-descriptor.d.ts +26 -0
  134. package/dist/non-numeric-identifier-descriptor.d.ts.map +1 -0
  135. package/dist/non-numeric-identifier-descriptor.js +2 -0
  136. package/dist/non-numeric-identifier-descriptor.js.map +1 -0
  137. package/dist/non-numeric-identifier-type.d.ts +26 -0
  138. package/dist/non-numeric-identifier-type.d.ts.map +1 -0
  139. package/dist/non-numeric-identifier-type.js +8 -0
  140. package/dist/non-numeric-identifier-type.js.map +1 -0
  141. package/dist/non-numeric-identifier-validator.d.ts +41 -0
  142. package/dist/non-numeric-identifier-validator.d.ts.map +1 -0
  143. package/dist/non-numeric-identifier-validator.js +69 -0
  144. package/dist/non-numeric-identifier-validator.js.map +1 -0
  145. package/dist/non-serializable-numeric-identifier-creator.d.ts +10 -0
  146. package/dist/non-serializable-numeric-identifier-creator.d.ts.map +1 -0
  147. package/dist/non-serializable-numeric-identifier-creator.js +8 -0
  148. package/dist/non-serializable-numeric-identifier-creator.js.map +1 -0
  149. package/dist/non-serializable-numeric-identifier-descriptor.d.ts +12 -0
  150. package/dist/non-serializable-numeric-identifier-descriptor.d.ts.map +1 -0
  151. package/dist/non-serializable-numeric-identifier-descriptor.js +2 -0
  152. package/dist/non-serializable-numeric-identifier-descriptor.js.map +1 -0
  153. package/dist/non-serializable-numeric-identifier-type.d.ts +26 -0
  154. package/dist/non-serializable-numeric-identifier-type.d.ts.map +1 -0
  155. package/dist/non-serializable-numeric-identifier-type.js +7 -0
  156. package/dist/non-serializable-numeric-identifier-type.js.map +1 -0
  157. package/dist/non-serializable-numeric-identifier-validator.d.ts +16 -0
  158. package/dist/non-serializable-numeric-identifier-validator.d.ts.map +1 -0
  159. package/dist/non-serializable-numeric-identifier-validator.js +17 -0
  160. package/dist/non-serializable-numeric-identifier-validator.js.map +1 -0
  161. package/dist/numeric-identifier-creator.d.ts +53 -0
  162. package/dist/numeric-identifier-creator.d.ts.map +1 -0
  163. package/dist/numeric-identifier-creator.js +2 -0
  164. package/dist/numeric-identifier-creator.js.map +1 -0
  165. package/dist/numeric-identifier-descriptor.d.ts +22 -0
  166. package/dist/numeric-identifier-descriptor.d.ts.map +1 -0
  167. package/dist/numeric-identifier-descriptor.js +2 -0
  168. package/dist/numeric-identifier-descriptor.js.map +1 -0
  169. package/dist/numeric-identifier-type.d.ts +26 -0
  170. package/dist/numeric-identifier-type.d.ts.map +1 -0
  171. package/dist/numeric-identifier-type.js +7 -0
  172. package/dist/numeric-identifier-type.js.map +1 -0
  173. package/dist/numeric-identifier-validator.d.ts +38 -0
  174. package/dist/numeric-identifier-validator.d.ts.map +1 -0
  175. package/dist/numeric-identifier-validator.js +61 -0
  176. package/dist/numeric-identifier-validator.js.map +1 -0
  177. package/dist/prefix-manager.d.ts +151 -0
  178. package/dist/prefix-manager.d.ts.map +1 -0
  179. package/dist/prefix-manager.js +297 -0
  180. package/dist/prefix-manager.js.map +1 -0
  181. package/dist/prefix-provider.d.ts +27 -0
  182. package/dist/prefix-provider.d.ts.map +1 -0
  183. package/dist/prefix-provider.js +2 -0
  184. package/dist/prefix-provider.js.map +1 -0
  185. package/dist/prefix-type.d.ts +26 -0
  186. package/dist/prefix-type.d.ts.map +1 -0
  187. package/dist/prefix-type.js +18 -0
  188. package/dist/prefix-type.js.map +1 -0
  189. package/dist/prefix-validator.d.ts +71 -0
  190. package/dist/prefix-validator.d.ts.map +1 -0
  191. package/dist/prefix-validator.js +204 -0
  192. package/dist/prefix-validator.js.map +1 -0
  193. package/dist/serializable-numeric-identifier-creator.d.ts +48 -0
  194. package/dist/serializable-numeric-identifier-creator.d.ts.map +1 -0
  195. package/dist/serializable-numeric-identifier-creator.js +93 -0
  196. package/dist/serializable-numeric-identifier-creator.js.map +1 -0
  197. package/dist/serializable-numeric-identifier-descriptor.d.ts +26 -0
  198. package/dist/serializable-numeric-identifier-descriptor.d.ts.map +1 -0
  199. package/dist/serializable-numeric-identifier-descriptor.js +2 -0
  200. package/dist/serializable-numeric-identifier-descriptor.js.map +1 -0
  201. package/dist/serializable-numeric-identifier-type.d.ts +26 -0
  202. package/dist/serializable-numeric-identifier-type.d.ts.map +1 -0
  203. package/dist/serializable-numeric-identifier-type.js +8 -0
  204. package/dist/serializable-numeric-identifier-type.js.map +1 -0
  205. package/dist/serializable-numeric-identifier-validator.d.ts +67 -0
  206. package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -0
  207. package/dist/serializable-numeric-identifier-validator.js +97 -0
  208. package/dist/serializable-numeric-identifier-validator.js.map +1 -0
  209. package/dist/variable-measure.d.ts +68 -0
  210. package/dist/variable-measure.d.ts.map +1 -0
  211. package/dist/variable-measure.js +210 -0
  212. package/dist/variable-measure.js.map +1 -0
  213. package/dist/verified-by-gs1.d.ts +22 -0
  214. package/dist/verified-by-gs1.d.ts.map +1 -0
  215. package/dist/verified-by-gs1.js +46 -0
  216. package/dist/verified-by-gs1.js.map +1 -0
  217. package/package.json +4 -4
  218. package/src/gcp-length-cache.ts +7 -2
  219. package/tsconfig-src.tsbuildinfo +1 -1
  220. package/dist/index.cjs +0 -19
  221. package/dist/index.d.cts +0 -2205
package/dist/check.js ADDED
@@ -0,0 +1,218 @@
1
+ import { NUMERIC_CREATOR, utilityNS } from "@aidc-toolkit/utility";
2
+ import { AI82_CREATOR } from "./character-set.js";
3
+ import { i18nextGS1 } from "./locale/i18n.js";
4
+ /**
5
+ * Results of multiplying digits by 3.
6
+ */
7
+ const THREE_WEIGHT_RESULTS = [
8
+ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27
9
+ ];
10
+ /**
11
+ * Results of multiplying digits by 2, subtracting tens digit, and extracting units digit.
12
+ */
13
+ const TWO_MINUS_WEIGHT_RESULTS = [
14
+ 0, 2, 4, 6, 8, 9, 1, 3, 5, 7
15
+ ];
16
+ /**
17
+ * Results of multiplying digits by 5, adding tens digit, and extracting units digit.
18
+ */
19
+ const FIVE_PLUS_WEIGHT_RESULTS = [
20
+ 0, 5, 1, 6, 2, 7, 3, 8, 4, 9
21
+ ];
22
+ /**
23
+ * Results of multiplying digits by 5, subtracting tens digit, and extracting units digit.
24
+ */
25
+ const FIVE_MINUS_WEIGHT_RESULTS = [
26
+ 0, 5, 9, 4, 8, 3, 7, 2, 6, 1
27
+ ];
28
+ /**
29
+ * Inverse mapping of FIVE_MINUS_WEIGHT_RESULTS.
30
+ */
31
+ const INVERSE_FIVE_MINUS_WEIGHT_RESULTS = [
32
+ 0, 9, 7, 5, 3, 1, 8, 6, 4, 2
33
+ ];
34
+ /**
35
+ * Calculate the check digit sum for a numeric string as per section 7.9.1 of the {@link
36
+ * https://ref.gs1.org/standards/genspecs/ | GS1 General Specifications}.
37
+ *
38
+ * @param exchangeWeights
39
+ * If true, start the weights at 1 instead of 3 on the right.
40
+ *
41
+ * @param s
42
+ * Numeric string.
43
+ *
44
+ * @returns
45
+ * Accumulated sum of each digit multiplied by the weight at its position.
46
+ */
47
+ export function checkDigitSum(exchangeWeights, s) {
48
+ // Initial setting will be the opposite of that used for first character because it gets flipped before being used.
49
+ let weight3 = (s.length + Number(exchangeWeights)) % 2 === 0;
50
+ // Calculate sum of each character value multiplied by the weight at its position.
51
+ return NUMERIC_CREATOR.characterIndexes(s).reduce((accumulator, characterIndex, index) => {
52
+ if (characterIndex === undefined) {
53
+ throw new RangeError(i18nextGS1.t("CharacterSetValidator.invalidCharacterAtPosition", {
54
+ ns: utilityNS,
55
+ c: s.charAt(index),
56
+ position: index + 1
57
+ }));
58
+ }
59
+ weight3 = !weight3;
60
+ return accumulator + (weight3 ? THREE_WEIGHT_RESULTS[characterIndex] : characterIndex);
61
+ }, 0);
62
+ }
63
+ /**
64
+ * Calculate the check digit for a numeric string as per section 7.9.1 of the {@link
65
+ * https://ref.gs1.org/standards/genspecs/ | GS1 General Specifications}.
66
+ *
67
+ * @param s
68
+ * Numeric string.
69
+ *
70
+ * @returns
71
+ * Check digit 0-9 as a string.
72
+ */
73
+ export function checkDigit(s) {
74
+ // Check digit is the difference from the equal or next of multiple of 10.
75
+ return NUMERIC_CREATOR.character(9 - (checkDigitSum(false, s) + 9) % 10);
76
+ }
77
+ /**
78
+ * Determine if a numeric string has a valid check digit.
79
+ *
80
+ * @param s
81
+ * Numeric string with check digit.
82
+ *
83
+ * @returns
84
+ * True if the check digit is valid.
85
+ */
86
+ export function hasValidCheckDigit(s) {
87
+ // Check digit is valid if the check digit sum with the weights exchanged is a multiple of 10.
88
+ return checkDigitSum(true, s) % 10 === 0;
89
+ }
90
+ /**
91
+ * Calculate the price or weight sum for a numeric string.
92
+ *
93
+ * @param weightsResults
94
+ * Array of weight results arrays to apply to each digit.
95
+ *
96
+ * @param s
97
+ * Numeric string the same length as the weightsResults array.
98
+ *
99
+ * @returns
100
+ * Accumulated sum of the weight result for each digit at the digit's position.
101
+ */
102
+ function priceOrWeightSum(weightsResults, s) {
103
+ // Calculate sum of each weight result for each digit at its position.
104
+ return NUMERIC_CREATOR.characterIndexes(s).reduce((accumulator, characterIndex, index) => {
105
+ if (characterIndex === undefined) {
106
+ throw new RangeError(i18nextGS1.t("CharacterSetValidator.invalidCharacterAtPositionOfComponent", {
107
+ ns: utilityNS,
108
+ c: s.charAt(index),
109
+ position: index + 1,
110
+ component: i18nextGS1.t("Check.priceOrWeightComponent")
111
+ }));
112
+ }
113
+ // Add the weight result of the character index to the accumulator.
114
+ return accumulator + weightsResults[index][characterIndex];
115
+ }, 0);
116
+ }
117
+ /**
118
+ * Calculate the price or weight check digit for a four-or five-digit numeric string as per sections 7.9.2-7.9.4 of the
119
+ * {@link https://ref.gs1.org/standards/genspecs/ | GS1 General Specifications}.
120
+ *
121
+ * @param s
122
+ * Numeric string exactly four or five characters long.
123
+ *
124
+ * @returns
125
+ * Check digit 0-9 as a string.
126
+ */
127
+ export function priceOrWeightCheckDigit(s) {
128
+ let checkDigit;
129
+ switch (s.length) {
130
+ case 4:
131
+ checkDigit = NUMERIC_CREATOR.character(priceOrWeightSum([TWO_MINUS_WEIGHT_RESULTS, TWO_MINUS_WEIGHT_RESULTS, THREE_WEIGHT_RESULTS, FIVE_MINUS_WEIGHT_RESULTS], s) * 3 % 10);
132
+ break;
133
+ case 5:
134
+ checkDigit = NUMERIC_CREATOR.character(INVERSE_FIVE_MINUS_WEIGHT_RESULTS[9 - (priceOrWeightSum([FIVE_PLUS_WEIGHT_RESULTS, TWO_MINUS_WEIGHT_RESULTS, FIVE_MINUS_WEIGHT_RESULTS, FIVE_PLUS_WEIGHT_RESULTS, TWO_MINUS_WEIGHT_RESULTS], s) + 9) % 10]);
135
+ break;
136
+ default:
137
+ throw new RangeError(i18nextGS1.t("Check.lengthOfStringForPriceOrWeightMustBeExactly", {
138
+ length: s.length
139
+ }));
140
+ }
141
+ return checkDigit;
142
+ }
143
+ /**
144
+ * Determine if a price or weight check digit is valid for numeric string.
145
+ *
146
+ * @param s
147
+ * Numeric string exactly four or five characters long.
148
+ *
149
+ * @param checkDigit
150
+ * Price or weight check digit.
151
+ *
152
+ * @returns
153
+ * True if the check digit is valid.
154
+ */
155
+ export function isValidPriceOrWeightCheckDigit(s, checkDigit) {
156
+ return priceOrWeightCheckDigit(s) === checkDigit;
157
+ }
158
+ /**
159
+ * Weights for check character pair calculation.
160
+ */
161
+ const CHECK_CHARACTER_WEIGHTS = [
162
+ 107, 103, 101, 97, 89, 83, 79, 73, 71, 67, 61, 59, 53, 47, 43, 41, 37, 31, 29, 23, 19, 17, 13, 11, 7, 5, 3, 2
163
+ ];
164
+ /**
165
+ * Characters used to build check character pair.
166
+ */
167
+ const CHECK_CHARACTERS = [
168
+ "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H",
169
+ "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
170
+ ];
171
+ /**
172
+ * Calculate the check character for a GS1 AI encodable character set 82 string as per section 7.9.5 of the {@link
173
+ * https://ref.gs1.org/standards/genspecs/ | GS1 General Specifications}.
174
+ *
175
+ * @param s
176
+ * GS1 AI encodable character set 82 string.
177
+ *
178
+ * @returns
179
+ * Check character pair.
180
+ */
181
+ export function checkCharacterPair(s) {
182
+ // Weights are applied from right to left.
183
+ const weightIndexStart = CHECK_CHARACTER_WEIGHTS.length - s.length;
184
+ if (weightIndexStart < 0) {
185
+ throw new RangeError(i18nextGS1.t("Check.lengthOfStringForCheckCharacterPairMustBeLessThanOrEqualTo", {
186
+ length: s.length,
187
+ maximumLength: CHECK_CHARACTER_WEIGHTS.length
188
+ }));
189
+ }
190
+ // Calculate sum of each character value multiplied by the weight at its position, mod 1021.
191
+ const checkCharacterPairSum = AI82_CREATOR.characterIndexes(s).reduce((accumulator, characterIndex, index) => {
192
+ if (characterIndex === undefined) {
193
+ throw new RangeError(i18nextGS1.t("CharacterSetValidator.invalidCharacterAtPosition", {
194
+ ns: utilityNS,
195
+ c: s.charAt(index),
196
+ position: index + 1
197
+ }));
198
+ }
199
+ return accumulator + characterIndex * CHECK_CHARACTER_WEIGHTS[weightIndexStart + index];
200
+ }, 0) % 1021;
201
+ const checkCharacterPairSumMod32 = checkCharacterPairSum % 32;
202
+ // Check character pair is the concatenation of the character at position sum div 32 and the character at the position sum mod 32.
203
+ return CHECK_CHARACTERS[(checkCharacterPairSum - checkCharacterPairSumMod32) / 32] + CHECK_CHARACTERS[checkCharacterPairSumMod32];
204
+ }
205
+ /**
206
+ * Determine if a GS1 AI encodable character set 82 string has a valid check character pair.
207
+ *
208
+ * @param s
209
+ * GS1 AI encodable character set 82 string with check character pair.
210
+ *
211
+ * @returns
212
+ * True if the check character pair is valid.
213
+ */
214
+ export function hasValidCheckCharacterPair(s) {
215
+ const checkCharacterPairIndex = s.length - 2;
216
+ return checkCharacterPair(s.substring(0, checkCharacterPairIndex)) === s.substring(checkCharacterPairIndex);
217
+ }
218
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,oBAAoB,GAAsB;IAC5C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAAsB;IAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAAsB;IAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,yBAAyB,GAAsB;IACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,iCAAiC,GAAsB;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,eAAwB,EAAE,CAAS;IAC7D,mHAAmH;IACnH,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE7D,kFAAkF;IAClF,OAAO,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAS,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE;QAC7F,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,kDAAkD,EAAE;gBAClF,EAAE,EAAE,SAAS;gBACb,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClB,QAAQ,EAAE,KAAK,GAAG,CAAC;aACtB,CAAC,CAAC,CAAC;QACR,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC;QAEnB,OAAO,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3F,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,CAAS;IAChC,0EAA0E;IAC1E,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IACxC,8FAA8F;IAC9F,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,gBAAgB,CAAC,cAAgD,EAAE,CAAS;IACjF,sEAAsE;IACtE,OAAO,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAS,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE;QAC7F,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,6DAA6D,EAAE;gBAC7F,EAAE,EAAE,SAAS;gBACb,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClB,QAAQ,EAAE,KAAK,GAAG,CAAC;gBACnB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC;aAC1D,CAAC,CAAC,CAAC;QACR,CAAC;QAED,mEAAmE;QACnE,OAAO,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAS;IAC7C,IAAI,UAAkB,CAAC;IAEvB,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,CAAC;YACF,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5K,MAAM;QAEV,KAAK,CAAC;YACF,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnP,MAAM;QAEV;YACI,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,mDAAmD,EAAE;gBACnF,MAAM,EAAE,CAAC,CAAC,MAAM;aACnB,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,8BAA8B,CAAC,CAAS,EAAE,UAAkB;IACxE,OAAO,uBAAuB,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAChH,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAG;IACrB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IAC9E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CACjF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IACxC,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAEnE,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,kEAAkE,EAAE;YAClG,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,aAAa,EAAE,uBAAuB,CAAC,MAAM;SAChD,CAAC,CAAC,CAAC;IACR,CAAC;IAED,4FAA4F;IAC5F,MAAM,qBAAqB,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAS,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE;QACjH,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,kDAAkD,EAAE;gBAClF,EAAE,EAAE,SAAS;gBACb,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClB,QAAQ,EAAE,KAAK,GAAG,CAAC;aACtB,CAAC,CAAC,CAAC;QACR,CAAC;QAED,OAAO,WAAW,GAAG,cAAc,GAAG,uBAAuB,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;IAC5F,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAEb,MAAM,0BAA0B,GAAG,qBAAqB,GAAG,EAAE,CAAC;IAE9D,kIAAkI;IAClI,OAAO,gBAAgB,CAAC,CAAC,qBAAqB,GAAG,0BAA0B,CAAC,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;AACtI,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,CAAS;IAChD,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7C,OAAO,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;AAChH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CharacterSetCreator } from "@aidc-toolkit/utility";
2
+ import { type ContentCharacterSet } from "./content-character-set.js";
3
+ export declare const CONTENT_CHARACTER_SET_CREATORS: Record<ContentCharacterSet, CharacterSetCreator>;
4
+ //# sourceMappingURL=content-character-set-creators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-character-set-creators.d.ts","sourceRoot":"","sources":["../src/content-character-set-creators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAAE,KAAK,mBAAmB,EAAwB,MAAM,4BAA4B,CAAC;AAE5F,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAI3F,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { NUMERIC_CREATOR } from "@aidc-toolkit/utility";
2
+ import { AI39_CREATOR, AI82_CREATOR } from "./character-set.js";
3
+ import { ContentCharacterSets } from "./content-character-set.js";
4
+ export const CONTENT_CHARACTER_SET_CREATORS = {
5
+ [ContentCharacterSets.Numeric]: NUMERIC_CREATOR,
6
+ [ContentCharacterSets.AI82]: AI82_CREATOR,
7
+ [ContentCharacterSets.AI39]: AI39_CREATOR
8
+ };
9
+ //# sourceMappingURL=content-character-set-creators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-character-set-creators.js","sourceRoot":"","sources":["../src/content-character-set-creators.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAA4B,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,MAAM,CAAC,MAAM,8BAA8B,GAAqD;IAC5F,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe;IAC/C,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,YAAY;IACzC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,YAAY;CAC5C,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Character sets supported by the reference portion of an identifier or the serial component of a numeric identifier.
3
+ */
4
+ export declare const ContentCharacterSets: {
5
+ /**
6
+ * Numeric.
7
+ */
8
+ readonly Numeric: "Numeric";
9
+ /**
10
+ * GS1 AI encodable character set 82.
11
+ */
12
+ readonly AI82: "AI82";
13
+ /**
14
+ * GS1 AI encodable character set 39.
15
+ */
16
+ readonly AI39: "AI39";
17
+ };
18
+ /**
19
+ * Content character set key.
20
+ */
21
+ export type ContentCharacterSetKey = keyof typeof ContentCharacterSets;
22
+ /**
23
+ * Content character set.
24
+ */
25
+ export type ContentCharacterSet = typeof ContentCharacterSets[ContentCharacterSetKey];
26
+ //# sourceMappingURL=content-character-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-character-set.d.ts","sourceRoot":"","sources":["../src/content-character-set.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC7B;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;CAEG,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Character sets supported by the reference portion of an identifier or the serial component of a numeric identifier.
3
+ */
4
+ export const ContentCharacterSets = {
5
+ /**
6
+ * Numeric.
7
+ */
8
+ Numeric: "Numeric",
9
+ /**
10
+ * GS1 AI encodable character set 82.
11
+ */
12
+ AI82: "AI82",
13
+ /**
14
+ * GS1 AI encodable character set 39.
15
+ */
16
+ AI39: "AI39"
17
+ };
18
+ //# sourceMappingURL=content-character-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-character-set.js","sourceRoot":"","sources":["../src/content-character-set.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,IAAI,EAAE,MAAM;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM;CACN,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { type AppDataStorage, Cache, type HTTPFetch } from "@aidc-toolkit/core";
2
+ import { type GCPLengthData, type GCPLengthSourceJSON } from "./gcp-length-data.js";
3
+ /**
4
+ * GS1 Company Prefix length cache.
5
+ */
6
+ export declare abstract class GCPLengthCache extends Cache<GCPLengthData, GCPLengthData | GCPLengthSourceJSON> {
7
+ #private;
8
+ /**
9
+ * Storage key for full application data object.
10
+ */
11
+ static APP_DATA_STORAGE_KEY: string;
12
+ /**
13
+ * Storage key for next check date/time.
14
+ */
15
+ static NEXT_CHECK_DATE_TIME_STORAGE_KEY: string;
16
+ /**
17
+ * Storage key for header information (date/time and disclaimer).
18
+ */
19
+ static HEADER_STORAGE_KEY: string;
20
+ /**
21
+ * Storage key for data only.
22
+ */
23
+ static DATA_STORAGE_KEY: string;
24
+ /**
25
+ * Constructor.
26
+ *
27
+ * @param appDataStorage
28
+ * Application data storage.
29
+ */
30
+ constructor(appDataStorage: AppDataStorage<boolean>);
31
+ /**
32
+ * Get the application data storage.
33
+ */
34
+ get appDataStorage(): AppDataStorage<boolean>;
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ get nextCheckDateTime(): Promise<Date | undefined>;
39
+ /**
40
+ * @inheritDoc
41
+ */
42
+ get cacheDateTime(): Promise<Date | undefined>;
43
+ /**
44
+ * @inheritDoc
45
+ */
46
+ get cacheData(): Promise<GCPLengthData>;
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ update(nextCheckDateTime: Date, _cacheDateTime?: Date, cacheData?: GCPLengthData): Promise<void>;
51
+ }
52
+ /**
53
+ * GS1 Company Prefix length cache with remote source. This class provides access to the data from a remote source, by
54
+ * default the AIDC Toolkit website. If any error occurs, the next check date/time is set to the current date/time plus
55
+ * ten minutes to prevent the network from being overloaded.
56
+ *
57
+ * The data on the AIDC Toolkit website is updated regularly with the data provided by GS1, and it's stored in binary
58
+ * format for faster retrieval.
59
+ */
60
+ export declare class RemoteGCPLengthCache extends GCPLengthCache {
61
+ #private;
62
+ /**
63
+ * Default base URL pointing to AIDC Toolkit website data directory.
64
+ */
65
+ static DEFAULT_BASE_URL: string;
66
+ /**
67
+ * Constructor.
68
+ *
69
+ * @param appDataStorage
70
+ * Application data storage.
71
+ *
72
+ * @param baseURL
73
+ * Base URL. The URL must not end with a slash and must host the `gcp-length-header.json` and `gcp-length-data.bin`
74
+ * files.
75
+ *
76
+ * @param httpFetch
77
+ * HTTP fetch function.
78
+ */
79
+ constructor(appDataStorage: AppDataStorage<boolean>, baseURL?: string, httpFetch?: HTTPFetch);
80
+ /**
81
+ * @inheritDoc
82
+ */
83
+ get sourceDateTime(): Promise<Date>;
84
+ /**
85
+ * @inheritDoc
86
+ */
87
+ get sourceData(): Promise<GCPLengthData>;
88
+ }
89
+ //# sourceMappingURL=gcp-length-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-length-cache.d.ts","sourceRoot":"","sources":["../src/gcp-length-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,cAAc,EACnB,KAAK,EAEL,KAAK,SAAS,EAIjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEH,KAAK,aAAa,EAElB,KAAK,mBAAmB,EAG3B,MAAM,sBAAsB,CAAC;AAG9B;;GAEG;AACH,8BAAsB,cAAe,SAAQ,KAAK,CAAC,aAAa,EAAE,aAAa,GAAG,mBAAmB,CAAC;;IAClG;;OAEG;IACH,MAAM,CAAC,oBAAoB,SAAgB;IAE3C;;OAEG;IACH,MAAM,CAAC,gCAAgC,SAAqC;IAE5E;;OAEG;IACH,MAAM,CAAC,kBAAkB,SAAuB;IAEhD;;OAEG;IACH,MAAM,CAAC,gBAAgB,SAAqB;IAY5C;;;;;OAKG;gBACS,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC;IAMnD;;OAEG;IACH,IAAI,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,CAE5C;IA6CD;;OAEG;IACH,IAAa,iBAAiB,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAE1D;IAED;;OAEG;IACH,IAAa,aAAa,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAEtD;IAED;;OAEG;IACH,IAAa,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAS/C;IAED;;OAEG;IACY,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBlH;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;;IACpD;;OAEG;IACH,MAAM,CAAC,gBAAgB,SAA8B;IAYrD;;;;;;;;;;;;OAYG;gBACS,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,GAAE,MAA8C,EAAE,SAAS,GAAE,SAA4B;IA0CrJ;;OAEG;IACH,IAAa,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAY3C;IAED;;OAEG;IACH,IAAa,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAmBhD;CACJ"}
@@ -0,0 +1,240 @@
1
+ var _a;
2
+ import { Cache, defaultHTTPFetch, omit, RemoteAppDataStorage, WEBSITE_BASE_URL } from "@aidc-toolkit/core";
3
+ import { isGCPLengthAppData, isGCPLengthHeader } from "./gcp-length-data.js";
4
+ import { i18nextGS1 } from "./locale/i18n.js";
5
+ /**
6
+ * GS1 Company Prefix length cache.
7
+ */
8
+ export class GCPLengthCache extends Cache {
9
+ /**
10
+ * Storage key for full application data object.
11
+ */
12
+ static APP_DATA_STORAGE_KEY = "gcp-length";
13
+ /**
14
+ * Storage key for next check date/time.
15
+ */
16
+ static NEXT_CHECK_DATE_TIME_STORAGE_KEY = "gcp-length-next-check-date-time";
17
+ /**
18
+ * Storage key for header information (date/time and disclaimer).
19
+ */
20
+ static HEADER_STORAGE_KEY = "gcp-length-header";
21
+ /**
22
+ * Storage key for data only.
23
+ */
24
+ static DATA_STORAGE_KEY = "gcp-length-data";
25
+ /**
26
+ * Application data storage.
27
+ */
28
+ #appDataStorage;
29
+ /**
30
+ * GS1 Company Prefix application data.
31
+ */
32
+ #cacheGCPLengthAppData;
33
+ /**
34
+ * Constructor.
35
+ *
36
+ * @param appDataStorage
37
+ * Application data storage.
38
+ */
39
+ constructor(appDataStorage) {
40
+ super();
41
+ this.#appDataStorage = appDataStorage;
42
+ }
43
+ /**
44
+ * Get the application data storage.
45
+ */
46
+ get appDataStorage() {
47
+ return this.#appDataStorage;
48
+ }
49
+ /**
50
+ * Load cached GS1 Company Prefix length application data from application data storage.
51
+ *
52
+ * @returns
53
+ * GS1 Company Prefix length application data.
54
+ */
55
+ async #loadCache() {
56
+ if (this.#cacheGCPLengthAppData === undefined) {
57
+ if (!this.appDataStorage.supportsBinary) {
58
+ // Everything is stored in a single object.
59
+ const appData = await this.appDataStorage.read(_a.APP_DATA_STORAGE_KEY);
60
+ if (isGCPLengthAppData(appData)) {
61
+ this.#cacheGCPLengthAppData = appData;
62
+ }
63
+ }
64
+ else {
65
+ const nextCheckDateTime = await this.appDataStorage.read(_a.NEXT_CHECK_DATE_TIME_STORAGE_KEY);
66
+ const header = await this.appDataStorage.read(_a.HEADER_STORAGE_KEY);
67
+ const data = await this.appDataStorage.read(_a.DATA_STORAGE_KEY, true);
68
+ this.#cacheGCPLengthAppData = {
69
+ nextCheckDateTime: nextCheckDateTime instanceof Date ? nextCheckDateTime : undefined,
70
+ gcpLengthData: isGCPLengthHeader(header) && data instanceof Uint8Array ?
71
+ {
72
+ ...header,
73
+ data
74
+ } :
75
+ undefined
76
+ };
77
+ }
78
+ }
79
+ // If there's nothing in the cache yet, create an object with the next check date/time set to now.
80
+ if (this.#cacheGCPLengthAppData === undefined) {
81
+ this.#cacheGCPLengthAppData = {
82
+ nextCheckDateTime: new Date(),
83
+ gcpLengthData: undefined
84
+ };
85
+ }
86
+ return this.#cacheGCPLengthAppData;
87
+ }
88
+ /**
89
+ * @inheritDoc
90
+ */
91
+ get nextCheckDateTime() {
92
+ return this.#loadCache().then(gcpLengthAppData => gcpLengthAppData.nextCheckDateTime);
93
+ }
94
+ /**
95
+ * @inheritDoc
96
+ */
97
+ get cacheDateTime() {
98
+ return this.#loadCache().then(gcpLengthAppData => gcpLengthAppData.gcpLengthData?.dateTime);
99
+ }
100
+ /**
101
+ * @inheritDoc
102
+ */
103
+ get cacheData() {
104
+ return this.#loadCache().then((gcpLengthAppData) => {
105
+ if (gcpLengthAppData.gcpLengthData === undefined) {
106
+ // Application error; no localization necessary.
107
+ throw new Error("GS1 Company Prefix length application data not loaded");
108
+ }
109
+ return gcpLengthAppData.gcpLengthData;
110
+ });
111
+ }
112
+ /**
113
+ * @inheritDoc
114
+ */
115
+ async update(nextCheckDateTime, _cacheDateTime, cacheData) {
116
+ this.#cacheGCPLengthAppData = {
117
+ nextCheckDateTime,
118
+ // Retain existing data if cache data is not provided.
119
+ gcpLengthData: cacheData ?? this.#cacheGCPLengthAppData?.gcpLengthData
120
+ };
121
+ if (!this.appDataStorage.supportsBinary) {
122
+ // Everything is stored in a single object.
123
+ await this.appDataStorage.write(_a.APP_DATA_STORAGE_KEY, this.#cacheGCPLengthAppData);
124
+ }
125
+ else {
126
+ await this.appDataStorage.write(_a.NEXT_CHECK_DATE_TIME_STORAGE_KEY, nextCheckDateTime);
127
+ if (cacheData !== undefined) {
128
+ await this.appDataStorage.write(_a.HEADER_STORAGE_KEY, omit(cacheData, "data"));
129
+ await this.appDataStorage.write(_a.DATA_STORAGE_KEY, cacheData.data);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ _a = GCPLengthCache;
135
+ /**
136
+ * GS1 Company Prefix length cache with remote source. This class provides access to the data from a remote source, by
137
+ * default the AIDC Toolkit website. If any error occurs, the next check date/time is set to the current date/time plus
138
+ * ten minutes to prevent the network from being overloaded.
139
+ *
140
+ * The data on the AIDC Toolkit website is updated regularly with the data provided by GS1, and it's stored in binary
141
+ * format for faster retrieval.
142
+ */
143
+ export class RemoteGCPLengthCache extends GCPLengthCache {
144
+ /**
145
+ * Default base URL pointing to AIDC Toolkit website data directory.
146
+ */
147
+ static DEFAULT_BASE_URL = `${WEBSITE_BASE_URL}/data`;
148
+ /**
149
+ * Remote application data storage.
150
+ */
151
+ #remoteAppDataStorage;
152
+ /**
153
+ * Remote GS1 Company Prefix header data.
154
+ */
155
+ #remoteGCPLengthHeader;
156
+ /**
157
+ * Constructor.
158
+ *
159
+ * @param appDataStorage
160
+ * Application data storage.
161
+ *
162
+ * @param baseURL
163
+ * Base URL. The URL must not end with a slash and must host the `gcp-length-header.json` and `gcp-length-data.bin`
164
+ * files.
165
+ *
166
+ * @param httpFetch
167
+ * HTTP fetch function.
168
+ */
169
+ constructor(appDataStorage, baseURL = RemoteGCPLengthCache.DEFAULT_BASE_URL, httpFetch = defaultHTTPFetch) {
170
+ super(appDataStorage);
171
+ this.#remoteAppDataStorage = new RemoteAppDataStorage(baseURL, httpFetch);
172
+ }
173
+ /**
174
+ * Get remote application data. If an exception is thrown while retrieving or processing the data, retrying is
175
+ * delayed for ten minutes to prevent repeated network calls.
176
+ *
177
+ * @param pathKey
178
+ * Key relative to base URL.
179
+ *
180
+ * @param asBinary
181
+ * True if binary data is requested, false if string data is requested.
182
+ *
183
+ * @param callback
184
+ * Callback function to process the application data.
185
+ *
186
+ * @returns
187
+ * Application data.
188
+ */
189
+ async #getRemoteAppData(pathKey, asBinary, callback) {
190
+ return this.#remoteAppDataStorage.read(pathKey, asBinary).then((appData) => {
191
+ if (appData === undefined) {
192
+ throw new RangeError(i18nextGS1.t("GCPLength.gs1CompanyPrefixLengthDataFileNotFound", {
193
+ key: pathKey
194
+ }));
195
+ }
196
+ return callback(appData);
197
+ }).catch(async (e) => {
198
+ // Try again in ten minutes.
199
+ const nowPlus10Minutes = new Date();
200
+ nowPlus10Minutes.setMinutes(nowPlus10Minutes.getMinutes() + 10);
201
+ await this.update(nowPlus10Minutes);
202
+ throw e;
203
+ });
204
+ }
205
+ /**
206
+ * @inheritDoc
207
+ */
208
+ get sourceDateTime() {
209
+ // Header is fetched on each call.
210
+ return this.#getRemoteAppData(RemoteGCPLengthCache.HEADER_STORAGE_KEY, false, (appData) => {
211
+ if (!isGCPLengthHeader(appData)) {
212
+ // Application error; no localization necessary.
213
+ throw new Error("Invalid GS1 Company Prefix length header");
214
+ }
215
+ this.#remoteGCPLengthHeader = appData;
216
+ return this.#remoteGCPLengthHeader.dateTime;
217
+ });
218
+ }
219
+ /**
220
+ * @inheritDoc
221
+ */
222
+ get sourceData() {
223
+ return this.#getRemoteAppData(RemoteGCPLengthCache.DATA_STORAGE_KEY, true, (appData) => {
224
+ const gcpLengthHeader = this.#remoteGCPLengthHeader;
225
+ if (gcpLengthHeader === undefined) {
226
+ // Application error; no localization necessary.
227
+ throw new Error("GS1 Company Prefix length header not loaded");
228
+ }
229
+ if (!(appData instanceof Uint8Array)) {
230
+ // Application error; no localization necessary.
231
+ throw new Error("Invalid GS1 Company Prefix length data");
232
+ }
233
+ return {
234
+ ...gcpLengthHeader,
235
+ data: appData
236
+ };
237
+ });
238
+ }
239
+ }
240
+ //# sourceMappingURL=gcp-length-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-length-cache.js","sourceRoot":"","sources":["../src/gcp-length-cache.ts"],"names":[],"mappings":"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"}