scandit-sdk
Version:
Scandit Barcode Scanner SDK for the Web
365 lines (337 loc) • 11.1 kB
text/typescript
/**
* A symbology-specific configuration object.
*
* See https://docs.scandit.com/stable/c_api/symbologies.html for more details.
*/
export class SymbologySettings {
private enabled: boolean;
private colorInvertedEnabled: boolean;
private activeSymbolCounts: number[];
private extensions: Set<SymbologySettings.Extension>;
private checksums: Set<SymbologySettings.Checksum>;
private customExtensions: boolean;
private customChecksums: boolean;
/**
* Create a SymbologySettings instance.
*
* @param enabled <div class="tsd-signature-symbol">Default = false</div>
* Whether the symbology is enabled for recognition.
* @param colorInvertedEnabled <div class="tsd-signature-symbol">Default = false</div>
* Whether color inverted recognition is enabled.
* @param activeSymbolCounts
* <div class="tsd-signature-symbol">Default = [] (default symbology range)</div>
* The list of active symbol counts.
* @param extensions
* <div class="tsd-signature-symbol">Default = undefined (default symbology extensions)</div>
* The list/set of enabled extensions.
* @param checksums
* <div class="tsd-signature-symbol">Default = undefined (default symbology checksums)</div>
* The list/set of enabled checksums.
*/
constructor({
enabled = false,
colorInvertedEnabled = false,
activeSymbolCounts = [],
extensions,
checksums
}: {
enabled?: boolean;
colorInvertedEnabled?: boolean;
activeSymbolCounts?: number[];
extensions?: SymbologySettings.Extension[] | Set<SymbologySettings.Extension>;
checksums?: SymbologySettings.Checksum[] | Set<SymbologySettings.Checksum>;
} = {}) {
this.enabled = enabled;
this.colorInvertedEnabled = colorInvertedEnabled;
this.activeSymbolCounts = activeSymbolCounts;
this.customExtensions = extensions != null;
this.customChecksums = checksums != null;
if (extensions == null) {
extensions = [];
}
if (checksums == null) {
checksums = [];
}
this.extensions = new Set(
Array.from(extensions).filter(extension => {
return this.isValidExtension(extension);
})
);
this.checksums = new Set(
Array.from(checksums).filter(checksum => {
return this.isValidChecksum(checksum);
})
);
}
/**
* @returns Whether the symbology enabled for recognition.
*/
public isEnabled(): boolean {
return this.enabled;
}
/**
* Enable or disable recognition of the symbology.
*
* @param enabled Whether the symbology is enabled for recognition.
* @returns The updated [[SymbologySettings]] object.
*/
public setEnabled(enabled: boolean): SymbologySettings {
this.enabled = enabled;
return this;
}
/**
* @returns Whether color inverted recognition is enabled.
*/
public isColorInvertedEnabled(): boolean {
return this.colorInvertedEnabled;
}
/**
* Enable or disable recognition of inverted-color symbology (in addition to normal colors).
*
* @param enabled Whether color inverted recognition is enabled.
* @returns The updated [[SymbologySettings]] object.
*/
public setColorInvertedEnabled(enabled: boolean): SymbologySettings {
this.colorInvertedEnabled = enabled;
return this;
}
/**
* Get the currently set custom list of active symbol counts.
* If never set, an empty array is returned
* but the Scandit Engine library will use the default list for the symbology.
*
* @returns The list of active symbol counts.
*/
public getActiveSymbolCounts(): number[] {
return this.activeSymbolCounts;
}
/**
* Set the list of active symbol counts.
*
* @param activeSymbolCounts The list of active symbol counts.
* @returns The updated [[SymbologySettings]] object.
*/
public setActiveSymbolCounts(activeSymbolCounts: number[]): SymbologySettings {
this.activeSymbolCounts = activeSymbolCounts;
return this;
}
/**
* Set the (inclusive) range of active symbol counts.
*
* @param minCount The minimum accepted number of symbols.
* @param maxCount The maximum accepted number of symbols.
* @returns The updated [[SymbologySettings]] object.
*/
public setActiveSymbolCountsRange(minCount: number, maxCount: number): SymbologySettings {
this.activeSymbolCounts = Array.from({ length: maxCount - minCount + 1 }, (_, k) => {
return k + minCount;
});
return this;
}
/**
* Get the currently set custom set of extensions.
* If never set, an empty set is returned
* but the Scandit Engine library will use the default extension set for the symbology.
*
* @returns The set of enabled extensions.
*/
public getEnabledExtensions(): Set<SymbologySettings.Extension> {
return this.extensions;
}
/**
* Enable an extension or list/set of extensions
*
* @param extension The single extension or list/set of extensions to enable.
* @returns The updated [[SymbologySettings]] object.
*/
public enableExtensions(
extension: SymbologySettings.Extension | SymbologySettings.Extension[] | Set<SymbologySettings.Extension>
): SymbologySettings {
this.customExtensions = true;
if (typeof extension === "object") {
this.extensions = new Set([
...this.extensions,
...Array.from(extension).filter(e => {
return this.isValidExtension(e);
})
]);
} else {
if (this.isValidExtension(extension)) {
this.extensions.add(extension);
}
}
return this;
}
/**
* Disable an extension or list/set of extensions.
*
* @param extension The single extension or list/set of extensions to disable.
* @returns The updated [[SymbologySettings]] object.
*/
public disableExtensions(
extension: SymbologySettings.Extension | SymbologySettings.Extension[] | Set<SymbologySettings.Extension>
): SymbologySettings {
if (typeof extension === "object") {
this.extensions = new Set(
[...this.extensions].filter(x => {
return extension instanceof Array ? !extension.includes(x) : !extension.has(x);
})
);
} else {
this.extensions.delete(extension);
}
return this;
}
/**
* Get the currently set custom set of checksums.
* If never set, an empty set is returned
* but the Scandit Engine library will use the default checksum set for the symbology.
*
* @returns The set of enabled checksums.
*/
public getEnabledChecksums(): Set<SymbologySettings.Checksum> {
return this.checksums;
}
/**
* Enable a checksum or list/set of checksums.
*
* @param checksum The single checksum or list/set of checksums to enable.
* @returns The updated [[SymbologySettings]] object.
*/
public enableChecksums(
checksum: SymbologySettings.Checksum | SymbologySettings.Checksum[] | Set<SymbologySettings.Checksum>
): SymbologySettings {
this.customChecksums = true;
if (typeof checksum === "object") {
this.checksums = new Set([
...this.checksums,
...Array.from(checksum).filter(c => {
return this.isValidChecksum(c);
})
]);
} else {
if (this.isValidChecksum(checksum)) {
this.checksums.add(checksum);
}
}
return this;
}
/**
* Disable a checksum or list/set of checksums.
*
* @param checksum The single checksum or list/set of checksums to disable.
* @returns The updated [[SymbologySettings]] object.
*/
public disableChecksums(
checksum: SymbologySettings.Checksum | SymbologySettings.Checksum[] | Set<SymbologySettings.Checksum>
): SymbologySettings {
if (typeof checksum === "object") {
this.checksums = new Set(
[...this.checksums].filter(x => {
return checksum instanceof Array ? !checksum.includes(x) : !checksum.has(x);
})
);
} else {
this.checksums.delete(checksum);
}
return this;
}
protected toJSON(): object {
return {
enabled: this.enabled,
colorInvertedEnabled: this.colorInvertedEnabled,
activeSymbolCounts: this.activeSymbolCounts.length === 0 ? undefined : this.activeSymbolCounts,
extensions: this.customExtensions ? Array.from(this.extensions) : undefined,
checksums: this.customChecksums ? Array.from(this.checksums) : undefined
};
}
private isValidExtension(extension: string | SymbologySettings.Extension): boolean {
return (
extension in SymbologySettings.Extension ||
(<string[]>Object.values(SymbologySettings.Extension)).includes(extension.toLowerCase())
);
}
private isValidChecksum(checksum: string | SymbologySettings.Checksum): boolean {
return (
checksum in SymbologySettings.Checksum ||
(<string[]>Object.values(SymbologySettings.Checksum)).includes(checksum.toLowerCase())
);
}
}
// istanbul ignore next
export namespace SymbologySettings {
/**
* Symbology extensions for particular functionalities, only applicable to specific barcodes.
* See: https://docs.scandit.com/stable/c_api/symbologies.html.
*/
export enum Extension {
/**
* Improve scan performance when reading direct part marked (DPM) Data Matrix codes.
* Enabling this extension comes at the cost of increased frame processing times.
*/
DIRECT_PART_MARKING_MODE = "direct_part_marking_mode",
/**
* Interpret the Code 39 / Code 93 code data using two symbols per output character to encode all ASCII characters.
*/
FULL_ASCII = "full_ascii",
/**
* Enable scanning codes that have quiet zones (white area before and after the code) significantly smaller
* than what's allowed by the symbology specification.
*/
RELAXED_SHARP_QUIET_ZONE_CHECK = "relaxed_sharp_quiet_zone_check",
/**
* Remove the leading zero digit from the result.
*/
REMOVE_LEADING_ZERO = "remove_leading_zero",
/**
* Remove the leading zero digit from the result if the UPC-A representation extension "RETURN_AS_UPCA" is enabled.
*/
REMOVE_LEADING_UPCA_ZERO = "remove_leading_upca_zero",
/**
* Transform the UPC-E result into its UPC-A representation.
*/
RETURN_AS_UPCA = "return_as_upca",
/**
* Remove the leading FNC1 character that indicates a GS1 code.
*/
STRIP_LEADING_FNC1 = "strip_leading_fnc1"
}
/**
* Checksum algorithms, only applicable to specific barcodes.
* See: https://docs.scandit.com/stable/c_api/symbologies.html.
*/
export enum Checksum {
/**
* Modulo 10 checksum.
*/
MOD_10 = "mod10",
/**
* Modulo 11 checksum.
*/
MOD_11 = "mod11",
/**
* Modulo 16 checksum.
*/
MOD_16 = "mod16",
/**
* Modulo 43 checksum.
*/
MOD_43 = "mod43",
/**
* Modulo 47 checksum.
*/
MOD_47 = "mod47",
/**
* Modulo 103 checksum.
*/
MOD_103 = "mod103",
/**
* Two modulo 10 checksums.
*/
MOD_1010 = "mod1010",
/**
* Modulo 11 and modulo 10 checksum.
*/
MOD_1110 = "mod1110"
}
}