Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

perfume.js

Package Overview
Dependencies
Maintainers
1
Versions
157
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

perfume.js - npm Package Compare versions

Comparing version 2.1.2 to 3.0.0-beta.0

dist/perfume.esm.min.js

236

angular/bundles/perfume.js-angular.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('perfume.js')) :
typeof define === 'function' && define.amd ? define('perfume.js/angular', ['exports', '@angular/core', 'perfume.js'], factory) :
(factory((global.perfume = global.perfume || {}, global.perfume.js = global.perfume.js || {}, global.perfume.js.angular = {}),global.ng.core,global.Perfume));
}(this, (function (exports,core,Perfume) { 'use strict';
(global = global || self, factory((global.perfume = global.perfume || {}, global.perfume.js = global.perfume.js || {}, global.perfume.js.angular = {}), global.ng.core, global.Perfume));
}(this, function (exports, core, Perfume) { 'use strict';

@@ -23,26 +23,122 @@ Perfume = Perfume && Perfume.hasOwnProperty('default') ? Perfume['default'] : Perfume;

***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var __assign = function() {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
function __rest(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
}
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param(paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
}
function __metadata(metadataKey, metadataValue) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __awaiter(thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __exportStar(m, exports) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
function __values(o) {
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
if (m) return m.call(o);
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m)
return o;
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
ar.push(r.value);
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) {
e = { error: error };
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"]))
m.call(i);
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally {
if (e)
throw e.error;
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spread() {

@@ -54,2 +150,49 @@ for (var ar = [], i = 0; i < arguments.length; i++)

function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
function fulfill(value) { resume("next", value); }
function reject(value) { resume("throw", value); }
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}
function __asyncDelegator(o) {
var i, p;
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
}
function __asyncValues(o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}
function __makeTemplateObject(cooked, raw) {
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
return cooked;
};
function __importStar(mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result.default = mod;
return result;
}
function __importDefault(mod) {
return (mod && mod.__esModule) ? mod : { default: mod };
}
var PERFUME_CONFIG = new core.InjectionToken('Perfume.js config');

@@ -61,13 +204,13 @@ var PerfumeRootModule = /** @class */ (function () {

}
PerfumeRootModule.decorators = [
{ type: core.NgModule, args: [{},] }
];
/** @nocollapse */
PerfumeRootModule.ctorParameters = function () {
return [
{ type: undefined, decorators: [{ type: core.Inject, args: [PERFUME_CONFIG,] }] }
];
};
PerfumeRootModule.ngModuleDef = core.ɵɵdefineNgModule({ type: PerfumeRootModule });
PerfumeRootModule.ngInjectorDef = core.ɵɵdefineInjector({ factory: function PerfumeRootModule_Factory(t) { return new (t || PerfumeRootModule)(core.ɵɵinject(PERFUME_CONFIG)); } });
return PerfumeRootModule;
}());
/*@__PURE__*/ core.ɵsetClassMetadata(PerfumeRootModule, [{
type: core.NgModule,
args: [{}]
}], function () { return [{ type: undefined, decorators: [{
type: core.Inject,
args: [PERFUME_CONFIG]
}] }]; }, null);
var NgPerfume = /** @class */ (function () {

@@ -103,9 +246,8 @@ function NgPerfume() {

};
NgPerfume.decorators = [
{ type: core.Injectable }
];
/** @nocollapse */
NgPerfume.ctorParameters = function () { return []; };
NgPerfume.ngInjectableDef = core.ɵɵdefineInjectable({ token: NgPerfume, factory: function NgPerfume_Factory(t) { return new (t || NgPerfume)(); }, providedIn: null });
return NgPerfume;
}());
/*@__PURE__*/ core.ɵsetClassMetadata(NgPerfume, [{
type: core.Injectable
}], function () { return []; }, null);
var PerfumeModule = /** @class */ (function () {

@@ -126,11 +268,14 @@ function PerfumeModule() {

};
PerfumeModule.decorators = [
{ type: core.NgModule, args: [{
imports: [],
declarations: [],
exports: [],
},] }
];
PerfumeModule.ngModuleDef = core.ɵɵdefineNgModule({ type: PerfumeModule });
PerfumeModule.ngInjectorDef = core.ɵɵdefineInjector({ factory: function PerfumeModule_Factory(t) { return new (t || PerfumeModule)(); }, imports: [[]] });
return PerfumeModule;
}());
/*@__PURE__*/ core.ɵsetClassMetadata(PerfumeModule, [{
type: core.NgModule,
args: [{
imports: [],
declarations: [],
exports: [],
}]
}], null, null);
/**

@@ -175,20 +320,11 @@ * Component View Init (CVI) decorator

/*
* Public API Surface of perfume
*/
/**
* Generated bundle index. Do not edit.
*/
exports.NgPerfume = NgPerfume;
exports.PERFUME_CONFIG = PERFUME_CONFIG;
exports.PerfumeAfterViewInit = PerfumeAfterViewInit;
exports.PerfumeModule = PerfumeModule;
exports.PerfumeRootModule = PerfumeRootModule;
exports.NgPerfume = NgPerfume;
exports.PerfumeModule = PerfumeModule;
exports.PerfumeAfterViewInit = PerfumeAfterViewInit;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=perfume.js-angular.umd.js.map
}));
//# sourceMappingURL=perfume.js-angular.umd.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("perfume.js")):"function"==typeof define&&define.amd?define("perfume.js/angular",["exports","@angular/core","perfume.js"],t):t((e.perfume=e.perfume||{},e.perfume.js=e.perfume.js||{},e.perfume.js.angular={}),e.ng.core,e.Perfume)}(this,function(u,t,r){"use strict";function f(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),u=[];try{for(;(void 0===t||0<t--)&&!(n=i.next()).done;)u.push(n.value)}catch(f){o={error:f}}finally{try{n&&!n.done&&(r=i["return"])&&r.call(i)}finally{if(o)throw o.error}}return u}r=r&&r.hasOwnProperty("default")?r["default"]:r;var n=new t.InjectionToken("Perfume.js config"),o=function(){function e(e){this.config=e,u.perfume=new r(e)}return e.decorators=[{type:t.NgModule,args:[{}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:t.Inject,args:[n]}]}]},e}(),i=function(){function e(){this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.timeToInteractiveDuration=0,this.config=u.perfume.config,this.firstPaintDuration=u.perfume.firstPaintDuration,this.firstContentfulPaintDuration=u.perfume.firstContentfulPaintDuration,this.firstInputDelayDuration=u.perfume.firstInputDelayDuration,this.observeFirstContentfulPaint=u.perfume.observeFirstContentfulPaint,this.observeFirstInputDelay=u.perfume.observeFirstInputDelay,this.observeTimeToInteractive=u.perfume.observeTimeToInteractive,this.timeToInteractiveDuration=u.perfume.timeToInteractiveDuration}return e.prototype.start=function(e){u.perfume.start(e)},e.prototype.end=function(e){return u.perfume.end(e)},e.prototype.endPaint=function(e){return u.perfume.endPaint(e)},e.prototype.log=function(e,t){u.perfume.log(e,t)},e.prototype.sendTiming=function(e,t){u.perfume.sendTiming(e,t)},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[]},e}(),e=function(){function e(){}return e.forRoot=function(e){return{ngModule:o,providers:[{provide:n,useValue:e},i]}},e.decorators=[{type:t.NgModule,args:[{imports:[],declarations:[],exports:[]}]}],e}();u.PERFUME_CONFIG=n,u.PerfumeRootModule=o,u.NgPerfume=i,u.PerfumeModule=e,u.PerfumeAfterViewInit=function a(i){return function(o){var e=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];u.perfume.start(i||o.name);var r=function(){return o.apply(this,arguments)};return r.prototype=Object.create(o.prototype),new(r.bind.apply(r,function n(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(f(arguments[t]));return e}([void 0],e)))},r=o.prototype.ngAfterViewInit;return o.prototype.ngAfterViewInit=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];r&&r.apply(this,e),u.perfume.end(i||o.name)},e.prototype=Object.create(o.prototype),e}},Object.defineProperty(u,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("perfume.js")):"function"==typeof define&&define.amd?define("perfume.js/angular",["exports","@angular/core","perfume.js"],t):t(((e=e||self).perfume=e.perfume||{},e.perfume.js=e.perfume.js||{},e.perfume.js.angular={}),e.ng.core,e.Perfume)}(this,(function(e,t,n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;function r(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),u=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return u}function o(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(r(arguments[t]));return e}var i=new t.InjectionToken("Perfume.js config"),u=function(){function r(t){this.config=t,e.perfume=new n(t)}return r.ngModuleDef=t.ɵɵdefineNgModule({type:r}),r.ngInjectorDef=t.ɵɵdefineInjector({factory:function(e){return new(e||r)(t.ɵɵinject(i))}}),r}();t.NgModule;var f=function(){function n(){this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.timeToInteractiveDuration=0,this.config=e.perfume.config,this.firstPaintDuration=e.perfume.firstPaintDuration,this.firstContentfulPaintDuration=e.perfume.firstContentfulPaintDuration,this.firstInputDelayDuration=e.perfume.firstInputDelayDuration,this.observeFirstContentfulPaint=e.perfume.observeFirstContentfulPaint,this.observeFirstInputDelay=e.perfume.observeFirstInputDelay,this.observeTimeToInteractive=e.perfume.observeTimeToInteractive,this.timeToInteractiveDuration=e.perfume.timeToInteractiveDuration}return n.prototype.start=function(t){e.perfume.start(t)},n.prototype.end=function(t){return e.perfume.end(t)},n.prototype.endPaint=function(t){return e.perfume.endPaint(t)},n.prototype.log=function(t,n){e.perfume.log(t,n)},n.prototype.sendTiming=function(t,n){e.perfume.sendTiming(t,n)},n.ngInjectableDef=t.ɵɵdefineInjectable({token:n,factory:function(e){return new(e||n)},providedIn:null}),n}();t.Injectable;var a=function(){function e(){}return e.forRoot=function(e){return{ngModule:u,providers:[{provide:i,useValue:e},f]}},e.ngModuleDef=t.ɵɵdefineNgModule({type:e}),e.ngInjectorDef=t.ɵɵdefineInjector({factory:function(t){return new(t||e)},imports:[[]]}),e}();t.NgModule,e.NgPerfume=f,e.PERFUME_CONFIG=i,e.PerfumeAfterViewInit=function(t){return function(n){var r=function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];e.perfume.start(t||n.name);var u=function(){return n.apply(this,arguments)};return u.prototype=Object.create(n.prototype),new(u.bind.apply(u,o([void 0],r)))},i=n.prototype.ngAfterViewInit;return n.prototype.ngAfterViewInit=function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];i&&i.apply(this,r),e.perfume.end(t||n.name)},r.prototype=Object.create(n.prototype),r}},e.PerfumeModule=a,e.PerfumeRootModule=u,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=perfume.js-angular.umd.min.js.map
import { Inject, Injectable, InjectionToken, NgModule, } from '@angular/core';
import Perfume from 'perfume.js';
import * as i0 from "@angular/core";
export let perfume;

@@ -11,9 +12,11 @@ export const PERFUME_CONFIG = new InjectionToken('Perfume.js config');

}
PerfumeRootModule.decorators = [
{ type: NgModule, args: [{},] }
];
/** @nocollapse */
PerfumeRootModule.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [PERFUME_CONFIG,] }] }
];
PerfumeRootModule.ngModuleDef = i0.ɵɵdefineNgModule({ type: PerfumeRootModule });
PerfumeRootModule.ngInjectorDef = i0.ɵɵdefineInjector({ factory: function PerfumeRootModule_Factory(t) { return new (t || PerfumeRootModule)(i0.ɵɵinject(PERFUME_CONFIG)); } });
/*@__PURE__*/ i0.ɵsetClassMetadata(PerfumeRootModule, [{
type: NgModule,
args: [{}]
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [PERFUME_CONFIG]
}] }]; }, null);
export class NgPerfume {

@@ -50,7 +53,6 @@ constructor() {

}
NgPerfume.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NgPerfume.ctorParameters = () => [];
NgPerfume.ngInjectableDef = i0.ɵɵdefineInjectable({ token: NgPerfume, factory: function NgPerfume_Factory(t) { return new (t || NgPerfume)(); }, providedIn: null });
/*@__PURE__*/ i0.ɵsetClassMetadata(NgPerfume, [{
type: Injectable
}], function () { return []; }, null);
export class PerfumeModule {

@@ -70,9 +72,12 @@ static forRoot(config) {

}
PerfumeModule.decorators = [
{ type: NgModule, args: [{
PerfumeModule.ngModuleDef = i0.ɵɵdefineNgModule({ type: PerfumeModule });
PerfumeModule.ngInjectorDef = i0.ɵɵdefineInjector({ factory: function PerfumeModule_Factory(t) { return new (t || PerfumeModule)(); }, imports: [[]] });
/*@__PURE__*/ i0.ɵsetClassMetadata(PerfumeModule, [{
type: NgModule,
args: [{
imports: [],
declarations: [],
exports: [],
},] }
];
}]
}], null, null);
/**

@@ -108,2 +113,2 @@ * Component View Init (CVI) decorator

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZnVtZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9wZXJmdW1lLmpzL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvcGVyZnVtZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUVkLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQTJCLE1BQU0sWUFBWSxDQUFDO0FBRXJELE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUVuQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUd0RSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQTJDLE1BQXNCO1FBQXRCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQy9ELE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7WUFKRixRQUFRLFNBQUMsRUFBRTs7Ozs0Q0FFRyxNQUFNLFNBQUMsY0FBYzs7QUFNcEMsTUFBTSxPQUFPLFNBQVM7SUFXcEI7UUFSQSx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsaUNBQTRCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUk1Qiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFHNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFDckQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztRQUN6RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1FBQy9ELElBQUksQ0FBQywyQkFBMkIsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUM7UUFDdkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztRQUM3RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1FBQ2pFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUM7SUFDckUsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFrQjtRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0I7UUFDcEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxRQUFRLENBQUMsVUFBa0I7UUFDekIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0IsRUFBRSxRQUFnQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWtCLEVBQUUsUUFBZ0I7UUFDN0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7O1lBekNGLFVBQVU7Ozs7QUFpRFgsTUFBTSxPQUFPLGFBQWE7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFXO1FBQy9CLE9BQU87WUFDTCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsY0FBYztvQkFDdkIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNELFNBQVM7YUFDVjtTQUNGLENBQUM7SUFDSixDQUFDOzs7WUFqQkYsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFlBQVksRUFBRSxFQUFFO2dCQUNoQixPQUFPLEVBQUUsRUFBRTthQUNaOztBQXlCRDs7OztHQUlHO0FBQ0gseUNBQXlDO0FBQ3pDLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxVQUFtQjtJQUN0RCxPQUFPLFNBQVMsZ0JBQWdCLENBQUMsTUFBeUI7UUFDeEQsb0RBQW9EO1FBQ3BELE1BQU0sY0FBYyxHQUFRLFNBQVMsT0FBTyxDQUFDLEdBQUcsSUFBSTtZQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLEdBQVEsU0FBUyxlQUFlO2dCQUNyQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQztZQUNGLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUN6RCxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFTLEdBQUcsSUFBSTtZQUNqRCxnREFBZ0Q7WUFDaEQsZUFBZSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsY0FBYyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxrREFBa0Q7UUFDbEQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE1vZHVsZVdpdGhQcm92aWRlcnMsXG4gIE5nTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBQZXJmdW1lLCB7IElQZXJmdW1lQ29uZmlnIH0gZnJvbSAncGVyZnVtZS5qcyc7XG5cbmV4cG9ydCBsZXQgcGVyZnVtZTtcblxuZXhwb3J0IGNvbnN0IFBFUkZVTUVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdQZXJmdW1lLmpzIGNvbmZpZycpO1xuXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgUGVyZnVtZVJvb3RNb2R1bGUge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KFBFUkZVTUVfQ09ORklHKSBwdWJsaWMgY29uZmlnOiBJUGVyZnVtZUNvbmZpZykge1xuICAgIHBlcmZ1bWUgPSBuZXcgUGVyZnVtZShjb25maWcpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ1BlcmZ1bWUge1xuICBwZXJmdW1lOiBQZXJmdW1lO1xuICBjb25maWc6IElQZXJmdW1lQ29uZmlnO1xuICBmaXJzdFBhaW50RHVyYXRpb24gPSAwO1xuICBmaXJzdENvbnRlbnRmdWxQYWludER1cmF0aW9uID0gMDtcbiAgZmlyc3RJbnB1dERlbGF5RHVyYXRpb24gPSAwO1xuICBvYnNlcnZlRmlyc3RDb250ZW50ZnVsUGFpbnQ6IFByb21pc2U8bnVtYmVyPjtcbiAgb2JzZXJ2ZUZpcnN0SW5wdXREZWxheTogUHJvbWlzZTxudW1iZXI+O1xuICBvYnNlcnZlVGltZVRvSW50ZXJhY3RpdmU/OiBQcm9taXNlPG51bWJlcj47XG4gIHRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb24gPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnID0gcGVyZnVtZS5jb25maWc7XG4gICAgdGhpcy5maXJzdFBhaW50RHVyYXRpb24gPSBwZXJmdW1lLmZpcnN0UGFpbnREdXJhdGlvbjtcbiAgICB0aGlzLmZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb24gPSBwZXJmdW1lLmZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb247XG4gICAgdGhpcy5maXJzdElucHV0RGVsYXlEdXJhdGlvbiA9IHBlcmZ1bWUuZmlyc3RJbnB1dERlbGF5RHVyYXRpb247XG4gICAgdGhpcy5vYnNlcnZlRmlyc3RDb250ZW50ZnVsUGFpbnQgPSBwZXJmdW1lLm9ic2VydmVGaXJzdENvbnRlbnRmdWxQYWludDtcbiAgICB0aGlzLm9ic2VydmVGaXJzdElucHV0RGVsYXkgPSBwZXJmdW1lLm9ic2VydmVGaXJzdElucHV0RGVsYXk7XG4gICAgdGhpcy5vYnNlcnZlVGltZVRvSW50ZXJhY3RpdmUgPSBwZXJmdW1lLm9ic2VydmVUaW1lVG9JbnRlcmFjdGl2ZTtcbiAgICB0aGlzLnRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb24gPSBwZXJmdW1lLnRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb247XG4gIH1cblxuICBzdGFydChtZXRyaWNOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBwZXJmdW1lLnN0YXJ0KG1ldHJpY05hbWUpO1xuICB9XG5cbiAgZW5kKG1ldHJpY05hbWU6IHN0cmluZyk6IHZvaWQgfCBudW1iZXIge1xuICAgIHJldHVybiBwZXJmdW1lLmVuZChtZXRyaWNOYW1lKTtcbiAgfVxuXG4gIGVuZFBhaW50KG1ldHJpY05hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IG51bWJlcj4ge1xuICAgIHJldHVybiBwZXJmdW1lLmVuZFBhaW50KG1ldHJpY05hbWUpO1xuICB9XG5cbiAgbG9nKG1ldHJpY05hbWU6IHN0cmluZywgZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIHBlcmZ1bWUubG9nKG1ldHJpY05hbWUsIGR1cmF0aW9uKTtcbiAgfVxuXG4gIHNlbmRUaW1pbmcobWV0cmljTmFtZTogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgcGVyZnVtZS5zZW5kVGltaW5nKG1ldHJpY05hbWUsIGR1cmF0aW9uKTtcbiAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXSxcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBlcmZ1bWVNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBhbnkpOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFBlcmZ1bWVSb290TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQRVJGVU1FX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICBOZ1BlcmZ1bWUsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYW55IEFuZ3VsYXIgY29tcG9uZW50IGNsYXNzIHRoYXQgaW1wbGVtZW50cyBgQWZ0ZXJWaWV3SW5pdGAuXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTppbnRlcmZhY2UtbmFtZVxuZXhwb3J0IGludGVyZmFjZSBBZnRlclZpZXdJbml0YWJsZSB7XG4gIHByb3RvdHlwZTogQWZ0ZXJWaWV3SW5pdDtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IEFmdGVyVmlld0luaXQ7XG59XG5cbi8qKlxuICogQ29tcG9uZW50IFZpZXcgSW5pdCAoQ1ZJKSBkZWNvcmF0b3JcbiAqIE1hcmtzIHRoZSB0aW1lIGJldHdlZW4gdGhlIGNvbnN0cnVjdG9yIGlzIGluaXRpYWxpemVkLFxuICogYW5kIG5nQWZ0ZXJWaWV3SW5pdCBleGVjdXRpb24gZW5kcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZ1bmN0aW9uLW5hbWVcbmV4cG9ydCBmdW5jdGlvbiBQZXJmdW1lQWZ0ZXJWaWV3SW5pdCh0YXJnZXROYW1lPzogc3RyaW5nKSB7XG4gIHJldHVybiBmdW5jdGlvbiBEZWNvcmF0b3JGYWN0b3J5KHRhcmdldDogQWZ0ZXJWaWV3SW5pdGFibGUpIHtcbiAgICAvLyBUaGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW9yLCBzdXBwb3J0cyBBT1QgYW5kIERJXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uIG5ld0N0b3IoLi4uYXJncykge1xuICAgICAgcGVyZnVtZS5zdGFydCh0YXJnZXROYW1lIHx8IHRhcmdldC5uYW1lKTtcbiAgICAgIGNvbnN0IGM6IGFueSA9IGZ1bmN0aW9uIGNoaWxkQ29uc3R1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIGMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBuZXcgYyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgLy8gVGhlIG5ldyBuZ0FmdGVyVmlld0luaXQgYmVoYXZpb3JcbiAgICBjb25zdCBuZ0FmdGVyVmlld0luaXQgPSB0YXJnZXQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdDtcbiAgICB0YXJnZXQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgICAgbmdBZnRlclZpZXdJbml0ICYmIG5nQWZ0ZXJWaWV3SW5pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIHBlcmZ1bWUuZW5kKHRhcmdldE5hbWUgfHwgdGFyZ2V0Lm5hbWUpO1xuICAgIH07XG5cbiAgICAvLyBDb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0YXJnZXQucHJvdG90eXBlKTtcblxuICAgIC8vIFJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZnVtZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9wZXJmdW1lLmpzL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvcGVyZnVtZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUVkLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQTJCLE1BQU0sWUFBWSxDQUFDOztBQUVyRCxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUM7QUFFbkIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFHdEUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUEyQyxNQUFzQjtRQUF0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUMvRCxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7NERBSFUsaUJBQWlCOzBIQUFqQixpQkFBaUIsY0FDUixjQUFjO21DQUR2QixpQkFBaUI7Y0FEN0IsUUFBUTtlQUFDLEVBQUU7O3NCQUVHLE1BQU07dUJBQUMsY0FBYzs7QUFNcEMsTUFBTSxPQUFPLFNBQVM7SUFXcEI7UUFSQSx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsaUNBQTRCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUk1Qiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFHNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFDckQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztRQUN6RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1FBQy9ELElB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RDtRQUNsRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgTW9kdWxlV2l0aFByb3ZpZGVycyxcbiAgTmdNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IFBlcmZ1bWUsIHsgSVBlcmZ1bWVDb25maWcgfSBmcm9tICdwZXJmdW1lLmpzJztcblxuZXhwb3J0IGxldCBwZXJmdW1lO1xuXG5leHBvcnQgY29uc3QgUEVSRlVNRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1BlcmZ1bWUuanMgY29uZmlnJyk7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBQZXJmdW1lUm9vdE1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoUEVSRlVNRV9DT05GSUcpIHB1YmxpYyBjb25maWc6IElQZXJmdW1lQ29uZmlnKSB7XG4gICAgcGVyZnVtZSA9IG5ldyBQZXJmdW1lKGNvbmZpZyk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nUGVyZnVtZSB7XG4gIHBlcmZ1bWU6IFBlcmZ1bWU7XG4gIGNvbmZpZzogSVBlcmZ1bWVDb25maWc7XG4gIGZpcnN0UGFpbnREdXJhdGlvbiA9IDA7XG4gIGZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb24gPSAwO1xuICBmaXJzdElucHV0RGVsYXlEdXJhdGlvbiA9IDA7XG4gIG9ic2VydmVGaXJzdENvbnRlbnRmdWxQYWludDogUHJvbWlzZTxudW1iZXI+O1xuICBvYnNlcnZlRmlyc3RJbnB1dERlbGF5OiBQcm9taXNlPG51bWJlcj47XG4gIG9ic2VydmVUaW1lVG9JbnRlcmFjdGl2ZT86IFByb21pc2U8bnVtYmVyPjtcbiAgdGltZVRvSW50ZXJhY3RpdmVEdXJhdGlvbiA9IDA7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25maWcgPSBwZXJmdW1lLmNvbmZpZztcbiAgICB0aGlzLmZpcnN0UGFpbnREdXJhdGlvbiA9IHBlcmZ1bWUuZmlyc3RQYWludER1cmF0aW9uO1xuICAgIHRoaXMuZmlyc3RDb250ZW50ZnVsUGFpbnREdXJhdGlvbiA9IHBlcmZ1bWUuZmlyc3RDb250ZW50ZnVsUGFpbnREdXJhdGlvbjtcbiAgICB0aGlzLmZpcnN0SW5wdXREZWxheUR1cmF0aW9uID0gcGVyZnVtZS5maXJzdElucHV0RGVsYXlEdXJhdGlvbjtcbiAgICB0aGlzLm9ic2VydmVGaXJzdENvbnRlbnRmdWxQYWludCA9IHBlcmZ1bWUub2JzZXJ2ZUZpcnN0Q29udGVudGZ1bFBhaW50O1xuICAgIHRoaXMub2JzZXJ2ZUZpcnN0SW5wdXREZWxheSA9IHBlcmZ1bWUub2JzZXJ2ZUZpcnN0SW5wdXREZWxheTtcbiAgICB0aGlzLm9ic2VydmVUaW1lVG9JbnRlcmFjdGl2ZSA9IHBlcmZ1bWUub2JzZXJ2ZVRpbWVUb0ludGVyYWN0aXZlO1xuICAgIHRoaXMudGltZVRvSW50ZXJhY3RpdmVEdXJhdGlvbiA9IHBlcmZ1bWUudGltZVRvSW50ZXJhY3RpdmVEdXJhdGlvbjtcbiAgfVxuXG4gIHN0YXJ0KG1ldHJpY05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHBlcmZ1bWUuc3RhcnQobWV0cmljTmFtZSk7XG4gIH1cblxuICBlbmQobWV0cmljTmFtZTogc3RyaW5nKTogdm9pZCB8IG51bWJlciB7XG4gICAgcmV0dXJuIHBlcmZ1bWUuZW5kKG1ldHJpY05hbWUpO1xuICB9XG5cbiAgZW5kUGFpbnQobWV0cmljTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgbnVtYmVyPiB7XG4gICAgcmV0dXJuIHBlcmZ1bWUuZW5kUGFpbnQobWV0cmljTmFtZSk7XG4gIH1cblxuICBsb2cobWV0cmljTmFtZTogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgcGVyZnVtZS5sb2cobWV0cmljTmFtZSwgZHVyYXRpb24pO1xuICB9XG5cbiAgc2VuZFRpbWluZyhtZXRyaWNOYW1lOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBwZXJmdW1lLnNlbmRUaW1pbmcobWV0cmljTmFtZSwgZHVyYXRpb24pO1xuICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBleHBvcnRzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVyZnVtZU1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IGFueSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogUGVyZnVtZVJvb3RNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFBFUkZVTUVfQ09ORklHLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgICAgIH0sXG4gICAgICAgIE5nUGVyZnVtZSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhbnkgQW5ndWxhciBjb21wb25lbnQgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGBBZnRlclZpZXdJbml0YC5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmludGVyZmFjZS1uYW1lXG5leHBvcnQgaW50ZXJmYWNlIEFmdGVyVmlld0luaXRhYmxlIHtcbiAgcHJvdG90eXBlOiBBZnRlclZpZXdJbml0O1xuICBuZXcgKC4uLmFyZ3M6IGFueVtdKTogQWZ0ZXJWaWV3SW5pdDtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgVmlldyBJbml0IChDVkkpIGRlY29yYXRvclxuICogTWFya3MgdGhlIHRpbWUgYmV0d2VlbiB0aGUgY29uc3RydWN0b3IgaXMgaW5pdGlhbGl6ZWQsXG4gKiBhbmQgbmdBZnRlclZpZXdJbml0IGV4ZWN1dGlvbiBlbmRzLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZnVuY3Rpb24tbmFtZVxuZXhwb3J0IGZ1bmN0aW9uIFBlcmZ1bWVBZnRlclZpZXdJbml0KHRhcmdldE5hbWU/OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIERlY29yYXRvckZhY3RvcnkodGFyZ2V0OiBBZnRlclZpZXdJbml0YWJsZSkge1xuICAgIC8vIFRoZSBuZXcgY29uc3RydWN0b3IgYmVoYXZpb3IsIHN1cHBvcnRzIEFPVCBhbmQgRElcbiAgICBjb25zdCBuZXdDb25zdHJ1Y3RvcjogYW55ID0gZnVuY3Rpb24gbmV3Q3RvciguLi5hcmdzKSB7XG4gICAgICBwZXJmdW1lLnN0YXJ0KHRhcmdldE5hbWUgfHwgdGFyZ2V0Lm5hbWUpO1xuICAgICAgY29uc3QgYzogYW55ID0gZnVuY3Rpb24gY2hpbGRDb25zdHVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHRhcmdldC5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIG5ldyBjKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICAvLyBUaGUgbmV3IG5nQWZ0ZXJWaWV3SW5pdCBiZWhhdmlvclxuICAgIGNvbnN0IG5nQWZ0ZXJWaWV3SW5pdCA9IHRhcmdldC5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0O1xuICAgIHRhcmdldC5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0ID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVudXNlZC1leHByZXNzaW9uXG4gICAgICBuZ0FmdGVyVmlld0luaXQgJiYgbmdBZnRlclZpZXdJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgcGVyZnVtZS5lbmQodGFyZ2V0TmFtZSB8fCB0YXJnZXQubmFtZSk7XG4gICAgfTtcblxuICAgIC8vIENvcHkgcHJvdG90eXBlIHNvIGluc3RhbmNlb2Ygb3BlcmF0b3Igc3RpbGwgd29ya3NcbiAgICBuZXdDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHRhcmdldC5wcm90b3R5cGUpO1xuXG4gICAgLy8gUmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4iXX0=
import * as tslib_1 from "tslib";
import { Inject, Injectable, InjectionToken, NgModule, } from '@angular/core';
import Perfume from 'perfume.js';
import * as i0 from "@angular/core";
export var perfume;

@@ -11,12 +12,14 @@ export var PERFUME_CONFIG = new InjectionToken('Perfume.js config');

}
PerfumeRootModule.decorators = [
{ type: NgModule, args: [{},] }
];
/** @nocollapse */
PerfumeRootModule.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [PERFUME_CONFIG,] }] }
]; };
PerfumeRootModule.ngModuleDef = i0.ɵɵdefineNgModule({ type: PerfumeRootModule });
PerfumeRootModule.ngInjectorDef = i0.ɵɵdefineInjector({ factory: function PerfumeRootModule_Factory(t) { return new (t || PerfumeRootModule)(i0.ɵɵinject(PERFUME_CONFIG)); } });
return PerfumeRootModule;
}());
export { PerfumeRootModule };
/*@__PURE__*/ i0.ɵsetClassMetadata(PerfumeRootModule, [{
type: NgModule,
args: [{}]
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [PERFUME_CONFIG]
}] }]; }, null);
var NgPerfume = /** @class */ (function () {

@@ -52,10 +55,9 @@ function NgPerfume() {

};
NgPerfume.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NgPerfume.ctorParameters = function () { return []; };
NgPerfume.ngInjectableDef = i0.ɵɵdefineInjectable({ token: NgPerfume, factory: function NgPerfume_Factory(t) { return new (t || NgPerfume)(); }, providedIn: null });
return NgPerfume;
}());
export { NgPerfume };
/*@__PURE__*/ i0.ɵsetClassMetadata(NgPerfume, [{
type: Injectable
}], function () { return []; }, null);
var PerfumeModule = /** @class */ (function () {

@@ -76,12 +78,15 @@ function PerfumeModule() {

};
PerfumeModule.decorators = [
{ type: NgModule, args: [{
imports: [],
declarations: [],
exports: [],
},] }
];
PerfumeModule.ngModuleDef = i0.ɵɵdefineNgModule({ type: PerfumeModule });
PerfumeModule.ngInjectorDef = i0.ɵɵdefineInjector({ factory: function PerfumeModule_Factory(t) { return new (t || PerfumeModule)(); }, imports: [[]] });
return PerfumeModule;
}());
export { PerfumeModule };
/*@__PURE__*/ i0.ɵsetClassMetadata(PerfumeModule, [{
type: NgModule,
args: [{
imports: [],
declarations: [],
exports: [],
}]
}], null, null);
/**

@@ -125,2 +130,2 @@ * Component View Init (CVI) decorator

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZnVtZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9wZXJmdW1lLmpzL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvcGVyZnVtZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxNQUFNLEVBQ04sVUFBVSxFQUNWLGNBQWMsRUFFZCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxPQUEyQixNQUFNLFlBQVksQ0FBQztBQUVyRCxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUM7QUFFbkIsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFdEU7SUFFRSwyQkFBMkMsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDL0QsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7O2dCQUpGLFFBQVEsU0FBQyxFQUFFOzs7O2dEQUVHLE1BQU0sU0FBQyxjQUFjOztJQUdwQyx3QkFBQztDQUFBLEFBTEQsSUFLQztTQUpZLGlCQUFpQjtBQU05QjtJQVlFO1FBUkEsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLGlDQUE0QixHQUFHLENBQUMsQ0FBQztRQUNqQyw0QkFBdUIsR0FBRyxDQUFDLENBQUM7UUFJNUIsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBRzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1FBQ3JELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxPQUFPLENBQUMsNEJBQTRCLENBQUM7UUFDekUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztRQUMvRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1FB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LFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxrREFBa0Q7UUFDbEQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE1vZHVsZVdpdGhQcm92aWRlcnMsXG4gIE5nTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBQZXJmdW1lLCB7IElQZXJmdW1lQ29uZmlnIH0gZnJvbSAncGVyZnVtZS5qcyc7XG5cbmV4cG9ydCBsZXQgcGVyZnVtZTtcblxuZXhwb3J0IGNvbnN0IFBFUkZVTUVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdQZXJmdW1lLmpzIGNvbmZpZycpO1xuXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgUGVyZnVtZVJvb3RNb2R1bGUge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KFBFUkZVTUVfQ09ORklHKSBwdWJsaWMgY29uZmlnOiBJUGVyZnVtZUNvbmZpZykge1xuICAgIHBlcmZ1bWUgPSBuZXcgUGVyZnVtZShjb25maWcpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ1BlcmZ1bWUge1xuICBwZXJmdW1lOiBQZXJmdW1lO1xuICBjb25maWc6IElQZXJmdW1lQ29uZmlnO1xuICBmaXJzdFBhaW50RHVyYXRpb24gPSAwO1xuICBmaXJzdENvbnRlbnRmdWxQYWludER1cmF0aW9uID0gMDtcbiAgZmlyc3RJbnB1dERlbGF5RHVyYXRpb24gPSAwO1xuICBvYnNlcnZlRmlyc3RDb250ZW50ZnVsUGFpbnQ6IFByb21pc2U8bnVtYmVyPjtcbiAgb2JzZXJ2ZUZpcnN0SW5wdXREZWxheTogUHJvbWlzZTxudW1iZXI+O1xuICBvYnNlcnZlVGltZVRvSW50ZXJhY3RpdmU/OiBQcm9taXNlPG51bWJlcj47XG4gIHRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb24gPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnID0gcGVyZnVtZS5jb25maWc7XG4gICAgdGhpcy5maXJzdFBhaW50RHVyYXRpb24gPSBwZXJmdW1lLmZpcnN0UGFpbnREdXJhdGlvbjtcbiAgICB0aGlzLmZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb24gPSBwZXJmdW1lLmZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb247XG4gICAgdGhpcy5maXJzdElucHV0RGVsYXlEdXJhdGlvbiA9IHBlcmZ1bWUuZmlyc3RJbnB1dERlbGF5RHVyYXRpb247XG4gICAgdGhpcy5vYnNlcnZlRmlyc3RDb250ZW50ZnVsUGFpbnQgPSBwZXJmdW1lLm9ic2VydmVGaXJzdENvbnRlbnRmdWxQYWludDtcbiAgICB0aGlzLm9ic2VydmVGaXJzdElucHV0RGVsYXkgPSBwZXJmdW1lLm9ic2VydmVGaXJzdElucHV0RGVsYXk7XG4gICAgdGhpcy5vYnNlcnZlVGltZVRvSW50ZXJhY3RpdmUgPSBwZXJmdW1lLm9ic2VydmVUaW1lVG9JbnRlcmFjdGl2ZTtcbiAgICB0aGlzLnRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb24gPSBwZXJmdW1lLnRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb247XG4gIH1cblxuICBzdGFydChtZXRyaWNOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBwZXJmdW1lLnN0YXJ0KG1ldHJpY05hbWUpO1xuICB9XG5cbiAgZW5kKG1ldHJpY05hbWU6IHN0cmluZyk6IHZvaWQgfCBudW1iZXIge1xuICAgIHJldHVybiBwZXJmdW1lLmVuZChtZXRyaWNOYW1lKTtcbiAgfVxuXG4gIGVuZFBhaW50KG1ldHJpY05hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IG51bWJlcj4ge1xuICAgIHJldHVybiBwZXJmdW1lLmVuZFBhaW50KG1ldHJpY05hbWUpO1xuICB9XG5cbiAgbG9nKG1ldHJpY05hbWU6IHN0cmluZywgZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIHBlcmZ1bWUubG9nKG1ldHJpY05hbWUsIGR1cmF0aW9uKTtcbiAgfVxuXG4gIHNlbmRUaW1pbmcobWV0cmljTmFtZTogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgcGVyZnVtZS5zZW5kVGltaW5nKG1ldHJpY05hbWUsIGR1cmF0aW9uKTtcbiAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXSxcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBlcmZ1bWVNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBhbnkpOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFBlcmZ1bWVSb290TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQRVJGVU1FX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICBOZ1BlcmZ1bWUsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYW55IEFuZ3VsYXIgY29tcG9uZW50IGNsYXNzIHRoYXQgaW1wbGVtZW50cyBgQWZ0ZXJWaWV3SW5pdGAuXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTppbnRlcmZhY2UtbmFtZVxuZXhwb3J0IGludGVyZmFjZSBBZnRlclZpZXdJbml0YWJsZSB7XG4gIHByb3RvdHlwZTogQWZ0ZXJWaWV3SW5pdDtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IEFmdGVyVmlld0luaXQ7XG59XG5cbi8qKlxuICogQ29tcG9uZW50IFZpZXcgSW5pdCAoQ1ZJKSBkZWNvcmF0b3JcbiAqIE1hcmtzIHRoZSB0aW1lIGJldHdlZW4gdGhlIGNvbnN0cnVjdG9yIGlzIGluaXRpYWxpemVkLFxuICogYW5kIG5nQWZ0ZXJWaWV3SW5pdCBleGVjdXRpb24gZW5kcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZ1bmN0aW9uLW5hbWVcbmV4cG9ydCBmdW5jdGlvbiBQZXJmdW1lQWZ0ZXJWaWV3SW5pdCh0YXJnZXROYW1lPzogc3RyaW5nKSB7XG4gIHJldHVybiBmdW5jdGlvbiBEZWNvcmF0b3JGYWN0b3J5KHRhcmdldDogQWZ0ZXJWaWV3SW5pdGFibGUpIHtcbiAgICAvLyBUaGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW9yLCBzdXBwb3J0cyBBT1QgYW5kIERJXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uIG5ld0N0b3IoLi4uYXJncykge1xuICAgICAgcGVyZnVtZS5zdGFydCh0YXJnZXROYW1lIHx8IHRhcmdldC5uYW1lKTtcbiAgICAgIGNvbnN0IGM6IGFueSA9IGZ1bmN0aW9uIGNoaWxkQ29uc3R1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIGMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBuZXcgYyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgLy8gVGhlIG5ldyBuZ0FmdGVyVmlld0luaXQgYmVoYXZpb3JcbiAgICBjb25zdCBuZ0FmdGVyVmlld0luaXQgPSB0YXJnZXQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdDtcbiAgICB0YXJnZXQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgICAgbmdBZnRlclZpZXdJbml0ICYmIG5nQWZ0ZXJWaWV3SW5pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIHBlcmZ1bWUuZW5kKHRhcmdldE5hbWUgfHwgdGFyZ2V0Lm5hbWUpO1xuICAgIH07XG5cbiAgICAvLyBDb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0YXJnZXQucHJvdG90eXBlKTtcblxuICAgIC8vIFJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZnVtZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9wZXJmdW1lLmpzL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvcGVyZnVtZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxNQUFNLEVBQ04sVUFBVSxFQUNWLGNBQWMsRUFFZCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxPQUEyQixNQUFNLFlBQVksQ0FBQzs7QUFFckQsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDO0FBRW5CLE1BQU0sQ0FBQyxJQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXRFO0lBRUUsMkJBQTJDLE1BQXNCO1FBQXRCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQy9ELE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO2dFQUhVLGlCQUFpQjs4SEFBakIsaUJBQWlCLGNBQ1IsY0FBYzs0QkFoQnBDO0NBbUJDLEFBTEQsSUFLQztTQUpZLGlCQUFpQjttQ0FBakIsaUJBQWlCO2NBRDdCLFFBQVE7ZUFBQyxFQUFFOztzQkFFRyxNQUFNO3VCQUFDLGNBQWM7O0FBS3BDO0lBWUU7UUFSQSx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsaUNBQTRCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUk1Qiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFHNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFDckQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztRQUN6RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1FBQy9E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O1lBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsY0FBYyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxrREFBa0Q7UUFDbEQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE1vZHVsZVdpdGhQcm92aWRlcnMsXG4gIE5nTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBQZXJmdW1lLCB7IElQZXJmdW1lQ29uZmlnIH0gZnJvbSAncGVyZnVtZS5qcyc7XG5cbmV4cG9ydCBsZXQgcGVyZnVtZTtcblxuZXhwb3J0IGNvbnN0IFBFUkZVTUVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdQZXJmdW1lLmpzIGNvbmZpZycpO1xuXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgUGVyZnVtZVJvb3RNb2R1bGUge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KFBFUkZVTUVfQ09ORklHKSBwdWJsaWMgY29uZmlnOiBJUGVyZnVtZUNvbmZpZykge1xuICAgIHBlcmZ1bWUgPSBuZXcgUGVyZnVtZShjb25maWcpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ1BlcmZ1bWUge1xuICBwZXJmdW1lOiBQZXJmdW1lO1xuICBjb25maWc6IElQZXJmdW1lQ29uZmlnO1xuICBmaXJzdFBhaW50RHVyYXRpb24gPSAwO1xuICBmaXJzdENvbnRlbnRmdWxQYWludER1cmF0aW9uID0gMDtcbiAgZmlyc3RJbnB1dERlbGF5RHVyYXRpb24gPSAwO1xuICBvYnNlcnZlRmlyc3RDb250ZW50ZnVsUGFpbnQ6IFByb21pc2U8bnVtYmVyPjtcbiAgb2JzZXJ2ZUZpcnN0SW5wdXREZWxheTogUHJvbWlzZTxudW1iZXI+O1xuICBvYnNlcnZlVGltZVRvSW50ZXJhY3RpdmU/OiBQcm9taXNlPG51bWJlcj47XG4gIHRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb24gPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnID0gcGVyZnVtZS5jb25maWc7XG4gICAgdGhpcy5maXJzdFBhaW50RHVyYXRpb24gPSBwZXJmdW1lLmZpcnN0UGFpbnREdXJhdGlvbjtcbiAgICB0aGlzLmZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb24gPSBwZXJmdW1lLmZpcnN0Q29udGVudGZ1bFBhaW50RHVyYXRpb247XG4gICAgdGhpcy5maXJzdElucHV0RGVsYXlEdXJhdGlvbiA9IHBlcmZ1bWUuZmlyc3RJbnB1dERlbGF5RHVyYXRpb247XG4gICAgdGhpcy5vYnNlcnZlRmlyc3RDb250ZW50ZnVsUGFpbnQgPSBwZXJmdW1lLm9ic2VydmVGaXJzdENvbnRlbnRmdWxQYWludDtcbiAgICB0aGlzLm9ic2VydmVGaXJzdElucHV0RGVsYXkgPSBwZXJmdW1lLm9ic2VydmVGaXJzdElucHV0RGVsYXk7XG4gICAgdGhpcy5vYnNlcnZlVGltZVRvSW50ZXJhY3RpdmUgPSBwZXJmdW1lLm9ic2VydmVUaW1lVG9JbnRlcmFjdGl2ZTtcbiAgICB0aGlzLnRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb24gPSBwZXJmdW1lLnRpbWVUb0ludGVyYWN0aXZlRHVyYXRpb247XG4gIH1cblxuICBzdGFydChtZXRyaWNOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBwZXJmdW1lLnN0YXJ0KG1ldHJpY05hbWUpO1xuICB9XG5cbiAgZW5kKG1ldHJpY05hbWU6IHN0cmluZyk6IHZvaWQgfCBudW1iZXIge1xuICAgIHJldHVybiBwZXJmdW1lLmVuZChtZXRyaWNOYW1lKTtcbiAgfVxuXG4gIGVuZFBhaW50KG1ldHJpY05hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IG51bWJlcj4ge1xuICAgIHJldHVybiBwZXJmdW1lLmVuZFBhaW50KG1ldHJpY05hbWUpO1xuICB9XG5cbiAgbG9nKG1ldHJpY05hbWU6IHN0cmluZywgZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIHBlcmZ1bWUubG9nKG1ldHJpY05hbWUsIGR1cmF0aW9uKTtcbiAgfVxuXG4gIHNlbmRUaW1pbmcobWV0cmljTmFtZTogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgcGVyZnVtZS5zZW5kVGltaW5nKG1ldHJpY05hbWUsIGR1cmF0aW9uKTtcbiAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXSxcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBlcmZ1bWVNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBhbnkpOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFBlcmZ1bWVSb290TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQRVJGVU1FX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICBOZ1BlcmZ1bWUsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYW55IEFuZ3VsYXIgY29tcG9uZW50IGNsYXNzIHRoYXQgaW1wbGVtZW50cyBgQWZ0ZXJWaWV3SW5pdGAuXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTppbnRlcmZhY2UtbmFtZVxuZXhwb3J0IGludGVyZmFjZSBBZnRlclZpZXdJbml0YWJsZSB7XG4gIHByb3RvdHlwZTogQWZ0ZXJWaWV3SW5pdDtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IEFmdGVyVmlld0luaXQ7XG59XG5cbi8qKlxuICogQ29tcG9uZW50IFZpZXcgSW5pdCAoQ1ZJKSBkZWNvcmF0b3JcbiAqIE1hcmtzIHRoZSB0aW1lIGJldHdlZW4gdGhlIGNvbnN0cnVjdG9yIGlzIGluaXRpYWxpemVkLFxuICogYW5kIG5nQWZ0ZXJWaWV3SW5pdCBleGVjdXRpb24gZW5kcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZ1bmN0aW9uLW5hbWVcbmV4cG9ydCBmdW5jdGlvbiBQZXJmdW1lQWZ0ZXJWaWV3SW5pdCh0YXJnZXROYW1lPzogc3RyaW5nKSB7XG4gIHJldHVybiBmdW5jdGlvbiBEZWNvcmF0b3JGYWN0b3J5KHRhcmdldDogQWZ0ZXJWaWV3SW5pdGFibGUpIHtcbiAgICAvLyBUaGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW9yLCBzdXBwb3J0cyBBT1QgYW5kIERJXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uIG5ld0N0b3IoLi4uYXJncykge1xuICAgICAgcGVyZnVtZS5zdGFydCh0YXJnZXROYW1lIHx8IHRhcmdldC5uYW1lKTtcbiAgICAgIGNvbnN0IGM6IGFueSA9IGZ1bmN0aW9uIGNoaWxkQ29uc3R1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIGMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBuZXcgYyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgLy8gVGhlIG5ldyBuZ0FmdGVyVmlld0luaXQgYmVoYXZpb3JcbiAgICBjb25zdCBuZ0FmdGVyVmlld0luaXQgPSB0YXJnZXQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdDtcbiAgICB0YXJnZXQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgICAgbmdBZnRlclZpZXdJbml0ICYmIG5nQWZ0ZXJWaWV3SW5pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIHBlcmZ1bWUuZW5kKHRhcmdldE5hbWUgfHwgdGFyZ2V0Lm5hbWUpO1xuICAgIH07XG5cbiAgICAvLyBDb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0YXJnZXQucHJvdG90eXBlKTtcblxuICAgIC8vIFJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19

@@ -1,2 +0,2 @@

import { Inject, Injectable, InjectionToken, NgModule } from '@angular/core';
import { InjectionToken, ɵɵdefineNgModule, ɵɵdefineInjector, ɵɵinject, ɵsetClassMetadata, NgModule, Inject, ɵɵdefineInjectable, Injectable } from '@angular/core';
import Perfume from 'perfume.js';

@@ -12,9 +12,11 @@

}
PerfumeRootModule.decorators = [
{ type: NgModule, args: [{},] }
];
/** @nocollapse */
PerfumeRootModule.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [PERFUME_CONFIG,] }] }
];
PerfumeRootModule.ngModuleDef = ɵɵdefineNgModule({ type: PerfumeRootModule });
PerfumeRootModule.ngInjectorDef = ɵɵdefineInjector({ factory: function PerfumeRootModule_Factory(t) { return new (t || PerfumeRootModule)(ɵɵinject(PERFUME_CONFIG)); } });
/*@__PURE__*/ ɵsetClassMetadata(PerfumeRootModule, [{
type: NgModule,
args: [{}]
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [PERFUME_CONFIG]
}] }]; }, null);
class NgPerfume {

@@ -51,7 +53,6 @@ constructor() {

}
NgPerfume.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NgPerfume.ctorParameters = () => [];
NgPerfume.ngInjectableDef = ɵɵdefineInjectable({ token: NgPerfume, factory: function NgPerfume_Factory(t) { return new (t || NgPerfume)(); }, providedIn: null });
/*@__PURE__*/ ɵsetClassMetadata(NgPerfume, [{
type: Injectable
}], function () { return []; }, null);
class PerfumeModule {

@@ -71,9 +72,12 @@ static forRoot(config) {

}
PerfumeModule.decorators = [
{ type: NgModule, args: [{
PerfumeModule.ngModuleDef = ɵɵdefineNgModule({ type: PerfumeModule });
PerfumeModule.ngInjectorDef = ɵɵdefineInjector({ factory: function PerfumeModule_Factory(t) { return new (t || PerfumeModule)(); }, imports: [[]] });
/*@__PURE__*/ ɵsetClassMetadata(PerfumeModule, [{
type: NgModule,
args: [{
imports: [],
declarations: [],
exports: [],
},] }
];
}]
}], null, null);
/**

@@ -118,4 +122,3 @@ * Component View Init (CVI) decorator

export { perfume, PERFUME_CONFIG, PerfumeRootModule, NgPerfume, PerfumeModule, PerfumeAfterViewInit };
//# sourceMappingURL=perfume.js-angular.js.map
export { NgPerfume, PERFUME_CONFIG, PerfumeAfterViewInit, PerfumeModule, PerfumeRootModule, perfume };
//# sourceMappingURL=perfume.js-angular.js.map
import { __spread } from 'tslib';
import { Inject, Injectable, InjectionToken, NgModule } from '@angular/core';
import { InjectionToken, ɵɵdefineNgModule, ɵɵdefineInjector, ɵɵinject, ɵsetClassMetadata, NgModule, Inject, ɵɵdefineInjectable, Injectable } from '@angular/core';
import Perfume from 'perfume.js';

@@ -12,11 +12,13 @@

}
PerfumeRootModule.decorators = [
{ type: NgModule, args: [{},] }
];
/** @nocollapse */
PerfumeRootModule.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [PERFUME_CONFIG,] }] }
]; };
PerfumeRootModule.ngModuleDef = ɵɵdefineNgModule({ type: PerfumeRootModule });
PerfumeRootModule.ngInjectorDef = ɵɵdefineInjector({ factory: function PerfumeRootModule_Factory(t) { return new (t || PerfumeRootModule)(ɵɵinject(PERFUME_CONFIG)); } });
return PerfumeRootModule;
}());
/*@__PURE__*/ ɵsetClassMetadata(PerfumeRootModule, [{
type: NgModule,
args: [{}]
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [PERFUME_CONFIG]
}] }]; }, null);
var NgPerfume = /** @class */ (function () {

@@ -52,9 +54,8 @@ function NgPerfume() {

};
NgPerfume.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NgPerfume.ctorParameters = function () { return []; };
NgPerfume.ngInjectableDef = ɵɵdefineInjectable({ token: NgPerfume, factory: function NgPerfume_Factory(t) { return new (t || NgPerfume)(); }, providedIn: null });
return NgPerfume;
}());
/*@__PURE__*/ ɵsetClassMetadata(NgPerfume, [{
type: Injectable
}], function () { return []; }, null);
var PerfumeModule = /** @class */ (function () {

@@ -75,11 +76,14 @@ function PerfumeModule() {

};
PerfumeModule.decorators = [
{ type: NgModule, args: [{
imports: [],
declarations: [],
exports: [],
},] }
];
PerfumeModule.ngModuleDef = ɵɵdefineNgModule({ type: PerfumeModule });
PerfumeModule.ngInjectorDef = ɵɵdefineInjector({ factory: function PerfumeModule_Factory(t) { return new (t || PerfumeModule)(); }, imports: [[]] });
return PerfumeModule;
}());
/*@__PURE__*/ ɵsetClassMetadata(PerfumeModule, [{
type: NgModule,
args: [{
imports: [],
declarations: [],
exports: [],
}]
}], null, null);
/**

@@ -132,4 +136,3 @@ * Component View Init (CVI) decorator

export { perfume, PERFUME_CONFIG, PerfumeRootModule, NgPerfume, PerfumeModule, PerfumeAfterViewInit };
//# sourceMappingURL=perfume.js-angular.js.map
export { NgPerfume, PERFUME_CONFIG, PerfumeAfterViewInit, PerfumeModule, PerfumeRootModule, perfume };
//# sourceMappingURL=perfume.js-angular.js.map
import { AfterViewInit, InjectionToken, ModuleWithProviders } from '@angular/core';
import Perfume, { IPerfumeConfig } from 'perfume.js';
import * as i0 from "@angular/core";
export declare let perfume: any;
export declare const PERFUME_CONFIG: InjectionToken<{}>;
export declare const PERFUME_CONFIG: InjectionToken<unknown>;
export declare class PerfumeRootModule {
config: IPerfumeConfig;
constructor(config: IPerfumeConfig);
static ngModuleDef: i0.ɵɵNgModuleDefWithMeta<PerfumeRootModule, never, never, never>;
static ngInjectorDef: i0.ɵɵInjectorDef<PerfumeRootModule>;
}

@@ -25,5 +28,8 @@ export declare class NgPerfume {

sendTiming(metricName: string, duration: number): void;
static ngInjectableDef: i0.ɵɵInjectableDef<NgPerfume>;
}
export declare class PerfumeModule {
static forRoot(config: any): ModuleWithProviders;
static ngModuleDef: i0.ɵɵNgModuleDefWithMeta<PerfumeModule, never, never, never>;
static ngInjectorDef: i0.ɵɵInjectorDef<PerfumeModule>;
}

@@ -30,0 +36,0 @@ /**

{
"name": "perfume.js/angular",
"version": "2.1.1",
"version": "3.0.0-beta.0",
"peerDependencies": {

@@ -17,7 +17,9 @@ "@angular/common": "^6.0.0",

"typings": "perfume.js-angular.d.ts",
"metadata": "perfume.js-angular.metadata.json",
"sideEffects": false,
"dependencies": {
"tslib": "^1.9.0"
},
"scripts": {
"prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.\\nPlease delete and rebuild the package, without compiling with Ivy, before attempting to publish.\\n')\" && exit 1"
}
}
/**
* Generated bundle index. Do not edit.
*/
/// <amd-module name="perfume.js/angular" />
export * from './public_api';

@@ -84,2 +84,7 @@ /*

: cancelIdleCallbackShim;
var supportsPromisesNatively = typeof Promise === 'function' &&
Promise.toString().indexOf('[native code]') > -1;
var supportsMutationObserver = 'MutationObserver' in window ||
'WebKitMutationObserver' in window ||
'MozMutationObserver' in window;
/*

@@ -127,2 +132,5 @@ * Copyright 2018 Google Inc. All Rights Reserved.

};
var discardMicrotasks = function () {
return function (microtask) { };
};
/**

@@ -136,6 +144,7 @@ * Queues a function to be run in the next microtask. If the browser supports

*/
export var queueMicrotask = typeof Promise === 'function' &&
Promise.toString().indexOf('[native code]') > -1
export var queueMicrotask = supportsPromisesNatively
? createQueueMicrotaskViaPromises()
: createQueueMicrotaskViaMutationObserver();
: supportsMutationObserver
? createQueueMicrotaskViaMutationObserver()
: discardMicrotasks();
var DEFAULT_MIN_TASK_TIME = 0;

@@ -142,0 +151,0 @@ var isSafari_ = !!(typeof window.safari === 'object' && window.safari.pushNotification);

/*!
* Perfume.js v2.1.2 (http://zizzamia.github.io/perfume)
* Perfume.js v3.0.0-beta.0 (http://zizzamia.github.io/perfume)
* Copyright 2018 The Perfume Authors (https://github.com/Zizzamia/perfume.js/graphs/contributors)

@@ -13,4 +13,4 @@ * Licensed under MIT (https://github.com/Zizzamia/perfume.js/blob/master/LICENSE)

function Perfume(options) {
var _this = this;
if (options === void 0) { options = {}; }
var _this = this;
this.config = {

@@ -39,4 +39,4 @@ // Metrics

this.logMetricWarn = 'Please provide a metric name';
this.metrics = new Map();
this.observers = new Map();
this.metrics = {};
this.observers = {};
this.didVisibilityChange = function () {

@@ -65,3 +65,3 @@ if (document.hidden) {

_this.logDebug('observeFirstContentfulPaint');
_this.observers.set('fcp', resolve);
_this.observers['fcp'] = resolve;
_this.initFirstPaint();

@@ -74,3 +74,3 @@ });

this.observeFirstInputDelay = new Promise(function (resolve) {
_this.observers.set('fid', resolve);
_this.observers.fid = resolve;
_this.initFirstInputDelay();

@@ -93,10 +93,10 @@ });

}
if (this.metrics.has(metricName)) {
if (this.metrics[metricName]) {
this.logWarn(this.config.logPrefix, 'Recording already started.');
return;
}
this.metrics.set(metricName, {
this.metrics[metricName] = {
end: 0,
start: this.perf.now(),
});
};
// Creates a timestamp in the browser's performance entry buffer

@@ -115,3 +115,3 @@ this.perf.mark(metricName, 'start');

}
var metric = this.metrics.get(metricName);
var metric = this.metrics[metricName];
if (!metric) {

@@ -127,3 +127,3 @@ this.logWarn(this.config.logPrefix, 'Recording already stopped.');

var duration2Decimal = parseFloat(duration.toFixed(2));
this.metrics.delete(metricName);
delete this.metrics[metricName];
this.queue.pushTask(function () {

@@ -302,7 +302,7 @@ // Log to console, delete metric and send to analytics tracker

this.firstContentfulPaintDuration = duration2Decimal;
this.observers.get('fcp')(duration2Decimal);
this.observers['fcp'](duration2Decimal);
}
if (metricName === 'firstInputDelay') {
this.firstInputDelayDuration = duration2Decimal;
this.observers.get('fid')(duration2Decimal);
this.observers['fid'](duration2Decimal);
}

@@ -309,0 +309,0 @@ // Logs the metric in the internal console.log

@@ -86,2 +86,7 @@ "use strict";

: cancelIdleCallbackShim;
var supportsPromisesNatively = typeof Promise === 'function' &&
Promise.toString().indexOf('[native code]') > -1;
var supportsMutationObserver = 'MutationObserver' in window ||
'WebKitMutationObserver' in window ||
'MozMutationObserver' in window;
/*

@@ -129,2 +134,5 @@ * Copyright 2018 Google Inc. All Rights Reserved.

};
var discardMicrotasks = function () {
return function (microtask) { };
};
/**

@@ -138,6 +146,7 @@ * Queues a function to be run in the next microtask. If the browser supports

*/
exports.queueMicrotask = typeof Promise === 'function' &&
Promise.toString().indexOf('[native code]') > -1
exports.queueMicrotask = supportsPromisesNatively
? createQueueMicrotaskViaPromises()
: createQueueMicrotaskViaMutationObserver();
: supportsMutationObserver
? createQueueMicrotaskViaMutationObserver()
: discardMicrotasks();
var DEFAULT_MIN_TASK_TIME = 0;

@@ -144,0 +153,0 @@ var isSafari_ = !!(typeof window.safari === 'object' && window.safari.pushNotification);

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/*!
* Perfume.js v2.1.2 (http://zizzamia.github.io/perfume)
* Perfume.js v3.0.0-beta.0 (http://zizzamia.github.io/perfume)
* Copyright 2018 The Perfume Authors (https://github.com/Zizzamia/perfume.js/graphs/contributors)

@@ -15,4 +15,4 @@ * Licensed under MIT (https://github.com/Zizzamia/perfume.js/blob/master/LICENSE)

function Perfume(options) {
var _this = this;
if (options === void 0) { options = {}; }
var _this = this;
this.config = {

@@ -41,4 +41,4 @@ // Metrics

this.logMetricWarn = 'Please provide a metric name';
this.metrics = new Map();
this.observers = new Map();
this.metrics = {};
this.observers = {};
this.didVisibilityChange = function () {

@@ -67,3 +67,3 @@ if (document.hidden) {

_this.logDebug('observeFirstContentfulPaint');
_this.observers.set('fcp', resolve);
_this.observers['fcp'] = resolve;
_this.initFirstPaint();

@@ -76,3 +76,3 @@ });

this.observeFirstInputDelay = new Promise(function (resolve) {
_this.observers.set('fid', resolve);
_this.observers.fid = resolve;
_this.initFirstInputDelay();

@@ -95,10 +95,10 @@ });

}
if (this.metrics.has(metricName)) {
if (this.metrics[metricName]) {
this.logWarn(this.config.logPrefix, 'Recording already started.');
return;
}
this.metrics.set(metricName, {
this.metrics[metricName] = {
end: 0,
start: this.perf.now(),
});
};
// Creates a timestamp in the browser's performance entry buffer

@@ -117,3 +117,3 @@ this.perf.mark(metricName, 'start');

}
var metric = this.metrics.get(metricName);
var metric = this.metrics[metricName];
if (!metric) {

@@ -129,3 +129,3 @@ this.logWarn(this.config.logPrefix, 'Recording already stopped.');

var duration2Decimal = parseFloat(duration.toFixed(2));
this.metrics.delete(metricName);
delete this.metrics[metricName];
this.queue.pushTask(function () {

@@ -304,7 +304,7 @@ // Log to console, delete metric and send to analytics tracker

this.firstContentfulPaintDuration = duration2Decimal;
this.observers.get('fcp')(duration2Decimal);
this.observers['fcp'](duration2Decimal);
}
if (metricName === 'firstInputDelay') {
this.firstInputDelayDuration = duration2Decimal;
this.observers.get('fid')(duration2Decimal);
this.observers['fid'](duration2Decimal);
}

@@ -311,0 +311,0 @@ // Logs the metric in the internal console.log

@@ -1,2 +0,2 @@

var Perfume=function(){"use strict";var t=function(){return function(t,i,e){this.name=t,this.version=i,this.os=e}}(),i=function(){return function(t){this.version=t,this.name="node",this.os=process.platform}}(),e=function(){return function(){this.bot=!0,this.name="bot",this.version=null,this.os=null}}(),n=3,r=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],s=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/],["Search Bot",/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/]];function o(){return"undefined"!=typeof navigator?function(i){var o=""!==i&&r.reduce(function(t,e){var n=e[0],r=e[1];if(t)return t;var s=r.exec(i);return!!s&&[n,s]},!1);if(!o)return null;var a=o[0],u=o[1];if("searchbot"===a)return new e;var c=u[1]&&u[1].split(/[._]/).slice(0,3);c?c.length<n&&(c=c.concat(new Array(n-c.length).fill("0"))):c=[];return new t(a,c.join("."),function(t){var i=s.find(function(i){i[0];var e=i[1];return e.test(t)});return i?i[0]:null}(i))}(navigator.userAgent):"undefined"!=typeof process&&process.version?new i(process.version.slice(1)):null}var a,u,c,f,h=function(){return+new Date},d="function"==typeof window.requestIdleCallback,l=function(){function t(t){this.initTime_=t}return Object.defineProperty(t.prototype,"didTimeout",{get:function(){return!1},enumerable:!0,configurable:!0}),t.prototype.timeRemaining=function(){return Math.max(0,50-(h()-this.initTime_))},t}(),p=d?window.requestIdleCallback:function(t){var i=new l(h());return setTimeout(function(){return t(i)},0)},g=d?window.cancelIdleCallback:function(t){clearTimeout(t)},m="function"==typeof Promise&&Promise.toString().indexOf("[native code]")>-1?function(t){Promise.resolve().then(t)}:(a=0,u=[],c=new MutationObserver(function(){u.forEach(function(t){return t()}),u=[]}),f=document.createTextNode(""),c.observe(f,{characterData:!0}),function(t){u.push(t),f.data=String(++a%2)}),w=0,y=!("object"!=typeof window.safari||!window.safari.pushNotification),b=function(){function t(t){var i=void 0===t?{}:t,e=i.ensureTasksRun,n=void 0!==e&&e,r=i.defaultMinTaskTime,s=void 0===r?w:r;this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.idleCallbackHandle_=null,this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.defaultMinTaskTime_=s,this.ensureTasksRun_=n,this.runTasksImmediately=this.runTasksImmediately.bind(this),this.runTasks_=this.runTasks_.bind(this),this.onVisibilityChange_=this.onVisibilityChange_.bind(this),this.ensureTasksRun_&&(addEventListener("visibilitychange",this.onVisibilityChange_,!0),y&&addEventListener("beforeunload",this.runTasksImmediately,!0))}return t.prototype.pushTask=function(t){this.addTask_(Array.prototype.push,t)},t.prototype.unshiftTask=function(t){this.addTask_(Array.prototype.unshift,t)},t.prototype.runTasksImmediately=function(){this.runTasks_()},t.prototype.hasPendingTasks=function(){return this.taskQueue_.length>0},t.prototype.clearPendingTasks=function(){this.taskQueue_=[],this.cancelScheduledRun_()},t.prototype.getState=function(){return this.state_},t.prototype.destroy=function(){this.taskQueue_=[],this.cancelScheduledRun_(),this.ensureTasksRun_&&(removeEventListener("visibilitychange",this.onVisibilityChange_,!0),y&&removeEventListener("beforeunload",this.runTasksImmediately,!0))},t.prototype.addTask_=function(t,i,e){var n=(void 0===e?{}:e).minTaskTime,r=void 0===n?this.defaultMinTaskTime_:n,s={time:h(),visibilityState:document.visibilityState};t.call(this.taskQueue_,{state:s,task:i,minTaskTime:r}),this.scheduleTasksToRun_()},t.prototype.scheduleTasksToRun_=function(){this.ensureTasksRun_&&"hidden"===document.visibilityState?m(this.runTasks_):this.idleCallbackHandle_||(this.idleCallbackHandle_=p(this.runTasks_))},t.prototype.runTasks_=function(t){if(this.cancelScheduledRun_(),!this.isProcessing_){for(this.isProcessing_=!0;this.hasPendingTasks()&&!v(t,this.taskQueue_[0].minTaskTime);){var i=this.taskQueue_.shift(),e=i.task,n=i.state;this.state_=n,e(n),this.state_=null}this.isProcessing_=!1,this.hasPendingTasks()&&this.scheduleTasksToRun_()}},t.prototype.cancelScheduledRun_=function(){g(this.idleCallbackHandle_),this.idleCallbackHandle_=null},t.prototype.onVisibilityChange_=function(){"hidden"===document.visibilityState&&this.runTasksImmediately()},t}(),v=function(t,i){return!!(t&&t.timeRemaining()<=i)},T=function(){function t(t){this.config=t}return t.prototype.now=function(){return Date.now()/1e3},t.prototype.mark=function(t,i){},t.prototype.measure=function(t,i){return this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){var i=this;setTimeout(function(){t(i.getFirstPaint())})},t.prototype.getDurationByMetric=function(t,i){return i.end-i.start||0},t.prototype.getFirstPaint=function(){var t=window.performance.timing,i={duration:0,entryType:"paint",name:"first-contentful-paint",startTime:0};return t&&0!==t.navigationStart&&(i.startTime=Date.now()-t.navigationStart),[i]},t}();!function(t,i){var e,n,r,s=[],o={passive:!0,capture:!0},a=new Date,u="pointerup",c="pointercancel";function f(t,s){e||(e=s,n=t,r=new Date,l(i),h())}function h(){n>=0&&n<r-a&&(s.forEach(function(t){t(n,e)}),s=[])}function d(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){function r(){f(e,n),a()}function s(){a()}function a(){i(u,r,o),i(c,s,o)}t(u,r,o),t(c,s,o)}(n,e):f(n,e)}}function l(t){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(i){t(i,d,o)})}l(t),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(t){s.push(t),h()}}(addEventListener,removeEventListener);var k=function(){function t(t){this.config=t}return t.supported=function(){return window.performance&&!!performance.now&&!!performance.mark},t.supportedPerformanceObserver=function(){return window.chrome&&"PerformanceObserver"in window},t.prototype.now=function(){return window.performance.now()},t.prototype.mark=function(t,i){var e="mark_"+t+"_"+i;window.performance.mark(e)},t.prototype.measure=function(t,i){var e="mark_"+t+"_start",n="mark_"+t+"_end";return window.performance.measure(t,e,n),this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){this.perfObserver=new PerformanceObserver(this.performanceObserverCb.bind(this,t)),this.perfObserver.observe({entryTypes:["paint"]})},t.prototype.getDurationByMetric=function(t,i){var e=this.getMeasurementForGivenName(t);return e&&"measure"===e.entryType?e.duration:-1},t.prototype.getMeasurementForGivenName=function(t){var i=window.performance.getEntriesByName(t);return i[i.length-1]},t.prototype.performanceObserverCb=function(t,i){var e=this,n=i.getEntries();t(n),n.forEach(function(t){e.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&e.perfObserver.disconnect()})},t}();return function(){function t(t){void 0===t&&(t={});var i=this;this.config={firstContentfulPaint:!1,firstPaint:!1,firstInputDelay:!1,googleAnalytics:{enable:!1,timingVar:"name"},browserTracker:!1,logPrefix:"Perfume.js:",logging:!0,maxMeasureTime:15e3,warning:!1,debugging:!1},this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.isHidden=!1,this.logMetricWarn="Please provide a metric name",this.metrics=new Map,this.observers=new Map,this.didVisibilityChange=function(){document.hidden&&(i.isHidden=document.hidden)},this.config=Object.assign({},this.config,t),this.perf=k.supported()?new k(this.config):new T(this.config),this.config.browserTracker&&(this.browser=o()),k.supportedPerformanceObserver()||(this.perfEmulated=new T(this.config)),(this.config.firstPaint||this.config.firstContentfulPaint)&&(this.observeFirstContentfulPaint=new Promise(function(t){i.logDebug("observeFirstContentfulPaint"),i.observers.set("fcp",t),i.initFirstPaint()})),this.config.firstInputDelay&&(this.observeFirstInputDelay=new Promise(function(t){i.observers.set("fid",t),i.initFirstInputDelay()})),this.onVisibilityChange(),this.queue=new b({ensureTasksRun:!0})}return t.prototype.start=function(t){this.checkMetricName(t)&&(this.metrics.has(t)?this.logWarn(this.config.logPrefix,"Recording already started."):(this.metrics.set(t,{end:0,start:this.perf.now()}),this.perf.mark(t,"start"),this.isHidden=!1))},t.prototype.end=function(t){var i=this;if(this.checkMetricName(t)){var e=this.metrics.get(t);if(e){e.end=this.perf.now(),this.perf.mark(t,"end");var n=this.perf.measure(t,e),r=parseFloat(n.toFixed(2));return this.metrics.delete(t),this.queue.pushTask(function(){i.log(t,r),i.sendTiming(t,r)}),r}this.logWarn(this.config.logPrefix,"Recording already stopped.")}},t.prototype.endPaint=function(t){var i=this;return new Promise(function(e){setTimeout(function(){var n=i.end(t);e(n)})})},t.prototype.log=function(t,i){if(!this.isHidden&&this.config.logging)if(t){var e=i.toFixed(2),n="%c "+this.config.logPrefix+" "+t+" "+e+" ms";window.console.log(n,"color: #ff6d00;font-size:11px;")}else this.logWarn(this.config.logPrefix,this.logMetricWarn)},t.prototype.logDebug=function(t,i){void 0===i&&(i=""),this.config.debugging&&window.console.log("Perfume.js debugging "+t+":",i)},t.prototype.sendTiming=function(t,i){if(!this.isHidden){var e=this.config.browserTracker?this.browser:void 0,n=this.addBrowserToMetricName(t);if(this.config.analyticsTracker&&this.config.analyticsTracker(t,i,e),this.config.googleAnalytics.enable)if(window.ga){var r=Math.round(i);window.ga("send","timing",n,this.config.googleAnalytics.timingVar,r)}else this.logWarn(this.config.logPrefix,"Google Analytics has not been loaded")}},t.prototype.addBrowserToMetricName=function(t){if(!this.config.browserTracker)return t;var i=t;this.browser.name&&(i+="."+this.browser.name.replace(/\s/g,""),this.browser.os&&(i+="."+this.browser.os.replace(/\s/g,"")));return i},t.prototype.checkMetricName=function(t){return!!t||(this.logWarn(this.config.logPrefix,this.logMetricWarn),!1)},t.prototype.firstContentfulPaintCb=function(t){var i=this;this.logDebug("firstContentfulPaintCb",t),t.forEach(function(t){i.queue.pushTask(function(){i.config.firstPaint&&"first-paint"===t.name&&i.logMetric(t.startTime,"First Paint","firstPaint"),i.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&i.logMetric(t.startTime,"First Contentful Paint","firstContentfulPaint")})})},t.prototype.initFirstPaint=function(){if(this.logDebug("initFirstPaint"),k.supportedPerformanceObserver()){this.logDebug("initFirstPaint.supportedPerformanceObserver");try{this.perf.firstContentfulPaint(this.firstContentfulPaintCb.bind(this))}catch(t){this.logWarn(this.config.logPrefix,"initFirstPaint failed")}}else this.perfEmulated&&(this.logDebug("initFirstPaint.perfEmulated"),this.perfEmulated.firstContentfulPaint(this.firstContentfulPaintCb.bind(this)))},t.prototype.initFirstInputDelay=function(){var t=this;k.supported()&&this.config.firstInputDelay&&perfMetrics.onFirstInputDelay(function(i,e){t.queue.pushTask(function(){t.logMetric(i,"First Input Delay","firstInputDelay")})})},t.prototype.onVisibilityChange=function(){void 0!==document.hidden&&document.addEventListener("visibilitychange",this.didVisibilityChange)},t.prototype.logMetric=function(t,i,e){var n=parseFloat(t.toFixed(2));n>this.config.maxMeasureTime||("firstPaint"===e&&(this.firstPaintDuration=n),"firstContentfulPaint"===e&&(this.firstContentfulPaintDuration=n,this.observers.get("fcp")(n)),"firstInputDelay"===e&&(this.firstInputDelayDuration=n,this.observers.get("fid")(n)),this.log(i,n),this.sendTiming(e,n))},t.prototype.logWarn=function(t,i){this.config.warning&&this.config.logging&&window.console.warn(t,i)},t}()}();
var Perfume=function(){"use strict";var t=function(t,i,e){this.name=t,this.version=i,this.os=e},i=function(t){this.version=t,this.name="node",this.os=process.platform},e=function(){this.bot=!0,this.name="bot",this.version=null,this.os=null},n=3,r=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],s=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/],["Search Bot",/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/]];function o(){return"undefined"!=typeof navigator?function(i){var o=""!==i&&r.reduce((function(t,e){var n=e[0],r=e[1];if(t)return t;var s=r.exec(i);return!!s&&[n,s]}),!1);if(!o)return null;var a=o[0],u=o[1];if("searchbot"===a)return new e;var c=u[1]&&u[1].split(/[._]/).slice(0,3);c?c.length<n&&(c=c.concat(new Array(n-c.length).fill("0"))):c=[];return new t(a,c.join("."),function(t){var i=s.find((function(i){i[0];return i[1].test(t)}));return i?i[0]:null}(i))}(navigator.userAgent):"undefined"!=typeof process&&process.version?new i(process.version.slice(1)):null}var a,u,c,f,h=function(){return+new Date},d="function"==typeof window.requestIdleCallback,l=function(){function t(t){this.initTime_=t}return Object.defineProperty(t.prototype,"didTimeout",{get:function(){return!1},enumerable:!0,configurable:!0}),t.prototype.timeRemaining=function(){return Math.max(0,50-(h()-this.initTime_))},t}(),p=d?window.requestIdleCallback:function(t){var i=new l(h());return setTimeout((function(){return t(i)}),0)},g=d?window.cancelIdleCallback:function(t){clearTimeout(t)},m="function"==typeof Promise&&Promise.toString().indexOf("[native code]")>-1,w="MutationObserver"in window||"WebKitMutationObserver"in window||"MozMutationObserver"in window,y=m?function(t){Promise.resolve().then(t)}:w?(a=0,u=[],c=new MutationObserver((function(){u.forEach((function(t){return t()})),u=[]})),f=document.createTextNode(""),c.observe(f,{characterData:!0}),function(t){u.push(t),f.data=String(++a%2)}):function(t){},b=0,v=!("object"!=typeof window.safari||!window.safari.pushNotification),T=function(){function t(t){var i=void 0===t?{}:t,e=i.ensureTasksRun,n=void 0!==e&&e,r=i.defaultMinTaskTime,s=void 0===r?b:r;this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.idleCallbackHandle_=null,this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.defaultMinTaskTime_=s,this.ensureTasksRun_=n,this.runTasksImmediately=this.runTasksImmediately.bind(this),this.runTasks_=this.runTasks_.bind(this),this.onVisibilityChange_=this.onVisibilityChange_.bind(this),this.ensureTasksRun_&&(addEventListener("visibilitychange",this.onVisibilityChange_,!0),v&&addEventListener("beforeunload",this.runTasksImmediately,!0))}return t.prototype.pushTask=function(t){this.addTask_(Array.prototype.push,t)},t.prototype.unshiftTask=function(t){this.addTask_(Array.prototype.unshift,t)},t.prototype.runTasksImmediately=function(){this.runTasks_()},t.prototype.hasPendingTasks=function(){return this.taskQueue_.length>0},t.prototype.clearPendingTasks=function(){this.taskQueue_=[],this.cancelScheduledRun_()},t.prototype.getState=function(){return this.state_},t.prototype.destroy=function(){this.taskQueue_=[],this.cancelScheduledRun_(),this.ensureTasksRun_&&(removeEventListener("visibilitychange",this.onVisibilityChange_,!0),v&&removeEventListener("beforeunload",this.runTasksImmediately,!0))},t.prototype.addTask_=function(t,i,e){var n=(void 0===e?{}:e).minTaskTime,r=void 0===n?this.defaultMinTaskTime_:n,s={time:h(),visibilityState:document.visibilityState};t.call(this.taskQueue_,{state:s,task:i,minTaskTime:r}),this.scheduleTasksToRun_()},t.prototype.scheduleTasksToRun_=function(){this.ensureTasksRun_&&"hidden"===document.visibilityState?y(this.runTasks_):this.idleCallbackHandle_||(this.idleCallbackHandle_=p(this.runTasks_))},t.prototype.runTasks_=function(t){if(this.cancelScheduledRun_(),!this.isProcessing_){for(this.isProcessing_=!0;this.hasPendingTasks()&&!k(t,this.taskQueue_[0].minTaskTime);){var i=this.taskQueue_.shift(),e=i.task,n=i.state;this.state_=n,e(n),this.state_=null}this.isProcessing_=!1,this.hasPendingTasks()&&this.scheduleTasksToRun_()}},t.prototype.cancelScheduledRun_=function(){g(this.idleCallbackHandle_),this.idleCallbackHandle_=null},t.prototype.onVisibilityChange_=function(){"hidden"===document.visibilityState&&this.runTasksImmediately()},t}(),k=function(t,i){return!!(t&&t.timeRemaining()<=i)},P=function(){function t(t){this.config=t}return t.prototype.now=function(){return Date.now()/1e3},t.prototype.mark=function(t,i){},t.prototype.measure=function(t,i){return this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){var i=this;setTimeout((function(){t(i.getFirstPaint())}))},t.prototype.getDurationByMetric=function(t,i){return i.end-i.start||0},t.prototype.getFirstPaint=function(){var t=window.performance.timing,i={duration:0,entryType:"paint",name:"first-contentful-paint",startTime:0};return t&&0!==t.navigationStart&&(i.startTime=Date.now()-t.navigationStart),[i]},t}();!function(t,i){var e,n,r,s=[],o={passive:!0,capture:!0},a=new Date,u="pointerup",c="pointercancel";function f(t,s){e||(e=s,n=t,r=new Date,l(i),h())}function h(){n>=0&&n<r-a&&(s.forEach((function(t){t(n,e)})),s=[])}function d(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){function r(){f(e,n),a()}function s(){a()}function a(){i(u,r,o),i(c,s,o)}t(u,r,o),t(c,s,o)}(n,e):f(n,e)}}function l(t){["click","mousedown","keydown","touchstart","pointerdown"].forEach((function(i){t(i,d,o)}))}l(t),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(t){s.push(t),h()}}(addEventListener,removeEventListener);var _=function(){function t(t){this.config=t}return t.supported=function(){return window.performance&&!!performance.now&&!!performance.mark},t.supportedPerformanceObserver=function(){return window.chrome&&"PerformanceObserver"in window},t.prototype.now=function(){return window.performance.now()},t.prototype.mark=function(t,i){var e="mark_"+t+"_"+i;window.performance.mark(e)},t.prototype.measure=function(t,i){var e="mark_"+t+"_start",n="mark_"+t+"_end";return window.performance.measure(t,e,n),this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){this.perfObserver=new PerformanceObserver(this.performanceObserverCb.bind(this,t)),this.perfObserver.observe({entryTypes:["paint"]})},t.prototype.getDurationByMetric=function(t,i){var e=this.getMeasurementForGivenName(t);return e&&"measure"===e.entryType?e.duration:-1},t.prototype.getMeasurementForGivenName=function(t){var i=window.performance.getEntriesByName(t);return i[i.length-1]},t.prototype.performanceObserverCb=function(t,i){var e=this,n=i.getEntries();t(n),n.forEach((function(t){e.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&e.perfObserver.disconnect()}))},t}();return function(){function t(t){var i=this;void 0===t&&(t={}),this.config={firstContentfulPaint:!1,firstPaint:!1,firstInputDelay:!1,googleAnalytics:{enable:!1,timingVar:"name"},browserTracker:!1,logPrefix:"Perfume.js:",logging:!0,maxMeasureTime:15e3,warning:!1,debugging:!1},this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.isHidden=!1,this.logMetricWarn="Please provide a metric name",this.metrics={},this.observers={},this.didVisibilityChange=function(){document.hidden&&(i.isHidden=document.hidden)},this.config=Object.assign({},this.config,t),this.perf=_.supported()?new _(this.config):new P(this.config),this.config.browserTracker&&(this.browser=o()),_.supportedPerformanceObserver()||(this.perfEmulated=new P(this.config)),(this.config.firstPaint||this.config.firstContentfulPaint)&&(this.observeFirstContentfulPaint=new Promise((function(t){i.logDebug("observeFirstContentfulPaint"),i.observers.fcp=t,i.initFirstPaint()}))),this.config.firstInputDelay&&(this.observeFirstInputDelay=new Promise((function(t){i.observers.fid=t,i.initFirstInputDelay()}))),this.onVisibilityChange(),this.queue=new T({ensureTasksRun:!0})}return t.prototype.start=function(t){this.checkMetricName(t)&&(this.metrics[t]?this.logWarn(this.config.logPrefix,"Recording already started."):(this.metrics[t]={end:0,start:this.perf.now()},this.perf.mark(t,"start"),this.isHidden=!1))},t.prototype.end=function(t){var i=this;if(this.checkMetricName(t)){var e=this.metrics[t];if(e){e.end=this.perf.now(),this.perf.mark(t,"end");var n=this.perf.measure(t,e),r=parseFloat(n.toFixed(2));return delete this.metrics[t],this.queue.pushTask((function(){i.log(t,r),i.sendTiming(t,r)})),r}this.logWarn(this.config.logPrefix,"Recording already stopped.")}},t.prototype.endPaint=function(t){var i=this;return new Promise((function(e){setTimeout((function(){var n=i.end(t);e(n)}))}))},t.prototype.log=function(t,i){if(!this.isHidden&&this.config.logging)if(t){var e=i.toFixed(2),n="%c "+this.config.logPrefix+" "+t+" "+e+" ms";window.console.log(n,"color: #ff6d00;font-size:11px;")}else this.logWarn(this.config.logPrefix,this.logMetricWarn)},t.prototype.logDebug=function(t,i){void 0===i&&(i=""),this.config.debugging&&window.console.log("Perfume.js debugging "+t+":",i)},t.prototype.sendTiming=function(t,i){if(!this.isHidden){var e=this.config.browserTracker?this.browser:void 0,n=this.addBrowserToMetricName(t);if(this.config.analyticsTracker&&this.config.analyticsTracker(t,i,e),this.config.googleAnalytics.enable)if(window.ga){var r=Math.round(i);window.ga("send","timing",n,this.config.googleAnalytics.timingVar,r)}else this.logWarn(this.config.logPrefix,"Google Analytics has not been loaded")}},t.prototype.addBrowserToMetricName=function(t){if(!this.config.browserTracker)return t;var i=t;this.browser.name&&(i+="."+this.browser.name.replace(/\s/g,""),this.browser.os&&(i+="."+this.browser.os.replace(/\s/g,"")));return i},t.prototype.checkMetricName=function(t){return!!t||(this.logWarn(this.config.logPrefix,this.logMetricWarn),!1)},t.prototype.firstContentfulPaintCb=function(t){var i=this;this.logDebug("firstContentfulPaintCb",t),t.forEach((function(t){i.queue.pushTask((function(){i.config.firstPaint&&"first-paint"===t.name&&i.logMetric(t.startTime,"First Paint","firstPaint"),i.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&i.logMetric(t.startTime,"First Contentful Paint","firstContentfulPaint")}))}))},t.prototype.initFirstPaint=function(){if(this.logDebug("initFirstPaint"),_.supportedPerformanceObserver()){this.logDebug("initFirstPaint.supportedPerformanceObserver");try{this.perf.firstContentfulPaint(this.firstContentfulPaintCb.bind(this))}catch(t){this.logWarn(this.config.logPrefix,"initFirstPaint failed")}}else this.perfEmulated&&(this.logDebug("initFirstPaint.perfEmulated"),this.perfEmulated.firstContentfulPaint(this.firstContentfulPaintCb.bind(this)))},t.prototype.initFirstInputDelay=function(){var t=this;_.supported()&&this.config.firstInputDelay&&perfMetrics.onFirstInputDelay((function(i,e){t.queue.pushTask((function(){t.logMetric(i,"First Input Delay","firstInputDelay")}))}))},t.prototype.onVisibilityChange=function(){void 0!==document.hidden&&document.addEventListener("visibilitychange",this.didVisibilityChange)},t.prototype.logMetric=function(t,i,e){var n=parseFloat(t.toFixed(2));n>this.config.maxMeasureTime||("firstPaint"===e&&(this.firstPaintDuration=n),"firstContentfulPaint"===e&&(this.firstContentfulPaintDuration=n,this.observers.fcp(n)),"firstInputDelay"===e&&(this.firstInputDelayDuration=n,this.observers.fid(n)),this.log(i,n),this.sendTiming(e,n))},t.prototype.logWarn=function(t,i){this.config.warning&&this.config.logging&&window.console.warn(t,i)},t}()}();
//# sourceMappingURL=perfume.iife.min.js.map

@@ -1,2 +0,2 @@

"use strict";require("first-input-delay");var BrowserInfo=function(){return function(t,e,i){this.name=t,this.version=e,this.os=i}}(),NodeInfo=function(){return function(t){this.version=t,this.name="node",this.os=process.platform}}(),BotInfo=function(){return function(){this.bot=!0,this.name="bot",this.version=null,this.os=null}}(),SEARCHBOX_UA_REGEX=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,SEARCHBOT_OS_REGEX=/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/,REQUIRED_VERSION_PARTS=3,userAgentRules=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["searchbot",SEARCHBOX_UA_REGEX]],operatingSystemRules=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/],["Search Bot",SEARCHBOT_OS_REGEX]];function detect(){return"undefined"!=typeof navigator?parseUserAgent(navigator.userAgent):getNodeVersion()}function parseUserAgent(t){var e=""!==t&&userAgentRules.reduce(function(e,i){var n=i[0],r=i[1];if(e)return e;var s=r.exec(t);return!!s&&[n,s]},!1);if(!e)return null;var i=e[0],n=e[1];if("searchbot"===i)return new BotInfo;var r=n[1]&&n[1].split(/[._]/).slice(0,3);return r?r.length<REQUIRED_VERSION_PARTS&&(r=r.concat(new Array(REQUIRED_VERSION_PARTS-r.length).fill("0"))):r=[],new BrowserInfo(i,r.join("."),detectOS(t))}function detectOS(t){var e=operatingSystemRules.find(function(e){e[0];return e[1].test(t)});return e?e[0]:null}function getNodeVersion(){return"undefined"!=typeof process&&process.version?new NodeInfo(process.version.slice(1)):null}var now=function(){return+new Date},supportsRequestIdleCallback_="function"==typeof window.requestIdleCallback,IdleDealine=function(){function t(t){this.initTime_=t}return Object.defineProperty(t.prototype,"didTimeout",{get:function(){return!1},enumerable:!0,configurable:!0}),t.prototype.timeRemaining=function(){return Math.max(0,50-(now()-this.initTime_))},t}(),requestIdleCallbackShim=function(t){var e=new IdleDealine(now());return setTimeout(function(){return t(e)},0)},cancelIdleCallbackShim=function(t){clearTimeout(t)},rIC=supportsRequestIdleCallback_?window.requestIdleCallback:requestIdleCallbackShim,cIC=supportsRequestIdleCallback_?window.cancelIdleCallback:cancelIdleCallbackShim,createQueueMicrotaskViaPromises=function(){return function(t){Promise.resolve().then(t)}},createQueueMicrotaskViaMutationObserver=function(){var t=0,e=[],i=new MutationObserver(function(){e.forEach(function(t){return t()}),e=[]}),n=document.createTextNode("");return i.observe(n,{characterData:!0}),function(i){e.push(i),n.data=String(++t%2)}},queueMicrotask="function"==typeof Promise&&Promise.toString().indexOf("[native code]")>-1?createQueueMicrotaskViaPromises():createQueueMicrotaskViaMutationObserver(),DEFAULT_MIN_TASK_TIME=0,isSafari_=!("object"!=typeof window.safari||!window.safari.pushNotification),IdleQueue=function(){function t(t){var e=void 0===t?{}:t,i=e.ensureTasksRun,n=void 0!==i&&i,r=e.defaultMinTaskTime,s=void 0===r?DEFAULT_MIN_TASK_TIME:r;this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.idleCallbackHandle_=null,this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.defaultMinTaskTime_=s,this.ensureTasksRun_=n,this.runTasksImmediately=this.runTasksImmediately.bind(this),this.runTasks_=this.runTasks_.bind(this),this.onVisibilityChange_=this.onVisibilityChange_.bind(this),this.ensureTasksRun_&&(addEventListener("visibilitychange",this.onVisibilityChange_,!0),isSafari_&&addEventListener("beforeunload",this.runTasksImmediately,!0))}return t.prototype.pushTask=function(t){this.addTask_(Array.prototype.push,t)},t.prototype.unshiftTask=function(t){this.addTask_(Array.prototype.unshift,t)},t.prototype.runTasksImmediately=function(){this.runTasks_()},t.prototype.hasPendingTasks=function(){return this.taskQueue_.length>0},t.prototype.clearPendingTasks=function(){this.taskQueue_=[],this.cancelScheduledRun_()},t.prototype.getState=function(){return this.state_},t.prototype.destroy=function(){this.taskQueue_=[],this.cancelScheduledRun_(),this.ensureTasksRun_&&(removeEventListener("visibilitychange",this.onVisibilityChange_,!0),isSafari_&&removeEventListener("beforeunload",this.runTasksImmediately,!0))},t.prototype.addTask_=function(t,e,i){var n=(void 0===i?{}:i).minTaskTime,r=void 0===n?this.defaultMinTaskTime_:n,s={time:now(),visibilityState:document.visibilityState};t.call(this.taskQueue_,{state:s,task:e,minTaskTime:r}),this.scheduleTasksToRun_()},t.prototype.scheduleTasksToRun_=function(){this.ensureTasksRun_&&"hidden"===document.visibilityState?queueMicrotask(this.runTasks_):this.idleCallbackHandle_||(this.idleCallbackHandle_=rIC(this.runTasks_))},t.prototype.runTasks_=function(t){if(this.cancelScheduledRun_(),!this.isProcessing_){for(this.isProcessing_=!0;this.hasPendingTasks()&&!shouldYield(t,this.taskQueue_[0].minTaskTime);){var e=this.taskQueue_.shift(),i=e.task,n=e.state;this.state_=n,i(n),this.state_=null}this.isProcessing_=!1,this.hasPendingTasks()&&this.scheduleTasksToRun_()}},t.prototype.cancelScheduledRun_=function(){cIC(this.idleCallbackHandle_),this.idleCallbackHandle_=null},t.prototype.onVisibilityChange_=function(){"hidden"===document.visibilityState&&this.runTasksImmediately()},t}(),shouldYield=function(t,e){return!!(t&&t.timeRemaining()<=e)},EmulatedPerformance=function(){function t(t){this.config=t}return t.prototype.now=function(){return Date.now()/1e3},t.prototype.mark=function(t,e){},t.prototype.measure=function(t,e){return this.getDurationByMetric(t,e)},t.prototype.firstContentfulPaint=function(t){var e=this;setTimeout(function(){t(e.getFirstPaint())})},t.prototype.getDurationByMetric=function(t,e){return e.end-e.start||0},t.prototype.getFirstPaint=function(){var t=window.performance.timing,e={duration:0,entryType:"paint",name:"first-contentful-paint",startTime:0};return t&&0!==t.navigationStart&&(e.startTime=Date.now()-t.navigationStart),[e]},t}(),Performance=function(){function t(t){this.config=t}return t.supported=function(){return window.performance&&!!performance.now&&!!performance.mark},t.supportedPerformanceObserver=function(){return window.chrome&&"PerformanceObserver"in window},t.prototype.now=function(){return window.performance.now()},t.prototype.mark=function(t,e){var i="mark_"+t+"_"+e;window.performance.mark(i)},t.prototype.measure=function(t,e){var i="mark_"+t+"_start",n="mark_"+t+"_end";return window.performance.measure(t,i,n),this.getDurationByMetric(t,e)},t.prototype.firstContentfulPaint=function(t){this.perfObserver=new PerformanceObserver(this.performanceObserverCb.bind(this,t)),this.perfObserver.observe({entryTypes:["paint"]})},t.prototype.getDurationByMetric=function(t,e){var i=this.getMeasurementForGivenName(t);return i&&"measure"===i.entryType?i.duration:-1},t.prototype.getMeasurementForGivenName=function(t){var e=window.performance.getEntriesByName(t);return e[e.length-1]},t.prototype.performanceObserverCb=function(t,e){var i=this,n=e.getEntries();t(n),n.forEach(function(t){i.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&i.perfObserver.disconnect()})},t}(),Perfume=function(){function t(t){void 0===t&&(t={});var e=this;this.config={firstContentfulPaint:!1,firstPaint:!1,firstInputDelay:!1,googleAnalytics:{enable:!1,timingVar:"name"},browserTracker:!1,logPrefix:"Perfume.js:",logging:!0,maxMeasureTime:15e3,warning:!1,debugging:!1},this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.isHidden=!1,this.logMetricWarn="Please provide a metric name",this.metrics=new Map,this.observers=new Map,this.didVisibilityChange=function(){document.hidden&&(e.isHidden=document.hidden)},this.config=Object.assign({},this.config,t),this.perf=Performance.supported()?new Performance(this.config):new EmulatedPerformance(this.config),this.config.browserTracker&&(this.browser=detect()),Performance.supportedPerformanceObserver()||(this.perfEmulated=new EmulatedPerformance(this.config)),(this.config.firstPaint||this.config.firstContentfulPaint)&&(this.observeFirstContentfulPaint=new Promise(function(t){e.logDebug("observeFirstContentfulPaint"),e.observers.set("fcp",t),e.initFirstPaint()})),this.config.firstInputDelay&&(this.observeFirstInputDelay=new Promise(function(t){e.observers.set("fid",t),e.initFirstInputDelay()})),this.onVisibilityChange(),this.queue=new IdleQueue({ensureTasksRun:!0})}return t.prototype.start=function(t){this.checkMetricName(t)&&(this.metrics.has(t)?this.logWarn(this.config.logPrefix,"Recording already started."):(this.metrics.set(t,{end:0,start:this.perf.now()}),this.perf.mark(t,"start"),this.isHidden=!1))},t.prototype.end=function(t){var e=this;if(this.checkMetricName(t)){var i=this.metrics.get(t);if(i){i.end=this.perf.now(),this.perf.mark(t,"end");var n=this.perf.measure(t,i),r=parseFloat(n.toFixed(2));return this.metrics.delete(t),this.queue.pushTask(function(){e.log(t,r),e.sendTiming(t,r)}),r}this.logWarn(this.config.logPrefix,"Recording already stopped.")}},t.prototype.endPaint=function(t){var e=this;return new Promise(function(i){setTimeout(function(){var n=e.end(t);i(n)})})},t.prototype.log=function(t,e){if(!this.isHidden&&this.config.logging)if(t){var i=e.toFixed(2),n="%c "+this.config.logPrefix+" "+t+" "+i+" ms";window.console.log(n,"color: #ff6d00;font-size:11px;")}else this.logWarn(this.config.logPrefix,this.logMetricWarn)},t.prototype.logDebug=function(t,e){void 0===e&&(e=""),this.config.debugging&&window.console.log("Perfume.js debugging "+t+":",e)},t.prototype.sendTiming=function(t,e){if(!this.isHidden){var i=this.config.browserTracker?this.browser:void 0,n=this.addBrowserToMetricName(t);if(this.config.analyticsTracker&&this.config.analyticsTracker(t,e,i),this.config.googleAnalytics.enable)if(window.ga){var r=Math.round(e);window.ga("send","timing",n,this.config.googleAnalytics.timingVar,r)}else this.logWarn(this.config.logPrefix,"Google Analytics has not been loaded")}},t.prototype.addBrowserToMetricName=function(t){if(!this.config.browserTracker)return t;var e=t;this.browser.name&&(e+="."+this.browser.name.replace(/\s/g,""),this.browser.os&&(e+="."+this.browser.os.replace(/\s/g,"")));return e},t.prototype.checkMetricName=function(t){return!!t||(this.logWarn(this.config.logPrefix,this.logMetricWarn),!1)},t.prototype.firstContentfulPaintCb=function(t){var e=this;this.logDebug("firstContentfulPaintCb",t),t.forEach(function(t){e.queue.pushTask(function(){e.config.firstPaint&&"first-paint"===t.name&&e.logMetric(t.startTime,"First Paint","firstPaint"),e.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&e.logMetric(t.startTime,"First Contentful Paint","firstContentfulPaint")})})},t.prototype.initFirstPaint=function(){if(this.logDebug("initFirstPaint"),Performance.supportedPerformanceObserver()){this.logDebug("initFirstPaint.supportedPerformanceObserver");try{this.perf.firstContentfulPaint(this.firstContentfulPaintCb.bind(this))}catch(t){this.logWarn(this.config.logPrefix,"initFirstPaint failed")}}else this.perfEmulated&&(this.logDebug("initFirstPaint.perfEmulated"),this.perfEmulated.firstContentfulPaint(this.firstContentfulPaintCb.bind(this)))},t.prototype.initFirstInputDelay=function(){var t=this;Performance.supported()&&this.config.firstInputDelay&&perfMetrics.onFirstInputDelay(function(e,i){t.queue.pushTask(function(){t.logMetric(e,"First Input Delay","firstInputDelay")})})},t.prototype.onVisibilityChange=function(){void 0!==document.hidden&&document.addEventListener("visibilitychange",this.didVisibilityChange)},t.prototype.logMetric=function(t,e,i){var n=parseFloat(t.toFixed(2));n>this.config.maxMeasureTime||("firstPaint"===i&&(this.firstPaintDuration=n),"firstContentfulPaint"===i&&(this.firstContentfulPaintDuration=n,this.observers.get("fcp")(n)),"firstInputDelay"===i&&(this.firstInputDelayDuration=n,this.observers.get("fid")(n)),this.log(e,n),this.sendTiming(i,n))},t.prototype.logWarn=function(t,e){this.config.warning&&this.config.logging&&window.console.warn(t,e)},t}();module.exports=Perfume;
"use strict";require("first-input-delay");var BrowserInfo=function(t,e,i){this.name=t,this.version=e,this.os=i},NodeInfo=function(t){this.version=t,this.name="node",this.os=process.platform},BotInfo=function(){this.bot=!0,this.name="bot",this.version=null,this.os=null},SEARCHBOX_UA_REGEX=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,SEARCHBOT_OS_REGEX=/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/,REQUIRED_VERSION_PARTS=3,userAgentRules=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["searchbot",SEARCHBOX_UA_REGEX]],operatingSystemRules=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/],["Search Bot",SEARCHBOT_OS_REGEX]];function detect(){return"undefined"!=typeof navigator?parseUserAgent(navigator.userAgent):getNodeVersion()}function parseUserAgent(t){var e=""!==t&&userAgentRules.reduce((function(e,i){var n=i[0],r=i[1];if(e)return e;var s=r.exec(t);return!!s&&[n,s]}),!1);if(!e)return null;var i=e[0],n=e[1];if("searchbot"===i)return new BotInfo;var r=n[1]&&n[1].split(/[._]/).slice(0,3);return r?r.length<REQUIRED_VERSION_PARTS&&(r=r.concat(new Array(REQUIRED_VERSION_PARTS-r.length).fill("0"))):r=[],new BrowserInfo(i,r.join("."),detectOS(t))}function detectOS(t){var e=operatingSystemRules.find((function(e){e[0];return e[1].test(t)}));return e?e[0]:null}function getNodeVersion(){return"undefined"!=typeof process&&process.version?new NodeInfo(process.version.slice(1)):null}var now=function(){return+new Date},supportsRequestIdleCallback_="function"==typeof window.requestIdleCallback,IdleDealine=function(){function t(t){this.initTime_=t}return Object.defineProperty(t.prototype,"didTimeout",{get:function(){return!1},enumerable:!0,configurable:!0}),t.prototype.timeRemaining=function(){return Math.max(0,50-(now()-this.initTime_))},t}(),requestIdleCallbackShim=function(t){var e=new IdleDealine(now());return setTimeout((function(){return t(e)}),0)},cancelIdleCallbackShim=function(t){clearTimeout(t)},rIC=supportsRequestIdleCallback_?window.requestIdleCallback:requestIdleCallbackShim,cIC=supportsRequestIdleCallback_?window.cancelIdleCallback:cancelIdleCallbackShim,supportsPromisesNatively="function"==typeof Promise&&Promise.toString().indexOf("[native code]")>-1,supportsMutationObserver="MutationObserver"in window||"WebKitMutationObserver"in window||"MozMutationObserver"in window,createQueueMicrotaskViaPromises=function(){return function(t){Promise.resolve().then(t)}},createQueueMicrotaskViaMutationObserver=function(){var t=0,e=[],i=new MutationObserver((function(){e.forEach((function(t){return t()})),e=[]})),n=document.createTextNode("");return i.observe(n,{characterData:!0}),function(i){e.push(i),n.data=String(++t%2)}},discardMicrotasks=function(){return function(t){}},queueMicrotask=supportsPromisesNatively?createQueueMicrotaskViaPromises():supportsMutationObserver?createQueueMicrotaskViaMutationObserver():discardMicrotasks(),DEFAULT_MIN_TASK_TIME=0,isSafari_=!("object"!=typeof window.safari||!window.safari.pushNotification),IdleQueue=function(){function t(t){var e=void 0===t?{}:t,i=e.ensureTasksRun,n=void 0!==i&&i,r=e.defaultMinTaskTime,s=void 0===r?DEFAULT_MIN_TASK_TIME:r;this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.idleCallbackHandle_=null,this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.defaultMinTaskTime_=s,this.ensureTasksRun_=n,this.runTasksImmediately=this.runTasksImmediately.bind(this),this.runTasks_=this.runTasks_.bind(this),this.onVisibilityChange_=this.onVisibilityChange_.bind(this),this.ensureTasksRun_&&(addEventListener("visibilitychange",this.onVisibilityChange_,!0),isSafari_&&addEventListener("beforeunload",this.runTasksImmediately,!0))}return t.prototype.pushTask=function(t){this.addTask_(Array.prototype.push,t)},t.prototype.unshiftTask=function(t){this.addTask_(Array.prototype.unshift,t)},t.prototype.runTasksImmediately=function(){this.runTasks_()},t.prototype.hasPendingTasks=function(){return this.taskQueue_.length>0},t.prototype.clearPendingTasks=function(){this.taskQueue_=[],this.cancelScheduledRun_()},t.prototype.getState=function(){return this.state_},t.prototype.destroy=function(){this.taskQueue_=[],this.cancelScheduledRun_(),this.ensureTasksRun_&&(removeEventListener("visibilitychange",this.onVisibilityChange_,!0),isSafari_&&removeEventListener("beforeunload",this.runTasksImmediately,!0))},t.prototype.addTask_=function(t,e,i){var n=(void 0===i?{}:i).minTaskTime,r=void 0===n?this.defaultMinTaskTime_:n,s={time:now(),visibilityState:document.visibilityState};t.call(this.taskQueue_,{state:s,task:e,minTaskTime:r}),this.scheduleTasksToRun_()},t.prototype.scheduleTasksToRun_=function(){this.ensureTasksRun_&&"hidden"===document.visibilityState?queueMicrotask(this.runTasks_):this.idleCallbackHandle_||(this.idleCallbackHandle_=rIC(this.runTasks_))},t.prototype.runTasks_=function(t){if(this.cancelScheduledRun_(),!this.isProcessing_){for(this.isProcessing_=!0;this.hasPendingTasks()&&!shouldYield(t,this.taskQueue_[0].minTaskTime);){var e=this.taskQueue_.shift(),i=e.task,n=e.state;this.state_=n,i(n),this.state_=null}this.isProcessing_=!1,this.hasPendingTasks()&&this.scheduleTasksToRun_()}},t.prototype.cancelScheduledRun_=function(){cIC(this.idleCallbackHandle_),this.idleCallbackHandle_=null},t.prototype.onVisibilityChange_=function(){"hidden"===document.visibilityState&&this.runTasksImmediately()},t}(),shouldYield=function(t,e){return!!(t&&t.timeRemaining()<=e)},EmulatedPerformance=function(){function t(t){this.config=t}return t.prototype.now=function(){return Date.now()/1e3},t.prototype.mark=function(t,e){},t.prototype.measure=function(t,e){return this.getDurationByMetric(t,e)},t.prototype.firstContentfulPaint=function(t){var e=this;setTimeout((function(){t(e.getFirstPaint())}))},t.prototype.getDurationByMetric=function(t,e){return e.end-e.start||0},t.prototype.getFirstPaint=function(){var t=window.performance.timing,e={duration:0,entryType:"paint",name:"first-contentful-paint",startTime:0};return t&&0!==t.navigationStart&&(e.startTime=Date.now()-t.navigationStart),[e]},t}(),Performance=function(){function t(t){this.config=t}return t.supported=function(){return window.performance&&!!performance.now&&!!performance.mark},t.supportedPerformanceObserver=function(){return window.chrome&&"PerformanceObserver"in window},t.prototype.now=function(){return window.performance.now()},t.prototype.mark=function(t,e){var i="mark_"+t+"_"+e;window.performance.mark(i)},t.prototype.measure=function(t,e){var i="mark_"+t+"_start",n="mark_"+t+"_end";return window.performance.measure(t,i,n),this.getDurationByMetric(t,e)},t.prototype.firstContentfulPaint=function(t){this.perfObserver=new PerformanceObserver(this.performanceObserverCb.bind(this,t)),this.perfObserver.observe({entryTypes:["paint"]})},t.prototype.getDurationByMetric=function(t,e){var i=this.getMeasurementForGivenName(t);return i&&"measure"===i.entryType?i.duration:-1},t.prototype.getMeasurementForGivenName=function(t){var e=window.performance.getEntriesByName(t);return e[e.length-1]},t.prototype.performanceObserverCb=function(t,e){var i=this,n=e.getEntries();t(n),n.forEach((function(t){i.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&i.perfObserver.disconnect()}))},t}(),Perfume=function(){function t(t){var e=this;void 0===t&&(t={}),this.config={firstContentfulPaint:!1,firstPaint:!1,firstInputDelay:!1,googleAnalytics:{enable:!1,timingVar:"name"},browserTracker:!1,logPrefix:"Perfume.js:",logging:!0,maxMeasureTime:15e3,warning:!1,debugging:!1},this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.isHidden=!1,this.logMetricWarn="Please provide a metric name",this.metrics={},this.observers={},this.didVisibilityChange=function(){document.hidden&&(e.isHidden=document.hidden)},this.config=Object.assign({},this.config,t),this.perf=Performance.supported()?new Performance(this.config):new EmulatedPerformance(this.config),this.config.browserTracker&&(this.browser=detect()),Performance.supportedPerformanceObserver()||(this.perfEmulated=new EmulatedPerformance(this.config)),(this.config.firstPaint||this.config.firstContentfulPaint)&&(this.observeFirstContentfulPaint=new Promise((function(t){e.logDebug("observeFirstContentfulPaint"),e.observers.fcp=t,e.initFirstPaint()}))),this.config.firstInputDelay&&(this.observeFirstInputDelay=new Promise((function(t){e.observers.fid=t,e.initFirstInputDelay()}))),this.onVisibilityChange(),this.queue=new IdleQueue({ensureTasksRun:!0})}return t.prototype.start=function(t){this.checkMetricName(t)&&(this.metrics[t]?this.logWarn(this.config.logPrefix,"Recording already started."):(this.metrics[t]={end:0,start:this.perf.now()},this.perf.mark(t,"start"),this.isHidden=!1))},t.prototype.end=function(t){var e=this;if(this.checkMetricName(t)){var i=this.metrics[t];if(i){i.end=this.perf.now(),this.perf.mark(t,"end");var n=this.perf.measure(t,i),r=parseFloat(n.toFixed(2));return delete this.metrics[t],this.queue.pushTask((function(){e.log(t,r),e.sendTiming(t,r)})),r}this.logWarn(this.config.logPrefix,"Recording already stopped.")}},t.prototype.endPaint=function(t){var e=this;return new Promise((function(i){setTimeout((function(){var n=e.end(t);i(n)}))}))},t.prototype.log=function(t,e){if(!this.isHidden&&this.config.logging)if(t){var i=e.toFixed(2),n="%c "+this.config.logPrefix+" "+t+" "+i+" ms";window.console.log(n,"color: #ff6d00;font-size:11px;")}else this.logWarn(this.config.logPrefix,this.logMetricWarn)},t.prototype.logDebug=function(t,e){void 0===e&&(e=""),this.config.debugging&&window.console.log("Perfume.js debugging "+t+":",e)},t.prototype.sendTiming=function(t,e){if(!this.isHidden){var i=this.config.browserTracker?this.browser:void 0,n=this.addBrowserToMetricName(t);if(this.config.analyticsTracker&&this.config.analyticsTracker(t,e,i),this.config.googleAnalytics.enable)if(window.ga){var r=Math.round(e);window.ga("send","timing",n,this.config.googleAnalytics.timingVar,r)}else this.logWarn(this.config.logPrefix,"Google Analytics has not been loaded")}},t.prototype.addBrowserToMetricName=function(t){if(!this.config.browserTracker)return t;var e=t;this.browser.name&&(e+="."+this.browser.name.replace(/\s/g,""),this.browser.os&&(e+="."+this.browser.os.replace(/\s/g,"")));return e},t.prototype.checkMetricName=function(t){return!!t||(this.logWarn(this.config.logPrefix,this.logMetricWarn),!1)},t.prototype.firstContentfulPaintCb=function(t){var e=this;this.logDebug("firstContentfulPaintCb",t),t.forEach((function(t){e.queue.pushTask((function(){e.config.firstPaint&&"first-paint"===t.name&&e.logMetric(t.startTime,"First Paint","firstPaint"),e.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&e.logMetric(t.startTime,"First Contentful Paint","firstContentfulPaint")}))}))},t.prototype.initFirstPaint=function(){if(this.logDebug("initFirstPaint"),Performance.supportedPerformanceObserver()){this.logDebug("initFirstPaint.supportedPerformanceObserver");try{this.perf.firstContentfulPaint(this.firstContentfulPaintCb.bind(this))}catch(t){this.logWarn(this.config.logPrefix,"initFirstPaint failed")}}else this.perfEmulated&&(this.logDebug("initFirstPaint.perfEmulated"),this.perfEmulated.firstContentfulPaint(this.firstContentfulPaintCb.bind(this)))},t.prototype.initFirstInputDelay=function(){var t=this;Performance.supported()&&this.config.firstInputDelay&&perfMetrics.onFirstInputDelay((function(e,i){t.queue.pushTask((function(){t.logMetric(e,"First Input Delay","firstInputDelay")}))}))},t.prototype.onVisibilityChange=function(){void 0!==document.hidden&&document.addEventListener("visibilitychange",this.didVisibilityChange)},t.prototype.logMetric=function(t,e,i){var n=parseFloat(t.toFixed(2));n>this.config.maxMeasureTime||("firstPaint"===i&&(this.firstPaintDuration=n),"firstContentfulPaint"===i&&(this.firstContentfulPaintDuration=n,this.observers.fcp(n)),"firstInputDelay"===i&&(this.firstInputDelayDuration=n,this.observers.fid(n)),this.log(e,n),this.sendTiming(i,n))},t.prototype.logWarn=function(t,e){this.config.warning&&this.config.logging&&window.console.warn(t,e)},t}();module.exports=Perfume;
//# sourceMappingURL=perfume.min.js.map

@@ -1,2 +0,2 @@

!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):t.Perfume=i()}(this,function(){"use strict";var t=function(){return function(t,i,e){this.name=t,this.version=i,this.os=e}}(),i=function(){return function(t){this.version=t,this.name="node",this.os=process.platform}}(),e=function(){return function(){this.bot=!0,this.name="bot",this.version=null,this.os=null}}(),n=3,r=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],o=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/],["Search Bot",/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/]];function s(){return"undefined"!=typeof navigator?function(i){var s=""!==i&&r.reduce(function(t,e){var n=e[0],r=e[1];if(t)return t;var o=r.exec(i);return!!o&&[n,o]},!1);if(!s)return null;var a=s[0],u=s[1];if("searchbot"===a)return new e;var c=u[1]&&u[1].split(/[._]/).slice(0,3);c?c.length<n&&(c=c.concat(new Array(n-c.length).fill("0"))):c=[];return new t(a,c.join("."),function(t){var i=o.find(function(i){i[0];var e=i[1];return e.test(t)});return i?i[0]:null}(i))}(navigator.userAgent):"undefined"!=typeof process&&process.version?new i(process.version.slice(1)):null}var a,u,c,f,h=function(){return+new Date},d="function"==typeof window.requestIdleCallback,l=function(){function t(t){this.initTime_=t}return Object.defineProperty(t.prototype,"didTimeout",{get:function(){return!1},enumerable:!0,configurable:!0}),t.prototype.timeRemaining=function(){return Math.max(0,50-(h()-this.initTime_))},t}(),p=d?window.requestIdleCallback:function(t){var i=new l(h());return setTimeout(function(){return t(i)},0)},g=d?window.cancelIdleCallback:function(t){clearTimeout(t)},m="function"==typeof Promise&&Promise.toString().indexOf("[native code]")>-1?function(t){Promise.resolve().then(t)}:(a=0,u=[],c=new MutationObserver(function(){u.forEach(function(t){return t()}),u=[]}),f=document.createTextNode(""),c.observe(f,{characterData:!0}),function(t){u.push(t),f.data=String(++a%2)}),w=0,y=!("object"!=typeof window.safari||!window.safari.pushNotification),b=function(){function t(t){var i=void 0===t?{}:t,e=i.ensureTasksRun,n=void 0!==e&&e,r=i.defaultMinTaskTime,o=void 0===r?w:r;this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.idleCallbackHandle_=null,this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.defaultMinTaskTime_=o,this.ensureTasksRun_=n,this.runTasksImmediately=this.runTasksImmediately.bind(this),this.runTasks_=this.runTasks_.bind(this),this.onVisibilityChange_=this.onVisibilityChange_.bind(this),this.ensureTasksRun_&&(addEventListener("visibilitychange",this.onVisibilityChange_,!0),y&&addEventListener("beforeunload",this.runTasksImmediately,!0))}return t.prototype.pushTask=function(t){this.addTask_(Array.prototype.push,t)},t.prototype.unshiftTask=function(t){this.addTask_(Array.prototype.unshift,t)},t.prototype.runTasksImmediately=function(){this.runTasks_()},t.prototype.hasPendingTasks=function(){return this.taskQueue_.length>0},t.prototype.clearPendingTasks=function(){this.taskQueue_=[],this.cancelScheduledRun_()},t.prototype.getState=function(){return this.state_},t.prototype.destroy=function(){this.taskQueue_=[],this.cancelScheduledRun_(),this.ensureTasksRun_&&(removeEventListener("visibilitychange",this.onVisibilityChange_,!0),y&&removeEventListener("beforeunload",this.runTasksImmediately,!0))},t.prototype.addTask_=function(t,i,e){var n=(void 0===e?{}:e).minTaskTime,r=void 0===n?this.defaultMinTaskTime_:n,o={time:h(),visibilityState:document.visibilityState};t.call(this.taskQueue_,{state:o,task:i,minTaskTime:r}),this.scheduleTasksToRun_()},t.prototype.scheduleTasksToRun_=function(){this.ensureTasksRun_&&"hidden"===document.visibilityState?m(this.runTasks_):this.idleCallbackHandle_||(this.idleCallbackHandle_=p(this.runTasks_))},t.prototype.runTasks_=function(t){if(this.cancelScheduledRun_(),!this.isProcessing_){for(this.isProcessing_=!0;this.hasPendingTasks()&&!v(t,this.taskQueue_[0].minTaskTime);){var i=this.taskQueue_.shift(),e=i.task,n=i.state;this.state_=n,e(n),this.state_=null}this.isProcessing_=!1,this.hasPendingTasks()&&this.scheduleTasksToRun_()}},t.prototype.cancelScheduledRun_=function(){g(this.idleCallbackHandle_),this.idleCallbackHandle_=null},t.prototype.onVisibilityChange_=function(){"hidden"===document.visibilityState&&this.runTasksImmediately()},t}(),v=function(t,i){return!!(t&&t.timeRemaining()<=i)},T=function(){function t(t){this.config=t}return t.prototype.now=function(){return Date.now()/1e3},t.prototype.mark=function(t,i){},t.prototype.measure=function(t,i){return this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){var i=this;setTimeout(function(){t(i.getFirstPaint())})},t.prototype.getDurationByMetric=function(t,i){return i.end-i.start||0},t.prototype.getFirstPaint=function(){var t=window.performance.timing,i={duration:0,entryType:"paint",name:"first-contentful-paint",startTime:0};return t&&0!==t.navigationStart&&(i.startTime=Date.now()-t.navigationStart),[i]},t}();!function(t,i){var e,n,r,o=[],s={passive:!0,capture:!0},a=new Date,u="pointerup",c="pointercancel";function f(t,o){e||(e=o,n=t,r=new Date,l(i),h())}function h(){n>=0&&n<r-a&&(o.forEach(function(t){t(n,e)}),o=[])}function d(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){function r(){f(e,n),a()}function o(){a()}function a(){i(u,r,s),i(c,o,s)}t(u,r,s),t(c,o,s)}(n,e):f(n,e)}}function l(t){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(i){t(i,d,s)})}l(t),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(t){o.push(t),h()}}(addEventListener,removeEventListener);var k=function(){function t(t){this.config=t}return t.supported=function(){return window.performance&&!!performance.now&&!!performance.mark},t.supportedPerformanceObserver=function(){return window.chrome&&"PerformanceObserver"in window},t.prototype.now=function(){return window.performance.now()},t.prototype.mark=function(t,i){var e="mark_"+t+"_"+i;window.performance.mark(e)},t.prototype.measure=function(t,i){var e="mark_"+t+"_start",n="mark_"+t+"_end";return window.performance.measure(t,e,n),this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){this.perfObserver=new PerformanceObserver(this.performanceObserverCb.bind(this,t)),this.perfObserver.observe({entryTypes:["paint"]})},t.prototype.getDurationByMetric=function(t,i){var e=this.getMeasurementForGivenName(t);return e&&"measure"===e.entryType?e.duration:-1},t.prototype.getMeasurementForGivenName=function(t){var i=window.performance.getEntriesByName(t);return i[i.length-1]},t.prototype.performanceObserverCb=function(t,i){var e=this,n=i.getEntries();t(n),n.forEach(function(t){e.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&e.perfObserver.disconnect()})},t}();return function(){function t(t){void 0===t&&(t={});var i=this;this.config={firstContentfulPaint:!1,firstPaint:!1,firstInputDelay:!1,googleAnalytics:{enable:!1,timingVar:"name"},browserTracker:!1,logPrefix:"Perfume.js:",logging:!0,maxMeasureTime:15e3,warning:!1,debugging:!1},this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.isHidden=!1,this.logMetricWarn="Please provide a metric name",this.metrics=new Map,this.observers=new Map,this.didVisibilityChange=function(){document.hidden&&(i.isHidden=document.hidden)},this.config=Object.assign({},this.config,t),this.perf=k.supported()?new k(this.config):new T(this.config),this.config.browserTracker&&(this.browser=s()),k.supportedPerformanceObserver()||(this.perfEmulated=new T(this.config)),(this.config.firstPaint||this.config.firstContentfulPaint)&&(this.observeFirstContentfulPaint=new Promise(function(t){i.logDebug("observeFirstContentfulPaint"),i.observers.set("fcp",t),i.initFirstPaint()})),this.config.firstInputDelay&&(this.observeFirstInputDelay=new Promise(function(t){i.observers.set("fid",t),i.initFirstInputDelay()})),this.onVisibilityChange(),this.queue=new b({ensureTasksRun:!0})}return t.prototype.start=function(t){this.checkMetricName(t)&&(this.metrics.has(t)?this.logWarn(this.config.logPrefix,"Recording already started."):(this.metrics.set(t,{end:0,start:this.perf.now()}),this.perf.mark(t,"start"),this.isHidden=!1))},t.prototype.end=function(t){var i=this;if(this.checkMetricName(t)){var e=this.metrics.get(t);if(e){e.end=this.perf.now(),this.perf.mark(t,"end");var n=this.perf.measure(t,e),r=parseFloat(n.toFixed(2));return this.metrics.delete(t),this.queue.pushTask(function(){i.log(t,r),i.sendTiming(t,r)}),r}this.logWarn(this.config.logPrefix,"Recording already stopped.")}},t.prototype.endPaint=function(t){var i=this;return new Promise(function(e){setTimeout(function(){var n=i.end(t);e(n)})})},t.prototype.log=function(t,i){if(!this.isHidden&&this.config.logging)if(t){var e=i.toFixed(2),n="%c "+this.config.logPrefix+" "+t+" "+e+" ms";window.console.log(n,"color: #ff6d00;font-size:11px;")}else this.logWarn(this.config.logPrefix,this.logMetricWarn)},t.prototype.logDebug=function(t,i){void 0===i&&(i=""),this.config.debugging&&window.console.log("Perfume.js debugging "+t+":",i)},t.prototype.sendTiming=function(t,i){if(!this.isHidden){var e=this.config.browserTracker?this.browser:void 0,n=this.addBrowserToMetricName(t);if(this.config.analyticsTracker&&this.config.analyticsTracker(t,i,e),this.config.googleAnalytics.enable)if(window.ga){var r=Math.round(i);window.ga("send","timing",n,this.config.googleAnalytics.timingVar,r)}else this.logWarn(this.config.logPrefix,"Google Analytics has not been loaded")}},t.prototype.addBrowserToMetricName=function(t){if(!this.config.browserTracker)return t;var i=t;this.browser.name&&(i+="."+this.browser.name.replace(/\s/g,""),this.browser.os&&(i+="."+this.browser.os.replace(/\s/g,"")));return i},t.prototype.checkMetricName=function(t){return!!t||(this.logWarn(this.config.logPrefix,this.logMetricWarn),!1)},t.prototype.firstContentfulPaintCb=function(t){var i=this;this.logDebug("firstContentfulPaintCb",t),t.forEach(function(t){i.queue.pushTask(function(){i.config.firstPaint&&"first-paint"===t.name&&i.logMetric(t.startTime,"First Paint","firstPaint"),i.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&i.logMetric(t.startTime,"First Contentful Paint","firstContentfulPaint")})})},t.prototype.initFirstPaint=function(){if(this.logDebug("initFirstPaint"),k.supportedPerformanceObserver()){this.logDebug("initFirstPaint.supportedPerformanceObserver");try{this.perf.firstContentfulPaint(this.firstContentfulPaintCb.bind(this))}catch(t){this.logWarn(this.config.logPrefix,"initFirstPaint failed")}}else this.perfEmulated&&(this.logDebug("initFirstPaint.perfEmulated"),this.perfEmulated.firstContentfulPaint(this.firstContentfulPaintCb.bind(this)))},t.prototype.initFirstInputDelay=function(){var t=this;k.supported()&&this.config.firstInputDelay&&perfMetrics.onFirstInputDelay(function(i,e){t.queue.pushTask(function(){t.logMetric(i,"First Input Delay","firstInputDelay")})})},t.prototype.onVisibilityChange=function(){void 0!==document.hidden&&document.addEventListener("visibilitychange",this.didVisibilityChange)},t.prototype.logMetric=function(t,i,e){var n=parseFloat(t.toFixed(2));n>this.config.maxMeasureTime||("firstPaint"===e&&(this.firstPaintDuration=n),"firstContentfulPaint"===e&&(this.firstContentfulPaintDuration=n,this.observers.get("fcp")(n)),"firstInputDelay"===e&&(this.firstInputDelayDuration=n,this.observers.get("fid")(n)),this.log(i,n),this.sendTiming(e,n))},t.prototype.logWarn=function(t,i){this.config.warning&&this.config.logging&&window.console.warn(t,i)},t}()});
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).Perfume=i()}(this,(function(){"use strict";var t=function(t,i,e){this.name=t,this.version=i,this.os=e},i=function(t){this.version=t,this.name="node",this.os=process.platform},e=function(){this.bot=!0,this.name="bot",this.version=null,this.os=null},n=3,o=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],r=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/],["Search Bot",/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/]];function s(){return"undefined"!=typeof navigator?function(i){var s=""!==i&&o.reduce((function(t,e){var n=e[0],o=e[1];if(t)return t;var r=o.exec(i);return!!r&&[n,r]}),!1);if(!s)return null;var a=s[0],u=s[1];if("searchbot"===a)return new e;var f=u[1]&&u[1].split(/[._]/).slice(0,3);f?f.length<n&&(f=f.concat(new Array(n-f.length).fill("0"))):f=[];return new t(a,f.join("."),function(t){var i=r.find((function(i){i[0];return i[1].test(t)}));return i?i[0]:null}(i))}(navigator.userAgent):"undefined"!=typeof process&&process.version?new i(process.version.slice(1)):null}var a,u,f,c,h=function(){return+new Date},d="function"==typeof window.requestIdleCallback,l=function(){function t(t){this.initTime_=t}return Object.defineProperty(t.prototype,"didTimeout",{get:function(){return!1},enumerable:!0,configurable:!0}),t.prototype.timeRemaining=function(){return Math.max(0,50-(h()-this.initTime_))},t}(),p=d?window.requestIdleCallback:function(t){var i=new l(h());return setTimeout((function(){return t(i)}),0)},g=d?window.cancelIdleCallback:function(t){clearTimeout(t)},m="function"==typeof Promise&&Promise.toString().indexOf("[native code]")>-1,w="MutationObserver"in window||"WebKitMutationObserver"in window||"MozMutationObserver"in window,y=m?function(t){Promise.resolve().then(t)}:w?(a=0,u=[],f=new MutationObserver((function(){u.forEach((function(t){return t()})),u=[]})),c=document.createTextNode(""),f.observe(c,{characterData:!0}),function(t){u.push(t),c.data=String(++a%2)}):function(t){},b=0,v=!("object"!=typeof window.safari||!window.safari.pushNotification),T=function(){function t(t){var i=void 0===t?{}:t,e=i.ensureTasksRun,n=void 0!==e&&e,o=i.defaultMinTaskTime,r=void 0===o?b:o;this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.idleCallbackHandle_=null,this.taskQueue_=[],this.isProcessing_=!1,this.state_=null,this.defaultMinTaskTime_=r,this.ensureTasksRun_=n,this.runTasksImmediately=this.runTasksImmediately.bind(this),this.runTasks_=this.runTasks_.bind(this),this.onVisibilityChange_=this.onVisibilityChange_.bind(this),this.ensureTasksRun_&&(addEventListener("visibilitychange",this.onVisibilityChange_,!0),v&&addEventListener("beforeunload",this.runTasksImmediately,!0))}return t.prototype.pushTask=function(t){this.addTask_(Array.prototype.push,t)},t.prototype.unshiftTask=function(t){this.addTask_(Array.prototype.unshift,t)},t.prototype.runTasksImmediately=function(){this.runTasks_()},t.prototype.hasPendingTasks=function(){return this.taskQueue_.length>0},t.prototype.clearPendingTasks=function(){this.taskQueue_=[],this.cancelScheduledRun_()},t.prototype.getState=function(){return this.state_},t.prototype.destroy=function(){this.taskQueue_=[],this.cancelScheduledRun_(),this.ensureTasksRun_&&(removeEventListener("visibilitychange",this.onVisibilityChange_,!0),v&&removeEventListener("beforeunload",this.runTasksImmediately,!0))},t.prototype.addTask_=function(t,i,e){var n=(void 0===e?{}:e).minTaskTime,o=void 0===n?this.defaultMinTaskTime_:n,r={time:h(),visibilityState:document.visibilityState};t.call(this.taskQueue_,{state:r,task:i,minTaskTime:o}),this.scheduleTasksToRun_()},t.prototype.scheduleTasksToRun_=function(){this.ensureTasksRun_&&"hidden"===document.visibilityState?y(this.runTasks_):this.idleCallbackHandle_||(this.idleCallbackHandle_=p(this.runTasks_))},t.prototype.runTasks_=function(t){if(this.cancelScheduledRun_(),!this.isProcessing_){for(this.isProcessing_=!0;this.hasPendingTasks()&&!k(t,this.taskQueue_[0].minTaskTime);){var i=this.taskQueue_.shift(),e=i.task,n=i.state;this.state_=n,e(n),this.state_=null}this.isProcessing_=!1,this.hasPendingTasks()&&this.scheduleTasksToRun_()}},t.prototype.cancelScheduledRun_=function(){g(this.idleCallbackHandle_),this.idleCallbackHandle_=null},t.prototype.onVisibilityChange_=function(){"hidden"===document.visibilityState&&this.runTasksImmediately()},t}(),k=function(t,i){return!!(t&&t.timeRemaining()<=i)},P=function(){function t(t){this.config=t}return t.prototype.now=function(){return Date.now()/1e3},t.prototype.mark=function(t,i){},t.prototype.measure=function(t,i){return this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){var i=this;setTimeout((function(){t(i.getFirstPaint())}))},t.prototype.getDurationByMetric=function(t,i){return i.end-i.start||0},t.prototype.getFirstPaint=function(){var t=window.performance.timing,i={duration:0,entryType:"paint",name:"first-contentful-paint",startTime:0};return t&&0!==t.navigationStart&&(i.startTime=Date.now()-t.navigationStart),[i]},t}();!function(t,i){var e,n,o,r=[],s={passive:!0,capture:!0},a=new Date,u="pointerup",f="pointercancel";function c(t,r){e||(e=r,n=t,o=new Date,l(i),h())}function h(){n>=0&&n<o-a&&(r.forEach((function(t){t(n,e)})),r=[])}function d(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){function o(){c(e,n),a()}function r(){a()}function a(){i(u,o,s),i(f,r,s)}t(u,o,s),t(f,r,s)}(n,e):c(n,e)}}function l(t){["click","mousedown","keydown","touchstart","pointerdown"].forEach((function(i){t(i,d,s)}))}l(t),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(t){r.push(t),h()}}(addEventListener,removeEventListener);var _=function(){function t(t){this.config=t}return t.supported=function(){return window.performance&&!!performance.now&&!!performance.mark},t.supportedPerformanceObserver=function(){return window.chrome&&"PerformanceObserver"in window},t.prototype.now=function(){return window.performance.now()},t.prototype.mark=function(t,i){var e="mark_"+t+"_"+i;window.performance.mark(e)},t.prototype.measure=function(t,i){var e="mark_"+t+"_start",n="mark_"+t+"_end";return window.performance.measure(t,e,n),this.getDurationByMetric(t,i)},t.prototype.firstContentfulPaint=function(t){this.perfObserver=new PerformanceObserver(this.performanceObserverCb.bind(this,t)),this.perfObserver.observe({entryTypes:["paint"]})},t.prototype.getDurationByMetric=function(t,i){var e=this.getMeasurementForGivenName(t);return e&&"measure"===e.entryType?e.duration:-1},t.prototype.getMeasurementForGivenName=function(t){var i=window.performance.getEntriesByName(t);return i[i.length-1]},t.prototype.performanceObserverCb=function(t,i){var e=this,n=i.getEntries();t(n),n.forEach((function(t){e.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&e.perfObserver.disconnect()}))},t}();return function(){function t(t){var i=this;void 0===t&&(t={}),this.config={firstContentfulPaint:!1,firstPaint:!1,firstInputDelay:!1,googleAnalytics:{enable:!1,timingVar:"name"},browserTracker:!1,logPrefix:"Perfume.js:",logging:!0,maxMeasureTime:15e3,warning:!1,debugging:!1},this.firstPaintDuration=0,this.firstContentfulPaintDuration=0,this.firstInputDelayDuration=0,this.isHidden=!1,this.logMetricWarn="Please provide a metric name",this.metrics={},this.observers={},this.didVisibilityChange=function(){document.hidden&&(i.isHidden=document.hidden)},this.config=Object.assign({},this.config,t),this.perf=_.supported()?new _(this.config):new P(this.config),this.config.browserTracker&&(this.browser=s()),_.supportedPerformanceObserver()||(this.perfEmulated=new P(this.config)),(this.config.firstPaint||this.config.firstContentfulPaint)&&(this.observeFirstContentfulPaint=new Promise((function(t){i.logDebug("observeFirstContentfulPaint"),i.observers.fcp=t,i.initFirstPaint()}))),this.config.firstInputDelay&&(this.observeFirstInputDelay=new Promise((function(t){i.observers.fid=t,i.initFirstInputDelay()}))),this.onVisibilityChange(),this.queue=new T({ensureTasksRun:!0})}return t.prototype.start=function(t){this.checkMetricName(t)&&(this.metrics[t]?this.logWarn(this.config.logPrefix,"Recording already started."):(this.metrics[t]={end:0,start:this.perf.now()},this.perf.mark(t,"start"),this.isHidden=!1))},t.prototype.end=function(t){var i=this;if(this.checkMetricName(t)){var e=this.metrics[t];if(e){e.end=this.perf.now(),this.perf.mark(t,"end");var n=this.perf.measure(t,e),o=parseFloat(n.toFixed(2));return delete this.metrics[t],this.queue.pushTask((function(){i.log(t,o),i.sendTiming(t,o)})),o}this.logWarn(this.config.logPrefix,"Recording already stopped.")}},t.prototype.endPaint=function(t){var i=this;return new Promise((function(e){setTimeout((function(){var n=i.end(t);e(n)}))}))},t.prototype.log=function(t,i){if(!this.isHidden&&this.config.logging)if(t){var e=i.toFixed(2),n="%c "+this.config.logPrefix+" "+t+" "+e+" ms";window.console.log(n,"color: #ff6d00;font-size:11px;")}else this.logWarn(this.config.logPrefix,this.logMetricWarn)},t.prototype.logDebug=function(t,i){void 0===i&&(i=""),this.config.debugging&&window.console.log("Perfume.js debugging "+t+":",i)},t.prototype.sendTiming=function(t,i){if(!this.isHidden){var e=this.config.browserTracker?this.browser:void 0,n=this.addBrowserToMetricName(t);if(this.config.analyticsTracker&&this.config.analyticsTracker(t,i,e),this.config.googleAnalytics.enable)if(window.ga){var o=Math.round(i);window.ga("send","timing",n,this.config.googleAnalytics.timingVar,o)}else this.logWarn(this.config.logPrefix,"Google Analytics has not been loaded")}},t.prototype.addBrowserToMetricName=function(t){if(!this.config.browserTracker)return t;var i=t;this.browser.name&&(i+="."+this.browser.name.replace(/\s/g,""),this.browser.os&&(i+="."+this.browser.os.replace(/\s/g,"")));return i},t.prototype.checkMetricName=function(t){return!!t||(this.logWarn(this.config.logPrefix,this.logMetricWarn),!1)},t.prototype.firstContentfulPaintCb=function(t){var i=this;this.logDebug("firstContentfulPaintCb",t),t.forEach((function(t){i.queue.pushTask((function(){i.config.firstPaint&&"first-paint"===t.name&&i.logMetric(t.startTime,"First Paint","firstPaint"),i.config.firstContentfulPaint&&"first-contentful-paint"===t.name&&i.logMetric(t.startTime,"First Contentful Paint","firstContentfulPaint")}))}))},t.prototype.initFirstPaint=function(){if(this.logDebug("initFirstPaint"),_.supportedPerformanceObserver()){this.logDebug("initFirstPaint.supportedPerformanceObserver");try{this.perf.firstContentfulPaint(this.firstContentfulPaintCb.bind(this))}catch(t){this.logWarn(this.config.logPrefix,"initFirstPaint failed")}}else this.perfEmulated&&(this.logDebug("initFirstPaint.perfEmulated"),this.perfEmulated.firstContentfulPaint(this.firstContentfulPaintCb.bind(this)))},t.prototype.initFirstInputDelay=function(){var t=this;_.supported()&&this.config.firstInputDelay&&perfMetrics.onFirstInputDelay((function(i,e){t.queue.pushTask((function(){t.logMetric(i,"First Input Delay","firstInputDelay")}))}))},t.prototype.onVisibilityChange=function(){void 0!==document.hidden&&document.addEventListener("visibilitychange",this.didVisibilityChange)},t.prototype.logMetric=function(t,i,e){var n=parseFloat(t.toFixed(2));n>this.config.maxMeasureTime||("firstPaint"===e&&(this.firstPaintDuration=n),"firstContentfulPaint"===e&&(this.firstContentfulPaintDuration=n,this.observers.fcp(n)),"firstInputDelay"===e&&(this.firstInputDelayDuration=n,this.observers.fid(n)),this.log(i,n),this.sendTiming(e,n))},t.prototype.logWarn=function(t,i){this.config.warning&&this.config.logging&&window.console.warn(t,i)},t}()}));
//# sourceMappingURL=perfume.umd.min.js.map

@@ -57,4 +57,4 @@ /**

constructor({ ensureTasksRun, defaultMinTaskTime, }?: {
ensureTasksRun?: boolean;
defaultMinTaskTime?: number;
ensureTasksRun?: boolean | undefined;
defaultMinTaskTime?: number | undefined;
});

@@ -61,0 +61,0 @@ /**

/*!
* Perfume.js v2.1.2 (http://zizzamia.github.io/perfume)
* Perfume.js v3.0.0-beta.0 (http://zizzamia.github.io/perfume)
* Copyright 2018 The Perfume Authors (https://github.com/Zizzamia/perfume.js/graphs/contributors)

@@ -42,2 +42,8 @@ * Licensed under MIT (https://github.com/Zizzamia/perfume.js/blob/master/LICENSE)

}
export interface IMetricMap {
[metricName: string]: IMetricEntry;
}
export interface IObserverMap {
[metricName: string]: any;
}
export declare interface IPerformanceEntry {

@@ -44,0 +50,0 @@ duration: number;

{
"name": "perfume.js",
"version": "2.1.2",
"version": "3.0.0-beta.0",
"description": "JavaScript library that measures First (Contentful) Paint (FP/FCP) and First Input Delay (FID). Annotates components’ performance for Vanilla and Angular applications, into the DevTools timeline. Reports all the results to Google Analytics or your favorite tracking tool.",

@@ -19,3 +19,3 @@ "keywords": [

"main": "dist/perfume.min.js",
"module": "dist/perfume.es5.min.js",
"module": "dist/perfume.esm.min.js",
"unpkg": "dist/perfume.umd.min.js",

@@ -34,6 +34,6 @@ "typings": "dist/types/perfume.d.ts",

"engines": {
"node": ">=6.0.0"
"node": ">=10.0.0"
},
"scripts": {
"lint": "tslint -t codeFrame 'src/emulated-performance.ts' 'src/perfume.ts' 'src/performance.ts' '__tests__/**/*.ts'",
"lint": "tslint --project tsconfig.json -t codeFrame 'src/emulated-performance.ts' 'src/perfume.ts' 'src/performance.ts' '__tests__/**/*.ts'",
"prebuild": "rimraf dist",

@@ -56,11 +56,2 @@ "build": "tsc && tsc --module commonjs --outDir dist/lib && rollup -c rollup.config.ts",

},
"config": {
"commitizen": {
"path": "node_modules/cz-conventional-changelog"
},
"validate-commit-msg": {
"types": "conventional-commit-types",
"helpMessage": "Use \"npm run commit\" instead, we use conventional-changelog format :) (https://github.com/commitizen/cz-cli)"
}
},
"jest": {

@@ -96,5 +87,5 @@ "transform": {

"branches": 91,
"functions": 95,
"lines": 93,
"statements": 93
"functions": 90,
"lines": 92,
"statements": 92
}

@@ -105,3 +96,3 @@ },

"dependencies": {
"detect-browser": "4.0.0",
"detect-browser": "4.5.1",
"first-input-delay": "0.1.3",

@@ -111,28 +102,27 @@ "idlize": "0.1.1"

"devDependencies": {
"@angular/core": "7.1.0",
"@types/jest": "^23.1.4",
"@types/node": "^8.0.0",
"colors": "^1.1.2",
"commitizen": "^2.10.1",
"coveralls": "^3.0.1",
"cz-conventional-changelog": "^2.0.0",
"husky": "^0.14.0",
"jest": "^23.3.0",
"lint-staged": "^6.0.0",
"prettier": "^1.13.3",
"rimraf": "^2.6.2",
"rollup": "^0.58.1",
"rollup-plugin-commonjs": "^9.1.0",
"rollup-plugin-node-resolve": "^3.3.0",
"rollup-plugin-sourcemaps": "^0.4.2",
"rollup-plugin-uglify": "^3.0.0",
"ts-jest": "^22.4.6",
"ts-node": "^6.0.2",
"tslint": "^5.10.0",
"tslint-config-airbnb": "^5.9.2",
"tslint-config-prettier": "^1.13.0",
"tslint-plugin-prettier": "^1.3.0",
"typescript": "2.9.x",
"validate-commit-msg": "^2.12.2"
"@angular/core": "8.1.0",
"@types/jest": "24.0.15",
"@types/node": "12.0.10",
"colors": "1.3.3",
"commitizen": "^4.0.3",
"coveralls": "3.0.4",
"husky": "3.0.0",
"jest": "24.8.0",
"lint-staged": "9.0.1",
"prettier": "1.18.2",
"rimraf": "2.6.3",
"rollup": "1.21.3",
"rollup-plugin-commonjs": "10.1.0",
"rollup-plugin-node-resolve": "5.2.0",
"rollup-plugin-sourcemaps": "0.4.2",
"rollup-plugin-terser": "5.1.2",
"ts-jest": "24.0.2",
"ts-node": "8.3.0",
"tslint": "5.18.0",
"tslint-config-airbnb": "5.11.1",
"tslint-config-prettier": "1.18.0",
"tslint-plugin-prettier": "2.0.1",
"typescript": "3.5.2",
"validate-commit-msg": "1.1.2"
}
}
<a href="http://www.perfumejs.com/">
<img src="https://github.com/Zizzamia/perfume.js/blob/master/docs/src/assets/perfume-logo-v2-1-1.png" align="left" width="262" />
<img src="https://github.com/Zizzamia/perfume.js/blob/master/docs/src/assets/perfume-logo-v2-1-2.png" align="left" width="200" />
</a>

@@ -9,13 +9,21 @@

> A flexible library for measuring <b>First Contentful Paint</b> (<a href="https://medium.com/@zizzamia/first-contentful-paint-with-a-touch-of-perfume-js-cd11dfd2e18f" target="_blank">FP/FCP</a>), <b>First Input Delay</b> (FID) and components lifecycle performance. Report real user measurements to Google Analytics or your ideal tracking tool.
> JavaScript library that measures <b>First (Contentful) Paint</b> (<a href="https://medium.com/@zizzamia/first-contentful-paint-with-a-touch-of-perfume-js-cd11dfd2e18f" target="_blank">FP/FCP</a>) and <b>First Input Delay</b> (FID). Annotates components’ performance for <b>Vanilla</b> and <b>Angular</b> applications, into the DevTools timeline. Reports all the results to Google Analytics or your favorite tracking tool.
<br />
<br />
<br />
<br />
English | [简体中文](./README-zh_CN.md)
## Why Perfume.js?
- ⏰ Latest Performance APIs for precise metrics
- 🔨 Cross browser tested
- 🚿 Filters out false positive/negative results
- 🔭 Browser tracker built-in
- 🤙 Support for async/await syntax
- 🛰 Flexible tracking tool
- ⚡️ Waste-zero ms with [Idle Until Urgent](https://philipwalton.com/articles/idle-until-urgent/) strategy built-in
## User-centric performance metrics
**Perfume** leverage the latest W3C Performance Drafts (like PerformanceObserver), for measuring performance that matters! ⚡️
**Perfume** leverage the latest W3C Performance Drafts (like [PerformanceObserver](https://w3c.github.io/performance-timeline/)), for measuring performance that matters! ⚡️

@@ -25,2 +33,3 @@ * First Paint ([FP](https://medium.com/@zizzamia/first-contentful-paint-with-a-touch-of-perfume-js-cd11dfd2e18f))

* First Input Delay (FID)
* Framework components lifecycle monitoring

@@ -43,12 +52,6 @@ ![first paint and first input delay](https://github.com/Zizzamia/perfume.js/blob/master/docs/src/assets/first-paint-and-first-input-delay.png)

Additionally, you can import the transpiled modules from `dist/es` in case you have a modular library:
```javascript
import Perfume from 'node_modules/perfume.js/dist/es/perfume';
```
Universal Module Definition:
```javascript
import Perfume from 'node_modules/perfume.js/perfume.umd.js';
import Perfume from 'node_modules/perfume.js/dist/perfume.umd.min.js';
```

@@ -135,7 +138,7 @@

### Angular
In combination with the Angular framework, we can start configuring Perfume to collect the initial performance metrics of the application. Make sure to import the `PefumeModule` at first inside the `NgModule` to let the PerformanceObserver work correctly.
Wth the Angular framework, we can start configuring Perfume to collect the initial performance metrics (eg. FCP, FID). Make sure to import the `PefumeModule` at first inside the `NgModule` to let the PerformanceObserver work correctly.
In a large application use the `@PerfumeAfterViewInit()` decorator to monitor the rendering performance of the most complex components. Avoid using it inside a NgFor, instead focus on components that include a collection of smaller components.
In a large application use the `@PerfumeAfterViewInit()` decorator to monitor the rendering performance of the most complex components. Avoid using it inside a NgFor, instead focus on components that include a collection of smaller components.
The `NgPerfume` service exposes all the methods and property of the `perfume` instance, use it to annotate a distinct coding flow manually and for unit test mocking.
The `NgPerfume` service exposes all the methods and property of the `perfume` instance, you can annotate component lifecycles combined with APIs calls to measure how long it takes to paint the component.

@@ -145,2 +148,3 @@ ```javascript

import { AppComponent } from './app.component';
import { AppApi } from './app-api';

@@ -154,9 +158,19 @@ @Component({

export class AppComponent implements AfterViewInit {
constructor(public perfume: NgPerfume) {}
ngAfterViewInit() {}
launchFalconNine() {
this.perfume.start('rocketScience');
// Rocket Science Match ...
this.perfume.end('rocketScience');
data: AwesomeType;
constructor(public perfume: NgPerfume) {
// Start measure component time to paint
this.perfume.start('AppComponentAfterPaint');
}
ngAfterViewInit() {
this.loadAwesomeData();
}
loadAwesomeData = async () => {
await AppApi.loadAmazingData();
this.data = AppApi.loadAwesomeData();
// End measure component time to paint
this.perfume.endPaint('AppComponentAfterPaint');
}
}

@@ -180,3 +194,44 @@

### React
In combination with the React framework, we can start configuring Perfume to collect the initial performance metrics (eg. FCP, FID).
Use `perfume.start()` and `perfume.endPaint()` into a component lifecycle mixed with APIs calls to measure how long it takes to paint the component.
```javascript
import React from 'react';
import Perfume from 'perfume.js';
import { AppApi } from './AppApi';
const perfume = new Perfume({
firstContentfulPaint: true,
firstInputDelay: true
});
export default class App extends React.Component {
constructor() {
// Start measure component time to paint
perfume.start('AppAfterPaint');
}
loadData = async () => {
await AppApi.loadAmazingData();
await AppApi.loadAwesomeData();
// End measure component time to paint
perfume.endPaint('AppAfterPaint');
}
render() {
const data = this.loadData();
return (
<div>
<h2>Awesome App</h2>
<div>{data}</div>
</div>
);
}
}
```
## Analytics

@@ -247,3 +302,2 @@

firstInputDelay: true,
timeToInteractive: true,
});

@@ -287,5 +341,18 @@

### Contributors
This project exists thanks to all the people who contribute.
<img src="https://opencollective.com/perfumejs/contributors.svg?width=890&button=false" />
### Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/perfumejs#backer)]
<a href="https://opencollective.com/perfumejs#backers" target="_blank"><img src="https://opencollective.com/perfumejs/backers.svg?width=890"></a>
## Copyright and license
Code and documentation copyright 2018 [Leonardo Zizzamia](https://twitter.com/Zizzamia). Code released under the [MIT license](LICENSE). Docs released under Creative Commons.
Code and documentation copyright 2019 [Leonardo Zizzamia](https://twitter.com/Zizzamia). Code released under the [MIT license](LICENSE). Docs released under Creative Commons.

@@ -292,0 +359,0 @@ ## Team

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc