@aidc-toolkit/gs1 1.0.43 → 1.0.45-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
@@ -0,0 +1,108 @@
1
+ import type { AppData } from "@aidc-toolkit/core";
2
+ /**
3
+ * GS1 Company Prefix length header.
4
+ */
5
+ export interface GCPLengthHeader {
6
+ /**
7
+ * Date/time the data was last updated.
8
+ */
9
+ readonly dateTime: Date;
10
+ /**
11
+ * Disclaimer.
12
+ */
13
+ readonly disclaimer: string;
14
+ }
15
+ /**
16
+ * Determine if application data object is GS1 Company Prefix length header.
17
+ *
18
+ * @param appData
19
+ * Application data object.
20
+ *
21
+ * @returns
22
+ * True if application data object is GS1 Company Prefix length header.
23
+ */
24
+ export declare function isGCPLengthHeader(appData: AppData | undefined): appData is GCPLengthHeader;
25
+ /**
26
+ * GS1 Company Prefix length data.
27
+ */
28
+ export interface GCPLengthData extends GCPLengthHeader {
29
+ /**
30
+ * Tree data in binary form.
31
+ */
32
+ readonly data: Uint8Array;
33
+ }
34
+ /**
35
+ * Determine if application data object is GS1 Company Prefix length data.
36
+ *
37
+ * @param appData
38
+ * Application data object.
39
+ *
40
+ * @returns
41
+ * True if application data object is GS1 Company Prefix length data.
42
+ */
43
+ export declare function isGCPLengthData(appData: AppData | undefined): appData is GCPLengthData;
44
+ /**
45
+ * GS1 Company Prefix length application data.
46
+ */
47
+ export interface GCPLengthAppData {
48
+ /**
49
+ * Next check date/time.
50
+ */
51
+ nextCheckDateTime: Date | undefined;
52
+ /**
53
+ * GS1 Company Prefix length data.
54
+ */
55
+ gcpLengthData: GCPLengthData | undefined;
56
+ }
57
+ /**
58
+ * Determine if application data object is GS1 Company Prefix length application data.
59
+ *
60
+ * @param appData
61
+ * Application data object.
62
+ *
63
+ * @returns
64
+ * True if application data object is GS1 Company Prefix length application data.
65
+ */
66
+ export declare function isGCPLengthAppData(appData: AppData | undefined): appData is GCPLengthAppData;
67
+ /**
68
+ * GS1 Company Prefix length JSON source file format.
69
+ */
70
+ export interface GCPLengthSourceJSON {
71
+ /**
72
+ * Disclaimer.
73
+ */
74
+ _disclaimer: string[];
75
+ /**
76
+ * Format list.
77
+ */
78
+ GCPPrefixFormatList: {
79
+ /**
80
+ * ISO data/time the table was last updated.
81
+ */
82
+ date: string;
83
+ /**
84
+ * Entries.
85
+ */
86
+ entry: Array<{
87
+ /**
88
+ * Identification key prefix start.
89
+ */
90
+ prefix: string;
91
+ /**
92
+ * Length of GS1 Company Prefix.
93
+ */
94
+ gcpLength: number;
95
+ }>;
96
+ };
97
+ }
98
+ /**
99
+ * Determine if application data object is GS1 Company Prefix length source JSON.
100
+ *
101
+ * @param appData
102
+ * Application data object.
103
+ *
104
+ * @returns
105
+ * True if application data object is GS1 Company Prefix length source JSON.
106
+ */
107
+ export declare function isGCPLengthSourceJSON(appData: AppData | undefined): appData is GCPLengthSourceJSON;
108
+ //# sourceMappingURL=gcp-length-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-length-data.d.ts","sourceRoot":"","sources":["../src/gcp-length-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,IAAI,eAAe,CAG1F;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IAClD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,IAAI,aAAa,CAGtF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;OAEG;IACH,iBAAiB,EAAE,IAAI,GAAG,SAAS,CAAC;IAEpC;;OAEG;IACH,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,IAAI,gBAAgB,CAO5F;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,mBAAmB,EAAE;QACjB;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,KAAK,EAAE,KAAK,CAAC;YACT;;eAEG;YACH,MAAM,EAAE,MAAM,CAAC;YAEf;;eAEG;YACH,SAAS,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACN,CAAC;CACL;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,IAAI,mBAAmB,CAGlG"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Determine if application data object is GS1 Company Prefix length header.
3
+ *
4
+ * @param appData
5
+ * Application data object.
6
+ *
7
+ * @returns
8
+ * True if application data object is GS1 Company Prefix length header.
9
+ */
10
+ export function isGCPLengthHeader(appData) {
11
+ // Property type check is necessary to guard against data corruption or changes in format.
12
+ return typeof appData === "object" && "dateTime" in appData && appData.dateTime instanceof Date && "disclaimer" in appData && typeof appData.disclaimer === "string";
13
+ }
14
+ /**
15
+ * Determine if application data object is GS1 Company Prefix length data.
16
+ *
17
+ * @param appData
18
+ * Application data object.
19
+ *
20
+ * @returns
21
+ * True if application data object is GS1 Company Prefix length data.
22
+ */
23
+ export function isGCPLengthData(appData) {
24
+ // Property type check is necessary to guard against data corruption or changes in format.
25
+ return isGCPLengthHeader(appData) && "data" in appData && appData.data instanceof Uint8Array;
26
+ }
27
+ /**
28
+ * Determine if application data object is GS1 Company Prefix length application data.
29
+ *
30
+ * @param appData
31
+ * Application data object.
32
+ *
33
+ * @returns
34
+ * True if application data object is GS1 Company Prefix length application data.
35
+ */
36
+ export function isGCPLengthAppData(appData) {
37
+ // Property type check is necessary to guard against data corruption or changes in format.
38
+ return typeof appData === "object" && "nextCheckDateTime" in appData && appData.nextCheckDateTime instanceof Date && (!("gcpLengthData" in appData) || appData.gcpLengthData === undefined || (typeof appData.gcpLengthData === "object" && appData.gcpLengthData !== null && isGCPLengthData(appData.gcpLengthData)));
39
+ }
40
+ /**
41
+ * Determine if application data object is GS1 Company Prefix length source JSON.
42
+ *
43
+ * @param appData
44
+ * Application data object.
45
+ *
46
+ * @returns
47
+ * True if application data object is GS1 Company Prefix length source JSON.
48
+ */
49
+ export function isGCPLengthSourceJSON(appData) {
50
+ // Checking is minimal as this is generally used in a controlled environment (e.g., updating remote storage).
51
+ return typeof appData === "object" && "_disclaimer" in appData && "GCPPrefixFormatList" in appData;
52
+ }
53
+ //# sourceMappingURL=gcp-length-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-length-data.js","sourceRoot":"","sources":["../src/gcp-length-data.ts"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC1D,0FAA0F;IAC1F,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,YAAY,IAAI,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC;AACzK,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B;IACxD,0FAA0F;IAC1F,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,YAAY,UAAU,CAAC;AACjG,CAAC;AAiBD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC3D,0FAA0F;IAC1F,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,mBAAmB,IAAI,OAAO,IAAI,OAAO,CAAC,iBAAiB,YAAY,IAAI,IAAI,CACjH,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,CACpE,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CACxH,CACJ,CAAC;AACN,CAAC;AAqCD;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA4B;IAC9D,6GAA6G;IAC7G,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,aAAa,IAAI,OAAO,IAAI,qBAAqB,IAAI,OAAO,CAAC;AACvG,CAAC"}
@@ -0,0 +1,97 @@
1
+ import type { GCPLengthCache } from "./gcp-length-cache.js";
2
+ import { type GCPLengthHeader } from "./gcp-length-data.js";
3
+ import { type IdentifierType } from "./identifier-type.js";
4
+ /**
5
+ * Leaf of GS1 Company Prefix length tree.
6
+ */
7
+ interface Leaf {
8
+ readonly length: number;
9
+ }
10
+ /**
11
+ * Branch of GS1 Company Prefix length tree.
12
+ */
13
+ interface Branch {
14
+ readonly childNodes: ReadonlyArray<Node | undefined>;
15
+ }
16
+ /**
17
+ * Root of GS1 Company Prefix length tree.
18
+ */
19
+ interface Root extends GCPLengthHeader, Branch {
20
+ }
21
+ /**
22
+ * Node in GS1 Company Prefix length tree.
23
+ */
24
+ type Node = Branch | Leaf;
25
+ /**
26
+ * Interim branch of GS1 Company Prefix length tree with writeable child nodes.
27
+ */
28
+ export interface InterimBranch {
29
+ readonly childNodes: Array<InterimBranch | Leaf | undefined>;
30
+ }
31
+ /**
32
+ * GS1 Company Prefix length service. The constructor takes a {@linkcode GCPLengthCache} object, which is responsible
33
+ * for managing the cache and source.
34
+ *
35
+ * The first step is to load the GS1 Company Prefix length data. This is done using the
36
+ * {@linkcode GCPLength.load | load()} method, which works as follows:
37
+ *
38
+ * - If the next check date/time is in the future, the method returns immediately, regardless of whether any data is
39
+ * available. It does this to prevent a large number of requests to the source in the event of a failure.
40
+ * - Otherwise, if the cache date/time is undefined or less than the source date/time, it loads from the source,
41
+ * converts the data if necessary, and updates the cache.
42
+ * - Otherwise, it continues with the cached data.
43
+ * - The next check date/time is updated to the later of the source date/time plus one week and the current date/time
44
+ * plus one day.
45
+ *
46
+ * The base class implementation of the `GCPLengthCache` manages only the cache itself, and it requires an
47
+ * application-provided storage implementation. The source is expected to be either a {@linkcode GCPLengthData} object
48
+ * (created via another cache implementation) or a {@linkcode GCPLengthSourceJSON} object, which is the format of the
49
+ * file provided by GS1.
50
+ *
51
+ * Once the data is loaded, the {@linkcode GCPLength.lengthOf | lengthOf()} method can be used to get the length of a
52
+ * GS1 Company Prefix for an identifier type and identifier.
53
+ */
54
+ export declare class GCPLength {
55
+ #private;
56
+ /**
57
+ * Constructor.
58
+ *
59
+ * @param gcpLengthCache
60
+ * GS1 Company Prefix length cache.
61
+ */
62
+ constructor(gcpLengthCache: GCPLengthCache);
63
+ /**
64
+ * Get the GS1 Company Prefix length tree root.
65
+ *
66
+ * @returns
67
+ * GS1 Company Prefix length tree root.
68
+ */
69
+ get root(): Root;
70
+ /**
71
+ * Get the date/time the GS1 Company Prefix length data was last updated.
72
+ */
73
+ get dateTime(): Date;
74
+ /**
75
+ * Get the disclaimer for the GS1 Company Prefix length data.
76
+ */
77
+ get disclaimer(): string;
78
+ /**
79
+ * Load the GS1 Company Prefix length data.
80
+ */
81
+ load(): Promise<void>;
82
+ /**
83
+ * Get the length of a GS1 Company Prefix for an identifier.
84
+ *
85
+ * @param identifierType
86
+ * Identifier type.
87
+ *
88
+ * @param identifier
89
+ * Identifier.
90
+ *
91
+ * @returns
92
+ * Length of GS1 Company Prefix, 0 if not a GS1 Company Prefix, or -1 if not found.
93
+ */
94
+ lengthOf(identifierType: IdentifierType, identifier: string): number;
95
+ }
96
+ export {};
97
+ //# sourceMappingURL=gcp-length.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-length.d.ts","sourceRoot":"","sources":["../src/gcp-length.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAsB,KAAK,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAGjG,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAK5E;;GAEG;AACH,UAAU,IAAI;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,UAAU,MAAM;IACZ,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,UAAU,IAAK,SAAQ,eAAe,EAAE,MAAM;CAC7C;AAED;;GAEG;AACH,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAe1B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAChE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,SAAS;;IAqBlB;;;;;OAKG;gBACS,cAAc,EAAE,cAAc;IAI1C;;;;;OAKG;IACH,IAAI,IAAI,IAAI,IAAI,CAMf;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IA4LD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwG3B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAyBvE"}
@@ -0,0 +1,368 @@
1
+ import { omit } from "@aidc-toolkit/core";
2
+ import { isGCPLengthData } from "./gcp-length-data.js";
3
+ import { GTINLengths } from "./gtin-length.js";
4
+ import { GTINValidator } from "./gtin-validator.js";
5
+ import { IdentifierTypes } from "./identifier-type.js";
6
+ import { IdentifierValidators, isNumericIdentifierValidator } from "./identifier-validators.js";
7
+ import { LeaderTypes } from "./leader-type.js";
8
+ import { i18nextGS1 } from "./locale/i18n.js";
9
+ /**
10
+ * Determine if a node is a leaf.
11
+ *
12
+ * @param node
13
+ * Node.
14
+ *
15
+ * @returns
16
+ * True if node is a leaf.
17
+ */
18
+ function isLeaf(node) {
19
+ return "length" in node;
20
+ }
21
+ /**
22
+ * GS1 Company Prefix length service. The constructor takes a {@linkcode GCPLengthCache} object, which is responsible
23
+ * for managing the cache and source.
24
+ *
25
+ * The first step is to load the GS1 Company Prefix length data. This is done using the
26
+ * {@linkcode GCPLength.load | load()} method, which works as follows:
27
+ *
28
+ * - If the next check date/time is in the future, the method returns immediately, regardless of whether any data is
29
+ * available. It does this to prevent a large number of requests to the source in the event of a failure.
30
+ * - Otherwise, if the cache date/time is undefined or less than the source date/time, it loads from the source,
31
+ * converts the data if necessary, and updates the cache.
32
+ * - Otherwise, it continues with the cached data.
33
+ * - The next check date/time is updated to the later of the source date/time plus one week and the current date/time
34
+ * plus one day.
35
+ *
36
+ * The base class implementation of the `GCPLengthCache` manages only the cache itself, and it requires an
37
+ * application-provided storage implementation. The source is expected to be either a {@linkcode GCPLengthData} object
38
+ * (created via another cache implementation) or a {@linkcode GCPLengthSourceJSON} object, which is the format of the
39
+ * file provided by GS1.
40
+ *
41
+ * Once the data is loaded, the {@linkcode GCPLength.lengthOf | lengthOf()} method can be used to get the length of a
42
+ * GS1 Company Prefix for an identifier type and identifier.
43
+ */
44
+ export class GCPLength {
45
+ /**
46
+ * Entry in binary data to indicate that child node is undefined.
47
+ */
48
+ static #BINARY_UNDEFINED = 0x0F;
49
+ /**
50
+ * Entry in binary data to indicate that child node is a branch.
51
+ */
52
+ static #BINARY_BRANCH = 0x0E;
53
+ /**
54
+ * GS1 Company Prefix length cache.
55
+ */
56
+ #gcpLengthCache;
57
+ /**
58
+ * GS1 Company Prefix length tree root.
59
+ */
60
+ #root;
61
+ /**
62
+ * Constructor.
63
+ *
64
+ * @param gcpLengthCache
65
+ * GS1 Company Prefix length cache.
66
+ */
67
+ constructor(gcpLengthCache) {
68
+ this.#gcpLengthCache = gcpLengthCache;
69
+ }
70
+ /**
71
+ * Get the GS1 Company Prefix length tree root.
72
+ *
73
+ * @returns
74
+ * GS1 Company Prefix length tree root.
75
+ */
76
+ get root() {
77
+ if (this.#root === undefined) {
78
+ throw new RangeError(i18nextGS1.t("GCPLength.gs1CompanyPrefixLengthDataNotLoaded"));
79
+ }
80
+ return this.#root;
81
+ }
82
+ /**
83
+ * Get the date/time the GS1 Company Prefix length data was last updated.
84
+ */
85
+ get dateTime() {
86
+ return this.root.dateTime;
87
+ }
88
+ /**
89
+ * Get the disclaimer for the GS1 Company Prefix length data.
90
+ */
91
+ get disclaimer() {
92
+ return this.root.disclaimer;
93
+ }
94
+ /**
95
+ * Build the GS1 Company Prefix length tree from a binary data array.
96
+ *
97
+ * @param binaryData
98
+ * Binary data array.
99
+ *
100
+ * @param childNodes
101
+ * Child nodes array to fill.
102
+ *
103
+ * @param startIndex
104
+ * Start index into binary data array.
105
+ *
106
+ * @returns
107
+ * End index into binary data array.
108
+ */
109
+ static #fromBinary(binaryData, childNodes, startIndex) {
110
+ let endIndex = startIndex;
111
+ const decompressedLengths = new Array(10);
112
+ // Decompress lengths for the child nodes.
113
+ for (let childNodeIndex = 0; childNodeIndex < 10; childNodeIndex += 2) {
114
+ const byte = binaryData[endIndex++];
115
+ decompressedLengths[childNodeIndex] = byte >> 4;
116
+ decompressedLengths[childNodeIndex + 1] = byte & 0x0F;
117
+ }
118
+ for (let childNodeIndex = 0; childNodeIndex < 10; childNodeIndex++) {
119
+ const length = decompressedLengths[childNodeIndex];
120
+ if (length !== GCPLength.#BINARY_UNDEFINED) {
121
+ let childNode;
122
+ if (length === GCPLength.#BINARY_BRANCH) {
123
+ const childNodes = [];
124
+ endIndex = GCPLength.#fromBinary(binaryData, childNodes, endIndex);
125
+ childNode = {
126
+ childNodes
127
+ };
128
+ }
129
+ else {
130
+ childNode = {
131
+ length
132
+ };
133
+ }
134
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build tree.
135
+ childNodes[childNodeIndex] = childNode;
136
+ }
137
+ }
138
+ return endIndex;
139
+ }
140
+ /**
141
+ * Add an entry to the tree by recursively walking the tree to a leaf.
142
+ *
143
+ * @param branch
144
+ * Current (interim) branch under construction.
145
+ *
146
+ * @param prefix
147
+ * Remainder of current prefix.
148
+ *
149
+ * @param length
150
+ * Current prefix length.
151
+ *
152
+ * @returns
153
+ * Number of branches added; used to determine size of binary array.
154
+ */
155
+ static #addEntry(branch, prefix, length) {
156
+ const digit = Number(prefix.charAt(0));
157
+ const existingChildNode = branch.childNodes[digit];
158
+ let branchesAdded = 0;
159
+ if (prefix.length !== 1) {
160
+ let childBranch;
161
+ if (existingChildNode === undefined) {
162
+ childBranch = {
163
+ childNodes: []
164
+ };
165
+ branchesAdded++;
166
+ }
167
+ else {
168
+ if (isLeaf(existingChildNode)) {
169
+ // File format error or application bug; localization not necessary.
170
+ throw new Error("Overlapping entry");
171
+ }
172
+ childBranch = existingChildNode;
173
+ }
174
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build tree.
175
+ branch.childNodes[digit] = childBranch;
176
+ // Continue with remainder of prefix.
177
+ branchesAdded += GCPLength.#addEntry(childBranch, prefix.substring(1), length);
178
+ }
179
+ else {
180
+ if (existingChildNode !== undefined) {
181
+ // File format error or application bug; localization not necessary.
182
+ throw new Error("Duplicate entry");
183
+ }
184
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build tree.
185
+ branch.childNodes[digit] = {
186
+ length
187
+ };
188
+ }
189
+ return branchesAdded;
190
+ }
191
+ /**
192
+ * Get the length of a child node if defined and it's a leaf, otherwise mark it with 0x0E if defined (branch) or 0x0F
193
+ * (no branch) if not.
194
+ *
195
+ * @param childNode
196
+ * Child node.
197
+ *
198
+ * @returns
199
+ * Child node length, 0x0E (branch), or 0x0F (undefined).
200
+ */
201
+ static #childNodeValue(childNode) {
202
+ return childNode !== undefined ? isLeaf(childNode) ? childNode.length : GCPLength.#BINARY_BRANCH : GCPLength.#BINARY_UNDEFINED;
203
+ }
204
+ /**
205
+ * Add a branch to a binary data array.
206
+ *
207
+ * @param binaryData
208
+ * Binary data array.
209
+ *
210
+ * @param branch
211
+ * Branch.
212
+ *
213
+ * @param startIndex
214
+ * Start index into binary data array.
215
+ *
216
+ * @returns
217
+ * End index into binary data array.
218
+ */
219
+ static #toBinary(binaryData, branch, startIndex) {
220
+ let endIndex = startIndex;
221
+ const childNodes = branch.childNodes;
222
+ // Add length or non-leaf indicators, compressing 10 nibbles into 5 bytes.
223
+ for (let childNodeIndex = 0; childNodeIndex < 10; childNodeIndex += 2) {
224
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build array.
225
+ binaryData[endIndex++] = (GCPLength.#childNodeValue(childNodes[childNodeIndex]) << 4) | GCPLength.#childNodeValue(childNodes[childNodeIndex + 1]);
226
+ }
227
+ // Process child nodes.
228
+ for (const childNode of childNodes) {
229
+ if (childNode !== undefined && !isLeaf(childNode)) {
230
+ endIndex = GCPLength.#toBinary(binaryData, childNode, endIndex);
231
+ }
232
+ }
233
+ return endIndex;
234
+ }
235
+ /**
236
+ * Add days to a date.
237
+ *
238
+ * @param date
239
+ * Date.
240
+ *
241
+ * @param days
242
+ * Days.
243
+ *
244
+ * @returns
245
+ * Future date.
246
+ */
247
+ static #addDays(date, days) {
248
+ const futureDate = new Date(date);
249
+ futureDate.setDate(futureDate.getDate() + days);
250
+ return futureDate;
251
+ }
252
+ /**
253
+ * Load the GS1 Company Prefix length data.
254
+ */
255
+ async load() {
256
+ let root = undefined;
257
+ const gcpLengthCache = this.#gcpLengthCache;
258
+ let nextCheckDateTime = await gcpLengthCache.nextCheckDateTime;
259
+ let cacheDateTime = await gcpLengthCache.cacheDateTime;
260
+ const now = new Date();
261
+ const tomorrow = GCPLength.#addDays(now, 1);
262
+ if (nextCheckDateTime === undefined || nextCheckDateTime.getTime() <= now.getTime()) {
263
+ const sourceDateTime = await gcpLengthCache.sourceDateTime;
264
+ if (cacheDateTime === undefined || cacheDateTime.getTime() < sourceDateTime.getTime()) {
265
+ const sourceData = await gcpLengthCache.sourceData;
266
+ let cacheData;
267
+ if (isGCPLengthData(sourceData)) {
268
+ const childNodes = [];
269
+ GCPLength.#fromBinary(sourceData.data, childNodes, 0);
270
+ root = {
271
+ dateTime: sourceData.dateTime,
272
+ disclaimer: sourceData.disclaimer,
273
+ childNodes
274
+ };
275
+ cacheData = sourceData;
276
+ }
277
+ else {
278
+ const interimRoot = {
279
+ childNodes: []
280
+ };
281
+ let branchesAdded = 1;
282
+ for (const entry of sourceData.GCPPrefixFormatList.entry) {
283
+ branchesAdded += GCPLength.#addEntry(interimRoot, entry.prefix, entry.gcpLength);
284
+ }
285
+ root = {
286
+ dateTime: new Date(sourceData.GCPPrefixFormatList.date),
287
+ // Join disclaimer as a single string.
288
+ disclaimer: `${sourceData._disclaimer.reduce((lines, line) => {
289
+ if (lines.length === 0 || lines[lines.length - 1] === "" || line === "") {
290
+ lines.push(line);
291
+ }
292
+ else {
293
+ // Lines are part of the same paragraph.
294
+ lines.push(`${lines.pop()} ${line}`);
295
+ }
296
+ return lines;
297
+ }, []).join("\n")}\n`,
298
+ ...interimRoot
299
+ };
300
+ // Each branch has ten (some possibly undefined) entries, two per byte.
301
+ const data = new Uint8Array(branchesAdded * 5);
302
+ GCPLength.#toBinary(data, root, 0);
303
+ cacheData = {
304
+ ...omit(root, "childNodes"),
305
+ data
306
+ };
307
+ }
308
+ // Next check date/time is a week from source date/time or tomorrow, whichever is later.
309
+ nextCheckDateTime = GCPLength.#addDays(sourceDateTime, 7);
310
+ if (nextCheckDateTime.getTime() < tomorrow.getTime()) {
311
+ nextCheckDateTime = tomorrow;
312
+ }
313
+ cacheDateTime = sourceDateTime;
314
+ await gcpLengthCache.update(nextCheckDateTime, cacheDateTime, cacheData);
315
+ }
316
+ else {
317
+ // Next check date/time is tomorrow.
318
+ await gcpLengthCache.update(tomorrow);
319
+ }
320
+ }
321
+ // Root is undefined if cache data is still valid or retrying after prior failure.
322
+ if (root === undefined && cacheDateTime !== undefined) {
323
+ const cacheData = await gcpLengthCache.cacheData;
324
+ const childNodes = [];
325
+ GCPLength.#fromBinary(cacheData.data, childNodes, 0);
326
+ root = {
327
+ ...omit(cacheData, "data"),
328
+ childNodes
329
+ };
330
+ }
331
+ // Update root only if successful.
332
+ if (root !== undefined) {
333
+ this.#root = root;
334
+ }
335
+ }
336
+ /**
337
+ * Get the length of a GS1 Company Prefix for an identifier.
338
+ *
339
+ * @param identifierType
340
+ * Identifier type.
341
+ *
342
+ * @param identifier
343
+ * Identifier.
344
+ *
345
+ * @returns
346
+ * Length of GS1 Company Prefix, 0 if not a GS1 Company Prefix, or -1 if not found.
347
+ */
348
+ lengthOf(identifierType, identifier) {
349
+ let identifierPrefix;
350
+ if (identifierType === IdentifierTypes.GTIN) {
351
+ // Normalize the GTIN, pad to 14 digits, and extract the identifier prefix at the first character.
352
+ identifierPrefix = GTINValidator.normalize(identifier).padStart(GTINLengths.GTIN14, "0").substring(1);
353
+ }
354
+ else {
355
+ const identifierValidator = IdentifierValidators[identifierType];
356
+ identifierValidator.validate(identifier);
357
+ identifierPrefix = !isNumericIdentifierValidator(identifierValidator) || identifierValidator.leaderType !== LeaderTypes.ExtensionDigit ? identifier : identifier.substring(1);
358
+ }
359
+ let node = this.root;
360
+ let digitIndex = 0;
361
+ // Traverse tree until exhausted or at a leaf.
362
+ while (node !== undefined && !isLeaf(node)) {
363
+ node = node.childNodes[Number(identifierPrefix.charAt(digitIndex++))];
364
+ }
365
+ return node?.length ?? -1;
366
+ }
367
+ }
368
+ //# sourceMappingURL=gcp-length.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-length.js","sourceRoot":"","sources":["../src/gcp-length.ts"],"names":[],"mappings":"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"}