@aidc-toolkit/gs1 1.0.31-beta → 1.0.33-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/README.md +290 -17
- package/dist/character-set.d.ts +17 -2
- package/dist/character-set.d.ts.map +1 -1
- package/dist/character-set.js +44 -11
- package/dist/character-set.js.map +1 -1
- package/dist/gcp-length-cache.d.ts +81 -0
- package/dist/gcp-length-cache.d.ts.map +1 -0
- package/dist/gcp-length-cache.js +232 -0
- package/dist/gcp-length-cache.js.map +1 -0
- package/dist/gcp-length-data.d.ts +108 -0
- package/dist/gcp-length-data.d.ts.map +1 -0
- package/dist/gcp-length-data.js +53 -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 +300 -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 +39 -35
- package/dist/locale/en/locale-resources.d.ts.map +1 -1
- package/dist/locale/en/locale-resources.js +6 -2
- package/dist/locale/en/locale-resources.js.map +1 -1
- package/dist/locale/fr/locale-resources.d.ts +39 -35
- package/dist/locale/fr/locale-resources.d.ts.map +1 -1
- package/dist/locale/fr/locale-resources.js +6 -2
- package/dist/locale/fr/locale-resources.js.map +1 -1
- package/dist/locale/i18n.d.ts +4 -4
- package/dist/locale/i18n.d.ts.map +1 -1
- package/dist/locale/i18n.js +6 -7
- 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.d.ts.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 +12 -11
- package/src/character-set.ts +55 -11
- package/src/gcp-length-cache.ts +271 -0
- package/src/gcp-length-data.ts +136 -0
- package/src/gcp-length.ts +380 -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 +7 -3
- package/src/locale/fr/locale-resources.ts +7 -3
- package/src/locale/i18n.ts +7 -8
- package/src/locale/i18next.d.ts +2 -0
- package/src/non-numeric-identifier-validator.ts +1 -1
- package/src/numeric-identifier-validator.ts +3 -3
- 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/character-set.test.ts +46 -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 +344 -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,232 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { Cache, omit, RemoteAppDataStorage } from "@aidc-toolkit/core";
|
|
3
|
+
import { isGCPLengthAppData, isGCPLengthHeader } from "./gcp-length-data.js";
|
|
4
|
+
import { i18nextGS1 } from "./locale/i18n.js";
|
|
5
|
+
/**
|
|
6
|
+
* GS1 Company Prefix length cache.
|
|
7
|
+
*/
|
|
8
|
+
export class GCPLengthCache extends Cache {
|
|
9
|
+
/**
|
|
10
|
+
* Storage key for full application data object.
|
|
11
|
+
*/
|
|
12
|
+
static APP_DATA_STORAGE_KEY = "gcp-length";
|
|
13
|
+
/**
|
|
14
|
+
* Storage key for next check date/time.
|
|
15
|
+
*/
|
|
16
|
+
static NEXT_CHECK_DATE_TIME_STORAGE_KEY = "gcp-length-next-check-date-time";
|
|
17
|
+
/**
|
|
18
|
+
* Storage key for header information (date/time and disclaimer).
|
|
19
|
+
*/
|
|
20
|
+
static HEADER_STORAGE_KEY = "gcp-length-header";
|
|
21
|
+
/**
|
|
22
|
+
* Storage key for data only.
|
|
23
|
+
*/
|
|
24
|
+
static DATA_STORAGE_KEY = "gcp-length-data";
|
|
25
|
+
/**
|
|
26
|
+
* Application data storage.
|
|
27
|
+
*/
|
|
28
|
+
#appDataStorage;
|
|
29
|
+
/**
|
|
30
|
+
* GS1 Company Prefix application data.
|
|
31
|
+
*/
|
|
32
|
+
#cacheGCPLengthAppData;
|
|
33
|
+
/**
|
|
34
|
+
* Constructor.
|
|
35
|
+
*
|
|
36
|
+
* @param appDataStorage
|
|
37
|
+
* Application data storage.
|
|
38
|
+
*/
|
|
39
|
+
constructor(appDataStorage) {
|
|
40
|
+
super();
|
|
41
|
+
this.#appDataStorage = appDataStorage;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the application data storage.
|
|
45
|
+
*/
|
|
46
|
+
get appDataStorage() {
|
|
47
|
+
return this.#appDataStorage;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load cached GS1 Company Prefix length application data from application data storage.
|
|
51
|
+
*
|
|
52
|
+
* @returns
|
|
53
|
+
* GS1 Company Prefix length application data.
|
|
54
|
+
*/
|
|
55
|
+
async #loadCache() {
|
|
56
|
+
if (this.#cacheGCPLengthAppData === undefined) {
|
|
57
|
+
if (!this.appDataStorage.supportsBinary) {
|
|
58
|
+
// Everything is stored in a single object.
|
|
59
|
+
const appData = await this.appDataStorage.read(_a.APP_DATA_STORAGE_KEY);
|
|
60
|
+
if (isGCPLengthAppData(appData)) {
|
|
61
|
+
this.#cacheGCPLengthAppData = appData;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const nextCheckDateTime = await this.appDataStorage.read(_a.NEXT_CHECK_DATE_TIME_STORAGE_KEY);
|
|
66
|
+
const header = await this.appDataStorage.read(_a.HEADER_STORAGE_KEY);
|
|
67
|
+
const data = await this.appDataStorage.read(_a.DATA_STORAGE_KEY, true);
|
|
68
|
+
this.#cacheGCPLengthAppData = {
|
|
69
|
+
nextCheckDateTime: nextCheckDateTime instanceof Date ? nextCheckDateTime : undefined,
|
|
70
|
+
gcpLengthData: isGCPLengthHeader(header) && data instanceof Uint8Array ?
|
|
71
|
+
{
|
|
72
|
+
...header,
|
|
73
|
+
data
|
|
74
|
+
} :
|
|
75
|
+
undefined
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// If there's nothing in the cache yet, create an object with the next check date/time set to now.
|
|
80
|
+
if (this.#cacheGCPLengthAppData === undefined) {
|
|
81
|
+
this.#cacheGCPLengthAppData = {
|
|
82
|
+
nextCheckDateTime: new Date(),
|
|
83
|
+
gcpLengthData: undefined
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return this.#cacheGCPLengthAppData;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @inheritDoc
|
|
90
|
+
*/
|
|
91
|
+
get nextCheckDateTime() {
|
|
92
|
+
return this.#loadCache().then(gcpLengthAppData => gcpLengthAppData.nextCheckDateTime);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @inheritDoc
|
|
96
|
+
*/
|
|
97
|
+
get cacheDateTime() {
|
|
98
|
+
return this.#loadCache().then(gcpLengthAppData => gcpLengthAppData.gcpLengthData?.dateTime);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @inheritDoc
|
|
102
|
+
*/
|
|
103
|
+
get cacheData() {
|
|
104
|
+
return this.#loadCache().then((gcpLengthAppData) => {
|
|
105
|
+
if (gcpLengthAppData.gcpLengthData === undefined) {
|
|
106
|
+
// Application error; no localization necessary.
|
|
107
|
+
throw new Error("GS1 Company Prefix length application data not loaded");
|
|
108
|
+
}
|
|
109
|
+
return gcpLengthAppData.gcpLengthData;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @inheritDoc
|
|
114
|
+
*/
|
|
115
|
+
async update(nextCheckDateTime, _cacheDateTime, cacheData) {
|
|
116
|
+
this.#cacheGCPLengthAppData = {
|
|
117
|
+
nextCheckDateTime,
|
|
118
|
+
// Retain existing data if cache data is not provided.
|
|
119
|
+
gcpLengthData: cacheData ?? this.#cacheGCPLengthAppData?.gcpLengthData
|
|
120
|
+
};
|
|
121
|
+
if (!this.appDataStorage.supportsBinary) {
|
|
122
|
+
// Everything is stored in a single object.
|
|
123
|
+
await this.appDataStorage.write(_a.APP_DATA_STORAGE_KEY, this.#cacheGCPLengthAppData);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
await this.appDataStorage.write(_a.NEXT_CHECK_DATE_TIME_STORAGE_KEY, nextCheckDateTime);
|
|
127
|
+
if (cacheData !== undefined) {
|
|
128
|
+
await this.appDataStorage.write(_a.HEADER_STORAGE_KEY, omit(cacheData, "data"));
|
|
129
|
+
await this.appDataStorage.write(_a.DATA_STORAGE_KEY, cacheData.data);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
_a = GCPLengthCache;
|
|
135
|
+
/**
|
|
136
|
+
* GS1 Company Prefix length cache with remote source.
|
|
137
|
+
*/
|
|
138
|
+
export class RemoteGCPLengthCache extends GCPLengthCache {
|
|
139
|
+
/**
|
|
140
|
+
* Default base URL pointing to AIDC Toolkit website data directory.
|
|
141
|
+
*/
|
|
142
|
+
static DEFAULT_BASE_URL = "https://aidc-toolkit.com/data";
|
|
143
|
+
/**
|
|
144
|
+
* Remote application data storage.
|
|
145
|
+
*/
|
|
146
|
+
#remoteAppDataStorage;
|
|
147
|
+
/**
|
|
148
|
+
* Remote GS1 Company Prefix header data.
|
|
149
|
+
*/
|
|
150
|
+
#remoteGCPLengthHeader;
|
|
151
|
+
/**
|
|
152
|
+
* Constructor.
|
|
153
|
+
*
|
|
154
|
+
* @param appDataStorage
|
|
155
|
+
* Application data storage.
|
|
156
|
+
*
|
|
157
|
+
* @param baseURL
|
|
158
|
+
* Base URL. The URL must not end with a slash and must host the `gcp-length-header.json` and `gcp-length-data.bin`
|
|
159
|
+
* files.
|
|
160
|
+
*/
|
|
161
|
+
constructor(appDataStorage, baseURL = RemoteGCPLengthCache.DEFAULT_BASE_URL) {
|
|
162
|
+
super(appDataStorage);
|
|
163
|
+
this.#remoteAppDataStorage = new RemoteAppDataStorage(baseURL);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get remote application data. If an exception is thrown while retrieving or processing the data, retrying is
|
|
167
|
+
* delayed for ten minutes to prevent repeated network calls.
|
|
168
|
+
*
|
|
169
|
+
* @param pathKey
|
|
170
|
+
* Key relative to base URL.
|
|
171
|
+
*
|
|
172
|
+
* @param asBinary
|
|
173
|
+
* True if binary data is requested, false if string data is requested.
|
|
174
|
+
*
|
|
175
|
+
* @param callback
|
|
176
|
+
* Callback function to process the application data.
|
|
177
|
+
*
|
|
178
|
+
* @returns
|
|
179
|
+
* Application data.
|
|
180
|
+
*/
|
|
181
|
+
async #getRemoteAppData(pathKey, asBinary, callback) {
|
|
182
|
+
return this.#remoteAppDataStorage.read(pathKey, asBinary).then((appData) => {
|
|
183
|
+
if (appData === undefined) {
|
|
184
|
+
throw new RangeError(i18nextGS1.t("Prefix.gs1CompanyPrefixLengthDataFileNotFound", {
|
|
185
|
+
key: pathKey
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
return callback(appData);
|
|
189
|
+
}).catch(async (e) => {
|
|
190
|
+
// Try again in ten minutes.
|
|
191
|
+
const nowPlus10Minutes = new Date();
|
|
192
|
+
nowPlus10Minutes.setMinutes(nowPlus10Minutes.getMinutes() + 10);
|
|
193
|
+
await this.update(nowPlus10Minutes);
|
|
194
|
+
throw e;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* @inheritDoc
|
|
199
|
+
*/
|
|
200
|
+
get sourceDateTime() {
|
|
201
|
+
// Header is fetched on each call.
|
|
202
|
+
return this.#getRemoteAppData(RemoteGCPLengthCache.HEADER_STORAGE_KEY, false, (appData) => {
|
|
203
|
+
if (!isGCPLengthHeader(appData)) {
|
|
204
|
+
// Application error; no localization necessary.
|
|
205
|
+
throw new Error("Invalid GS1 Company Prefix length header");
|
|
206
|
+
}
|
|
207
|
+
this.#remoteGCPLengthHeader = appData;
|
|
208
|
+
return this.#remoteGCPLengthHeader.dateTime;
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* @inheritDoc
|
|
213
|
+
*/
|
|
214
|
+
get sourceData() {
|
|
215
|
+
return this.#getRemoteAppData(RemoteGCPLengthCache.DATA_STORAGE_KEY, true, (appData) => {
|
|
216
|
+
const gcpLengthHeader = this.#remoteGCPLengthHeader;
|
|
217
|
+
if (gcpLengthHeader === undefined) {
|
|
218
|
+
// Application error; no localization necessary.
|
|
219
|
+
throw new Error("GS1 Company Prefix length header not loaded");
|
|
220
|
+
}
|
|
221
|
+
if (!(appData instanceof Uint8Array)) {
|
|
222
|
+
// Application error; no localization necessary.
|
|
223
|
+
throw new Error("Invalid GS1 Company Prefix length data");
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
...gcpLengthHeader,
|
|
227
|
+
data: appData
|
|
228
|
+
};
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=gcp-length-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-length-cache.js","sourceRoot":"","sources":["../src/gcp-length-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,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,EAAsB,KAAK,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAGjG,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAI5E;;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,CAyFxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAwB7F"}
|