diff --git a/.gitignore b/.gitignore index a940f660..e048f790 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,8 @@ src/*.d.ts src/*/*.d.ts src/*/*/*.d.ts docs/ +output/ +lib/ +build/ +meta/ +.rpt2_cache diff --git a/output/tests/src/camera/core-impl.d.ts b/output/tests/src/camera/core-impl.d.ts new file mode 100644 index 00000000..ffc8a05e --- /dev/null +++ b/output/tests/src/camera/core-impl.d.ts @@ -0,0 +1,7 @@ +import { Camera, CameraRenderingOptions, RenderedCamera, RenderingCallbacks } from "./core"; +export declare class CameraImpl implements Camera { + private readonly mediaStream; + private constructor(); + render(parentElement: HTMLElement, options: CameraRenderingOptions, callbacks: RenderingCallbacks): Promise; + static create(videoConstraints: MediaTrackConstraints): Promise; +} diff --git a/output/tests/src/camera/core-impl.js b/output/tests/src/camera/core-impl.js new file mode 100644 index 00000000..29dbb170 --- /dev/null +++ b/output/tests/src/camera/core-impl.js @@ -0,0 +1,240 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraImpl = void 0; +class AbstractCameraCapability { + constructor(name, track) { + this.name = name; + this.track = track; + } + isSupported() { + if (!this.track.getCapabilities) { + return false; + } + return this.name in this.track.getCapabilities(); + } + apply(value) { + let constraint = {}; + constraint[this.name] = value; + let constraints = { advanced: [constraint] }; + return this.track.applyConstraints(constraints); + } + value() { + let settings = this.track.getSettings(); + if (this.name in settings) { + let settingValue = settings[this.name]; + return settingValue; + } + return null; + } +} +class AbstractRangeCameraCapability extends AbstractCameraCapability { + constructor(name, track) { + super(name, track); + } + min() { + return this.getCapabilities().min; + } + max() { + return this.getCapabilities().max; + } + step() { + return this.getCapabilities().step; + } + apply(value) { + let constraint = {}; + constraint[this.name] = value; + let constraints = { advanced: [constraint] }; + return this.track.applyConstraints(constraints); + } + getCapabilities() { + this.failIfNotSupported(); + let capabilities = this.track.getCapabilities(); + let capability = capabilities[this.name]; + return { + min: capability.min, + max: capability.max, + step: capability.step, + }; + } + failIfNotSupported() { + if (!this.isSupported()) { + throw new Error(`${this.name} capability not supported`); + } + } +} +class ZoomFeatureImpl extends AbstractRangeCameraCapability { + constructor(track) { + super("zoom", track); + } +} +class TorchFeatureImpl extends AbstractCameraCapability { + constructor(track) { + super("torch", track); + } +} +class CameraCapabilitiesImpl { + constructor(track) { + this.track = track; + } + zoomFeature() { + return new ZoomFeatureImpl(this.track); + } + torchFeature() { + return new TorchFeatureImpl(this.track); + } +} +class RenderedCameraImpl { + constructor(parentElement, mediaStream, callbacks) { + this.isClosed = false; + this.parentElement = parentElement; + this.mediaStream = mediaStream; + this.callbacks = callbacks; + this.surface = this.createVideoElement(this.parentElement.clientWidth); + parentElement.append(this.surface); + } + createVideoElement(width) { + const videoElement = document.createElement("video"); + videoElement.style.width = `${width}px`; + videoElement.style.display = "block"; + videoElement.muted = true; + videoElement.setAttribute("muted", "true"); + videoElement.playsInline = true; + return videoElement; + } + setupSurface() { + this.surface.onabort = () => { + throw "RenderedCameraImpl video surface onabort() called"; + }; + this.surface.onerror = () => { + throw "RenderedCameraImpl video surface onerror() called"; + }; + let onVideoStart = () => { + const videoWidth = this.surface.clientWidth; + const videoHeight = this.surface.clientHeight; + this.callbacks.onRenderSurfaceReady(videoWidth, videoHeight); + this.surface.removeEventListener("playing", onVideoStart); + }; + this.surface.addEventListener("playing", onVideoStart); + this.surface.srcObject = this.mediaStream; + this.surface.play(); + } + static create(parentElement, mediaStream, options, callbacks) { + return __awaiter(this, void 0, void 0, function* () { + let renderedCamera = new RenderedCameraImpl(parentElement, mediaStream, callbacks); + if (options.aspectRatio) { + let aspectRatioConstraint = { + aspectRatio: options.aspectRatio + }; + yield renderedCamera.getFirstTrackOrFail().applyConstraints(aspectRatioConstraint); + } + renderedCamera.setupSurface(); + return renderedCamera; + }); + } + failIfClosed() { + if (this.isClosed) { + throw "The RenderedCamera has already been closed."; + } + } + getFirstTrackOrFail() { + this.failIfClosed(); + if (this.mediaStream.getVideoTracks().length === 0) { + throw "No video tracks found"; + } + return this.mediaStream.getVideoTracks()[0]; + } + pause() { + this.failIfClosed(); + this.surface.pause(); + } + resume(onResumeCallback) { + this.failIfClosed(); + let $this = this; + const onVideoResume = () => { + setTimeout(onResumeCallback, 200); + $this.surface.removeEventListener("playing", onVideoResume); + }; + this.surface.addEventListener("playing", onVideoResume); + this.surface.play(); + } + isPaused() { + this.failIfClosed(); + return this.surface.paused; + } + getSurface() { + this.failIfClosed(); + return this.surface; + } + getRunningTrackCapabilities() { + return this.getFirstTrackOrFail().getCapabilities(); + } + getRunningTrackSettings() { + return this.getFirstTrackOrFail().getSettings(); + } + applyVideoConstraints(constraints) { + return __awaiter(this, void 0, void 0, function* () { + if ("aspectRatio" in constraints) { + throw "Changing 'aspectRatio' in run-time is not yet supported."; + } + return this.getFirstTrackOrFail().applyConstraints(constraints); + }); + } + close() { + if (this.isClosed) { + return Promise.resolve(); + } + let $this = this; + return new Promise((resolve, _) => { + let tracks = $this.mediaStream.getVideoTracks(); + const tracksToClose = tracks.length; + var tracksClosed = 0; + $this.mediaStream.getVideoTracks().forEach((videoTrack) => { + $this.mediaStream.removeTrack(videoTrack); + videoTrack.stop(); + ++tracksClosed; + if (tracksClosed >= tracksToClose) { + $this.isClosed = true; + $this.parentElement.removeChild($this.surface); + resolve(); + } + }); + }); + } + getCapabilities() { + return new CameraCapabilitiesImpl(this.getFirstTrackOrFail()); + } +} +class CameraImpl { + constructor(mediaStream) { + this.mediaStream = mediaStream; + } + render(parentElement, options, callbacks) { + return __awaiter(this, void 0, void 0, function* () { + return RenderedCameraImpl.create(parentElement, this.mediaStream, options, callbacks); + }); + } + static create(videoConstraints) { + return __awaiter(this, void 0, void 0, function* () { + if (!navigator.mediaDevices) { + throw "navigator.mediaDevices not supported"; + } + let constraints = { + audio: false, + video: videoConstraints + }; + let mediaStream = yield navigator.mediaDevices.getUserMedia(constraints); + return new CameraImpl(mediaStream); + }); + } +} +exports.CameraImpl = CameraImpl; +//# sourceMappingURL=core-impl.js.map \ No newline at end of file diff --git a/output/tests/src/camera/core-impl.js.map b/output/tests/src/camera/core-impl.js.map new file mode 100644 index 00000000..cf5d1b99 --- /dev/null +++ b/output/tests/src/camera/core-impl.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core-impl.js","sourceRoot":"","sources":["../../../../src/camera/core-impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/camera/core.d.ts b/output/tests/src/camera/core.d.ts new file mode 100644 index 00000000..52e27b50 --- /dev/null +++ b/output/tests/src/camera/core.d.ts @@ -0,0 +1,41 @@ +export interface CameraDevice { + id: string; + label: string; +} +export interface CameraCapability { + isSupported(): boolean; + apply(value: T): Promise; + value(): T | null; +} +export interface RangeCameraCapability extends CameraCapability { + min(): number; + max(): number; + step(): number; +} +export interface BooleanCameraCapability extends CameraCapability { +} +export interface CameraCapabilities { + zoomFeature(): RangeCameraCapability; + torchFeature(): BooleanCameraCapability; +} +export type OnRenderSurfaceReady = (viewfinderWidth: number, viewfinderHeight: number) => void; +export interface RenderingCallbacks { + onRenderSurfaceReady: OnRenderSurfaceReady; +} +export interface RenderedCamera { + getSurface(): HTMLVideoElement; + pause(): void; + resume(onResumeCallback: () => void): void; + isPaused(): boolean; + close(): Promise; + getRunningTrackCapabilities(): MediaTrackCapabilities; + getRunningTrackSettings(): MediaTrackSettings; + applyVideoConstraints(constraints: MediaTrackConstraints): Promise; + getCapabilities(): CameraCapabilities; +} +export interface CameraRenderingOptions { + aspectRatio?: number; +} +export interface Camera { + render(parentElement: HTMLElement, options: CameraRenderingOptions, callbacks: RenderingCallbacks): Promise; +} diff --git a/output/tests/src/camera/core.js b/output/tests/src/camera/core.js new file mode 100644 index 00000000..383d5be4 --- /dev/null +++ b/output/tests/src/camera/core.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=core.js.map \ No newline at end of file diff --git a/output/tests/src/camera/core.js.map b/output/tests/src/camera/core.js.map new file mode 100644 index 00000000..7f230c36 --- /dev/null +++ b/output/tests/src/camera/core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/camera/core.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/output/tests/src/camera/factories.d.ts b/output/tests/src/camera/factories.d.ts new file mode 100644 index 00000000..df98f8ff --- /dev/null +++ b/output/tests/src/camera/factories.d.ts @@ -0,0 +1,6 @@ +import { Camera } from "./core"; +export declare class CameraFactory { + static failIfNotSupported(): Promise; + private constructor(); + create(videoConstraints: MediaTrackConstraints): Promise; +} diff --git a/output/tests/src/camera/factories.js b/output/tests/src/camera/factories.js new file mode 100644 index 00000000..5b67312f --- /dev/null +++ b/output/tests/src/camera/factories.js @@ -0,0 +1,31 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraFactory = void 0; +const core_impl_1 = require("./core-impl"); +class CameraFactory { + static failIfNotSupported() { + return __awaiter(this, void 0, void 0, function* () { + if (!navigator.mediaDevices) { + throw "navigator.mediaDevices not supported"; + } + return new CameraFactory(); + }); + } + constructor() { } + create(videoConstraints) { + return __awaiter(this, void 0, void 0, function* () { + return core_impl_1.CameraImpl.create(videoConstraints); + }); + } +} +exports.CameraFactory = CameraFactory; +//# sourceMappingURL=factories.js.map \ No newline at end of file diff --git a/output/tests/src/camera/factories.js.map b/output/tests/src/camera/factories.js.map new file mode 100644 index 00000000..a7419c79 --- /dev/null +++ b/output/tests/src/camera/factories.js.map @@ -0,0 +1 @@ +{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../src/camera/factories.ts"],"names":[],"mappings":";;;;;;;;;;;;AAQA,2CAAyC;AAGzC,MAAa,aAAa;IAMf,MAAM,CAAO,kBAAkB;;YAClC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC1B,MAAM,sCAAsC,CAAC;YACjD,CAAC;YAED,OAAO,IAAI,aAAa,EAAE,CAAC;QAC/B,CAAC;KAAA;IAED,gBAAqC,CAAC;IAGzB,MAAM,CAAC,gBAAuC;;YAEvD,OAAO,sBAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC;KAAA;CACJ;AArBD,sCAqBC"} \ No newline at end of file diff --git a/output/tests/src/camera/permissions.d.ts b/output/tests/src/camera/permissions.d.ts new file mode 100644 index 00000000..4209c552 --- /dev/null +++ b/output/tests/src/camera/permissions.d.ts @@ -0,0 +1,3 @@ +export declare class CameraPermissions { + static hasPermissions(): Promise; +} diff --git a/output/tests/src/camera/permissions.js b/output/tests/src/camera/permissions.js new file mode 100644 index 00000000..2a2fcc50 --- /dev/null +++ b/output/tests/src/camera/permissions.js @@ -0,0 +1,27 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraPermissions = void 0; +class CameraPermissions { + static hasPermissions() { + return __awaiter(this, void 0, void 0, function* () { + let devices = yield navigator.mediaDevices.enumerateDevices(); + for (const device of devices) { + if (device.kind === "videoinput" && device.label) { + return true; + } + } + return false; + }); + } +} +exports.CameraPermissions = CameraPermissions; +//# sourceMappingURL=permissions.js.map \ No newline at end of file diff --git a/output/tests/src/camera/permissions.js.map b/output/tests/src/camera/permissions.js.map new file mode 100644 index 00000000..50d42fdb --- /dev/null +++ b/output/tests/src/camera/permissions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../src/camera/permissions.ts"],"names":[],"mappings":";;;;;;;;;;;;AAYC,MAAa,iBAAiB;IAMpB,MAAM,CAAO,cAAc;;YAIhC,IAAI,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAC9D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAG7B,IAAG,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;CACJ;AArBA,8CAqBA"} \ No newline at end of file diff --git a/output/tests/src/camera/retriever.d.ts b/output/tests/src/camera/retriever.d.ts new file mode 100644 index 00000000..0baac120 --- /dev/null +++ b/output/tests/src/camera/retriever.d.ts @@ -0,0 +1,8 @@ +import { CameraDevice } from "./core"; +export declare class CameraRetriever { + static retrieve(): Promise>; + private static rejectWithError; + private static isHttpsOrLocalhost; + private static getCamerasFromMediaDevices; + private static getCamerasFromMediaStreamTrack; +} diff --git a/output/tests/src/camera/retriever.js b/output/tests/src/camera/retriever.js new file mode 100644 index 00000000..2cbdc5d9 --- /dev/null +++ b/output/tests/src/camera/retriever.js @@ -0,0 +1,84 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraRetriever = void 0; +const strings_1 = require("../strings"); +class CameraRetriever { + static retrieve() { + if (navigator.mediaDevices) { + return CameraRetriever.getCamerasFromMediaDevices(); + } + var mst = MediaStreamTrack; + if (MediaStreamTrack && mst.getSources) { + return CameraRetriever.getCamerasFromMediaStreamTrack(); + } + return CameraRetriever.rejectWithError(); + } + static rejectWithError() { + let errorMessage = strings_1.Html5QrcodeStrings.unableToQuerySupportedDevices(); + if (!CameraRetriever.isHttpsOrLocalhost()) { + errorMessage = strings_1.Html5QrcodeStrings.insecureContextCameraQueryError(); + } + return Promise.reject(errorMessage); + } + static isHttpsOrLocalhost() { + if (location.protocol === "https:") { + return true; + } + const host = location.host.split(":")[0]; + return host === "127.0.0.1" || host === "localhost"; + } + static getCamerasFromMediaDevices() { + return __awaiter(this, void 0, void 0, function* () { + const closeActiveStreams = (stream) => { + const tracks = stream.getVideoTracks(); + for (const track of tracks) { + track.enabled = false; + track.stop(); + stream.removeTrack(track); + } + }; + let mediaStream = yield navigator.mediaDevices.getUserMedia({ audio: false, video: true }); + let devices = yield navigator.mediaDevices.enumerateDevices(); + let results = []; + for (const device of devices) { + if (device.kind === "videoinput") { + results.push({ + id: device.deviceId, + label: device.label + }); + } + } + closeActiveStreams(mediaStream); + return results; + }); + } + static getCamerasFromMediaStreamTrack() { + return new Promise((resolve, _) => { + const callback = (sourceInfos) => { + const results = []; + for (const sourceInfo of sourceInfos) { + if (sourceInfo.kind === "video") { + results.push({ + id: sourceInfo.id, + label: sourceInfo.label + }); + } + } + resolve(results); + }; + var mst = MediaStreamTrack; + mst.getSources(callback); + }); + } +} +exports.CameraRetriever = CameraRetriever; +//# sourceMappingURL=retriever.js.map \ No newline at end of file diff --git a/output/tests/src/camera/retriever.js.map b/output/tests/src/camera/retriever.js.map new file mode 100644 index 00000000..8c26d5f3 --- /dev/null +++ b/output/tests/src/camera/retriever.js.map @@ -0,0 +1 @@ +{"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../../../src/camera/retriever.ts"],"names":[],"mappings":";;;;;;;;;;;;AAQA,wCAAgD;AAGhD,MAAa,eAAe;IAGjB,MAAM,CAAC,QAAQ;QAClB,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,eAAe,CAAC,0BAA0B,EAAE,CAAC;QACxD,CAAC;QAGD,IAAI,GAAG,GAAQ,gBAAgB,CAAC;QAChC,IAAI,gBAAgB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACrC,OAAO,eAAe,CAAC,8BAA8B,EAAE,CAAC;QAC5D,CAAC;QAED,OAAO,eAAe,CAAC,eAAe,EAAE,CAAC;IAC7C,CAAC;IAEO,MAAM,CAAC,eAAe;QAE1B,IAAI,YAAY,GAAG,4BAAkB,CAAC,6BAA6B,EAAE,CAAC;QACtE,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACxC,YAAY,GAAG,4BAAkB,CAAC,+BAA+B,EAAE,CAAC;QACxE,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAEO,MAAM,CAAC,kBAAkB;QAC7B,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,CAAC;IACxD,CAAC;IAEO,MAAM,CAAO,0BAA0B;;YAE3C,MAAM,kBAAkB,GAAG,CAAC,MAAmB,EAAE,EAAE;gBAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;gBACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;oBACtB,KAAK,CAAC,IAAI,EAAE,CAAC;oBACb,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACL,CAAC,CAAC;YAEF,IAAI,WAAW,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CACvD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,IAAI,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAC9D,IAAI,OAAO,GAAwB,EAAE,CAAC;YACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC;wBACT,EAAE,EAAE,MAAM,CAAC,QAAQ;wBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;qBACtB,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YACD,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;IAEO,MAAM,CAAC,8BAA8B;QAEzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,CAAC,WAAuB,EAAE,EAAE;gBACzC,MAAM,OAAO,GAAwB,EAAE,CAAC;gBACxC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACnC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC9B,OAAO,CAAC,IAAI,CAAC;4BACT,EAAE,EAAE,UAAU,CAAC,EAAE;4BACjB,KAAK,EAAE,UAAU,CAAC,KAAK;yBAC1B,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC,CAAA;YAED,IAAI,GAAG,GAAQ,gBAAgB,CAAC;YAChC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAjFD,0CAiFC"} \ No newline at end of file diff --git a/output/tests/src/code-decoder.d.ts b/output/tests/src/code-decoder.d.ts new file mode 100644 index 00000000..13d5426a --- /dev/null +++ b/output/tests/src/code-decoder.d.ts @@ -0,0 +1,16 @@ +import { QrcodeResult, Html5QrcodeSupportedFormats, Logger, RobustQrcodeDecoderAsync } from "./core"; +export declare class Html5QrcodeShim implements RobustQrcodeDecoderAsync { + private verbose; + private primaryDecoder; + private secondaryDecoder; + private readonly EXECUTIONS_TO_REPORT_PERFORMANCE; + private executions; + private executionResults; + private wasPrimaryDecoderUsedInLastDecode; + constructor(requestedFormats: Array, useBarCodeDetectorIfSupported: boolean, verbose: boolean, logger: Logger); + decodeAsync(canvas: HTMLCanvasElement): Promise; + decodeRobustlyAsync(canvas: HTMLCanvasElement): Promise; + private getDecoder; + private possiblyLogPerformance; + possiblyFlushPerformanceReport(): void; +} diff --git a/output/tests/src/code-decoder.js b/output/tests/src/code-decoder.js new file mode 100644 index 00000000..7b672075 --- /dev/null +++ b/output/tests/src/code-decoder.js @@ -0,0 +1,94 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Html5QrcodeShim = void 0; +const zxing_html5_qrcode_decoder_1 = require("./zxing-html5-qrcode-decoder"); +const native_bar_code_detector_1 = require("./native-bar-code-detector"); +class Html5QrcodeShim { + constructor(requestedFormats, useBarCodeDetectorIfSupported, verbose, logger) { + this.EXECUTIONS_TO_REPORT_PERFORMANCE = 100; + this.executions = 0; + this.executionResults = []; + this.wasPrimaryDecoderUsedInLastDecode = false; + this.verbose = verbose; + if (useBarCodeDetectorIfSupported + && native_bar_code_detector_1.BarcodeDetectorDelegate.isSupported()) { + this.primaryDecoder = new native_bar_code_detector_1.BarcodeDetectorDelegate(requestedFormats, verbose, logger); + this.secondaryDecoder = new zxing_html5_qrcode_decoder_1.ZXingHtml5QrcodeDecoder(requestedFormats, verbose, logger); + } + else { + this.primaryDecoder = new zxing_html5_qrcode_decoder_1.ZXingHtml5QrcodeDecoder(requestedFormats, verbose, logger); + } + } + decodeAsync(canvas) { + return __awaiter(this, void 0, void 0, function* () { + let startTime = performance.now(); + try { + return yield this.getDecoder().decodeAsync(canvas); + } + finally { + this.possiblyLogPerformance(startTime); + } + }); + } + decodeRobustlyAsync(canvas) { + return __awaiter(this, void 0, void 0, function* () { + let startTime = performance.now(); + try { + return yield this.primaryDecoder.decodeAsync(canvas); + } + catch (error) { + if (this.secondaryDecoder) { + return this.secondaryDecoder.decodeAsync(canvas); + } + throw error; + } + finally { + this.possiblyLogPerformance(startTime); + } + }); + } + getDecoder() { + if (!this.secondaryDecoder) { + return this.primaryDecoder; + } + if (this.wasPrimaryDecoderUsedInLastDecode === false) { + this.wasPrimaryDecoderUsedInLastDecode = true; + return this.primaryDecoder; + } + this.wasPrimaryDecoderUsedInLastDecode = false; + return this.secondaryDecoder; + } + possiblyLogPerformance(startTime) { + if (!this.verbose) { + return; + } + let executionTime = performance.now() - startTime; + this.executionResults.push(executionTime); + this.executions++; + this.possiblyFlushPerformanceReport(); + } + possiblyFlushPerformanceReport() { + if (this.executions < this.EXECUTIONS_TO_REPORT_PERFORMANCE) { + return; + } + let sum = 0; + for (let executionTime of this.executionResults) { + sum += executionTime; + } + let mean = sum / this.executionResults.length; + console.log(`${mean} ms for ${this.executionResults.length} last runs.`); + this.executions = 0; + this.executionResults = []; + } +} +exports.Html5QrcodeShim = Html5QrcodeShim; +//# sourceMappingURL=code-decoder.js.map \ No newline at end of file diff --git a/output/tests/src/code-decoder.js.map b/output/tests/src/code-decoder.js.map new file mode 100644 index 00000000..d07f5ca0 --- /dev/null +++ b/output/tests/src/code-decoder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"code-decoder.js","sourceRoot":"","sources":["../../../src/code-decoder.ts"],"names":[],"mappings":";;;;;;;;;;;;AAkBA,6EAAuE;AACvE,yEAAqE;AAOrE,MAAa,eAAe;IAWxB,YACI,gBAAoD,EACpD,6BAAsC,EACtC,OAAgB,EAChB,MAAc;QATD,qCAAgC,GAAG,GAAG,CAAC;QAChD,eAAU,GAAW,CAAC,CAAC;QACvB,qBAAgB,GAAkB,EAAE,CAAC;QACrC,sCAAiC,GAAG,KAAK,CAAC;QAO9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAGvB,IAAI,6BAA6B;eACtB,kDAAuB,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,kDAAuB,CAC7C,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAIvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,oDAAuB,CAC/C,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,cAAc,GAAG,IAAI,oDAAuB,CAC7C,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAEK,WAAW,CAAC,MAAyB;;YACvC,IAAI,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;oBAAS,CAAC;gBACP,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;KAAA;IAEK,mBAAmB,CAAC,MAAyB;;YAE/C,IAAI,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC;YAAC,OAAM,KAAK,EAAE,CAAC;gBACZ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAExB,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM,KAAK,CAAC;YAChB,CAAC;oBAAS,CAAC;gBACP,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;KAAA;IAEO,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,iCAAiC,KAAK,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;YAC9C,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,iCAAiC,GAAG,KAAK,CAAC;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAEO,sBAAsB,CAAC,SAAiB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QACD,IAAI,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,8BAA8B,EAAE,CAAC;IAC1C,CAAC;IAKD,8BAA8B;QAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAC1D,OAAO;QACX,CAAC;QAED,IAAI,GAAG,GAAU,CAAC,CAAC;QACnB,KAAK,IAAI,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,GAAG,IAAI,aAAa,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,IAAI,CAAC,gBAAgB,CAAC,MAAM,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC/B,CAAC;CACJ;AApGD,0CAoGC"} \ No newline at end of file diff --git a/output/tests/src/core.d.ts b/output/tests/src/core.d.ts new file mode 100644 index 00000000..0d0206d4 --- /dev/null +++ b/output/tests/src/core.d.ts @@ -0,0 +1,105 @@ +export declare enum Html5QrcodeSupportedFormats { + QR_CODE = 0, + AZTEC = 1, + CODABAR = 2, + CODE_39 = 3, + CODE_93 = 4, + CODE_128 = 5, + DATA_MATRIX = 6, + MAXICODE = 7, + ITF = 8, + EAN_13 = 9, + EAN_8 = 10, + PDF_417 = 11, + RSS_14 = 12, + RSS_EXPANDED = 13, + UPC_A = 14, + UPC_E = 15, + UPC_EAN_EXTENSION = 16 +} +export declare enum DecodedTextType { + UNKNOWN = 0, + URL = 1 +} +export declare function isValidHtml5QrcodeSupportedFormats(format: any): boolean; +export declare enum Html5QrcodeScanType { + SCAN_TYPE_CAMERA = 0, + SCAN_TYPE_FILE = 1 +} +export declare class Html5QrcodeConstants { + static GITHUB_PROJECT_URL: string; + static SCAN_DEFAULT_FPS: number; + static DEFAULT_DISABLE_FLIP: boolean; + static DEFAULT_REMEMBER_LAST_CAMERA_USED: boolean; + static DEFAULT_SUPPORTED_SCAN_TYPE: Html5QrcodeScanType[]; +} +export interface QrDimensions { + width: number; + height: number; +} +export type QrDimensionFunction = (viewfinderWidth: number, viewfinderHeight: number) => QrDimensions; +export interface QrBounds extends QrDimensions { + x: number; + y: number; +} +export declare class QrcodeResultFormat { + readonly format: Html5QrcodeSupportedFormats; + readonly formatName: string; + private constructor(); + toString(): string; + static create(format: Html5QrcodeSupportedFormats): QrcodeResultFormat; +} +export interface QrcodeResultDebugData { + decoderName?: string; +} +export interface QrcodeResult { + text: string; + format?: QrcodeResultFormat; + bounds?: QrBounds; + decodedTextType?: DecodedTextType; + debugData?: QrcodeResultDebugData; +} +export interface Html5QrcodeResult { + decodedText: string; + result: QrcodeResult; +} +export declare class Html5QrcodeResultFactory { + static createFromText(decodedText: string): Html5QrcodeResult; + static createFromQrcodeResult(qrcodeResult: QrcodeResult): Html5QrcodeResult; +} +export declare enum Html5QrcodeErrorTypes { + UNKWOWN_ERROR = 0, + IMPLEMENTATION_ERROR = 1, + NO_CODE_FOUND_ERROR = 2 +} +export interface Html5QrcodeError { + errorMessage: string; + type: Html5QrcodeErrorTypes; +} +export declare class Html5QrcodeErrorFactory { + static createFrom(error: any): Html5QrcodeError; +} +export type QrcodeSuccessCallback = (decodedText: string, result: Html5QrcodeResult) => void; +export type QrcodeErrorCallback = (errorMessage: string, error: Html5QrcodeError) => void; +export interface QrcodeDecoderAsync { + decodeAsync(canvas: HTMLCanvasElement): Promise; +} +export interface RobustQrcodeDecoderAsync extends QrcodeDecoderAsync { + decodeRobustlyAsync(canvas: HTMLCanvasElement): Promise; +} +export interface Logger { + log(message: string): void; + warn(message: string): void; + logError(message: string, isExperimental?: boolean): void; + logErrors(errors: Array): void; +} +export declare class BaseLoggger implements Logger { + private verbose; + constructor(verbose: boolean); + log(message: string): void; + warn(message: string): void; + logError(message: string, isExperimental?: boolean): void; + logErrors(errors: Array): void; +} +export declare function isNullOrUndefined(obj?: any): boolean; +export declare function clip(value: number, minValue: number, maxValue: number): number; diff --git a/output/tests/src/core.js b/output/tests/src/core.js new file mode 100644 index 00000000..f488cede --- /dev/null +++ b/output/tests/src/core.js @@ -0,0 +1,160 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseLoggger = exports.Html5QrcodeErrorFactory = exports.Html5QrcodeErrorTypes = exports.Html5QrcodeResultFactory = exports.QrcodeResultFormat = exports.Html5QrcodeConstants = exports.Html5QrcodeScanType = exports.DecodedTextType = exports.Html5QrcodeSupportedFormats = void 0; +exports.isValidHtml5QrcodeSupportedFormats = isValidHtml5QrcodeSupportedFormats; +exports.isNullOrUndefined = isNullOrUndefined; +exports.clip = clip; +var Html5QrcodeSupportedFormats; +(function (Html5QrcodeSupportedFormats) { + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["QR_CODE"] = 0] = "QR_CODE"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["AZTEC"] = 1] = "AZTEC"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["CODABAR"] = 2] = "CODABAR"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["CODE_39"] = 3] = "CODE_39"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["CODE_93"] = 4] = "CODE_93"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["CODE_128"] = 5] = "CODE_128"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["DATA_MATRIX"] = 6] = "DATA_MATRIX"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["MAXICODE"] = 7] = "MAXICODE"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["ITF"] = 8] = "ITF"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["EAN_13"] = 9] = "EAN_13"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["EAN_8"] = 10] = "EAN_8"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["PDF_417"] = 11] = "PDF_417"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["RSS_14"] = 12] = "RSS_14"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["RSS_EXPANDED"] = 13] = "RSS_EXPANDED"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["UPC_A"] = 14] = "UPC_A"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["UPC_E"] = 15] = "UPC_E"; + Html5QrcodeSupportedFormats[Html5QrcodeSupportedFormats["UPC_EAN_EXTENSION"] = 16] = "UPC_EAN_EXTENSION"; +})(Html5QrcodeSupportedFormats || (exports.Html5QrcodeSupportedFormats = Html5QrcodeSupportedFormats = {})); +const html5QrcodeSupportedFormatsTextMap = new Map([ + [Html5QrcodeSupportedFormats.QR_CODE, "QR_CODE"], + [Html5QrcodeSupportedFormats.AZTEC, "AZTEC"], + [Html5QrcodeSupportedFormats.CODABAR, "CODABAR"], + [Html5QrcodeSupportedFormats.CODE_39, "CODE_39"], + [Html5QrcodeSupportedFormats.CODE_93, "CODE_93"], + [Html5QrcodeSupportedFormats.CODE_128, "CODE_128"], + [Html5QrcodeSupportedFormats.DATA_MATRIX, "DATA_MATRIX"], + [Html5QrcodeSupportedFormats.MAXICODE, "MAXICODE"], + [Html5QrcodeSupportedFormats.ITF, "ITF"], + [Html5QrcodeSupportedFormats.EAN_13, "EAN_13"], + [Html5QrcodeSupportedFormats.EAN_8, "EAN_8"], + [Html5QrcodeSupportedFormats.PDF_417, "PDF_417"], + [Html5QrcodeSupportedFormats.RSS_14, "RSS_14"], + [Html5QrcodeSupportedFormats.RSS_EXPANDED, "RSS_EXPANDED"], + [Html5QrcodeSupportedFormats.UPC_A, "UPC_A"], + [Html5QrcodeSupportedFormats.UPC_E, "UPC_E"], + [Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION, "UPC_EAN_EXTENSION"] +]); +var DecodedTextType; +(function (DecodedTextType) { + DecodedTextType[DecodedTextType["UNKNOWN"] = 0] = "UNKNOWN"; + DecodedTextType[DecodedTextType["URL"] = 1] = "URL"; +})(DecodedTextType || (exports.DecodedTextType = DecodedTextType = {})); +function isValidHtml5QrcodeSupportedFormats(format) { + return Object.values(Html5QrcodeSupportedFormats).includes(format); +} +var Html5QrcodeScanType; +(function (Html5QrcodeScanType) { + Html5QrcodeScanType[Html5QrcodeScanType["SCAN_TYPE_CAMERA"] = 0] = "SCAN_TYPE_CAMERA"; + Html5QrcodeScanType[Html5QrcodeScanType["SCAN_TYPE_FILE"] = 1] = "SCAN_TYPE_FILE"; +})(Html5QrcodeScanType || (exports.Html5QrcodeScanType = Html5QrcodeScanType = {})); +class Html5QrcodeConstants { +} +exports.Html5QrcodeConstants = Html5QrcodeConstants; +Html5QrcodeConstants.GITHUB_PROJECT_URL = "https://github.com/mebjas/html5-qrcode"; +Html5QrcodeConstants.SCAN_DEFAULT_FPS = 2; +Html5QrcodeConstants.DEFAULT_DISABLE_FLIP = false; +Html5QrcodeConstants.DEFAULT_REMEMBER_LAST_CAMERA_USED = true; +Html5QrcodeConstants.DEFAULT_SUPPORTED_SCAN_TYPE = [ + Html5QrcodeScanType.SCAN_TYPE_CAMERA, + Html5QrcodeScanType.SCAN_TYPE_FILE +]; +class QrcodeResultFormat { + constructor(format, formatName) { + this.format = format; + this.formatName = formatName; + } + toString() { + return this.formatName; + } + static create(format) { + if (!html5QrcodeSupportedFormatsTextMap.has(format)) { + throw `${format} not in html5QrcodeSupportedFormatsTextMap`; + } + return new QrcodeResultFormat(format, html5QrcodeSupportedFormatsTextMap.get(format)); + } +} +exports.QrcodeResultFormat = QrcodeResultFormat; +class Html5QrcodeResultFactory { + static createFromText(decodedText) { + let qrcodeResult = { + text: decodedText + }; + return { + decodedText: decodedText, + result: qrcodeResult + }; + } + static createFromQrcodeResult(qrcodeResult) { + return { + decodedText: qrcodeResult.text, + result: qrcodeResult + }; + } +} +exports.Html5QrcodeResultFactory = Html5QrcodeResultFactory; +var Html5QrcodeErrorTypes; +(function (Html5QrcodeErrorTypes) { + Html5QrcodeErrorTypes[Html5QrcodeErrorTypes["UNKWOWN_ERROR"] = 0] = "UNKWOWN_ERROR"; + Html5QrcodeErrorTypes[Html5QrcodeErrorTypes["IMPLEMENTATION_ERROR"] = 1] = "IMPLEMENTATION_ERROR"; + Html5QrcodeErrorTypes[Html5QrcodeErrorTypes["NO_CODE_FOUND_ERROR"] = 2] = "NO_CODE_FOUND_ERROR"; +})(Html5QrcodeErrorTypes || (exports.Html5QrcodeErrorTypes = Html5QrcodeErrorTypes = {})); +class Html5QrcodeErrorFactory { + static createFrom(error) { + return { + errorMessage: error, + type: Html5QrcodeErrorTypes.UNKWOWN_ERROR + }; + } +} +exports.Html5QrcodeErrorFactory = Html5QrcodeErrorFactory; +class BaseLoggger { + constructor(verbose) { + this.verbose = verbose; + } + log(message) { + if (this.verbose) { + console.log(message); + } + } + warn(message) { + if (this.verbose) { + console.warn(message); + } + } + logError(message, isExperimental) { + if (this.verbose || isExperimental === true) { + console.error(message); + } + } + logErrors(errors) { + if (errors.length === 0) { + throw "Logger#logError called without arguments"; + } + if (this.verbose) { + console.error(errors); + } + } +} +exports.BaseLoggger = BaseLoggger; +function isNullOrUndefined(obj) { + return (typeof obj === "undefined") || obj === null; +} +function clip(value, minValue, maxValue) { + if (value > maxValue) { + return maxValue; + } + if (value < minValue) { + return minValue; + } + return value; +} +//# sourceMappingURL=core.js.map \ No newline at end of file diff --git a/output/tests/src/core.js.map b/output/tests/src/core.js.map new file mode 100644 index 00000000..c652cd1a --- /dev/null +++ b/output/tests/src/core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/experimental-features.d.ts b/output/tests/src/experimental-features.d.ts new file mode 100644 index 00000000..0413abeb --- /dev/null +++ b/output/tests/src/experimental-features.d.ts @@ -0,0 +1,3 @@ +export interface ExperimentalFeaturesConfig { + useBarCodeDetectorIfSupported?: boolean | undefined; +} diff --git a/output/tests/src/experimental-features.js b/output/tests/src/experimental-features.js new file mode 100644 index 00000000..ecfcd7e7 --- /dev/null +++ b/output/tests/src/experimental-features.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=experimental-features.js.map \ No newline at end of file diff --git a/output/tests/src/experimental-features.js.map b/output/tests/src/experimental-features.js.map new file mode 100644 index 00000000..1e51674e --- /dev/null +++ b/output/tests/src/experimental-features.js.map @@ -0,0 +1 @@ +{"version":3,"file":"experimental-features.js","sourceRoot":"","sources":["../../../src/experimental-features.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/output/tests/src/html5-qrcode-scanner.d.ts b/output/tests/src/html5-qrcode-scanner.d.ts new file mode 100644 index 00000000..417175bc --- /dev/null +++ b/output/tests/src/html5-qrcode-scanner.d.ts @@ -0,0 +1,67 @@ +import { Html5QrcodeScanType, QrcodeSuccessCallback, QrcodeErrorCallback } from "./core"; +import { Html5QrcodeConfigs, Html5QrcodeCameraScanConfig } from "./html5-qrcode"; +import { Html5QrcodeScannerState } from "./state-manager"; +export interface Html5QrcodeScannerConfig extends Html5QrcodeCameraScanConfig, Html5QrcodeConfigs { + rememberLastUsedCamera?: boolean | undefined; + supportedScanTypes?: Array | []; + showTorchButtonIfSupported?: boolean | undefined; + showZoomSliderIfSupported?: boolean | undefined; + defaultZoomValueIfSupported?: number | undefined; +} +export declare class Html5QrcodeScanner { + private elementId; + private config; + private verbose; + private currentScanType; + private sectionSwapAllowed; + private persistedDataManager; + private scanTypeSelector; + private logger; + private html5Qrcode; + private qrCodeSuccessCallback; + private qrCodeErrorCallback; + private lastMatchFound; + private cameraScanImage; + private fileScanImage; + private fileSelectionUi; + constructor(elementId: string, config: Html5QrcodeScannerConfig | undefined, verbose: boolean | undefined); + render(qrCodeSuccessCallback: QrcodeSuccessCallback, qrCodeErrorCallback: QrcodeErrorCallback | undefined): void; + pause(shouldPauseVideo?: boolean): void; + resume(): void; + getState(): Html5QrcodeScannerState; + clear(): Promise; + getRunningTrackCapabilities(): MediaTrackCapabilities; + getRunningTrackSettings(): MediaTrackSettings; + applyVideoConstraints(videoConstaints: MediaTrackConstraints): Promise; + private getHtml5QrcodeOrFail; + private createConfig; + private createBasicLayout; + private resetBasicLayout; + private setupInitialDashboard; + private createHeader; + private createSection; + private createCameraListUi; + private createPermissionButton; + private createPermissionsUi; + private createSectionControlPanel; + private renderFileScanUi; + private renderCameraSelection; + private createSectionSwap; + private startCameraScanIfPermissionExistsOnSwap; + private resetHeaderMessage; + private setHeaderMessage; + private showHideScanTypeSwapLink; + private insertCameraScanImageToScanRegion; + private insertFileScanImageToScanRegion; + private clearScanRegion; + private getDashboardSectionId; + private getDashboardSectionCameraScanRegionId; + private getDashboardSectionSwapLinkId; + private getScanRegionId; + private getDashboardId; + private getHeaderMessageContainerId; + private getCameraPermissionButtonId; + private getCameraScanRegion; + private getDashboardSectionSwapLink; + private getHeaderMessageDiv; +} diff --git a/output/tests/src/html5-qrcode-scanner.js b/output/tests/src/html5-qrcode-scanner.js new file mode 100644 index 00000000..b84f0676 --- /dev/null +++ b/output/tests/src/html5-qrcode-scanner.js @@ -0,0 +1,656 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Html5QrcodeScanner = void 0; +const core_1 = require("./core"); +const html5_qrcode_1 = require("./html5-qrcode"); +const strings_1 = require("./strings"); +const image_assets_1 = require("./image-assets"); +const storage_1 = require("./storage"); +const ui_1 = require("./ui"); +const permissions_1 = require("./camera/permissions"); +const scan_type_selector_1 = require("./ui/scanner/scan-type-selector"); +const torch_button_1 = require("./ui/scanner/torch-button"); +const file_selection_ui_1 = require("./ui/scanner/file-selection-ui"); +const base_1 = require("./ui/scanner/base"); +const camera_selection_ui_1 = require("./ui/scanner/camera-selection-ui"); +const camera_zoom_ui_1 = require("./ui/scanner/camera-zoom-ui"); +var Html5QrcodeScannerStatus; +(function (Html5QrcodeScannerStatus) { + Html5QrcodeScannerStatus[Html5QrcodeScannerStatus["STATUS_DEFAULT"] = 0] = "STATUS_DEFAULT"; + Html5QrcodeScannerStatus[Html5QrcodeScannerStatus["STATUS_SUCCESS"] = 1] = "STATUS_SUCCESS"; + Html5QrcodeScannerStatus[Html5QrcodeScannerStatus["STATUS_WARNING"] = 2] = "STATUS_WARNING"; + Html5QrcodeScannerStatus[Html5QrcodeScannerStatus["STATUS_REQUESTING_PERMISSION"] = 3] = "STATUS_REQUESTING_PERMISSION"; +})(Html5QrcodeScannerStatus || (Html5QrcodeScannerStatus = {})); +function toHtml5QrcodeCameraScanConfig(config) { + return { + fps: config.fps, + qrbox: config.qrbox, + aspectRatio: config.aspectRatio, + disableFlip: config.disableFlip, + videoConstraints: config.videoConstraints + }; +} +function toHtml5QrcodeFullConfig(config, verbose) { + return { + formatsToSupport: config.formatsToSupport, + useBarCodeDetectorIfSupported: config.useBarCodeDetectorIfSupported, + experimentalFeatures: config.experimentalFeatures, + verbose: verbose + }; +} +class Html5QrcodeScanner { + constructor(elementId, config, verbose) { + this.lastMatchFound = null; + this.cameraScanImage = null; + this.fileScanImage = null; + this.fileSelectionUi = null; + this.elementId = elementId; + this.config = this.createConfig(config); + this.verbose = verbose === true; + if (!document.getElementById(elementId)) { + throw `HTML Element with id=${elementId} not found`; + } + this.scanTypeSelector = new scan_type_selector_1.ScanTypeSelector(this.config.supportedScanTypes); + this.currentScanType = this.scanTypeSelector.getDefaultScanType(); + this.sectionSwapAllowed = true; + this.logger = new core_1.BaseLoggger(this.verbose); + this.persistedDataManager = new storage_1.PersistedDataManager(); + if (config.rememberLastUsedCamera !== true) { + this.persistedDataManager.reset(); + } + } + render(qrCodeSuccessCallback, qrCodeErrorCallback) { + this.lastMatchFound = null; + this.qrCodeSuccessCallback + = (decodedText, result) => { + if (qrCodeSuccessCallback) { + qrCodeSuccessCallback(decodedText, result); + } + else { + if (this.lastMatchFound === decodedText) { + return; + } + this.lastMatchFound = decodedText; + this.setHeaderMessage(strings_1.Html5QrcodeScannerStrings.lastMatch(decodedText), Html5QrcodeScannerStatus.STATUS_SUCCESS); + } + }; + this.qrCodeErrorCallback = + (errorMessage, error) => { + if (qrCodeErrorCallback) { + qrCodeErrorCallback(errorMessage, error); + } + }; + const container = document.getElementById(this.elementId); + if (!container) { + throw `HTML Element with id=${this.elementId} not found`; + } + container.innerHTML = ""; + this.createBasicLayout(container); + this.html5Qrcode = new html5_qrcode_1.Html5Qrcode(this.getScanRegionId(), toHtml5QrcodeFullConfig(this.config, this.verbose)); + } + pause(shouldPauseVideo) { + if ((0, core_1.isNullOrUndefined)(shouldPauseVideo) || shouldPauseVideo !== true) { + shouldPauseVideo = false; + } + this.getHtml5QrcodeOrFail().pause(shouldPauseVideo); + } + resume() { + this.getHtml5QrcodeOrFail().resume(); + } + getState() { + return this.getHtml5QrcodeOrFail().getState(); + } + clear() { + const emptyHtmlContainer = () => { + const mainContainer = document.getElementById(this.elementId); + if (mainContainer) { + mainContainer.innerHTML = ""; + this.resetBasicLayout(mainContainer); + } + }; + if (this.html5Qrcode) { + return new Promise((resolve, reject) => { + if (!this.html5Qrcode) { + resolve(); + return; + } + if (this.html5Qrcode.isScanning) { + this.html5Qrcode.stop().then((_) => { + if (!this.html5Qrcode) { + resolve(); + return; + } + this.html5Qrcode.clear(); + emptyHtmlContainer(); + resolve(); + }).catch((error) => { + if (this.verbose) { + this.logger.logError("Unable to stop qrcode scanner", error); + } + reject(error); + }); + } + else { + this.html5Qrcode.clear(); + emptyHtmlContainer(); + resolve(); + } + }); + } + return Promise.resolve(); + } + getRunningTrackCapabilities() { + return this.getHtml5QrcodeOrFail().getRunningTrackCapabilities(); + } + getRunningTrackSettings() { + return this.getHtml5QrcodeOrFail().getRunningTrackSettings(); + } + applyVideoConstraints(videoConstaints) { + return this.getHtml5QrcodeOrFail().applyVideoConstraints(videoConstaints); + } + getHtml5QrcodeOrFail() { + if (!this.html5Qrcode) { + throw "Code scanner not initialized."; + } + return this.html5Qrcode; + } + createConfig(config) { + if (config) { + if (!config.fps) { + config.fps = core_1.Html5QrcodeConstants.SCAN_DEFAULT_FPS; + } + if (config.rememberLastUsedCamera !== (!core_1.Html5QrcodeConstants.DEFAULT_REMEMBER_LAST_CAMERA_USED)) { + config.rememberLastUsedCamera + = core_1.Html5QrcodeConstants.DEFAULT_REMEMBER_LAST_CAMERA_USED; + } + if (!config.supportedScanTypes) { + config.supportedScanTypes + = core_1.Html5QrcodeConstants.DEFAULT_SUPPORTED_SCAN_TYPE; + } + return config; + } + return { + fps: core_1.Html5QrcodeConstants.SCAN_DEFAULT_FPS, + rememberLastUsedCamera: core_1.Html5QrcodeConstants.DEFAULT_REMEMBER_LAST_CAMERA_USED, + supportedScanTypes: core_1.Html5QrcodeConstants.DEFAULT_SUPPORTED_SCAN_TYPE + }; + } + createBasicLayout(parent) { + parent.style.position = "relative"; + parent.style.padding = "0px"; + parent.style.border = "1px solid silver"; + this.createHeader(parent); + const qrCodeScanRegion = document.createElement("div"); + const scanRegionId = this.getScanRegionId(); + qrCodeScanRegion.id = scanRegionId; + qrCodeScanRegion.style.width = "100%"; + qrCodeScanRegion.style.minHeight = "100px"; + qrCodeScanRegion.style.textAlign = "center"; + parent.appendChild(qrCodeScanRegion); + if (scan_type_selector_1.ScanTypeSelector.isCameraScanType(this.currentScanType)) { + this.insertCameraScanImageToScanRegion(); + } + else { + this.insertFileScanImageToScanRegion(); + } + const qrCodeDashboard = document.createElement("div"); + const dashboardId = this.getDashboardId(); + qrCodeDashboard.id = dashboardId; + qrCodeDashboard.style.width = "100%"; + parent.appendChild(qrCodeDashboard); + this.setupInitialDashboard(qrCodeDashboard); + } + resetBasicLayout(mainContainer) { + mainContainer.style.border = "none"; + } + setupInitialDashboard(dashboard) { + this.createSection(dashboard); + this.createSectionControlPanel(); + if (this.scanTypeSelector.hasMoreThanOneScanType()) { + this.createSectionSwap(); + } + } + createHeader(dashboard) { + const header = document.createElement("div"); + header.style.textAlign = "left"; + header.style.margin = "0px"; + dashboard.appendChild(header); + let libraryInfo = new ui_1.LibraryInfoContainer(); + libraryInfo.renderInto(header); + const headerMessageContainer = document.createElement("div"); + headerMessageContainer.id = this.getHeaderMessageContainerId(); + headerMessageContainer.style.display = "none"; + headerMessageContainer.style.textAlign = "center"; + headerMessageContainer.style.fontSize = "14px"; + headerMessageContainer.style.padding = "2px 10px"; + headerMessageContainer.style.margin = "4px"; + headerMessageContainer.style.borderTop = "1px solid #f6f6f6"; + header.appendChild(headerMessageContainer); + } + createSection(dashboard) { + const section = document.createElement("div"); + section.id = this.getDashboardSectionId(); + section.style.width = "100%"; + section.style.padding = "10px 0px 10px 0px"; + section.style.textAlign = "left"; + dashboard.appendChild(section); + } + createCameraListUi(scpCameraScanRegion, requestPermissionContainer, requestPermissionButton) { + const $this = this; + $this.showHideScanTypeSwapLink(false); + $this.setHeaderMessage(strings_1.Html5QrcodeScannerStrings.cameraPermissionRequesting()); + const createPermissionButtonIfNotExists = () => { + if (!requestPermissionButton) { + $this.createPermissionButton(scpCameraScanRegion, requestPermissionContainer); + } + }; + html5_qrcode_1.Html5Qrcode.getCameras().then((cameras) => { + $this.persistedDataManager.setHasPermission(true); + $this.showHideScanTypeSwapLink(true); + $this.resetHeaderMessage(); + if (cameras && cameras.length > 0) { + scpCameraScanRegion.removeChild(requestPermissionContainer); + $this.renderCameraSelection(cameras); + } + else { + $this.setHeaderMessage(strings_1.Html5QrcodeScannerStrings.noCameraFound(), Html5QrcodeScannerStatus.STATUS_WARNING); + createPermissionButtonIfNotExists(); + } + }).catch((error) => { + $this.persistedDataManager.setHasPermission(false); + if (requestPermissionButton) { + requestPermissionButton.disabled = false; + } + else { + createPermissionButtonIfNotExists(); + } + $this.setHeaderMessage(error, Html5QrcodeScannerStatus.STATUS_WARNING); + $this.showHideScanTypeSwapLink(true); + }); + } + createPermissionButton(scpCameraScanRegion, requestPermissionContainer) { + const $this = this; + const requestPermissionButton = base_1.BaseUiElementFactory + .createElement("button", this.getCameraPermissionButtonId()); + requestPermissionButton.innerText + = strings_1.Html5QrcodeScannerStrings.cameraPermissionTitle(); + requestPermissionButton.addEventListener("click", function () { + requestPermissionButton.disabled = true; + $this.createCameraListUi(scpCameraScanRegion, requestPermissionContainer, requestPermissionButton); + }); + requestPermissionContainer.appendChild(requestPermissionButton); + } + createPermissionsUi(scpCameraScanRegion, requestPermissionContainer) { + const $this = this; + if (scan_type_selector_1.ScanTypeSelector.isCameraScanType(this.currentScanType) + && this.persistedDataManager.hasCameraPermissions()) { + permissions_1.CameraPermissions.hasPermissions().then((hasPermissions) => { + if (hasPermissions) { + $this.createCameraListUi(scpCameraScanRegion, requestPermissionContainer); + } + else { + $this.persistedDataManager.setHasPermission(false); + $this.createPermissionButton(scpCameraScanRegion, requestPermissionContainer); + } + }).catch((_) => { + $this.persistedDataManager.setHasPermission(false); + $this.createPermissionButton(scpCameraScanRegion, requestPermissionContainer); + }); + return; + } + this.createPermissionButton(scpCameraScanRegion, requestPermissionContainer); + } + createSectionControlPanel() { + const section = document.getElementById(this.getDashboardSectionId()); + const sectionControlPanel = document.createElement("div"); + section.appendChild(sectionControlPanel); + const scpCameraScanRegion = document.createElement("div"); + scpCameraScanRegion.id = this.getDashboardSectionCameraScanRegionId(); + scpCameraScanRegion.style.display + = scan_type_selector_1.ScanTypeSelector.isCameraScanType(this.currentScanType) + ? "block" : "none"; + sectionControlPanel.appendChild(scpCameraScanRegion); + const requestPermissionContainer = document.createElement("div"); + requestPermissionContainer.style.textAlign = "center"; + scpCameraScanRegion.appendChild(requestPermissionContainer); + if (this.scanTypeSelector.isCameraScanRequired()) { + this.createPermissionsUi(scpCameraScanRegion, requestPermissionContainer); + } + this.renderFileScanUi(sectionControlPanel); + } + renderFileScanUi(parent) { + let showOnRender = scan_type_selector_1.ScanTypeSelector.isFileScanType(this.currentScanType); + const $this = this; + let onFileSelected = (file) => { + if (!$this.html5Qrcode) { + throw "html5Qrcode not defined"; + } + if (!scan_type_selector_1.ScanTypeSelector.isFileScanType($this.currentScanType)) { + return; + } + $this.setHeaderMessage(strings_1.Html5QrcodeScannerStrings.loadingImage()); + $this.html5Qrcode.scanFileV2(file, true) + .then((html5qrcodeResult) => { + $this.resetHeaderMessage(); + $this.qrCodeSuccessCallback(html5qrcodeResult.decodedText, html5qrcodeResult); + }) + .catch((error) => { + $this.setHeaderMessage(error, Html5QrcodeScannerStatus.STATUS_WARNING); + $this.qrCodeErrorCallback(error, core_1.Html5QrcodeErrorFactory.createFrom(error)); + }); + }; + this.fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parent, showOnRender, onFileSelected); + } + renderCameraSelection(cameras) { + const $this = this; + const scpCameraScanRegion = document.getElementById(this.getDashboardSectionCameraScanRegionId()); + scpCameraScanRegion.style.textAlign = "center"; + let cameraZoomUi = camera_zoom_ui_1.CameraZoomUi.create(scpCameraScanRegion, false); + const renderCameraZoomUiIfSupported = (cameraCapabilities) => { + let zoomCapability = cameraCapabilities.zoomFeature(); + if (!zoomCapability.isSupported()) { + return; + } + cameraZoomUi.setOnCameraZoomValueChangeCallback((zoomValue) => { + zoomCapability.apply(zoomValue); + }); + let defaultZoom = 1; + if (this.config.defaultZoomValueIfSupported) { + defaultZoom = this.config.defaultZoomValueIfSupported; + } + defaultZoom = (0, core_1.clip)(defaultZoom, zoomCapability.min(), zoomCapability.max()); + cameraZoomUi.setValues(zoomCapability.min(), zoomCapability.max(), defaultZoom, zoomCapability.step()); + cameraZoomUi.show(); + }; + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(scpCameraScanRegion, cameras); + const cameraActionContainer = document.createElement("span"); + const cameraActionStartButton = base_1.BaseUiElementFactory.createElement("button", base_1.PublicUiElementIdAndClasses.CAMERA_START_BUTTON_ID); + cameraActionStartButton.innerText + = strings_1.Html5QrcodeScannerStrings.scanButtonStartScanningText(); + cameraActionContainer.appendChild(cameraActionStartButton); + const cameraActionStopButton = base_1.BaseUiElementFactory.createElement("button", base_1.PublicUiElementIdAndClasses.CAMERA_STOP_BUTTON_ID); + cameraActionStopButton.innerText + = strings_1.Html5QrcodeScannerStrings.scanButtonStopScanningText(); + cameraActionStopButton.style.display = "none"; + cameraActionStopButton.disabled = true; + cameraActionContainer.appendChild(cameraActionStopButton); + let torchButton; + const createAndShowTorchButtonIfSupported = (cameraCapabilities) => { + if (!cameraCapabilities.torchFeature().isSupported()) { + if (torchButton) { + torchButton.hide(); + } + return; + } + if (!torchButton) { + torchButton = torch_button_1.TorchButton.create(cameraActionContainer, cameraCapabilities.torchFeature(), { display: "none", marginLeft: "5px" }, (errorMessage) => { + $this.setHeaderMessage(errorMessage, Html5QrcodeScannerStatus.STATUS_WARNING); + }); + } + else { + torchButton.updateTorchCapability(cameraCapabilities.torchFeature()); + } + torchButton.show(); + }; + scpCameraScanRegion.appendChild(cameraActionContainer); + const resetCameraActionStartButton = (shouldShow) => { + if (!shouldShow) { + cameraActionStartButton.style.display = "none"; + } + cameraActionStartButton.innerText + = strings_1.Html5QrcodeScannerStrings + .scanButtonStartScanningText(); + cameraActionStartButton.style.opacity = "1"; + cameraActionStartButton.disabled = false; + if (shouldShow) { + cameraActionStartButton.style.display = "inline-block"; + } + }; + cameraActionStartButton.addEventListener("click", (_) => { + cameraActionStartButton.innerText + = strings_1.Html5QrcodeScannerStrings.scanButtonScanningStarting(); + cameraSelectUi.disable(); + cameraActionStartButton.disabled = true; + cameraActionStartButton.style.opacity = "0.5"; + if (this.scanTypeSelector.hasMoreThanOneScanType()) { + $this.showHideScanTypeSwapLink(false); + } + $this.resetHeaderMessage(); + const cameraId = cameraSelectUi.getValue(); + $this.persistedDataManager.setLastUsedCameraId(cameraId); + $this.html5Qrcode.start(cameraId, toHtml5QrcodeCameraScanConfig($this.config), $this.qrCodeSuccessCallback, $this.qrCodeErrorCallback) + .then((_) => { + cameraActionStopButton.disabled = false; + cameraActionStopButton.style.display = "inline-block"; + resetCameraActionStartButton(false); + const cameraCapabilities = $this.html5Qrcode.getRunningTrackCameraCapabilities(); + if (this.config.showTorchButtonIfSupported === true) { + createAndShowTorchButtonIfSupported(cameraCapabilities); + } + if (this.config.showZoomSliderIfSupported === true) { + renderCameraZoomUiIfSupported(cameraCapabilities); + } + }) + .catch((error) => { + $this.showHideScanTypeSwapLink(true); + cameraSelectUi.enable(); + resetCameraActionStartButton(true); + $this.setHeaderMessage(error, Html5QrcodeScannerStatus.STATUS_WARNING); + }); + }); + if (cameraSelectUi.hasSingleItem()) { + cameraActionStartButton.click(); + } + cameraActionStopButton.addEventListener("click", (_) => { + if (!$this.html5Qrcode) { + throw "html5Qrcode not defined"; + } + cameraActionStopButton.disabled = true; + $this.html5Qrcode.stop() + .then((_) => { + if (this.scanTypeSelector.hasMoreThanOneScanType()) { + $this.showHideScanTypeSwapLink(true); + } + cameraSelectUi.enable(); + cameraActionStartButton.disabled = false; + cameraActionStopButton.style.display = "none"; + cameraActionStartButton.style.display = "inline-block"; + if (torchButton) { + torchButton.reset(); + torchButton.hide(); + } + cameraZoomUi.removeOnCameraZoomValueChangeCallback(); + cameraZoomUi.hide(); + $this.insertCameraScanImageToScanRegion(); + }).catch((error) => { + cameraActionStopButton.disabled = false; + $this.setHeaderMessage(error, Html5QrcodeScannerStatus.STATUS_WARNING); + }); + }); + if ($this.persistedDataManager.getLastUsedCameraId()) { + const cameraId = $this.persistedDataManager.getLastUsedCameraId(); + if (cameraSelectUi.hasValue(cameraId)) { + cameraSelectUi.setValue(cameraId); + cameraActionStartButton.click(); + } + else { + $this.persistedDataManager.resetLastUsedCameraId(); + } + } + } + createSectionSwap() { + const $this = this; + const TEXT_IF_CAMERA_SCAN_SELECTED = strings_1.Html5QrcodeScannerStrings.textIfCameraScanSelected(); + const TEXT_IF_FILE_SCAN_SELECTED = strings_1.Html5QrcodeScannerStrings.textIfFileScanSelected(); + const section = document.getElementById(this.getDashboardSectionId()); + const switchContainer = document.createElement("div"); + switchContainer.style.textAlign = "center"; + const switchScanTypeLink = base_1.BaseUiElementFactory.createElement("span", this.getDashboardSectionSwapLinkId()); + switchScanTypeLink.style.textDecoration = "underline"; + switchScanTypeLink.style.cursor = "pointer"; + switchScanTypeLink.innerText + = scan_type_selector_1.ScanTypeSelector.isCameraScanType(this.currentScanType) + ? TEXT_IF_CAMERA_SCAN_SELECTED : TEXT_IF_FILE_SCAN_SELECTED; + switchScanTypeLink.addEventListener("click", function () { + if (!$this.sectionSwapAllowed) { + if ($this.verbose) { + $this.logger.logError("Section swap called when not allowed"); + } + return; + } + $this.resetHeaderMessage(); + $this.fileSelectionUi.resetValue(); + $this.sectionSwapAllowed = false; + if (scan_type_selector_1.ScanTypeSelector.isCameraScanType($this.currentScanType)) { + $this.clearScanRegion(); + $this.getCameraScanRegion().style.display = "none"; + $this.fileSelectionUi.show(); + switchScanTypeLink.innerText = TEXT_IF_FILE_SCAN_SELECTED; + $this.currentScanType = core_1.Html5QrcodeScanType.SCAN_TYPE_FILE; + $this.insertFileScanImageToScanRegion(); + } + else { + $this.clearScanRegion(); + $this.getCameraScanRegion().style.display = "block"; + $this.fileSelectionUi.hide(); + switchScanTypeLink.innerText = TEXT_IF_CAMERA_SCAN_SELECTED; + $this.currentScanType = core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA; + $this.insertCameraScanImageToScanRegion(); + $this.startCameraScanIfPermissionExistsOnSwap(); + } + $this.sectionSwapAllowed = true; + }); + switchContainer.appendChild(switchScanTypeLink); + section.appendChild(switchContainer); + } + startCameraScanIfPermissionExistsOnSwap() { + const $this = this; + if (this.persistedDataManager.hasCameraPermissions()) { + permissions_1.CameraPermissions.hasPermissions().then((hasPermissions) => { + if (hasPermissions) { + let permissionButton = document.getElementById($this.getCameraPermissionButtonId()); + if (!permissionButton) { + this.logger.logError("Permission button not found, fail;"); + throw "Permission button not found"; + } + permissionButton.click(); + } + else { + $this.persistedDataManager.setHasPermission(false); + } + }).catch((_) => { + $this.persistedDataManager.setHasPermission(false); + }); + return; + } + } + resetHeaderMessage() { + const messageDiv = document.getElementById(this.getHeaderMessageContainerId()); + messageDiv.style.display = "none"; + } + setHeaderMessage(messageText, scannerStatus) { + if (!scannerStatus) { + scannerStatus = Html5QrcodeScannerStatus.STATUS_DEFAULT; + } + const messageDiv = this.getHeaderMessageDiv(); + messageDiv.innerText = messageText; + messageDiv.style.display = "block"; + switch (scannerStatus) { + case Html5QrcodeScannerStatus.STATUS_SUCCESS: + messageDiv.style.background = "rgba(106, 175, 80, 0.26)"; + messageDiv.style.color = "#477735"; + break; + case Html5QrcodeScannerStatus.STATUS_WARNING: + messageDiv.style.background = "rgba(203, 36, 49, 0.14)"; + messageDiv.style.color = "#cb2431"; + break; + case Html5QrcodeScannerStatus.STATUS_DEFAULT: + default: + messageDiv.style.background = "rgba(0, 0, 0, 0)"; + messageDiv.style.color = "rgb(17, 17, 17)"; + break; + } + } + showHideScanTypeSwapLink(shouldDisplay) { + if (this.scanTypeSelector.hasMoreThanOneScanType()) { + if (shouldDisplay !== true) { + shouldDisplay = false; + } + this.sectionSwapAllowed = shouldDisplay; + this.getDashboardSectionSwapLink().style.display + = shouldDisplay ? "inline-block" : "none"; + } + } + insertCameraScanImageToScanRegion() { + const $this = this; + const qrCodeScanRegion = document.getElementById(this.getScanRegionId()); + if (this.cameraScanImage) { + qrCodeScanRegion.innerHTML = "
"; + qrCodeScanRegion.appendChild(this.cameraScanImage); + return; + } + this.cameraScanImage = new Image; + this.cameraScanImage.onload = (_) => { + qrCodeScanRegion.innerHTML = "
"; + qrCodeScanRegion.appendChild($this.cameraScanImage); + }; + this.cameraScanImage.width = 64; + this.cameraScanImage.style.opacity = "0.8"; + this.cameraScanImage.src = image_assets_1.ASSET_CAMERA_SCAN; + this.cameraScanImage.alt = strings_1.Html5QrcodeScannerStrings.cameraScanAltText(); + } + insertFileScanImageToScanRegion() { + const $this = this; + const qrCodeScanRegion = document.getElementById(this.getScanRegionId()); + if (this.fileScanImage) { + qrCodeScanRegion.innerHTML = "
"; + qrCodeScanRegion.appendChild(this.fileScanImage); + return; + } + this.fileScanImage = new Image; + this.fileScanImage.onload = (_) => { + qrCodeScanRegion.innerHTML = "
"; + qrCodeScanRegion.appendChild($this.fileScanImage); + }; + this.fileScanImage.width = 64; + this.fileScanImage.style.opacity = "0.8"; + this.fileScanImage.src = image_assets_1.ASSET_FILE_SCAN; + this.fileScanImage.alt = strings_1.Html5QrcodeScannerStrings.fileScanAltText(); + } + clearScanRegion() { + const qrCodeScanRegion = document.getElementById(this.getScanRegionId()); + qrCodeScanRegion.innerHTML = ""; + } + getDashboardSectionId() { + return `${this.elementId}__dashboard_section`; + } + getDashboardSectionCameraScanRegionId() { + return `${this.elementId}__dashboard_section_csr`; + } + getDashboardSectionSwapLinkId() { + return base_1.PublicUiElementIdAndClasses.SCAN_TYPE_CHANGE_ANCHOR_ID; + } + getScanRegionId() { + return `${this.elementId}__scan_region`; + } + getDashboardId() { + return `${this.elementId}__dashboard`; + } + getHeaderMessageContainerId() { + return `${this.elementId}__header_message`; + } + getCameraPermissionButtonId() { + return base_1.PublicUiElementIdAndClasses.CAMERA_PERMISSION_BUTTON_ID; + } + getCameraScanRegion() { + return document.getElementById(this.getDashboardSectionCameraScanRegionId()); + } + getDashboardSectionSwapLink() { + return document.getElementById(this.getDashboardSectionSwapLinkId()); + } + getHeaderMessageDiv() { + return document.getElementById(this.getHeaderMessageContainerId()); + } +} +exports.Html5QrcodeScanner = Html5QrcodeScanner; +//# sourceMappingURL=html5-qrcode-scanner.js.map \ No newline at end of file diff --git a/output/tests/src/html5-qrcode-scanner.js.map b/output/tests/src/html5-qrcode-scanner.js.map new file mode 100644 index 00000000..e37884bd --- /dev/null +++ b/output/tests/src/html5-qrcode-scanner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"html5-qrcode-scanner.js","sourceRoot":"","sources":["../../../src/html5-qrcode-scanner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/html5-qrcode.d.ts b/output/tests/src/html5-qrcode.d.ts new file mode 100644 index 00000000..0e576933 --- /dev/null +++ b/output/tests/src/html5-qrcode.d.ts @@ -0,0 +1,75 @@ +import { QrcodeErrorCallback, QrcodeSuccessCallback, Html5QrcodeSupportedFormats, Html5QrcodeResult, QrDimensions, QrDimensionFunction } from "./core"; +import { CameraDevice, CameraCapabilities } from "./camera/core"; +import { ExperimentalFeaturesConfig } from "./experimental-features"; +import { Html5QrcodeScannerState } from "./state-manager"; +export interface Html5QrcodeConfigs { + formatsToSupport?: Array | undefined; + useBarCodeDetectorIfSupported?: boolean | undefined; + experimentalFeatures?: ExperimentalFeaturesConfig | undefined; +} +export interface Html5QrcodeFullConfig extends Html5QrcodeConfigs { + verbose: boolean | undefined; +} +export interface Html5QrcodeCameraScanConfig { + fps: number | undefined; + qrbox?: number | QrDimensions | QrDimensionFunction | undefined; + aspectRatio?: number | undefined; + disableFlip?: boolean | undefined; + videoConstraints?: MediaTrackConstraints | undefined; +} +export declare class Html5Qrcode { + private readonly logger; + private readonly elementId; + private readonly verbose; + private readonly qrcode; + private shouldScan; + private element; + private canvasElement; + private scannerPausedUiElement; + private hasBorderShaders; + private borderShaders; + private qrMatch; + private renderedCamera; + private foreverScanTimeout; + private qrRegion; + private context; + private lastScanImageFile; + private stateManagerProxy; + isScanning: boolean; + constructor(elementId: string, configOrVerbosityFlag?: boolean | Html5QrcodeFullConfig | undefined); + start(cameraIdOrConfig: string | MediaTrackConstraints, configuration: Html5QrcodeCameraScanConfig | undefined, qrCodeSuccessCallback: QrcodeSuccessCallback | undefined, qrCodeErrorCallback: QrcodeErrorCallback | undefined): Promise; + pause(shouldPauseVideo?: boolean): void; + resume(): void; + getState(): Html5QrcodeScannerState; + stop(): Promise; + scanFile(imageFile: File, showImage?: boolean): Promise; + scanFileV2(imageFile: File, showImage?: boolean): Promise; + clear(): void; + static getCameras(): Promise>; + getRunningTrackCapabilities(): MediaTrackCapabilities; + getRunningTrackSettings(): MediaTrackSettings; + getRunningTrackCameraCapabilities(): CameraCapabilities; + applyVideoConstraints(videoConstaints: MediaTrackConstraints): Promise; + private getRenderedCameraOrFail; + private getSupportedFormats; + private getUseBarCodeDetectorIfSupported; + private validateQrboxSize; + private validateQrboxConfig; + private toQrdimensions; + private setupUi; + private createScannerPausedUiElement; + private scanContext; + private foreverScan; + private createVideoConstraints; + private computeCanvasDrawConfig; + private clearElement; + private possiblyUpdateShaders; + private possiblyCloseLastScanImageFile; + private createCanvasElement; + private getShadedRegionBounds; + private possiblyInsertShadingElement; + private insertShaderBorders; + private showPausedState; + private hidePausedState; + private getTimeoutFps; +} diff --git a/output/tests/src/html5-qrcode.js b/output/tests/src/html5-qrcode.js new file mode 100644 index 00000000..2d1df0e6 --- /dev/null +++ b/output/tests/src/html5-qrcode.js @@ -0,0 +1,814 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Html5Qrcode = void 0; +const core_1 = require("./core"); +const strings_1 = require("./strings"); +const utils_1 = require("./utils"); +const code_decoder_1 = require("./code-decoder"); +const factories_1 = require("./camera/factories"); +const retriever_1 = require("./camera/retriever"); +const state_manager_1 = require("./state-manager"); +class Constants extends core_1.Html5QrcodeConstants { +} +Constants.DEFAULT_WIDTH = 300; +Constants.DEFAULT_WIDTH_OFFSET = 2; +Constants.FILE_SCAN_MIN_HEIGHT = 300; +Constants.FILE_SCAN_HIDDEN_CANVAS_PADDING = 100; +Constants.MIN_QR_BOX_SIZE = 50; +Constants.SHADED_LEFT = 1; +Constants.SHADED_RIGHT = 2; +Constants.SHADED_TOP = 3; +Constants.SHADED_BOTTOM = 4; +Constants.SHADED_REGION_ELEMENT_ID = "qr-shaded-region"; +Constants.VERBOSE = false; +Constants.BORDER_SHADER_DEFAULT_COLOR = "#ffffff"; +Constants.BORDER_SHADER_MATCH_COLOR = "rgb(90, 193, 56)"; +class InternalHtml5QrcodeConfig { + constructor(config, logger) { + this.logger = logger; + this.fps = Constants.SCAN_DEFAULT_FPS; + if (!config) { + this.disableFlip = Constants.DEFAULT_DISABLE_FLIP; + } + else { + if (config.fps) { + this.fps = config.fps; + } + this.disableFlip = config.disableFlip === true; + this.qrbox = config.qrbox; + this.aspectRatio = config.aspectRatio; + this.videoConstraints = config.videoConstraints; + } + } + isMediaStreamConstraintsValid() { + if (!this.videoConstraints) { + this.logger.logError("Empty videoConstraints", true); + return false; + } + return utils_1.VideoConstraintsUtil.isMediaStreamConstraintsValid(this.videoConstraints, this.logger); + } + isShadedBoxEnabled() { + return !(0, core_1.isNullOrUndefined)(this.qrbox); + } + static create(config, logger) { + return new InternalHtml5QrcodeConfig(config, logger); + } +} +class Html5Qrcode { + constructor(elementId, configOrVerbosityFlag) { + this.element = null; + this.canvasElement = null; + this.scannerPausedUiElement = null; + this.hasBorderShaders = null; + this.borderShaders = null; + this.qrMatch = null; + this.renderedCamera = null; + this.qrRegion = null; + this.context = null; + this.lastScanImageFile = null; + this.isScanning = false; + if (!document.getElementById(elementId)) { + throw `HTML Element with id=${elementId} not found`; + } + this.elementId = elementId; + this.verbose = false; + let experimentalFeatureConfig; + let configObject; + if (typeof configOrVerbosityFlag == "boolean") { + this.verbose = configOrVerbosityFlag === true; + } + else if (configOrVerbosityFlag) { + configObject = configOrVerbosityFlag; + this.verbose = configObject.verbose === true; + experimentalFeatureConfig = configObject.experimentalFeatures; + } + this.logger = new core_1.BaseLoggger(this.verbose); + this.qrcode = new code_decoder_1.Html5QrcodeShim(this.getSupportedFormats(configOrVerbosityFlag), this.getUseBarCodeDetectorIfSupported(configObject), this.verbose, this.logger); + this.foreverScanTimeout; + this.shouldScan = true; + this.stateManagerProxy = state_manager_1.StateManagerFactory.create(); + } + start(cameraIdOrConfig, configuration, qrCodeSuccessCallback, qrCodeErrorCallback) { + if (!cameraIdOrConfig) { + throw "cameraIdOrConfig is required"; + } + if (!qrCodeSuccessCallback + || typeof qrCodeSuccessCallback != "function") { + throw "qrCodeSuccessCallback is required and should be a function."; + } + let qrCodeErrorCallbackInternal; + if (qrCodeErrorCallback) { + qrCodeErrorCallbackInternal = qrCodeErrorCallback; + } + else { + qrCodeErrorCallbackInternal + = this.verbose ? this.logger.log : () => { }; + } + const internalConfig = InternalHtml5QrcodeConfig.create(configuration, this.logger); + this.clearElement(); + let videoConstraintsAvailableAndValid = false; + if (internalConfig.videoConstraints) { + if (!internalConfig.isMediaStreamConstraintsValid()) { + this.logger.logError("'videoConstraints' is not valid 'MediaStreamConstraints, " + + "it will be ignored.'", true); + } + else { + videoConstraintsAvailableAndValid = true; + } + } + const areVideoConstraintsEnabled = videoConstraintsAvailableAndValid; + const element = document.getElementById(this.elementId); + const rootElementWidth = element.clientWidth + ? element.clientWidth : Constants.DEFAULT_WIDTH; + element.style.position = "relative"; + this.shouldScan = true; + this.element = element; + const $this = this; + const toScanningStateChangeTransaction = this.stateManagerProxy.startTransition(state_manager_1.Html5QrcodeScannerState.SCANNING); + return new Promise((resolve, reject) => { + const videoConstraints = areVideoConstraintsEnabled + ? internalConfig.videoConstraints + : $this.createVideoConstraints(cameraIdOrConfig); + if (!videoConstraints) { + toScanningStateChangeTransaction.cancel(); + reject("videoConstraints should be defined"); + return; + } + let cameraRenderingOptions = {}; + if (!areVideoConstraintsEnabled || internalConfig.aspectRatio) { + cameraRenderingOptions.aspectRatio = internalConfig.aspectRatio; + } + let renderingCallbacks = { + onRenderSurfaceReady: (viewfinderWidth, viewfinderHeight) => { + $this.setupUi(viewfinderWidth, viewfinderHeight, internalConfig); + $this.isScanning = true; + $this.foreverScan(internalConfig, qrCodeSuccessCallback, qrCodeErrorCallbackInternal); + } + }; + factories_1.CameraFactory.failIfNotSupported().then((factory) => { + factory.create(videoConstraints).then((camera) => { + return camera.render(this.element, cameraRenderingOptions, renderingCallbacks) + .then((renderedCamera) => { + $this.renderedCamera = renderedCamera; + toScanningStateChangeTransaction.execute(); + resolve(null); + }) + .catch((error) => { + toScanningStateChangeTransaction.cancel(); + reject(error); + }); + }).catch((error) => { + toScanningStateChangeTransaction.cancel(); + reject(strings_1.Html5QrcodeStrings.errorGettingUserMedia(error)); + }); + }).catch((_) => { + toScanningStateChangeTransaction.cancel(); + reject(strings_1.Html5QrcodeStrings.cameraStreamingNotSupported()); + }); + }); + } + pause(shouldPauseVideo) { + if (!this.stateManagerProxy.isStrictlyScanning()) { + throw "Cannot pause, scanner is not scanning."; + } + this.stateManagerProxy.directTransition(state_manager_1.Html5QrcodeScannerState.PAUSED); + this.showPausedState(); + if ((0, core_1.isNullOrUndefined)(shouldPauseVideo) || shouldPauseVideo !== true) { + shouldPauseVideo = false; + } + if (shouldPauseVideo && this.renderedCamera) { + this.renderedCamera.pause(); + } + } + resume() { + if (!this.stateManagerProxy.isPaused()) { + throw "Cannot result, scanner is not paused."; + } + if (!this.renderedCamera) { + throw "renderedCamera doesn't exist while trying resume()"; + } + const $this = this; + const transitionToScanning = () => { + $this.stateManagerProxy.directTransition(state_manager_1.Html5QrcodeScannerState.SCANNING); + $this.hidePausedState(); + }; + if (!this.renderedCamera.isPaused()) { + transitionToScanning(); + return; + } + this.renderedCamera.resume(() => { + transitionToScanning(); + }); + } + getState() { + return this.stateManagerProxy.getState(); + } + stop() { + if (!this.stateManagerProxy.isScanning()) { + throw "Cannot stop, scanner is not running or paused."; + } + const toStoppedStateTransaction = this.stateManagerProxy.startTransition(state_manager_1.Html5QrcodeScannerState.NOT_STARTED); + this.shouldScan = false; + if (this.foreverScanTimeout) { + clearTimeout(this.foreverScanTimeout); + } + const removeQrRegion = () => { + if (!this.element) { + return; + } + let childElement = document.getElementById(Constants.SHADED_REGION_ELEMENT_ID); + if (childElement) { + this.element.removeChild(childElement); + } + }; + let $this = this; + return this.renderedCamera.close().then(() => { + $this.renderedCamera = null; + if ($this.element) { + $this.element.removeChild($this.canvasElement); + $this.canvasElement = null; + } + removeQrRegion(); + if ($this.qrRegion) { + $this.qrRegion = null; + } + if ($this.context) { + $this.context = null; + } + toStoppedStateTransaction.execute(); + $this.hidePausedState(); + $this.isScanning = false; + return Promise.resolve(); + }); + } + scanFile(imageFile, showImage) { + return this.scanFileV2(imageFile, showImage) + .then((html5qrcodeResult) => html5qrcodeResult.decodedText); + } + scanFileV2(imageFile, showImage) { + if (!imageFile || !(imageFile instanceof File)) { + throw "imageFile argument is mandatory and should be instance " + + "of File. Use 'event.target.files[0]'."; + } + if ((0, core_1.isNullOrUndefined)(showImage)) { + showImage = true; + } + if (!this.stateManagerProxy.canScanFile()) { + throw "Cannot start file scan - ongoing camera scan"; + } + return new Promise((resolve, reject) => { + this.possiblyCloseLastScanImageFile(); + this.clearElement(); + this.lastScanImageFile = URL.createObjectURL(imageFile); + const inputImage = new Image; + inputImage.onload = () => { + const imageWidth = inputImage.width; + const imageHeight = inputImage.height; + const element = document.getElementById(this.elementId); + const containerWidth = element.clientWidth + ? element.clientWidth : Constants.DEFAULT_WIDTH; + const containerHeight = Math.max(element.clientHeight ? element.clientHeight : imageHeight, Constants.FILE_SCAN_MIN_HEIGHT); + const config = this.computeCanvasDrawConfig(imageWidth, imageHeight, containerWidth, containerHeight); + if (showImage) { + const visibleCanvas = this.createCanvasElement(containerWidth, containerHeight, "qr-canvas-visible"); + visibleCanvas.style.display = "inline-block"; + element.appendChild(visibleCanvas); + const context = visibleCanvas.getContext("2d"); + if (!context) { + throw "Unable to get 2d context from canvas"; + } + context.canvas.width = containerWidth; + context.canvas.height = containerHeight; + context.drawImage(inputImage, 0, 0, imageWidth, imageHeight, config.x, config.y, config.width, config.height); + } + let padding = Constants.FILE_SCAN_HIDDEN_CANVAS_PADDING; + let hiddenImageWidth = Math.max(inputImage.width, config.width); + let hiddenImageHeight = Math.max(inputImage.height, config.height); + let hiddenCanvasWidth = hiddenImageWidth + 2 * padding; + let hiddenCanvasHeight = hiddenImageHeight + 2 * padding; + const hiddenCanvas = this.createCanvasElement(hiddenCanvasWidth, hiddenCanvasHeight); + element.appendChild(hiddenCanvas); + const context = hiddenCanvas.getContext("2d"); + if (!context) { + throw "Unable to get 2d context from canvas"; + } + context.canvas.width = hiddenCanvasWidth; + context.canvas.height = hiddenCanvasHeight; + context.drawImage(inputImage, 0, 0, imageWidth, imageHeight, padding, padding, hiddenImageWidth, hiddenImageHeight); + try { + this.qrcode.decodeRobustlyAsync(hiddenCanvas) + .then((result) => { + resolve(core_1.Html5QrcodeResultFactory.createFromQrcodeResult(result)); + }) + .catch(reject); + } + catch (exception) { + reject(`QR code parse error, error = ${exception}`); + } + }; + inputImage.onerror = reject; + inputImage.onabort = reject; + inputImage.onstalled = reject; + inputImage.onsuspend = reject; + inputImage.src = URL.createObjectURL(imageFile); + }); + } + clear() { + this.clearElement(); + } + static getCameras() { + return retriever_1.CameraRetriever.retrieve(); + } + getRunningTrackCapabilities() { + return this.getRenderedCameraOrFail().getRunningTrackCapabilities(); + } + getRunningTrackSettings() { + return this.getRenderedCameraOrFail().getRunningTrackSettings(); + } + getRunningTrackCameraCapabilities() { + return this.getRenderedCameraOrFail().getCapabilities(); + } + applyVideoConstraints(videoConstaints) { + if (!videoConstaints) { + throw "videoConstaints is required argument."; + } + else if (!utils_1.VideoConstraintsUtil.isMediaStreamConstraintsValid(videoConstaints, this.logger)) { + throw "invalid videoConstaints passed, check logs for more details"; + } + return this.getRenderedCameraOrFail().applyVideoConstraints(videoConstaints); + } + getRenderedCameraOrFail() { + if (this.renderedCamera == null) { + throw "Scanning is not in running state, call this API only when" + + " QR code scanning using camera is in running state."; + } + return this.renderedCamera; + } + getSupportedFormats(configOrVerbosityFlag) { + const allFormats = [ + core_1.Html5QrcodeSupportedFormats.QR_CODE, + core_1.Html5QrcodeSupportedFormats.AZTEC, + core_1.Html5QrcodeSupportedFormats.CODABAR, + core_1.Html5QrcodeSupportedFormats.CODE_39, + core_1.Html5QrcodeSupportedFormats.CODE_93, + core_1.Html5QrcodeSupportedFormats.CODE_128, + core_1.Html5QrcodeSupportedFormats.DATA_MATRIX, + core_1.Html5QrcodeSupportedFormats.MAXICODE, + core_1.Html5QrcodeSupportedFormats.ITF, + core_1.Html5QrcodeSupportedFormats.EAN_13, + core_1.Html5QrcodeSupportedFormats.EAN_8, + core_1.Html5QrcodeSupportedFormats.PDF_417, + core_1.Html5QrcodeSupportedFormats.RSS_14, + core_1.Html5QrcodeSupportedFormats.RSS_EXPANDED, + core_1.Html5QrcodeSupportedFormats.UPC_A, + core_1.Html5QrcodeSupportedFormats.UPC_E, + core_1.Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION, + ]; + if (!configOrVerbosityFlag + || typeof configOrVerbosityFlag == "boolean") { + return allFormats; + } + if (!configOrVerbosityFlag.formatsToSupport) { + return allFormats; + } + if (!Array.isArray(configOrVerbosityFlag.formatsToSupport)) { + throw "configOrVerbosityFlag.formatsToSupport should be undefined " + + "or an array."; + } + if (configOrVerbosityFlag.formatsToSupport.length === 0) { + throw "Atleast 1 formatsToSupport is needed."; + } + const supportedFormats = []; + for (const format of configOrVerbosityFlag.formatsToSupport) { + if ((0, core_1.isValidHtml5QrcodeSupportedFormats)(format)) { + supportedFormats.push(format); + } + else { + this.logger.warn(`Invalid format: ${format} passed in config, ignoring.`); + } + } + if (supportedFormats.length === 0) { + throw "None of formatsToSupport match supported values."; + } + return supportedFormats; + } + getUseBarCodeDetectorIfSupported(config) { + if ((0, core_1.isNullOrUndefined)(config)) { + return true; + } + if (!(0, core_1.isNullOrUndefined)(config.useBarCodeDetectorIfSupported)) { + return config.useBarCodeDetectorIfSupported !== false; + } + if ((0, core_1.isNullOrUndefined)(config.experimentalFeatures)) { + return true; + } + let experimentalFeatures = config.experimentalFeatures; + if ((0, core_1.isNullOrUndefined)(experimentalFeatures.useBarCodeDetectorIfSupported)) { + return true; + } + return experimentalFeatures.useBarCodeDetectorIfSupported !== false; + } + validateQrboxSize(viewfinderWidth, viewfinderHeight, internalConfig) { + const qrboxSize = internalConfig.qrbox; + this.validateQrboxConfig(qrboxSize); + let qrDimensions = this.toQrdimensions(viewfinderWidth, viewfinderHeight, qrboxSize); + const validateMinSize = (size) => { + if (size < Constants.MIN_QR_BOX_SIZE) { + throw "minimum size of 'config.qrbox' dimension value is" + + ` ${Constants.MIN_QR_BOX_SIZE}px.`; + } + }; + const correctWidthBasedOnRootElementSize = (configWidth) => { + if (configWidth > viewfinderWidth) { + this.logger.warn("`qrbox.width` or `qrbox` is larger than the" + + " width of the root element. The width will be truncated" + + " to the width of root element."); + configWidth = viewfinderWidth; + } + return configWidth; + }; + validateMinSize(qrDimensions.width); + validateMinSize(qrDimensions.height); + qrDimensions.width = correctWidthBasedOnRootElementSize(qrDimensions.width); + } + validateQrboxConfig(qrboxSize) { + if (typeof qrboxSize === "number") { + return; + } + if (typeof qrboxSize === "function") { + return; + } + if (qrboxSize.width === undefined || qrboxSize.height === undefined) { + throw "Invalid instance of QrDimensions passed for " + + "'config.qrbox'. Both 'width' and 'height' should be set."; + } + } + toQrdimensions(viewfinderWidth, viewfinderHeight, qrboxSize) { + if (typeof qrboxSize === "number") { + return { width: qrboxSize, height: qrboxSize }; + } + else if (typeof qrboxSize === "function") { + try { + return qrboxSize(viewfinderWidth, viewfinderHeight); + } + catch (error) { + throw new Error("qrbox config was passed as a function but it failed with " + + "unknown error" + error); + } + } + return qrboxSize; + } + setupUi(viewfinderWidth, viewfinderHeight, internalConfig) { + if (internalConfig.isShadedBoxEnabled()) { + this.validateQrboxSize(viewfinderWidth, viewfinderHeight, internalConfig); + } + const qrboxSize = (0, core_1.isNullOrUndefined)(internalConfig.qrbox) ? + { width: viewfinderWidth, height: viewfinderHeight } : internalConfig.qrbox; + this.validateQrboxConfig(qrboxSize); + let qrDimensions = this.toQrdimensions(viewfinderWidth, viewfinderHeight, qrboxSize); + if (qrDimensions.height > viewfinderHeight) { + this.logger.warn("[Html5Qrcode] config.qrbox has height that is" + + "greater than the height of the video stream. Shading will be" + + " ignored"); + } + const shouldShadingBeApplied = internalConfig.isShadedBoxEnabled() + && qrDimensions.height <= viewfinderHeight; + const defaultQrRegion = { + x: 0, + y: 0, + width: viewfinderWidth, + height: viewfinderHeight + }; + const qrRegion = shouldShadingBeApplied + ? this.getShadedRegionBounds(viewfinderWidth, viewfinderHeight, qrDimensions) + : defaultQrRegion; + const canvasElement = this.createCanvasElement(qrRegion.width, qrRegion.height); + const contextAttributes = { willReadFrequently: true }; + const context = canvasElement.getContext("2d", contextAttributes); + context.canvas.width = qrRegion.width; + context.canvas.height = qrRegion.height; + this.element.append(canvasElement); + if (shouldShadingBeApplied) { + this.possiblyInsertShadingElement(this.element, viewfinderWidth, viewfinderHeight, qrDimensions); + } + this.createScannerPausedUiElement(this.element); + this.qrRegion = qrRegion; + this.context = context; + this.canvasElement = canvasElement; + } + createScannerPausedUiElement(rootElement) { + const scannerPausedUiElement = document.createElement("div"); + scannerPausedUiElement.innerText = strings_1.Html5QrcodeStrings.scannerPaused(); + scannerPausedUiElement.style.display = "none"; + scannerPausedUiElement.style.position = "absolute"; + scannerPausedUiElement.style.top = "0px"; + scannerPausedUiElement.style.zIndex = "1"; + scannerPausedUiElement.style.background = "rgba(9, 9, 9, 0.46)"; + scannerPausedUiElement.style.color = "#FFECEC"; + scannerPausedUiElement.style.textAlign = "center"; + scannerPausedUiElement.style.width = "100%"; + rootElement.appendChild(scannerPausedUiElement); + this.scannerPausedUiElement = scannerPausedUiElement; + } + scanContext(qrCodeSuccessCallback, qrCodeErrorCallback) { + if (this.stateManagerProxy.isPaused()) { + return Promise.resolve(false); + } + return this.qrcode.decodeAsync(this.canvasElement) + .then((result) => { + qrCodeSuccessCallback(result.text, core_1.Html5QrcodeResultFactory.createFromQrcodeResult(result)); + this.possiblyUpdateShaders(true); + return true; + }).catch((error) => { + this.possiblyUpdateShaders(false); + let errorMessage = strings_1.Html5QrcodeStrings.codeParseError(error); + qrCodeErrorCallback(errorMessage, core_1.Html5QrcodeErrorFactory.createFrom(errorMessage)); + return false; + }); + } + foreverScan(internalConfig, qrCodeSuccessCallback, qrCodeErrorCallback) { + if (!this.shouldScan) { + return; + } + if (!this.renderedCamera) { + return; + } + const videoElement = this.renderedCamera.getSurface(); + const widthRatio = videoElement.videoWidth / videoElement.clientWidth; + const heightRatio = videoElement.videoHeight / videoElement.clientHeight; + if (!this.qrRegion) { + throw "qrRegion undefined when localMediaStream is ready."; + } + const sWidthOffset = this.qrRegion.width * widthRatio; + const sHeightOffset = this.qrRegion.height * heightRatio; + const sxOffset = this.qrRegion.x * widthRatio; + const syOffset = this.qrRegion.y * heightRatio; + this.context.drawImage(videoElement, sxOffset, syOffset, sWidthOffset, sHeightOffset, 0, 0, this.qrRegion.width, this.qrRegion.height); + const triggerNextScan = () => { + this.foreverScanTimeout = setTimeout(() => { + this.foreverScan(internalConfig, qrCodeSuccessCallback, qrCodeErrorCallback); + }, this.getTimeoutFps(internalConfig.fps)); + }; + this.scanContext(qrCodeSuccessCallback, qrCodeErrorCallback) + .then((isSuccessfull) => { + if (!isSuccessfull && internalConfig.disableFlip !== true) { + this.context.translate(this.context.canvas.width, 0); + this.context.scale(-1, 1); + this.scanContext(qrCodeSuccessCallback, qrCodeErrorCallback) + .finally(() => { + triggerNextScan(); + }); + } + else { + triggerNextScan(); + } + }).catch((error) => { + this.logger.logError("Error happend while scanning context", error); + triggerNextScan(); + }); + } + createVideoConstraints(cameraIdOrConfig) { + if (typeof cameraIdOrConfig == "string") { + return { deviceId: { exact: cameraIdOrConfig } }; + } + else if (typeof cameraIdOrConfig == "object") { + const facingModeKey = "facingMode"; + const deviceIdKey = "deviceId"; + const allowedFacingModeValues = { "user": true, "environment": true }; + const exactKey = "exact"; + const isValidFacingModeValue = (value) => { + if (value in allowedFacingModeValues) { + return true; + } + else { + throw "config has invalid 'facingMode' value = " + + `'${value}'`; + } + }; + const keys = Object.keys(cameraIdOrConfig); + if (keys.length !== 1) { + throw "'cameraIdOrConfig' object should have exactly 1 key," + + ` if passed as an object, found ${keys.length} keys`; + } + const key = Object.keys(cameraIdOrConfig)[0]; + if (key !== facingModeKey && key !== deviceIdKey) { + throw `Only '${facingModeKey}' and '${deviceIdKey}' ` + + " are supported for 'cameraIdOrConfig'"; + } + if (key === facingModeKey) { + const facingMode = cameraIdOrConfig.facingMode; + if (typeof facingMode == "string") { + if (isValidFacingModeValue(facingMode)) { + return { facingMode: facingMode }; + } + } + else if (typeof facingMode == "object") { + if (exactKey in facingMode) { + if (isValidFacingModeValue(facingMode[`${exactKey}`])) { + return { + facingMode: { + exact: facingMode[`${exactKey}`] + } + }; + } + } + else { + throw "'facingMode' should be string or object with" + + ` ${exactKey} as key.`; + } + } + else { + const type = (typeof facingMode); + throw `Invalid type of 'facingMode' = ${type}`; + } + } + else { + const deviceId = cameraIdOrConfig.deviceId; + if (typeof deviceId == "string") { + return { deviceId: deviceId }; + } + else if (typeof deviceId == "object") { + if (exactKey in deviceId) { + return { + deviceId: { exact: deviceId[`${exactKey}`] } + }; + } + else { + throw "'deviceId' should be string or object with" + + ` ${exactKey} as key.`; + } + } + else { + const type = (typeof deviceId); + throw `Invalid type of 'deviceId' = ${type}`; + } + } + } + const type = (typeof cameraIdOrConfig); + throw `Invalid type of 'cameraIdOrConfig' = ${type}`; + } + computeCanvasDrawConfig(imageWidth, imageHeight, containerWidth, containerHeight) { + if (imageWidth <= containerWidth + && imageHeight <= containerHeight) { + const xoffset = (containerWidth - imageWidth) / 2; + const yoffset = (containerHeight - imageHeight) / 2; + return { + x: xoffset, + y: yoffset, + width: imageWidth, + height: imageHeight + }; + } + else { + const formerImageWidth = imageWidth; + const formerImageHeight = imageHeight; + if (imageWidth > containerWidth) { + imageHeight = (containerWidth / imageWidth) * imageHeight; + imageWidth = containerWidth; + } + if (imageHeight > containerHeight) { + imageWidth = (containerHeight / imageHeight) * imageWidth; + imageHeight = containerHeight; + } + this.logger.log("Image downsampled from " + + `${formerImageWidth}X${formerImageHeight}` + + ` to ${imageWidth}X${imageHeight}.`); + return this.computeCanvasDrawConfig(imageWidth, imageHeight, containerWidth, containerHeight); + } + } + clearElement() { + if (this.stateManagerProxy.isScanning()) { + throw "Cannot clear while scan is ongoing, close it first."; + } + const element = document.getElementById(this.elementId); + if (element) { + element.innerHTML = ""; + } + } + possiblyUpdateShaders(qrMatch) { + if (this.qrMatch === qrMatch) { + return; + } + if (this.hasBorderShaders + && this.borderShaders + && this.borderShaders.length) { + this.borderShaders.forEach((shader) => { + shader.style.backgroundColor = qrMatch + ? Constants.BORDER_SHADER_MATCH_COLOR + : Constants.BORDER_SHADER_DEFAULT_COLOR; + }); + } + this.qrMatch = qrMatch; + } + possiblyCloseLastScanImageFile() { + if (this.lastScanImageFile) { + URL.revokeObjectURL(this.lastScanImageFile); + this.lastScanImageFile = null; + } + } + createCanvasElement(width, height, customId) { + const canvasWidth = width; + const canvasHeight = height; + const canvasElement = document.createElement("canvas"); + canvasElement.style.width = `${canvasWidth}px`; + canvasElement.style.height = `${canvasHeight}px`; + canvasElement.style.display = "none"; + canvasElement.id = (0, core_1.isNullOrUndefined)(customId) + ? "qr-canvas" : customId; + return canvasElement; + } + getShadedRegionBounds(width, height, qrboxSize) { + if (qrboxSize.width > width || qrboxSize.height > height) { + throw "'config.qrbox' dimensions should not be greater than the " + + "dimensions of the root HTML element."; + } + return { + x: (width - qrboxSize.width) / 2, + y: (height - qrboxSize.height) / 2, + width: qrboxSize.width, + height: qrboxSize.height + }; + } + possiblyInsertShadingElement(element, width, height, qrboxSize) { + if ((width - qrboxSize.width) < 1 || (height - qrboxSize.height) < 1) { + return; + } + const shadingElement = document.createElement("div"); + shadingElement.style.position = "absolute"; + const rightLeftBorderSize = (width - qrboxSize.width) / 2; + const topBottomBorderSize = (height - qrboxSize.height) / 2; + shadingElement.style.borderLeft + = `${rightLeftBorderSize}px solid rgba(0, 0, 0, 0.48)`; + shadingElement.style.borderRight + = `${rightLeftBorderSize}px solid rgba(0, 0, 0, 0.48)`; + shadingElement.style.borderTop + = `${topBottomBorderSize}px solid rgba(0, 0, 0, 0.48)`; + shadingElement.style.borderBottom + = `${topBottomBorderSize}px solid rgba(0, 0, 0, 0.48)`; + shadingElement.style.boxSizing = "border-box"; + shadingElement.style.top = "0px"; + shadingElement.style.bottom = "0px"; + shadingElement.style.left = "0px"; + shadingElement.style.right = "0px"; + shadingElement.id = `${Constants.SHADED_REGION_ELEMENT_ID}`; + if ((width - qrboxSize.width) < 11 + || (height - qrboxSize.height) < 11) { + this.hasBorderShaders = false; + } + else { + const smallSize = 5; + const largeSize = 40; + this.insertShaderBorders(shadingElement, largeSize, smallSize, -smallSize, null, 0, true); + this.insertShaderBorders(shadingElement, largeSize, smallSize, -smallSize, null, 0, false); + this.insertShaderBorders(shadingElement, largeSize, smallSize, null, -smallSize, 0, true); + this.insertShaderBorders(shadingElement, largeSize, smallSize, null, -smallSize, 0, false); + this.insertShaderBorders(shadingElement, smallSize, largeSize + smallSize, -smallSize, null, -smallSize, true); + this.insertShaderBorders(shadingElement, smallSize, largeSize + smallSize, null, -smallSize, -smallSize, true); + this.insertShaderBorders(shadingElement, smallSize, largeSize + smallSize, -smallSize, null, -smallSize, false); + this.insertShaderBorders(shadingElement, smallSize, largeSize + smallSize, null, -smallSize, -smallSize, false); + this.hasBorderShaders = true; + } + element.append(shadingElement); + } + insertShaderBorders(shaderElem, width, height, top, bottom, side, isLeft) { + const elem = document.createElement("div"); + elem.style.position = "absolute"; + elem.style.backgroundColor = Constants.BORDER_SHADER_DEFAULT_COLOR; + elem.style.width = `${width}px`; + elem.style.height = `${height}px`; + if (top !== null) { + elem.style.top = `${top}px`; + } + if (bottom !== null) { + elem.style.bottom = `${bottom}px`; + } + if (isLeft) { + elem.style.left = `${side}px`; + } + else { + elem.style.right = `${side}px`; + } + if (!this.borderShaders) { + this.borderShaders = []; + } + this.borderShaders.push(elem); + shaderElem.appendChild(elem); + } + showPausedState() { + if (!this.scannerPausedUiElement) { + throw "[internal error] scanner paused UI element not found"; + } + this.scannerPausedUiElement.style.display = "block"; + } + hidePausedState() { + if (!this.scannerPausedUiElement) { + throw "[internal error] scanner paused UI element not found"; + } + this.scannerPausedUiElement.style.display = "none"; + } + getTimeoutFps(fps) { + return 1000 / fps; + } +} +exports.Html5Qrcode = Html5Qrcode; +//# sourceMappingURL=html5-qrcode.js.map \ No newline at end of file diff --git a/output/tests/src/html5-qrcode.js.map b/output/tests/src/html5-qrcode.js.map new file mode 100644 index 00000000..10f83dec --- /dev/null +++ b/output/tests/src/html5-qrcode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"html5-qrcode.js","sourceRoot":"","sources":["../../../src/html5-qrcode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/image-assets.d.ts b/output/tests/src/image-assets.d.ts new file mode 100644 index 00000000..59387ac2 --- /dev/null +++ b/output/tests/src/image-assets.d.ts @@ -0,0 +1,4 @@ +export declare const ASSET_CAMERA_SCAN: string; +export declare const ASSET_FILE_SCAN: string; +export declare const ASSET_INFO_ICON_16PX: string; +export declare const ASSET_CLOSE_ICON_16PX: string; diff --git a/output/tests/src/image-assets.js b/output/tests/src/image-assets.js new file mode 100644 index 00000000..6de80760 --- /dev/null +++ b/output/tests/src/image-assets.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ASSET_CLOSE_ICON_16PX = exports.ASSET_INFO_ICON_16PX = exports.ASSET_FILE_SCAN = exports.ASSET_CAMERA_SCAN = void 0; +const SVG_XML_PREFIX = "data:image/svg+xml;base64,"; +exports.ASSET_CAMERA_SCAN = SVG_XML_PREFIX + "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNzEuNjQzIDM3MS42NDMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM3MS42NDMgMzcxLjY0MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEwNS4wODQgMzguMjcxaDE2My43Njh2MjBIMTA1LjA4NHoiLz48cGF0aCBkPSJNMzExLjU5NiAxOTAuMTg5Yy03LjQ0MS05LjM0Ny0xOC40MDMtMTYuMjA2LTMyLjc0My0yMC41MjJWMzBjMC0xNi41NDItMTMuNDU4LTMwLTMwLTMwSDEyNS4wODRjLTE2LjU0MiAwLTMwIDEzLjQ1OC0zMCAzMHYxMjAuMTQzaC04LjI5NmMtMTYuNTQyIDAtMzAgMTMuNDU4LTMwIDMwdjEuMzMzYTI5LjgwNCAyOS44MDQgMCAwIDAgNC42MDMgMTUuOTM5Yy03LjM0IDUuNDc0LTEyLjEwMyAxNC4yMjEtMTIuMTAzIDI0LjA2MXYxLjMzM2MwIDkuODQgNC43NjMgMTguNTg3IDEyLjEwMyAyNC4wNjJhMjkuODEgMjkuODEgMCAwIDAtNC42MDMgMTUuOTM4djEuMzMzYzAgMTYuNTQyIDEzLjQ1OCAzMCAzMCAzMGg4LjMyNGMuNDI3IDExLjYzMSA3LjUwMyAyMS41ODcgMTcuNTM0IDI2LjE3Ny45MzEgMTAuNTAzIDQuMDg0IDMwLjE4NyAxNC43NjggNDUuNTM3YTkuOTg4IDkuOTg4IDAgMCAwIDguMjE2IDQuMjg4IDkuOTU4IDkuOTU4IDAgMCAwIDUuNzA0LTEuNzkzYzQuNTMzLTMuMTU1IDUuNjUtOS4zODggMi40OTUtMTMuOTIxLTYuNzk4LTkuNzY3LTkuNjAyLTIyLjYwOC0xMC43Ni0zMS40aDgyLjY4NWMuMjcyLjQxNC41NDUuODE4LjgxNSAxLjIxIDMuMTQyIDQuNTQxIDkuMzcyIDUuNjc5IDEzLjkxMyAyLjUzNCA0LjU0Mi0zLjE0MiA1LjY3Ny05LjM3MSAyLjUzNS0xMy45MTMtMTEuOTE5LTE3LjIyOS04Ljc4Ny0zNS44ODQgOS41ODEtNTcuMDEyIDMuMDY3LTIuNjUyIDEyLjMwNy0xMS43MzIgMTEuMjE3LTI0LjAzMy0uODI4LTkuMzQzLTcuMTA5LTE3LjE5NC0xOC42NjktMjMuMzM3YTkuODU3IDkuODU3IDAgMCAwLTEuMDYxLS40ODZjLS40NjYtLjE4Mi0xMS40MDMtNC41NzktOS43NDEtMTUuNzA2IDEuMDA3LTYuNzM3IDE0Ljc2OC04LjI3MyAyMy43NjYtNy42NjYgMjMuMTU2IDEuNTY5IDM5LjY5OCA3LjgwMyA0Ny44MzYgMTguMDI2IDUuNzUyIDcuMjI1IDcuNjA3IDE2LjYyMyA1LjY3MyAyOC43MzMtLjQxMyAyLjU4NS0uODI0IDUuMjQxLTEuMjQ1IDcuOTU5LTUuNzU2IDM3LjE5NC0xMi45MTkgODMuNDgzLTQ5Ljg3IDExNC42NjEtNC4yMjEgMy41NjEtNC43NTYgOS44Ny0xLjE5NCAxNC4wOTJhOS45OCA5Ljk4IDAgMCAwIDcuNjQ4IDMuNTUxIDkuOTU1IDkuOTU1IDAgMCAwIDYuNDQ0LTIuMzU4YzQyLjY3Mi0zNi4wMDUgNTAuODAyLTg4LjUzMyA1Ni43MzctMTI2Ljg4OC40MTUtMi42ODQuODIxLTUuMzA5IDEuMjI5LTcuODYzIDIuODM0LTE3LjcyMS0uNDU1LTMyLjY0MS05Ljc3Mi00NC4zNDV6bS0yMzIuMzA4IDQyLjYyYy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM2MwLTUuNTE0IDQuNDg2LTEwIDEwLTEwaDE1djIxLjMzM2gtMTV6bS0yLjUtNTIuNjY2YzAtNS41MTQgNC40ODYtMTAgMTAtMTBoNy41djIxLjMzM2gtNy41Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM3ptMTcuNSA5My45OTloLTcuNWMtNS41MTQgMC0xMC00LjQ4Ni0xMC0xMHYtMS4zMzNjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGg3LjV2MjEuMzMzem0zMC43OTYgMjguODg3Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi04LjI3MWg5MS40NTdjLS44NTEgNi42NjgtLjQzNyAxMi43ODcuNzMxIDE4LjI3MWgtODIuMTg4em03OS40ODItMTEzLjY5OGMtMy4xMjQgMjAuOTA2IDEyLjQyNyAzMy4xODQgMjEuNjI1IDM3LjA0IDUuNDQxIDIuOTY4IDcuNTUxIDUuNjQ3IDcuNzAxIDcuMTg4LjIxIDIuMTUtMi41NTMgNS42ODQtNC40NzcgNy4yNTEtLjQ4Mi4zNzgtLjkyOS44LTEuMzM1IDEuMjYxLTYuOTg3IDcuOTM2LTExLjk4MiAxNS41Mi0xNS40MzIgMjIuNjg4aC05Ny41NjRWMzBjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGgxMjMuNzY5YzUuNTE0IDAgMTAgNC40ODYgMTAgMTB2MTM1LjU3OWMtMy4wMzItLjM4MS02LjE1LS42OTQtOS4zODktLjkxNC0yNS4xNTktMS42OTQtNDIuMzcgNy43NDgtNDQuODk4IDI0LjY2NnoiLz48cGF0aCBkPSJNMTc5LjEyOSA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXpNMTcyLjYyOSAxNDIuODZoLTEyLjU2VjEzMC44YTUgNSAwIDEgMC0xMCAwdjE3LjA2MWE1IDUgMCAwIDAgNSA1aDE3LjU2YTUgNSAwIDEgMCAwLTEwLjAwMXpNMjE2LjU2OCA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXptLTUgMjQuMDYxaC0xNC4wNlY5My4xNjdoMTQuMDZ2MTQuMDYxek0yMTEuNjY5IDEyNS45MzZIMTk3LjQxYTUgNSAwIDAgMC01IDV2MTQuMjU3YTUgNSAwIDAgMCA1IDVoMTQuMjU5YTUgNSAwIDAgMCA1LTV2LTE0LjI1N2E1IDUgMCAwIDAtNS01eiIvPjwvc3ZnPg=="; +exports.ASSET_FILE_SCAN = SVG_XML_PREFIX + "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1OS4wMTggNTkuMDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OS4wMTggNTkuMDE4IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJtNTguNzQxIDU0LjgwOS01Ljk2OS02LjI0NGExMC43NCAxMC43NCAwIDAgMCAyLjgyLTcuMjVjMC01Ljk1My00Ljg0My0xMC43OTYtMTAuNzk2LTEwLjc5NlMzNCAzNS4zNjEgMzQgNDEuMzE0IDM4Ljg0MyA1Mi4xMSA0NC43OTYgNTIuMTFjMi40NDEgMCA0LjY4OC0uODI0IDYuNDk5LTIuMTk2bDYuMDAxIDYuMjc3YS45OTguOTk4IDAgMCAwIDEuNDE0LjAzMiAxIDEgMCAwIDAgLjAzMS0xLjQxNHpNMzYgNDEuMzE0YzAtNC44NSAzLjk0Ni04Ljc5NiA4Ljc5Ni04Ljc5NnM4Ljc5NiAzLjk0NiA4Ljc5NiA4Ljc5Ni0zLjk0NiA4Ljc5Ni04Ljc5NiA4Ljc5NlMzNiA0Ni4xNjQgMzYgNDEuMzE0ek0xMC40MzEgMTYuMDg4YzAgMy4wNyAyLjQ5OCA1LjU2OCA1LjU2OSA1LjU2OHM1LjU2OS0yLjQ5OCA1LjU2OS01LjU2OGMwLTMuMDcxLTIuNDk4LTUuNTY5LTUuNTY5LTUuNTY5cy01LjU2OSAyLjQ5OC01LjU2OSA1LjU2OXptOS4xMzggMGMwIDEuOTY4LTEuNjAyIDMuNTY4LTMuNTY5IDMuNTY4cy0zLjU2OS0xLjYwMS0zLjU2OS0zLjU2OCAxLjYwMi0zLjU2OSAzLjU2OS0zLjU2OSAzLjU2OSAxLjYwMSAzLjU2OSAzLjU2OXoiLz48cGF0aCBkPSJtMzAuODgyIDI4Ljk4NyA5LjE4LTEwLjA1NCAxMS4yNjIgMTAuMzIzYTEgMSAwIDAgMCAxLjM1MS0xLjQ3NWwtMTItMTFhMSAxIDAgMCAwLTEuNDE0LjA2M2wtOS43OTQgMTAuNzI3LTQuNzQzLTQuNzQzYTEuMDAzIDEuMDAzIDAgMCAwLTEuMzY4LS4wNDRMNi4zMzkgMzcuNzY4YTEgMSAwIDEgMCAxLjMyMiAxLjUwMWwxNi4zMTMtMTQuMzYyIDcuMzE5IDcuMzE4YS45OTkuOTk5IDAgMSAwIDEuNDE0LTEuNDE0bC0xLjgyNS0xLjgyNHoiLz48cGF0aCBkPSJNMzAgNDYuNTE4SDJ2LTQyaDU0djI4YTEgMSAwIDEgMCAyIDB2LTI5YTEgMSAwIDAgMC0xLTFIMWExIDEgMCAwIDAtMSAxdjQ0YTEgMSAwIDAgMCAxIDFoMjlhMSAxIDAgMSAwIDAtMnoiLz48L3N2Zz4="; +exports.ASSET_INFO_ICON_16PX = SVG_XML_PREFIX + "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgNDYwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NjAgNDYwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMjMwIDBDMTAyLjk3NSAwIDAgMTAyLjk3NSAwIDIzMHMxMDIuOTc1IDIzMCAyMzAgMjMwIDIzMC0xMDIuOTc0IDIzMC0yMzBTMzU3LjAyNSAwIDIzMCAwem0zOC4zMzMgMzc3LjM2YzAgOC42NzYtNy4wMzQgMTUuNzEtMTUuNzEgMTUuNzFoLTQzLjEwMWMtOC42NzYgMC0xNS43MS03LjAzNC0xNS43MS0xNS43MVYyMDIuNDc3YzAtOC42NzYgNy4wMzMtMTUuNzEgMTUuNzEtMTUuNzFoNDMuMTAxYzguNjc2IDAgMTUuNzEgNy4wMzMgMTUuNzEgMTUuNzFWMzc3LjM2ek0yMzAgMTU3Yy0yMS41MzkgMC0zOS0xNy40NjEtMzktMzlzMTcuNDYxLTM5IDM5LTM5IDM5IDE3LjQ2MSAzOSAzOS0xNy40NjEgMzktMzkgMzl6Ii8+PC9zdmc+"; +exports.ASSET_CLOSE_ICON_16PX = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAQgAAAEIBarqQRAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE1SURBVDiNfdI7S0NBEAXgLya1otFgpbYSbISAgpXYi6CmiH9KCAiChaVga6OiWPgfRDQ+0itaGVNosXtluWwcuMzePfM4M3sq8lbHBubwg1dc4m1E/J/N4ghDPOIsfk/4xiEao5KX0McFljN4C9d4QTPXuY99jP3DsIoDPGM6BY5i5yI5R7O4q+ImFkJY2DCh3cAH2klyB+9J1xUMMAG7eCh1a+Mr+k48b5diXrFVwwLuS+BJ9MfR7+G0FHOHhTHhnXNWS87VDF4pcnfQK4Ep7XScNLmPTZgURNKKYENYWDpzW1BhscS1WHS8CDgURFJQrWcoF3c13KKbgg1BYQfy8xZWEzTTw1QZbAoKu8FqJnktdu5hcVSHmchiILzzuaDQvjBzV2m8yohCE1jHfPx/xhU+y4G/D75ELlRJsSYAAAAASUVORK5CYII="; +//# sourceMappingURL=image-assets.js.map \ No newline at end of file diff --git a/output/tests/src/image-assets.js.map b/output/tests/src/image-assets.js.map new file mode 100644 index 00000000..4e18248a --- /dev/null +++ b/output/tests/src/image-assets.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-assets.js","sourceRoot":"","sources":["../../../src/image-assets.ts"],"names":[],"mappings":";;;AASA,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAEvC,QAAA,iBAAiB,GAAW,cAAc,GAAG,82GAA82G,CAAC;AAE55G,QAAA,eAAe,GAAW,cAAc,GAAG,s8CAAs8C,CAAC;AAEl/C,QAAA,oBAAoB,GAAY,cAAc,GAAG,8oBAA8oB,CAAC;AAEhsB,QAAA,qBAAqB,GAAY,omBAAomB,CAAC"} \ No newline at end of file diff --git a/output/tests/src/index.d.ts b/output/tests/src/index.d.ts new file mode 100644 index 00000000..d6b90c68 --- /dev/null +++ b/output/tests/src/index.d.ts @@ -0,0 +1,6 @@ +export { Html5Qrcode, Html5QrcodeFullConfig, Html5QrcodeCameraScanConfig } from "./html5-qrcode"; +export { Html5QrcodeScanner } from "./html5-qrcode-scanner"; +export { Html5QrcodeSupportedFormats, Html5QrcodeResult, QrcodeSuccessCallback, QrcodeErrorCallback } from "./core"; +export { Html5QrcodeScannerState } from "./state-manager"; +export { Html5QrcodeScanType } from "./core"; +export { CameraCapabilities, CameraDevice } from "./camera/core"; diff --git a/output/tests/src/index.js b/output/tests/src/index.js new file mode 100644 index 00000000..7afb6ce0 --- /dev/null +++ b/output/tests/src/index.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Html5QrcodeScanType = exports.Html5QrcodeScannerState = exports.Html5QrcodeSupportedFormats = exports.Html5QrcodeScanner = exports.Html5Qrcode = void 0; +var html5_qrcode_1 = require("./html5-qrcode"); +Object.defineProperty(exports, "Html5Qrcode", { enumerable: true, get: function () { return html5_qrcode_1.Html5Qrcode; } }); +var html5_qrcode_scanner_1 = require("./html5-qrcode-scanner"); +Object.defineProperty(exports, "Html5QrcodeScanner", { enumerable: true, get: function () { return html5_qrcode_scanner_1.Html5QrcodeScanner; } }); +var core_1 = require("./core"); +Object.defineProperty(exports, "Html5QrcodeSupportedFormats", { enumerable: true, get: function () { return core_1.Html5QrcodeSupportedFormats; } }); +var state_manager_1 = require("./state-manager"); +Object.defineProperty(exports, "Html5QrcodeScannerState", { enumerable: true, get: function () { return state_manager_1.Html5QrcodeScannerState; } }); +var core_2 = require("./core"); +Object.defineProperty(exports, "Html5QrcodeScanType", { enumerable: true, get: function () { return core_2.Html5QrcodeScanType; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/output/tests/src/index.js.map b/output/tests/src/index.js.map new file mode 100644 index 00000000..43a18ce6 --- /dev/null +++ b/output/tests/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAcA,+CAIwB;AAHpB,2GAAA,WAAW,OAAA;AAIf,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,+BAKgB;AAJZ,mHAAA,2BAA2B,OAAA;AAK/B,iDAA0D;AAAjD,wHAAA,uBAAuB,OAAA;AAChC,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA"} \ No newline at end of file diff --git a/output/tests/src/native-bar-code-detector.d.ts b/output/tests/src/native-bar-code-detector.d.ts new file mode 100644 index 00000000..85ef95e4 --- /dev/null +++ b/output/tests/src/native-bar-code-detector.d.ts @@ -0,0 +1,16 @@ +import { QrcodeResult, Html5QrcodeSupportedFormats, QrcodeDecoderAsync, Logger } from "./core"; +export declare class BarcodeDetectorDelegate implements QrcodeDecoderAsync { + private readonly formatMap; + private readonly reverseFormatMap; + private verbose; + private logger; + private detector; + static isSupported(): boolean; + constructor(requestedFormats: Array, verbose: boolean, logger: Logger); + decodeAsync(canvas: HTMLCanvasElement): Promise; + private selectLargestBarcode; + private createBarcodeDetectorFormats; + private toHtml5QrcodeSupportedFormats; + private createReverseFormatMap; + private createDebugData; +} diff --git a/output/tests/src/native-bar-code-detector.js b/output/tests/src/native-bar-code-detector.js new file mode 100644 index 00000000..8cbe4178 --- /dev/null +++ b/output/tests/src/native-bar-code-detector.js @@ -0,0 +1,111 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BarcodeDetectorDelegate = void 0; +const core_1 = require("./core"); +class BarcodeDetectorDelegate { + static isSupported() { + if (!("BarcodeDetector" in window)) { + return false; + } + const dummyDetector = new BarcodeDetector({ formats: ["qr_code"] }); + return typeof dummyDetector !== "undefined"; + } + constructor(requestedFormats, verbose, logger) { + this.formatMap = new Map([ + [core_1.Html5QrcodeSupportedFormats.QR_CODE, "qr_code"], + [core_1.Html5QrcodeSupportedFormats.AZTEC, "aztec"], + [core_1.Html5QrcodeSupportedFormats.CODABAR, "codabar"], + [core_1.Html5QrcodeSupportedFormats.CODE_39, "code_39"], + [core_1.Html5QrcodeSupportedFormats.CODE_93, "code_93"], + [core_1.Html5QrcodeSupportedFormats.CODE_128, "code_128"], + [core_1.Html5QrcodeSupportedFormats.DATA_MATRIX, "data_matrix"], + [core_1.Html5QrcodeSupportedFormats.ITF, "itf"], + [core_1.Html5QrcodeSupportedFormats.EAN_13, "ean_13"], + [core_1.Html5QrcodeSupportedFormats.EAN_8, "ean_8"], + [core_1.Html5QrcodeSupportedFormats.PDF_417, "pdf417"], + [core_1.Html5QrcodeSupportedFormats.UPC_A, "upc_a"], + [core_1.Html5QrcodeSupportedFormats.UPC_E, "upc_e"] + ]); + this.reverseFormatMap = this.createReverseFormatMap(); + if (!BarcodeDetectorDelegate.isSupported()) { + throw "Use html5qrcode.min.js without edit, Use " + + "BarcodeDetectorDelegate only if it isSupported();"; + } + this.verbose = verbose; + this.logger = logger; + const formats = this.createBarcodeDetectorFormats(requestedFormats); + this.detector = new BarcodeDetector(formats); + if (!this.detector) { + throw "BarcodeDetector detector not supported"; + } + } + decodeAsync(canvas) { + return __awaiter(this, void 0, void 0, function* () { + const barcodes = yield this.detector.detect(canvas); + if (!barcodes || barcodes.length === 0) { + throw "No barcode or QR code detected."; + } + let largestBarcode = this.selectLargestBarcode(barcodes); + return { + text: largestBarcode.rawValue, + format: core_1.QrcodeResultFormat.create(this.toHtml5QrcodeSupportedFormats(largestBarcode.format)), + debugData: this.createDebugData() + }; + }); + } + selectLargestBarcode(barcodes) { + let largestBarcode = null; + let maxArea = 0; + for (let barcode of barcodes) { + let area = barcode.boundingBox.width * barcode.boundingBox.height; + if (area > maxArea) { + maxArea = area; + largestBarcode = barcode; + } + } + if (!largestBarcode) { + throw "No largest barcode found"; + } + return largestBarcode; + } + createBarcodeDetectorFormats(requestedFormats) { + let formats = []; + for (const requestedFormat of requestedFormats) { + if (this.formatMap.has(requestedFormat)) { + formats.push(this.formatMap.get(requestedFormat)); + } + else { + this.logger.warn(`${requestedFormat} is not supported by` + + "BarcodeDetectorDelegate"); + } + } + return { formats: formats }; + } + toHtml5QrcodeSupportedFormats(barcodeDetectorFormat) { + if (!this.reverseFormatMap.has(barcodeDetectorFormat)) { + throw `reverseFormatMap doesn't have ${barcodeDetectorFormat}`; + } + return this.reverseFormatMap.get(barcodeDetectorFormat); + } + createReverseFormatMap() { + let result = new Map(); + this.formatMap.forEach((value, key, _) => { + result.set(value, key); + }); + return result; + } + createDebugData() { + return { decoderName: "BarcodeDetector" }; + } +} +exports.BarcodeDetectorDelegate = BarcodeDetectorDelegate; +//# sourceMappingURL=native-bar-code-detector.js.map \ No newline at end of file diff --git a/output/tests/src/native-bar-code-detector.js.map b/output/tests/src/native-bar-code-detector.js.map new file mode 100644 index 00000000..efcb6fef --- /dev/null +++ b/output/tests/src/native-bar-code-detector.js.map @@ -0,0 +1 @@ +{"version":3,"file":"native-bar-code-detector.js","sourceRoot":"","sources":["../../../src/native-bar-code-detector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/state-manager.d.ts b/output/tests/src/state-manager.d.ts new file mode 100644 index 00000000..1c740bbd --- /dev/null +++ b/output/tests/src/state-manager.d.ts @@ -0,0 +1,29 @@ +export declare enum Html5QrcodeScannerState { + UNKNOWN = 0, + NOT_STARTED = 1, + SCANNING = 2, + PAUSED = 3 +} +export interface StateManagerTransaction { + execute(): void; + cancel(): void; +} +export interface StateManager { + startTransition(newState: Html5QrcodeScannerState): StateManagerTransaction; + directTransition(newState: Html5QrcodeScannerState): void; + getState(): Html5QrcodeScannerState; +} +export declare class StateManagerProxy { + private stateManager; + constructor(stateManager: StateManager); + startTransition(newState: Html5QrcodeScannerState): StateManagerTransaction; + directTransition(newState: Html5QrcodeScannerState): void; + getState(): Html5QrcodeScannerState; + canScanFile(): boolean; + isScanning(): boolean; + isStrictlyScanning(): boolean; + isPaused(): boolean; +} +export declare class StateManagerFactory { + static create(): StateManagerProxy; +} diff --git a/output/tests/src/state-manager.js b/output/tests/src/state-manager.js new file mode 100644 index 00000000..e63233bd --- /dev/null +++ b/output/tests/src/state-manager.js @@ -0,0 +1,106 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.StateManagerFactory = exports.StateManagerProxy = exports.Html5QrcodeScannerState = void 0; +var Html5QrcodeScannerState; +(function (Html5QrcodeScannerState) { + Html5QrcodeScannerState[Html5QrcodeScannerState["UNKNOWN"] = 0] = "UNKNOWN"; + Html5QrcodeScannerState[Html5QrcodeScannerState["NOT_STARTED"] = 1] = "NOT_STARTED"; + Html5QrcodeScannerState[Html5QrcodeScannerState["SCANNING"] = 2] = "SCANNING"; + Html5QrcodeScannerState[Html5QrcodeScannerState["PAUSED"] = 3] = "PAUSED"; +})(Html5QrcodeScannerState || (exports.Html5QrcodeScannerState = Html5QrcodeScannerState = {})); +class StateManagerImpl { + constructor() { + this.state = Html5QrcodeScannerState.NOT_STARTED; + this.onGoingTransactionNewState = Html5QrcodeScannerState.UNKNOWN; + } + directTransition(newState) { + this.failIfTransitionOngoing(); + this.validateTransition(newState); + this.state = newState; + } + startTransition(newState) { + this.failIfTransitionOngoing(); + this.validateTransition(newState); + this.onGoingTransactionNewState = newState; + return this; + } + execute() { + if (this.onGoingTransactionNewState + === Html5QrcodeScannerState.UNKNOWN) { + throw "Transaction is already cancelled, cannot execute()."; + } + const tempNewState = this.onGoingTransactionNewState; + this.onGoingTransactionNewState = Html5QrcodeScannerState.UNKNOWN; + this.directTransition(tempNewState); + } + cancel() { + if (this.onGoingTransactionNewState + === Html5QrcodeScannerState.UNKNOWN) { + throw "Transaction is already cancelled, cannot cancel()."; + } + this.onGoingTransactionNewState = Html5QrcodeScannerState.UNKNOWN; + } + getState() { + return this.state; + } + failIfTransitionOngoing() { + if (this.onGoingTransactionNewState + !== Html5QrcodeScannerState.UNKNOWN) { + throw "Cannot transition to a new state, already under transition"; + } + } + validateTransition(newState) { + switch (this.state) { + case Html5QrcodeScannerState.UNKNOWN: + throw "Transition from unknown is not allowed"; + case Html5QrcodeScannerState.NOT_STARTED: + this.failIfNewStateIs(newState, [Html5QrcodeScannerState.PAUSED]); + break; + case Html5QrcodeScannerState.SCANNING: + break; + case Html5QrcodeScannerState.PAUSED: + break; + } + } + failIfNewStateIs(newState, disallowedStatesToTransition) { + for (const disallowedState of disallowedStatesToTransition) { + if (newState === disallowedState) { + throw `Cannot transition from ${this.state} to ${newState}`; + } + } + } +} +class StateManagerProxy { + constructor(stateManager) { + this.stateManager = stateManager; + } + startTransition(newState) { + return this.stateManager.startTransition(newState); + } + directTransition(newState) { + this.stateManager.directTransition(newState); + } + getState() { + return this.stateManager.getState(); + } + canScanFile() { + return this.stateManager.getState() === Html5QrcodeScannerState.NOT_STARTED; + } + isScanning() { + return this.stateManager.getState() !== Html5QrcodeScannerState.NOT_STARTED; + } + isStrictlyScanning() { + return this.stateManager.getState() === Html5QrcodeScannerState.SCANNING; + } + isPaused() { + return this.stateManager.getState() === Html5QrcodeScannerState.PAUSED; + } +} +exports.StateManagerProxy = StateManagerProxy; +class StateManagerFactory { + static create() { + return new StateManagerProxy(new StateManagerImpl()); + } +} +exports.StateManagerFactory = StateManagerFactory; +//# sourceMappingURL=state-manager.js.map \ No newline at end of file diff --git a/output/tests/src/state-manager.js.map b/output/tests/src/state-manager.js.map new file mode 100644 index 00000000..da58d485 --- /dev/null +++ b/output/tests/src/state-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../../src/state-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/storage.d.ts b/output/tests/src/storage.d.ts new file mode 100644 index 00000000..cae73a31 --- /dev/null +++ b/output/tests/src/storage.d.ts @@ -0,0 +1,12 @@ +export declare class PersistedDataManager { + private data; + private static LOCAL_STORAGE_KEY; + constructor(); + hasCameraPermissions(): boolean; + getLastUsedCameraId(): string | null; + setHasPermission(hasPermission: boolean): void; + setLastUsedCameraId(lastUsedCameraId: string): void; + resetLastUsedCameraId(): void; + reset(): void; + private flush; +} diff --git a/output/tests/src/storage.js b/output/tests/src/storage.js new file mode 100644 index 00000000..f4fc11e2 --- /dev/null +++ b/output/tests/src/storage.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PersistedDataManager = void 0; +class PersistedDataFactory { + static createDefault() { + return { + hasPermission: false, + lastUsedCameraId: null + }; + } +} +class PersistedDataManager { + constructor() { + this.data = PersistedDataFactory.createDefault(); + let data = localStorage.getItem(PersistedDataManager.LOCAL_STORAGE_KEY); + if (!data) { + this.reset(); + } + else { + this.data = JSON.parse(data); + } + } + hasCameraPermissions() { + return this.data.hasPermission; + } + getLastUsedCameraId() { + return this.data.lastUsedCameraId; + } + setHasPermission(hasPermission) { + this.data.hasPermission = hasPermission; + this.flush(); + } + setLastUsedCameraId(lastUsedCameraId) { + this.data.lastUsedCameraId = lastUsedCameraId; + this.flush(); + } + resetLastUsedCameraId() { + this.data.lastUsedCameraId = null; + this.flush(); + } + reset() { + this.data = PersistedDataFactory.createDefault(); + this.flush(); + } + flush() { + localStorage.setItem(PersistedDataManager.LOCAL_STORAGE_KEY, JSON.stringify(this.data)); + } +} +exports.PersistedDataManager = PersistedDataManager; +PersistedDataManager.LOCAL_STORAGE_KEY = "HTML5_QRCODE_DATA"; +//# sourceMappingURL=storage.js.map \ No newline at end of file diff --git a/output/tests/src/storage.js.map b/output/tests/src/storage.js.map new file mode 100644 index 00000000..b2ec02bd --- /dev/null +++ b/output/tests/src/storage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":";;;AAeA,MAAM,oBAAoB;IACtB,MAAM,CAAC,aAAa;QAChB,OAAO;YACH,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,IAAI;SACzB,CAAC;IACN,CAAC;CACJ;AAED,MAAa,oBAAoB;IAK7B;QAHQ,SAAI,GAAkB,oBAAoB,CAAC,aAAa,EAAE,CAAC;QAI/D,IAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAEM,oBAAoB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACnC,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,aAAsB;QAC1C,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,mBAAmB,CAAC,gBAAwB;QAC/C,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,qBAAqB;QACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,aAAa,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEO,KAAK;QACT,YAAY,CAAC,OAAO,CAChB,oBAAoB,CAAC,iBAAiB,EACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;;AA9CL,oDA+CC;AA5CkB,sCAAiB,GAAW,mBAAmB,AAA9B,CAA+B"} \ No newline at end of file diff --git a/output/tests/src/strings.d.ts b/output/tests/src/strings.d.ts new file mode 100644 index 00000000..bb99f900 --- /dev/null +++ b/output/tests/src/strings.d.ts @@ -0,0 +1,45 @@ +export declare class Html5QrcodeStrings { + static codeParseError(exception: any): string; + static errorGettingUserMedia(error: any): string; + static onlyDeviceSupportedError(): string; + static cameraStreamingNotSupported(): string; + static unableToQuerySupportedDevices(): string; + static insecureContextCameraQueryError(): string; + static scannerPaused(): string; +} +export declare class Html5QrcodeScannerStrings { + static scanningStatus(): string; + static idleStatus(): string; + static errorStatus(): string; + static permissionStatus(): string; + static noCameraFoundErrorStatus(): string; + static lastMatch(decodedText: string): string; + static codeScannerTitle(): string; + static cameraPermissionTitle(): string; + static cameraPermissionRequesting(): string; + static noCameraFound(): string; + static scanButtonStopScanningText(): string; + static scanButtonStartScanningText(): string; + static torchOnButton(): string; + static torchOffButton(): string; + static torchOnFailedMessage(): string; + static torchOffFailedMessage(): string; + static scanButtonScanningStarting(): string; + static textIfCameraScanSelected(): string; + static textIfFileScanSelected(): string; + static selectCamera(): string; + static fileSelectionChooseImage(): string; + static fileSelectionChooseAnother(): string; + static fileSelectionNoImageSelected(): string; + static anonymousCameraPrefix(): string; + static dragAndDropMessage(): string; + static dragAndDropMessageOnlyImages(): string; + static zoom(): string; + static loadingImage(): string; + static cameraScanAltText(): string; + static fileScanAltText(): string; +} +export declare class LibraryInfoStrings { + static poweredBy(): string; + static reportIssues(): string; +} diff --git a/output/tests/src/strings.js b/output/tests/src/strings.js new file mode 100644 index 00000000..658c374c --- /dev/null +++ b/output/tests/src/strings.js @@ -0,0 +1,133 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LibraryInfoStrings = exports.Html5QrcodeScannerStrings = exports.Html5QrcodeStrings = void 0; +class Html5QrcodeStrings { + static codeParseError(exception) { + return `QR code parse error, error = ${exception}`; + } + static errorGettingUserMedia(error) { + return `Error getting userMedia, error = ${error}`; + } + static onlyDeviceSupportedError() { + return "The device doesn't support navigator.mediaDevices , only " + + "supported cameraIdOrConfig in this case is deviceId parameter " + + "(string)."; + } + static cameraStreamingNotSupported() { + return "Camera streaming not supported by the browser."; + } + static unableToQuerySupportedDevices() { + return "Unable to query supported devices, unknown error."; + } + static insecureContextCameraQueryError() { + return "Camera access is only supported in secure context like https " + + "or localhost."; + } + static scannerPaused() { + return "Scanner paused"; + } +} +exports.Html5QrcodeStrings = Html5QrcodeStrings; +class Html5QrcodeScannerStrings { + static scanningStatus() { + return "Scanning"; + } + static idleStatus() { + return "Idle"; + } + static errorStatus() { + return "Error"; + } + static permissionStatus() { + return "Permission"; + } + static noCameraFoundErrorStatus() { + return "No Cameras"; + } + static lastMatch(decodedText) { + return `Last Match: ${decodedText}`; + } + static codeScannerTitle() { + return "Code Scanner"; + } + static cameraPermissionTitle() { + return "Request Camera Permissions"; + } + static cameraPermissionRequesting() { + return "Requesting camera permissions..."; + } + static noCameraFound() { + return "No camera found"; + } + static scanButtonStopScanningText() { + return "Stop Scanning"; + } + static scanButtonStartScanningText() { + return "Start Scanning"; + } + static torchOnButton() { + return "Switch On Torch"; + } + static torchOffButton() { + return "Switch Off Torch"; + } + static torchOnFailedMessage() { + return "Failed to turn on torch"; + } + static torchOffFailedMessage() { + return "Failed to turn off torch"; + } + static scanButtonScanningStarting() { + return "Launching Camera..."; + } + static textIfCameraScanSelected() { + return "Scan an Image File"; + } + static textIfFileScanSelected() { + return "Scan using camera directly"; + } + static selectCamera() { + return "Select Camera"; + } + static fileSelectionChooseImage() { + return "Choose Image"; + } + static fileSelectionChooseAnother() { + return "Choose Another"; + } + static fileSelectionNoImageSelected() { + return "No image choosen"; + } + static anonymousCameraPrefix() { + return "Anonymous Camera"; + } + static dragAndDropMessage() { + return "Or drop an image to scan"; + } + static dragAndDropMessageOnlyImages() { + return "Or drop an image to scan (other files not supported)"; + } + static zoom() { + return "zoom"; + } + static loadingImage() { + return "Loading image..."; + } + static cameraScanAltText() { + return "Camera based scan"; + } + static fileScanAltText() { + return "Fule based scan"; + } +} +exports.Html5QrcodeScannerStrings = Html5QrcodeScannerStrings; +class LibraryInfoStrings { + static poweredBy() { + return "Powered by "; + } + static reportIssues() { + return "Report issues"; + } +} +exports.LibraryInfoStrings = LibraryInfoStrings; +//# sourceMappingURL=strings.js.map \ No newline at end of file diff --git a/output/tests/src/strings.js.map b/output/tests/src/strings.js.map new file mode 100644 index 00000000..80b4d9ca --- /dev/null +++ b/output/tests/src/strings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../../src/strings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/ui.d.ts b/output/tests/src/ui.d.ts new file mode 100644 index 00000000..5f03fe96 --- /dev/null +++ b/output/tests/src/ui.d.ts @@ -0,0 +1,6 @@ +export declare class LibraryInfoContainer { + private infoDiv; + private infoIcon; + constructor(); + renderInto(parent: HTMLElement): void; +} diff --git a/output/tests/src/ui.js b/output/tests/src/ui.js new file mode 100644 index 00000000..7a78c686 --- /dev/null +++ b/output/tests/src/ui.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LibraryInfoContainer = void 0; +const image_assets_1 = require("./image-assets"); +const strings_1 = require("./strings"); +class LibraryInfoDiv { + constructor() { + this.infoDiv = document.createElement("div"); + } + renderInto(parent) { + this.infoDiv.style.position = "absolute"; + this.infoDiv.style.top = "10px"; + this.infoDiv.style.right = "10px"; + this.infoDiv.style.zIndex = "2"; + this.infoDiv.style.display = "none"; + this.infoDiv.style.padding = "5pt"; + this.infoDiv.style.border = "1px solid #171717"; + this.infoDiv.style.fontSize = "10pt"; + this.infoDiv.style.background = "rgb(0 0 0 / 69%)"; + this.infoDiv.style.borderRadius = "5px"; + this.infoDiv.style.textAlign = "center"; + this.infoDiv.style.fontWeight = "400"; + this.infoDiv.style.color = "white"; + this.infoDiv.innerText = strings_1.LibraryInfoStrings.poweredBy(); + const projectLink = document.createElement("a"); + projectLink.innerText = "ScanApp"; + projectLink.href = "https://scanapp.org"; + projectLink.target = "new"; + projectLink.style.color = "white"; + this.infoDiv.appendChild(projectLink); + const breakElemFirst = document.createElement("br"); + const breakElemSecond = document.createElement("br"); + this.infoDiv.appendChild(breakElemFirst); + this.infoDiv.appendChild(breakElemSecond); + const reportIssueLink = document.createElement("a"); + reportIssueLink.innerText = strings_1.LibraryInfoStrings.reportIssues(); + reportIssueLink.href = "https://github.com/mebjas/html5-qrcode/issues"; + reportIssueLink.target = "new"; + reportIssueLink.style.color = "white"; + this.infoDiv.appendChild(reportIssueLink); + parent.appendChild(this.infoDiv); + } + show() { + this.infoDiv.style.display = "block"; + } + hide() { + this.infoDiv.style.display = "none"; + } +} +class LibraryInfoIcon { + constructor(onTapIn, onTapOut) { + this.isShowingInfoIcon = true; + this.onTapIn = onTapIn; + this.onTapOut = onTapOut; + this.infoIcon = document.createElement("img"); + } + renderInto(parent) { + this.infoIcon.alt = "Info icon"; + this.infoIcon.src = image_assets_1.ASSET_INFO_ICON_16PX; + this.infoIcon.style.position = "absolute"; + this.infoIcon.style.top = "4px"; + this.infoIcon.style.right = "4px"; + this.infoIcon.style.opacity = "0.6"; + this.infoIcon.style.cursor = "pointer"; + this.infoIcon.style.zIndex = "2"; + this.infoIcon.style.width = "16px"; + this.infoIcon.style.height = "16px"; + this.infoIcon.onmouseover = (_) => this.onHoverIn(); + this.infoIcon.onmouseout = (_) => this.onHoverOut(); + this.infoIcon.onclick = (_) => this.onClick(); + parent.appendChild(this.infoIcon); + } + onHoverIn() { + if (this.isShowingInfoIcon) { + this.infoIcon.style.opacity = "1"; + } + } + onHoverOut() { + if (this.isShowingInfoIcon) { + this.infoIcon.style.opacity = "0.6"; + } + } + onClick() { + if (this.isShowingInfoIcon) { + this.isShowingInfoIcon = false; + this.onTapIn(); + this.infoIcon.src = image_assets_1.ASSET_CLOSE_ICON_16PX; + this.infoIcon.style.opacity = "1"; + } + else { + this.isShowingInfoIcon = true; + this.onTapOut(); + this.infoIcon.src = image_assets_1.ASSET_INFO_ICON_16PX; + this.infoIcon.style.opacity = "0.6"; + } + } +} +class LibraryInfoContainer { + constructor() { + this.infoDiv = new LibraryInfoDiv(); + this.infoIcon = new LibraryInfoIcon(() => { + this.infoDiv.show(); + }, () => { + this.infoDiv.hide(); + }); + } + renderInto(parent) { + this.infoDiv.renderInto(parent); + this.infoIcon.renderInto(parent); + } +} +exports.LibraryInfoContainer = LibraryInfoContainer; +//# sourceMappingURL=ui.js.map \ No newline at end of file diff --git a/output/tests/src/ui.js.map b/output/tests/src/ui.js.map new file mode 100644 index 00000000..93c04f33 --- /dev/null +++ b/output/tests/src/ui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/ui/scanner/base.d.ts b/output/tests/src/ui/scanner/base.d.ts new file mode 100644 index 00000000..1f6ba9cf --- /dev/null +++ b/output/tests/src/ui/scanner/base.d.ts @@ -0,0 +1,16 @@ +export declare class PublicUiElementIdAndClasses { + static ALL_ELEMENT_CLASS: string; + static CAMERA_PERMISSION_BUTTON_ID: string; + static CAMERA_START_BUTTON_ID: string; + static CAMERA_STOP_BUTTON_ID: string; + static TORCH_BUTTON_ID: string; + static CAMERA_SELECTION_SELECT_ID: string; + static FILE_SELECTION_BUTTON_ID: string; + static ZOOM_SLIDER_ID: string; + static SCAN_TYPE_CHANGE_ANCHOR_ID: string; + static TORCH_BUTTON_CLASS_TORCH_ON: string; + static TORCH_BUTTON_CLASS_TORCH_OFF: string; +} +export declare class BaseUiElementFactory { + static createElement(elementType: string, elementId: string): Type; +} diff --git a/output/tests/src/ui/scanner/base.js b/output/tests/src/ui/scanner/base.js new file mode 100644 index 00000000..6ab10098 --- /dev/null +++ b/output/tests/src/ui/scanner/base.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseUiElementFactory = exports.PublicUiElementIdAndClasses = void 0; +class PublicUiElementIdAndClasses { +} +exports.PublicUiElementIdAndClasses = PublicUiElementIdAndClasses; +PublicUiElementIdAndClasses.ALL_ELEMENT_CLASS = "html5-qrcode-element"; +PublicUiElementIdAndClasses.CAMERA_PERMISSION_BUTTON_ID = "html5-qrcode-button-camera-permission"; +PublicUiElementIdAndClasses.CAMERA_START_BUTTON_ID = "html5-qrcode-button-camera-start"; +PublicUiElementIdAndClasses.CAMERA_STOP_BUTTON_ID = "html5-qrcode-button-camera-stop"; +PublicUiElementIdAndClasses.TORCH_BUTTON_ID = "html5-qrcode-button-torch"; +PublicUiElementIdAndClasses.CAMERA_SELECTION_SELECT_ID = "html5-qrcode-select-camera"; +PublicUiElementIdAndClasses.FILE_SELECTION_BUTTON_ID = "html5-qrcode-button-file-selection"; +PublicUiElementIdAndClasses.ZOOM_SLIDER_ID = "html5-qrcode-input-range-zoom"; +PublicUiElementIdAndClasses.SCAN_TYPE_CHANGE_ANCHOR_ID = "html5-qrcode-anchor-scan-type-change"; +PublicUiElementIdAndClasses.TORCH_BUTTON_CLASS_TORCH_ON = "html5-qrcode-button-torch-on"; +PublicUiElementIdAndClasses.TORCH_BUTTON_CLASS_TORCH_OFF = "html5-qrcode-button-torch-off"; +class BaseUiElementFactory { + static createElement(elementType, elementId) { + let element = (document.createElement(elementType)); + element.id = elementId; + element.classList.add(PublicUiElementIdAndClasses.ALL_ELEMENT_CLASS); + if (elementType === "button") { + element.setAttribute("type", "button"); + } + return element; + } +} +exports.BaseUiElementFactory = BaseUiElementFactory; +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/output/tests/src/ui/scanner/base.js.map b/output/tests/src/ui/scanner/base.js.map new file mode 100644 index 00000000..8b6a5ea0 --- /dev/null +++ b/output/tests/src/ui/scanner/base.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/ui/scanner/base.ts"],"names":[],"mappings":";;;AAcA,MAAa,2BAA2B;;AAAxC,kEA4CC;AAxCU,6CAAiB,GAAG,sBAAsB,CAAC;AAG3C,uDAA2B,GAAG,uCAAuC,CAAC;AAGtE,kDAAsB,GAAG,kCAAkC,CAAC;AAG5D,iDAAqB,GAAG,iCAAiC,CAAC;AAG1D,2CAAe,GAAG,2BAA2B,CAAC;AAG9C,sDAA0B,GAAG,4BAA4B,CAAC;AAG1D,oDAAwB,GAAG,oCAAoC,CAAC;AAGhE,0CAAc,GAAG,+BAA+B,CAAC;AAMjD,sDAA0B,GAAG,sCAAsC,CAAC;AAOpE,uDAA2B,GAAG,8BAA8B,CAAC;AAG7D,wDAA4B,GAAG,+BAA+B,CAAC;AAQ1E,MAAa,oBAAoB;IAMtB,MAAM,CAAC,aAAa,CACvB,WAAmB,EAAE,SAAiB;QAEtC,IAAI,OAAO,GAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;QACvB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;QACrE,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAjBD,oDAiBC"} \ No newline at end of file diff --git a/output/tests/src/ui/scanner/camera-selection-ui.d.ts b/output/tests/src/ui/scanner/camera-selection-ui.d.ts new file mode 100644 index 00000000..2090ed53 --- /dev/null +++ b/output/tests/src/ui/scanner/camera-selection-ui.d.ts @@ -0,0 +1,17 @@ +import { CameraDevice } from "../../camera/core"; +export declare class CameraSelectionUi { + private readonly selectElement; + private readonly options; + private readonly cameras; + private constructor(); + private render; + disable(): void; + isDisabled(): boolean; + enable(): void; + getValue(): string; + hasValue(value: string): boolean; + setValue(value: string): void; + hasSingleItem(): boolean; + numCameras(): number; + static create(parentElement: HTMLElement, cameras: Array): CameraSelectionUi; +} diff --git a/output/tests/src/ui/scanner/camera-selection-ui.js b/output/tests/src/ui/scanner/camera-selection-ui.js new file mode 100644 index 00000000..e56e890c --- /dev/null +++ b/output/tests/src/ui/scanner/camera-selection-ui.js @@ -0,0 +1,86 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraSelectionUi = void 0; +const base_1 = require("./base"); +const strings_1 = require("../../strings"); +class CameraSelectionUi { + constructor(cameras) { + this.selectElement = base_1.BaseUiElementFactory + .createElement("select", base_1.PublicUiElementIdAndClasses.CAMERA_SELECTION_SELECT_ID); + this.cameras = cameras; + this.options = []; + } + render(parentElement) { + const cameraSelectionContainer = document.createElement("span"); + cameraSelectionContainer.style.marginRight = "10px"; + const numCameras = this.cameras.length; + if (numCameras === 0) { + throw new Error("No cameras found"); + } + if (numCameras === 1) { + cameraSelectionContainer.style.display = "none"; + } + else { + const selectCameraString = strings_1.Html5QrcodeScannerStrings.selectCamera(); + cameraSelectionContainer.innerText + = `${selectCameraString} (${this.cameras.length}) `; + } + let anonymousCameraId = 1; + for (const camera of this.cameras) { + const value = camera.id; + let name = camera.label == null ? value : camera.label; + if (!name || name === "") { + name = [ + strings_1.Html5QrcodeScannerStrings.anonymousCameraPrefix(), + anonymousCameraId++ + ].join(" "); + } + const option = document.createElement("option"); + option.value = value; + option.innerText = name; + this.options.push(option); + this.selectElement.appendChild(option); + } + cameraSelectionContainer.appendChild(this.selectElement); + parentElement.appendChild(cameraSelectionContainer); + } + disable() { + this.selectElement.disabled = true; + } + isDisabled() { + return this.selectElement.disabled === true; + } + enable() { + this.selectElement.disabled = false; + } + getValue() { + return this.selectElement.value; + } + hasValue(value) { + for (const option of this.options) { + if (option.value === value) { + return true; + } + } + return false; + } + setValue(value) { + if (!this.hasValue(value)) { + throw new Error(`${value} is not present in the camera list.`); + } + this.selectElement.value = value; + } + hasSingleItem() { + return this.cameras.length === 1; + } + numCameras() { + return this.cameras.length; + } + static create(parentElement, cameras) { + let cameraSelectUi = new CameraSelectionUi(cameras); + cameraSelectUi.render(parentElement); + return cameraSelectUi; + } +} +exports.CameraSelectionUi = CameraSelectionUi; +//# sourceMappingURL=camera-selection-ui.js.map \ No newline at end of file diff --git a/output/tests/src/ui/scanner/camera-selection-ui.js.map b/output/tests/src/ui/scanner/camera-selection-ui.js.map new file mode 100644 index 00000000..cf4ad33a --- /dev/null +++ b/output/tests/src/ui/scanner/camera-selection-ui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"camera-selection-ui.js","sourceRoot":"","sources":["../../../../../src/ui/scanner/camera-selection-ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/ui/scanner/camera-zoom-ui.d.ts b/output/tests/src/ui/scanner/camera-zoom-ui.d.ts new file mode 100644 index 00000000..215bb3f4 --- /dev/null +++ b/output/tests/src/ui/scanner/camera-zoom-ui.d.ts @@ -0,0 +1,16 @@ +export type OnCameraZoomValueChangeCallback = (zoomValue: number) => void; +export declare class CameraZoomUi { + private zoomElementContainer; + private rangeInput; + private rangeText; + private onChangeCallback; + private constructor(); + private render; + private onValueChange; + setValues(minValue: number, maxValue: number, defaultValue: number, step: number): void; + show(): void; + hide(): void; + setOnCameraZoomValueChangeCallback(onChangeCallback: OnCameraZoomValueChangeCallback): void; + removeOnCameraZoomValueChangeCallback(): void; + static create(parentElement: HTMLElement, renderOnCreate: boolean): CameraZoomUi; +} diff --git a/output/tests/src/ui/scanner/camera-zoom-ui.js b/output/tests/src/ui/scanner/camera-zoom-ui.js new file mode 100644 index 00000000..089767c1 --- /dev/null +++ b/output/tests/src/ui/scanner/camera-zoom-ui.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraZoomUi = void 0; +const base_1 = require("./base"); +const strings_1 = require("../../strings"); +class CameraZoomUi { + constructor() { + this.onChangeCallback = null; + this.zoomElementContainer = document.createElement("div"); + this.rangeInput = base_1.BaseUiElementFactory.createElement("input", base_1.PublicUiElementIdAndClasses.ZOOM_SLIDER_ID); + this.rangeInput.type = "range"; + this.rangeText = document.createElement("span"); + this.rangeInput.min = "1"; + this.rangeInput.max = "5"; + this.rangeInput.value = "1"; + this.rangeInput.step = "0.1"; + } + render(parentElement, renderOnCreate) { + this.zoomElementContainer.style.display + = renderOnCreate ? "block" : "none"; + this.zoomElementContainer.style.padding = "5px 10px"; + this.zoomElementContainer.style.textAlign = "center"; + parentElement.appendChild(this.zoomElementContainer); + this.rangeInput.style.display = "inline-block"; + this.rangeInput.style.width = "50%"; + this.rangeInput.style.height = "5px"; + this.rangeInput.style.background = "#d3d3d3"; + this.rangeInput.style.outline = "none"; + this.rangeInput.style.opacity = "0.7"; + let zoomString = strings_1.Html5QrcodeScannerStrings.zoom(); + this.rangeText.innerText = `${this.rangeInput.value}x ${zoomString}`; + this.rangeText.style.marginRight = "10px"; + let $this = this; + this.rangeInput.addEventListener("input", () => $this.onValueChange()); + this.rangeInput.addEventListener("change", () => $this.onValueChange()); + this.zoomElementContainer.appendChild(this.rangeInput); + this.zoomElementContainer.appendChild(this.rangeText); + } + onValueChange() { + let zoomString = strings_1.Html5QrcodeScannerStrings.zoom(); + this.rangeText.innerText = `${this.rangeInput.value}x ${zoomString}`; + if (this.onChangeCallback) { + this.onChangeCallback(parseFloat(this.rangeInput.value)); + } + } + setValues(minValue, maxValue, defaultValue, step) { + this.rangeInput.min = minValue.toString(); + this.rangeInput.max = maxValue.toString(); + this.rangeInput.step = step.toString(); + this.rangeInput.value = defaultValue.toString(); + this.onValueChange(); + } + show() { + this.zoomElementContainer.style.display = "block"; + } + hide() { + this.zoomElementContainer.style.display = "none"; + } + setOnCameraZoomValueChangeCallback(onChangeCallback) { + this.onChangeCallback = onChangeCallback; + } + removeOnCameraZoomValueChangeCallback() { + this.onChangeCallback = null; + } + static create(parentElement, renderOnCreate) { + let cameraZoomUi = new CameraZoomUi(); + cameraZoomUi.render(parentElement, renderOnCreate); + return cameraZoomUi; + } +} +exports.CameraZoomUi = CameraZoomUi; +//# sourceMappingURL=camera-zoom-ui.js.map \ No newline at end of file diff --git a/output/tests/src/ui/scanner/camera-zoom-ui.js.map b/output/tests/src/ui/scanner/camera-zoom-ui.js.map new file mode 100644 index 00000000..7b47f020 --- /dev/null +++ b/output/tests/src/ui/scanner/camera-zoom-ui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"camera-zoom-ui.js","sourceRoot":"","sources":["../../../../../src/ui/scanner/camera-zoom-ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/ui/scanner/file-selection-ui.d.ts b/output/tests/src/ui/scanner/file-selection-ui.d.ts new file mode 100644 index 00000000..768f5ed8 --- /dev/null +++ b/output/tests/src/ui/scanner/file-selection-ui.d.ts @@ -0,0 +1,19 @@ +export type OnFileSelected = (file: File) => void; +export declare class FileSelectionUi { + private readonly fileBasedScanRegion; + private readonly fileScanInput; + private readonly fileSelectionButton; + private constructor(); + hide(): void; + show(): void; + isShowing(): boolean; + resetValue(): void; + private createFileBasedScanRegion; + private fileBasedScanRegionDefaultBorder; + private fileBasedScanRegionActiveBorder; + private createDragAndDropMessage; + private setImageNameToButton; + private setInitialValueToButton; + private getFileScanInputId; + static create(parentElement: HTMLDivElement, showOnRender: boolean, onFileSelected: OnFileSelected): FileSelectionUi; +} diff --git a/output/tests/src/ui/scanner/file-selection-ui.js b/output/tests/src/ui/scanner/file-selection-ui.js new file mode 100644 index 00000000..34535a37 --- /dev/null +++ b/output/tests/src/ui/scanner/file-selection-ui.js @@ -0,0 +1,169 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FileSelectionUi = void 0; +const strings_1 = require("../../strings"); +const base_1 = require("./base"); +class FileSelectionUi { + constructor(parentElement, showOnRender, onFileSelected) { + this.fileBasedScanRegion = this.createFileBasedScanRegion(); + this.fileBasedScanRegion.style.display + = showOnRender ? "block" : "none"; + parentElement.appendChild(this.fileBasedScanRegion); + let fileScanLabel = document.createElement("label"); + fileScanLabel.setAttribute("for", this.getFileScanInputId()); + fileScanLabel.style.display = "inline-block"; + this.fileBasedScanRegion.appendChild(fileScanLabel); + this.fileSelectionButton + = base_1.BaseUiElementFactory.createElement("button", base_1.PublicUiElementIdAndClasses.FILE_SELECTION_BUTTON_ID); + this.setInitialValueToButton(); + this.fileSelectionButton.addEventListener("click", (_) => { + fileScanLabel.click(); + }); + fileScanLabel.append(this.fileSelectionButton); + this.fileScanInput + = base_1.BaseUiElementFactory.createElement("input", this.getFileScanInputId()); + this.fileScanInput.type = "file"; + this.fileScanInput.accept = "image/*"; + this.fileScanInput.style.display = "none"; + fileScanLabel.appendChild(this.fileScanInput); + let $this = this; + this.fileScanInput.addEventListener("change", (e) => { + if (e == null || e.target == null) { + return; + } + let target = e.target; + if (target.files && target.files.length === 0) { + return; + } + let fileList = target.files; + const file = fileList[0]; + let fileName = file.name; + $this.setImageNameToButton(fileName); + onFileSelected(file); + }); + let dragAndDropMessage = this.createDragAndDropMessage(); + this.fileBasedScanRegion.appendChild(dragAndDropMessage); + this.fileBasedScanRegion.addEventListener("dragenter", function (event) { + $this.fileBasedScanRegion.style.border + = $this.fileBasedScanRegionActiveBorder(); + event.stopPropagation(); + event.preventDefault(); + }); + this.fileBasedScanRegion.addEventListener("dragleave", function (event) { + $this.fileBasedScanRegion.style.border + = $this.fileBasedScanRegionDefaultBorder(); + event.stopPropagation(); + event.preventDefault(); + }); + this.fileBasedScanRegion.addEventListener("dragover", function (event) { + $this.fileBasedScanRegion.style.border + = $this.fileBasedScanRegionActiveBorder(); + event.stopPropagation(); + event.preventDefault(); + }); + this.fileBasedScanRegion.addEventListener("drop", function (event) { + event.stopPropagation(); + event.preventDefault(); + $this.fileBasedScanRegion.style.border + = $this.fileBasedScanRegionDefaultBorder(); + var dataTransfer = event.dataTransfer; + if (dataTransfer) { + let files = dataTransfer.files; + if (!files || files.length === 0) { + return; + } + let isAnyFileImage = false; + for (let i = 0; i < files.length; ++i) { + let file = files.item(i); + if (!file) { + continue; + } + let imageType = /image.*/; + if (!file.type.match(imageType)) { + continue; + } + isAnyFileImage = true; + let fileName = file.name; + $this.setImageNameToButton(fileName); + onFileSelected(file); + dragAndDropMessage.innerText + = strings_1.Html5QrcodeScannerStrings.dragAndDropMessage(); + break; + } + if (!isAnyFileImage) { + dragAndDropMessage.innerText + = strings_1.Html5QrcodeScannerStrings + .dragAndDropMessageOnlyImages(); + } + } + }); + } + hide() { + this.fileBasedScanRegion.style.display = "none"; + this.fileScanInput.disabled = true; + } + show() { + this.fileBasedScanRegion.style.display = "block"; + this.fileScanInput.disabled = false; + } + isShowing() { + return this.fileBasedScanRegion.style.display === "block"; + } + resetValue() { + this.fileScanInput.value = ""; + this.setInitialValueToButton(); + } + createFileBasedScanRegion() { + let fileBasedScanRegion = document.createElement("div"); + fileBasedScanRegion.style.textAlign = "center"; + fileBasedScanRegion.style.margin = "auto"; + fileBasedScanRegion.style.width = "80%"; + fileBasedScanRegion.style.maxWidth = "600px"; + fileBasedScanRegion.style.border + = this.fileBasedScanRegionDefaultBorder(); + fileBasedScanRegion.style.padding = "10px"; + fileBasedScanRegion.style.marginBottom = "10px"; + return fileBasedScanRegion; + } + fileBasedScanRegionDefaultBorder() { + return "6px dashed #ebebeb"; + } + fileBasedScanRegionActiveBorder() { + return "6px dashed rgb(153 151 151)"; + } + createDragAndDropMessage() { + let dragAndDropMessage = document.createElement("div"); + dragAndDropMessage.innerText + = strings_1.Html5QrcodeScannerStrings.dragAndDropMessage(); + dragAndDropMessage.style.fontWeight = "400"; + return dragAndDropMessage; + } + setImageNameToButton(imageFileName) { + const MAX_CHARS = 20; + if (imageFileName.length > MAX_CHARS) { + let start8Chars = imageFileName.substring(0, 8); + let length = imageFileName.length; + let last8Chars = imageFileName.substring(length - 8, length); + imageFileName = `${start8Chars}....${last8Chars}`; + } + let newText = strings_1.Html5QrcodeScannerStrings.fileSelectionChooseAnother() + + " - " + + imageFileName; + this.fileSelectionButton.innerText = newText; + } + setInitialValueToButton() { + let initialText = strings_1.Html5QrcodeScannerStrings.fileSelectionChooseImage() + + " - " + + strings_1.Html5QrcodeScannerStrings.fileSelectionNoImageSelected(); + this.fileSelectionButton.innerText = initialText; + } + getFileScanInputId() { + return "html5-qrcode-private-filescan-input"; + } + static create(parentElement, showOnRender, onFileSelected) { + let button = new FileSelectionUi(parentElement, showOnRender, onFileSelected); + return button; + } +} +exports.FileSelectionUi = FileSelectionUi; +//# sourceMappingURL=file-selection-ui.js.map \ No newline at end of file diff --git a/output/tests/src/ui/scanner/file-selection-ui.js.map b/output/tests/src/ui/scanner/file-selection-ui.js.map new file mode 100644 index 00000000..1a3db980 --- /dev/null +++ b/output/tests/src/ui/scanner/file-selection-ui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-selection-ui.js","sourceRoot":"","sources":["../../../../../src/ui/scanner/file-selection-ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/ui/scanner/scan-type-selector.d.ts b/output/tests/src/ui/scanner/scan-type-selector.d.ts new file mode 100644 index 00000000..2f0e1347 --- /dev/null +++ b/output/tests/src/ui/scanner/scan-type-selector.d.ts @@ -0,0 +1,11 @@ +import { Html5QrcodeScanType } from "../../core"; +export declare class ScanTypeSelector { + private supportedScanTypes; + constructor(supportedScanTypes?: Array | []); + getDefaultScanType(): Html5QrcodeScanType; + hasMoreThanOneScanType(): boolean; + isCameraScanRequired(): boolean; + static isCameraScanType(scanType: Html5QrcodeScanType): boolean; + static isFileScanType(scanType: Html5QrcodeScanType): boolean; + private validateAndReturnScanTypes; +} diff --git a/output/tests/src/ui/scanner/scan-type-selector.js b/output/tests/src/ui/scanner/scan-type-selector.js new file mode 100644 index 00000000..ef6d6946 --- /dev/null +++ b/output/tests/src/ui/scanner/scan-type-selector.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ScanTypeSelector = void 0; +const core_1 = require("../../core"); +class ScanTypeSelector { + constructor(supportedScanTypes) { + this.supportedScanTypes = this.validateAndReturnScanTypes(supportedScanTypes); + } + getDefaultScanType() { + return this.supportedScanTypes[0]; + } + hasMoreThanOneScanType() { + return this.supportedScanTypes.length > 1; + } + isCameraScanRequired() { + for (const scanType of this.supportedScanTypes) { + if (ScanTypeSelector.isCameraScanType(scanType)) { + return true; + } + } + return false; + } + static isCameraScanType(scanType) { + return scanType === core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA; + } + static isFileScanType(scanType) { + return scanType === core_1.Html5QrcodeScanType.SCAN_TYPE_FILE; + } + validateAndReturnScanTypes(supportedScanTypes) { + if (!supportedScanTypes || supportedScanTypes.length === 0) { + return core_1.Html5QrcodeConstants.DEFAULT_SUPPORTED_SCAN_TYPE; + } + let maxExpectedValues = core_1.Html5QrcodeConstants.DEFAULT_SUPPORTED_SCAN_TYPE.length; + if (supportedScanTypes.length > maxExpectedValues) { + throw `Max ${maxExpectedValues} values expected for ` + + "supportedScanTypes"; + } + for (const scanType of supportedScanTypes) { + if (!core_1.Html5QrcodeConstants.DEFAULT_SUPPORTED_SCAN_TYPE + .includes(scanType)) { + throw `Unsupported scan type ${scanType}`; + } + } + return supportedScanTypes; + } +} +exports.ScanTypeSelector = ScanTypeSelector; +//# sourceMappingURL=scan-type-selector.js.map \ No newline at end of file diff --git a/output/tests/src/ui/scanner/scan-type-selector.js.map b/output/tests/src/ui/scanner/scan-type-selector.js.map new file mode 100644 index 00000000..a6d57667 --- /dev/null +++ b/output/tests/src/ui/scanner/scan-type-selector.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scan-type-selector.js","sourceRoot":"","sources":["../../../../../src/ui/scanner/scan-type-selector.ts"],"names":[],"mappings":";;;AAUA,qCAGoB;AAGpB,MAAa,gBAAgB;IAGzB,YAAY,kBAAoD;QAC5D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CACrD,kBAAkB,CAAC,CAAC;IAC5B,CAAC;IAMM,kBAAkB;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAMM,sBAAsB;QACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,CAAC;IAGM,oBAAoB;QACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7C,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAGM,MAAM,CAAC,gBAAgB,CAAC,QAA6B;QACxD,OAAO,QAAQ,KAAK,0BAAmB,CAAC,gBAAgB,CAAC;IAC7D,CAAC;IAGM,MAAM,CAAC,cAAc,CAAC,QAA6B;QACtD,OAAO,QAAQ,KAAK,0BAAmB,CAAC,cAAc,CAAC;IAC3D,CAAC;IAQO,0BAA0B,CAC9B,kBAA8C;QAG9C,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,2BAAoB,CAAC,2BAA2B,CAAC;QAC5D,CAAC;QAGD,IAAI,iBAAiB,GACf,2BAAoB,CAAC,2BAA2B,CAAC,MAAM,CAAC;QAC9D,IAAI,kBAAkB,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAChD,MAAM,OAAO,iBAAiB,uBAAuB;kBAC/C,oBAAoB,CAAC;QAC/B,CAAC;QAGD,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,CAAC,2BAAoB,CAAC,2BAA2B;iBAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,MAAM,yBAAyB,QAAQ,EAAE,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC9B,CAAC;CAEJ;AA7ED,4CA6EC"} \ No newline at end of file diff --git a/output/tests/src/ui/scanner/torch-button.d.ts b/output/tests/src/ui/scanner/torch-button.d.ts new file mode 100644 index 00000000..a862a10b --- /dev/null +++ b/output/tests/src/ui/scanner/torch-button.d.ts @@ -0,0 +1,28 @@ +import { BooleanCameraCapability } from "../../camera/core"; +export type OnTorchActionFailureCallback = (failureMessage: string) => void; +interface TorchButtonController { + disable(): void; + enable(): void; + setText(text: string): void; +} +export interface TorchButtonOptions { + display: string; + marginLeft: string; +} +export declare class TorchButton implements TorchButtonController { + private readonly torchButton; + private readonly onTorchActionFailureCallback; + private torchController; + private constructor(); + private render; + updateTorchCapability(torchCapability: BooleanCameraCapability): void; + getTorchButton(): HTMLButtonElement; + hide(): void; + show(): void; + disable(): void; + enable(): void; + setText(text: string): void; + reset(): void; + static create(parentElement: HTMLElement, torchCapability: BooleanCameraCapability, torchButtonOptions: TorchButtonOptions, onTorchActionFailureCallback: OnTorchActionFailureCallback): TorchButton; +} +export {}; diff --git a/output/tests/src/ui/scanner/torch-button.js b/output/tests/src/ui/scanner/torch-button.js new file mode 100644 index 00000000..68232d62 --- /dev/null +++ b/output/tests/src/ui/scanner/torch-button.js @@ -0,0 +1,122 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TorchButton = void 0; +const strings_1 = require("../../strings"); +const base_1 = require("./base"); +class TorchController { + constructor(torchCapability, buttonController, onTorchActionFailureCallback) { + this.isTorchOn = false; + this.torchCapability = torchCapability; + this.buttonController = buttonController; + this.onTorchActionFailureCallback = onTorchActionFailureCallback; + } + isTorchEnabled() { + return this.isTorchOn; + } + flipState() { + return __awaiter(this, void 0, void 0, function* () { + this.buttonController.disable(); + let isTorchOnExpected = !this.isTorchOn; + try { + yield this.torchCapability.apply(isTorchOnExpected); + this.updateUiBasedOnLatestSettings(this.torchCapability.value(), isTorchOnExpected); + } + catch (error) { + this.propagateFailure(isTorchOnExpected, error); + this.buttonController.enable(); + } + }); + } + updateUiBasedOnLatestSettings(isTorchOn, isTorchOnExpected) { + if (isTorchOn === isTorchOnExpected) { + this.buttonController.setText(isTorchOnExpected + ? strings_1.Html5QrcodeScannerStrings.torchOffButton() + : strings_1.Html5QrcodeScannerStrings.torchOnButton()); + this.isTorchOn = isTorchOnExpected; + } + else { + this.propagateFailure(isTorchOnExpected); + } + this.buttonController.enable(); + } + propagateFailure(isTorchOnExpected, error) { + let errorMessage = isTorchOnExpected + ? strings_1.Html5QrcodeScannerStrings.torchOnFailedMessage() + : strings_1.Html5QrcodeScannerStrings.torchOffFailedMessage(); + if (error) { + errorMessage += "; Error = " + error; + } + this.onTorchActionFailureCallback(errorMessage); + } + reset() { + this.isTorchOn = false; + } +} +class TorchButton { + constructor(torchCapability, onTorchActionFailureCallback) { + this.onTorchActionFailureCallback = onTorchActionFailureCallback; + this.torchButton + = base_1.BaseUiElementFactory.createElement("button", base_1.PublicUiElementIdAndClasses.TORCH_BUTTON_ID); + this.torchController = new TorchController(torchCapability, this, onTorchActionFailureCallback); + } + render(parentElement, torchButtonOptions) { + this.torchButton.innerText + = strings_1.Html5QrcodeScannerStrings.torchOnButton(); + this.torchButton.style.display = torchButtonOptions.display; + this.torchButton.style.marginLeft = torchButtonOptions.marginLeft; + let $this = this; + this.torchButton.addEventListener("click", (_) => __awaiter(this, void 0, void 0, function* () { + yield $this.torchController.flipState(); + if ($this.torchController.isTorchEnabled()) { + $this.torchButton.classList.remove(base_1.PublicUiElementIdAndClasses.TORCH_BUTTON_CLASS_TORCH_OFF); + $this.torchButton.classList.add(base_1.PublicUiElementIdAndClasses.TORCH_BUTTON_CLASS_TORCH_ON); + } + else { + $this.torchButton.classList.remove(base_1.PublicUiElementIdAndClasses.TORCH_BUTTON_CLASS_TORCH_ON); + $this.torchButton.classList.add(base_1.PublicUiElementIdAndClasses.TORCH_BUTTON_CLASS_TORCH_OFF); + } + })); + parentElement.appendChild(this.torchButton); + } + updateTorchCapability(torchCapability) { + this.torchController = new TorchController(torchCapability, this, this.onTorchActionFailureCallback); + } + getTorchButton() { + return this.torchButton; + } + hide() { + this.torchButton.style.display = "none"; + } + show() { + this.torchButton.style.display = "inline-block"; + } + disable() { + this.torchButton.disabled = true; + } + enable() { + this.torchButton.disabled = false; + } + setText(text) { + this.torchButton.innerText = text; + } + reset() { + this.torchButton.innerText = strings_1.Html5QrcodeScannerStrings.torchOnButton(); + this.torchController.reset(); + } + static create(parentElement, torchCapability, torchButtonOptions, onTorchActionFailureCallback) { + let button = new TorchButton(torchCapability, onTorchActionFailureCallback); + button.render(parentElement, torchButtonOptions); + return button; + } +} +exports.TorchButton = TorchButton; +//# sourceMappingURL=torch-button.js.map \ No newline at end of file diff --git a/output/tests/src/ui/scanner/torch-button.js.map b/output/tests/src/ui/scanner/torch-button.js.map new file mode 100644 index 00000000..500bdd86 --- /dev/null +++ b/output/tests/src/ui/scanner/torch-button.js.map @@ -0,0 +1 @@ +{"version":3,"file":"torch-button.js","sourceRoot":"","sources":["../../../../../src/ui/scanner/torch-button.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/src/utils.d.ts b/output/tests/src/utils.d.ts new file mode 100644 index 00000000..1b060ed9 --- /dev/null +++ b/output/tests/src/utils.d.ts @@ -0,0 +1,4 @@ +import { Logger } from "./core"; +export declare class VideoConstraintsUtil { + static isMediaStreamConstraintsValid(videoConstraints: MediaTrackConstraints, logger: Logger): boolean; +} diff --git a/output/tests/src/utils.js b/output/tests/src/utils.js new file mode 100644 index 00000000..720e68d6 --- /dev/null +++ b/output/tests/src/utils.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VideoConstraintsUtil = void 0; +class VideoConstraintsUtil { + static isMediaStreamConstraintsValid(videoConstraints, logger) { + if (typeof videoConstraints !== "object") { + const typeofVideoConstraints = typeof videoConstraints; + logger.logError("videoConstraints should be of type object, the " + + `object passed is of type ${typeofVideoConstraints}.`, true); + return false; + } + const bannedKeys = [ + "autoGainControl", + "channelCount", + "echoCancellation", + "latency", + "noiseSuppression", + "sampleRate", + "sampleSize", + "volume" + ]; + const bannedkeysSet = new Set(bannedKeys); + const keysInVideoConstraints = Object.keys(videoConstraints); + for (const key of keysInVideoConstraints) { + if (bannedkeysSet.has(key)) { + logger.logError(`${key} is not supported videoConstaints.`, true); + return false; + } + } + return true; + } +} +exports.VideoConstraintsUtil = VideoConstraintsUtil; +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/output/tests/src/utils.js.map b/output/tests/src/utils.js.map new file mode 100644 index 00000000..6f3a00f3 --- /dev/null +++ b/output/tests/src/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":";;;AAeA,MAAa,oBAAoB;IACtB,MAAM,CAAC,6BAA6B,CACvC,gBAAuC,EACvC,MAAc;QACd,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,sBAAsB,GAAG,OAAO,gBAAgB,CAAC;YACvD,MAAM,CAAC,QAAQ,CACX,iDAAiD;kBAC3C,4BAA4B,sBAAsB,GAAG,EACvC,IAAI,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QAGD,MAAM,UAAU,GAAG;YACf,iBAAiB;YACjB,cAAc;YACd,kBAAkB;YAClB,SAAS;YACT,kBAAkB;YAClB,YAAY;YACZ,YAAY;YACZ,QAAQ;SACX,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,KAAK,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;YACvC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,CACX,GAAG,GAAG,oCAAoC,EACtB,IAAI,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AArCD,oDAqCC"} \ No newline at end of file diff --git a/output/tests/src/zxing-html5-qrcode-decoder.d.ts b/output/tests/src/zxing-html5-qrcode-decoder.d.ts new file mode 100644 index 00000000..411d3771 --- /dev/null +++ b/output/tests/src/zxing-html5-qrcode-decoder.d.ts @@ -0,0 +1,15 @@ +import { QrcodeResult, Html5QrcodeSupportedFormats, Logger, QrcodeDecoderAsync } from "./core"; +export declare class ZXingHtml5QrcodeDecoder implements QrcodeDecoderAsync { + private readonly formatMap; + private readonly reverseFormatMap; + private hints; + private verbose; + private logger; + constructor(requestedFormats: Array, verbose: boolean, logger: Logger); + decodeAsync(canvas: HTMLCanvasElement): Promise; + private decode; + private createReverseFormatMap; + private toHtml5QrcodeSupportedFormats; + private createZXingFormats; + private createDebugData; +} diff --git a/output/tests/src/zxing-html5-qrcode-decoder.js b/output/tests/src/zxing-html5-qrcode-decoder.js new file mode 100644 index 00000000..f2d72d1d --- /dev/null +++ b/output/tests/src/zxing-html5-qrcode-decoder.js @@ -0,0 +1,106 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZXingHtml5QrcodeDecoder = void 0; +const ZXing = require("../third_party/zxing-js.umd"); +const core_1 = require("./core"); +class ZXingHtml5QrcodeDecoder { + constructor(requestedFormats, verbose, logger) { + this.formatMap = new Map([ + [core_1.Html5QrcodeSupportedFormats.QR_CODE, ZXing.BarcodeFormat.QR_CODE], + [core_1.Html5QrcodeSupportedFormats.AZTEC, ZXing.BarcodeFormat.AZTEC], + [core_1.Html5QrcodeSupportedFormats.CODABAR, ZXing.BarcodeFormat.CODABAR], + [core_1.Html5QrcodeSupportedFormats.CODE_39, ZXing.BarcodeFormat.CODE_39], + [core_1.Html5QrcodeSupportedFormats.CODE_93, ZXing.BarcodeFormat.CODE_93], + [ + core_1.Html5QrcodeSupportedFormats.CODE_128, + ZXing.BarcodeFormat.CODE_128 + ], + [ + core_1.Html5QrcodeSupportedFormats.DATA_MATRIX, + ZXing.BarcodeFormat.DATA_MATRIX + ], + [ + core_1.Html5QrcodeSupportedFormats.MAXICODE, + ZXing.BarcodeFormat.MAXICODE + ], + [core_1.Html5QrcodeSupportedFormats.ITF, ZXing.BarcodeFormat.ITF], + [core_1.Html5QrcodeSupportedFormats.EAN_13, ZXing.BarcodeFormat.EAN_13], + [core_1.Html5QrcodeSupportedFormats.EAN_8, ZXing.BarcodeFormat.EAN_8], + [core_1.Html5QrcodeSupportedFormats.PDF_417, ZXing.BarcodeFormat.PDF_417], + [core_1.Html5QrcodeSupportedFormats.RSS_14, ZXing.BarcodeFormat.RSS_14], + [ + core_1.Html5QrcodeSupportedFormats.RSS_EXPANDED, + ZXing.BarcodeFormat.RSS_EXPANDED + ], + [core_1.Html5QrcodeSupportedFormats.UPC_A, ZXing.BarcodeFormat.UPC_A], + [core_1.Html5QrcodeSupportedFormats.UPC_E, ZXing.BarcodeFormat.UPC_E], + [ + core_1.Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION, + ZXing.BarcodeFormat.UPC_EAN_EXTENSION + ] + ]); + this.reverseFormatMap = this.createReverseFormatMap(); + if (!ZXing) { + throw "Use html5qrcode.min.js without edit, ZXing not found."; + } + this.verbose = verbose; + this.logger = logger; + const formats = this.createZXingFormats(requestedFormats); + const hints = new Map(); + hints.set(ZXing.DecodeHintType.POSSIBLE_FORMATS, formats); + hints.set(ZXing.DecodeHintType.TRY_HARDER, false); + this.hints = hints; + } + decodeAsync(canvas) { + return new Promise((resolve, reject) => { + try { + resolve(this.decode(canvas)); + } + catch (error) { + reject(error); + } + }); + } + decode(canvas) { + const zxingDecoder = new ZXing.MultiFormatReader(this.verbose, this.hints); + const luminanceSource = new ZXing.HTMLCanvasElementLuminanceSource(canvas); + const binaryBitmap = new ZXing.BinaryBitmap(new ZXing.HybridBinarizer(luminanceSource)); + let result = zxingDecoder.decode(binaryBitmap); + return { + text: result.text, + format: core_1.QrcodeResultFormat.create(this.toHtml5QrcodeSupportedFormats(result.format)), + debugData: this.createDebugData() + }; + } + createReverseFormatMap() { + let result = new Map(); + this.formatMap.forEach((value, key, _) => { + result.set(value, key); + }); + return result; + } + toHtml5QrcodeSupportedFormats(zxingFormat) { + if (!this.reverseFormatMap.has(zxingFormat)) { + throw `reverseFormatMap doesn't have ${zxingFormat}`; + } + return this.reverseFormatMap.get(zxingFormat); + } + createZXingFormats(requestedFormats) { + let zxingFormats = []; + for (const requestedFormat of requestedFormats) { + if (this.formatMap.has(requestedFormat)) { + zxingFormats.push(this.formatMap.get(requestedFormat)); + } + else { + this.logger.logError(`${requestedFormat} is not supported by` + + "ZXingHtml5QrcodeShim"); + } + } + return zxingFormats; + } + createDebugData() { + return { decoderName: "zxing-js" }; + } +} +exports.ZXingHtml5QrcodeDecoder = ZXingHtml5QrcodeDecoder; +//# sourceMappingURL=zxing-html5-qrcode-decoder.js.map \ No newline at end of file diff --git a/output/tests/src/zxing-html5-qrcode-decoder.js.map b/output/tests/src/zxing-html5-qrcode-decoder.js.map new file mode 100644 index 00000000..cec1d188 --- /dev/null +++ b/output/tests/src/zxing-html5-qrcode-decoder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zxing-html5-qrcode-decoder.js","sourceRoot":"","sources":["../../../src/zxing-html5-qrcode-decoder.ts"],"names":[],"mappings":";;;AAYA,qDAAqD;AAErD,iCAOgB;AAKhB,MAAa,uBAAuB;IAuChC,YACI,gBAAoD,EACpD,OAAgB,EAChB,MAAc;QAxCD,cAAS,GACpB,IAAI,GAAG,CAAC;YACN,CAAC,kCAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAE;YACnE,CAAC,kCAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAE;YAC/D,CAAC,kCAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAE;YACnE,CAAC,kCAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAE;YACnE,CAAC,kCAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAE;YACnE;gBACI,kCAA2B,CAAC,QAAQ;gBACpC,KAAK,CAAC,aAAa,CAAC,QAAQ;aAAE;YAClC;gBACI,kCAA2B,CAAC,WAAW;gBACvC,KAAK,CAAC,aAAa,CAAC,WAAW;aAAE;YACrC;gBACI,kCAA2B,CAAC,QAAQ;gBACpC,KAAK,CAAC,aAAa,CAAC,QAAQ;aAAE;YAClC,CAAC,kCAA2B,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAE;YAC3D,CAAC,kCAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAE;YACjE,CAAC,kCAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAE;YAC/D,CAAC,kCAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAE;YACnE,CAAC,kCAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAE;YACjE;gBACI,kCAA2B,CAAC,YAAY;gBACxC,KAAK,CAAC,aAAa,CAAC,YAAY;aAAE;YACtC,CAAC,kCAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAE;YAC/D,CAAC,kCAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAE;YAC/D;gBACI,kCAA2B,CAAC,iBAAiB;gBAC7C,KAAK,CAAC,aAAa,CAAC,iBAAiB;aAAE;SAC9C,CAAC,CAAC;QACU,qBAAgB,GAC3B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAUhC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,uDAAuD,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE1D,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAGD,WAAW,CAAC,MAAyB;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAC,MAAyB;QAQpC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,eAAe,GACf,IAAI,KAAK,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,YAAY,GACZ,IAAI,KAAK,CAAC,YAAY,CACpB,IAAI,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;QACpD,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,yBAAkB,CAAC,MAAM,CAC7B,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;SACxC,CAAC;IACN,CAAC;IAEO,sBAAsB;QAC1B,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAClB,CAAC,KAAU,EAAE,GAAgC,EAAE,CAAC,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,6BAA6B,CAAC,WAAgB;QAElD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,MAAM,iCAAiC,WAAW,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;IACnD,CAAC;IAEO,kBAAkB,CACtB,gBAAoD;QAEhD,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;gBACtC,YAAY,CAAC,IAAI,CACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,eAAe,sBAAsB;sBACvD,sBAAsB,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;QACD,OAAO,YAAY,CAAC;IAC5B,CAAC;IAEO,eAAe;QACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;CACJ;AAhID,0DAgIC"} \ No newline at end of file diff --git a/output/tests/tests/core.test.d.ts b/output/tests/tests/core.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/core.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/core.test.js b/output/tests/tests/core.test.js new file mode 100644 index 00000000..7818647a --- /dev/null +++ b/output/tests/tests/core.test.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const core_1 = require("../src/core"); +describe("isValidHtml5QrcodeSupportedFormats function", () => { + it("should return true for supported formats", () => { + (0, chai_1.expect)((0, core_1.isValidHtml5QrcodeSupportedFormats)("AZTEC")).to.be.true; + (0, chai_1.expect)((0, core_1.isValidHtml5QrcodeSupportedFormats)("QR_CODE")).to.be.true; + (0, chai_1.expect)((0, core_1.isValidHtml5QrcodeSupportedFormats)("UPC_A")).to.be.true; + (0, chai_1.expect)((0, core_1.isValidHtml5QrcodeSupportedFormats)("EAN_8")).to.be.true; + }); + it("should return false for unsupported formats", () => { + (0, chai_1.expect)((0, core_1.isValidHtml5QrcodeSupportedFormats)("random")).to.be.false; + (0, chai_1.expect)((0, core_1.isValidHtml5QrcodeSupportedFormats)("")).to.be.false; + }); +}); +describe("QrcodeResultFormat class", () => { + it("toString() should return correct string value", () => { + let qrcodeResultFormat = core_1.QrcodeResultFormat.create(core_1.Html5QrcodeSupportedFormats.AZTEC); + (0, chai_1.expect)(qrcodeResultFormat.toString()).to.equal("AZTEC"); + qrcodeResultFormat = core_1.QrcodeResultFormat.create(core_1.Html5QrcodeSupportedFormats.DATA_MATRIX); + (0, chai_1.expect)(qrcodeResultFormat.toString()).to.equal("DATA_MATRIX"); + }); +}); +describe("Html5QrcodeResultFactory class", () => { + it("createFromText has result and decodedText", () => { + let decodedText = "hello"; + let qrcodeResult = core_1.Html5QrcodeResultFactory.createFromText(decodedText); + (0, chai_1.expect)(qrcodeResult.decodedText).to.equal(decodedText); + (0, chai_1.expect)(qrcodeResult.result.text).to.equal(decodedText); + }); + it("createFromQrcodeResult has result and decodedText", () => { + let decodedText = "https://scanapp.org"; + let inputQrcodeResult = { + text: decodedText, + format: core_1.QrcodeResultFormat.create(core_1.Html5QrcodeSupportedFormats.DATA_MATRIX), + decodedTextType: core_1.DecodedTextType.URL + }; + let qrcodeResult = core_1.Html5QrcodeResultFactory.createFromQrcodeResult(inputQrcodeResult); + (0, chai_1.expect)(qrcodeResult.decodedText).to.equal(decodedText); + (0, chai_1.expect)(qrcodeResult.result).to.equal(inputQrcodeResult); + }); +}); +describe("Html5QrcodeErrorFactory class", () => { + it("createFrom() creates corresponding error object", () => { + let error = "test error message"; + let qrcodeError = core_1.Html5QrcodeErrorFactory.createFrom(error); + (0, chai_1.expect)(qrcodeError.errorMessage).to.equal(error); + (0, chai_1.expect)(qrcodeError.type).to.equal(core_1.Html5QrcodeErrorTypes.UNKWOWN_ERROR); + }); +}); +describe("isNullOrUndefined function", () => { + it("obj is null, undefined, returns true", () => { + (0, chai_1.expect)((0, core_1.isNullOrUndefined)(null)).to.be.true; + let obj; + (0, chai_1.expect)((0, core_1.isNullOrUndefined)(obj)).to.be.true; + obj = undefined; + (0, chai_1.expect)((0, core_1.isNullOrUndefined)(obj)).to.be.true; + }); + it("obj is defined, returns true", () => { + let obj = "something"; + (0, chai_1.expect)((0, core_1.isNullOrUndefined)(obj)).to.be.false; + (0, chai_1.expect)((0, core_1.isNullOrUndefined)(0)).to.be.false; + (0, chai_1.expect)((0, core_1.isNullOrUndefined)(-1)).to.be.false; + (0, chai_1.expect)((0, core_1.isNullOrUndefined)("undefined")).to.be.false; + }); +}); +describe("clip function", () => { + it("in range, returns the value", () => { + (0, chai_1.expect)((0, core_1.clip)(5, 0, 10)).eq(5); + }); + it("below min, returns the min value", () => { + (0, chai_1.expect)((0, core_1.clip)(-5, 0, 10)).eq(0); + }); + it("above max, return the max value", () => { + (0, chai_1.expect)((0, core_1.clip)(11, 0, 10)).eq(10); + }); +}); +//# sourceMappingURL=core.test.js.map \ No newline at end of file diff --git a/output/tests/tests/core.test.js.map b/output/tests/tests/core.test.js.map new file mode 100644 index 00000000..657a08fa --- /dev/null +++ b/output/tests/tests/core.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.test.js","sourceRoot":"","sources":["../../../tests/core.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/base.test.d.ts b/output/tests/tests/ui/scanner/base.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/ui/scanner/base.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/ui/scanner/base.test.js b/output/tests/tests/ui/scanner/base.test.js new file mode 100644 index 00000000..d3cb3846 --- /dev/null +++ b/output/tests/tests/ui/scanner/base.test.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const base_1 = require("../../../src/ui/scanner/base"); +describe("BaseUiElementFactory#createElement()", () => { + it("Creates requested element - Button", () => { + let button = base_1.BaseUiElementFactory.createElement("button", "testId"); + (0, chai_1.expect)(button).to.be.an.instanceOf(HTMLButtonElement); + }); + it("Creates requested element - Select", () => { + let select = base_1.BaseUiElementFactory.createElement("select", "testId"); + (0, chai_1.expect)(select).to.be.an.instanceOf(HTMLSelectElement); + }); + it("Creates element with expected ID", () => { + const expectedId = "test-id"; + let button = base_1.BaseUiElementFactory.createElement("button", expectedId); + (0, chai_1.expect)(button.id).eq(expectedId); + }); + it("Creates element with common class", () => { + let button = base_1.BaseUiElementFactory.createElement("button", "test-id"); + let hasClass = button.classList.contains(base_1.PublicUiElementIdAndClasses.ALL_ELEMENT_CLASS); + (0, chai_1.expect)(hasClass).to.be.true; + }); + it("Creates button element with button type attribute", () => { + let button = base_1.BaseUiElementFactory.createElement("button", "test-id"); + let typeAttributeValue = button.getAttribute("type"); + (0, chai_1.expect)(typeAttributeValue).eq("button"); + }); + it("Creates select element without type attribute", () => { + let select = base_1.BaseUiElementFactory.createElement("select", "test-id"); + let typeAttributeValue = select.getAttribute("type"); + (0, chai_1.expect)(typeAttributeValue).to.be.null; + }); +}); +//# sourceMappingURL=base.test.js.map \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/base.test.js.map b/output/tests/tests/ui/scanner/base.test.js.map new file mode 100644 index 00000000..96741a1d --- /dev/null +++ b/output/tests/tests/ui/scanner/base.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base.test.js","sourceRoot":"","sources":["../../../../../tests/ui/scanner/base.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,uDAGsC;AAEtC,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAElD,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,IAAI,MAAM,GAAG,2BAAoB,CAAC,aAAa,CAC3C,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxB,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,IAAI,MAAM,GAAG,2BAAoB,CAAC,aAAa,CAC3C,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxB,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG,SAAS,CAAC;QAC7B,IAAI,MAAM,GAAG,2BAAoB,CAAC,aAAa,CAC3C,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC1B,IAAA,aAAM,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,IAAI,MAAM,GAAG,2BAAoB,CAAC,aAAa,CAC3C,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzB,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CACpC,kCAA2B,CAAC,iBAAiB,CAAC,CAAC;QAEnD,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,IAAI,MAAM,GAAG,2BAAoB,CAAC,aAAa,CAC3C,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzB,IAAI,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAErD,IAAA,aAAM,EAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,IAAI,MAAM,GAAG,2BAAoB,CAAC,aAAa,CAC3C,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzB,IAAI,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAErD,IAAA,aAAM,EAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/camera-selection-ui.test.d.ts b/output/tests/tests/ui/scanner/camera-selection-ui.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/ui/scanner/camera-selection-ui.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/ui/scanner/camera-selection-ui.test.js b/output/tests/tests/ui/scanner/camera-selection-ui.test.js new file mode 100644 index 00000000..d8eb26bd --- /dev/null +++ b/output/tests/tests/ui/scanner/camera-selection-ui.test.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const camera_selection_ui_1 = require("../../../src/ui/scanner/camera-selection-ui"); +const base_1 = require("../../../src/ui/scanner/base"); +function createCameraList(count) { + let cameras = []; + for (let i = 0; i < count; ++i) { + cameras.push({ id: `camera-${i}`, label: `camera-${i}-label` }); + } + return cameras; +} +describe("CameraSelectionUi#create()", () => { + let parentElement; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement.innerHTML = ""; + parentElement = undefined; + }); + it("Multiple cameras, creates the camera selection", () => { + let numCameras = 3; + let cameras = createCameraList(numCameras); + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + let selection = document.getElementById(base_1.PublicUiElementIdAndClasses.CAMERA_SELECTION_SELECT_ID); + (0, chai_1.expect)(selection).to.be.instanceOf(HTMLSelectElement); + (0, chai_1.expect)(cameraSelectUi.numCameras()).eq(numCameras); + (0, chai_1.expect)(cameraSelectUi.hasSingleItem()).to.be.false; + }); + it("Single cameras, creates the camera selection", () => { + parentElement.innerHTML = ""; + let numCameras = 1; + let cameras = createCameraList(numCameras); + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + let selection = document.getElementById(base_1.PublicUiElementIdAndClasses.CAMERA_SELECTION_SELECT_ID); + (0, chai_1.expect)(selection).to.be.instanceOf(HTMLSelectElement); + (0, chai_1.expect)(cameraSelectUi.numCameras()).eq(numCameras); + (0, chai_1.expect)(cameraSelectUi.hasSingleItem()).to.be.true; + }); + it("No cameras, fails", () => { + let numCameras = 0; + let cameras = createCameraList(numCameras); + (0, chai_1.expect)(() => { + let _ = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + }).to.throw(); + }); +}); +describe("CameraSelectionUi#enable() & disable()", () => { + let parentElement; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement.innerHTML = ""; + parentElement = undefined; + }); + it("enable(), enables", () => { + let numCameras = 3; + let cameras = createCameraList(numCameras); + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + cameraSelectUi.enable(); + (0, chai_1.expect)(cameraSelectUi.isDisabled()).to.be.false; + cameraSelectUi.disable(); + cameraSelectUi.enable(); + (0, chai_1.expect)(cameraSelectUi.isDisabled()).to.be.false; + }); + it("disable(), disables", () => { + let numCameras = 3; + let cameras = createCameraList(numCameras); + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + cameraSelectUi.disable(); + (0, chai_1.expect)(cameraSelectUi.isDisabled()).to.be.true; + cameraSelectUi.enable(); + cameraSelectUi.disable(); + (0, chai_1.expect)(cameraSelectUi.isDisabled()).to.be.true; + }); +}); +describe("CameraSelectionUi setting and getting values", () => { + let parentElement; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement.innerHTML = ""; + parentElement = undefined; + }); + it("setValue sets value if present else fails", () => { + let numCameras = 3; + let cameras = createCameraList(numCameras); + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + (0, chai_1.expect)(cameraSelectUi.getValue()).eq(cameras[0].id); + cameraSelectUi.setValue(cameras[1].id); + (0, chai_1.expect)(cameraSelectUi.getValue()).eq(cameras[1].id); + (0, chai_1.expect)(() => { + cameraSelectUi.setValue("random string"); + }).to.throw; + }); + it("hasValue() returns true for valid case else fails", () => { + let numCameras = 3; + let cameras = createCameraList(numCameras); + let cameraSelectUi = camera_selection_ui_1.CameraSelectionUi.create(parentElement, cameras); + (0, chai_1.expect)(cameraSelectUi.hasValue(cameras[1].id)).to.be.true; + (0, chai_1.expect)(cameraSelectUi.hasValue("random string")).to.be.false; + }); +}); +//# sourceMappingURL=camera-selection-ui.test.js.map \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/camera-selection-ui.test.js.map b/output/tests/tests/ui/scanner/camera-selection-ui.test.js.map new file mode 100644 index 00000000..32db3515 --- /dev/null +++ b/output/tests/tests/ui/scanner/camera-selection-ui.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"camera-selection-ui.test.js","sourceRoot":"","sources":["../../../../../tests/ui/scanner/camera-selection-ui.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/camera-zoom-ui.test.d.ts b/output/tests/tests/ui/scanner/camera-zoom-ui.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/ui/scanner/camera-zoom-ui.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/ui/scanner/camera-zoom-ui.test.js b/output/tests/tests/ui/scanner/camera-zoom-ui.test.js new file mode 100644 index 00000000..503b26c0 --- /dev/null +++ b/output/tests/tests/ui/scanner/camera-zoom-ui.test.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const camera_zoom_ui_1 = require("../../../src/ui/scanner/camera-zoom-ui"); +const base_1 = require("../../../src/ui/scanner/base"); +describe("CameraZoomUi#create()", () => { + let parentElement; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement = undefined; + }); + it("creates the button element", () => { + let renderOnCreate = true; + let unusedUi = camera_zoom_ui_1.CameraZoomUi.create(parentElement, renderOnCreate); + let slider = document.getElementById(base_1.PublicUiElementIdAndClasses.ZOOM_SLIDER_ID); + (0, chai_1.expect)(slider).to.be.instanceOf(HTMLInputElement); + }); +}); +describe("CameraZoomUi#setValues()", () => { + let parentElement; + let renderOnCreate = true; + let minValue = 1; + let maxValue = 10; + let defaultValue = 5; + let step = 0.5; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement = undefined; + }); + it("setValues sets the val", () => { + let cameraZoomUi = camera_zoom_ui_1.CameraZoomUi.create(parentElement, renderOnCreate); + let slider = document.getElementById(base_1.PublicUiElementIdAndClasses.ZOOM_SLIDER_ID); + (0, chai_1.expect)(slider.min).eq("1"); + (0, chai_1.expect)(slider.max).eq("5"); + (0, chai_1.expect)(slider.value).eq("1"); + (0, chai_1.expect)(slider.step).eq("0.1"); + let defaultValue = 5; + cameraZoomUi.setValues(minValue, maxValue, defaultValue, step); + (0, chai_1.expect)(slider.min).eq(minValue.toString()); + (0, chai_1.expect)(slider.max).eq(maxValue.toString()); + (0, chai_1.expect)(slider.value).eq(defaultValue.toString()); + (0, chai_1.expect)(slider.step).eq(step.toString()); + }); +}); +//# sourceMappingURL=camera-zoom-ui.test.js.map \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/camera-zoom-ui.test.js.map b/output/tests/tests/ui/scanner/camera-zoom-ui.test.js.map new file mode 100644 index 00000000..a9f17eda --- /dev/null +++ b/output/tests/tests/ui/scanner/camera-zoom-ui.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"camera-zoom-ui.test.js","sourceRoot":"","sources":["../../../../../tests/ui/scanner/camera-zoom-ui.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/file-selection-ui.test.d.ts b/output/tests/tests/ui/scanner/file-selection-ui.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/ui/scanner/file-selection-ui.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/ui/scanner/file-selection-ui.test.js b/output/tests/tests/ui/scanner/file-selection-ui.test.js new file mode 100644 index 00000000..8a0aea0d --- /dev/null +++ b/output/tests/tests/ui/scanner/file-selection-ui.test.js @@ -0,0 +1,85 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const file_selection_ui_1 = require("../../../src/ui/scanner/file-selection-ui"); +const base_1 = require("../../../src/ui/scanner/base"); +describe("FileSelectionUi#constructor()", () => { + let parentElement; + let noOpFileSelected = (_) => { }; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement = undefined; + }); + it("Have expected public elements", () => { + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, false, noOpFileSelected); + let fileButton = document.getElementById(base_1.PublicUiElementIdAndClasses.FILE_SELECTION_BUTTON_ID); + (0, chai_1.expect)(fileButton).to.be.instanceOf(HTMLButtonElement); + }); + it("Hidden if showOnRender is false", () => { + let showOnRender = false; + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, showOnRender, noOpFileSelected); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.false; + }); + it("Not Hidden if showOnRender is true", () => { + let showOnRender = true; + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, showOnRender, noOpFileSelected); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.true; + }); +}); +describe("FileSelectionUi#hide()", () => { + let parentElement; + let noOpFileSelected = (_) => { }; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement = undefined; + }); + it("Hide the scan region, when showing earlier", () => { + let showOnRender = true; + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, showOnRender, noOpFileSelected); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.true; + fileSelectionUi.hide(); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.false; + }); + it("Hide the scan region, when hidden earlier", () => { + let showOnRender = false; + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, showOnRender, noOpFileSelected); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.false; + fileSelectionUi.hide(); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.false; + }); +}); +describe("FileSelectionUi#show()", () => { + let parentElement; + let noOpFileSelected = (_) => { }; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement = undefined; + }); + it("Show the scan region, when not showing earlier", () => { + let showOnRender = false; + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, showOnRender, noOpFileSelected); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.false; + fileSelectionUi.show(); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.true; + }); + it("Show the scan region, when showing earlier", () => { + let showOnRender = true; + let fileSelectionUi = file_selection_ui_1.FileSelectionUi.create(parentElement, showOnRender, noOpFileSelected); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.true; + fileSelectionUi.show(); + (0, chai_1.expect)(fileSelectionUi.isShowing()).to.be.true; + }); +}); +//# sourceMappingURL=file-selection-ui.test.js.map \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/file-selection-ui.test.js.map b/output/tests/tests/ui/scanner/file-selection-ui.test.js.map new file mode 100644 index 00000000..92a64afd --- /dev/null +++ b/output/tests/tests/ui/scanner/file-selection-ui.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-selection-ui.test.js","sourceRoot":"","sources":["../../../../../tests/ui/scanner/file-selection-ui.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/scan-type-selector.test.d.ts b/output/tests/tests/ui/scanner/scan-type-selector.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/ui/scanner/scan-type-selector.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/ui/scanner/scan-type-selector.test.js b/output/tests/tests/ui/scanner/scan-type-selector.test.js new file mode 100644 index 00000000..fed9df60 --- /dev/null +++ b/output/tests/tests/ui/scanner/scan-type-selector.test.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const core_1 = require("../../../src/core"); +const scan_type_selector_1 = require("../../../src/ui/scanner/scan-type-selector"); +describe("ScanTypeSelector#getDefaultScanType()", () => { + it("Camera + File returns camera", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA, + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE + ]); + (0, chai_1.expect)(selector.getDefaultScanType()).to.equal(core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA); + }); + it("File + Camera returns camera", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE, + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA + ]); + (0, chai_1.expect)(selector.getDefaultScanType()).to.equal(core_1.Html5QrcodeScanType.SCAN_TYPE_FILE); + }); + it("Camera returns camera", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA + ]); + (0, chai_1.expect)(selector.getDefaultScanType()).to.equal(core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA); + }); + it("File returns camera", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE + ]); + (0, chai_1.expect)(selector.getDefaultScanType()).to.equal(core_1.Html5QrcodeScanType.SCAN_TYPE_FILE); + }); +}); +describe("ScanTypeSelector#hasMoreThanOneScanType()", () => { + it("Both values set - returns true", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA, + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE + ]); + (0, chai_1.expect)(selector.hasMoreThanOneScanType()).to.be.true; + selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE, + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA + ]); + (0, chai_1.expect)(selector.hasMoreThanOneScanType()).to.be.true; + }); + it("Single value set - returns true", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA + ]); + (0, chai_1.expect)(selector.hasMoreThanOneScanType()).to.be.false; + selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE + ]); + (0, chai_1.expect)(selector.hasMoreThanOneScanType()).to.be.false; + }); +}); +describe("ScanTypeSelector#isCameraScanRequired()", () => { + it("Both values set - returns true", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA, + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE + ]); + (0, chai_1.expect)(selector.isCameraScanRequired()).to.be.true; + selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE, + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA + ]); + (0, chai_1.expect)(selector.isCameraScanRequired()).to.be.true; + }); + it("Camera only set - returns true", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA + ]); + (0, chai_1.expect)(selector.isCameraScanRequired()).to.be.true; + }); + it("File only set - returns false", () => { + let selector = new scan_type_selector_1.ScanTypeSelector([ + core_1.Html5QrcodeScanType.SCAN_TYPE_FILE + ]); + (0, chai_1.expect)(selector.isCameraScanRequired()).to.be.false; + }); +}); +describe("ScanTypeSelector#isCameraScanType()", () => { + it("Camera passed - returns true", () => { + (0, chai_1.expect)(scan_type_selector_1.ScanTypeSelector.isCameraScanType(core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA)).to.be.true; + }); + it("File passed - returns false", () => { + (0, chai_1.expect)(scan_type_selector_1.ScanTypeSelector.isCameraScanType(core_1.Html5QrcodeScanType.SCAN_TYPE_FILE)).to.be.false; + }); +}); +describe("ScanTypeSelector#isFileScanType()", () => { + it("Camera passed - returns false", () => { + (0, chai_1.expect)(scan_type_selector_1.ScanTypeSelector.isFileScanType(core_1.Html5QrcodeScanType.SCAN_TYPE_CAMERA)).to.be.false; + }); + it("File passed - returns true", () => { + (0, chai_1.expect)(scan_type_selector_1.ScanTypeSelector.isFileScanType(core_1.Html5QrcodeScanType.SCAN_TYPE_FILE)).to.be.true; + }); +}); +//# sourceMappingURL=scan-type-selector.test.js.map \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/scan-type-selector.test.js.map b/output/tests/tests/ui/scanner/scan-type-selector.test.js.map new file mode 100644 index 00000000..795d7125 --- /dev/null +++ b/output/tests/tests/ui/scanner/scan-type-selector.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scan-type-selector.test.js","sourceRoot":"","sources":["../../../../../tests/ui/scanner/scan-type-selector.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,4CAAwD;AACxD,mFAA8E;AAE9E,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,gBAAgB;YACpC,0BAAmB,CAAC,cAAc;SAAC,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAC1C,0BAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,cAAc;YAClC,0BAAmB,CAAC,gBAAgB;SAAC,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAC1C,0BAAmB,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC7B,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,gBAAgB;SAAC,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAC1C,0BAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC3B,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,cAAc;SAAC,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAC1C,0BAAmB,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,gBAAgB;YACpC,0BAAmB,CAAC,cAAc;SAAC,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAErD,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAC5B,0BAAmB,CAAC,cAAc;YAClC,0BAAmB,CAAC,gBAAgB;SAAC,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,gBAAgB;SAAC,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEtD,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAC5B,0BAAmB,CAAC,cAAc;SAAC,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,gBAAgB;YACpC,0BAAmB,CAAC,cAAc;SAAC,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEnD,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAC5B,0BAAmB,CAAC,cAAc;YAClC,0BAAmB,CAAC,gBAAgB;SAAC,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,gBAAgB;SAAC,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,IAAI,QAAQ,GAAG,IAAI,qCAAgB,CAAC;YAChC,0BAAmB,CAAC,cAAc;SAAC,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,IAAA,aAAM,EAAC,qCAAgB,CAAC,gBAAgB,CACpC,0BAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,IAAA,aAAM,EAAC,qCAAgB,CAAC,gBAAgB,CACpC,0BAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,IAAA,aAAM,EAAC,qCAAgB,CAAC,cAAc,CAClC,0BAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,IAAA,aAAM,EAAC,qCAAgB,CAAC,cAAc,CAClC,0BAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/torch-button.test.d.ts b/output/tests/tests/ui/scanner/torch-button.test.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/output/tests/tests/ui/scanner/torch-button.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/output/tests/tests/ui/scanner/torch-button.test.js b/output/tests/tests/ui/scanner/torch-button.test.js new file mode 100644 index 00000000..076c5a8c --- /dev/null +++ b/output/tests/tests/ui/scanner/torch-button.test.js @@ -0,0 +1,85 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chai_1 = require("chai"); +const torch_button_1 = require("../../../src/ui/scanner/torch-button"); +const base_1 = require("../../../src/ui/scanner/base"); +class FakeTorchCapability { + constructor(value) { + this.capabilityValue = value; + } + apply(value) { + this.capabilityValue = value; + return Promise.resolve(); + } + value() { + return this.capabilityValue; + } + isSupported() { + return true; + } +} +describe("TorchButton#create()", () => { + let parentElement; + let torchCapability; + let noOpFailureCallback; + let options = { display: "inline-block", marginLeft: "10px" }; + before(() => { + parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + torchCapability = new FakeTorchCapability(true); + }); + after(() => { + document.body.removeChild(parentElement); + parentElement = undefined; + torchCapability = undefined; + }); + it("create() creates instance", () => { + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + let torchButton = document.getElementById(base_1.PublicUiElementIdAndClasses.TORCH_BUTTON_ID); + (0, chai_1.expect)(torchButton).to.be.instanceOf(HTMLButtonElement); + }); + it("create() creates instance, getTorchButton() returns button.", () => { + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + let torchButton = button.getTorchButton(); + (0, chai_1.expect)(torchButton).to.be.instanceOf(HTMLButtonElement); + }); + it("show() & hide() works.", () => { + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + let torchButton = button.getTorchButton(); + (0, chai_1.expect)(torchButton.style.display).eq("inline-block"); + button.hide(); + (0, chai_1.expect)(torchButton.style.display).eq("none"); + button.show(); + (0, chai_1.expect)(torchButton.style.display).eq("inline-block"); + }); + it("created with hidden torchButtonOptions, button is hidden.", () => { + let options = { display: "none", marginLeft: "10px" }; + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + let torchButton = button.getTorchButton(); + (0, chai_1.expect)(torchButton.style.display).eq("none"); + }); + it("disable() & enable() works.", () => { + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + let torchButton = button.getTorchButton(); + button.disable(); + (0, chai_1.expect)(torchButton.disabled).to.be.true; + button.enable(); + (0, chai_1.expect)(torchButton.disabled).to.be.false; + }); + it("setText() sets the text.", () => { + let text = "custom text"; + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + button.setText(text); + let torchButton = button.getTorchButton(); + (0, chai_1.expect)(torchButton.innerText).eq(text); + }); + it("reset() resets the text.", () => { + let text = "custom text"; + let button = torch_button_1.TorchButton.create(parentElement, torchCapability, options, noOpFailureCallback); + button.setText(text); + button.reset(); + let torchButton = button.getTorchButton(); + (0, chai_1.expect)(torchButton.innerText).not.eq(text); + }); +}); +//# sourceMappingURL=torch-button.test.js.map \ No newline at end of file diff --git a/output/tests/tests/ui/scanner/torch-button.test.js.map b/output/tests/tests/ui/scanner/torch-button.test.js.map new file mode 100644 index 00000000..ee5d821e --- /dev/null +++ b/output/tests/tests/ui/scanner/torch-button.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"torch-button.test.js","sourceRoot":"","sources":["../../../../../tests/ui/scanner/torch-button.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/output/tests/tsconfig.test.tsbuildinfo b/output/tests/tsconfig.test.tsbuildinfo new file mode 100644 index 00000000..24633a32 --- /dev/null +++ b/output/tests/tsconfig.test.tsbuildinfo @@ -0,0 +1 @@ +{"root":["../../src/index.ts","../../tests/core.test.ts","../../tests/ui/scanner/base.test.ts","../../tests/ui/scanner/camera-selection-ui.test.ts","../../tests/ui/scanner/camera-zoom-ui.test.ts","../../tests/ui/scanner/file-selection-ui.test.ts","../../tests/ui/scanner/scan-type-selector.test.ts","../../tests/ui/scanner/torch-button.test.ts"],"errors":true,"version":"5.8.3"} \ No newline at end of file diff --git a/src/html5-qrcode-scanner.ts b/src/html5-qrcode-scanner.ts index 028262fe..138115b4 100644 --- a/src/html5-qrcode-scanner.ts +++ b/src/html5-qrcode-scanner.ts @@ -196,6 +196,10 @@ export class Html5QrcodeScanner { private cameraScanImage: HTMLImageElement | null = null; private fileScanImage: HTMLImageElement | null = null; private fileSelectionUi: FileSelectionUi | null = null; + + // State tracking for preventing duplicate initialization + private isRendered: boolean = false; + private unloadListener: () => void = () => {}; //#endregion /** @@ -241,6 +245,17 @@ export class Html5QrcodeScanner { public render( qrCodeSuccessCallback: QrcodeSuccessCallback, qrCodeErrorCallback: QrcodeErrorCallback | undefined) { + + // Prevent duplicate initialization + if (this.isRendered) { + if (this.verbose) { + this.logger.logError( + "Html5QrcodeScanner already rendered. " + + "Clear() the previous instance before rendering a new one."); + } + return; + } + this.lastMatchFound = null; // Add wrapper to success callback. @@ -277,6 +292,10 @@ export class Html5QrcodeScanner { this.html5Qrcode = new Html5Qrcode( this.getScanRegionId(), toHtml5QrcodeFullConfig(this.config, this.verbose)); + + // Mark as rendered and setup automatic cleanup + this.isRendered = true; + this.setupAutomaticCleanup(); } //#region State related public APIs @@ -341,40 +360,105 @@ export class Html5QrcodeScanner { } } + const resetState = () => { + // Reset all state to allow re-initialization + this.isRendered = false; + this.html5Qrcode = undefined; + this.qrCodeSuccessCallback = undefined; + this.qrCodeErrorCallback = undefined; + this.lastMatchFound = null; + this.cameraScanImage = null; + this.fileScanImage = null; + this.fileSelectionUi = null; + + // Remove automatic cleanup listener + this.removeAutomaticCleanup(); + }; + if (this.html5Qrcode) { return new Promise((resolve, reject) => { if (!this.html5Qrcode) { + resetState(); resolve(); return; } if (this.html5Qrcode.isScanning) { this.html5Qrcode.stop().then((_) => { if (!this.html5Qrcode) { + resetState(); resolve(); return; } this.html5Qrcode.clear(); emptyHtmlContainer(); + resetState(); resolve(); }).catch((error) => { if (this.verbose) { this.logger.logError( "Unable to stop qrcode scanner", error); } + resetState(); reject(error); }); } else { // Assuming file based scan was ongoing. this.html5Qrcode.clear(); emptyHtmlContainer(); + resetState(); resolve(); } }); } + resetState(); return Promise.resolve(); } + + /** + * Setup automatic cleanup on page unload to prevent duplicate initialization + * on page navigation. + * + * @private + */ + private setupAutomaticCleanup() { + const $this = this; + this.unloadListener = () => { + if ($this.isRendered) { + if ($this.verbose) { + $this.logger.logError( + "Page unload detected, automatically cleaning up QR scanner"); + } + $this.clear().catch((error) => { + if ($this.verbose) { + $this.logger.logError( + "Error during automatic cleanup", error); + } + }); + } + }; + + // Listen for page unload events to automatically clean up + window.addEventListener('beforeunload', this.unloadListener); + window.addEventListener('unload', this.unloadListener); + + // Also listen for navigation events that might not trigger unload + window.addEventListener('pagehide', this.unloadListener); + } + + /** + * Remove automatic cleanup listeners. + * + * @private + */ + private removeAutomaticCleanup() { + if (this.unloadListener) { + window.removeEventListener('beforeunload', this.unloadListener); + window.removeEventListener('unload', this.unloadListener); + window.removeEventListener('pagehide', this.unloadListener); + } + } //#endregion //#region Beta APIs to modify running stream state.