@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.
- package/dist/gcp-length-cache.d.ts +42 -0
- package/dist/gcp-length-cache.d.ts.map +1 -0
- package/dist/gcp-length-cache.js +96 -0
- package/dist/gcp-length-cache.js.map +1 -0
- package/dist/gcp-length-data.d.ts +54 -0
- package/dist/gcp-length-data.d.ts.map +1 -0
- package/dist/gcp-length-data.js +29 -0
- package/dist/gcp-length-data.js.map +1 -0
- package/dist/gcp-length.d.ts +61 -0
- package/dist/gcp-length.d.ts.map +1 -0
- package/dist/gcp-length.js +301 -0
- package/dist/gcp-length.js.map +1 -0
- package/dist/gtin-creator.d.ts +0 -17
- package/dist/gtin-creator.d.ts.map +1 -1
- package/dist/gtin-creator.js +1 -93
- package/dist/gtin-creator.js.map +1 -1
- package/dist/gtin-validator.d.ts +1 -46
- package/dist/gtin-validator.d.ts.map +1 -1
- package/dist/gtin-validator.js +31 -125
- package/dist/gtin-validator.js.map +1 -1
- package/dist/identifier-validator.d.ts +1 -4
- package/dist/identifier-validator.d.ts.map +1 -1
- package/dist/identifier-validator.js +2 -5
- package/dist/identifier-validator.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/locale/en/locale-resources.d.ts +2 -1
- package/dist/locale/en/locale-resources.d.ts.map +1 -1
- package/dist/locale/en/locale-resources.js +3 -2
- package/dist/locale/en/locale-resources.js.map +1 -1
- package/dist/locale/fr/locale-resources.d.ts +2 -1
- package/dist/locale/fr/locale-resources.d.ts.map +1 -1
- package/dist/locale/fr/locale-resources.js +3 -2
- package/dist/locale/fr/locale-resources.js.map +1 -1
- package/dist/locale/i18n.d.ts +0 -3
- package/dist/locale/i18n.d.ts.map +1 -1
- package/dist/locale/i18n.js +2 -5
- package/dist/locale/i18n.js.map +1 -1
- package/dist/non-numeric-identifier-validator.js +1 -1
- package/dist/non-numeric-identifier-validator.js.map +1 -1
- package/dist/numeric-identifier-validator.js +2 -2
- package/dist/numeric-identifier-validator.js.map +1 -1
- package/dist/prefix-manager.d.ts +35 -0
- package/dist/prefix-manager.d.ts.map +1 -1
- package/dist/prefix-manager.js +56 -0
- package/dist/prefix-manager.js.map +1 -1
- package/dist/prefix-validator.d.ts +5 -4
- package/dist/prefix-validator.d.ts.map +1 -1
- package/dist/prefix-validator.js +18 -22
- package/dist/prefix-validator.js.map +1 -1
- package/dist/serializable-numeric-identifier-validator.d.ts +26 -0
- package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -1
- package/dist/serializable-numeric-identifier-validator.js +19 -0
- package/dist/serializable-numeric-identifier-validator.js.map +1 -1
- package/dist/variable-measure.d.ts +68 -0
- package/dist/variable-measure.d.ts.map +1 -0
- package/dist/variable-measure.js +210 -0
- package/dist/variable-measure.js.map +1 -0
- package/dist/verified-by-gs1.d.ts +22 -0
- package/dist/verified-by-gs1.d.ts.map +1 -0
- package/dist/verified-by-gs1.js +46 -0
- package/dist/verified-by-gs1.js.map +1 -0
- package/package.json +8 -8
- package/src/gcp-length-cache.ts +117 -0
- package/src/gcp-length-data.ts +68 -0
- package/src/gcp-length.ts +418 -0
- package/src/gtin-creator.ts +1 -117
- package/src/gtin-validator.ts +42 -173
- package/src/identifier-validator.ts +2 -5
- package/src/index.ts +7 -1
- package/src/locale/en/locale-resources.ts +3 -2
- package/src/locale/fr/locale-resources.ts +3 -2
- package/src/locale/i18n.ts +2 -5
- package/src/non-numeric-identifier-validator.ts +1 -1
- package/src/numeric-identifier-validator.ts +2 -2
- package/src/prefix-manager.ts +65 -0
- package/src/prefix-validator.ts +19 -23
- package/src/serializable-numeric-identifier-validator.ts +36 -0
- package/src/variable-measure.ts +268 -0
- package/src/verified-by-gs1.ts +54 -0
- package/test/creator.test.ts +5 -5
- package/test/data/gcpprefixformatlist-1.json +662625 -0
- package/test/data/gcpprefixformatlist-2.json +735431 -0
- package/test/gcp-length.test.ts +405 -0
- package/test/gtin-creator.ts +4 -4
- package/test/gtin-validator.test.ts +205 -113
- package/test/gtin-validator.ts +30 -0
- package/test/identifier-creator.ts +6 -6
- package/test/non-numeric-identifier-creator.ts +0 -8
- package/test/non-serializable-numeric-identifier-creator.ts +4 -54
- package/test/numeric-identifier-creator.ts +4 -4
- package/test/prefix-manager.test.ts +5 -5
- package/test/serializable-numeric-identifier-creator.ts +32 -19
- package/test/validator.test.ts +6 -6
- package/test/variable-measure-rcn.test.ts +63 -68
- package/test/verified-by-gs1.test.ts +55 -0
- package/tsconfig-src.json +7 -1
- package/tsconfig-src.tsbuildinfo +1 -0
- 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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"}
|
package/dist/gtin-creator.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|