@aidc-toolkit/gs1 1.0.31-beta → 1.0.32-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 (101) hide show
  1. package/dist/gcp-length-cache.d.ts +42 -0
  2. package/dist/gcp-length-cache.d.ts.map +1 -0
  3. package/dist/gcp-length-cache.js +96 -0
  4. package/dist/gcp-length-cache.js.map +1 -0
  5. package/dist/gcp-length-data.d.ts +54 -0
  6. package/dist/gcp-length-data.d.ts.map +1 -0
  7. package/dist/gcp-length-data.js +29 -0
  8. package/dist/gcp-length-data.js.map +1 -0
  9. package/dist/gcp-length.d.ts +61 -0
  10. package/dist/gcp-length.d.ts.map +1 -0
  11. package/dist/gcp-length.js +301 -0
  12. package/dist/gcp-length.js.map +1 -0
  13. package/dist/gtin-creator.d.ts +0 -17
  14. package/dist/gtin-creator.d.ts.map +1 -1
  15. package/dist/gtin-creator.js +1 -93
  16. package/dist/gtin-creator.js.map +1 -1
  17. package/dist/gtin-validator.d.ts +1 -46
  18. package/dist/gtin-validator.d.ts.map +1 -1
  19. package/dist/gtin-validator.js +31 -125
  20. package/dist/gtin-validator.js.map +1 -1
  21. package/dist/identifier-validator.d.ts +1 -4
  22. package/dist/identifier-validator.d.ts.map +1 -1
  23. package/dist/identifier-validator.js +2 -5
  24. package/dist/identifier-validator.js.map +1 -1
  25. package/dist/index.d.ts +5 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/locale/en/locale-resources.d.ts +2 -1
  30. package/dist/locale/en/locale-resources.d.ts.map +1 -1
  31. package/dist/locale/en/locale-resources.js +3 -2
  32. package/dist/locale/en/locale-resources.js.map +1 -1
  33. package/dist/locale/fr/locale-resources.d.ts +2 -1
  34. package/dist/locale/fr/locale-resources.d.ts.map +1 -1
  35. package/dist/locale/fr/locale-resources.js +3 -2
  36. package/dist/locale/fr/locale-resources.js.map +1 -1
  37. package/dist/locale/i18n.d.ts +0 -3
  38. package/dist/locale/i18n.d.ts.map +1 -1
  39. package/dist/locale/i18n.js +2 -5
  40. package/dist/locale/i18n.js.map +1 -1
  41. package/dist/non-numeric-identifier-validator.js +1 -1
  42. package/dist/non-numeric-identifier-validator.js.map +1 -1
  43. package/dist/numeric-identifier-validator.js +2 -2
  44. package/dist/numeric-identifier-validator.js.map +1 -1
  45. package/dist/prefix-manager.d.ts +35 -0
  46. package/dist/prefix-manager.d.ts.map +1 -1
  47. package/dist/prefix-manager.js +56 -0
  48. package/dist/prefix-manager.js.map +1 -1
  49. package/dist/prefix-validator.d.ts +5 -4
  50. package/dist/prefix-validator.d.ts.map +1 -1
  51. package/dist/prefix-validator.js +18 -22
  52. package/dist/prefix-validator.js.map +1 -1
  53. package/dist/serializable-numeric-identifier-validator.d.ts +26 -0
  54. package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -1
  55. package/dist/serializable-numeric-identifier-validator.js +19 -0
  56. package/dist/serializable-numeric-identifier-validator.js.map +1 -1
  57. package/dist/variable-measure.d.ts +68 -0
  58. package/dist/variable-measure.d.ts.map +1 -0
  59. package/dist/variable-measure.js +210 -0
  60. package/dist/variable-measure.js.map +1 -0
  61. package/dist/verified-by-gs1.d.ts +22 -0
  62. package/dist/verified-by-gs1.d.ts.map +1 -0
  63. package/dist/verified-by-gs1.js +46 -0
  64. package/dist/verified-by-gs1.js.map +1 -0
  65. package/package.json +8 -8
  66. package/src/gcp-length-cache.ts +117 -0
  67. package/src/gcp-length-data.ts +68 -0
  68. package/src/gcp-length.ts +418 -0
  69. package/src/gtin-creator.ts +1 -117
  70. package/src/gtin-validator.ts +42 -173
  71. package/src/identifier-validator.ts +2 -5
  72. package/src/index.ts +7 -1
  73. package/src/locale/en/locale-resources.ts +3 -2
  74. package/src/locale/fr/locale-resources.ts +3 -2
  75. package/src/locale/i18n.ts +2 -5
  76. package/src/non-numeric-identifier-validator.ts +1 -1
  77. package/src/numeric-identifier-validator.ts +2 -2
  78. package/src/prefix-manager.ts +65 -0
  79. package/src/prefix-validator.ts +19 -23
  80. package/src/serializable-numeric-identifier-validator.ts +36 -0
  81. package/src/variable-measure.ts +268 -0
  82. package/src/verified-by-gs1.ts +54 -0
  83. package/test/creator.test.ts +5 -5
  84. package/test/data/gcpprefixformatlist-1.json +662625 -0
  85. package/test/data/gcpprefixformatlist-2.json +735431 -0
  86. package/test/gcp-length.test.ts +405 -0
  87. package/test/gtin-creator.ts +4 -4
  88. package/test/gtin-validator.test.ts +205 -113
  89. package/test/gtin-validator.ts +30 -0
  90. package/test/identifier-creator.ts +6 -6
  91. package/test/non-numeric-identifier-creator.ts +0 -8
  92. package/test/non-serializable-numeric-identifier-creator.ts +4 -54
  93. package/test/numeric-identifier-creator.ts +4 -4
  94. package/test/prefix-manager.test.ts +5 -5
  95. package/test/serializable-numeric-identifier-creator.ts +32 -19
  96. package/test/validator.test.ts +6 -6
  97. package/test/variable-measure-rcn.test.ts +63 -68
  98. package/test/verified-by-gs1.test.ts +55 -0
  99. package/tsconfig-src.json +7 -1
  100. package/tsconfig-src.tsbuildinfo +1 -0
  101. package/tsconfig-tsup.json +7 -0
@@ -0,0 +1,42 @@
1
+ import { Cache } from "@aidc-toolkit/core";
2
+ import { type GCPLengthData } from "./gcp-length-data.js";
3
+ /**
4
+ * GS1 Company Prefix length cache.
5
+ */
6
+ export declare abstract class GCPLengthCache extends Cache<GCPLengthData, GCPLengthData | string> {
7
+ }
8
+ /**
9
+ * GS1 Company Prefix length cache with remote source.
10
+ */
11
+ export declare abstract class RemoteGCPLengthCache extends GCPLengthCache {
12
+ #private;
13
+ /**
14
+ * Default base URL pointing to AIDC Toolkit website data directory.
15
+ */
16
+ static DEFAULT_BASE_URL: string;
17
+ /**
18
+ * File containing header information (date/time and disclaimer).
19
+ */
20
+ static SOURCE_HEADER_FILE_NAME: string;
21
+ /**
22
+ * File containing tree data in binary form.
23
+ */
24
+ static SOURCE_DATA_FILE_NAME: string;
25
+ /**
26
+ * Constructor.
27
+ *
28
+ * @param baseURL
29
+ * Base URL. The URL must end with a slash, and must host the {@linkcode SOURCE_HEADER_FILE_NAME} and {@linkcode
30
+ * SOURCE_DATA_FILE_NAME} files.
31
+ */
32
+ constructor(baseURL?: string);
33
+ /**
34
+ * @inheritDoc
35
+ */
36
+ get sourceDateTime(): Promise<Date>;
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ get sourceData(): Promise<GCPLengthData>;
41
+ }
42
+ //# 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,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,aAAa,EAA8C,MAAM,sBAAsB,CAAC;AAGtG;;GAEG;AACH,8BAAsB,cAAe,SAAQ,KAAK,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAAC;CACxF;AAED;;GAEG;AACH,8BAAsB,oBAAqB,SAAQ,cAAc;;IAC7D;;OAEG;IACH,MAAM,CAAC,gBAAgB,SAAoC;IAE3D;;OAEG;IACH,MAAM,CAAC,uBAAuB,SAA4B;IAE1D;;OAEG;IACH,MAAM,CAAC,qBAAqB,SAAyB;IAYrD;;;;;;OAMG;gBACS,OAAO,GAAE,MAA8C;IAoCnE;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAQlC;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAiBvC;CACJ"}
@@ -0,0 +1,96 @@
1
+ import { Cache } from "@aidc-toolkit/core";
2
+ import { parseGCPLengthHeader } from "./gcp-length-data.js";
3
+ import { i18nextGS1 } from "./locale/i18n.js";
4
+ /**
5
+ * GS1 Company Prefix length cache.
6
+ */
7
+ export class GCPLengthCache extends Cache {
8
+ }
9
+ /**
10
+ * GS1 Company Prefix length cache with remote source.
11
+ */
12
+ export class RemoteGCPLengthCache extends GCPLengthCache {
13
+ /**
14
+ * Default base URL pointing to AIDC Toolkit website data directory.
15
+ */
16
+ static DEFAULT_BASE_URL = "https://aidc-toolkit.com/data/";
17
+ /**
18
+ * File containing header information (date/time and disclaimer).
19
+ */
20
+ static SOURCE_HEADER_FILE_NAME = "gcp-length-header.json";
21
+ /**
22
+ * File containing tree data in binary form.
23
+ */
24
+ static SOURCE_DATA_FILE_NAME = "gcp-length-data.bin";
25
+ /**
26
+ * Base URL.
27
+ */
28
+ #baseURL;
29
+ /**
30
+ * GS1 Company Prefix header data.
31
+ */
32
+ #gcpLengthHeader;
33
+ /**
34
+ * Constructor.
35
+ *
36
+ * @param baseURL
37
+ * Base URL. The URL must end with a slash, and must host the {@linkcode SOURCE_HEADER_FILE_NAME} and {@linkcode
38
+ * SOURCE_DATA_FILE_NAME} files.
39
+ */
40
+ constructor(baseURL = RemoteGCPLengthCache.DEFAULT_BASE_URL) {
41
+ super();
42
+ this.#baseURL = baseURL;
43
+ }
44
+ /**
45
+ * Get a remote file. If an exception is thrown, retrying is delayed for ten minutes to prevent repeated network
46
+ * calls.
47
+ *
48
+ * @param fileName
49
+ * File name relative to base URL.
50
+ *
51
+ * @returns
52
+ * Response.
53
+ */
54
+ async #getRemoteFile(fileName) {
55
+ return fetch(`${this.#baseURL}${fileName}`).then((response) => {
56
+ if (!response.ok) {
57
+ throw new RangeError(i18nextGS1.t("Prefix.gs1CompanyPrefixLengthDataHTTPError", {
58
+ status: response.status
59
+ }));
60
+ }
61
+ return response;
62
+ }).catch(async (e) => {
63
+ // Try again in ten minutes.
64
+ const nowPlus10Minutes = new Date();
65
+ nowPlus10Minutes.setMinutes(nowPlus10Minutes.getMinutes() + 10);
66
+ await this.update(nowPlus10Minutes);
67
+ throw e;
68
+ });
69
+ }
70
+ /**
71
+ * @inheritDoc
72
+ */
73
+ get sourceDateTime() {
74
+ return this.#getRemoteFile(RemoteGCPLengthCache.SOURCE_HEADER_FILE_NAME).then(async (response) => response.text()).then((s) => {
75
+ this.#gcpLengthHeader = parseGCPLengthHeader(s);
76
+ return this.#gcpLengthHeader.dateTime;
77
+ });
78
+ }
79
+ /**
80
+ * @inheritDoc
81
+ */
82
+ get sourceData() {
83
+ if (this.#gcpLengthHeader === undefined) {
84
+ // Application error; no localization necessary.
85
+ throw new Error("GS1 Company Prefix length header not loaded");
86
+ }
87
+ const gcpLengthHeader = this.#gcpLengthHeader;
88
+ // Clear header to allow for retry in case of failure.
89
+ this.#gcpLengthHeader = undefined;
90
+ return this.#getRemoteFile(RemoteGCPLengthCache.SOURCE_DATA_FILE_NAME).then(async (response) => response.arrayBuffer()).then(a => ({
91
+ ...gcpLengthHeader,
92
+ data: new Uint8Array(a)
93
+ }));
94
+ }
95
+ }
96
+ //# 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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAA4C,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAgB,cAAe,SAAQ,KAA4C;CACxF;AAED;;GAEG;AACH,MAAM,OAAgB,oBAAqB,SAAQ,cAAc;IAC7D;;OAEG;IACH,MAAM,CAAC,gBAAgB,GAAG,gCAAgC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,uBAAuB,GAAG,wBAAwB,CAAC;IAE1D;;OAEG;IACH,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IAErD;;OAEG;IACM,QAAQ,CAAS;IAE1B;;OAEG;IACH,gBAAgB,CAA+B;IAE/C;;;;;;OAMG;IACH,YAAY,UAAkB,oBAAoB,CAAC,gBAAgB;QAC/D,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB;QACjC,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,4CAA4C,EAAE;oBAC5E,MAAM,EAAE,QAAQ,CAAC,MAAM;iBAC1B,CAAC,CAAC,CAAC;YACR,CAAC;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAU,EAAE,EAAE;YAC1B,4BAA4B;YAC5B,MAAM,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;YACpC,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YAEhE,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAEpC,MAAM,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE,CAC3F,QAAQ,CAAC,IAAI,EAAE,CAClB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAEhD,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACV,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACtC,gDAAgD;YAChD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE9C,sDAAsD;QACtD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE,CACzF,QAAQ,CAAC,WAAW,EAAE,CACzB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,GAAG,eAAe;YAClB,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;SAC1B,CAAC,CAAC,CAAC;IACR,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * GS1 Company Prefix length header.
3
+ */
4
+ export interface GCPLengthHeader {
5
+ /**
6
+ * Date/time the data was last updated.
7
+ */
8
+ readonly dateTime: Date;
9
+ /**
10
+ * Disclaimer.
11
+ */
12
+ readonly disclaimer: string;
13
+ }
14
+ /**
15
+ * Parse a JSON string representing a GS1 Company Prefix length header.
16
+ *
17
+ * @param s
18
+ * JSON string.
19
+ *
20
+ * @returns
21
+ * GS1 Company Prefix length header.
22
+ */
23
+ export declare function parseGCPLengthHeader(s: string): GCPLengthHeader;
24
+ /**
25
+ * Generate a JSON string representing a GS1 Company Prefix length header.
26
+ *
27
+ * @param gcpLengthHeader
28
+ * GS1 Company Prefix length header.
29
+ *
30
+ * @param space
31
+ * JSON string indentation.
32
+ *
33
+ * @returns
34
+ * JSON string.
35
+ */
36
+ export declare function stringifyGCPLengthHeader(gcpLengthHeader: GCPLengthHeader, space?: string | number): string;
37
+ /**
38
+ * GS1 Company Prefix length data.
39
+ */
40
+ export interface GCPLengthData extends GCPLengthHeader {
41
+ /**
42
+ * Date/time the data was last updated.
43
+ */
44
+ readonly dateTime: Date;
45
+ /**
46
+ * Disclaimer.
47
+ */
48
+ readonly disclaimer: string;
49
+ /**
50
+ * Tree data in binary form.
51
+ */
52
+ readonly data: Uint8Array;
53
+ }
54
+ //# 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;;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,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,CAK/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAI1G;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IAClD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC7B"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Parse a JSON string representing a GS1 Company Prefix length header.
3
+ *
4
+ * @param s
5
+ * JSON string.
6
+ *
7
+ * @returns
8
+ * GS1 Company Prefix length header.
9
+ */
10
+ export function parseGCPLengthHeader(s) {
11
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- File format is known.
12
+ return JSON.parse(s, (key, value) => key === "dateTime" && typeof value === "string" ? new Date(value) : value);
13
+ }
14
+ /**
15
+ * Generate a JSON string representing a GS1 Company Prefix length header.
16
+ *
17
+ * @param gcpLengthHeader
18
+ * GS1 Company Prefix length header.
19
+ *
20
+ * @param space
21
+ * JSON string indentation.
22
+ *
23
+ * @returns
24
+ * JSON string.
25
+ */
26
+ export function stringifyGCPLengthHeader(gcpLengthHeader, space) {
27
+ return JSON.stringify(gcpLengthHeader, (key, value) => key === "dateTime" && value instanceof Date ? value.toISOString() : value, space);
28
+ }
29
+ //# 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":"AAeA;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS;IAC1C,gGAAgG;IAChG,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,KAAc,EAAE,EAAE,CACzC,GAAG,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CACzD,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,eAAgC,EAAE,KAAuB;IAC9F,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,KAAc,EAAE,EAAE,CAC3D,GAAG,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAC7E,KAAK,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,61 @@
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
+ export interface Leaf {
8
+ length: number;
9
+ }
10
+ /**
11
+ * Branch of GS1 Company Prefix length tree.
12
+ */
13
+ export interface Branch {
14
+ childNodes: Array<Node | undefined>;
15
+ }
16
+ /**
17
+ * Root of GS1 Company Prefix length tree.
18
+ */
19
+ export interface Root extends GCPLengthHeader, Branch {
20
+ }
21
+ /**
22
+ * Node in GS1 Company Prefix length tree.
23
+ */
24
+ export type Node = Root | Branch | Leaf;
25
+ /**
26
+ * Determine if a node is a leaf.
27
+ *
28
+ * @param node
29
+ * Node.
30
+ *
31
+ * @returns
32
+ * True if node is a leaf.
33
+ */
34
+ export declare function isLeaf(node: Node): node is Leaf;
35
+ /**
36
+ * Load the GS1 Company Prefix length data.
37
+ *
38
+ * @param gcpLengthCache
39
+ * GS1 Company Prefix length cache.
40
+ *
41
+ * @returns
42
+ * Root of tree.
43
+ */
44
+ export declare function loadData(gcpLengthCache: GCPLengthCache): Promise<Root | undefined>;
45
+ /**
46
+ * Get the length of a GS1 Company Prefix for an identifier.
47
+ *
48
+ * @param root
49
+ * Root of tree.
50
+ *
51
+ * @param identifierType
52
+ * Identifier type.
53
+ *
54
+ * @param identifier
55
+ * Identifier.
56
+ *
57
+ * @returns
58
+ * Length of GS1 Company Prefix, 0 if not a GS1 Company Prefix, or -1 if not found.
59
+ */
60
+ export declare function getFor(root: Root, identifierType: IdentifierType, identifier: string): number;
61
+ //# 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,KAAK,EAAiB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAuC5E;;GAEG;AACH,MAAM,WAAW,IAAI;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,UAAU,EAAE,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,eAAe,EAAE,MAAM;CACpD;AAED;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAExC;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,CAE/C;AAmMD;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CA4FxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAwB7F"}
@@ -0,0 +1,301 @@
1
+ import { omit } from "@aidc-toolkit/core";
2
+ import { GTINLengths } from "./gtin-length.js";
3
+ import { GTINValidator } from "./gtin-validator.js";
4
+ import { IdentifierTypes } from "./identifier-type.js";
5
+ import { IdentifierValidators, isNumericIdentifierValidator } from "./identifier-validators.js";
6
+ import { LeaderTypes } from "./leader-type.js";
7
+ /**
8
+ * Determine if a node is a leaf.
9
+ *
10
+ * @param node
11
+ * Node.
12
+ *
13
+ * @returns
14
+ * True if node is a leaf.
15
+ */
16
+ export function isLeaf(node) {
17
+ return "length" in node;
18
+ }
19
+ /**
20
+ * Entry in binary data to indicate that child node is undefined.
21
+ */
22
+ const BINARY_UNDEFINED = 0x0F;
23
+ /**
24
+ * Entry in binary data to indicate that child node is a branch.
25
+ */
26
+ const BINARY_BRANCH = 0x0E;
27
+ /**
28
+ * Build the GS1 Company Prefix length tree from a binary data array.
29
+ *
30
+ * @param binaryData
31
+ * Binary data array.
32
+ *
33
+ * @param childNodes
34
+ * Child nodes array to fill.
35
+ *
36
+ * @param startIndex
37
+ * Start index into binary data array.
38
+ *
39
+ * @returns
40
+ * End index into binary data array.
41
+ */
42
+ function fromBinary(binaryData, childNodes, startIndex) {
43
+ let endIndex = startIndex;
44
+ const decompressedLengths = new Array(10);
45
+ // Decompress lengths for the child nodes.
46
+ for (let childNodeIndex = 0; childNodeIndex < 10; childNodeIndex += 2) {
47
+ const byte = binaryData[endIndex++];
48
+ decompressedLengths[childNodeIndex] = byte >> 4;
49
+ decompressedLengths[childNodeIndex + 1] = byte & 0x0F;
50
+ }
51
+ for (let childNodeIndex = 0; childNodeIndex < 10; childNodeIndex++) {
52
+ const length = decompressedLengths[childNodeIndex];
53
+ if (length !== BINARY_UNDEFINED) {
54
+ let childNode;
55
+ if (length === BINARY_BRANCH) {
56
+ childNode = {
57
+ childNodes: []
58
+ };
59
+ endIndex = fromBinary(binaryData, childNode.childNodes, endIndex);
60
+ }
61
+ else {
62
+ childNode = {
63
+ length
64
+ };
65
+ }
66
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build tree.
67
+ childNodes[childNodeIndex] = childNode;
68
+ }
69
+ }
70
+ return endIndex;
71
+ }
72
+ /**
73
+ * Add an entry to the tree by recursively walking the tree to a leaf.
74
+ *
75
+ * @param branch
76
+ * Current branch.
77
+ *
78
+ * @param prefix
79
+ * Remainder of current prefix.
80
+ *
81
+ * @param length
82
+ * Current prefix length.
83
+ *
84
+ * @returns
85
+ * Number of branches added; used to determine size of binary array.
86
+ */
87
+ function addEntry(branch, prefix, length) {
88
+ const digit = Number(prefix.charAt(0));
89
+ const existingChildNode = branch.childNodes[digit];
90
+ let branchesAdded = 0;
91
+ if (prefix.length !== 1) {
92
+ let childBranch;
93
+ if (existingChildNode === undefined) {
94
+ childBranch = {
95
+ childNodes: []
96
+ };
97
+ branchesAdded++;
98
+ }
99
+ else {
100
+ if (isLeaf(existingChildNode)) {
101
+ // File format error or application bug; localization not necessary.
102
+ throw new Error("Overlapping entry");
103
+ }
104
+ childBranch = existingChildNode;
105
+ }
106
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build tree.
107
+ branch.childNodes[digit] = childBranch;
108
+ // Continue with remainder of prefix.
109
+ branchesAdded += addEntry(childBranch, prefix.substring(1), length);
110
+ }
111
+ else {
112
+ if (existingChildNode !== undefined) {
113
+ // File format error or application bug; localization not necessary.
114
+ throw new Error("Duplicate entry");
115
+ }
116
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build tree.
117
+ branch.childNodes[digit] = {
118
+ length
119
+ };
120
+ }
121
+ return branchesAdded;
122
+ }
123
+ /**
124
+ * Get the length of a child node if defined and it's a leaf, otherwise mark it with 0x0E if defined (branch) or 0x0F
125
+ * (no branch) if not.
126
+ *
127
+ * @param childNode
128
+ * Child node.
129
+ *
130
+ * @returns
131
+ * Child node length, 0x0E (branch), or 0x0F (undefined).
132
+ */
133
+ function childNodeValue(childNode) {
134
+ return childNode !== undefined ? isLeaf(childNode) ? childNode.length : BINARY_BRANCH : BINARY_UNDEFINED;
135
+ }
136
+ /**
137
+ * Add a branch to a binary data array.
138
+ *
139
+ * @param binaryData
140
+ * Binary data array.
141
+ *
142
+ * @param branch
143
+ * Branch.
144
+ *
145
+ * @param startIndex
146
+ * Start index into binary data array.
147
+ *
148
+ * @returns
149
+ * End index into binary data array.
150
+ */
151
+ function toBinary(binaryData, branch, startIndex) {
152
+ let endIndex = startIndex;
153
+ const childNodes = branch.childNodes;
154
+ // Add length or non-leaf indicators, compressing 10 nibbles into 5 bytes.
155
+ for (let childNodeIndex = 0; childNodeIndex < 10; childNodeIndex += 2) {
156
+ // eslint-disable-next-line no-param-reassign -- Purpose is to build array.
157
+ binaryData[endIndex++] = (childNodeValue(childNodes[childNodeIndex]) << 4) | childNodeValue(childNodes[childNodeIndex + 1]);
158
+ }
159
+ // Process child nodes.
160
+ for (const childNode of childNodes) {
161
+ if (childNode !== undefined && !isLeaf(childNode)) {
162
+ endIndex = toBinary(binaryData, childNode, endIndex);
163
+ }
164
+ }
165
+ return endIndex;
166
+ }
167
+ /**
168
+ * Add days to a date.
169
+ *
170
+ * @param date
171
+ * Date.
172
+ *
173
+ * @param days
174
+ * Days.
175
+ *
176
+ * @returns
177
+ * New date.
178
+ */
179
+ function addDays(date, days) {
180
+ const futureDate = new Date(date);
181
+ futureDate.setDate(futureDate.getDate() + days);
182
+ return futureDate;
183
+ }
184
+ /**
185
+ * Load the GS1 Company Prefix length data.
186
+ *
187
+ * @param gcpLengthCache
188
+ * GS1 Company Prefix length cache.
189
+ *
190
+ * @returns
191
+ * Root of tree.
192
+ */
193
+ export async function loadData(gcpLengthCache) {
194
+ let root = undefined;
195
+ let nextCheckDateTime = await gcpLengthCache.nextCheckDateTime;
196
+ let cacheDateTime = await gcpLengthCache.cacheDateTime;
197
+ const now = new Date();
198
+ const tomorrow = addDays(now, 1);
199
+ if (nextCheckDateTime === undefined || nextCheckDateTime.getTime() <= now.getTime()) {
200
+ const sourceDateTime = await gcpLengthCache.sourceDateTime;
201
+ if (cacheDateTime === undefined || cacheDateTime.getTime() < sourceDateTime.getTime()) {
202
+ const sourceData = await gcpLengthCache.sourceData;
203
+ let cacheData;
204
+ if (typeof sourceData !== "string") {
205
+ root = {
206
+ dateTime: sourceData.dateTime,
207
+ disclaimer: sourceData.disclaimer,
208
+ childNodes: []
209
+ };
210
+ fromBinary(sourceData.data, root.childNodes, 0);
211
+ cacheData = sourceData;
212
+ }
213
+ else {
214
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- File format is known.
215
+ const gcpLength = JSON.parse(sourceData);
216
+ root = {
217
+ dateTime: new Date(gcpLength.GCPPrefixFormatList.date),
218
+ // Join disclaimer as a single string.
219
+ disclaimer: `${gcpLength._disclaimer.reduce((lines, line) => {
220
+ if (lines.length === 0 || lines[lines.length - 1] === "" || line === "") {
221
+ lines.push(line);
222
+ }
223
+ else {
224
+ // Lines are part of the same paragraph.
225
+ lines.push(`${lines.pop()} ${line}`);
226
+ }
227
+ return lines;
228
+ }, []).join("\n")}\n`,
229
+ childNodes: []
230
+ };
231
+ let branchesAdded = 1;
232
+ for (const entry of gcpLength.GCPPrefixFormatList.entry) {
233
+ branchesAdded += addEntry(root, entry.prefix, entry.gcpLength);
234
+ }
235
+ // Each branch has ten (some possibly undefined) entries, two per byte.
236
+ const data = new Uint8Array(branchesAdded * 5);
237
+ toBinary(data, root, 0);
238
+ cacheData = {
239
+ ...omit(root, "childNodes"),
240
+ data
241
+ };
242
+ }
243
+ // Next check date/time is a week from source date/time or tomorrow, whichever is later.
244
+ nextCheckDateTime = addDays(sourceDateTime, 7);
245
+ if (nextCheckDateTime.getTime() < tomorrow.getTime()) {
246
+ nextCheckDateTime = tomorrow;
247
+ }
248
+ cacheDateTime = sourceDateTime;
249
+ await gcpLengthCache.update(nextCheckDateTime, cacheDateTime, cacheData);
250
+ }
251
+ else {
252
+ // Next check date/time is tomorrow.
253
+ await gcpLengthCache.update(tomorrow);
254
+ }
255
+ }
256
+ // Root is undefined if cache data is still valid or retrying after prior failure.
257
+ if (root === undefined && cacheDateTime !== undefined) {
258
+ const cacheData = await gcpLengthCache.cacheData;
259
+ root = {
260
+ ...omit(cacheData, "data"),
261
+ childNodes: []
262
+ };
263
+ fromBinary(cacheData.data, root.childNodes, 0);
264
+ }
265
+ return root;
266
+ }
267
+ /**
268
+ * Get the length of a GS1 Company Prefix for an identifier.
269
+ *
270
+ * @param root
271
+ * Root of tree.
272
+ *
273
+ * @param identifierType
274
+ * Identifier type.
275
+ *
276
+ * @param identifier
277
+ * Identifier.
278
+ *
279
+ * @returns
280
+ * Length of GS1 Company Prefix, 0 if not a GS1 Company Prefix, or -1 if not found.
281
+ */
282
+ export function getFor(root, identifierType, identifier) {
283
+ let identifierPrefix;
284
+ if (identifierType === IdentifierTypes.GTIN) {
285
+ // Normalize the GTIN, pad to 14 digits, and extract the identifier prefix at the first character.
286
+ identifierPrefix = GTINValidator.normalize(identifier).padStart(GTINLengths.GTIN14, "0").substring(1);
287
+ }
288
+ else {
289
+ const identifierValidator = IdentifierValidators[identifierType];
290
+ identifierValidator.validate(identifier);
291
+ identifierPrefix = !isNumericIdentifierValidator(identifierValidator) || identifierValidator.leaderType !== LeaderTypes.ExtensionDigit ? identifier : identifier.substring(1);
292
+ }
293
+ let node = root;
294
+ let digitIndex = 0;
295
+ // Traverse tree until exhausted or at a leaf.
296
+ while (node !== undefined && !isLeaf(node)) {
297
+ node = node.childNodes[Number(identifierPrefix.charAt(digitIndex++))];
298
+ }
299
+ return node?.length ?? -1;
300
+ }
301
+ //# 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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"}
@@ -42,23 +42,6 @@ export declare class GTINCreator extends GTINCreator_base {
42
42
  * GTIN-14(s).
43
43
  */
44
44
  createGTIN14<TTransformerInput extends TransformerInput<number | bigint>>(indicatorDigit: string, valueOrValues: TTransformerInput, sparse?: boolean): TransformerOutput<TTransformerInput, string>;
45
- /**
46
- * Create a Restricted Circulation Number (RCN) using a variable measure trade item format. See {@linkcode
47
- * GTINValidator.parseVariableMeasureRCN} for format details.
48
- *
49
- * @param format
50
- * Format.
51
- *
52
- * @param itemReference
53
- * Item reference.
54
- *
55
- * @param priceOrWeight
56
- * Price or weight (whole number only).
57
- *
58
- * @returns
59
- * RCN-12 or RCN-13.
60
- */
61
- static createVariableMeasureRCN(format: string, itemReference: number, priceOrWeight: number): string;
62
45
  }
63
46
  export {};
64
47
  //# sourceMappingURL=gtin-creator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gtin-creator.d.ts","sourceRoot":"","sources":["../src/gtin-creator.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;;AAE3D;;GAEG;AACH,qBAAa,WAAY,SAAQ,gBAEjB;;IAUZ;;;;;;;;OAQG;gBACS,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;IAI1E;;OAEG;IACH,IAAa,MAAM,IAAI,MAAM,CAE5B;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,iBAAiB,SAAS,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAQ,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAUjM;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;CAmGxG"}
1
+ {"version":3,"file":"gtin-creator.d.ts","sourceRoot":"","sources":["../src/gtin-creator.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;;AAE3D;;GAEG;AACH,qBAAa,WAAY,SAAQ,gBAEjB;;IAUZ;;;;;;;;OAQG;gBACS,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;IAI1E;;OAEG;IACH,IAAa,MAAM,IAAI,MAAM,CAE5B;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,iBAAiB,SAAS,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAQ,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,CAAC;CASpM"}