gosling.js 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"exported-utils-51b5f19f.js","sources":["../src/compiler/defaults.ts","../src/core/utils/color-to-hex.ts","../src/core/utils/polar.ts","../src/core/mark/point.ts","../src/core/mark/line.ts","../src/core/mark/bar.ts","../src/core/mark/area.ts","../src/core/mark/rect.ts","../src/core/mark/triangle.ts","../src/core/mark/text.ts","../src/core/mark/rule.ts","../src/core/mark/withinLink.ts","../src/core/utils/array.ts","../src/core/mark/grid.ts","../src/core/utils/text-style.ts","../src/core/mark/title.ts","../src/core/mark/outline.ts","../src/core/mark/legend.ts","../src/core/mark/axis.ts","../src/core/mark/outline-circular.ts","../src/core/mark/background.ts","../src/core/mark/betweenLink.ts","../src/core/mark/index.ts","../src/core/utils/overlay.ts","../src/gosling-schema/gosling.schema.guards.ts","../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js","../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js","../node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js","../node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js","../src/core/utils/style.ts","../src/core/utils/uuid.ts","../src/compiler/spec-preprocess.ts","../src/core/utils/chrom-size.ts","../src/core/utils/assembly.ts","../src/data-fetchers/utils.ts"],"sourcesContent":["export const DEFAULT_VISUAL_PROPERTIES = {\n opacity: 1\n};\n\nexport const DEFAULT_TITLE_HEIGHT = 20; // deprecated\nexport const DEFAULT_SUBTITLE_HEIGHT = 20; // deprecated\nexport const DEWFAULT_TITLE_PADDING_ON_TOP_AND_BOTTOM = 6;\n\n// default track size\nexport const DEFAULT_TRACK_HEIGHT_LINEAR = 130;\nexport const DEFAULT_TRACK_WIDTH_LINEAR = 600;\nexport const DEFAULT_TRACK_SIZE_2D = 600;\n\n// gab between views\nexport const DEFAULT_VIEW_SPACING = 10;\n\n// empty space inside the visualization for circular layouts\nexport const DEFAULT_INNER_RADIUS_PROP = 0.3;\n\n// padding around a circular view\nexport const DEFAULT_CIRCULAR_VIEW_PADDING = 0; // TODO: this is not properly considered in determining the arrangement of views\n\n// default color when cannot parse\nexport const DEFAULT_BACKUP_COLOR = 'gray';\n","import * as PIXI from 'pixi.js';\nimport { color } from 'd3-color';\nimport { DEFAULT_BACKUP_COLOR } from '../../compiler/defaults';\n\n/**\n * Convert a regular color value (e.g. 'red', '#FF0000', 'rgb(255,0,0)') to a hex value which is legible by PIXI.\n */\nconst colorToHex = (colorStr: string) => {\n let c = color(colorStr) as any;\n\n if (!c) {\n c = color(DEFAULT_BACKUP_COLOR) as any;\n }\n\n const hex = PIXI.utils.rgb2hex([c.rgb().r / 255.0, c.rgb().g / 255.0, c.rgb().b / 255.0]);\n return hex;\n};\n\nexport default colorToHex;\n","export const RADIAN_GAP = 0; //0.04;\n\n/**\n * Convert a value in a single-linear axis to a radian value. Anticlockwise, starts from 12 o'clock.\n * v span from zero to `max`.\n */\nexport function valueToRadian(v: number, max: number, sa: number, ea: number, g?: number) {\n const safeVal = Math.max(Math.min(max, v), 0);\n const gap = g ?? RADIAN_GAP;\n const radExtent = ((ea - sa) / 360) * Math.PI * 2 - gap * 2;\n const radStart = (sa / 360) * Math.PI * 2;\n return -(radStart + (safeVal / max) * radExtent) - Math.PI / 2.0 - gap;\n}\n\n/**\n * Convert a position in a cartesian system to a polar coordinate.\n */\nexport function cartesianToPolar(x: number, max: number, r: number, cx: number, cy: number, sa: number, ea: number) {\n return {\n x: cx + r * Math.cos(valueToRadian(x, max, sa, ea)),\n y: cy + r * Math.sin(valueToRadian(x, max, sa, ea))\n };\n}\n\nexport function positionToRadian(x: number, y: number, cx: number, cy: number) {\n if (cx <= x) {\n return Math.atan((y - cy) / (x - cx));\n } else {\n return Math.atan((y - cy) / (x - cx)) - Math.PI;\n }\n}\n\n/**\n * Calculate a degree in the range of [0, 360) based on two points. Anticlockwise, starts from 12 o'clock.\n */\nexport function pointsToDegree(x: number, y: number, cx: number, cy: number) {\n return ((Math.atan2(-(y - cy), x - cx) / Math.PI) * 180 + 270) % 360;\n}\n","import type * as PIXI from 'pixi.js';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport { getValueUsingChannel } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport { cartesianToPolar } from '../utils/polar';\nimport type { PIXIVisualProperty } from '../visual-property.schema';\n\nexport function drawPoint(track: any, g: PIXI.Graphics, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n if (!spec.width || !spec.height) {\n console.warn('Size of a track is not properly determined, so visual mark cannot be rendered');\n return;\n }\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = track.dimensions;\n const zoomLevel =\n (model.getChannelScale('x') as any).invert(trackWidth) - (model.getChannelScale('x') as any).invert(0);\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300;\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const tcx = trackWidth / 2.0;\n const tcy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n /* render */\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(\n d =>\n !getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory\n ).forEach(d => {\n const cx = model.encodedPIXIProperty('x-center', d);\n const cy = model.encodedPIXIProperty('y-center', d);\n const color = model.encodedPIXIProperty('color', d);\n const radius = model.encodedPIXIProperty('p-size', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n const alphaTransition = model.markVisibility(d, { width: radius, zoomLevel });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n if (radius <= 0.1 || actualOpacity === 0 || cx + radius < 0 || cx - radius > trackWidth) {\n // Don't draw invisible marks\n return;\n }\n\n // stroke\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n actualOpacity, // alpha\n 1 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n if (circular) {\n const r = trackOuterRadius - ((rowPosition + rowHeight - cy) / trackHeight) * trackRingSize;\n const pos = cartesianToPolar(cx, trackWidth, r, tcx, tcy, startAngle, endAngle);\n g.beginFill(colorToHex(color), actualOpacity);\n g.drawCircle(pos.x, pos.y, radius);\n\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [pos.x, pos.y, radius]);\n } else {\n g.beginFill(colorToHex(color), actualOpacity);\n g.drawCircle(cx, rowPosition + rowHeight - cy, radius);\n\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [cx, rowPosition + rowHeight - cy, radius]);\n }\n });\n });\n}\n\nexport function pointProperty(\n model: GoslingTrackModel,\n propertyKey: PIXIVisualProperty,\n datum?: { [k: string]: string | number }\n) {\n const xe = model.visualPropertyByChannel('xe', datum);\n const x = model.visualPropertyByChannel('x', datum);\n const size = model.visualPropertyByChannel('size', datum);\n\n // priority of channels\n switch (propertyKey) {\n case 'x-center':\n return xe ? (xe + x) / 2.0 : x;\n case 'y-center': {\n const ye = model.visualPropertyByChannel('ye', datum);\n const y = model.visualPropertyByChannel('y', datum);\n return ye ? (ye + y) / 2.0 : y;\n }\n case 'p-size':\n return xe && model.spec().stretch ? (xe - x) / 2.0 : size;\n default:\n return undefined;\n }\n}\n","import type * as PIXI from 'pixi.js';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport { getValueUsingChannel } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport { cartesianToPolar } from '../utils/polar';\n\nexport function drawLine(g: PIXI.Graphics, model: GoslingTrackModel, trackWidth: number, trackHeight: number) {\n /* track spec */\n const spec = model.spec();\n\n if (!spec.width || !spec.height) {\n console.warn('Size of a track is not properly determined, so visual mark cannot be rendered');\n return;\n }\n\n /* data */\n const data = model.data();\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220; // TODO: should default values be filled already\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const trackCenterX = trackWidth / 2.0;\n const trackCenterY = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n /* color separation */\n const colorCategories = (model.getChannelDomainArray('color') as string[]) ?? ['___SINGLE_COLOR___'];\n\n /* render */\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n // line marks are drawn for each color\n colorCategories.forEach(colorCategory => {\n data.filter(\n d =>\n (!getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory) &&\n (!getValueUsingChannel(d, spec.color as Channel) ||\n (getValueUsingChannel(d, spec.color as Channel) as string) === colorCategory)\n )\n .sort(\n (d1, d2) =>\n // draw from the left to right\n (getValueUsingChannel(d1, spec.x as Channel) as number) -\n (getValueUsingChannel(d2, spec.x as Channel) as number)\n )\n .forEach((d, i) => {\n const cx = model.encodedPIXIProperty('x', d);\n const y = model.encodedPIXIProperty('y', d);\n const size = model.encodedPIXIProperty('size', d);\n const color = model.encodedPIXIProperty('color', d); // should be identical for a single line\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n g.lineStyle(\n size,\n colorToHex(color),\n opacity,\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n if (circular) {\n const r = trackOuterRadius - ((rowPosition + rowHeight - y) / trackHeight) * trackRingSize;\n const pos = cartesianToPolar(\n cx,\n trackWidth,\n r,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n\n if (i === 0) {\n g.moveTo(pos.x, pos.y);\n } else {\n g.lineTo(pos.x, pos.y);\n }\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [pos.x, pos.y, 1]);\n } else {\n if (i === 0) {\n g.moveTo(cx, rowPosition + rowHeight - y);\n } else {\n g.lineTo(cx, rowPosition + rowHeight - y);\n }\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [cx, rowPosition + rowHeight - y, 1]);\n }\n });\n });\n });\n}\n","import type { Tile } from '@gosling-lang/gosling-track';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { group } from 'd3-array';\nimport type { PIXIVisualProperty } from '../visual-property.schema';\nimport { IsChannelDeep, IsStackedMark, getValueUsingChannel } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\n\nexport function drawBar(track: any, tile: Tile, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n if (!spec.width || !spec.height) {\n console.warn('Size of a track is not properly determined, so visual mark cannot be rendered');\n return;\n }\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = track.dimensions;\n const tileSize = track.tilesetInfo.tile_size;\n const zoomLevel =\n (model.getChannelScale('x') as any).invert(trackWidth) - (model.getChannelScale('x') as any).invert(0);\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const cx = trackWidth / 2.0;\n const cy = trackHeight / 2.0;\n\n /* genomic scale */\n const xScale = model.getChannelScale('x');\n let tileUnitWidth: number;\n if (tile.tileData.tilePos) {\n const { tileX, tileWidth } = track.getTilePosAndDimensions(\n tile.tileData.zoomLevel,\n tile.tileData.tilePos,\n tileSize\n );\n tileUnitWidth = xScale(tileX + tileWidth / tileSize) - xScale(tileX);\n }\n\n /* row separation */\n const rowCategories = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n const clipRow =\n !IsChannelDeep(spec.row) || (IsChannelDeep(spec.row) && typeof spec.row.clip === 'undefined') || spec.row.clip;\n\n /* baseline */\n const baselineValue = IsChannelDeep(spec.y) ? spec.y?.baseline : undefined;\n const staticBaseY = model.encodedValue('y', baselineValue) ?? 0;\n\n /* render */\n const g = tile.graphics;\n if (IsStackedMark(spec)) {\n // TODO: many parts in this scope are identical to the below `else` statement, so encaptulate this?\n // const rowGraphics = tile.graphics; // new HGC.libraries.PIXI.Graphics(); // only one row for stacked marks\n\n const genomicChannel = model.getGenomicChannel();\n if (!genomicChannel || !genomicChannel.field) {\n console.warn('Genomic field is not provided in the specification');\n return;\n }\n const pivotedData = group(data, d => d[genomicChannel.field as string]);\n const xKeys = [...pivotedData.keys()];\n\n const isFlippedY = (IsChannelDeep(spec.y) && spec.y.flip) || spec.flipY;\n // TODO: users may want to align rows by values\n xKeys.forEach(k => {\n let prevYEnd = 0;\n pivotedData.get(k)?.forEach(d => {\n const color = model.encodedPIXIProperty('color', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n const y = model.encodedPIXIProperty('y', d);\n\n const barWidth = model.encodedPIXIProperty('width', d, { tileUnitWidth });\n\n const xs = model.encodedPIXIProperty('x-start', d, { markWidth: barWidth });\n const xe = xs + barWidth;\n\n const alphaTransition = model.markVisibility(d, { width: barWidth, zoomLevel });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n if (\n actualOpacity === 0 ||\n barWidth <= 0 ||\n (isFlippedY && y - rowHeight >= 0) ||\n (!isFlippedY && y <= 0)\n ) {\n return;\n }\n\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n actualOpacity,\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n let polygonForMouseEvents: number[] = [];\n\n const barHeight = isFlippedY ? rowHeight - y : y;\n\n if (circular) {\n const ys = isFlippedY ? prevYEnd : rowHeight - prevYEnd;\n const farR = trackOuterRadius - (ys / trackHeight) * trackRingSize;\n const ye = isFlippedY ? barHeight + prevYEnd : rowHeight - y - prevYEnd;\n const nearR = trackOuterRadius - (ye / trackHeight) * trackRingSize;\n\n const sPos = cartesianToPolar(xs, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(xs, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(xs + barWidth, trackWidth, startAngle, endAngle);\n\n g.beginFill(colorToHex(color), color === 'none' ? 0 : actualOpacity);\n g.moveTo(sPos.x, sPos.y);\n g.arc(cx, cy, nearR, startRad, endRad, true);\n g.arc(cx, cy, farR, endRad, startRad, false);\n polygonForMouseEvents = Array.from(g.currentPath.points);\n g.closePath();\n } else {\n g.beginFill(colorToHex(color), color === 'none' ? 0 : actualOpacity);\n const ys = isFlippedY ? prevYEnd : rowHeight - y - prevYEnd;\n g.drawRect(xs, ys, barWidth, barHeight);\n const ye = ys + y;\n polygonForMouseEvents = [xs, ys, xs, ye, xe, ye, xe, ys];\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPolygonBasedEvent(d, polygonForMouseEvents);\n prevYEnd += barHeight;\n });\n });\n } else {\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(d => {\n const rowValue = getValueUsingChannel(d, spec.row as Channel);\n return !rowValue || rowValue === rowCategory;\n }).forEach(d => {\n const color = model.encodedPIXIProperty('color', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const opacity = model.encodedPIXIProperty('opacity');\n let y = model.encodedPIXIProperty('y', d);\n let ye = model.encodedPIXIProperty('ye', d);\n\n if (typeof ye !== 'undefined' && y > ye) {\n // ensure `ye` is larger\n [y, ye] = [ye, y];\n }\n\n const barWidth = model.encodedPIXIProperty('width', d, { tileUnitWidth });\n const xs = model.encodedPIXIProperty('x-start', d, { markWidth: barWidth });\n const xe = xs + barWidth;\n\n let ys: number;\n if (typeof ye === 'undefined') {\n ys = rowPosition + rowHeight - staticBaseY - y;\n ye = rowPosition + rowHeight - staticBaseY;\n\n // Flip the bar along y-axis\n if ((IsChannelDeep(spec.y) && spec.y.flip) || spec.flipY) {\n ye = ys;\n ys = rowPosition;\n }\n } else {\n ys = rowPosition + rowHeight - ye;\n ye = rowPosition + rowHeight - y;\n }\n\n // If the position exceeds the given scale, clip it!\n if (clipRow) {\n ys = Math.max(rowPosition, ys);\n ys = Math.min(ys, rowPosition + rowHeight);\n ye = Math.max(rowPosition, ye);\n ye = Math.min(ye, rowPosition + rowHeight);\n }\n\n const alphaTransition = model.markVisibility(d, { width: barWidth, zoomLevel });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n if (actualOpacity === 0 || barWidth === 0 || ye - ys === 0) {\n // do not draw invisible marks\n return;\n }\n\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n actualOpacity,\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n let polygonForMouseEvents: number[] = [];\n\n if (circular) {\n const farR = trackOuterRadius - (ys / trackHeight) * trackRingSize;\n const nearR = trackOuterRadius - (ye / trackHeight) * trackRingSize;\n\n const sPos = cartesianToPolar(xs, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(xs, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(xs + barWidth, trackWidth, startAngle, endAngle);\n\n g.beginFill(colorToHex(color), color === 'none' ? 0 : actualOpacity);\n g.moveTo(sPos.x, sPos.y);\n g.arc(cx, cy, nearR, startRad, endRad, true);\n g.arc(cx, cy, farR, endRad, startRad, false);\n polygonForMouseEvents = Array.from(g.currentPath.points);\n g.closePath();\n } else {\n g.beginFill(colorToHex(color), color === 'none' ? 0 : actualOpacity);\n g.drawRect(xs, ys, barWidth, ye - ys);\n polygonForMouseEvents = [xs, ys, xs, ye, xe, ye, xe, ys];\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPolygonBasedEvent(d, polygonForMouseEvents);\n });\n });\n }\n}\n\nexport function barProperty(\n gm: GoslingTrackModel,\n propertyKey: PIXIVisualProperty,\n datum?: { [k: string]: string | number },\n additionalInfo?: {\n tileUnitWidth?: number;\n markWidth?: number;\n }\n) {\n const x = gm.visualPropertyByChannel('x', datum);\n const xe = gm.visualPropertyByChannel('xe', datum);\n const size = gm.visualPropertyByChannel('size', datum);\n switch (propertyKey) {\n case 'width':\n return size ?? (xe ? xe - x : additionalInfo?.tileUnitWidth);\n case 'x-start':\n if (!additionalInfo?.markWidth) {\n // `markWidth` is required\n return undefined;\n }\n return xe ? (x + xe - additionalInfo?.markWidth) / 2.0 : x - additionalInfo?.markWidth / 2.0;\n default:\n return undefined;\n }\n}\n","import { min as d3min, max as d3max, group } from 'd3-array';\nimport type { Channel, Datum } from '@gosling-lang/gosling-schema';\nimport type { Tile } from '@gosling-lang/gosling-track';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsStackedMark, getValueUsingChannel } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\n\n/**\n * Draw area marks\n */\nexport function drawArea(HGC: import('@higlass/types').HGC, track: any, tile: Tile, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = track.dimensions;\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220; // TODO: should default values be filled already\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const trackCenterX = trackWidth / 2.0;\n const trackCenterY = trackHeight / 2.0;\n\n /* genomic scale */\n const xScale = track._xScale;\n\n /* row separation */\n const rowCategories = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n /* color separation */\n const colorCategories = (model.getChannelDomainArray('color') as string[]) ?? ['___SINGLE_COLOR___'];\n\n /* constant values */\n // we do not support encoding opacity, strokeWidth, and stroke for area marks\n const constantOpacity = model.encodedPIXIProperty('opacity');\n const constantStrokeWidth = model.encodedPIXIProperty('strokeWidth');\n const constantStroke = model.encodedPIXIProperty('stroke');\n\n /* render */\n const graphics = tile.graphics;\n if (IsStackedMark(spec)) {\n // TODO: many parts in this scope are identical as the below `else` statement, so encaptulate this?\n\n const genomicChannel = model.getGenomicChannel();\n if (!genomicChannel || !genomicChannel.field) {\n console.warn('Genomic field is not provided in the specification');\n return;\n }\n const pivotedData = group(data, d => d[genomicChannel.field as string]);\n const genomicPosCategories = [...pivotedData.keys()]; // TODO: make sure to be sorted from left to right or top to bottom\n\n // stroke\n graphics.lineStyle(\n constantStrokeWidth,\n colorToHex(constantStroke),\n constantOpacity,\n 1 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n const prevYEndByGPos: { [k: string]: number } = {};\n\n // TODO: we can have a multiple rows when color and row are mapped with different fields\n // are marks are drawn for each color\n colorCategories.forEach(colorCategory => {\n // we have two sets of points since we need to draw the bottom line as well\n const areaPointsTop: number[][] = [];\n const areaPointsBottom: number[][] = [];\n\n // TODO: users may want to align rows by values\n genomicPosCategories.forEach((genomicPosCategory, i, array) => {\n pivotedData\n .get(genomicPosCategory)\n ?.filter(d => getValueUsingChannel(d, spec.color as Channel) === colorCategory)\n ?.forEach(d => {\n const xValue = +genomicPosCategory;\n\n const cx = xScale(xValue);\n const cy = d3max([model.encodedPIXIProperty('y', d), 0]); // make should not to overflow\n\n if (typeof prevYEndByGPos[genomicPosCategory] === 'undefined') {\n prevYEndByGPos[genomicPosCategory] = 0;\n }\n\n const ys = rowHeight - cy - prevYEndByGPos[genomicPosCategory];\n const ye = rowHeight - prevYEndByGPos[genomicPosCategory];\n\n if (circular) {\n if (i === 0) {\n // start position of the polygon\n const r = trackOuterRadius - (rowHeight / trackHeight) * trackRingSize;\n const pos = cartesianToPolar(\n cx,\n trackWidth,\n r,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n areaPointsTop.push([pos.x, pos.y]);\n areaPointsBottom.push([pos.x, pos.y]);\n }\n\n const rTop = trackOuterRadius - (ys / trackHeight) * trackRingSize;\n const posTop = cartesianToPolar(\n cx,\n trackWidth,\n rTop,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n areaPointsTop.push([posTop.x, posTop.y]);\n\n const rBot = trackOuterRadius - (ye / trackHeight) * trackRingSize;\n const posBot = cartesianToPolar(\n cx,\n trackWidth,\n rBot,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n areaPointsBottom.push([posBot.x, posBot.y]);\n\n if (i === array.length - 1) {\n // end position of the polygon\n const r = trackOuterRadius - (rowHeight / trackHeight) * trackRingSize;\n const pos = cartesianToPolar(\n cx,\n trackWidth,\n r,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n areaPointsTop.push([pos.x, pos.y]);\n areaPointsBottom.push([pos.x, pos.y]);\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [posBot.x, posBot.y, 1]);\n } else {\n if (i === 0) {\n // start position of the polygon\n areaPointsTop.push([cx, rowHeight]); // TODO: confirm if this is correct\n areaPointsBottom.push([cx, rowHeight]);\n }\n\n areaPointsTop.push([cx, ys]);\n areaPointsBottom.push([cx, ye]);\n\n if (i === array.length - 1) {\n // end position of the polygon\n areaPointsTop.push([cx, rowHeight]);\n areaPointsBottom.push([cx, rowHeight]);\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [cx, ys, 1]);\n }\n\n prevYEndByGPos[genomicPosCategory] += cy;\n });\n });\n const color = model.encodedValue('color', colorCategory);\n graphics.beginFill(colorToHex(color), constantOpacity);\n graphics.drawPolygon([\n ...areaPointsTop.reduce((a, b) => a.concat(b)),\n ...areaPointsBottom.reverse().reduce((a, b) => a.concat(b))\n ]);\n graphics.endFill();\n });\n } else {\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n // stroke\n graphics.lineStyle(\n constantStrokeWidth,\n colorToHex(constantStroke),\n constantOpacity,\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n // area marks are drawn for each color\n colorCategories.forEach(colorCategory => {\n const baselinePoints: number[][] = [];\n const areaPoints: number[] = [];\n const baselineR = trackOuterRadius - ((rowPosition + rowHeight) / trackHeight) * trackRingSize;\n let startX = 0;\n\n data.filter(\n d =>\n (typeof getValueUsingChannel(d, spec.row as Channel) === 'undefined' ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory) &&\n (typeof getValueUsingChannel(d, spec.color as Channel) === 'undefined' ||\n (getValueUsingChannel(d, spec.color as Channel) as string) === colorCategory)\n )\n .sort(\n // should sort properly before visualizing it so that the path is correctly drawn\n (a: Datum, b: Datum) => model.encodedPIXIProperty('x', a) - model.encodedPIXIProperty('x', b)\n )\n .forEach((d, i, array) => {\n // TODO: this should be included in the `encodedValue` functions\n // make should not to overflow when using use-defined `domain`\n const cy = d3min([d3max([model.encodedPIXIProperty('y', d), 0]), rowHeight]);\n const cx = model.encodedPIXIProperty('x', d);\n\n if (circular) {\n // we need to prepare the points for drawing baseline\n const baselinePos = cartesianToPolar(\n cx,\n trackWidth,\n baselineR,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n baselinePoints.push([baselinePos.x, baselinePos.y]);\n\n if (i === 0) {\n // start position of the polygon\n areaPoints.push(baselinePos.x, baselinePos.y);\n }\n\n const r = trackOuterRadius - ((rowPosition + rowHeight - cy) / trackHeight) * trackRingSize;\n const pos = cartesianToPolar(\n cx,\n trackWidth,\n r,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n areaPoints.push(pos.x, pos.y);\n\n if (i === array.length - 1) {\n // close the polygon with a point at the start\n const startR =\n trackOuterRadius - ((rowPosition + rowHeight) / trackHeight) * trackRingSize;\n const curPos = cartesianToPolar(\n cx,\n trackWidth,\n startR,\n trackCenterX,\n trackCenterY,\n startAngle,\n endAngle\n );\n\n areaPoints.push(curPos.x, curPos.y);\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [pos.x, pos.y, 1]);\n } else {\n if (i === 0) {\n // start position of the polygon\n areaPoints.push(cx, rowPosition + rowHeight);\n startX = cx;\n }\n\n areaPoints.push(cx, rowPosition + rowHeight - cy);\n\n if (i === array.length - 1) {\n // close the polygon with a point at the start\n areaPoints.push(cx, rowPosition + rowHeight);\n areaPoints.push(startX, rowPosition + rowHeight);\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPointBasedEvent(d, [cx, rowPosition + rowHeight - cy, 1]);\n }\n });\n\n if (circular && baselinePoints.length !== 0) {\n // Add baseline points\n areaPoints.push(...baselinePoints.reverse().reduce((a, b) => a.concat(b)));\n }\n\n const color = model.encodedValue('color', colorCategory);\n graphics.beginFill(colorToHex(color), constantOpacity);\n graphics.drawPolygon(areaPoints);\n graphics.endFill();\n });\n });\n }\n}\n","import type { Tile } from '@gosling-lang/gosling-track';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport type { PIXIVisualProperty } from '../visual-property.schema';\nimport colorToHex from '../utils/color-to-hex';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\n\nexport function drawRect(HGC: import('@higlass/types').HGC, track: any, tile: Tile, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = track.dimensions;\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const cx = trackWidth / 2.0;\n const cy = trackHeight / 2.0;\n\n /* genomic scale */\n const xScale = track._xScale;\n let tileUnitWidth: number;\n if (tile.tileData.tilePos) {\n const tileSize = track.tilesetInfo.tile_size;\n const { tileX, tileWidth } = track.getTilePosAndDimensions(\n tile.tileData.zoomLevel,\n tile.tileData.tilePos, // TODO: required parameter. Typing out `track` should address this issue.\n tileSize\n );\n tileUnitWidth = xScale(tileX + tileWidth / tileSize) - xScale(tileX);\n }\n\n /* row separation */\n const rowCategories: string[] = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n const RPAD = IsChannelDeep(spec.row) && spec.row.padding ? spec.row.padding : 0;\n\n // TODO: what if quantitative Y field is used?\n const yCategories = (model.getChannelDomainArray('y') as string[]) ?? ['___SINGLE_Y_POSITION___'];\n const cellHeight = rowHeight / yCategories.length - RPAD * 2;\n\n /* render */\n const g = tile.graphics;\n data.forEach(d => {\n const rowPosition = model.encodedPIXIProperty('row', d) + RPAD;\n const x = model.encodedPIXIProperty('x', d);\n const color = model.encodedPIXIProperty('color', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n const rectWidth = model.encodedPIXIProperty('width', d, { markWidth: tileUnitWidth });\n const rectHeight = model.encodedPIXIProperty('height', d, { markHeight: cellHeight });\n const y = model.encodedPIXIProperty('y', d); // - rectHeight / 2.0; // It is top posiiton now\n\n const alphaTransition = model.markVisibility(d, {\n width: rectWidth,\n zoomLevel: track._xScale.invert(trackWidth) - track._xScale.invert(0)\n });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n if (actualOpacity === 0 || rectHeight === 0 || rectWidth <= 0.0001) {\n // No need to draw invisible objects\n return;\n }\n\n const [xs, xe, ys, ye] = [\n x,\n x + rectWidth,\n rowPosition + rowHeight - y - rectHeight / 2.0,\n rowPosition + rowHeight - y + rectHeight / 2.0\n ];\n\n const absoluteHeight = model.visualPropertyByChannel('size', d) ?? undefined; // TODO: this is making it complicated, way to simplify this?\n\n // stroke\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n actualOpacity, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n let polygonForMouseEvent: number[] = [];\n\n if (circular) {\n if (xe < 0 || trackWidth < xs) {\n // do not draw overflewed visual marks\n return;\n }\n\n // TODO: Does a `row` channel affect here?\n let farR = trackOuterRadius - (ys / trackHeight) * trackRingSize;\n let nearR = trackOuterRadius - (ye / trackHeight) * trackRingSize;\n\n if (absoluteHeight) {\n const midR = trackOuterRadius - ((rowPosition + y) / trackHeight) * trackRingSize;\n farR = midR - absoluteHeight / 2.0;\n nearR = midR + absoluteHeight / 2.0;\n }\n\n const sPos = cartesianToPolar(xs, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(xs, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(xe, trackWidth, startAngle, endAngle);\n\n g.beginFill(colorToHex(color === 'none' ? 'white' : color), color === 'none' ? 0 : actualOpacity);\n g.moveTo(sPos.x, sPos.y);\n g.arc(cx, cy, nearR, startRad, endRad, true);\n g.arc(cx, cy, farR, endRad, startRad, false);\n polygonForMouseEvent = Array.from(g.currentPath.points);\n g.closePath();\n } else {\n g.beginFill(colorToHex(color === 'none' ? 'white' : color), color === 'none' ? 0 : actualOpacity);\n g.drawRect(xs, ys, xe - xs, ye - ys);\n polygonForMouseEvent = [xs, ys, xs, ye, xe, ye, xe, ys];\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPolygonBasedEvent(d, polygonForMouseEvent);\n });\n}\n\nexport function rectProperty(\n gm: GoslingTrackModel,\n propertyKey: PIXIVisualProperty,\n datum?: { [k: string]: string | number },\n additionalInfo?: {\n markHeight?: number;\n markWidth?: number;\n }\n) {\n switch (propertyKey) {\n case 'width':\n const width =\n // (1) size\n gm.visualPropertyByChannel('xe', datum)\n ? gm.visualPropertyByChannel('xe', datum) - gm.visualPropertyByChannel('x', datum)\n : // (2) unit mark height\n additionalInfo?.markWidth;\n return width === 0 ? 0.1 : width; // TODO: not sure if this is necessary for all cases. Perhaps, we can have an option.\n case 'height':\n return (\n // (1) size\n gm.visualPropertyByChannel('size', datum) ??\n // (2) unit mark height\n additionalInfo?.markHeight\n );\n default:\n return undefined;\n }\n}\n","import type * as PIXI from 'pixi.js';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport type { Channel, Mark } from '@gosling-lang/gosling-schema';\nimport { getValueUsingChannel } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport { cartesianToPolar } from '../utils/polar';\n\nexport function drawTriangle(g: PIXI.Graphics, model: GoslingTrackModel, trackWidth: number, trackHeight: number) {\n /* track spec */\n const spec = model.spec();\n\n if (!spec.width || !spec.height) {\n console.warn('Size of a track is not properly determined, so visual mark cannot be rendered');\n return;\n }\n\n /* data */\n const data = model.data();\n\n /* track size */\n const zoomLevel =\n (model.getChannelScale('x') as any).invert(trackWidth) - (model.getChannelScale('x') as any).invert(0);\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const cx = trackWidth / 2.0;\n const cy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories: string[] = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n const yCategories: string[] = (model.getChannelDomainArray('y') as string[]) ?? ['___SINGLE_Y___'];\n const triHeight =\n model.encodedValue('size') ??\n (circular ? trackRingSize / rowCategories.length / yCategories.length : rowHeight / yCategories.length);\n\n /* render */\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(\n d =>\n !getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory\n ).forEach(d => {\n const x = model.encodedPIXIProperty('x', d);\n const xe = model.encodedPIXIProperty('xe', d);\n const markWidth = model.encodedPIXIProperty('size', d) ?? (xe === undefined ? triHeight : xe - x);\n\n const y = model.encodedPIXIProperty('y', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const color = model.encodedPIXIProperty('color', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n let polygon: number[] = [];\n\n if (circular) {\n let x0 = x ? x : xe - markWidth;\n let x1 = xe ? xe : x + markWidth;\n let xm = (x0 + x1) / 2.0;\n\n const rm = trackOuterRadius - ((rowPosition + rowHeight - y) / trackHeight) * trackRingSize;\n const r0 = rm - triHeight / 2.0;\n const r1 = rm + triHeight / 2.0;\n\n if (spec.style?.align === 'right' && !xe) {\n x0 -= markWidth;\n x1 -= markWidth;\n xm -= markWidth;\n }\n\n if (spec.mark === 'triangleLeft') {\n const p0 = cartesianToPolar(x1, trackWidth, r0, cx, cy, startAngle, endAngle);\n const p1 = cartesianToPolar(x0, trackWidth, rm, cx, cy, startAngle, endAngle);\n const p2 = cartesianToPolar(x1, trackWidth, r1, cx, cy, startAngle, endAngle);\n const p3 = cartesianToPolar(x1, trackWidth, r0, cx, cy, startAngle, endAngle);\n polygon = [p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y];\n } else if (spec.mark === 'triangleRight') {\n const p0 = cartesianToPolar(x0, trackWidth, r0, cx, cy, startAngle, endAngle);\n const p1 = cartesianToPolar(x1, trackWidth, rm, cx, cy, startAngle, endAngle);\n const p2 = cartesianToPolar(x0, trackWidth, r1, cx, cy, startAngle, endAngle);\n const p3 = cartesianToPolar(x0, trackWidth, r0, cx, cy, startAngle, endAngle);\n polygon = [p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y];\n } else if (spec.mark === 'triangleBottom') {\n x0 = xm - markWidth / 2.0;\n x1 = xm + markWidth / 2.0;\n const p0 = cartesianToPolar(x0, trackWidth, r1, cx, cy, startAngle, endAngle);\n const p1 = cartesianToPolar(x1, trackWidth, r1, cx, cy, startAngle, endAngle);\n const p2 = cartesianToPolar(xm, trackWidth, r0, cx, cy, startAngle, endAngle);\n const p3 = cartesianToPolar(x0, trackWidth, r1, cx, cy, startAngle, endAngle);\n polygon = [p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y];\n }\n\n const alphaTransition = model.markVisibility(d, { width: x1 - x0, zoomLevel });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n // stroke\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n // too narrow triangle's stroke is becoming too sharp\n x1 - x0 > 2 ? actualOpacity : 0, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n g.beginFill(colorToHex(color), actualOpacity);\n g.drawPolygon(polygon);\n g.endFill();\n } else {\n let x0 = x ? x : xe - markWidth;\n let x1 = xe ? xe : x + markWidth;\n let xm = x0 + (x1 - x0) / 2.0;\n const ym = rowPosition + rowHeight - y;\n const y0 = rowPosition + rowHeight - y - triHeight / 2.0;\n const y1 = rowPosition + rowHeight - y + triHeight / 2.0;\n\n if (spec.style?.align === 'right' && !xe) {\n x0 -= markWidth;\n x1 -= markWidth;\n xm -= markWidth;\n }\n\n polygon = (\n {\n triangleLeft: [x1, y0, x0, ym, x1, y1, x1, y0],\n triangleRight: [x0, y0, x1, ym, x0, y1, x0, y0],\n triangleBottom: [x0, y0, x1, y0, xm, y1, x0, y0]\n } as any\n )[spec.mark as Mark];\n\n const alphaTransition = model.markVisibility(d, { width: x1 - x0, zoomLevel });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n // stroke\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n // too narrow triangle's stroke is becoming too sharp\n x1 - x0 > 2 ? actualOpacity : 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n g.beginFill(colorToHex(color), actualOpacity);\n g.drawPolygon(polygon);\n g.endFill();\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addPolygonBasedEvent(d, polygon);\n });\n });\n}\n","import type { Tile } from '@gosling-lang/gosling-track';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { group } from 'd3-array';\nimport { getValueUsingChannel, IsStackedMark } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar } from '../utils/polar';\n\n// Merge with the one in the `utils/text-style.ts`\nexport const TEXT_STYLE_GLOBAL = {\n fontSize: '12px',\n fontFamily: 'sans-serif', // 'Arial',\n fontWeight: 'normal',\n fill: 'black',\n background: 'white',\n lineJoin: 'round',\n stroke: '#ffffff',\n strokeThickness: 0\n} as const;\n\nexport function drawText(HGC: import('@higlass/types').HGC, trackInfo: any, tile: Tile, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const tcx = trackWidth / 2.0;\n const tcy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n /* styles */\n const dx = spec.style?.dx ?? 0;\n const dy = spec.style?.dy ?? 0;\n const textAnchor = !spec.style?.textAnchor ? 'middle' : spec.style.textAnchor;\n\n /* render */\n if (IsStackedMark(spec)) {\n if (circular) {\n // TODO: Not supported for circular layouts yet.\n return;\n }\n\n const rowGraphics = tile.graphics; // new HGC.libraries.PIXI.Graphics(); // only one row for stacked marks\n\n const genomicChannel = model.getGenomicChannel();\n if (!genomicChannel || !genomicChannel.field) {\n console.warn('Genomic field is not provided in the specification');\n return;\n }\n const pivotedData = group(data, d => d[genomicChannel.field as string]);\n const xKeys = [...pivotedData.keys()];\n\n // TODO: users may want to align rows by values\n xKeys.forEach(k => {\n let prevYEnd = 0;\n pivotedData.get(k)?.forEach(d => {\n const text = model.encodedPIXIProperty('text', d);\n const color = model.encodedPIXIProperty('color', d);\n const x = model.encodedPIXIProperty('x', d) + dx;\n const xe = model.encodedPIXIProperty('xe', d) + dx;\n const cx = model.encodedPIXIProperty('x-center', d) + dx;\n const y = model.encodedPIXIProperty('y', d) + dy;\n const size = model.encodedPIXIProperty('size', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n if (cx < 0 || cx > trackWidth) {\n // we do not draw texts that are out of the view\n return;\n }\n\n if (trackInfo.textsBeingUsed > 1000) {\n // prevent from drawing too many text elements for the performance\n return;\n }\n\n /* text styles */\n const localTextStyle = {\n ...TEXT_STYLE_GLOBAL,\n fontSize:\n size ??\n (spec.style?.textFontSize ? `${spec.style?.textFontSize}px` : TEXT_STYLE_GLOBAL.fontSize),\n stroke: stroke ?? spec.style?.textStroke ?? TEXT_STYLE_GLOBAL.stroke,\n strokeThickness: strokeWidth ?? spec.style?.textStrokeWidth ?? TEXT_STYLE_GLOBAL.strokeThickness,\n fontWeight: spec.style?.textFontWeight ?? TEXT_STYLE_GLOBAL.fontWeight\n };\n const textStyleObj = new HGC.libraries.PIXI.TextStyle(localTextStyle);\n\n let textGraphic;\n if (trackInfo.textGraphics.length > trackInfo.textsBeingUsed) {\n textGraphic = trackInfo.textGraphics[trackInfo.textsBeingUsed];\n textGraphic.style.fill = color;\n textGraphic.visible = true;\n textGraphic.text = text;\n textGraphic.alpha = 1;\n } else {\n textGraphic = new HGC.libraries.PIXI.Text(text, {\n ...localTextStyle,\n fill: color\n });\n trackInfo.textGraphics.push(textGraphic);\n }\n\n const metric = HGC.libraries.PIXI.TextMetrics.measureText(text, textStyleObj);\n trackInfo.textsBeingUsed++;\n\n const alphaTransition = model.markVisibility(d, {\n ...metric,\n zoomLevel: trackInfo._xScale.invert(trackWidth) - trackInfo._xScale.invert(0)\n });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n if (!text || actualOpacity === 0) {\n trackInfo.textsBeingUsed--;\n textGraphic.visible = false;\n return;\n }\n\n textGraphic.alpha = actualOpacity;\n\n textGraphic.resolution = 8;\n textGraphic.updateText();\n\n textGraphic.texture.baseTexture.scaleMode = HGC.libraries.PIXI.SCALE_MODES.LINEAR; // or .NEAREST\n\n const sprite = new HGC.libraries.PIXI.Sprite(textGraphic.texture);\n sprite.x = x;\n sprite.y = rowHeight - y - prevYEnd;\n sprite.width = xe - x;\n sprite.height = y;\n\n rowGraphics.addChild(sprite);\n\n prevYEnd += y;\n });\n });\n } else {\n rowCategories.forEach(rowCategory => {\n // we are separately drawing each row so that y scale can be more effectively shared across tiles without rerendering from the bottom\n const rowGraphics = tile.graphics;\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(\n d =>\n !getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory\n ).forEach(d => {\n const text = model.encodedPIXIProperty('text', d);\n const color = model.encodedPIXIProperty('color', d);\n const cx = model.encodedPIXIProperty('x-center', d) + dx;\n const y = model.encodedPIXIProperty('y', d) + dy;\n const size = model.encodedPIXIProperty('size', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n if (cx < 0 || cx > trackWidth) {\n // we do not draw texts that are out of the view\n return;\n }\n\n if (trackInfo.textsBeingUsed > 1000) {\n // prevent from drawing too many text elements for the performance\n return;\n }\n\n /* text styles */\n const localTextStyle = {\n ...TEXT_STYLE_GLOBAL,\n fontSize:\n size ??\n (spec.style?.textFontSize ? `${spec.style?.textFontSize}px` : TEXT_STYLE_GLOBAL.fontSize),\n stroke: stroke ?? spec.style?.textStroke ?? TEXT_STYLE_GLOBAL.stroke,\n strokeThickness: strokeWidth ?? spec.style?.textStrokeWidth ?? TEXT_STYLE_GLOBAL.strokeThickness,\n fontWeight: spec.style?.textFontWeight ?? TEXT_STYLE_GLOBAL.fontWeight\n };\n const textStyleObj = new HGC.libraries.PIXI.TextStyle(localTextStyle);\n\n let textGraphic;\n if (trackInfo.textGraphics.length > trackInfo.textsBeingUsed) {\n textGraphic = trackInfo.textGraphics[trackInfo.textsBeingUsed];\n textGraphic.style.fill = color;\n textGraphic.visible = true;\n textGraphic.text = text;\n textGraphic.alpha = 1;\n } else {\n textGraphic = new HGC.libraries.PIXI.Text(text, {\n ...localTextStyle,\n fill: color\n });\n trackInfo.textGraphics.push(textGraphic);\n }\n\n const metric = HGC.libraries.PIXI.TextMetrics.measureText(text, textStyleObj);\n trackInfo.textsBeingUsed++;\n\n const alphaTransition = model.markVisibility(d, {\n ...metric,\n zoomLevel: trackInfo._xScale.invert(trackWidth) - trackInfo._xScale.invert(0)\n });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n if (!text || actualOpacity === 0) {\n trackInfo.textsBeingUsed--;\n textGraphic.visible = false;\n return;\n }\n\n textGraphic.alpha = actualOpacity;\n textGraphic.anchor.y = 0.5;\n textGraphic.anchor.x = textAnchor === 'middle' ? 0.5 : textAnchor === 'start' ? 0 : 1;\n\n let polygonForMouseEvents: number[] = [];\n\n if (circular) {\n const r = trackOuterRadius - ((rowPosition + rowHeight - y) / trackHeight) * trackRingSize;\n const centerPos = cartesianToPolar(cx, trackWidth, r, tcx, tcy, startAngle, endAngle);\n textGraphic.x = centerPos.x;\n textGraphic.y = centerPos.y;\n\n textGraphic.resolution = 4;\n // const txtStyle = new HGC.libraries.PIXI.TextStyle(textStyleObj);\n // const metric = HGC.libraries.PIXI.TextMetrics.measureText(textGraphic.text, txtStyle);\n\n // scale the width of text label so that its width is the same when converted into circular form\n const tw = (metric.width / (2 * r * Math.PI)) * trackWidth;\n let [minX, maxX] = [cx - tw / 2.0, cx + tw / 2.0];\n\n // make sure not to place the label on the origin\n if (minX < 0) {\n const gap = -minX;\n minX = 0;\n maxX += gap;\n } else if (maxX > trackWidth) {\n const gap = maxX - trackWidth;\n maxX = trackWidth;\n minX -= gap;\n }\n\n const ropePoints: import('pixi.js').Point[] = [];\n const eventPointsFar: number[] = [];\n const eventPointsNear: number[] = [];\n for (let i = maxX; i >= minX; i -= tw / 10.0) {\n const p = cartesianToPolar(i, trackWidth, r, tcx, tcy, startAngle, endAngle);\n ropePoints.push(new HGC.libraries.PIXI.Point(p.x, p.y));\n\n const pFar = cartesianToPolar(\n i,\n trackWidth,\n r + metric.height / 2.0,\n tcx,\n tcy,\n startAngle,\n endAngle\n );\n const pNear = cartesianToPolar(\n i,\n trackWidth,\n r - metric.height / 2.0,\n tcx,\n tcy,\n startAngle,\n endAngle\n );\n eventPointsFar.push(pFar.x, pFar.y);\n if (i === maxX) {\n eventPointsNear.push(pFar.y, pFar.x);\n }\n eventPointsNear.push(pNear.y, pNear.x);\n }\n\n textGraphic.updateText();\n const rope = new HGC.libraries.PIXI.SimpleRope(textGraphic.texture, ropePoints);\n rope.alpha = actualOpacity;\n rowGraphics.addChild(rope);\n\n /* Mouse Events */\n eventPointsNear.reverse();\n polygonForMouseEvents = eventPointsFar.concat(eventPointsNear);\n } else {\n textGraphic.position.x = cx;\n textGraphic.position.y = rowPosition + rowHeight - y;\n rowGraphics.addChild(textGraphic);\n\n /* Mouse Events */\n const { height: h, width: w } = metric;\n const ys = textGraphic.position.y - h / 2.0;\n const ye = ys + h;\n let xs = 0;\n let xe = 0;\n if (textAnchor === 'start') {\n xs = cx;\n xe = cx + w;\n } else if (textAnchor === 'middle') {\n xs = cx - w / 2;\n xe = cx + w / 2;\n } else {\n xs = cx - w;\n xe = cx;\n }\n polygonForMouseEvents = [xs, ys, xs, ye, xe, ye, xe, ys];\n }\n\n model.getMouseEventModel().addPolygonBasedEvent(d, polygonForMouseEvents);\n });\n });\n }\n}\n","import type { Tile } from '@gosling-lang/gosling-track';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { getValueUsingChannel } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\n\nexport function drawRule(HGC: import('@higlass/types').HGC, trackInfo: any, tile: Tile, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const cx = trackWidth / 2.0;\n const cy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories: string[] = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n /* style */\n const dashed = spec.style?.dashed;\n const linePattern = spec.style?.linePattern;\n const curved = spec.style?.curve;\n\n /* render */\n const g = tile.graphics;\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(\n d =>\n !getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory\n ).forEach(d => {\n const x = model.encodedPIXIProperty('x', d);\n const xe = model.encodedPIXIProperty('xe', d);\n const y = model.encodedPIXIProperty('y', d); // y middle position\n const color = model.encodedPIXIProperty('color', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n const alphaTransition = model.markVisibility(d, {\n width: xe - x,\n zoomLevel: trackInfo._xScale.invert(trackWidth) - trackInfo._xScale.invert(0)\n });\n const actualOpacity = Math.min(alphaTransition, opacity);\n\n g.lineStyle(\n strokeWidth,\n colorToHex(color),\n actualOpacity, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n // TODO: Large parts of the following code blocks can be reused, reducing the lines\n // Does this rule span entire width or height of a track?\n if (!xe && (!spec.y || !('field' in spec.y))) {\n /* vertical rule */\n if (circular) {\n // TODO:\n return;\n } else {\n if (dashed) {\n const [dashSize, gapSize] = dashed;\n let curPos = 0;\n\n do {\n g.moveTo(x, curPos);\n g.lineTo(x, curPos + dashSize);\n curPos += dashSize + gapSize;\n } while (curPos < trackHeight);\n } else {\n g.moveTo(x, 0);\n g.lineTo(x, trackHeight);\n }\n }\n } else if (!xe && y) {\n // TODO: draw only single rule regardless of multiple tiles.\n /* horizontal rule */\n if (circular) {\n // Actually, we are drawing arcs instead of lines, so lets remove stroke.\n g.lineStyle(\n strokeWidth,\n colorToHex(color),\n 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n const midR = trackOuterRadius - ((rowPosition + y) / trackHeight) * trackRingSize;\n const farR = midR + strokeWidth / 2.0;\n const nearR = midR - strokeWidth / 2.0;\n\n const sPos = cartesianToPolar(0, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(0, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(trackWidth, trackWidth, startAngle, endAngle);\n\n g.beginFill(colorToHex(color), actualOpacity);\n g.moveTo(sPos.x, sPos.y);\n g.arc(cx, cy, nearR, startRad, endRad, true);\n g.arc(cx, cy, farR, endRad, startRad, false);\n g.closePath();\n } else {\n if (dashed) {\n const [dashSize, gapSize] = dashed;\n let curPos = 0;\n\n do {\n g.moveTo(curPos, rowPosition + rowHeight - y);\n g.lineTo(curPos + dashSize, rowPosition + rowHeight - y);\n curPos += dashSize + gapSize;\n } while (curPos < trackWidth);\n } else {\n g.moveTo(0, rowPosition + rowHeight - y);\n g.lineTo(trackWidth, rowPosition + rowHeight - y);\n }\n }\n } else {\n if (circular) {\n // !!! Currently, we only support simple straight lines for circular layouts.\n if (strokeWidth === 0) {\n // Do not render invisible elements.\n return;\n }\n\n // Actually, we are drawing arcs instead of lines, so lets remove stroke.\n g.lineStyle(\n strokeWidth,\n colorToHex(color),\n 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n const midR = trackOuterRadius - ((rowPosition + rowHeight - y) / trackHeight) * trackRingSize;\n const farR = midR + strokeWidth / 2.0;\n const nearR = midR - strokeWidth / 2.0;\n\n const sPos = cartesianToPolar(x, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(x, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(xe, trackWidth, startAngle, endAngle);\n\n g.beginFill(colorToHex(color), actualOpacity);\n g.moveTo(sPos.x, sPos.y);\n g.arc(cx, cy, nearR, startRad, endRad, true);\n g.arc(cx, cy, farR, endRad, startRad, false);\n g.closePath();\n } else if (dashed) {\n const [dashSize, gapSize] = dashed;\n let curPos = x;\n\n do {\n g.moveTo(curPos, rowPosition + rowHeight - y);\n g.lineTo(curPos + dashSize, rowPosition + rowHeight - y);\n curPos += dashSize + gapSize;\n } while (curPos < xe);\n } else {\n /* regular horizontal lines */\n if (curved === undefined) {\n g.moveTo(x, rowPosition + rowHeight - y);\n g.lineTo(xe, rowPosition + rowHeight - y);\n } else if (curved === 'top') {\n // TODO: to default value\n const CURVE_HEIGHT = 2;\n ///\n\n const xm = x + (xe - x) / 2.0;\n\n g.moveTo(x, rowPosition + rowHeight - y + CURVE_HEIGHT / 2.0);\n g.lineTo(xm, rowPosition + rowHeight - y - CURVE_HEIGHT / 2.0);\n g.moveTo(xm, rowPosition + rowHeight - y - CURVE_HEIGHT / 2.0);\n g.lineTo(xe, rowPosition + rowHeight - y + CURVE_HEIGHT / 2.0);\n }\n }\n\n if (linePattern && curved === undefined && !circular) {\n const { type: pType, size: pSize } = linePattern;\n let curPos = Math.max(x, 0); // saftly start from visible position\n\n g.lineStyle(0);\n\n // TODO: to default value\n const PATTERN_GAP_SIZE = pSize * 2;\n ///\n\n let count = 0;\n while (curPos < Math.min(xe, trackWidth) && count < 100) {\n const x0 = curPos;\n const x1 = curPos + pSize;\n const ym = rowPosition + rowHeight - y;\n const y0 = ym - pSize / 2.0;\n const y1 = ym + pSize / 2.0;\n\n g.beginFill(colorToHex(color), actualOpacity);\n g.drawPolygon(\n pType === 'triangleLeft'\n ? [x1, y0, x0, ym, x1, y1, x1, y0]\n : [x0, y0, x1, ym, x0, y1, x0, y0]\n );\n g.endFill();\n curPos += pSize + PATTERN_GAP_SIZE;\n\n count++;\n\n // saftly end before the visible position\n }\n }\n }\n });\n });\n}\n","import type * as PIXI from 'pixi.js';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport { IsChannelDeep, getValueUsingChannel, Is2DTrack } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar, positionToRadian } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\nimport { Bezier } from 'bezier-js';\n\nexport function drawWithinLink(g: PIXI.Graphics, trackInfo: any, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n if (!spec.width || !spec.height) {\n console.warn('Size of a track is not properly determined, so visual mark cannot be rendered');\n return;\n }\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300;\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const tcx = trackWidth / 2.0;\n const tcy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories: string[] = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n /* defaults */\n const MIN_HEIGHT = spec.style?.linkMinHeight ?? 0.5;\n const NUM_STEPS = spec.experimental?.performanceMode ? 10 : 50; // https://github.com/gosling-lang/gosling.js/issues/634\n const showVerticalLines = spec.style?.withinLinkVerticalLines ?? false;\n\n // TODO: Can row be actually used for circular layouts?\n /* render */\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(\n d =>\n !getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory\n ).forEach(d => {\n let x = model.encodedPIXIProperty('x', d);\n let xe = model.encodedPIXIProperty('xe', d);\n let x1 = model.encodedPIXIProperty('x1', d);\n let x1e = model.encodedPIXIProperty('x1e', d);\n const y = model.encodedPIXIProperty('y', d);\n const ye = model.encodedPIXIProperty('ye', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const color = model.encodedPIXIProperty('color', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n // sort properly\n if (typeof xe !== 'undefined') {\n [x, xe] = [x, xe].sort((a, b) => a - b);\n }\n if (typeof x1 !== 'undefined' && typeof x1e !== 'undefined') {\n [x1, x1e] = [x1, x1e].sort((a, b) => a - b);\n }\n\n // Is this band or line?\n const isRibbon =\n typeof xe !== 'undefined' &&\n typeof x1 !== 'undefined' &&\n typeof x1e !== 'undefined' &&\n // This means the strokeWidth of a band is too small, so we just need to draw a line instead\n Math.abs(x - xe) > 0.1 &&\n Math.abs(x1 - x1e) > 0.1;\n\n // TODO: This correction can be moved to the compile process\n if (!isRibbon && xe === undefined && !Is2DTrack(spec)) {\n // We need to use a valid value to draw lines, so lets find alternative one.\n if (x1 === undefined && x1e === undefined) {\n // We do not have a valid ones.\n return;\n }\n xe = x1 !== undefined ? x1 : x1e;\n }\n\n if (!isRibbon && Math.abs(x - xe) <= 0.1 && Math.abs(x1 - x1e) <= 0.1) {\n // Put the larger value on `xe` so that it can be used in line connection\n x = (x + xe) / 2.0;\n xe = (x1 + x1e) / 2.0;\n }\n\n // stroke\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n opacity, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n const flipY = (IsChannelDeep(spec.y) && spec.y.flip) || spec.flipY;\n const baseY = spec.baselineY ?? rowPosition + (flipY ? 0 : rowHeight);\n\n let pathForMouseEvent: number[] = [];\n\n if (isRibbon) {\n g.beginFill(color === 'none' ? colorToHex('white') : colorToHex(color), color === 'none' ? 0 : opacity);\n\n let [_x1, _x2, _x3, _x4] = [x, xe, x1, x1e];\n\n // Sort values to safely draw bands\n [_x1, _x2, _x3, _x4] = [_x1, _x2, _x3, _x4].sort((a, b) => a - b);\n\n if (_x1 > trackWidth || _x4 < 0 || Math.abs(_x4 - _x1) < 0.5) {\n // Do not draw very small visual marks\n return;\n }\n\n if (circular) {\n if (_x1 < 0 || _x4 > trackWidth) {\n // Do not show bands that are partly outside of the current domain\n return;\n }\n\n // https://pixijs.download/dev/docs/PIXI.Graphics.html#bezierCurveTo\n const r = trackOuterRadius - (rowPosition / trackHeight) * trackRingSize;\n const posX = cartesianToPolar(_x1, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posXE = cartesianToPolar(_x2, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posX1 = cartesianToPolar(_x3, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posX1E = cartesianToPolar(_x4, trackWidth, r, tcx, tcy, startAngle, endAngle);\n\n g.moveTo(posX.x, posX.y);\n\n // outer curve\n g.bezierCurveTo(tcx, tcy, tcx, tcy, posX1E.x, posX1E.y);\n\n g.arc(\n tcx,\n tcy,\n trackOuterRadius,\n positionToRadian(posX1E.x, posX1E.y, tcx, tcy),\n positionToRadian(posX1.x, posX1.y, tcx, tcy),\n false\n );\n\n // inner curve\n g.bezierCurveTo(tcx, tcy, tcx, tcy, posXE.x, posXE.y);\n\n g.arc(\n tcx,\n tcy,\n trackOuterRadius,\n positionToRadian(posXE.x, posXE.y, tcx, tcy),\n positionToRadian(posX.x, posX.y, tcx, tcy),\n false\n );\n pathForMouseEvent = Array.from(g.currentPath.points);\n g.endFill();\n } else {\n // Linear mark\n\n g.moveTo(_x1, baseY);\n\n if (!spec.style?.linkStyle || spec.style?.linkStyle === 'circular') {\n g.arc(\n (_x1 + _x4) / 2.0, // cx\n baseY, // cy\n (_x4 - _x1) / 2.0, // radius\n -Math.PI, // start angle\n Math.PI, // end angle\n false\n );\n g.arc((_x2 + _x3) / 2.0, baseY, (_x3 - _x2) / 2.0, Math.PI, -Math.PI, true);\n pathForMouseEvent = Array.from(g.currentPath.points);\n g.closePath();\n } else {\n g.lineTo(_x3, rowPosition + rowHeight);\n g.bezierCurveTo(\n _x3 + (_x2 - _x3) / 3.0,\n // rowPosition + (x1 - x),\n rowPosition + rowHeight - (_x2 - _x3) / 2.0, //Math.min(rowHeight - (x1 - x), (xe - x1) / 2.0),\n _x3 + ((_x2 - _x3) / 3.0) * 2,\n // rowPosition + (x1 - x),\n rowPosition + rowHeight - (_x2 - _x3) / 2.0, //Math.min(rowHeight - (x1 - x), (xe - x1) / 2.0),\n _x2,\n rowPosition + rowHeight\n );\n g.lineTo(_x4, rowPosition + rowHeight);\n g.bezierCurveTo(\n _x1 + ((_x4 - _x1) / 3.0) * 2,\n // rowPosition,\n rowPosition + rowHeight - (_x4 - _x1) / 2.0, //Math.min(rowHeight, (x1e - x) / 2.0),\n _x1 + (_x4 - _x1) / 3.0,\n // rowPosition,\n rowPosition + rowHeight - (_x4 - _x1) / 2.0, //Math.min(rowHeight, (x1e - x) / 2.0),\n _x1,\n rowPosition + rowHeight\n );\n pathForMouseEvent = Array.from(g.currentPath.points);\n g.endFill();\n }\n }\n /* Mouse Events */\n model.getMouseEventModel().addPolygonBasedEvent(d, pathForMouseEvent);\n } else {\n /**\n * Line connection and not ribbon style\n */\n\n const midX = (x + xe) / 2.0;\n\n // Must not fill color for `line`, just use `stroke`\n g.beginFill(colorToHex('white'), 0);\n\n if (circular) {\n if (x < 0 || xe > trackWidth) {\n // Do not show bands that are partly outside of the current domain\n return;\n }\n\n const IS_ELLIPTICAL_READY = false;\n if (IS_ELLIPTICAL_READY && spec.style?.linkStyle === 'elliptical') {\n // !! Not ready to use\n const morePoints: { x: number; y: number }[] = [];\n\n for (let step = 0; step <= NUM_STEPS; step++) {\n const theta = (Math.PI * step) / NUM_STEPS;\n const mx = ((xe - x) / 2.0) * Math.cos(theta) + (x + xe) / 2.0;\n const my =\n baseY -\n (((rowHeight - y) *\n Math.sin(theta) *\n Math.min(xe - x + trackWidth * 0.5, trackWidth * 1.5)) /\n trackWidth /\n 1.5) *\n (flipY ? -1 : 1);\n\n const r = trackOuterRadius - (my / trackHeight) * trackRingSize;\n const cmx = cartesianToPolar(mx, trackWidth, r, tcx, tcy, startAngle, endAngle);\n\n if (step % 20 === 0 || step === NUM_STEPS) {\n // we draw less points than the hidden points for mouse events\n if (step === 0) {\n g.moveTo(cmx.x, cmx.y);\n } else {\n g.lineTo(cmx.x, cmx.y);\n }\n }\n morePoints.push({ ...cmx });\n }\n\n pathForMouseEvent = morePoints.flatMap(d => [d.x, d.y]);\n } else if (spec.style?.linkStyle === 'straight') {\n const r = trackOuterRadius - (rowPosition / trackHeight) * trackRingSize;\n const posS = cartesianToPolar(x, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posE = cartesianToPolar(xe, trackWidth, r, tcx, tcy, startAngle, endAngle);\n\n const x1 = posS.x;\n const y1 = posS.y;\n const x4 = posE.x;\n const y4 = posE.y;\n\n g.moveTo(x1, y1);\n g.lineTo(x4, y4);\n\n /* click event data */\n const length = 100;\n const eventPoints = Array.from({ length }, (d, i) => {\n return {\n x: ((x4 - x1) / (length - 1)) * i + x1,\n y: ((y4 - y1) / (length - 1)) * i + y1\n };\n });\n\n pathForMouseEvent = eventPoints.flatMap(d => [d.x, d.y]);\n } else {\n const r = trackOuterRadius - (rowPosition / trackHeight) * trackRingSize;\n const posS = cartesianToPolar(x, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posE = cartesianToPolar(xe, trackWidth, r, tcx, tcy, startAngle, endAngle);\n\n const x1 = posS.x;\n const y1 = posS.y;\n const x2 = posS.x;\n const y2 = posS.y;\n const x3 = trackWidth / 2.0;\n const y3 = trackHeight / 2.0;\n const x4 = posE.x;\n const y4 = posE.y;\n\n g.moveTo(x1, y1);\n\n const bezier = new Bezier(x1, y1, x2, y2, x3, y3, x4, y4);\n const points = bezier.getLUT(14);\n points.forEach(d => g.lineTo(d.x, d.y));\n\n /* click event data */\n const morePoints = bezier.getLUT(1000);\n pathForMouseEvent = morePoints.flatMap(d => [d.x, d.y]);\n }\n } else {\n // linear line connection\n\n if (spec.style?.linkStyle === 'elliptical') {\n if (!(0 <= x && x <= trackWidth) && !(0 <= xe && xe <= trackWidth)) {\n // not within this window\n return;\n }\n\n const points: { x: number; y: number }[] = [];\n\n // https://github.com/gosling-lang/gosling.js/issues/634\n const isYSpecified = IsChannelDeep(spec.y);\n // Iterate from right to left side\n for (let step = 0; step <= NUM_STEPS; step++) {\n const theta = Math.PI * (step / NUM_STEPS);\n const mx = ((xe - x) / 2.0) * Math.cos(theta) + (x + xe) / 2.0;\n let my =\n baseY -\n y *\n Math.sin(theta) *\n (isYSpecified\n ? 1\n : Math.min(xe - x + trackWidth * MIN_HEIGHT, trackWidth) / trackWidth) *\n (flipY ? -1 : 1);\n\n if (typeof y !== 'undefined' && typeof ye !== 'undefined') {\n // If both defined, we draw link between `y` and `ye`\n const linkHeight = Math.abs(ye - y);\n const flipShape = ye > y;\n my = y - linkHeight * Math.sin(theta) * (flipShape ? -1 : 1);\n }\n\n if (step === 0) {\n if (showVerticalLines) {\n const _y = flipY ? baseY - trackHeight : baseY;\n g.moveTo(mx, _y);\n points.push({ x: mx, y: _y });\n\n g.lineTo(mx, my);\n } else {\n g.moveTo(mx, my);\n }\n } else {\n g.lineTo(mx, my);\n }\n points.push({ x: mx, y: my });\n\n if (step === NUM_STEPS && showVerticalLines) {\n const _y = flipY ? baseY - trackHeight : baseY;\n g.lineTo(mx, _y);\n points.push({ x: mx, y: _y });\n }\n }\n\n pathForMouseEvent = points.flatMap(d => [d.x, d.y]);\n } else {\n if (xe < 0 || x > trackWidth) {\n // Q: Do we really need this?\n return;\n }\n g.arc(midX, baseY, (xe - x) / 2.0, -Math.PI, Math.PI);\n pathForMouseEvent = Array.from(g.currentPath.points);\n g.closePath();\n }\n }\n\n /* Mouse Events */\n model.getMouseEventModel().addLineBasedEvent(d, pathForMouseEvent);\n }\n });\n });\n}\n","/**\n * Repeat elements in the array until its size becomes to `targetLength`.\n */\nexport function arrayRepeat<T>(base: T[], targetLength: number): T[] {\n if (base.length === targetLength) return base;\n else if (base.length > targetLength) return base.slice(0, targetLength);\n else {\n const repeated = Array.from(base);\n do {\n repeated.push(...Array.from(base));\n } while (repeated.length < targetLength);\n return repeated.slice(0, targetLength);\n }\n}\n\n/**\n * Insert item to an array and return it.\n * @param array Array to be updated.\n * @param index Index of array to insert new item.\n * @param item Item to be inserted.\n * @returns Updated array.\n */\nexport function insertItemToArray<T>(array: T[], index: number, item: T): T[] {\n return [...array.slice(0, index), item, ...array.slice(index)];\n}\n\n/**\n * Insert item to an array and return it.\n * @param array Array to be updated.\n * @param index Index of array to change item.\n * @param item Item to be inserted.\n * @returns Updated array.\n */\nexport function modifyItemInArray<T>(array: T[], index: number, item: T): T[] {\n return [...array.slice(0, index), item, ...array.slice(index + 1)];\n}\n\n/**\n * Remove item from an array stored in a certain index.\n * @param array Array to be updated.\n * @param index Index of an item to be removed.\n * @returns Updated array.\n */\nexport function removeItemFromArray<T>(array: T[], index: number): T[] {\n return [...array.slice(0, index), ...array.slice(index + 1)];\n}\n\n/**\n * Convert 1D array into 2D array where each pair of elements are grouped.\n * @param array Array to be used.\n * @returns Updated array.\n */\nexport function flatArrayToPairArray<T>(array: T[]): [T, T][] {\n const output: [T, T][] = [];\n for (let i = 0; i < array.length; i += 2) {\n output.push([array[i], array[i + 1]]);\n }\n return output;\n}\n\n/**\n * Check if all elements in an array satisfy a type guard.\n * @param array Array to check\n * @param is Type guard to check each element\n */\nexport function isEvery<T, Arr extends any[]>(array: any[], is: (x: Arr[number]) => x is T): array is T[] {\n return array.every(is);\n}\n\n/** Check if all elements in an array are numbers. */\nexport function isNumberArray(array: any[]): array is number[] {\n return isEvery(array, (x): x is number => typeof x === 'number');\n}\n\n/** Check if all elements in an array are strings. */\nexport function isStringArray(array: any[]): array is string[] {\n return isEvery(array, (x): x is string => typeof x === 'string');\n}\n","import type { ScaleLinear } from 'd3-scale';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport { isNumberArray, isStringArray } from '../utils/array';\nimport type { CompleteThemeDeep } from '../utils/theme';\n\nexport function drawGrid(trackInfo: any, tm: GoslingTrackModel, theme: Required<CompleteThemeDeep>) {\n drawYGridQuantitative(trackInfo, tm, theme);\n drawRowGrid(trackInfo, tm, theme);\n}\n\nexport function drawRowGrid(trackInfo: any, tm: GoslingTrackModel, theme: Required<CompleteThemeDeep>) {\n const spec = tm.spec();\n\n if (!IsChannelDeep(spec.row) || spec.row.grid !== true) {\n // we do not need to draw grid\n return;\n }\n\n /* track size */\n const [trackX, trackY] = trackInfo.position;\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* circular parameters */\n const circular = tm.spec().layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const cx = trackWidth / 2.0;\n const cy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories = tm.getChannelDomainArray('row') as string[] | undefined;\n\n if (!rowCategories) {\n // We do not have categories mapped to row to draw grid with\n return;\n }\n\n const rowHeight = trackHeight / rowCategories.length;\n\n if ((circular && trackRingSize <= 20) || (!circular && rowHeight <= 20)) {\n // Height is too narrow to draw axis\n return;\n }\n\n /* render */\n const graphics = trackInfo.pBackground;\n\n const strokeWidth = theme.axis.gridStrokeWidth;\n rowCategories.forEach(rowCategory => {\n const rowPosition = tm.encodedValue('row', rowCategory);\n\n if (!circular) {\n graphics.lineStyle(\n strokeWidth,\n colorToHex(theme.axis.gridColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n const y = trackY + rowPosition + rowHeight / 2.0;\n graphics.moveTo(trackX, y);\n graphics.lineTo(trackX + trackWidth, y);\n } else {\n const y = rowPosition + rowHeight / 2.0;\n const midR = trackOuterRadius - (y / trackHeight) * trackRingSize;\n const farR = midR + strokeWidth / 2.0;\n const nearR = midR - strokeWidth / 2.0;\n\n const sPos = cartesianToPolar(0, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(0, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(trackWidth, trackWidth, startAngle, endAngle);\n\n // For circular grid, we draw 'filled' arc w/ zero strokeWidth\n graphics.lineStyle(\n strokeWidth,\n colorToHex('black'),\n 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n graphics.beginFill(colorToHex(theme.axis.gridColor), 1);\n graphics.moveTo(trackX + sPos.x, trackY + sPos.y);\n graphics.arc(trackX + cx, trackY + cy, nearR, startRad, endRad, true);\n graphics.arc(trackX + cx, trackY + cy, farR, endRad, startRad, false);\n graphics.closePath();\n }\n });\n}\n\nexport function drawYGridQuantitative(trackInfo: any, tm: GoslingTrackModel, theme: Required<CompleteThemeDeep>) {\n const spec = tm.spec();\n\n if (!IsChannelDeep(spec.y) || spec.y.grid !== true) {\n // we do not need to draw grid\n return;\n }\n\n /* track size */\n const [trackX, trackY] = trackInfo.position;\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n const startX = trackX;\n const endX = trackX + trackWidth;\n\n /* circular parameters */\n const circular = tm.spec().layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const cx = trackWidth / 2.0;\n const cy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories = tm.getChannelDomainArray('row') ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n if (!isStringArray(rowCategories)) {\n // We do not have categories mapped to row to draw grid with\n return;\n }\n\n /* Grid Components */\n const scale = tm.getChannelScale('y');\n const domain = tm.getChannelDomainArray('y');\n\n if (!scale || !domain || !isNumberArray(domain)) {\n // We do not have sufficient information to draw a grid\n return;\n }\n\n if ((circular && (rowHeight / trackHeight) * trackRingSize <= 20) || (!circular && rowHeight <= 20)) {\n // Height is too narrow to draw axis\n return;\n }\n\n /* render */\n const graphics = trackInfo.pBackground;\n const strokeWidth = theme.axis.gridStrokeWidth;\n\n rowCategories.forEach(rowCategory => {\n const rowPosition = tm.encodedValue('row', rowCategory);\n\n const assignedHeight = circular ? (rowHeight / trackHeight) * trackRingSize : rowHeight;\n const tickCount = Math.max(Math.ceil(assignedHeight / 40), 1);\n\n let ticks = (scale as ScaleLinear<any, any>).ticks(tickCount).filter(v => domain[0] <= v && v <= domain[1]);\n\n if (ticks.length === 1) {\n // Sometimes, ticks() gives a single value, so use a larger tickCount.\n ticks = (scale as ScaleLinear<any, any>).ticks(tickCount + 1).filter(v => domain[0] <= v && v <= domain[1]);\n }\n\n if (!circular) {\n graphics.lineStyle(\n strokeWidth,\n colorToHex(theme.axis.gridColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n ticks.forEach(value => {\n const y = trackY + rowPosition + rowHeight - scale(value);\n if (theme.axis.gridStrokeType === 'solid') {\n graphics.moveTo(startX, y);\n graphics.lineTo(endX, y);\n } else if (theme.axis.gridStrokeType === 'dashed') {\n const [line, gap] = theme.axis.gridStrokeDash ?? [1, 1];\n // eslint-disable-next-line\n for (let i = startX; i < endX; i += line + gap) {\n graphics.moveTo(i, y);\n graphics.lineTo(i + line, y);\n }\n }\n });\n } else {\n ticks.forEach(value => {\n const y = scale(value);\n const midR = trackOuterRadius - ((rowPosition + rowHeight - y) / trackHeight) * trackRingSize;\n const farR = midR + strokeWidth / 2.0;\n const nearR = midR - strokeWidth / 2.0;\n\n const sPos = cartesianToPolar(0, trackWidth, nearR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(0, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(trackWidth, trackWidth, startAngle, endAngle);\n\n // For circular grid, we draw 'filled' arc w/ zero strokeWidth\n graphics.lineStyle(\n strokeWidth,\n colorToHex('black'),\n 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n graphics.beginFill(colorToHex(theme.axis.gridColor), 1);\n graphics.moveTo(trackX + sPos.x, trackY + sPos.y);\n graphics.arc(trackX + cx, trackY + cy, nearR, startRad, endRad, true);\n graphics.arc(trackX + cx, trackY + cy, farR, endRad, startRad, false);\n graphics.closePath();\n });\n }\n });\n}\n","export type TextStyle = {\n color?: string;\n size?: number;\n fontFamily?: string;\n fontWeight?: 'bold' | 'normal' | 'light';\n stroke?: string;\n strokeThickness?: number;\n};\n\nexport const DEFAULT_TEXT_STYLE: Required<TextStyle> = {\n color: 'black',\n size: 10,\n fontFamily: 'Arial',\n fontWeight: 'normal',\n stroke: '#ffffff',\n strokeThickness: 0\n};\n\nexport function getTextStyle(style: TextStyle = {}) {\n const merged: Required<TextStyle> = { ...DEFAULT_TEXT_STYLE, ...style };\n // Use `const` to get object literal which is compatible with `Partial<PIXI.ITextStyle>`\n const pixiTextStyle = {\n fontSize: `${merged.size}px`,\n fontFamily: merged.fontFamily,\n fontWeight: merged.fontWeight === 'light' ? 'lighter' : merged.fontWeight,\n fill: merged.color,\n lineJoin: 'round',\n stroke: merged.stroke,\n strokeThickness: merged.strokeThickness\n } as const;\n // Allow returned object to be mutable (strip `readonly` modifier from `const`)\n return pixiTextStyle as {\n -readonly [K in keyof typeof pixiTextStyle]: (typeof pixiTextStyle)[K];\n };\n}\n","import type * as PIXI from 'pixi.js';\nimport type { Tile } from '@gosling-lang/gosling-track';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\nimport type { CompleteThemeDeep } from '../utils/theme';\nimport { getTextStyle } from '../utils/text-style';\n\nexport function drawCircularTitle(\n HGC: import('@higlass/types').HGC,\n trackInfo: any,\n tile: Tile,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n const spec = model.spec();\n const { title } = spec;\n\n if (spec.layout !== 'circular') {\n // Wrong function call, this is for circular tracks.\n return;\n }\n\n if (!title) {\n // No point to render a title.\n return;\n }\n\n /* track size */\n const [tw, th] = trackInfo.dimensions;\n\n /* circular parameters */\n const trackOuterRadius = spec.outerRadius ?? 300;\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const cx = tw / 2.0;\n const cy = th / 2.0;\n\n /* render */\n const g = tile.graphics; // We do not use `pBorder` as in linear layouts.\n\n // The current position, i.e., radius, of this label\n const titleR = trackOuterRadius - 1;\n\n // The position of a tick in the polar system\n const padding = 1;\n const pos = cartesianToPolar(padding, tw, titleR, cx, cy, startAngle, endAngle);\n\n /* Title label */\n const styleConfig = getTextStyle({\n color: theme.track.titleColor,\n size: 12, // `theme.track.titleFontSize` seems to use much larger fonts\n fontFamily: theme.axis.labelFontFamily, // TODO: support\n fontWeight: theme.axis.labelFontWeight // TODO: support\n });\n const textGraphic = new HGC.libraries.PIXI.Text(title, styleConfig);\n textGraphic.anchor.x = 1;\n textGraphic.anchor.y = 0.5;\n textGraphic.position.x = pos.x;\n textGraphic.position.y = pos.y;\n\n textGraphic.resolution = 4;\n const txtStyle = new HGC.libraries.PIXI.TextStyle(styleConfig);\n const metric = HGC.libraries.PIXI.TextMetrics.measureText(textGraphic.text, txtStyle);\n\n // Scale the width of text label so that its width is the same when converted into circular form\n const txtWidth = ((metric.width / (2 * titleR * Math.PI)) * tw * 360) / (endAngle - startAngle);\n const scaledStartX = padding;\n const scaledEndX = padding + txtWidth;\n\n // Determine the points of a rope element for a lebel\n const ropePoints: PIXI.Point[] = [];\n for (let i = scaledEndX; i >= scaledStartX; i -= txtWidth / 10.0) {\n const p = cartesianToPolar(i, tw, titleR - metric.height / 2.0, cx, cy, startAngle, endAngle);\n ropePoints.push(new HGC.libraries.PIXI.Point(p.x, p.y));\n }\n\n /* Background */\n const startRad = valueToRadian(scaledStartX, tw, startAngle, endAngle);\n const endRad = valueToRadian(scaledEndX + padding, tw, startAngle, endAngle);\n\n g.lineStyle(1, colorToHex('red'), 0, 0.5);\n g.beginFill(colorToHex(theme.track.titleBackground), 0.5); // TODO: support `theme.track.titleBackgroundOpacity`\n g.moveTo(pos.x, pos.y);\n g.arc(cx, cy, titleR - metric.height, startRad, endRad, true);\n g.arc(cx, cy, titleR, endRad, startRad, false);\n g.closePath();\n\n // Render a label\n // @ts-expect-error, missing argument to updateText\n textGraphic.updateText();\n const rope = new HGC.libraries.PIXI.SimpleRope(textGraphic.texture, ropePoints);\n g.addChild(rope);\n}\n","import type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport type { CompleteThemeDeep } from '../utils/theme';\n\nexport const TITLE_STYLE = {\n fontSize: '12px',\n fontFamily: 'sans-serif', // 'Arial',\n fontWeight: 'normal',\n fill: 'black',\n background: 'white',\n lineJoin: 'round'\n};\n\nexport function drawChartOutlines(trackInfo: any, tm: GoslingTrackModel, theme: Required<CompleteThemeDeep>) {\n const g = trackInfo.pBorder; // use pBorder not to affected by zoomming\n\n // size and position\n const [l, t] = trackInfo.position;\n const [w, h] = trackInfo.dimensions;\n\n // Let's try using the native title (`name` in viewConfig options)\n // if (tm.spec().title) {\n // const paddingX = 3;\n // const paddingY = 3;\n\n // const text = tm.spec().title;\n // const textGraphic = new HGC.libraries.PIXI.Text(text, { ...TITLE_STYLE });\n // textGraphic.anchor.x = 0;\n // textGraphic.anchor.y = 0;\n // textGraphic.position.x = l + paddingX;\n // textGraphic.position.y = t + paddingY;\n // g.addChild(textGraphic);\n\n // const textStyleObj = new HGC.libraries.PIXI.TextStyle(TITLE_STYLE);\n // const textMetrics = HGC.libraries.PIXI.TextMetrics.measureText(text, textStyleObj);\n // const textWidth = textMetrics.width;\n // const textHeight = textMetrics.height;\n // g.beginFill(colorToHex('white'), 0.7);\n // g.lineStyle(\n // 0,\n // colorToHex('#DBDBDB'),\n // 0.7, // alpha\n // 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n // );\n // g.drawRect(l, t, textWidth + paddingX * 2, textHeight + paddingY * 2);\n // }\n\n // Rectangular outline\n g.lineStyle(\n tm.spec().style?.outlineWidth ?? 1,\n // TODO: outline not working\n colorToHex(tm.spec().style?.outline ?? theme.track.outline),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(colorToHex('white'), 0);\n g.drawRect(l, t, w, h);\n\n // Borders\n const x = tm.spec().x;\n\n g.lineStyle(\n 1,\n colorToHex(theme.axis.baselineColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n if (IsChannelDeep(x) && x.axis === 'top') {\n // top\n g.moveTo(l, t);\n g.lineTo(l + w, t);\n\n // left\n // g.moveTo(l, t);\n // g.lineTo(l, t + h);\n } else if (IsChannelDeep(x) && x.axis === 'bottom') {\n // bottom\n g.moveTo(l, t + h);\n g.lineTo(l + w, t + h);\n\n // left\n // g.moveTo(l, t);\n // g.lineTo(l, t + h);\n }\n}\n","import type { DisplayedLegend } from '@gosling-lang/gosling-track';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport type { CompleteThemeDeep } from '../utils/theme';\nimport type { Dimension } from '../utils/position';\nimport { scaleLinear, type ScaleLinear } from 'd3-scale';\nimport { getTextStyle } from '../utils/text-style';\nimport type { SubjectPosition, D3DragEvent } from 'd3-drag';\n\n// Just the libraries necesssary fro this module\ntype Libraries = Pick<typeof import('@higlass/libraries'), 'PIXI' | 'd3Selection' | 'd3Drag'>;\n\ntype LegendOffset = { offsetRight: number };\n\nexport function drawColorLegend(\n HGC: { libraries: Libraries },\n trackInfo: any,\n _tile: unknown,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n if (!trackInfo.gLegend) {\n // We do not have enough components to draw legends\n return;\n }\n\n trackInfo.gLegend.selectAll('.brush').remove();\n\n const spec = model.spec();\n const offset: LegendOffset = { offsetRight: 0 };\n\n if (IsChannelDeep(spec.color) && spec.color.legend) {\n switch (spec.color.type) {\n case 'nominal':\n drawColorLegendCategories(HGC, trackInfo, _tile, model, theme);\n break;\n case 'quantitative':\n drawColorLegendQuantitative(HGC, trackInfo, _tile, model, theme, 'color', offset);\n break;\n }\n }\n\n if (IsChannelDeep(spec.stroke) && spec.stroke.legend) {\n switch (spec.stroke.type) {\n case 'quantitative':\n drawColorLegendQuantitative(HGC, trackInfo, _tile, model, theme, 'stroke', offset);\n break;\n }\n }\n}\n\nexport function drawColorLegendQuantitative(\n HGC: { libraries: Libraries },\n trackInfo: any,\n _tile: unknown,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>,\n channelKey: 'color' | 'stroke',\n offset: LegendOffset\n) {\n const spec = model.spec();\n\n const channel = spec[channelKey];\n if (!IsChannelDeep(channel) || channel.type !== 'quantitative' || !channel.legend) {\n // This means we do not need to draw legend\n return;\n }\n\n /* track size */\n const [trackX, trackY] = trackInfo.position;\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* Visual Parameters */\n const legendWidth = 80;\n const legendHeight = trackHeight - 2 > 110 ? 110 : Math.max(trackHeight - 2, 40 - 2);\n const colorBarDim: Dimension = {\n top: 10,\n left: 55,\n width: 20,\n height: legendHeight - 20\n };\n const legendX = trackX + trackWidth - legendWidth - 1 - offset.offsetRight;\n const legendY = trackY + 1;\n\n /* Legend Components */\n const colorScale = model.getChannelScale(channelKey);\n // TODO: Use overloads to remove type-casting (via `as`)\n const colorDomain = model.getChannelDomainArray(channelKey) as [number, number] | undefined;\n\n if (!colorScale || !colorDomain) {\n // We do not have enough information for creating a color legend\n return;\n }\n\n /* render */\n const graphics = trackInfo.pBorder; // use pBorder not to be affected by zoomming\n\n // Background\n graphics.beginFill(colorToHex(theme.legend.background), theme.legend.backgroundOpacity);\n graphics.lineStyle(\n 1,\n colorToHex(theme.legend.backgroundStroke),\n theme.legend.backgroundOpacity, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.drawRect(legendX, legendY, legendWidth, legendHeight);\n\n /* Lgend title */\n if (channel.title) {\n const titleStr = channel.title;\n\n // label text style\n const labelTextStyle = getTextStyle({\n color: theme.legend.labelColor,\n size: theme.legend.labelFontSize,\n fontWeight: theme.legend.labelFontWeight,\n fontFamily: theme.legend.labelFontFamily\n });\n\n const textGraphic = new HGC.libraries.PIXI.Text(titleStr, {\n ...labelTextStyle,\n fontWeight: 'bold'\n });\n textGraphic.anchor.x = 0;\n textGraphic.anchor.y = 0;\n textGraphic.position.x = legendX + 10;\n textGraphic.position.y = legendY + 10;\n\n const textStyleObj = new HGC.libraries.PIXI.TextStyle({ ...labelTextStyle, fontWeight: 'bold' });\n const textMetrics = HGC.libraries.PIXI.TextMetrics.measureText(titleStr, textStyleObj);\n\n graphics.addChild(textGraphic);\n\n // Adjust the color bar\n colorBarDim.top += textMetrics.height + 4;\n colorBarDim.height -= textMetrics.height + 4;\n }\n\n // Color bar\n const [startValue, endValue] = colorDomain as [number, number];\n const extent = endValue - startValue;\n const scaleOffset = IsChannelDeep(channel) && channel.scaleOffset ? channel.scaleOffset : [0, 1];\n\n [...Array(colorBarDim.height).keys()].forEach(y => {\n // For each pixel, draw a small rectangle with different color\n let value;\n const scaleOffsetSorted = Array.from(scaleOffset).sort();\n if (y / colorBarDim.height >= scaleOffsetSorted[1]) {\n value = endValue;\n } else if (y / colorBarDim.height <= scaleOffsetSorted[0]) {\n value = startValue;\n } else {\n const s1 = scaleLinear()\n .domain([colorBarDim.height * scaleOffsetSorted[0], colorBarDim.height * scaleOffsetSorted[1]])\n .range([0, colorBarDim.height]);\n const s2 = scaleLinear().domain([0, colorBarDim.height]).range([startValue, endValue]);\n value = s2(s1(y));\n }\n\n graphics.beginFill(\n colorToHex(colorScale(value)),\n 1 // alpha\n );\n graphics.lineStyle(\n 1,\n colorToHex(theme.legend.backgroundStroke),\n 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.drawRect(\n legendX + colorBarDim.left,\n legendY + colorBarDim.top + colorBarDim.height - y,\n colorBarDim.width,\n 1\n );\n });\n\n // Brush\n // Refer to https://github.com/higlass/higlass/blob/0b2cac5a770db6d55370a61d5dbbe09c4f577c68/app/scripts/HeatmapTiledPixiTrack.js#L580\n const BRUSH_HEIGHT = 4;\n type Datum = { y: number; id: number };\n trackInfo.colorBrushes = trackInfo.gLegend\n .append('g')\n .attr('class', channelKey)\n .selectAll(`.brush`)\n // We could consider using `_renderingId` to support multiple color legends in overlaid tracks.\n .data(\n scaleOffset.map((d, i) => {\n return { y: d, id: i };\n })\n )\n .enter()\n .append('rect')\n .attr('class', `brush`)\n .attr('pointer-events', 'all')\n .attr('cursor', 'ns-resize')\n .attr(\n 'transform',\n (d: Datum) =>\n `translate(${legendX + colorBarDim.left}, ${\n legendY + colorBarDim.top - BRUSH_HEIGHT / 2.0 + colorBarDim.height - colorBarDim.height * d.y\n })`\n )\n .attr('width', `${colorBarDim.width}px`)\n .attr('height', `${BRUSH_HEIGHT}px`)\n .attr('fill', 'lightgrey')\n .attr('stroke', 'black')\n .attr('stroke-width', '0.5px')\n .call(\n HGC.libraries.d3Drag\n .drag<Element, Datum>()\n .on('start', (event: D3DragEvent<SVGElement, Datum, SubjectPosition>) => {\n trackInfo.startEvent = event.sourceEvent;\n })\n .on('drag', (event: D3DragEvent<SVGElement, Datum, SubjectPosition>, d: Datum) => {\n if (channel && channel.scaleOffset) {\n const endEvent = event.sourceEvent;\n const diffY = trackInfo.startEvent.clientY - endEvent.clientY;\n const newScaleOffset = [channel.scaleOffset[0], channel.scaleOffset[1]];\n if (d.id === 0) {\n newScaleOffset[0] += diffY / colorBarDim.height;\n } else {\n newScaleOffset[1] += diffY / colorBarDim.height;\n }\n newScaleOffset[0] = Math.min(1, Math.max(0, newScaleOffset[0]));\n newScaleOffset[1] = Math.min(1, Math.max(0, newScaleOffset[1]));\n trackInfo.updateScaleOffsetFromOriginalSpec(spec._renderingId, newScaleOffset, channelKey);\n trackInfo.shareScaleOffsetAcrossTracksAndTiles(newScaleOffset, channelKey);\n trackInfo.draw();\n trackInfo.startEvent = event.sourceEvent;\n }\n })\n );\n\n // Ticks & labels\n const tickCount = Math.max(Math.ceil(colorBarDim.height / 30), 2);\n let ticks = (colorScale as ScaleLinear<any, any>)\n .ticks(tickCount)\n .filter(v => colorDomain[0] <= v && v <= colorDomain[1]);\n\n if (ticks.length === 1) {\n // Sometimes, ticks() gives a single value, so use a larger tickCount.\n ticks = (colorScale as ScaleLinear<any, any>)\n .ticks(tickCount + 1)\n .filter(v => colorDomain[0] <= v && v <= colorDomain[1]);\n }\n const TICK_STROKE_SIZE = 1;\n graphics.lineStyle(\n TICK_STROKE_SIZE,\n colorToHex(theme.legend.tickColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n // label text style\n const labelTextStyle = getTextStyle({\n color: theme.legend.labelColor,\n size: theme.legend.labelFontSize,\n fontWeight: theme.legend.labelFontWeight,\n fontFamily: theme.legend.labelFontFamily\n });\n\n const tickEnd = legendX + colorBarDim.left;\n ticks.forEach(value => {\n let y = legendY + colorBarDim.top + colorBarDim.height - ((value - startValue) / extent) * colorBarDim.height;\n\n // Prevent ticks from exceeding outside of a color bar by the stroke size of ticks\n if (y === legendY + colorBarDim.top) {\n y += TICK_STROKE_SIZE / 2.0;\n } else if (y === legendY + colorBarDim.top + colorBarDim.height) {\n y -= TICK_STROKE_SIZE / 2.0;\n }\n\n // ticks\n graphics.moveTo(tickEnd - 3, y);\n graphics.lineTo(tickEnd, y);\n\n // labels\n const textGraphic = new HGC.libraries.PIXI.Text(value, labelTextStyle);\n textGraphic.anchor.x = 1;\n textGraphic.anchor.y = 0.5;\n textGraphic.position.x = tickEnd - 6;\n textGraphic.position.y = y;\n\n graphics.addChild(textGraphic);\n });\n\n // Record this info so that additional legends can be displayed on the side\n offset.offsetRight = trackWidth - legendX;\n}\n\nexport function drawColorLegendCategories(\n HGC: { libraries: Libraries },\n track: any,\n _tile: unknown,\n tm: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n /* track spec */\n const spec = tm.spec();\n if (!IsChannelDeep(spec.color) || spec.color.type !== 'nominal' || !spec.color.legend) {\n // This means we do not need to draw legend\n return;\n }\n\n /* color separation */\n const colorCategories: string[] = (tm.getChannelDomainArray('color') as string[]) ?? ['___SINGLE_COLOR___'];\n if (colorCategories.length === 0) {\n // We do not need to draw a legend for only one color\n return;\n }\n\n /* check redundancy */\n const domain = spec.color.domain!;\n const range = spec.color.range!;\n const existingLegends: DisplayedLegend[] = track.displayedLegends;\n const toStr = (_: any[] | string) => {\n return typeof _ === 'string' ? _ : _.join();\n };\n if (existingLegends.find(d => toStr(d.domain) === toStr(domain) && toStr(d.range) === toStr(range))) {\n // Identical color legend already added\n return;\n } else {\n existingLegends.push({ domain, range });\n }\n\n /* render */\n const graphics = track.pBorder; // use pBorder not to be affected by zoomming\n\n const paddingX = 10;\n const paddingY = 4;\n let cumY = paddingY;\n let maxWidth = 0;\n\n const recipe: { x: number; y: number; color: string }[] = [];\n\n // label text style\n const labelTextStyle = getTextStyle({\n color: theme.legend.labelColor,\n size: theme.legend.labelFontSize,\n fontWeight: theme.legend.labelFontWeight,\n fontFamily: theme.legend.labelFontFamily\n });\n\n if (spec.style?.inlineLegend) {\n // Show legend in a single horizontal line\n\n // !! reversed to add the last category first from the right side\n colorCategories\n .map(d => d)\n .reverse()\n .forEach(category => {\n if (maxWidth > track.dimensions[0]) {\n // We do not draw labels overflow\n return;\n }\n\n const color = tm.encodedValue('color', category);\n const textGraphic = new HGC.libraries.PIXI.Text(category, labelTextStyle);\n textGraphic.anchor.x = 1;\n textGraphic.anchor.y = 0;\n textGraphic.position.x = track.position[0] + track.dimensions[0] - maxWidth - paddingX;\n textGraphic.position.y = track.position[1] + paddingY;\n\n graphics.addChild(textGraphic);\n\n const textStyleObj = new HGC.libraries.PIXI.TextStyle(labelTextStyle);\n const textMetrics = HGC.libraries.PIXI.TextMetrics.measureText(category, textStyleObj);\n\n if (cumY < textMetrics.height + paddingY * 3) {\n cumY = textMetrics.height + paddingY * 3;\n }\n\n recipe.push({\n x: track.position[0] + track.dimensions[0] - textMetrics.width - maxWidth - paddingX * 2,\n y: track.position[1] + paddingY + textMetrics.height / 2.0,\n color\n });\n\n maxWidth += textMetrics.width + paddingX * 3;\n });\n } else {\n // Show legend vertically\n\n if (spec.style?.legendTitle) {\n const textGraphic = new HGC.libraries.PIXI.Text(spec.style?.legendTitle, {\n ...labelTextStyle,\n fontWeight: 'bold'\n });\n textGraphic.anchor.x = 1;\n textGraphic.anchor.y = 0;\n textGraphic.position.x = track.position[0] + track.dimensions[0] - paddingX;\n textGraphic.position.y = track.position[1] + cumY;\n\n const textStyleObj = new HGC.libraries.PIXI.TextStyle({ ...labelTextStyle, fontWeight: 'bold' });\n const textMetrics = HGC.libraries.PIXI.TextMetrics.measureText(spec.style?.legendTitle, textStyleObj);\n\n graphics.addChild(textGraphic);\n\n cumY += textMetrics.height + paddingY * 2;\n }\n\n colorCategories.forEach(category => {\n if (cumY > track.dimensions[1]) {\n // We do not draw labels overflow\n return;\n }\n\n const color = tm.encodedValue('color', category);\n\n const textGraphic = new HGC.libraries.PIXI.Text(category, labelTextStyle);\n textGraphic.anchor.x = 1;\n textGraphic.anchor.y = 0;\n textGraphic.position.x = track.position[0] + track.dimensions[0] - paddingX;\n textGraphic.position.y = track.position[1] + cumY;\n\n graphics.addChild(textGraphic);\n\n const textStyleObj = new HGC.libraries.PIXI.TextStyle(labelTextStyle);\n const textMetrics = HGC.libraries.PIXI.TextMetrics.measureText(category, textStyleObj);\n\n if (maxWidth < textMetrics.width + paddingX * 3) {\n maxWidth = textMetrics.width + paddingX * 3;\n }\n\n recipe.push({\n x: track.position[0] + track.dimensions[0] - textMetrics.width - paddingX * 2,\n y: track.position[1] + cumY + textMetrics.height / 2.0,\n color\n });\n\n cumY += textMetrics.height + paddingY * 2;\n });\n }\n\n graphics.beginFill(colorToHex(theme.legend.background), theme.legend.backgroundOpacity);\n graphics.lineStyle(\n 1,\n colorToHex(theme.legend.backgroundStroke),\n theme.legend.backgroundOpacity, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.drawRect(\n track.position[0] + track.dimensions[0] - maxWidth - 1,\n track.position[1] + 1,\n maxWidth,\n cumY - paddingY\n );\n\n recipe.forEach(r => {\n graphics.lineStyle(\n 1,\n colorToHex('black'),\n 0, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.beginFill(colorToHex(r.color), 1);\n graphics.drawCircle(r.x, r.y, 4);\n });\n}\n\nexport function drawRowLegend(\n HGC: { libraries: Libraries },\n trackInfo: any,\n _tile: unknown,\n tm: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n /* track spec */\n const spec = tm.spec();\n if (\n !IsChannelDeep(spec.row) ||\n spec.row.type !== 'nominal' ||\n !spec.row.legend\n // || (!IsChannelDeep(spec.y) || spec.y.type !== 'nominal' || !spec.y.legend)\n ) {\n // we do not need to draw a legend\n return;\n }\n\n /* track size */\n // const trackHeight = trackInfo.dimensions[1];\n\n /* row separation */\n const rowCategories: string[] = (tm.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n // const rowHeight = trackHeight / rowCategories.length;\n if (rowCategories.length === 0) {\n // We do not need to draw a legend for only one category\n return;\n }\n\n /* render */\n const graphics = trackInfo.pBorder; // use pBorder not to affected by zoomming\n\n const paddingX = 4;\n const paddingY = 2;\n\n // label text style\n const labelTextStyle = getTextStyle({\n color: theme.legend.labelColor,\n size: theme.legend.labelFontSize,\n fontWeight: theme.legend.labelFontWeight,\n fontFamily: theme.legend.labelFontFamily\n });\n\n rowCategories.forEach(category => {\n const rowPosition = tm.encodedValue('row', category);\n\n const textGraphic = new HGC.libraries.PIXI.Text(category, labelTextStyle);\n textGraphic.anchor.x = 0;\n textGraphic.anchor.y = 0;\n textGraphic.position.x = trackInfo.position[0] + paddingX;\n textGraphic.position.y = trackInfo.position[1] + rowPosition + paddingY;\n\n graphics.addChild(textGraphic);\n\n const textStyleObj = new HGC.libraries.PIXI.TextStyle(labelTextStyle);\n const textMetrics = HGC.libraries.PIXI.TextMetrics.measureText(category, textStyleObj);\n\n graphics.beginFill(colorToHex(theme.legend.background), theme.legend.backgroundOpacity);\n graphics.lineStyle(\n 1,\n colorToHex(theme.legend.backgroundStroke),\n 0, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.drawRect(\n trackInfo.position[0] + 1,\n trackInfo.position[1] + rowPosition + 1,\n textMetrics.width + paddingX * 2,\n textMetrics.height + paddingY * 2\n );\n });\n}\n","import { scaleLinear } from 'd3-scale';\nimport type { Tile } from '@gosling-lang/gosling-track';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport type { CompleteThemeDeep } from '../utils/theme';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport { isNumberArray, isStringArray } from '../utils/array';\nimport { getTextStyle } from '../utils/text-style';\n\nconst EXTENT_TICK_SIZE = 8;\nconst TICK_SIZE = 6;\n\n/**\n * Draw linear scale Y axis\n */\nexport function drawLinearYAxis(\n HGC: { libraries: { PIXI: typeof import('pixi.js') } },\n trackInfo: any,\n _tile: unknown,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n const spec = model.spec();\n const CIRCULAR = spec.layout === 'circular';\n const yDomain = model.getChannelDomainArray('y');\n const yRange = model.getChannelRangeArray('y');\n\n if (CIRCULAR) {\n // Wrong function call, this is for linear tracks!\n return;\n }\n\n if (!model.isShowYAxis() || !yDomain || !yRange) {\n // We do not need to draw a y-axis\n return;\n }\n\n if (!isNumberArray(yDomain)) {\n // We can only draw axis for number domains\n return;\n }\n\n /* track size */\n const [tw, th] = trackInfo.dimensions;\n const [tx, ty] = trackInfo.position;\n\n /* row separation */\n const rowCategories = model.getChannelDomainArray('row') ?? ['___SINGLE_ROW___'];\n if (!isStringArray(rowCategories)) {\n // We can only draw axis for string categories\n return;\n }\n const rowHeight = th / rowCategories.length;\n\n if (rowHeight <= 20) {\n // Height is too narrow to draw axis\n return;\n }\n\n /* Axis components */\n const yChannel = model.spec().y;\n const isLeft = IsChannelDeep(yChannel) && 'axis' in yChannel && yChannel.axis === 'right' ? false : true; // Right position only if explicitly specified\n const yScale = scaleLinear()\n .domain(yDomain as number[])\n .range(yRange as number[]);\n\n /* render */\n const graphics = trackInfo.pBorder;\n\n rowCategories.forEach(category => {\n // if (rowCategories.length > 1 ? i !== 1 : i !== 0) {\n // // Let's draw only one y-axis since the scale is shared anyway.\n // // Draw the second y-axis if exist, so that track title is not occluded by the y-axis.\n // return;\n // }\n\n const rowPosition = model.encodedValue('row', category);\n const dx = isLeft ? tx : tx + tw;\n const dy = ty + rowPosition;\n\n /* Axis Baseline */\n graphics.lineStyle(\n 1,\n colorToHex(theme.axis.baselineColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.moveTo(dx, dy);\n graphics.lineTo(dx, dy + rowHeight);\n\n /* Ticks */\n const tickCount = Math.max(Math.ceil(rowHeight / 40), 1);\n let ticks = yScale.ticks(tickCount).filter(v => yDomain[0] <= v && v <= yDomain[1]);\n\n if (ticks.length === 1) {\n // Sometimes, ticks() gives a single value, so use a larger tickCount.\n ticks = yScale.ticks(tickCount + 1).filter(v => yDomain[0] <= v && v <= yDomain[1]);\n }\n\n graphics.lineStyle(\n 1,\n colorToHex(theme.axis.tickColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n let tickEnd = isLeft ? dx + TICK_SIZE : dx - TICK_SIZE;\n ticks.forEach(t => {\n const y = yScale(t);\n graphics.moveTo(dx, dy + rowHeight - y);\n graphics.lineTo(tickEnd, dy + rowHeight - y);\n });\n\n // Two ticks on the bottom and top\n tickEnd = isLeft ? dx + EXTENT_TICK_SIZE : dx - EXTENT_TICK_SIZE;\n graphics.moveTo(dx, dy);\n graphics.lineTo(tickEnd, dy);\n graphics.moveTo(dx, dy + rowHeight);\n graphics.lineTo(tickEnd, dy + rowHeight);\n\n const styleConfig = getTextStyle({\n color: theme.axis.labelColor,\n size: theme.axis.labelFontSize,\n fontFamily: theme.axis.labelFontFamily,\n fontWeight: theme.axis.labelFontWeight\n });\n\n /* Labels */\n ticks.forEach(t => {\n const y = yScale(t);\n tickEnd = isLeft ? dx + TICK_SIZE * 2 : dx - TICK_SIZE * 2;\n\n const textGraphic = new HGC.libraries.PIXI.Text(t, styleConfig);\n textGraphic.anchor.x = isLeft ? 0 : 1;\n textGraphic.anchor.y = y === 0 ? 0.9 : 0.5;\n textGraphic.position.x = tickEnd;\n textGraphic.position.y = dy + rowHeight - y;\n\n // Flip labels when orientation is vertical\n if (spec.orientation === 'vertical') {\n textGraphic.anchor.x = isLeft ? 1 : 0;\n textGraphic.scale.x *= -1;\n }\n graphics.addChild(textGraphic);\n });\n });\n}\n\n/**\n * Draw linear scale Y axis\n */\nexport function drawCircularYAxis(\n HGC: import('@higlass/types').HGC,\n trackInfo: any,\n tile: Tile,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n const spec = model.spec();\n const CIRCULAR = spec.layout === 'circular';\n const yDomain = model.getChannelDomainArray('y');\n const yRange = model.getChannelRangeArray('y');\n\n if (!CIRCULAR) {\n // Wrong function call, this is for circular tracks.\n return;\n }\n\n if (!model.isShowYAxis() || !yDomain || !yRange) {\n // We do not need to draw a y-axis\n return;\n }\n\n if (!isNumberArray(yDomain)) {\n // We can only draw axis for number domains\n return;\n }\n\n /* track size */\n const [tw, th] = trackInfo.dimensions;\n\n /* circular parameters */\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const cx = tw / 2.0;\n const cy = th / 2.0;\n\n /* row separation */\n const rowCategories: string[] = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = th / rowCategories.length;\n\n if ((rowHeight / th) * trackRingSize <= 20) {\n // Height is too narrow to draw axis\n return;\n }\n\n /* Axis components */\n const yChannel = model.spec().y;\n const isLeft = IsChannelDeep(yChannel) && 'axis' in yChannel && yChannel.axis === 'right' ? false : true; // Right position only if explicitly specified\n const yScale = scaleLinear()\n .domain(yDomain as number[])\n .range(yRange as number[]);\n\n /* render */\n const graphics = tile.graphics; // We do not use `pBorder` as in linear layouts.\n\n rowCategories.forEach(category => {\n // if (rowCategories.length > 1 ? i !== 1 : i !== 0) {\n // // Let's draw only one y-axis since the scale is shared anyway.\n // // Draw the second y-axis if exist, so that track title is not occluded by the y-axis.\n // return;\n // }\n\n const rowPosition = model.encodedValue('row', category);\n\n /* Axis Baseline */\n const innerR = trackOuterRadius - ((rowPosition + rowHeight) / th) * trackRingSize;\n const outerR = trackOuterRadius - (rowPosition / th) * trackRingSize;\n const innerPos = cartesianToPolar(isLeft ? 0 : tw, tw, innerR, cx, cy, startAngle, endAngle);\n const outerPos = cartesianToPolar(isLeft ? 0 : tw, tw, outerR, cx, cy, startAngle, endAngle);\n\n graphics.lineStyle(\n 1,\n colorToHex(theme.axis.baselineColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n graphics.moveTo(innerPos.x, innerPos.y);\n graphics.lineTo(outerPos.x, outerPos.y);\n\n /* Ticks */\n // Since we use the polar system, we use numbers 'scaled' for the polar system.\n const SCALED_TICK_SIZE = (r: number) => (TICK_SIZE * tw) / 2 / Math.PI / r;\n const SCALED_EXTENT_TICK_SIZE = (r: number) => (EXTENT_TICK_SIZE * tw) / 2 / Math.PI / r;\n\n // Determine ticks to display\n const axisHeight = (rowHeight / th) * trackRingSize;\n const tickCount = Math.max(Math.ceil(axisHeight / 40), 1);\n let ticks = yScale.ticks(tickCount).filter(v => yDomain[0] <= v && v <= yDomain[1]);\n\n if (ticks.length === 1) {\n // Sometimes, ticks() gives a single tick (e.g., only baseline), so let's use a larger tickCount.\n ticks = yScale.ticks(tickCount + 1).filter(v => yDomain[0] <= v && v <= yDomain[1]);\n }\n\n // Render ticks\n graphics.lineStyle(\n 1,\n colorToHex(theme.axis.tickColor),\n 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n ticks.forEach(t => {\n const y = yScale(t);\n\n // The current position, i.e., radius, of this tick\n const currentR = trackOuterRadius - ((rowPosition + rowHeight - y) / th) * trackRingSize;\n\n // Ticks are drawn in anti-clockwise direction\n const scaledStartX = isLeft ? 0 : tw - SCALED_TICK_SIZE(currentR);\n const scaledEndX = isLeft ? SCALED_TICK_SIZE(currentR) : tw;\n\n // The position of a tick in the polar system\n const pos = cartesianToPolar(scaledStartX, tw, currentR, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(scaledStartX, tw, startAngle, endAngle);\n const endRad = valueToRadian(scaledEndX, tw, startAngle, endAngle);\n\n // Render a tick\n graphics.moveTo(pos.x, pos.y);\n graphics.arc(cx, cy, currentR, startRad, endRad, true);\n graphics.arc(cx, cy, currentR, endRad, startRad, false);\n graphics.closePath();\n });\n\n // Two ticks on the bottom and top\n {\n // The inner tick\n const scaledStartX = isLeft ? 0 : tw - SCALED_EXTENT_TICK_SIZE(trackInnerRadius);\n const scaledEndX = isLeft ? SCALED_EXTENT_TICK_SIZE(trackInnerRadius) : tw;\n\n const startRad = valueToRadian(scaledStartX, tw, startAngle, endAngle);\n const endRad = valueToRadian(scaledEndX, tw, startAngle, endAngle);\n\n graphics.moveTo(innerPos.x, innerPos.y);\n graphics.arc(cx, cy, trackInnerRadius, startRad, endRad, true);\n graphics.arc(cx, cy, trackInnerRadius, endRad, startRad, false);\n graphics.closePath();\n }\n {\n // The outer tick\n const scaledStartX = isLeft ? 0 : tw - SCALED_EXTENT_TICK_SIZE(trackOuterRadius);\n const scaledEndX = isLeft ? SCALED_EXTENT_TICK_SIZE(trackOuterRadius) : tw;\n\n const startRad = valueToRadian(scaledStartX, tw, startAngle, endAngle);\n const endRad = valueToRadian(scaledEndX, tw, startAngle, endAngle);\n\n graphics.moveTo(outerPos.x, outerPos.y);\n graphics.arc(cx, cy, trackOuterRadius, startRad, endRad, true);\n graphics.arc(cx, cy, trackOuterRadius, endRad, startRad, false);\n graphics.closePath();\n }\n\n /* Labels */\n ticks.forEach(t => {\n const y = yScale(t);\n\n // The current position, i.e., radius, of this label\n const currentR = trackOuterRadius - ((rowPosition + rowHeight - y) / th) * trackRingSize;\n\n // The position of a tick in the polar system\n const pos = cartesianToPolar(SCALED_TICK_SIZE(currentR) * 2, tw, currentR, cx, cy, startAngle, endAngle);\n\n const styleConfig = getTextStyle({\n color: theme.axis.labelColor,\n size: theme.axis.labelFontSize,\n fontFamily: theme.axis.labelFontFamily,\n fontWeight: theme.axis.labelFontWeight\n });\n const textGraphic = new HGC.libraries.PIXI.Text(t, styleConfig);\n textGraphic.anchor.x = isLeft ? 1 : 0;\n textGraphic.anchor.y = 0.5;\n textGraphic.position.x = pos.x;\n textGraphic.position.y = pos.y;\n\n textGraphic.resolution = 4;\n const txtStyle = new HGC.libraries.PIXI.TextStyle(styleConfig);\n const metric = HGC.libraries.PIXI.TextMetrics.measureText(textGraphic.text, txtStyle);\n\n // Scale the width of text label so that its width is the same when converted into circular form\n const txtWidth = ((metric.width / (2 * currentR * Math.PI)) * tw * 360) / (endAngle - startAngle);\n const scaledStartX = isLeft\n ? SCALED_TICK_SIZE(currentR) * 2\n : tw - SCALED_TICK_SIZE(currentR) * 2 - txtWidth;\n const scaledEndX = isLeft ? SCALED_TICK_SIZE(currentR) * 2 + txtWidth : tw - SCALED_TICK_SIZE(currentR) * 2;\n\n // Determine the points of a rope element for a lebel\n const ropePoints: import('pixi.js').Point[] = [];\n for (let i = scaledEndX; i >= scaledStartX; i -= txtWidth / 10.0) {\n const p = cartesianToPolar(i, tw, currentR, cx, cy, startAngle, endAngle);\n ropePoints.push(new HGC.libraries.PIXI.Point(p.x, p.y));\n }\n\n // Render a label\n // @ts-expect-error missing argument in updateText?\n textGraphic.updateText();\n const rope = new HGC.libraries.PIXI.SimpleRope(textGraphic.texture, ropePoints);\n graphics.addChild(rope);\n });\n });\n}\n","import type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar, valueToRadian } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\nimport type { CompleteThemeDeep } from '../utils/theme';\n\nexport function drawCircularOutlines(trackInfo: any, tm: GoslingTrackModel, theme: Required<CompleteThemeDeep>) {\n /* track spec */\n const spec = tm.spec();\n\n /* track size */\n const [l, t] = trackInfo.position;\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* circular parameters */\n const trackInnerRadius = spec.innerRadius ?? 220; // TODO: should default values be filled already\n const trackOuterRadius = spec.outerRadius ?? 300; // TODO: should be smaller than Math.min(width, height)\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const cx = l + trackWidth / 2.0;\n const cy = t + trackHeight / 2.0;\n\n const posStartInner = cartesianToPolar(0, trackWidth, trackInnerRadius, cx, cy, startAngle, endAngle);\n const startRad = valueToRadian(0, trackWidth, startAngle, endAngle);\n const endRad = valueToRadian(trackWidth, trackWidth, startAngle, endAngle);\n\n /* render */\n const g = trackInfo.pBackground;\n\n if (!(spec.layout === 'circular' && spec.mark === 'withinLink')) {\n // circular link marks usually use entire inner space\n g.lineStyle(\n spec.style?.outlineWidth ? spec.style?.outlineWidth / 2.5 : 0,\n colorToHex(spec.style?.outline ?? '#DBDBDB'),\n 1, // 0.4, // alpha\n 1 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(\n colorToHex(tm.spec().style?.background ?? theme.track.background),\n tm.spec().style?.backgroundOpacity ??\n (!theme.track.background || theme.track.background === 'transparent' ? 0 : 1)\n );\n g.moveTo(posStartInner.x, posStartInner.y);\n g.arc(cx, cy, trackInnerRadius, startRad, endRad, true);\n g.arc(cx, cy, trackOuterRadius, endRad, startRad, false);\n g.closePath();\n }\n\n if (IsChannelDeep(spec.x) && spec.x.axis === 'top') {\n // outer line\n g.lineStyle(\n 0.5,\n colorToHex('black'),\n 0, // 1, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(colorToHex('white'), 0);\n g.moveTo(posStartInner.x, posStartInner.y);\n g.arc(cx, cy, trackOuterRadius - 0.5, startRad, endRad, true);\n g.arc(cx, cy, trackOuterRadius, endRad, startRad, false);\n g.closePath();\n }\n\n // inner line\n // graphics.lineStyle(\n // 0.5,\n // colorToHex('black'),\n // 1, // alpha\n // 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n // );\n // graphics.beginFill(colorToHex('white'), 0);\n // graphics.moveTo(xToPos(0, innerRadius - 0.5).x, xToPos(0, innerRadius - 0.5).y);\n // graphics.arc(cx, cy, innerRadius - 0.5, xToDt(0), xToDt(trackWidth), true);\n // graphics.arc(cx, cy, innerRadius, xToDt(trackWidth), xToDt(0), false);\n // graphics.closePath();\n\n // slice on the top\n g.lineStyle(\n 0.5,\n colorToHex('black'),\n 0, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(colorToHex('white'), 0);\n g.moveTo(cx, cy);\n g.arc(cx, cy, trackOuterRadius + 3, startRad, endRad, false);\n g.closePath();\n\n // center white hole\n g.lineStyle(\n 1,\n colorToHex('#DBDBDB'),\n 0, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(colorToHex('white'), 0);\n g.drawCircle(cx, cy, trackInnerRadius - 1);\n}\n","import { isUndefined } from 'lodash-es';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { IsChannelDeep } from '@gosling-lang/gosling-schema';\nimport colorToHex from '../utils/color-to-hex';\nimport type { CompleteThemeDeep } from '../utils/theme';\n\nexport function drawBackground(trackInfo: any, tm: GoslingTrackModel, theme: Required<CompleteThemeDeep>) {\n // size and position\n const [l, t] = trackInfo.position;\n const [w, h] = trackInfo.dimensions;\n\n // refer to https://github.com/higlass/higlass/blob/f82c0a4f7b2ab1c145091166b0457638934b15f3/app/scripts/PixiTrack.js#L129\n const g = trackInfo.pBackground;\n\n if (tm.spec().style?.background || (theme.track.background && theme.track.background !== 'transparent')) {\n g.clear();\n\n const bg = tm.spec().style?.background ?? theme.track.background;\n const alpha = isUndefined(tm.spec().style?.backgroundOpacity) ? 1 : tm.spec().style?.backgroundOpacity;\n // background\n g.lineStyle(\n 1,\n colorToHex('white'),\n 0, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(colorToHex(bg), alpha);\n g.drawRect(l, t, w, h);\n }\n\n if (theme.track.alternatingBackground && theme.track.alternatingBackground !== 'transparent') {\n const spec = tm.spec();\n\n if (!IsChannelDeep(spec.row) || spec.row.type !== 'nominal') {\n // we do not use a `row` channel, so no need to draw alternating backgrounds\n return;\n }\n\n /* row separation */\n const rowCategories: string[] = (tm.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n if (rowCategories.length === 0) {\n // We do not need to fill alternating colors for only one category\n return;\n }\n\n /* render */\n rowCategories.forEach((category, i) => {\n if (i % 2 === 0) {\n // we only draw even rows\n return;\n }\n const rowPosition = tm.encodedValue('row', category);\n\n const bg = tm.spec().style?.background ?? theme.track.alternatingBackground;\n const alpha = isUndefined(tm.spec().style?.backgroundOpacity) ? 1 : tm.spec().style?.backgroundOpacity;\n // background\n g.lineStyle(\n 1,\n colorToHex('white'),\n 0, // alpha\n 0 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.beginFill(colorToHex(bg), alpha);\n g.drawRect(trackInfo.position[0], trackInfo.position[1] + rowPosition, w, h / rowCategories.length);\n });\n }\n}\n","import type * as PIXI from 'pixi.js';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport type { Channel } from '@gosling-lang/gosling-schema';\nimport { getValueUsingChannel, Is2DTrack } from '@gosling-lang/gosling-schema';\nimport { cartesianToPolar, positionToRadian } from '../utils/polar';\nimport colorToHex from '../utils/color-to-hex';\n\n// TODO: This code is taken from `link.ts` which is for withinLink marks. Large parts should be removed.\nexport function drawBetweenLink(g: PIXI.Graphics, trackInfo: any, model: GoslingTrackModel) {\n /* track spec */\n const spec = model.spec();\n\n if (!spec.width || !spec.height) {\n console.warn('Size of a track is not properly determined, so visual mark cannot be rendered');\n return;\n }\n\n /* data */\n const data = model.data();\n\n /* track size */\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* circular parameters */\n const circular = spec.layout === 'circular';\n const trackInnerRadius = spec.innerRadius ?? 220;\n const trackOuterRadius = spec.outerRadius ?? 300;\n const startAngle = spec.startAngle ?? 0;\n const endAngle = spec.endAngle ?? 360;\n const trackRingSize = trackOuterRadius - trackInnerRadius;\n const tcx = trackWidth / 2.0;\n const tcy = trackHeight / 2.0;\n\n /* row separation */\n const rowCategories: string[] = (model.getChannelDomainArray('row') as string[]) ?? ['___SINGLE_ROW___'];\n const rowHeight = trackHeight / rowCategories.length;\n\n // TODO: Can row be actually used for circular layouts?\n /* render */\n rowCategories.forEach(rowCategory => {\n const rowPosition = model.encodedValue('row', rowCategory);\n\n data.filter(\n d =>\n !getValueUsingChannel(d, spec.row as Channel) ||\n (getValueUsingChannel(d, spec.row as Channel) as string) === rowCategory\n ).forEach(d => {\n let x = model.encodedPIXIProperty('x', d);\n let xe = model.encodedPIXIProperty('xe', d);\n let x1 = model.encodedPIXIProperty('x1', d);\n let x1e = model.encodedPIXIProperty('x1e', d);\n const y = model.encodedPIXIProperty('y', d);\n const stroke = model.encodedPIXIProperty('stroke', d);\n const strokeWidth = model.encodedPIXIProperty('strokeWidth', d);\n const color = model.encodedPIXIProperty('color', d);\n const opacity = model.encodedPIXIProperty('opacity', d);\n\n // sort properly\n if (typeof xe !== 'undefined') {\n [x, xe] = [x, xe].sort((a, b) => a - b);\n }\n if (typeof x1 !== 'undefined' && typeof x1e !== 'undefined') {\n [x1, x1e] = [x1, x1e].sort((a, b) => a - b);\n }\n\n // Is this band or line?\n const isRibon =\n typeof xe !== 'undefined' &&\n typeof x1 !== 'undefined' &&\n typeof x1e !== 'undefined' &&\n // This means the strokeWidth of a band is too small, so we just need to draw a line instead\n Math.abs(x - xe) > 0.1 &&\n Math.abs(x1 - x1e) > 0.1;\n\n // TODO: This correction can be moved to the compile process\n if (!isRibon && xe === undefined && !Is2DTrack(spec)) {\n // We need to use a valid value to draw lines, so lets find alternative one.\n if (x1 === undefined && x1e === undefined) {\n // We do not have a valid ones.\n return;\n }\n xe = x1 !== undefined ? x1 : x1e;\n }\n\n if (!isRibon && Math.abs(x - xe) <= 0.1 && Math.abs(x1 - x1e) <= 0.1) {\n // Put the larger value on `xe` so that it can be used in line connection\n x = (x + xe) / 2.0;\n xe = (x1 + x1e) / 2.0;\n }\n\n // stroke\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n opacity, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n\n if (isRibon) {\n g.beginFill(color === 'none' ? colorToHex('white') : colorToHex(color), color === 'none' ? 0 : opacity);\n\n let [_x1, _x2, _x3, _x4] = [x, xe, x1, x1e];\n\n // Sort values to safely draw bands\n [_x1, _x2] = [_x1, _x2].sort((a, b) => a - b);\n [_x3, _x4] = [_x3, _x4].sort((a, b) => a - b);\n\n if (_x1 > trackWidth || _x4 < 0 || Math.abs(_x4 - _x1) < 0.5) {\n // Do not draw very small visual marks\n return;\n }\n\n if (circular) {\n if (_x1 < 0 || _x4 > trackWidth) {\n // Do not show bands that are partly outside of the current domain\n return;\n }\n\n // https://pixijs.download/dev/docs/PIXI.Graphics.html#bezierCurveTo\n const r = trackOuterRadius - (rowPosition / trackHeight) * trackRingSize;\n const posX = cartesianToPolar(_x1, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posXE = cartesianToPolar(_x2, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posX1 = cartesianToPolar(_x3, trackWidth, r, tcx, tcy, startAngle, endAngle);\n const posX1E = cartesianToPolar(_x4, trackWidth, r, tcx, tcy, startAngle, endAngle);\n\n g.moveTo(posX.x, posX.y);\n\n // outer curve\n g.bezierCurveTo(tcx, tcy, tcx, tcy, posX1E.x, posX1E.y);\n\n g.arc(\n tcx,\n tcy,\n trackOuterRadius,\n positionToRadian(posX1E.x, posX1E.y, tcx, tcy),\n positionToRadian(posX1.x, posX1.y, tcx, tcy),\n false\n );\n\n // inner curve\n g.bezierCurveTo(tcx, tcy, tcx, tcy, posXE.x, posXE.y);\n\n g.arc(\n tcx,\n tcy,\n trackOuterRadius,\n positionToRadian(posXE.x, posXE.y, tcx, tcy),\n positionToRadian(posX.x, posX.y, tcx, tcy),\n false\n );\n g.endFill();\n } else {\n // Linear mark\n g.moveTo(_x1, rowPosition);\n g.lineTo(_x2, rowPosition);\n g.lineTo(_x4, rowPosition + rowHeight);\n g.lineTo(_x3, rowPosition + rowHeight);\n g.lineTo(_x1, rowPosition);\n g.closePath();\n }\n } else {\n /* Line Connection */\n\n // Experimental\n if (Is2DTrack(spec)) {\n if (spec.style?.linkConnectionType === 'curve') {\n g.moveTo(x, 0);\n g.bezierCurveTo(\n (x / 5.0) * 4,\n (rowPosition + rowHeight - y) / 2.0,\n x / 2.0,\n ((rowPosition + rowHeight - y) / 5.0) * 4,\n 0,\n rowPosition + rowHeight - y\n );\n } else if (spec.style?.linkConnectionType === 'straight') {\n g.moveTo(x, 0);\n g.lineTo(0, rowPosition + rowHeight - y);\n } else {\n // spec.style?.linkConnectionType === 'corner'\n g.moveTo(x, 0);\n g.lineTo(x, rowPosition + rowHeight - y);\n g.lineTo(0, rowPosition + rowHeight - y);\n }\n return;\n }\n\n if (circular) {\n /* Original lines */\n // const r = trackOuterRadius - (rowPosition / trackHeight) * trackRingSize;\n // const posX = cartesianToPolar(x, trackWidth, r, tcx, tcy, startAngle, endAngle);\n // const posXE = cartesianToPolar(xe, trackWidth, trackInnerRadius, tcx, tcy, startAngle, endAngle);\n // g.lineStyle(\n // 1,\n // colorToHex('red'),\n // 1, // alpha\n // 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n // );\n // g.moveTo(posX.x, posX.y);\n // g.lineTo(posXE.x, posXE.y);\n\n // https://www.tessellationtech.io/tutorial-circular-sankey/\n let prevX, prevY;\n for (let t = 0; t <= 1; t += 0.02) {\n const logodds = (t: number) => Math.log(t / (1 - t));\n const movingRadius = (t: number) =>\n trackOuterRadius - (1 / (1 + Math.exp(logodds(t)))) * trackRingSize + 3;\n const getRadian = (t: number, s: number, e: number) => ((e - s) * t + s) / trackWidth;\n const _x = tcx + movingRadius(t) * Math.cos(-getRadian(t, x, xe) * 2 * Math.PI - Math.PI / 2.0);\n const _y = tcy + movingRadius(t) * Math.sin(-getRadian(t, x, xe) * 2 * Math.PI - Math.PI / 2.0);\n if (prevX && prevY) {\n g.lineStyle(\n strokeWidth,\n colorToHex(stroke),\n opacity, // alpha\n 0.5 // alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outter)\n );\n g.moveTo(prevX, prevY);\n g.lineTo(_x, _y);\n }\n prevX = _x;\n prevY = _y;\n }\n\n return;\n }\n\n // TODO: Not yet supported.\n g.moveTo(xe, rowPosition + rowHeight);\n g.lineTo(x, rowPosition);\n }\n });\n });\n}\n","import type { Tile } from '@gosling-lang/gosling-track';\nimport type { GoslingTrackModel } from '../../tracks/gosling-track/gosling-track-model';\nimport { drawPoint } from './point';\nimport { drawLine } from './line';\nimport { drawBar } from './bar';\nimport { drawArea } from './area';\nimport { drawRect } from './rect';\nimport type { ChannelTypes } from '@gosling-lang/gosling-schema';\nimport { drawTriangle } from './triangle';\nimport { drawText } from './text';\nimport { drawRule } from './rule';\nimport { drawWithinLink } from './withinLink';\nimport { drawGrid } from './grid';\nimport { drawCircularTitle } from './title';\nimport { drawChartOutlines } from './outline';\nimport { drawColorLegend, drawRowLegend } from './legend';\nimport { drawCircularYAxis, drawLinearYAxis } from './axis';\nimport { drawCircularOutlines } from './outline-circular';\nimport { drawBackground } from './background';\nimport type { CompleteThemeDeep } from '../utils/theme';\nimport { Is2DTrack, IsVerticalRule } from '@gosling-lang/gosling-schema';\nimport { drawBetweenLink } from './betweenLink';\n\n/**\n * Visual channels currently supported for visual encoding.\n */\nexport const SUPPORTED_CHANNELS: (keyof typeof ChannelTypes)[] = [\n 'x',\n 'xe',\n 'x1',\n 'x1e',\n\n 'y',\n 'ye',\n 'y1',\n 'y1e',\n\n 'color',\n 'size',\n 'row',\n 'stroke',\n 'strokeWidth',\n 'opacity',\n 'text'\n // ...\n];\n\nexport const RESOLUTION = 4;\n\n/**\n * Draw a track based on the track specification in a Gosling grammar.\n */\nexport function drawMark(HGC: import('@higlass/types').HGC, trackInfo: any, tile: Tile, model: GoslingTrackModel) {\n if (!HGC || !trackInfo || !tile) {\n // We did not receive parameters correctly.\n return;\n }\n\n if (model.spec().mark === 'brush') {\n // Interactive brushes are rendered by our another plugin track, called `gosling-brush`\n return;\n }\n\n // Replace the scale of a genomic axis with the one that is generated by the HiGlass data fetcher.\n (['x', 'x1', 'x1e', 'xe'] as const).forEach(d => {\n model.setChannelScale(d, trackInfo._xScale);\n });\n\n if (Is2DTrack(model.spec()) || IsVerticalRule(model.spec())) {\n // Since small numbers are positioned on the top in the y axis, we reverse the domain, making it consistent to regular y scale.\n const yScale = trackInfo._yScale.copy();\n yScale.range([yScale.range()[1], yScale.range()[0]]);\n\n ['y', 'y1', 'y1e', 'ye'].forEach((d: any) => {\n model.setChannelScale(d, yScale);\n });\n }\n\n // Size of a track\n const [trackWidth, trackHeight] = trackInfo.dimensions;\n\n /* spec */\n switch (model.spec().mark) {\n case 'point':\n drawPoint(trackInfo, tile.graphics, model);\n break;\n case 'bar':\n drawBar(trackInfo, tile, model);\n break;\n case 'line':\n drawLine(tile.graphics, model, trackWidth, trackHeight);\n break;\n case 'area':\n drawArea(HGC, trackInfo, tile, model);\n break;\n case 'rect':\n drawRect(HGC, trackInfo, tile, model);\n break;\n case 'triangleLeft':\n case 'triangleRight':\n case 'triangleBottom':\n drawTriangle(tile.graphics, model, trackWidth, trackHeight);\n break;\n case 'text':\n drawText(HGC, trackInfo, tile, model);\n break;\n case 'rule':\n drawRule(HGC, trackInfo, tile, model);\n break;\n case 'betweenLink':\n drawBetweenLink(tile.graphics, trackInfo, model);\n break;\n case 'withinLink':\n drawWithinLink(tile.graphics, trackInfo, model);\n break;\n default:\n console.warn('Unsupported mark type');\n break;\n }\n}\n\n/**\n * Draw chart embellishments before rendering marks.\n */\nexport function drawPreEmbellishment(\n HGC: import('@higlass/types').HGC,\n trackInfo: any,\n tile: Tile,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n if (!HGC || !trackInfo || !tile) {\n // We did not receive parameters correctly.\n return;\n }\n\n if (model.spec().mark === 'brush') {\n // We do not draw brush. Instead, higlass do.\n return;\n }\n // Replace the scale of a genomic axis with the one that is generated by the HiGlass data fetcher.\n (['x', 'x1', 'x1e', 'xe'] as const).forEach(d => {\n model.setChannelScale(d, trackInfo._xScale);\n });\n\n const isCircular = model.spec().layout === 'circular';\n\n if (isCircular) {\n drawCircularOutlines(trackInfo, model, theme);\n } else {\n drawBackground(trackInfo, model, theme);\n drawChartOutlines(trackInfo, model, theme);\n }\n drawGrid(trackInfo, model, theme);\n}\n\n/**\n * Draw chart embellishments after rendering marks.\n */\nexport function drawPostEmbellishment(\n HGC: import('@higlass/types').HGC,\n trackInfo: any,\n tile: Tile,\n model: GoslingTrackModel,\n theme: Required<CompleteThemeDeep>\n) {\n if (!HGC || !trackInfo || !tile) {\n // We did not receive parameters correctly.\n return;\n }\n\n if (model.spec().mark === 'brush') {\n // We do not draw brush. Instead, higlass do.\n return;\n }\n // Replace the scale of a genomic axis with the one that is generated by the HiGlass data fetcher.\n (['x', 'x1', 'x1e', 'xe'] as const).forEach(d => {\n model.setChannelScale(d, trackInfo._xScale);\n });\n\n const isCircular = model.spec().layout === 'circular';\n\n if (isCircular) {\n drawCircularYAxis(HGC, trackInfo, tile, model, theme);\n drawCircularTitle(HGC, trackInfo, tile, model, theme);\n } else {\n drawLinearYAxis(HGC, trackInfo, tile, model, theme);\n drawRowLegend(HGC, trackInfo, tile, model, theme);\n }\n drawColorLegend(HGC, trackInfo, tile, model, theme);\n}\n","import type {\n AxisPosition,\n SingleTrack,\n OverlaidTrack,\n Track,\n ChannelDeep,\n DataDeep\n} from '@gosling-lang/gosling-schema';\nimport {\n IsChannelDeep,\n IsOverlaidTrack,\n IsSingleTrack,\n IsDummyTrack,\n IsTemplateTrack\n} from '@gosling-lang/gosling-schema';\n\n/**\n * Resolve superposed tracks into multiple track specifications.\n * Some options are corrected to ensure the resolved tracks use consistent visual properties, such as the existence of the axis for genomic coordinates.\n */\nexport function resolveSuperposedTracks(track: Track): SingleTrack[] {\n if (IsTemplateTrack(track) || IsDummyTrack(track)) {\n // no BasicSingleTrack to return\n return [];\n }\n\n if (!IsOverlaidTrack(track)) {\n // no `superpose` to resolve\n return [track];\n }\n\n if (track._overlay.length === 0) {\n // This makes sure not to return empty object\n return [{ ...track, superpose: undefined } as SingleTrack];\n }\n\n const base: SingleTrack = JSON.parse(JSON.stringify(track));\n delete (base as Partial<OverlaidTrack>)._overlay; // remove `superpose` from the base spec\n\n const resolved: SingleTrack[] = [];\n track._overlay.forEach((subSpec, i) => {\n const spec = Object.assign(JSON.parse(JSON.stringify(base)), subSpec) as SingleTrack;\n if (spec.title && i !== 0) {\n delete spec.title;\n }\n resolved.push(spec);\n });\n\n /* Correct the spec for consistency */\n // x-axis\n let xAxisPosition: undefined | AxisPosition = undefined;\n resolved.forEach(d => {\n if (IsChannelDeep(d.x) && d.x.axis && !xAxisPosition) {\n xAxisPosition = d.x.axis;\n }\n });\n\n const corrected = resolved.map(d => {\n return {\n ...d,\n x: { ...d.x, axis: xAxisPosition }\n } as SingleTrack;\n });\n\n // height\n // ...\n\n return corrected;\n}\n\n/**\n * Spread overlaid tracks if they are assigned to different data/metadata.\n * This process is necessary since we are passing over each track to HiGlass, and if a single track is mapped to multiple datastes, HiGlass cannot handle that.\n */\nexport function spreadTracksByData(tracks: Track[]): Track[] {\n return ([] as Track[]).concat(\n ...tracks.map(t => {\n if (!IsOverlaidTrack(t) || t._overlay.length <= 1) {\n // no overlaid tracks to spread\n return [t];\n }\n\n if (t._overlay.filter(s => s.data).length === 0) {\n // overlaid tracks use the parent's data specs as it w/o re-specification, so no point to spread.\n return [t];\n }\n\n if (isIdenticalDataSpec([t.data, ...t._overlay.map(s => s.data)])) {\n // individual overlaid tracks define the same data, so no point to spread.\n return [t];\n }\n\n const base: Partial<OverlaidTrack> = { ...t, id: undefined, _overlay: undefined };\n const spread: Track[] = [];\n const original: OverlaidTrack = JSON.parse(JSON.stringify(base));\n original._overlay = [];\n\n t._overlay.forEach(subSpec => {\n // If data specs are undefined, put the first spec to the parent\n if (!original.data) {\n original.data = subSpec.data;\n }\n\n // If the id is undefined, put the first spec to the parent\n if (!original.id) {\n original.id = subSpec.id;\n }\n\n // Determine if this `subSpec` should be added to `overlay` or become a separate track\n if (!subSpec.data || isIdenticalDataSpec([original.data, subSpec.data])) {\n original._overlay.push(subSpec);\n return;\n }\n\n const spec = Object.assign(JSON.parse(JSON.stringify(base)), subSpec) as SingleTrack;\n spread.push(spec);\n });\n\n const output = original._overlay.length > 0 ? [original, ...spread] : spread;\n return output.map((track, i, arr) => {\n const overlayOnPreviousTrack = i !== 0;\n\n // Y axis should be positioned on the right or hidden if multiple tracks are overlaid to prevent visual occlussion.\n // Refer to this issue: https://github.com/gosling-lang/gosling.js/issues/400\n const y =\n IsSingleTrack(track) && IsChannelDeep(track.y) && !track.y.axis && overlayOnPreviousTrack\n ? ({ ...track.y, axis: i === 1 ? 'right' : 'none' } as ChannelDeep)\n : IsSingleTrack(track)\n ? track.y\n : undefined;\n\n if (track.title && i !== arr.length - 1 && arr.length !== 1) {\n delete track.title; // remove `title` except the last one\n }\n return { ...track, overlayOnPreviousTrack, y } as Track;\n });\n })\n );\n}\n\nexport function isIdenticalDataSpec(specs: (DataDeep | undefined)[]): boolean {\n if (specs.length === 0) {\n return false;\n }\n\n const definedSpecs = specs.filter(d => d) as DataDeep[];\n\n if (definedSpecs.length !== specs.length) {\n return false;\n }\n\n // Iterate keys to check if these are identical\n const keys = Object.keys(definedSpecs[0]).sort();\n let isIdentical = true;\n keys.forEach(k => {\n const uniqueProperties = Array.from(new Set(definedSpecs.map(d => JSON.stringify((d as any)[k]))));\n if (uniqueProperties.length !== 1) {\n isIdentical = false;\n return;\n }\n });\n return isIdentical;\n}\n","import type {\n ChannelDeep,\n ChannelValue,\n DataDeep,\n Datum,\n DomainChr,\n DomainInterval,\n DomainChrInterval,\n Style,\n Track,\n SingleTrack,\n OverlaidTrack,\n ChannelTypes,\n Channel,\n FieldType,\n Domain,\n FilterTransform,\n OneOfFilter,\n RangeFilter,\n IncludeFilter,\n BeddbData,\n MultivecData,\n MatrixData,\n VectorData,\n BigWigData,\n SingleView,\n FlatTracks,\n OverlaidTracks,\n StackedTracks,\n BamData,\n Range,\n TemplateTrack,\n MouseEventsDeep,\n DataTransform,\n DummyTrack\n} from './gosling.schema';\nimport { SUPPORTED_CHANNELS } from '../core/mark';\nimport {\n interpolateGreys,\n interpolateWarm,\n interpolateSpectral,\n interpolateCividis,\n interpolateBuPu,\n interpolateRdBu,\n interpolateViridis,\n interpolateYlOrBr,\n interpolateRdPu\n} from 'd3-scale-chromatic';\nimport { resolveSuperposedTracks } from '../core/utils/overlay';\nimport type { TabularDataFetcher } from '@data-fetchers';\n\nexport const PREDEFINED_COLOR_STR_MAP: { [k: string]: (t: number) => string } = {\n viridis: interpolateViridis,\n grey: interpolateGreys,\n warm: interpolateWarm,\n spectral: interpolateSpectral,\n cividis: interpolateCividis,\n bupu: interpolateBuPu,\n rdbu: interpolateRdBu,\n hot: interpolateYlOrBr,\n pink: interpolateRdPu\n};\n\nexport function isObject(x: unknown): x is Record<PropertyKey, unknown> {\n return typeof x === 'object' && x !== null;\n}\n\nexport function isTabularDataFetcher(dataFetcher: unknown): dataFetcher is TabularDataFetcher<unknown> {\n return isObject(dataFetcher) && 'getTabularData' in dataFetcher;\n}\n\nexport function hasDataTransform(spec: SingleTrack | OverlaidTrack, type: DataTransform['type']) {\n return (spec.dataTransform ?? []).some(d => d.type === type);\n}\n\n/**\n * This returns an array of color strings that can be assigned to HiGlass' option, `colorRange`\n */\nexport function getHiGlassColorRange(colorStr = 'viridis', step = 100) {\n const interpolate = PREDEFINED_COLOR_STR_MAP[colorStr] ?? PREDEFINED_COLOR_STR_MAP['viridis'];\n return [...Array(step)].map((_, i) => interpolate((1 / step) * i));\n}\n\nexport function IsFlatTracks(_: SingleView): _ is FlatTracks {\n return !('alignment' in _) && !_.tracks.find(d => (d as any).alignment === 'overlay' || 'tracks' in d);\n}\nexport function IsOverlaidTracks(_: SingleView): _ is OverlaidTracks {\n return 'alignment' in _ && _.alignment === 'overlay';\n}\nexport function IsStackedTracks(_: SingleView): _ is StackedTracks {\n return !IsFlatTracks(_) && !IsOverlaidTracks(_);\n}\n\nexport function IsDummyTrack(_: Track): _ is DummyTrack {\n return 'type' in _ && _.type == 'dummy-track';\n}\n\nexport function IsDataDeep(data: DataDeep | Datum[]): data is DataDeep {\n return typeof data === 'object';\n}\n\nexport function IsDomainFlat(domain: Domain): domain is string[] | number[] {\n return Array.isArray(domain);\n}\n\nexport function IsDomainChr(domain: Domain): domain is DomainChr {\n return 'chromosome' in domain && !('interval' in domain);\n}\n\nexport function IsDomainInterval(domain: Domain): domain is DomainInterval {\n return !('chromosome' in domain) && 'interval' in domain;\n}\n\nexport function IsDomainChrInterval(domain: Domain): domain is DomainChrInterval {\n return 'chromosome' in domain && 'interval' in domain;\n}\n\nexport function IsTrackStyle(track: Style | undefined): track is Style {\n return track !== undefined;\n}\n\nexport function IsSingleTrack(track: Track): track is SingleTrack {\n return !('_overlay' in track);\n}\n\nexport function IsOverlaidTrack(track: Partial<Track>): track is OverlaidTrack {\n return '_overlay' in track;\n}\n\nexport function IsTemplateTrack(track: Partial<Track>): track is TemplateTrack {\n return 'template' in track;\n}\n\n/**\n * Is this a vertical rule, i.e., y genomic axis?\n */\nexport function IsVerticalRule(track: Track) {\n return IsSingleTrack(track) && !IsChannelDeep(track.x) && IsChannelDeep(track.y) && track.y.type === 'genomic';\n}\n\n/**\n * Is this 2D track, i.e., two genomic axes?\n */\nexport function Is2DTrack(track: Track) {\n // If this is an overlaid tracks (e.g., matrix w/ rules),\n // we use the first `SingleTrack` to check the type of two axes.\n const t = IsSingleTrack(track) ? track : resolveSuperposedTracks(track)[0];\n return IsChannelDeep(t.x) && t.x.type === 'genomic' && IsChannelDeep(t.y) && t.y.type === 'genomic';\n}\n\n/**\n * Do we want to use HiGlass matrix track (i.e., 'heatmap') to rendering the given visualization?\n */\nexport function IsHiGlassMatrix(track: SingleTrack) {\n return (\n Is2DTrack(track) &&\n track.data.type === 'matrix' &&\n (track.mark === 'bar' || track.mark === 'rect') &&\n track.xe &&\n track.ye\n );\n}\n\nexport function IsChannelValue(channel: ChannelDeep | ChannelValue | undefined | 'none'): channel is ChannelValue {\n return channel !== null && typeof channel === 'object' && 'value' in channel;\n}\n\nexport function IsDataDeepTileset(\n _: DataDeep | undefined\n): _ is BeddbData | VectorData | MultivecData | BigWigData | BamData | MatrixData {\n return (\n _ !== undefined &&\n (_.type === 'vector' ||\n _.type === 'beddb' ||\n _.type === 'multivec' ||\n _.type === 'bigwig' ||\n _.type === 'matrix' ||\n _.type === 'bam' ||\n _.type === 'vcf' ||\n _.type === 'gff' ||\n _.type === 'bed')\n );\n}\n\n/**\n * Checks if a channel is of type ChannelDeep\n */\nexport function IsChannelDeep(channel: ChannelDeep | ChannelValue | undefined): channel is ChannelDeep {\n return isObject(channel) && !('value' in channel);\n}\n\nexport function IsOneOfFilter(_: FilterTransform): _ is OneOfFilter {\n return 'oneOf' in _;\n}\n\nexport function IsRangeFilter(_: FilterTransform): _ is RangeFilter {\n return 'inRange' in _;\n}\n\nexport function IsIncludeFilter(_: FilterTransform): _ is IncludeFilter {\n return 'include' in _;\n}\n\n/**\n * Check whether domain is in array shape.\n */\nexport function IsDomainArray(domain?: Domain): domain is string[] | number[] {\n return Array.isArray(domain);\n}\n\n/**\n * Check whether range is in array shape.\n */\nexport function IsRangeArray(range?: Range): range is string[] | number[] {\n return Array.isArray(range);\n}\n\n// TODO: perhaps, combine this with `isStackedChannel`\n/**\n * Check whether visual marks can be stacked on top of each other.\n */\nexport function IsStackedMark(track: SingleTrack): boolean {\n return (\n (track.mark === 'bar' || track.mark === 'area' || track.mark === 'text') &&\n IsChannelDeep(track.color) &&\n track.color.type === 'nominal' &&\n (!track.row || IsChannelValue(track.row)) &&\n // TODO: determine whether to use stacked bar for nominal fields or not\n IsChannelDeep(track.y) &&\n track.y.type === 'quantitative' &&\n !IsChannelDeep(track.ye)\n );\n}\n\n/**\n * Check whether visual marks in this channel are stacked on top of each other.\n * For example, `area` marks with a `quantitative` `y` channel are being stacked.\n */\nexport function IsStackedChannel(track: SingleTrack, channelKey: keyof typeof ChannelTypes): boolean {\n const channel = track[channelKey];\n return (\n IsStackedMark(track) &&\n // only x or y channel can be stacked\n (channelKey === 'x' || channelKey === 'y') &&\n // only quantitative channel can be stacked\n IsChannelDeep(channel) &&\n channel.type === 'quantitative'\n );\n}\n\n/**\n * Retreive value using a `channel`.\n * `undefined` if unable to retreive the value.\n */\nexport function getValueUsingChannel(datum: { [k: string]: string | number }, channel: Channel) {\n if (IsChannelDeep(channel) && channel.field) {\n return datum[channel?.field];\n }\n return undefined;\n}\n\nexport function getChannelKeysByAggregateFnc(spec: SingleTrack) {\n const keys: (keyof typeof ChannelTypes)[] = [];\n SUPPORTED_CHANNELS.forEach(k => {\n const c = spec[k];\n if (IsChannelDeep(c) && 'aggregate' in c) {\n keys.push(k);\n }\n });\n return keys;\n}\n\n/**\n * Get channel keys by a field type.\n */\nexport function getChannelKeysByType(spec: SingleTrack, t: FieldType) {\n const keys: (keyof typeof ChannelTypes)[] = [];\n SUPPORTED_CHANNELS.forEach(k => {\n const c = spec[k];\n if (IsChannelDeep(c) && c.type === t) {\n keys.push(k);\n }\n });\n return keys;\n}\n\nexport function IsXAxis(_: Track) {\n if ((IsSingleTrack(_) || IsOverlaidTrack(_)) && IsChannelDeep(_.x) && _.x.axis && _.x.axis !== 'none') {\n return true;\n } else if (IsOverlaidTrack(_)) {\n let isFound = false;\n _._overlay.forEach(t => {\n if (isFound) return;\n\n if (IsChannelDeep(t.x) && t.x.axis && t.x.axis !== 'none') {\n isFound = true;\n }\n });\n return isFound;\n }\n return false;\n}\n\nexport function IsYAxis(_: Track) {\n if ((IsSingleTrack(_) || IsOverlaidTrack(_)) && IsChannelDeep(_.y) && _.y.axis && _.y.axis !== 'none') {\n return true;\n } else if (IsOverlaidTrack(_)) {\n let isFound = false;\n _._overlay.forEach(t => {\n if (isFound) return;\n\n if (IsChannelDeep(t.y) && t.y.axis && t.y.axis !== 'none') {\n isFound = true;\n }\n });\n return isFound;\n }\n return false;\n}\n\n/* ----------------------------- MOUSE EVENT ----------------------------- */\n\nexport function IsMouseEventsDeep(_?: boolean | MouseEventsDeep): _ is MouseEventsDeep {\n return typeof _ === 'object';\n}\n","/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.URI = global.URI || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction merge() {\n for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {\n sets[_key] = arguments[_key];\n }\n\n if (sets.length > 1) {\n sets[0] = sets[0].slice(0, -1);\n var xl = sets.length - 1;\n for (var x = 1; x < xl; ++x) {\n sets[x] = sets[x].slice(1, -1);\n }\n sets[xl] = sets[xl].slice(1);\n return sets.join('');\n } else {\n return sets[0];\n }\n}\nfunction subexp(str) {\n return \"(?:\" + str + \")\";\n}\nfunction typeOf(o) {\n return o === undefined ? \"undefined\" : o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nfunction toArray(obj) {\n return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];\n}\nfunction assign(target, source) {\n var obj = target;\n if (source) {\n for (var key in source) {\n obj[key] = source[key];\n }\n }\n return obj;\n}\n\nfunction buildExps(isIRI) {\n var ALPHA$$ = \"[A-Za-z]\",\n CR$ = \"[\\\\x0D]\",\n DIGIT$$ = \"[0-9]\",\n DQUOTE$$ = \"[\\\\x22]\",\n HEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),\n //case-insensitive\n LF$$ = \"[\\\\x0A]\",\n SP$$ = \"[\\\\x20]\",\n PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),\n //expanded\n GEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n SUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n UCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",\n //subset, excludes bidi control characters\n IPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",\n //subset\n UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n USERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n DEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n DEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),\n //relaxed parsing rules\n IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n H16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n LS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n IPV6ADDRESS1$ = subexp(subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$),\n // 6( h16 \":\" ) ls32\n IPV6ADDRESS2$ = subexp(\"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$),\n // \"::\" 5( h16 \":\" ) ls32\n IPV6ADDRESS3$ = subexp(subexp(H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$),\n //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$),\n //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$),\n //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$),\n //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$),\n //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$),\n //[ *5( h16 \":\" ) h16 ] \"::\" h16\n IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"),\n //[ *6( h16 \":\" ) h16 ] \"::\"\n IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n ZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),\n //RFC 6874\n IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),\n //RFC 6874\n IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),\n //RFC 6874, with relaxed parsing rules\n IPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n IP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),\n //RFC 6874\n REG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n HOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n PORT$ = subexp(DIGIT$$ + \"*\"),\n AUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n PCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n SEGMENT$ = subexp(PCHAR$ + \"*\"),\n SEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n PATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n PATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),\n //simplified\n PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),\n //simplified\n PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),\n //simplified\n PATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n PATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n QUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n FRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n HIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n RELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n RELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n URI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n ABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n GENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n RELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n ABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n SAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n AUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\";\n return {\n NOT_SCHEME: new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n NOT_USERINFO: new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_HOST: new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_PATH: new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_PATH_NOSCHEME: new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_QUERY: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n NOT_FRAGMENT: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n ESCAPE: new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n UNRESERVED: new RegExp(UNRESERVED$$, \"g\"),\n OTHER_CHARS: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n PCT_ENCODED: new RegExp(PCT_ENCODED$, \"g\"),\n IPV4ADDRESS: new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n IPV6ADDRESS: new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n };\n}\nvar URI_PROTOCOL = buildExps(false);\n\nvar IRI_PROTOCOL = buildExps(true);\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\n/** Highest positive signed 32-bit float value */\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nvar regexPunycode = /^xn--/;\nvar regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error$1(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tvar result = [];\n\tvar length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tvar parts = string.split('@');\n\tvar result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tvar labels = string.split('.');\n\tvar encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t// Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nvar ucs2encode = function ucs2encode(array) {\n\treturn String.fromCodePoint.apply(String, toConsumableArray(array));\n};\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nvar basicToDigit = function basicToDigit(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nvar digitToBasic = function digitToBasic(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nvar adapt = function adapt(delta, numPoints, firstTime) {\n\tvar k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nvar decode = function decode(input) {\n\t// Don't use UCS-2.\n\tvar output = [];\n\tvar inputLength = input.length;\n\tvar i = 0;\n\tvar n = initialN;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tvar basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (var j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror$1('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tvar oldi = i;\n\t\tfor (var w = 1, k = base;; /* no condition */k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror$1('invalid-input');\n\t\t\t}\n\n\t\t\tvar digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\t\t}\n\n\t\tvar out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\t}\n\n\treturn String.fromCodePoint.apply(String, output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nvar encode = function encode(input) {\n\tvar output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tvar inputLength = input.length;\n\n\t// Initialize the state.\n\tvar n = initialN;\n\tvar delta = 0;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points.\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _currentValue2 = _step.value;\n\n\t\t\tif (_currentValue2 < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(_currentValue2));\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar basicLength = output.length;\n\tvar handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tvar m = maxInt;\n\t\tvar _iteratorNormalCompletion2 = true;\n\t\tvar _didIteratorError2 = false;\n\t\tvar _iteratorError2 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\tvar currentValue = _step2.value;\n\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow.\n\t\t} catch (err) {\n\t\t\t_didIteratorError2 = true;\n\t\t\t_iteratorError2 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t_iterator2.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tvar _iteratorNormalCompletion3 = true;\n\t\tvar _didIteratorError3 = false;\n\t\tvar _iteratorError3 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\tvar _currentValue = _step3.value;\n\n\t\t\t\tif (_currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror$1('overflow');\n\t\t\t\t}\n\t\t\t\tif (_currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\t\tvar q = delta;\n\t\t\t\t\tfor (var k = base;; /* no condition */k += base) {\n\t\t\t\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar qMinusT = q - t;\n\t\t\t\t\t\tvar baseMinusT = base - t;\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t_didIteratorError3 = true;\n\t\t\t_iteratorError3 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t_iterator3.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nvar toUnicode = function toUnicode(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nvar toASCII = function toASCII(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nvar punycode = {\n\t/**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n\t'version': '2.1.0',\n\t/**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\n/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\nvar SCHEMES = {};\nfunction pctEncChar(chr) {\n var c = chr.charCodeAt(0);\n var e = void 0;\n if (c < 16) e = \"%0\" + c.toString(16).toUpperCase();else if (c < 128) e = \"%\" + c.toString(16).toUpperCase();else if (c < 2048) e = \"%\" + (c >> 6 | 192).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();else e = \"%\" + (c >> 12 | 224).toString(16).toUpperCase() + \"%\" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();\n return e;\n}\nfunction pctDecChars(str) {\n var newStr = \"\";\n var i = 0;\n var il = str.length;\n while (i < il) {\n var c = parseInt(str.substr(i + 1, 2), 16);\n if (c < 128) {\n newStr += String.fromCharCode(c);\n i += 3;\n } else if (c >= 194 && c < 224) {\n if (il - i >= 6) {\n var c2 = parseInt(str.substr(i + 4, 2), 16);\n newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);\n } else {\n newStr += str.substr(i, 6);\n }\n i += 6;\n } else if (c >= 224) {\n if (il - i >= 9) {\n var _c = parseInt(str.substr(i + 4, 2), 16);\n var c3 = parseInt(str.substr(i + 7, 2), 16);\n newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);\n } else {\n newStr += str.substr(i, 9);\n }\n i += 9;\n } else {\n newStr += str.substr(i, 3);\n i += 3;\n }\n }\n return newStr;\n}\nfunction _normalizeComponentEncoding(components, protocol) {\n function decodeUnreserved(str) {\n var decStr = pctDecChars(str);\n return !decStr.match(protocol.UNRESERVED) ? str : decStr;\n }\n if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n return components;\n}\n\nfunction _stripLeadingZeros(str) {\n return str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\nfunction _normalizeIPv4(host, protocol) {\n var matches = host.match(protocol.IPV4ADDRESS) || [];\n\n var _matches = slicedToArray(matches, 2),\n address = _matches[1];\n\n if (address) {\n return address.split(\".\").map(_stripLeadingZeros).join(\".\");\n } else {\n return host;\n }\n}\nfunction _normalizeIPv6(host, protocol) {\n var matches = host.match(protocol.IPV6ADDRESS) || [];\n\n var _matches2 = slicedToArray(matches, 3),\n address = _matches2[1],\n zone = _matches2[2];\n\n if (address) {\n var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(),\n _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2),\n last = _address$toLowerCase$2[0],\n first = _address$toLowerCase$2[1];\n\n var firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n var lastFields = last.split(\":\").map(_stripLeadingZeros);\n var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n var fieldCount = isLastFieldIPv4Address ? 7 : 8;\n var lastFieldsStart = lastFields.length - fieldCount;\n var fields = Array(fieldCount);\n for (var x = 0; x < fieldCount; ++x) {\n fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n }\n if (isLastFieldIPv4Address) {\n fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n }\n var allZeroFields = fields.reduce(function (acc, field, index) {\n if (!field || field === \"0\") {\n var lastLongest = acc[acc.length - 1];\n if (lastLongest && lastLongest.index + lastLongest.length === index) {\n lastLongest.length++;\n } else {\n acc.push({ index: index, length: 1 });\n }\n }\n return acc;\n }, []);\n var longestZeroFields = allZeroFields.sort(function (a, b) {\n return b.length - a.length;\n })[0];\n var newHost = void 0;\n if (longestZeroFields && longestZeroFields.length > 1) {\n var newFirst = fields.slice(0, longestZeroFields.index);\n var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n newHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n } else {\n newHost = fields.join(\":\");\n }\n if (zone) {\n newHost += \"%\" + zone;\n }\n return newHost;\n } else {\n return host;\n }\n}\nvar URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nvar NO_MATCH_IS_UNDEFINED = \"\".match(/(){0}/)[1] === undefined;\nfunction parse(uriString) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var components = {};\n var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n if (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n var matches = uriString.match(URI_PARSE);\n if (matches) {\n if (NO_MATCH_IS_UNDEFINED) {\n //store each component\n components.scheme = matches[1];\n components.userinfo = matches[3];\n components.host = matches[4];\n components.port = parseInt(matches[5], 10);\n components.path = matches[6] || \"\";\n components.query = matches[7];\n components.fragment = matches[8];\n //fix port number\n if (isNaN(components.port)) {\n components.port = matches[5];\n }\n } else {\n //IE FIX for improper RegExp matching\n //store each component\n components.scheme = matches[1] || undefined;\n components.userinfo = uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined;\n components.host = uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined;\n components.port = parseInt(matches[5], 10);\n components.path = matches[6] || \"\";\n components.query = uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined;\n components.fragment = uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined;\n //fix port number\n if (isNaN(components.port)) {\n components.port = uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined;\n }\n }\n if (components.host) {\n //normalize IP hosts\n components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n }\n //determine reference type\n if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n components.reference = \"same-document\";\n } else if (components.scheme === undefined) {\n components.reference = \"relative\";\n } else if (components.fragment === undefined) {\n components.reference = \"absolute\";\n } else {\n components.reference = \"uri\";\n }\n //check for reference errors\n if (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n components.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n }\n //find scheme handler\n var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n //check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n //if host component is a domain name\n if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {\n //convert Unicode IDN -> ASCII IDN\n try {\n components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n } catch (e) {\n components.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n }\n }\n //convert IRI -> URI\n _normalizeComponentEncoding(components, URI_PROTOCOL);\n } else {\n //normalize encodings\n _normalizeComponentEncoding(components, protocol);\n }\n //perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(components, options);\n }\n } else {\n components.error = components.error || \"URI can not be parsed.\";\n }\n return components;\n}\n\nfunction _recomposeAuthority(components, options) {\n var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n var uriTokens = [];\n if (components.userinfo !== undefined) {\n uriTokens.push(components.userinfo);\n uriTokens.push(\"@\");\n }\n if (components.host !== undefined) {\n //normalize IP hosts, add brackets and escape zone separator for IPv6\n uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) {\n return \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\";\n }));\n }\n if (typeof components.port === \"number\" || typeof components.port === \"string\") {\n uriTokens.push(\":\");\n uriTokens.push(String(components.port));\n }\n return uriTokens.length ? uriTokens.join(\"\") : undefined;\n}\n\nvar RDS1 = /^\\.\\.?\\//;\nvar RDS2 = /^\\/\\.(\\/|$)/;\nvar RDS3 = /^\\/\\.\\.(\\/|$)/;\nvar RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\nfunction removeDotSegments(input) {\n var output = [];\n while (input.length) {\n if (input.match(RDS1)) {\n input = input.replace(RDS1, \"\");\n } else if (input.match(RDS2)) {\n input = input.replace(RDS2, \"/\");\n } else if (input.match(RDS3)) {\n input = input.replace(RDS3, \"/\");\n output.pop();\n } else if (input === \".\" || input === \"..\") {\n input = \"\";\n } else {\n var im = input.match(RDS5);\n if (im) {\n var s = im[0];\n input = input.slice(s.length);\n output.push(s);\n } else {\n throw new Error(\"Unexpected dot segment condition\");\n }\n }\n }\n return output.join(\"\");\n}\n\nfunction serialize(components) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;\n var uriTokens = [];\n //find scheme handler\n var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n //perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n if (components.host) {\n //if host component is an IPv6 address\n if (protocol.IPV6ADDRESS.test(components.host)) {}\n //TODO: normalize IPv6 address as per RFC 5952\n\n //if host component is a domain name\n else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {\n //convert IDN via punycode\n try {\n components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);\n } catch (e) {\n components.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n }\n }\n //normalize encoding\n _normalizeComponentEncoding(components, protocol);\n if (options.reference !== \"suffix\" && components.scheme) {\n uriTokens.push(components.scheme);\n uriTokens.push(\":\");\n }\n var authority = _recomposeAuthority(components, options);\n if (authority !== undefined) {\n if (options.reference !== \"suffix\") {\n uriTokens.push(\"//\");\n }\n uriTokens.push(authority);\n if (components.path && components.path.charAt(0) !== \"/\") {\n uriTokens.push(\"/\");\n }\n }\n if (components.path !== undefined) {\n var s = components.path;\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s);\n }\n if (authority === undefined) {\n s = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n }\n uriTokens.push(s);\n }\n if (components.query !== undefined) {\n uriTokens.push(\"?\");\n uriTokens.push(components.query);\n }\n if (components.fragment !== undefined) {\n uriTokens.push(\"#\");\n uriTokens.push(components.fragment);\n }\n return uriTokens.join(\"\"); //merge tokens into a string\n}\n\nfunction resolveComponents(base, relative) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var skipNormalization = arguments[3];\n\n var target = {};\n if (!skipNormalization) {\n base = parse(serialize(base, options), options); //normalize base components\n relative = parse(serialize(relative, options), options); //normalize relative components\n }\n options = options || {};\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme;\n //target.authority = relative.authority;\n target.userinfo = relative.userinfo;\n target.host = relative.host;\n target.port = relative.port;\n target.path = removeDotSegments(relative.path || \"\");\n target.query = relative.query;\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n //target.authority = relative.authority;\n target.userinfo = relative.userinfo;\n target.host = relative.host;\n target.port = relative.port;\n target.path = removeDotSegments(relative.path || \"\");\n target.query = relative.query;\n } else {\n if (!relative.path) {\n target.path = base.path;\n if (relative.query !== undefined) {\n target.query = relative.query;\n } else {\n target.query = base.query;\n }\n } else {\n if (relative.path.charAt(0) === \"/\") {\n target.path = removeDotSegments(relative.path);\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = \"/\" + relative.path;\n } else if (!base.path) {\n target.path = relative.path;\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n }\n target.path = removeDotSegments(target.path);\n }\n target.query = relative.query;\n }\n //target.authority = base.authority;\n target.userinfo = base.userinfo;\n target.host = base.host;\n target.port = base.port;\n }\n target.scheme = base.scheme;\n }\n target.fragment = relative.fragment;\n return target;\n}\n\nfunction resolve(baseURI, relativeURI, options) {\n var schemelessOptions = assign({ scheme: 'null' }, options);\n return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n}\n\nfunction normalize(uri, options) {\n if (typeof uri === \"string\") {\n uri = serialize(parse(uri, options), options);\n } else if (typeOf(uri) === \"object\") {\n uri = parse(serialize(uri, options), options);\n }\n return uri;\n}\n\nfunction equal(uriA, uriB, options) {\n if (typeof uriA === \"string\") {\n uriA = serialize(parse(uriA, options), options);\n } else if (typeOf(uriA) === \"object\") {\n uriA = serialize(uriA, options);\n }\n if (typeof uriB === \"string\") {\n uriB = serialize(parse(uriB, options), options);\n } else if (typeOf(uriB) === \"object\") {\n uriB = serialize(uriB, options);\n }\n return uriA === uriB;\n}\n\nfunction escapeComponent(str, options) {\n return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);\n}\n\nfunction unescapeComponent(str, options) {\n return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);\n}\n\nvar handler = {\n scheme: \"http\",\n domainHost: true,\n parse: function parse(components, options) {\n //report missing host\n if (!components.host) {\n components.error = components.error || \"HTTP URIs must have a host.\";\n }\n return components;\n },\n serialize: function serialize(components, options) {\n var secure = String(components.scheme).toLowerCase() === \"https\";\n //normalize the default port\n if (components.port === (secure ? 443 : 80) || components.port === \"\") {\n components.port = undefined;\n }\n //normalize the empty path\n if (!components.path) {\n components.path = \"/\";\n }\n //NOTE: We do not parse query strings for HTTP URIs\n //as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n //and not the HTTP spec.\n return components;\n }\n};\n\nvar handler$1 = {\n scheme: \"https\",\n domainHost: handler.domainHost,\n parse: handler.parse,\n serialize: handler.serialize\n};\n\nfunction isSecure(wsComponents) {\n return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n//RFC 6455\nvar handler$2 = {\n scheme: \"ws\",\n domainHost: true,\n parse: function parse(components, options) {\n var wsComponents = components;\n //indicate if the secure flag is set\n wsComponents.secure = isSecure(wsComponents);\n //construct resouce name\n wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n wsComponents.path = undefined;\n wsComponents.query = undefined;\n return wsComponents;\n },\n serialize: function serialize(wsComponents, options) {\n //normalize the default port\n if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n wsComponents.port = undefined;\n }\n //ensure scheme matches secure flag\n if (typeof wsComponents.secure === 'boolean') {\n wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws';\n wsComponents.secure = undefined;\n }\n //reconstruct path from resource name\n if (wsComponents.resourceName) {\n var _wsComponents$resourc = wsComponents.resourceName.split('?'),\n _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2),\n path = _wsComponents$resourc2[0],\n query = _wsComponents$resourc2[1];\n\n wsComponents.path = path && path !== '/' ? path : undefined;\n wsComponents.query = query;\n wsComponents.resourceName = undefined;\n }\n //forbid fragment component\n wsComponents.fragment = undefined;\n return wsComponents;\n }\n};\n\nvar handler$3 = {\n scheme: \"wss\",\n domainHost: handler$2.domainHost,\n parse: handler$2.parse,\n serialize: handler$2.serialize\n};\n\nvar O = {};\nvar isIRI = true;\n//RFC 3986\nvar UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nvar HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nvar PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nvar ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nvar QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nvar VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nvar SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nvar UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nvar PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nvar NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nvar NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nvar NOT_HFVALUE = NOT_HFNAME;\nfunction decodeUnreserved(str) {\n var decStr = pctDecChars(str);\n return !decStr.match(UNRESERVED) ? str : decStr;\n}\nvar handler$4 = {\n scheme: \"mailto\",\n parse: function parse$$1(components, options) {\n var mailtoComponents = components;\n var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(\",\") : [];\n mailtoComponents.path = undefined;\n if (mailtoComponents.query) {\n var unknownHeaders = false;\n var headers = {};\n var hfields = mailtoComponents.query.split(\"&\");\n for (var x = 0, xl = hfields.length; x < xl; ++x) {\n var hfield = hfields[x].split(\"=\");\n switch (hfield[0]) {\n case \"to\":\n var toAddrs = hfield[1].split(\",\");\n for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {\n to.push(toAddrs[_x]);\n }\n break;\n case \"subject\":\n mailtoComponents.subject = unescapeComponent(hfield[1], options);\n break;\n case \"body\":\n mailtoComponents.body = unescapeComponent(hfield[1], options);\n break;\n default:\n unknownHeaders = true;\n headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n break;\n }\n }\n if (unknownHeaders) mailtoComponents.headers = headers;\n }\n mailtoComponents.query = undefined;\n for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {\n var addr = to[_x2].split(\"@\");\n addr[0] = unescapeComponent(addr[0]);\n if (!options.unicodeSupport) {\n //convert Unicode IDN -> ASCII IDN\n try {\n addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n } catch (e) {\n mailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n }\n } else {\n addr[1] = unescapeComponent(addr[1], options).toLowerCase();\n }\n to[_x2] = addr.join(\"@\");\n }\n return mailtoComponents;\n },\n serialize: function serialize$$1(mailtoComponents, options) {\n var components = mailtoComponents;\n var to = toArray(mailtoComponents.to);\n if (to) {\n for (var x = 0, xl = to.length; x < xl; ++x) {\n var toAddr = String(to[x]);\n var atIdx = toAddr.lastIndexOf(\"@\");\n var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n var domain = toAddr.slice(atIdx + 1);\n //convert IDN via punycode\n try {\n domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);\n } catch (e) {\n components.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n to[x] = localPart + \"@\" + domain;\n }\n components.path = to.join(\",\");\n }\n var headers = mailtoComponents.headers = mailtoComponents.headers || {};\n if (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n if (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n var fields = [];\n for (var name in headers) {\n if (headers[name] !== O[name]) {\n fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + \"=\" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));\n }\n }\n if (fields.length) {\n components.query = fields.join(\"&\");\n }\n return components;\n }\n};\n\nvar URN_PARSE = /^([^\\:]+)\\:(.*)/;\n//RFC 2141\nvar handler$5 = {\n scheme: \"urn\",\n parse: function parse$$1(components, options) {\n var matches = components.path && components.path.match(URN_PARSE);\n var urnComponents = components;\n if (matches) {\n var scheme = options.scheme || urnComponents.scheme || \"urn\";\n var nid = matches[1].toLowerCase();\n var nss = matches[2];\n var urnScheme = scheme + \":\" + (options.nid || nid);\n var schemeHandler = SCHEMES[urnScheme];\n urnComponents.nid = nid;\n urnComponents.nss = nss;\n urnComponents.path = undefined;\n if (schemeHandler) {\n urnComponents = schemeHandler.parse(urnComponents, options);\n }\n } else {\n urnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n }\n return urnComponents;\n },\n serialize: function serialize$$1(urnComponents, options) {\n var scheme = options.scheme || urnComponents.scheme || \"urn\";\n var nid = urnComponents.nid;\n var urnScheme = scheme + \":\" + (options.nid || nid);\n var schemeHandler = SCHEMES[urnScheme];\n if (schemeHandler) {\n urnComponents = schemeHandler.serialize(urnComponents, options);\n }\n var uriComponents = urnComponents;\n var nss = urnComponents.nss;\n uriComponents.path = (nid || options.nid) + \":\" + nss;\n return uriComponents;\n }\n};\n\nvar UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\n//RFC 4122\nvar handler$6 = {\n scheme: \"urn:uuid\",\n parse: function parse(urnComponents, options) {\n var uuidComponents = urnComponents;\n uuidComponents.uuid = uuidComponents.nss;\n uuidComponents.nss = undefined;\n if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n uuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n }\n return uuidComponents;\n },\n serialize: function serialize(uuidComponents, options) {\n var urnComponents = uuidComponents;\n //normalize UUID\n urnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n return urnComponents;\n }\n};\n\nSCHEMES[handler.scheme] = handler;\nSCHEMES[handler$1.scheme] = handler$1;\nSCHEMES[handler$2.scheme] = handler$2;\nSCHEMES[handler$3.scheme] = handler$3;\nSCHEMES[handler$4.scheme] = handler$4;\nSCHEMES[handler$5.scheme] = handler$5;\nSCHEMES[handler$6.scheme] = handler$6;\n\nexports.SCHEMES = SCHEMES;\nexports.pctEncChar = pctEncChar;\nexports.pctDecChars = pctDecChars;\nexports.parse = parse;\nexports.removeDotSegments = removeDotSegments;\nexports.serialize = serialize;\nexports.resolveComponents = resolveComponents;\nexports.resolve = resolve;\nexports.normalize = normalize;\nexports.equal = equal;\nexports.escapeComponent = escapeComponent;\nexports.unescapeComponent = unescapeComponent;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=uri.all.js.map\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n var length = 0\n , len = str.length\n , pos = 0\n , value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n }\n }\n return length;\n};\n","'use strict';\n\n\nmodule.exports = {\n copy: copy,\n checkDataType: checkDataType,\n checkDataTypes: checkDataTypes,\n coerceToTypes: coerceToTypes,\n toHash: toHash,\n getProperty: getProperty,\n escapeQuotes: escapeQuotes,\n equal: require('fast-deep-equal'),\n ucs2length: require('./ucs2length'),\n varOccurences: varOccurences,\n varReplace: varReplace,\n schemaHasRules: schemaHasRules,\n schemaHasRulesExcept: schemaHasRulesExcept,\n schemaUnknownRules: schemaUnknownRules,\n toQuotedString: toQuotedString,\n getPathExpr: getPathExpr,\n getPath: getPath,\n getData: getData,\n unescapeFragment: unescapeFragment,\n unescapeJsonPointer: unescapeJsonPointer,\n escapeFragment: escapeFragment,\n escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n to = to || {};\n for (var key in o) to[key] = o[key];\n return to;\n}\n\n\nfunction checkDataType(dataType, data, strictNumbers, negate) {\n var EQUAL = negate ? ' !== ' : ' === '\n , AND = negate ? ' || ' : ' && '\n , OK = negate ? '!' : ''\n , NOT = negate ? '' : '!';\n switch (dataType) {\n case 'null': return data + EQUAL + 'null';\n case 'array': return OK + 'Array.isArray(' + data + ')';\n case 'object': return '(' + OK + data + AND +\n 'typeof ' + data + EQUAL + '\"object\"' + AND +\n NOT + 'Array.isArray(' + data + '))';\n case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n NOT + '(' + data + ' % 1)' +\n AND + data + EQUAL + data +\n (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n case 'number': return '(typeof ' + data + EQUAL + '\"' + dataType + '\"' +\n (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n }\n}\n\n\nfunction checkDataTypes(dataTypes, data, strictNumbers) {\n switch (dataTypes.length) {\n case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);\n default:\n var code = '';\n var types = toHash(dataTypes);\n if (types.array && types.object) {\n code = types.null ? '(': '(!' + data + ' || ';\n code += 'typeof ' + data + ' !== \"object\")';\n delete types.null;\n delete types.array;\n delete types.object;\n }\n if (types.number) delete types.integer;\n for (var t in types)\n code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);\n\n return code;\n }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n if (Array.isArray(dataTypes)) {\n var types = [];\n for (var i=0; i<dataTypes.length; i++) {\n var t = dataTypes[i];\n if (COERCE_TO_TYPES[t]) types[types.length] = t;\n else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;\n }\n if (types.length) return types;\n } else if (COERCE_TO_TYPES[dataTypes]) {\n return [dataTypes];\n } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {\n return ['array'];\n }\n}\n\n\nfunction toHash(arr) {\n var hash = {};\n for (var i=0; i<arr.length; i++) hash[arr[i]] = true;\n return hash;\n}\n\n\nvar IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nvar SINGLE_QUOTE = /'|\\\\/g;\nfunction getProperty(key) {\n return typeof key == 'number'\n ? '[' + key + ']'\n : IDENTIFIER.test(key)\n ? '.' + key\n : \"['\" + escapeQuotes(key) + \"']\";\n}\n\n\nfunction escapeQuotes(str) {\n return str.replace(SINGLE_QUOTE, '\\\\$&')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\t/g, '\\\\t');\n}\n\n\nfunction varOccurences(str, dataVar) {\n dataVar += '[^0-9]';\n var matches = str.match(new RegExp(dataVar, 'g'));\n return matches ? matches.length : 0;\n}\n\n\nfunction varReplace(str, dataVar, expr) {\n dataVar += '([^0-9])';\n expr = expr.replace(/\\$/g, '$$$$');\n return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\n}\n\n\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == 'boolean') return !schema;\n for (var key in schema) if (rules[key]) return true;\n}\n\n\nfunction schemaHasRulesExcept(schema, rules, exceptKeyword) {\n if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';\n for (var key in schema) if (key != exceptKeyword && rules[key]) return true;\n}\n\n\nfunction schemaUnknownRules(schema, rules) {\n if (typeof schema == 'boolean') return;\n for (var key in schema) if (!rules[key]) return key;\n}\n\n\nfunction toQuotedString(str) {\n return '\\'' + escapeQuotes(str) + '\\'';\n}\n\n\nfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\n var path = jsonPointers // false by default\n ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\n : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\n return joinPaths(currentPath, path);\n}\n\n\nfunction getPath(currentPath, prop, jsonPointers) {\n var path = jsonPointers // false by default\n ? toQuotedString('/' + escapeJsonPointer(prop))\n : toQuotedString(getProperty(prop));\n return joinPaths(currentPath, path);\n}\n\n\nvar JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, lvl, paths) {\n var up, jsonPointer, data, matches;\n if ($data === '') return 'rootData';\n if ($data[0] == '/') {\n if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);\n jsonPointer = $data;\n data = 'rootData';\n } else {\n matches = $data.match(RELATIVE_JSON_POINTER);\n if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);\n up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer == '#') {\n if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n return paths[lvl - up];\n }\n\n if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n data = 'data' + ((lvl - up) || '');\n if (!jsonPointer) return data;\n }\n\n var expr = data;\n var segments = jsonPointer.split('/');\n for (var i=0; i<segments.length; i++) {\n var segment = segments[i];\n if (segment) {\n data += getProperty(unescapeJsonPointer(segment));\n expr += ' && ' + data;\n }\n }\n return expr;\n}\n\n\nfunction joinPaths (a, b) {\n if (a == '\"\"') return b;\n return (a + ' + ' + b).replace(/([^\\\\])' \\+ '/g, '$1');\n}\n\n\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\n\n\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\n\n\nfunction escapeJsonPointer(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, '/').replace(/~0/g, '~');\n}\n","'use strict';\n\nvar util = require('./util');\n\nmodule.exports = SchemaObject;\n\nfunction SchemaObject(obj) {\n util.copy(obj, this);\n}\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","'use strict';\n\nvar URI = require('uri-js')\n , equal = require('fast-deep-equal')\n , util = require('./util')\n , SchemaObject = require('./schema_obj')\n , traverse = require('json-schema-traverse');\n\nmodule.exports = resolve;\n\nresolve.normalizeId = normalizeId;\nresolve.fullPath = getFullPath;\nresolve.url = resolveUrl;\nresolve.ids = resolveIds;\nresolve.inlineRef = inlineRef;\nresolve.schema = resolveSchema;\n\n/**\n * [resolve and compile the references ($ref)]\n * @this Ajv\n * @param {Function} compile reference to schema compilation funciton (localCompile)\n * @param {Object} root object with information about the root schema for the current schema\n * @param {String} ref reference to resolve\n * @return {Object|Function} schema object (if the schema can be inlined) or validation function\n */\nfunction resolve(compile, root, ref) {\n /* jshint validthis: true */\n var refVal = this._refs[ref];\n if (typeof refVal == 'string') {\n if (this._refs[refVal]) refVal = this._refs[refVal];\n else return resolve.call(this, compile, root, refVal);\n }\n\n refVal = refVal || this._schemas[ref];\n if (refVal instanceof SchemaObject) {\n return inlineRef(refVal.schema, this._opts.inlineRefs)\n ? refVal.schema\n : refVal.validate || this._compile(refVal);\n }\n\n var res = resolveSchema.call(this, root, ref);\n var schema, v, baseId;\n if (res) {\n schema = res.schema;\n root = res.root;\n baseId = res.baseId;\n }\n\n if (schema instanceof SchemaObject) {\n v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);\n } else if (schema !== undefined) {\n v = inlineRef(schema, this._opts.inlineRefs)\n ? schema\n : compile.call(this, schema, root, undefined, baseId);\n }\n\n return v;\n}\n\n\n/**\n * Resolve schema, its root and baseId\n * @this Ajv\n * @param {Object} root root object with properties schema, refVal, refs\n * @param {String} ref reference to resolve\n * @return {Object} object with properties schema, root, baseId\n */\nfunction resolveSchema(root, ref) {\n /* jshint validthis: true */\n var p = URI.parse(ref)\n , refPath = _getFullPath(p)\n , baseId = getFullPath(this._getId(root.schema));\n if (Object.keys(root.schema).length === 0 || refPath !== baseId) {\n var id = normalizeId(refPath);\n var refVal = this._refs[id];\n if (typeof refVal == 'string') {\n return resolveRecursive.call(this, root, refVal, p);\n } else if (refVal instanceof SchemaObject) {\n if (!refVal.validate) this._compile(refVal);\n root = refVal;\n } else {\n refVal = this._schemas[id];\n if (refVal instanceof SchemaObject) {\n if (!refVal.validate) this._compile(refVal);\n if (id == normalizeId(ref))\n return { schema: refVal, root: root, baseId: baseId };\n root = refVal;\n } else {\n return;\n }\n }\n if (!root.schema) return;\n baseId = getFullPath(this._getId(root.schema));\n }\n return getJsonPointer.call(this, p, baseId, root.schema, root);\n}\n\n\n/* @this Ajv */\nfunction resolveRecursive(root, ref, parsedRef) {\n /* jshint validthis: true */\n var res = resolveSchema.call(this, root, ref);\n if (res) {\n var schema = res.schema;\n var baseId = res.baseId;\n root = res.root;\n var id = this._getId(schema);\n if (id) baseId = resolveUrl(baseId, id);\n return getJsonPointer.call(this, parsedRef, baseId, schema, root);\n }\n}\n\n\nvar PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);\n/* @this Ajv */\nfunction getJsonPointer(parsedRef, baseId, schema, root) {\n /* jshint validthis: true */\n parsedRef.fragment = parsedRef.fragment || '';\n if (parsedRef.fragment.slice(0,1) != '/') return;\n var parts = parsedRef.fragment.split('/');\n\n for (var i = 1; i < parts.length; i++) {\n var part = parts[i];\n if (part) {\n part = util.unescapeFragment(part);\n schema = schema[part];\n if (schema === undefined) break;\n var id;\n if (!PREVENT_SCOPE_CHANGE[part]) {\n id = this._getId(schema);\n if (id) baseId = resolveUrl(baseId, id);\n if (schema.$ref) {\n var $ref = resolveUrl(baseId, schema.$ref);\n var res = resolveSchema.call(this, root, $ref);\n if (res) {\n schema = res.schema;\n root = res.root;\n baseId = res.baseId;\n }\n }\n }\n }\n }\n if (schema !== undefined && schema !== root.schema)\n return { schema: schema, root: root, baseId: baseId };\n}\n\n\nvar SIMPLE_INLINED = util.toHash([\n 'type', 'format', 'pattern',\n 'maxLength', 'minLength',\n 'maxProperties', 'minProperties',\n 'maxItems', 'minItems',\n 'maximum', 'minimum',\n 'uniqueItems', 'multipleOf',\n 'required', 'enum'\n]);\nfunction inlineRef(schema, limit) {\n if (limit === false) return false;\n if (limit === undefined || limit === true) return checkNoRef(schema);\n else if (limit) return countKeys(schema) <= limit;\n}\n\n\nfunction checkNoRef(schema) {\n var item;\n if (Array.isArray(schema)) {\n for (var i=0; i<schema.length; i++) {\n item = schema[i];\n if (typeof item == 'object' && !checkNoRef(item)) return false;\n }\n } else {\n for (var key in schema) {\n if (key == '$ref') return false;\n item = schema[key];\n if (typeof item == 'object' && !checkNoRef(item)) return false;\n }\n }\n return true;\n}\n\n\nfunction countKeys(schema) {\n var count = 0, item;\n if (Array.isArray(schema)) {\n for (var i=0; i<schema.length; i++) {\n item = schema[i];\n if (typeof item == 'object') count += countKeys(item);\n if (count == Infinity) return Infinity;\n }\n } else {\n for (var key in schema) {\n if (key == '$ref') return Infinity;\n if (SIMPLE_INLINED[key]) {\n count++;\n } else {\n item = schema[key];\n if (typeof item == 'object') count += countKeys(item) + 1;\n if (count == Infinity) return Infinity;\n }\n }\n }\n return count;\n}\n\n\nfunction getFullPath(id, normalize) {\n if (normalize !== false) id = normalizeId(id);\n var p = URI.parse(id);\n return _getFullPath(p);\n}\n\n\nfunction _getFullPath(p) {\n return URI.serialize(p).split('#')[0] + '#';\n}\n\n\nvar TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, '') : '';\n}\n\n\nfunction resolveUrl(baseId, id) {\n id = normalizeId(id);\n return URI.resolve(baseId, id);\n}\n\n\n/* @this Ajv */\nfunction resolveIds(schema) {\n var schemaId = normalizeId(this._getId(schema));\n var baseIds = {'': schemaId};\n var fullPaths = {'': getFullPath(schemaId, false)};\n var localRefs = {};\n var self = this;\n\n traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (jsonPtr === '') return;\n var id = self._getId(sch);\n var baseId = baseIds[parentJsonPtr];\n var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;\n if (keyIndex !== undefined)\n fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));\n\n if (typeof id == 'string') {\n id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);\n\n var refVal = self._refs[id];\n if (typeof refVal == 'string') refVal = self._refs[refVal];\n if (refVal && refVal.schema) {\n if (!equal(sch, refVal.schema))\n throw new Error('id \"' + id + '\" resolves to more than one schema');\n } else if (id != normalizeId(fullPath)) {\n if (id[0] == '#') {\n if (localRefs[id] && !equal(sch, localRefs[id]))\n throw new Error('id \"' + id + '\" resolves to more than one schema');\n localRefs[id] = sch;\n } else {\n self._refs[id] = fullPath;\n }\n }\n }\n baseIds[jsonPtr] = baseId;\n fullPaths[jsonPtr] = fullPath;\n });\n\n return localRefs;\n}\n","'use strict';\n\nvar resolve = require('./resolve');\n\nmodule.exports = {\n Validation: errorSubclass(ValidationError),\n MissingRef: errorSubclass(MissingRefError)\n};\n\n\nfunction ValidationError(errors) {\n this.message = 'validation failed';\n this.errors = errors;\n this.ajv = this.validation = true;\n}\n\n\nMissingRefError.message = function (baseId, ref) {\n return 'can\\'t resolve reference ' + ref + ' from id ' + baseId;\n};\n\n\nfunction MissingRefError(baseId, ref, message) {\n this.message = message || MissingRefError.message(baseId, ref);\n this.missingRef = resolve.url(baseId, ref);\n this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));\n}\n\n\nfunction errorSubclass(Subclass) {\n Subclass.prototype = Object.create(Error.prototype);\n Subclass.prototype.constructor = Subclass;\n return Subclass;\n}\n","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","'use strict';\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n var out = '';\n var $async = it.schema.$async === true,\n $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),\n $id = it.self._getId(it.schema);\n if (it.opts.strictKeywords) {\n var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);\n if ($unknownKwd) {\n var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;\n if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);\n else throw new Error($keywordsMsg);\n }\n }\n if (it.isTop) {\n out += ' var validate = ';\n if ($async) {\n it.async = true;\n out += 'async ';\n }\n out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \\'use strict\\'; ';\n if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n out += ' ' + ('/\\*# sourceURL=' + $id + ' */') + ' ';\n }\n }\n if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {\n var $keyword = 'false schema';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n if (it.schema === false) {\n if (it.isTop) {\n $breakOnError = true;\n } else {\n out += ' var ' + ($valid) + ' = false; ';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'false schema') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'boolean schema is false\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n if (it.isTop) {\n if ($async) {\n out += ' return data; ';\n } else {\n out += ' validate.errors = null; return true; ';\n }\n } else {\n out += ' var ' + ($valid) + ' = true; ';\n }\n }\n if (it.isTop) {\n out += ' }; return validate; ';\n }\n return out;\n }\n if (it.isTop) {\n var $top = it.isTop,\n $lvl = it.level = 0,\n $dataLvl = it.dataLevel = 0,\n $data = 'data';\n it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n it.baseId = it.baseId || it.rootId;\n delete it.isTop;\n it.dataPathArr = [\"\"];\n if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored in the schema root';\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n out += ' var vErrors = null; ';\n out += ' var errors = 0; ';\n out += ' if (rootData === undefined) rootData = data; ';\n } else {\n var $lvl = it.level,\n $dataLvl = it.dataLevel,\n $data = 'data' + ($dataLvl || '');\n if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n if ($async && !it.async) throw new Error('async schema in sync schema');\n out += ' var errs_' + ($lvl) + ' = errors;';\n }\n var $valid = 'valid' + $lvl,\n $breakOnError = !it.opts.allErrors,\n $closingBraces1 = '',\n $closingBraces2 = '';\n var $errorKeyword;\n var $typeSchema = it.schema.type,\n $typeIsArray = Array.isArray($typeSchema);\n if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {\n if ($typeIsArray) {\n if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');\n } else if ($typeSchema != 'null') {\n $typeSchema = [$typeSchema, 'null'];\n $typeIsArray = true;\n }\n }\n if ($typeIsArray && $typeSchema.length == 1) {\n $typeSchema = $typeSchema[0];\n $typeIsArray = false;\n }\n if (it.schema.$ref && $refKeywords) {\n if (it.opts.extendRefs == 'fail') {\n throw new Error('$ref: validation keywords used in schema at path \"' + it.errSchemaPath + '\" (see option extendRefs)');\n } else if (it.opts.extendRefs !== true) {\n $refKeywords = false;\n it.logger.warn('$ref: keywords ignored in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n if (it.schema.$comment && it.opts.$comment) {\n out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));\n }\n if ($typeSchema) {\n if (it.opts.coerceTypes) {\n var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n }\n var $rulesGroup = it.RULES.types[$typeSchema];\n if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type';\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type',\n $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\n out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';\n if ($coerceToTypes) {\n var $dataType = 'dataType' + $lvl,\n $coerced = 'coerced' + $lvl;\n out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\n if (it.opts.coerceTypes == 'array') {\n out += ' if (' + ($dataType) + ' == \\'object\\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';\n }\n out += ' if (' + ($coerced) + ' !== undefined) ; ';\n var arr1 = $coerceToTypes;\n if (arr1) {\n var $type, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $type = arr1[$i += 1];\n if ($type == 'string') {\n out += ' else if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\n } else if ($type == 'number' || $type == 'integer') {\n out += ' else if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\n if ($type == 'integer') {\n out += ' && !(' + ($data) + ' % 1)';\n }\n out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\n } else if ($type == 'boolean') {\n out += ' else if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\n } else if ($type == 'null') {\n out += ' else if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\n } else if (it.opts.coerceTypes == 'array' && $type == 'array') {\n out += ' else if (' + ($dataType) + ' == \\'string\\' || ' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';\n }\n }\n }\n out += ' else { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } if (' + ($coerced) + ' !== undefined) { ';\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' ' + ($data) + ' = ' + ($coerced) + '; ';\n if (!$dataLvl) {\n out += 'if (' + ($parentData) + ' !== undefined)';\n }\n out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n }\n out += ' } ';\n }\n }\n if (it.schema.$ref && !$refKeywords) {\n out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';\n if ($breakOnError) {\n out += ' } if (errors === ';\n if ($top) {\n out += '0';\n } else {\n out += 'errs_' + ($lvl);\n }\n out += ') { ';\n $closingBraces2 += '}';\n }\n } else {\n var arr2 = it.RULES;\n if (arr2) {\n var $rulesGroup, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $rulesGroup = arr2[i2 += 1];\n if ($shouldUseGroup($rulesGroup)) {\n if ($rulesGroup.type) {\n out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';\n }\n if (it.opts.useDefaults) {\n if ($rulesGroup.type == 'object' && it.schema.properties) {\n var $schema = it.schema.properties,\n $schemaKeys = Object.keys($schema);\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ($sch.default !== undefined) {\n var $passData = $data + it.util.getProperty($propertyKey);\n if (it.compositeRule) {\n if (it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored for: ' + $passData;\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n } else {\n out += ' if (' + ($passData) + ' === undefined ';\n if (it.opts.useDefaults == 'empty') {\n out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n }\n out += ' ) ' + ($passData) + ' = ';\n if (it.opts.useDefaults == 'shared') {\n out += ' ' + (it.useDefault($sch.default)) + ' ';\n } else {\n out += ' ' + (JSON.stringify($sch.default)) + ' ';\n }\n out += '; ';\n }\n }\n }\n }\n } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\n var arr4 = it.schema.items;\n if (arr4) {\n var $sch, $i = -1,\n l4 = arr4.length - 1;\n while ($i < l4) {\n $sch = arr4[$i += 1];\n if ($sch.default !== undefined) {\n var $passData = $data + '[' + $i + ']';\n if (it.compositeRule) {\n if (it.opts.strictDefaults) {\n var $defaultMsg = 'default is ignored for: ' + $passData;\n if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n else throw new Error($defaultMsg);\n }\n } else {\n out += ' if (' + ($passData) + ' === undefined ';\n if (it.opts.useDefaults == 'empty') {\n out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n }\n out += ' ) ' + ($passData) + ' = ';\n if (it.opts.useDefaults == 'shared') {\n out += ' ' + (it.useDefault($sch.default)) + ' ';\n } else {\n out += ' ' + (JSON.stringify($sch.default)) + ' ';\n }\n out += '; ';\n }\n }\n }\n }\n }\n }\n var arr5 = $rulesGroup.rules;\n if (arr5) {\n var $rule, i5 = -1,\n l5 = arr5.length - 1;\n while (i5 < l5) {\n $rule = arr5[i5 += 1];\n if ($shouldUseRule($rule)) {\n var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n if ($code) {\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n $closingBraces1 += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces1) + ' ';\n $closingBraces1 = '';\n }\n if ($rulesGroup.type) {\n out += ' } ';\n if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n out += ' else { ';\n var $schemaPath = it.schemaPath + '.type',\n $errSchemaPath = it.errSchemaPath + '/type';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ';\n if ($typeIsArray) {\n out += '' + ($typeSchema.join(\",\"));\n } else {\n out += '' + ($typeSchema);\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (errors === ';\n if ($top) {\n out += '0';\n } else {\n out += 'errs_' + ($lvl);\n }\n out += ') { ';\n $closingBraces2 += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces2) + ' ';\n }\n if ($top) {\n if ($async) {\n out += ' if (errors === 0) return data; ';\n out += ' else throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; ';\n out += ' return errors === 0; ';\n }\n out += ' }; return validate;';\n } else {\n out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\n }\n\n function $shouldUseGroup($rulesGroup) {\n var rules = $rulesGroup.rules;\n for (var i = 0; i < rules.length; i++)\n if ($shouldUseRule(rules[i])) return true;\n }\n\n function $shouldUseRule($rule) {\n return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n }\n\n function $ruleImplementsSomeKeyword($rule) {\n var impl = $rule.implements;\n for (var i = 0; i < impl.length; i++)\n if (it.schema[impl[i]] !== undefined) return true;\n }\n return out;\n}\n","'use strict';\n\nvar resolve = require('./resolve')\n , util = require('./util')\n , errorClasses = require('./error_classes')\n , stableStringify = require('fast-json-stable-stringify');\n\nvar validateGenerator = require('../dotjs/validate');\n\n/**\n * Functions below are used inside compiled validations function\n */\n\nvar ucs2length = util.ucs2length;\nvar equal = require('fast-deep-equal');\n\n// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError = errorClasses.Validation;\n\nmodule.exports = compile;\n\n\n/**\n * Compiles schema to validation function\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Object} root object with information about the root schema for this schema\n * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\n * @param {String} baseId base ID for IDs in the schema\n * @return {Function} validation function\n */\nfunction compile(schema, root, localRefs, baseId) {\n /* jshint validthis: true, evil: true */\n /* eslint no-shadow: 0 */\n var self = this\n , opts = this._opts\n , refVal = [ undefined ]\n , refs = {}\n , patterns = []\n , patternsHash = {}\n , defaults = []\n , defaultsHash = {}\n , customRules = [];\n\n root = root || { schema: schema, refVal: refVal, refs: refs };\n\n var c = checkCompiling.call(this, schema, root, baseId);\n var compilation = this._compilations[c.index];\n if (c.compiling) return (compilation.callValidate = callValidate);\n\n var formats = this._formats;\n var RULES = this.RULES;\n\n try {\n var v = localCompile(schema, root, localRefs, baseId);\n compilation.validate = v;\n var cv = compilation.callValidate;\n if (cv) {\n cv.schema = v.schema;\n cv.errors = null;\n cv.refs = v.refs;\n cv.refVal = v.refVal;\n cv.root = v.root;\n cv.$async = v.$async;\n if (opts.sourceCode) cv.source = v.source;\n }\n return v;\n } finally {\n endCompiling.call(this, schema, root, baseId);\n }\n\n /* @this {*} - custom context, see passContext option */\n function callValidate() {\n /* jshint validthis: true */\n var validate = compilation.validate;\n var result = validate.apply(this, arguments);\n callValidate.errors = validate.errors;\n return result;\n }\n\n function localCompile(_schema, _root, localRefs, baseId) {\n var isRoot = !_root || (_root && _root.schema == _schema);\n if (_root.schema != root.schema)\n return compile.call(self, _schema, _root, localRefs, baseId);\n\n var $async = _schema.$async === true;\n\n var sourceCode = validateGenerator({\n isTop: true,\n schema: _schema,\n isRoot: isRoot,\n baseId: baseId,\n root: _root,\n schemaPath: '',\n errSchemaPath: '#',\n errorPath: '\"\"',\n MissingRefError: errorClasses.MissingRef,\n RULES: RULES,\n validate: validateGenerator,\n util: util,\n resolve: resolve,\n resolveRef: resolveRef,\n usePattern: usePattern,\n useDefault: useDefault,\n useCustomRule: useCustomRule,\n opts: opts,\n formats: formats,\n logger: self.logger,\n self: self\n });\n\n sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\n + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\n + sourceCode;\n\n if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);\n // console.log('\\n\\n\\n *** \\n', JSON.stringify(sourceCode));\n var validate;\n try {\n var makeValidate = new Function(\n 'self',\n 'RULES',\n 'formats',\n 'root',\n 'refVal',\n 'defaults',\n 'customRules',\n 'equal',\n 'ucs2length',\n 'ValidationError',\n sourceCode\n );\n\n validate = makeValidate(\n self,\n RULES,\n formats,\n root,\n refVal,\n defaults,\n customRules,\n equal,\n ucs2length,\n ValidationError\n );\n\n refVal[0] = validate;\n } catch(e) {\n self.logger.error('Error compiling schema, function code:', sourceCode);\n throw e;\n }\n\n validate.schema = _schema;\n validate.errors = null;\n validate.refs = refs;\n validate.refVal = refVal;\n validate.root = isRoot ? validate : _root;\n if ($async) validate.$async = true;\n if (opts.sourceCode === true) {\n validate.source = {\n code: sourceCode,\n patterns: patterns,\n defaults: defaults\n };\n }\n\n return validate;\n }\n\n function resolveRef(baseId, ref, isRoot) {\n ref = resolve.url(baseId, ref);\n var refIndex = refs[ref];\n var _refVal, refCode;\n if (refIndex !== undefined) {\n _refVal = refVal[refIndex];\n refCode = 'refVal[' + refIndex + ']';\n return resolvedRef(_refVal, refCode);\n }\n if (!isRoot && root.refs) {\n var rootRefId = root.refs[ref];\n if (rootRefId !== undefined) {\n _refVal = root.refVal[rootRefId];\n refCode = addLocalRef(ref, _refVal);\n return resolvedRef(_refVal, refCode);\n }\n }\n\n refCode = addLocalRef(ref);\n var v = resolve.call(self, localCompile, root, ref);\n if (v === undefined) {\n var localSchema = localRefs && localRefs[ref];\n if (localSchema) {\n v = resolve.inlineRef(localSchema, opts.inlineRefs)\n ? localSchema\n : compile.call(self, localSchema, root, localRefs, baseId);\n }\n }\n\n if (v === undefined) {\n removeLocalRef(ref);\n } else {\n replaceLocalRef(ref, v);\n return resolvedRef(v, refCode);\n }\n }\n\n function addLocalRef(ref, v) {\n var refId = refVal.length;\n refVal[refId] = v;\n refs[ref] = refId;\n return 'refVal' + refId;\n }\n\n function removeLocalRef(ref) {\n delete refs[ref];\n }\n\n function replaceLocalRef(ref, v) {\n var refId = refs[ref];\n refVal[refId] = v;\n }\n\n function resolvedRef(refVal, code) {\n return typeof refVal == 'object' || typeof refVal == 'boolean'\n ? { code: code, schema: refVal, inline: true }\n : { code: code, $async: refVal && !!refVal.$async };\n }\n\n function usePattern(regexStr) {\n var index = patternsHash[regexStr];\n if (index === undefined) {\n index = patternsHash[regexStr] = patterns.length;\n patterns[index] = regexStr;\n }\n return 'pattern' + index;\n }\n\n function useDefault(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n return '' + value;\n case 'string':\n return util.toQuotedString(value);\n case 'object':\n if (value === null) return 'null';\n var valueStr = stableStringify(value);\n var index = defaultsHash[valueStr];\n if (index === undefined) {\n index = defaultsHash[valueStr] = defaults.length;\n defaults[index] = value;\n }\n return 'default' + index;\n }\n }\n\n function useCustomRule(rule, schema, parentSchema, it) {\n if (self._opts.validateSchema !== false) {\n var deps = rule.definition.dependencies;\n if (deps && !deps.every(function(keyword) {\n return Object.prototype.hasOwnProperty.call(parentSchema, keyword);\n }))\n throw new Error('parent schema must have all required keywords: ' + deps.join(','));\n\n var validateSchema = rule.definition.validateSchema;\n if (validateSchema) {\n var valid = validateSchema(schema);\n if (!valid) {\n var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);\n if (self._opts.validateSchema == 'log') self.logger.error(message);\n else throw new Error(message);\n }\n }\n }\n\n var compile = rule.definition.compile\n , inline = rule.definition.inline\n , macro = rule.definition.macro;\n\n var validate;\n if (compile) {\n validate = compile.call(self, schema, parentSchema, it);\n } else if (macro) {\n validate = macro.call(self, schema, parentSchema, it);\n if (opts.validateSchema !== false) self.validateSchema(validate, true);\n } else if (inline) {\n validate = inline.call(self, it, rule.keyword, schema, parentSchema);\n } else {\n validate = rule.definition.validate;\n if (!validate) return;\n }\n\n if (validate === undefined)\n throw new Error('custom keyword \"' + rule.keyword + '\"failed to compile');\n\n var index = customRules.length;\n customRules[index] = validate;\n\n return {\n code: 'customRule' + index,\n validate: validate\n };\n }\n}\n\n\n/**\n * Checks if the schema is currently compiled\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Object} object with properties \"index\" (compilation index) and \"compiling\" (boolean)\n */\nfunction checkCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var index = compIndex.call(this, schema, root, baseId);\n if (index >= 0) return { index: index, compiling: true };\n index = this._compilations.length;\n this._compilations[index] = {\n schema: schema,\n root: root,\n baseId: baseId\n };\n return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var i = compIndex.call(this, schema, root, baseId);\n if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n /* jshint validthis: true */\n for (var i=0; i<this._compilations.length; i++) {\n var c = this._compilations[i];\n if (c.schema == schema && c.root == root && c.baseId == baseId) return i;\n }\n return -1;\n}\n\n\nfunction patternCode(i, patterns) {\n return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';\n}\n\n\nfunction defaultCode(i) {\n return 'var default' + i + ' = defaults[' + i + '];';\n}\n\n\nfunction refValCode(i, refVal) {\n return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';\n}\n\n\nfunction customRuleCode(i) {\n return 'var customRule' + i + ' = customRules[' + i + '];';\n}\n\n\nfunction vars(arr, statement) {\n if (!arr.length) return '';\n var code = '';\n for (var i=0; i<arr.length; i++)\n code += statement(i, arr);\n return code;\n}\n","'use strict';\n\n\nvar Cache = module.exports = function Cache() {\n this._cache = {};\n};\n\n\nCache.prototype.put = function Cache_put(key, value) {\n this._cache[key] = value;\n};\n\n\nCache.prototype.get = function Cache_get(key) {\n return this._cache[key];\n};\n\n\nCache.prototype.del = function Cache_del(key) {\n delete this._cache[key];\n};\n\n\nCache.prototype.clear = function Cache_clear() {\n this._cache = {};\n};\n","'use strict';\n\nvar util = require('./util');\n\nvar DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nvar DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];\nvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nvar HOSTNAME = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i;\nvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nvar URIREF = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\n// uri-template: https://tools.ietf.org/html/rfc6570\nvar URITEMPLATE = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n mode = mode == 'full' ? 'full' : 'fast';\n return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n 'uri-reference': /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n 'uri-template': URITEMPLATE,\n url: URL,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n hostname: HOSTNAME,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: UUID,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n date: date,\n time: time,\n 'date-time': date_time,\n uri: uri,\n 'uri-reference': URIREF,\n 'uri-template': URITEMPLATE,\n url: URL,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: HOSTNAME,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n uuid: UUID,\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n var matches = str.match(DATE);\n if (!matches) return false;\n\n var year = +matches[1];\n var month = +matches[2];\n var day = +matches[3];\n\n return month >= 1 && month <= 12 && day >= 1 &&\n day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n var matches = str.match(TIME);\n if (!matches) return false;\n\n var hour = matches[1];\n var minute = matches[2];\n var second = matches[3];\n var timeZone = matches[5];\n return ((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour == 23 && minute == 59 && second == 60)) &&\n (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n var dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str)) return false;\n try {\n new RegExp(str);\n return true;\n } catch(e) {\n return false;\n }\n}\n","'use strict';\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $async, $refCode;\n if ($schema == '#' || $schema == '#/') {\n if (it.isRoot) {\n $async = it.async;\n $refCode = 'validate';\n } else {\n $async = it.root.schema.$async === true;\n $refCode = 'root.refVal[0]';\n }\n } else {\n var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n if ($refVal === undefined) {\n var $message = it.MissingRefError.message(it.baseId, $schema);\n if (it.opts.missingRefs == 'fail') {\n it.logger.error($message);\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n } else if (it.opts.missingRefs == 'ignore') {\n it.logger.warn($message);\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n throw new it.MissingRefError(it.baseId, $schema, $message);\n }\n } else if ($refVal.inline) {\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $refVal.schema;\n $it.schemaPath = '';\n $it.errSchemaPath = $schema;\n var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n }\n } else {\n $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n $refCode = $refVal.code;\n }\n }\n if ($refCode) {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n if (it.opts.passContext) {\n out += ' ' + ($refCode) + '.call(this, ';\n } else {\n out += ' ' + ($refCode) + '( ';\n }\n out += ' ' + ($data) + ', (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) ';\n var __callValidate = out;\n out = $$outStack.pop();\n if ($async) {\n if (!it.async) throw new Error('async schema referenced by sync schema');\n if ($breakOnError) {\n out += ' var ' + ($valid) + '; ';\n }\n out += ' try { await ' + (__callValidate) + '; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = true; ';\n }\n out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = false; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($valid) + ') { ';\n }\n } else {\n out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $allSchemasEmpty = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n $allSchemasEmpty = false;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($breakOnError) {\n if ($allSchemasEmpty) {\n out += ' if (true) { ';\n } else {\n out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $noEmptySchema = $schema.every(function($sch) {\n return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all));\n });\n if ($noEmptySchema) {\n var $currentBaseId = $it.baseId;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n $closingBraces += '}';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match some schema in anyOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $comment = it.util.toQuotedString($schema);\n if (it.opts.$comment === true) {\n out += ' console.log(' + ($comment) + ');';\n } else if (typeof it.opts.$comment == 'function') {\n out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!$isData) {\n out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to constant\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId,\n $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all));\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($nonEmptySchema) {\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (' + ($nextValid) + ') break; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n } else {\n out += ' if (' + ($data) + '.length == 0) {';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should contain a valid item\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n if ($nonEmptySchema) {\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n }\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $schemaDeps = {},\n $propertyDeps = {},\n $ownProperties = it.opts.ownProperties;\n for ($property in $schema) {\n if ($property == '__proto__') continue;\n var $sch = $schema[$property];\n var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n $deps[$property] = $sch;\n }\n out += 'var ' + ($errs) + ' = errors;';\n var $currentErrorPath = it.errorPath;\n out += 'var missing' + ($lvl) + ';';\n for (var $property in $propertyDeps) {\n $deps = $propertyDeps[$property];\n if ($deps.length) {\n out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n if ($breakOnError) {\n out += ' && ( ';\n var arr1 = $deps;\n if (arr1) {\n var $propertyKey, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $propertyKey = arr1[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ')) { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n out += ' ) { ';\n var arr2 = $deps;\n if (arr2) {\n var $propertyKey, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $propertyKey = arr2[i2 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n out += ' } ';\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n var $currentBaseId = $it.baseId;\n for (var $property in $schemaDeps) {\n var $sch = $schemaDeps[$property];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n out += ') { ';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + it.util.getProperty($property);\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $i = 'i' + $lvl,\n $vSchema = 'schema' + $lvl;\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ';';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to one of the allowed values\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n if (it.opts.format === false) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $unknownFormats = it.opts.unknownFormats,\n $allowUnknown = Array.isArray($unknownFormats);\n if ($isData) {\n var $format = 'format' + $lvl,\n $isObject = 'isObject' + $lvl,\n $formatType = 'formatType' + $lvl;\n out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n if (it.async) {\n out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n }\n out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' (';\n if ($unknownFormats != 'ignore') {\n out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n if ($allowUnknown) {\n out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n }\n out += ') || ';\n }\n out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n if (it.async) {\n out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n } else {\n out += ' ' + ($format) + '(' + ($data) + ') ';\n }\n out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n } else {\n var $format = it.formats[$schema];\n if (!$format) {\n if ($unknownFormats == 'ignore') {\n it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else {\n throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n var $formatType = $isObject && $format.type || 'string';\n if ($isObject) {\n var $async = $format.async === true;\n $format = $format.validate;\n }\n if ($formatType != $ruleType) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n if ($async) {\n if (!it.async) throw new Error('async format in sync schema');\n var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n } else {\n out += ' if (! ';\n var $formatRef = 'formats' + it.util.getProperty($schema);\n if ($isObject) $formatRef += '.validate';\n if (typeof $format == 'function') {\n out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n } else {\n out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n }\n out += ') { ';\n }\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match format \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $thenSch = it.schema['then'],\n $elseSch = it.schema['else'],\n $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)),\n $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)),\n $currentBaseId = $it.baseId;\n if ($thenPresent || $elsePresent) {\n var $ifClause;\n $it.createErrors = false;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n $it.createErrors = true;\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n if ($thenPresent) {\n out += ' if (' + ($nextValid) + ') { ';\n $it.schema = it.schema['then'];\n $it.schemaPath = it.schemaPath + '.then';\n $it.errSchemaPath = it.errSchemaPath + '/then';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n } else {\n $ifClause = '\\'then\\'';\n }\n out += ' } ';\n if ($elsePresent) {\n out += ' else { ';\n }\n } else {\n out += ' if (!' + ($nextValid) + ') { ';\n }\n if ($elsePresent) {\n $it.schema = it.schema['else'];\n $it.schemaPath = it.schemaPath + '.else';\n $it.errSchemaPath = it.errSchemaPath + '/else';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n } else {\n $ifClause = '\\'else\\'';\n }\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId;\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if (Array.isArray($schema)) {\n var $additionalItems = it.schema.additionalItems;\n if ($additionalItems === false) {\n out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n var $passData = $data + '[' + $i + ']';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n $it.dataPathArr[$dataNxt] = $i;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n $it.schema = $additionalItems;\n $it.schemaPath = it.schemaPath + '.additionalItems';\n $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $isMax = $keyword == 'maximum',\n $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n $schemaExcl = it.schema[$exclusiveKeyword],\n $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n $op = $isMax ? '<' : '>',\n $notOp = $isMax ? '>' : '<',\n $errorKeyword = undefined;\n if (!($isData || typeof $schema == 'number' || $schema === undefined)) {\n throw new Error($keyword + ' must be number');\n }\n if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {\n throw new Error($exclusiveKeyword + ' must be number or boolean');\n }\n if ($isDataExcl) {\n var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n $exclusive = 'exclusive' + $lvl,\n $exclType = 'exclType' + $lvl,\n $exclIsNumber = 'exclIsNumber' + $lvl,\n $opExpr = 'op' + $lvl,\n $opStr = '\\' + ' + $opExpr + ' + \\'';\n out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n $schemaValueExcl = 'schemaExcl' + $lvl;\n out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n var $errorKeyword = $exclusiveKeyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n if ($schema === undefined) {\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaValueExcl;\n $isData = $isDataExcl;\n }\n } else {\n var $exclIsNumber = typeof $schemaExcl == 'number',\n $opStr = $op;\n if ($exclIsNumber && $isData) {\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n } else {\n if ($exclIsNumber && $schema === undefined) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaExcl;\n $notOp += '=';\n } else {\n if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $notOp += '=';\n } else {\n $exclusive = false;\n $opStr += '=';\n }\n }\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n }\n }\n $errorKeyword = $errorKeyword || $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ' + ($opStr) + ' ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxItems' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxItems') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxLength' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n if (it.opts.unicode === false) {\n out += ' ' + ($data) + '.length ';\n } else {\n out += ' ucs2length(' + ($data) + ') ';\n }\n out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be ';\n if ($keyword == 'maxLength') {\n out += 'longer';\n } else {\n out += 'shorter';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' characters\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n var $op = $keyword == 'maxProperties' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxProperties') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' properties\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!($isData || typeof $schema == 'number')) {\n throw new Error($keyword + ' must be number');\n }\n out += 'var division' + ($lvl) + ';if (';\n if ($isData) {\n out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n }\n out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n if (it.opts.multipleOfPrecision) {\n out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n } else {\n out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n }\n out += ' ) ';\n if ($isData) {\n out += ' ) ';\n }\n out += ' ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be multiple of ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.createErrors = false;\n var $allErrorsOption;\n if ($it.opts.allErrors) {\n $allErrorsOption = $it.opts.allErrors;\n $it.opts.allErrors = false;\n }\n out += ' ' + (it.validate($it)) + ' ';\n $it.createErrors = true;\n if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (' + ($nextValid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $prevValid = 'prevValid' + $lvl,\n $passingSchemas = 'passingSchemas' + $lvl;\n out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n } else {\n out += ' var ' + ($nextValid) + ' = true; ';\n }\n if ($i) {\n out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n $closingBraces += '}';\n }\n out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match pattern \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl;\n var $schemaKeys = Object.keys($schema || {}).filter(notProto),\n $pProperties = it.schema.patternProperties || {},\n $pPropertyKeys = Object.keys($pProperties).filter(notProto),\n $aProperties = it.schema.additionalProperties,\n $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n $noAdditional = $aProperties === false,\n $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n $removeAdditional = it.opts.removeAdditional,\n $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n var $required = it.schema.required;\n if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {\n var $requiredHash = it.util.toHash($required);\n }\n\n function notProto(p) {\n return p !== '__proto__';\n }\n out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined;';\n }\n if ($checkAdditional) {\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n if ($someProperties) {\n out += ' var isAdditional' + ($lvl) + ' = !(false ';\n if ($schemaKeys.length) {\n if ($schemaKeys.length > 8) {\n out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n } else {\n var arr1 = $schemaKeys;\n if (arr1) {\n var $propertyKey, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $propertyKey = arr1[i1 += 1];\n out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr2 = $pPropertyKeys;\n if (arr2) {\n var $pProperty, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $pProperty = arr2[$i += 1];\n out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n }\n }\n }\n out += ' ); if (isAdditional' + ($lvl) + ') { ';\n }\n if ($removeAdditional == 'all') {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n var $currentErrorPath = it.errorPath;\n var $additionalProperty = '\\' + ' + $key + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n }\n if ($noAdditional) {\n if ($removeAdditional) {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n out += ' ' + ($nextValid) + ' = false; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is an invalid additional property';\n } else {\n out += 'should NOT have additional properties';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n out += ' break; ';\n }\n }\n } else if ($additionalIsSchema) {\n if ($removeAdditional == 'failing') {\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n } else {\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n }\n if ($someProperties) {\n out += ' } ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n if ($schemaKeys.length) {\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n var $prop = it.util.getProperty($propertyKey),\n $passData = $data + $prop,\n $hasDefault = $useDefaults && $sch.default !== undefined;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + $prop;\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n $code = it.util.varReplace($code, $nextData, $passData);\n var $useData = $passData;\n } else {\n var $useData = $nextData;\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n }\n if ($hasDefault) {\n out += ' ' + ($code) + ' ';\n } else {\n if ($requiredHash && $requiredHash[$propertyKey]) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = false; ';\n var $currentErrorPath = it.errorPath,\n $currErrSchemaPath = $errSchemaPath,\n $missingProperty = it.util.escapeQuotes($propertyKey);\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n $errSchemaPath = it.errSchemaPath + '/required';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n it.errorPath = $currentErrorPath;\n out += ' } else { ';\n } else {\n if ($breakOnError) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = true; } else { ';\n } else {\n out += ' if (' + ($useData) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ' ) { ';\n }\n }\n out += ' ' + ($code) + ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr4 = $pPropertyKeys;\n if (arr4) {\n var $pProperty, i4 = -1,\n l4 = arr4.length - 1;\n while (i4 < l4) {\n $pProperty = arr4[i4 += 1];\n var $sch = $pProperties[$pProperty];\n if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else ' + ($nextValid) + ' = true; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n out += 'var ' + ($errs) + ' = errors;';\n if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $i = 'i' + $lvl,\n $invalidName = '\\' + ' + $key + ' + \\'',\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined; ';\n }\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' var startErrs' + ($lvl) + ' = errors; ';\n var $passData = $key;\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; } var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('propertyNames') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \\'' + ($invalidName) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'property name \\\\\\'' + ($invalidName) + '\\\\\\' is invalid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n if ($breakOnError) {\n out += ' break; ';\n }\n out += ' } }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_required(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $vSchema = 'schema' + $lvl;\n if (!$isData) {\n if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\n var $required = [];\n var arr1 = $schema;\n if (arr1) {\n var $property, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $property = arr1[i1 += 1];\n var $propertySch = it.schema.properties[$property];\n if (!($propertySch && (it.opts.strictKeywords ? (typeof $propertySch == 'object' && Object.keys($propertySch).length > 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n $required[$required.length] = $property;\n }\n }\n }\n } else {\n var $required = $schema;\n }\n }\n if ($isData || $required.length) {\n var $currentErrorPath = it.errorPath,\n $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n $ownProperties = it.opts.ownProperties;\n if ($breakOnError) {\n out += ' var missing' + ($lvl) + '; ';\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n out += ' var ' + ($valid) + ' = true; ';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += '; if (!' + ($valid) + ') break; } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n } else {\n out += ' if ( ';\n var arr2 = $required;\n if (arr2) {\n var $propertyKey, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $propertyKey = arr2[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ') { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n }\n } else {\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n if ($isData) {\n out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n if ($isData) {\n out += ' } ';\n }\n } else {\n var arr3 = $required;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n }\n it.errorPath = $currentErrorPath;\n } else if ($breakOnError) {\n out += ' if (true) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (($schema || $isData) && it.opts.uniqueItems !== false) {\n if ($isData) {\n out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n }\n out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n var $itemType = it.schema.items && it.schema.items.type,\n $typeIsArray = Array.isArray($itemType);\n if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n } else {\n out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';\n if ($typeIsArray) {\n out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n }\n out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n }\n out += ' } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n '$ref': require('./ref'),\n allOf: require('./allOf'),\n anyOf: require('./anyOf'),\n '$comment': require('./comment'),\n const: require('./const'),\n contains: require('./contains'),\n dependencies: require('./dependencies'),\n 'enum': require('./enum'),\n format: require('./format'),\n 'if': require('./if'),\n items: require('./items'),\n maximum: require('./_limit'),\n minimum: require('./_limit'),\n maxItems: require('./_limitItems'),\n minItems: require('./_limitItems'),\n maxLength: require('./_limitLength'),\n minLength: require('./_limitLength'),\n maxProperties: require('./_limitProperties'),\n minProperties: require('./_limitProperties'),\n multipleOf: require('./multipleOf'),\n not: require('./not'),\n oneOf: require('./oneOf'),\n pattern: require('./pattern'),\n properties: require('./properties'),\n propertyNames: require('./propertyNames'),\n required: require('./required'),\n uniqueItems: require('./uniqueItems'),\n validate: require('./validate')\n};\n","'use strict';\n\nvar ruleModules = require('../dotjs')\n , toHash = require('./util').toHash;\n\nmodule.exports = function rules() {\n var RULES = [\n { type: 'number',\n rules: [ { 'maximum': ['exclusiveMaximum'] },\n { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n { type: 'string',\n rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n { type: 'array',\n rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n { type: 'object',\n rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n ];\n\n var ALL = [ 'type', '$comment' ];\n var KEYWORDS = [\n '$schema', '$id', 'id', '$data', '$async', 'title',\n 'description', 'default', 'definitions',\n 'examples', 'readOnly', 'writeOnly',\n 'contentMediaType', 'contentEncoding',\n 'additionalItems', 'then', 'else'\n ];\n var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n RULES.all = toHash(ALL);\n RULES.types = toHash(TYPES);\n\n RULES.forEach(function (group) {\n group.rules = group.rules.map(function (keyword) {\n var implKeywords;\n if (typeof keyword == 'object') {\n var key = Object.keys(keyword)[0];\n implKeywords = keyword[key];\n keyword = key;\n implKeywords.forEach(function (k) {\n ALL.push(k);\n RULES.all[k] = true;\n });\n }\n ALL.push(keyword);\n var rule = RULES.all[keyword] = {\n keyword: keyword,\n code: ruleModules[keyword],\n implements: implKeywords\n };\n return rule;\n });\n\n RULES.all.$comment = {\n keyword: '$comment',\n code: ruleModules.$comment\n };\n\n if (group.type) RULES.types[group.type] = group;\n });\n\n RULES.keywords = toHash(ALL.concat(KEYWORDS));\n RULES.custom = {};\n\n return RULES;\n};\n","'use strict';\n\nvar KEYWORDS = [\n 'multipleOf',\n 'maximum',\n 'exclusiveMaximum',\n 'minimum',\n 'exclusiveMinimum',\n 'maxLength',\n 'minLength',\n 'pattern',\n 'additionalItems',\n 'maxItems',\n 'minItems',\n 'uniqueItems',\n 'maxProperties',\n 'minProperties',\n 'required',\n 'additionalProperties',\n 'enum',\n 'format',\n 'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n for (var i=0; i<keywordsJsonPointers.length; i++) {\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n var segments = keywordsJsonPointers[i].split('/');\n var keywords = metaSchema;\n var j;\n for (j=1; j<segments.length; j++)\n keywords = keywords[segments[j]];\n\n for (j=0; j<KEYWORDS.length; j++) {\n var key = KEYWORDS[j];\n var schema = keywords[key];\n if (schema) {\n keywords[key] = {\n anyOf: [\n schema,\n { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n ]\n };\n }\n }\n }\n\n return metaSchema;\n};\n","'use strict';\n\nvar MissingRefError = require('./error_classes').MissingRef;\n\nmodule.exports = compileAsync;\n\n\n/**\n * Creates validating function for passed schema with asynchronous loading of missing schemas.\n * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped\n * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.\n * @return {Promise} promise that resolves with a validating function.\n */\nfunction compileAsync(schema, meta, callback) {\n /* eslint no-shadow: 0 */\n /* global Promise */\n /* jshint validthis: true */\n var self = this;\n if (typeof this._opts.loadSchema != 'function')\n throw new Error('options.loadSchema should be a function');\n\n if (typeof meta == 'function') {\n callback = meta;\n meta = undefined;\n }\n\n var p = loadMetaSchemaOf(schema).then(function () {\n var schemaObj = self._addSchema(schema, undefined, meta);\n return schemaObj.validate || _compileAsync(schemaObj);\n });\n\n if (callback) {\n p.then(\n function(v) { callback(null, v); },\n callback\n );\n }\n\n return p;\n\n\n function loadMetaSchemaOf(sch) {\n var $schema = sch.$schema;\n return $schema && !self.getSchema($schema)\n ? compileAsync.call(self, { $ref: $schema }, true)\n : Promise.resolve();\n }\n\n\n function _compileAsync(schemaObj) {\n try { return self._compile(schemaObj); }\n catch(e) {\n if (e instanceof MissingRefError) return loadMissingSchema(e);\n throw e;\n }\n\n\n function loadMissingSchema(e) {\n var ref = e.missingSchema;\n if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');\n\n var schemaPromise = self._loadingSchemas[ref];\n if (!schemaPromise) {\n schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);\n schemaPromise.then(removePromise, removePromise);\n }\n\n return schemaPromise.then(function (sch) {\n if (!added(ref)) {\n return loadMetaSchemaOf(sch).then(function () {\n if (!added(ref)) self.addSchema(sch, ref, undefined, meta);\n });\n }\n }).then(function() {\n return _compileAsync(schemaObj);\n });\n\n function removePromise() {\n delete self._loadingSchemas[ref];\n }\n\n function added(ref) {\n return self._refs[ref] || self._schemas[ref];\n }\n }\n }\n}\n","'use strict';\nmodule.exports = function generate_custom(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $rule = this,\n $definition = 'definition' + $lvl,\n $rDef = $rule.definition,\n $closingBraces = '';\n var $compile, $inline, $macro, $ruleValidate, $validateCode;\n if ($isData && $rDef.$data) {\n $validateCode = 'keywordValidate' + $lvl;\n var $validateSchema = $rDef.validateSchema;\n out += ' var ' + ($definition) + ' = RULES.custom[\\'' + ($keyword) + '\\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';\n } else {\n $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);\n if (!$ruleValidate) return;\n $schemaValue = 'validate.schema' + $schemaPath;\n $validateCode = $ruleValidate.code;\n $compile = $rDef.compile;\n $inline = $rDef.inline;\n $macro = $rDef.macro;\n }\n var $ruleErrs = $validateCode + '.errors',\n $i = 'i' + $lvl,\n $ruleErr = 'ruleErr' + $lvl,\n $asyncKeyword = $rDef.async;\n if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\n if (!($inline || $macro)) {\n out += '' + ($ruleErrs) + ' = null;';\n }\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($isData && $rDef.$data) {\n $closingBraces += '}';\n out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';\n if ($validateSchema) {\n $closingBraces += '}';\n out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';\n }\n }\n if ($inline) {\n if ($rDef.statements) {\n out += ' ' + ($ruleValidate.validate) + ' ';\n } else {\n out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';\n }\n } else if ($macro) {\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $ruleValidate.validate;\n $it.schemaPath = '';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it).replace(/validate\\.schema/g, $validateCode);\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($code);\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n out += ' ' + ($validateCode) + '.call( ';\n if (it.opts.passContext) {\n out += 'this';\n } else {\n out += 'self';\n }\n if ($compile || $rDef.schema === false) {\n out += ' , ' + ($data) + ' ';\n } else {\n out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\n }\n out += ' , (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) ';\n var def_callRuleValidate = out;\n out = $$outStack.pop();\n if ($rDef.errors === false) {\n out += ' ' + ($valid) + ' = ';\n if ($asyncKeyword) {\n out += 'await ';\n }\n out += '' + (def_callRuleValidate) + '; ';\n } else {\n if ($asyncKeyword) {\n $ruleErrs = 'customErrors' + $lvl;\n out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\n } else {\n out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';\n }\n }\n }\n if ($rDef.modifying) {\n out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';\n }\n out += '' + ($closingBraces);\n if ($rDef.valid) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n out += ' if ( ';\n if ($rDef.valid === undefined) {\n out += ' !';\n if ($macro) {\n out += '' + ($nextValid);\n } else {\n out += '' + ($valid);\n }\n } else {\n out += ' ' + (!$rDef.valid) + ' ';\n }\n out += ') { ';\n $errorKeyword = $rule.keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n var def_customError = out;\n out = $$outStack.pop();\n if ($inline) {\n if ($rDef.errors) {\n if ($rDef.errors != 'full') {\n out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n if (it.opts.verbose) {\n out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n }\n out += ' } ';\n }\n } else {\n if ($rDef.errors === false) {\n out += ' ' + (def_customError) + ' ';\n } else {\n out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else { for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n if (it.opts.verbose) {\n out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n }\n out += ' } } ';\n }\n }\n } else if ($macro) {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n } else {\n if ($rDef.errors === false) {\n out += ' ' + (def_customError) + ' ';\n } else {\n out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length; for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; ';\n if (it.opts.verbose) {\n out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n }\n out += ' } } else { ' + (def_customError) + ' } ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n }\n return out;\n}\n","'use strict';\n\nvar metaSchema = require('./refs/json-schema-draft-07.json');\n\nmodule.exports = {\n $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',\n definitions: {\n simpleTypes: metaSchema.definitions.simpleTypes\n },\n type: 'object',\n dependencies: {\n schema: ['validate'],\n $data: ['validate'],\n statements: ['inline'],\n valid: {not: {required: ['macro']}}\n },\n properties: {\n type: metaSchema.properties.type,\n schema: {type: 'boolean'},\n statements: {type: 'boolean'},\n dependencies: {\n type: 'array',\n items: {type: 'string'}\n },\n metaSchema: {type: 'object'},\n modifying: {type: 'boolean'},\n valid: {type: 'boolean'},\n $data: {type: 'boolean'},\n async: {type: 'boolean'},\n errors: {\n anyOf: [\n {type: 'boolean'},\n {const: 'full'}\n ]\n }\n }\n};\n","'use strict';\n\nvar IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;\nvar customRuleCode = require('./dotjs/custom');\nvar definitionSchema = require('./definition_schema');\n\nmodule.exports = {\n add: addKeyword,\n get: getKeyword,\n remove: removeKeyword,\n validate: validateKeyword\n};\n\n\n/**\n * Define custom keyword\n * @this Ajv\n * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).\n * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\n * @return {Ajv} this for method chaining\n */\nfunction addKeyword(keyword, definition) {\n /* jshint validthis: true */\n /* eslint no-shadow: 0 */\n var RULES = this.RULES;\n if (RULES.keywords[keyword])\n throw new Error('Keyword ' + keyword + ' is already defined');\n\n if (!IDENTIFIER.test(keyword))\n throw new Error('Keyword ' + keyword + ' is not a valid identifier');\n\n if (definition) {\n this.validateKeyword(definition, true);\n\n var dataType = definition.type;\n if (Array.isArray(dataType)) {\n for (var i=0; i<dataType.length; i++)\n _addRule(keyword, dataType[i], definition);\n } else {\n _addRule(keyword, dataType, definition);\n }\n\n var metaSchema = definition.metaSchema;\n if (metaSchema) {\n if (definition.$data && this._opts.$data) {\n metaSchema = {\n anyOf: [\n metaSchema,\n { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n ]\n };\n }\n definition.validateSchema = this.compile(metaSchema, true);\n }\n }\n\n RULES.keywords[keyword] = RULES.all[keyword] = true;\n\n\n function _addRule(keyword, dataType, definition) {\n var ruleGroup;\n for (var i=0; i<RULES.length; i++) {\n var rg = RULES[i];\n if (rg.type == dataType) {\n ruleGroup = rg;\n break;\n }\n }\n\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.push(ruleGroup);\n }\n\n var rule = {\n keyword: keyword,\n definition: definition,\n custom: true,\n code: customRuleCode,\n implements: definition.implements\n };\n ruleGroup.rules.push(rule);\n RULES.custom[keyword] = rule;\n }\n\n return this;\n}\n\n\n/**\n * Get keyword\n * @this Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.\n */\nfunction getKeyword(keyword) {\n /* jshint validthis: true */\n var rule = this.RULES.custom[keyword];\n return rule ? rule.definition : this.RULES.keywords[keyword] || false;\n}\n\n\n/**\n * Remove keyword\n * @this Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Ajv} this for method chaining\n */\nfunction removeKeyword(keyword) {\n /* jshint validthis: true */\n var RULES = this.RULES;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n delete RULES.custom[keyword];\n for (var i=0; i<RULES.length; i++) {\n var rules = RULES[i].rules;\n for (var j=0; j<rules.length; j++) {\n if (rules[j].keyword == keyword) {\n rules.splice(j, 1);\n break;\n }\n }\n }\n return this;\n}\n\n\n/**\n * Validate keyword definition\n * @this Ajv\n * @param {Object} definition keyword definition object.\n * @param {Boolean} throwError true to throw exception if definition is invalid\n * @return {boolean} validation result\n */\nfunction validateKeyword(definition, throwError) {\n validateKeyword.errors = null;\n var v = this._validateKeyword = this._validateKeyword\n || this.compile(definitionSchema, true);\n\n if (v(definition)) return true;\n validateKeyword.errors = v.errors;\n if (throwError)\n throw new Error('custom keyword definition is invalid: ' + this.errorsText(v.errors));\n else\n return false;\n}\n","'use strict';\n\nvar compileSchema = require('./compile')\n , resolve = require('./compile/resolve')\n , Cache = require('./cache')\n , SchemaObject = require('./compile/schema_obj')\n , stableStringify = require('fast-json-stable-stringify')\n , formats = require('./compile/formats')\n , rules = require('./compile/rules')\n , $dataMetaSchema = require('./data')\n , util = require('./compile/util');\n\nmodule.exports = Ajv;\n\nAjv.prototype.validate = validate;\nAjv.prototype.compile = compile;\nAjv.prototype.addSchema = addSchema;\nAjv.prototype.addMetaSchema = addMetaSchema;\nAjv.prototype.validateSchema = validateSchema;\nAjv.prototype.getSchema = getSchema;\nAjv.prototype.removeSchema = removeSchema;\nAjv.prototype.addFormat = addFormat;\nAjv.prototype.errorsText = errorsText;\n\nAjv.prototype._addSchema = _addSchema;\nAjv.prototype._compile = _compile;\n\nAjv.prototype.compileAsync = require('./compile/async');\nvar customKeyword = require('./keyword');\nAjv.prototype.addKeyword = customKeyword.add;\nAjv.prototype.getKeyword = customKeyword.get;\nAjv.prototype.removeKeyword = customKeyword.remove;\nAjv.prototype.validateKeyword = customKeyword.validate;\n\nvar errorClasses = require('./compile/error_classes');\nAjv.ValidationError = errorClasses.Validation;\nAjv.MissingRefError = errorClasses.MissingRef;\nAjv.$dataMetaSchema = $dataMetaSchema;\n\nvar META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';\n\nvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];\nvar META_SUPPORT_DATA = ['/properties'];\n\n/**\n * Creates validator instance.\n * Usage: `Ajv(opts)`\n * @param {Object} opts optional options\n * @return {Object} ajv instance\n */\nfunction Ajv(opts) {\n if (!(this instanceof Ajv)) return new Ajv(opts);\n opts = this._opts = util.copy(opts) || {};\n setLogger(this);\n this._schemas = {};\n this._refs = {};\n this._fragments = {};\n this._formats = formats(opts.format);\n\n this._cache = opts.cache || new Cache;\n this._loadingSchemas = {};\n this._compilations = [];\n this.RULES = rules();\n this._getId = chooseGetId(opts);\n\n opts.loopRequired = opts.loopRequired || Infinity;\n if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\n if (opts.serialize === undefined) opts.serialize = stableStringify;\n this._metaOpts = getMetaSchemaOptions(this);\n\n if (opts.formats) addInitialFormats(this);\n if (opts.keywords) addInitialKeywords(this);\n addDefaultMetaSchema(this);\n if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);\n if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});\n addInitialSchemas(this);\n}\n\n\n\n/**\n * Validate data using schema\n * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.\n * @this Ajv\n * @param {String|Object} schemaKeyRef key, ref or schema object\n * @param {Any} data to be validated\n * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\n */\nfunction validate(schemaKeyRef, data) {\n var v;\n if (typeof schemaKeyRef == 'string') {\n v = this.getSchema(schemaKeyRef);\n if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\n } else {\n var schemaObj = this._addSchema(schemaKeyRef);\n v = schemaObj.validate || this._compile(schemaObj);\n }\n\n var valid = v(data);\n if (v.$async !== true) this.errors = v.errors;\n return valid;\n}\n\n\n/**\n * Create validating function for passed schema.\n * @this Ajv\n * @param {Object} schema schema object\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.\n * @return {Function} validating function\n */\nfunction compile(schema, _meta) {\n var schemaObj = this._addSchema(schema, undefined, _meta);\n return schemaObj.validate || this._compile(schemaObj);\n}\n\n\n/**\n * Adds schema to the instance.\n * @this Ajv\n * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\n * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n * @return {Ajv} this for method chaining\n */\nfunction addSchema(schema, key, _skipValidation, _meta) {\n if (Array.isArray(schema)){\n for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);\n return this;\n }\n var id = this._getId(schema);\n if (id !== undefined && typeof id != 'string')\n throw new Error('schema id must be string');\n key = resolve.normalizeId(key || id);\n checkUnique(this, key);\n this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);\n return this;\n}\n\n\n/**\n * Add schema that will be used to validate other schemas\n * options in META_IGNORE_OPTIONS are alway set to false\n * @this Ajv\n * @param {Object} schema schema object\n * @param {String} key optional schema key\n * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\n * @return {Ajv} this for method chaining\n */\nfunction addMetaSchema(schema, key, skipValidation) {\n this.addSchema(schema, key, skipValidation, true);\n return this;\n}\n\n\n/**\n * Validate schema\n * @this Ajv\n * @param {Object} schema schema to validate\n * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\n * @return {Boolean} true if schema is valid\n */\nfunction validateSchema(schema, throwOrLogError) {\n var $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != 'string')\n throw new Error('$schema must be a string');\n $schema = $schema || this._opts.defaultMeta || defaultMeta(this);\n if (!$schema) {\n this.logger.warn('meta-schema not available');\n this.errors = null;\n return true;\n }\n var valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n var message = 'schema is invalid: ' + this.errorsText();\n if (this._opts.validateSchema == 'log') this.logger.error(message);\n else throw new Error(message);\n }\n return valid;\n}\n\n\nfunction defaultMeta(self) {\n var meta = self._opts.meta;\n self._opts.defaultMeta = typeof meta == 'object'\n ? self._getId(meta) || meta\n : self.getSchema(META_SCHEMA_ID)\n ? META_SCHEMA_ID\n : undefined;\n return self._opts.defaultMeta;\n}\n\n\n/**\n * Get compiled schema from the instance by `key` or `ref`.\n * @this Ajv\n * @param {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\n * @return {Function} schema validating function (with property `schema`).\n */\nfunction getSchema(keyRef) {\n var schemaObj = _getSchemaObj(this, keyRef);\n switch (typeof schemaObj) {\n case 'object': return schemaObj.validate || this._compile(schemaObj);\n case 'string': return this.getSchema(schemaObj);\n case 'undefined': return _getSchemaFragment(this, keyRef);\n }\n}\n\n\nfunction _getSchemaFragment(self, ref) {\n var res = resolve.schema.call(self, { schema: {} }, ref);\n if (res) {\n var schema = res.schema\n , root = res.root\n , baseId = res.baseId;\n var v = compileSchema.call(self, schema, root, undefined, baseId);\n self._fragments[ref] = new SchemaObject({\n ref: ref,\n fragment: true,\n schema: schema,\n root: root,\n baseId: baseId,\n validate: v\n });\n return v;\n }\n}\n\n\nfunction _getSchemaObj(self, keyRef) {\n keyRef = resolve.normalizeId(keyRef);\n return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];\n}\n\n\n/**\n * Remove cached schema(s).\n * If no parameter is passed all schemas but meta-schemas are removed.\n * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n * @this Ajv\n * @param {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\n * @return {Ajv} this for method chaining\n */\nfunction removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n _removeAllSchemas(this, this._schemas, schemaKeyRef);\n _removeAllSchemas(this, this._refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case 'undefined':\n _removeAllSchemas(this, this._schemas);\n _removeAllSchemas(this, this._refs);\n this._cache.clear();\n return this;\n case 'string':\n var schemaObj = _getSchemaObj(this, schemaKeyRef);\n if (schemaObj) this._cache.del(schemaObj.cacheKey);\n delete this._schemas[schemaKeyRef];\n delete this._refs[schemaKeyRef];\n return this;\n case 'object':\n var serialize = this._opts.serialize;\n var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;\n this._cache.del(cacheKey);\n var id = this._getId(schemaKeyRef);\n if (id) {\n id = resolve.normalizeId(id);\n delete this._schemas[id];\n delete this._refs[id];\n }\n }\n return this;\n}\n\n\nfunction _removeAllSchemas(self, schemas, regex) {\n for (var keyRef in schemas) {\n var schemaObj = schemas[keyRef];\n if (!schemaObj.meta && (!regex || regex.test(keyRef))) {\n self._cache.del(schemaObj.cacheKey);\n delete schemas[keyRef];\n }\n }\n}\n\n\n/* @this Ajv */\nfunction _addSchema(schema, skipValidation, meta, shouldAddSchema) {\n if (typeof schema != 'object' && typeof schema != 'boolean')\n throw new Error('schema should be object or boolean');\n var serialize = this._opts.serialize;\n var cacheKey = serialize ? serialize(schema) : schema;\n var cached = this._cache.get(cacheKey);\n if (cached) return cached;\n\n shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;\n\n var id = resolve.normalizeId(this._getId(schema));\n if (id && shouldAddSchema) checkUnique(this, id);\n\n var willValidate = this._opts.validateSchema !== false && !skipValidation;\n var recursiveMeta;\n if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))\n this.validateSchema(schema, true);\n\n var localRefs = resolve.ids.call(this, schema);\n\n var schemaObj = new SchemaObject({\n id: id,\n schema: schema,\n localRefs: localRefs,\n cacheKey: cacheKey,\n meta: meta\n });\n\n if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;\n this._cache.put(cacheKey, schemaObj);\n\n if (willValidate && recursiveMeta) this.validateSchema(schema, true);\n\n return schemaObj;\n}\n\n\n/* @this Ajv */\nfunction _compile(schemaObj, root) {\n if (schemaObj.compiling) {\n schemaObj.validate = callValidate;\n callValidate.schema = schemaObj.schema;\n callValidate.errors = null;\n callValidate.root = root ? root : callValidate;\n if (schemaObj.schema.$async === true)\n callValidate.$async = true;\n return callValidate;\n }\n schemaObj.compiling = true;\n\n var currentOpts;\n if (schemaObj.meta) {\n currentOpts = this._opts;\n this._opts = this._metaOpts;\n }\n\n var v;\n try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }\n catch(e) {\n delete schemaObj.validate;\n throw e;\n }\n finally {\n schemaObj.compiling = false;\n if (schemaObj.meta) this._opts = currentOpts;\n }\n\n schemaObj.validate = v;\n schemaObj.refs = v.refs;\n schemaObj.refVal = v.refVal;\n schemaObj.root = v.root;\n return v;\n\n\n /* @this {*} - custom context, see passContext option */\n function callValidate() {\n /* jshint validthis: true */\n var _validate = schemaObj.validate;\n var result = _validate.apply(this, arguments);\n callValidate.errors = _validate.errors;\n return result;\n }\n}\n\n\nfunction chooseGetId(opts) {\n switch (opts.schemaId) {\n case 'auto': return _get$IdOrId;\n case 'id': return _getId;\n default: return _get$Id;\n }\n}\n\n/* @this Ajv */\nfunction _getId(schema) {\n if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);\n return schema.id;\n}\n\n/* @this Ajv */\nfunction _get$Id(schema) {\n if (schema.id) this.logger.warn('schema id ignored', schema.id);\n return schema.$id;\n}\n\n\nfunction _get$IdOrId(schema) {\n if (schema.$id && schema.id && schema.$id != schema.id)\n throw new Error('schema $id is different from id');\n return schema.$id || schema.id;\n}\n\n\n/**\n * Convert array of error message objects to string\n * @this Ajv\n * @param {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n errors = errors || this.errors;\n if (!errors) return 'No errors';\n options = options || {};\n var separator = options.separator === undefined ? ', ' : options.separator;\n var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n var text = '';\n for (var i=0; i<errors.length; i++) {\n var e = errors[i];\n if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;\n }\n return text.slice(0, -separator.length);\n}\n\n\n/**\n * Add custom format\n * @this Ajv\n * @param {String} name format name\n * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\n * @return {Ajv} this for method chaining\n */\nfunction addFormat(name, format) {\n if (typeof format == 'string') format = new RegExp(format);\n this._formats[name] = format;\n return this;\n}\n\n\nfunction addDefaultMetaSchema(self) {\n var $dataSchema;\n if (self._opts.$data) {\n $dataSchema = require('./refs/data.json');\n self.addMetaSchema($dataSchema, $dataSchema.$id, true);\n }\n if (self._opts.meta === false) return;\n var metaSchema = require('./refs/json-schema-draft-07.json');\n if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);\n self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);\n self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;\n}\n\n\nfunction addInitialSchemas(self) {\n var optsSchemas = self._opts.schemas;\n if (!optsSchemas) return;\n if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);\n else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);\n}\n\n\nfunction addInitialFormats(self) {\n for (var name in self._opts.formats) {\n var format = self._opts.formats[name];\n self.addFormat(name, format);\n }\n}\n\n\nfunction addInitialKeywords(self) {\n for (var name in self._opts.keywords) {\n var keyword = self._opts.keywords[name];\n self.addKeyword(name, keyword);\n }\n}\n\n\nfunction checkUnique(self, id) {\n if (self._schemas[id] || self._refs[id])\n throw new Error('schema with key or id \"' + id + '\" already exists');\n}\n\n\nfunction getMetaSchemaOptions(self) {\n var metaOpts = util.copy(self._opts);\n for (var i=0; i<META_IGNORE_OPTIONS.length; i++)\n delete metaOpts[META_IGNORE_OPTIONS[i]];\n return metaOpts;\n}\n\n\nfunction setLogger(self) {\n var logger = self._opts.logger;\n if (logger === false) {\n self.logger = {log: noop, warn: noop, error: noop};\n } else {\n if (logger === undefined) logger = console;\n if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))\n throw new Error('logger must implement log, warn and error methods');\n self.logger = logger;\n }\n}\n\n\nfunction noop() {}\n","import type { Style } from '@gosling-lang/gosling-schema';\n\nexport function getStyleOverridden(parent: Style | undefined, child: Style | undefined) {\n // Deep overriding instead of replacing.\n const base = parent ? JSON.parse(JSON.stringify(parent)) : {};\n return child ? Object.assign(base, child) : base;\n}\n","// for envs where crypto.randomUUID is not available (i.e., Node).\nfunction fallback(): string {\n return Math.random().toString(36).substring(2, 10);\n}\n\nexport function uuid(): string {\n return globalThis.crypto.randomUUID?.() ?? fallback();\n}\n","import type {\n SingleTrack,\n GoslingSpec,\n View,\n SingleView,\n Track,\n PartialTrack,\n CommonTrackDef,\n CommonViewDef,\n MultipleViews,\n DisplaceTransform\n} from '@gosling-lang/gosling-schema';\nimport {\n IsSingleTrack,\n IsChannelDeep,\n IsOverlaidTrack,\n IsFlatTracks,\n IsStackedTracks,\n Is2DTrack,\n IsDummyTrack\n} from '@gosling-lang/gosling-schema';\nimport {\n DEFAULT_INNER_RADIUS_PROP,\n DEFAULT_TRACK_HEIGHT_LINEAR,\n DEFAULT_TRACK_SIZE_2D,\n DEFAULT_TRACK_WIDTH_LINEAR,\n DEFAULT_VIEW_SPACING\n} from './defaults';\nimport { spreadTracksByData } from '../core/utils/overlay';\nimport { getStyleOverridden } from '../core/utils/style';\nimport { uuid } from '../core/utils/uuid';\n\n/**\n * Traverse individual tracks and call the callback function to read and/or update the track definition.\n * @param spec\n * @param callback\n */\nexport function traverseTracks(\n spec: GoslingSpec | View | PartialTrack,\n callback: (t: Partial<Track>, i: number, ts: Partial<Track>[]) => void\n) {\n if ('tracks' in spec) {\n spec.tracks.forEach((t, i, ts) => {\n callback(t, i, ts);\n traverseTracks(t, callback);\n });\n } else if ('views' in spec) {\n spec.views.forEach(view => traverseTracks(view, callback));\n }\n}\n\n/**\n * Traverse individual tracks and views and call the callback function to read and/or update the common definition of views and tracks.\n * @param spec\n * @param callback\n */\nexport function traverseTracksAndViews(\n spec: GoslingSpec | View | PartialTrack,\n callback: (tv: CommonViewDef | CommonTrackDef) => void\n) {\n if ('tracks' in spec) {\n spec.tracks.forEach(t => {\n callback(t);\n traverseTracksAndViews(t, callback);\n });\n } else if ('views' in spec) {\n spec.views.forEach(v => {\n callback(v);\n traverseTracksAndViews(v, callback);\n });\n }\n}\n\n/**\n * Traverse individual view arrangements and call the callback function to read and/or update the arrangement information.\n * @param spec\n * @param callback\n */\nexport function traverseViewArrangements(spec: GoslingSpec, callback: (tv: MultipleViews) => void) {\n if ('tracks' in spec) {\n // No need to do anything\n } else {\n callback(spec);\n spec.views.forEach(v => {\n traverseViewArrangements(v, callback);\n });\n }\n}\n\n/**\n * This convert the nested track definitions into a flat array.\n * @param spec\n */\nexport function convertToFlatTracks(spec: SingleView): Track[] {\n if (IsFlatTracks(spec)) {\n // This is already `FlatTracks`, so just override the view definition\n const base = { ...spec, tracks: undefined, id: undefined };\n return spec.tracks\n .filter(track => !track._invalidTrack)\n .map(track => Object.assign(JSON.parse(JSON.stringify(base)), track) as SingleTrack);\n }\n\n const newTracks: Track[] = [];\n if (IsStackedTracks(spec)) {\n spec.tracks\n .filter(track => !track._invalidTrack)\n .map(track => {\n if ('alignment' in track) {\n // This is OverlaidTracks\n newTracks.push({\n ...track,\n _overlay: [...track.tracks],\n tracks: undefined,\n alignment: undefined\n } as Track);\n } else {\n // Override track definitions from views\n const base = { ...spec, tracks: undefined, id: undefined };\n const newSpec = Object.assign(JSON.parse(JSON.stringify(base)), track) as SingleTrack;\n newTracks.push(newSpec);\n }\n });\n } else {\n newTracks.push({\n ...spec,\n _overlay: [...spec.tracks.filter(track => !track._invalidTrack)],\n tracks: undefined,\n alignment: undefined\n } as Track);\n }\n\n return JSON.parse(JSON.stringify(newTracks));\n}\n\n/**\n * Traverse views and tracks to use parents's properties if missing.\n * @param spec\n * @param callback\n */\nexport function traverseToFixSpecDownstream(spec: GoslingSpec | SingleView, parentDef?: CommonViewDef | MultipleViews) {\n // TODO: Instead of overriding props individually, use Object.assign()\n if (parentDef) {\n // For assembly and layout, we use the ones defiend by the parents if missing\n if (spec.assembly === undefined) spec.assembly = parentDef.assembly;\n if (spec.layout === undefined) spec.layout = parentDef.layout;\n if (spec.orientation === undefined) spec.orientation = parentDef.orientation;\n if (spec.static === undefined) spec.static = parentDef.static !== undefined ? parentDef.static : false;\n if (spec.zoomLimits === undefined) spec.zoomLimits = parentDef.zoomLimits;\n if (spec.xDomain === undefined) spec.xDomain = parentDef.xDomain;\n if (spec.yDomain === undefined) spec.yDomain = parentDef.yDomain;\n if (spec.linkingId === undefined) spec.linkingId = parentDef.linkingId;\n if (spec.centerRadius === undefined) spec.centerRadius = parentDef.centerRadius;\n if (spec.spacing === undefined && !('tracks' in spec)) spec.spacing = parentDef.spacing;\n if (spec.xOffset === undefined) spec.xOffset = parentDef.xOffset;\n if (spec.yOffset === undefined) spec.yOffset = parentDef.yOffset;\n if ('views' in spec && 'arrangement' in parentDef && spec.arrangement === undefined)\n spec.arrangement = parentDef.arrangement;\n spec.style = getStyleOverridden(parentDef.style, spec.style); // override styles deeply\n } else {\n // This means we are at the rool level, so assign default values if missing\n if (spec.assembly === undefined) spec.assembly = 'hg38';\n if (spec.layout === undefined) spec.layout = 'linear';\n if (spec.orientation === undefined) spec.orientation = 'horizontal';\n if (spec.static === undefined) spec.static = false;\n if (spec.zoomLimits === undefined) spec.zoomLimits = [1, null];\n if (spec.centerRadius === undefined) spec.centerRadius = DEFAULT_INNER_RADIUS_PROP;\n if (spec.spacing === undefined) spec.spacing = DEFAULT_VIEW_SPACING;\n if ('views' in spec && spec.arrangement === undefined) spec.arrangement = 'vertical';\n if (spec.xOffset === undefined) spec.xOffset = 0;\n if (spec.yOffset === undefined) spec.yOffset = 0;\n // Nothing to do when `xDomain` not suggested\n // Nothing to do when `xLinkID` not suggested\n }\n\n // ID should be assigned to each view and track for an API usage\n if (!spec.id) {\n spec.id = uuid();\n }\n\n if ('tracks' in spec) {\n let tracks: Track[] = convertToFlatTracks(spec);\n // !!! Be aware that this should be taken before fixing `overlayOnPreviousTrack` options.\n /**\n * Spread superposed tracks if they are assigned to different data spec.\n * This process is necessary since we are passing over each track to HiGlass, and if a track contain multiple datastes, HiGlass cannot handle that.\n */\n tracks = spreadTracksByData(tracks);\n\n const linkID = uuid();\n tracks.forEach((track, i, array) => {\n // ID should be assigned to each view and track for an API usage\n if (!track.id) {\n track.id = uuid();\n }\n\n // If size not defined, set default ones\n if (!track.width) {\n track.width = Is2DTrack(track) ? DEFAULT_TRACK_SIZE_2D : DEFAULT_TRACK_WIDTH_LINEAR;\n }\n if (!track.height) {\n track.height = Is2DTrack(track) ? DEFAULT_TRACK_SIZE_2D : DEFAULT_TRACK_HEIGHT_LINEAR;\n }\n /**\n * Process a stack option.\n */\n if ('displacement' in track) {\n if (\n track.displacement?.type === 'pile' &&\n track.row === undefined &&\n IsChannelDeep(track.x) &&\n track.x.field &&\n IsChannelDeep(track.xe) &&\n track.xe.field\n // Question: Should we consider mark types? (e.g., link might not be supported?)\n ) {\n const newField = uuid();\n const startField = track.x.field;\n const endField = track.xe.field;\n const padding = track.displacement.padding;\n const displaceTransform: DisplaceTransform = {\n type: 'displace',\n newField,\n boundingBox: { startField, endField, padding },\n method: 'pile'\n };\n\n // Add a data transform for stacking\n if (!track.dataTransform) {\n track.dataTransform = [];\n }\n track.dataTransform = [...track.dataTransform, displaceTransform];\n track.row = { field: newField, type: 'nominal' };\n } else if (track.displacement?.type === 'spread') {\n // ...\n }\n }\n\n /*\n * Properties that shouldn't be suggested\n */\n if (track.layout) track.layout = undefined;\n if (track.zoomLimits) track.zoomLimits = undefined;\n /**\n * Override options received from the parent\n */\n if (!track.assembly) track.assembly = spec.assembly;\n if (!track.layout) track.layout = spec.layout;\n if (!track.orientation) track.orientation = spec.orientation;\n if (track.static === undefined) track.static = spec.static !== undefined ? spec.static : false;\n if (!track.zoomLimits) track.zoomLimits = spec.zoomLimits;\n\n /**\n * Dummy track can't have a circular layout\n */\n if (track.layout == 'circular' && IsDummyTrack(track)) {\n track._invalidTrack = true;\n return;\n }\n\n // Override styles\n track.style = getStyleOverridden(spec.style, track.style);\n if (IsOverlaidTrack(track)) {\n // Remove the dummy tracks from an overlay track\n track._overlay = track._overlay.filter(overlayTrack => {\n return !('type' in overlayTrack && overlayTrack.type == 'dummy-track');\n });\n track._overlay.forEach(o => {\n o.style = getStyleOverridden(track.style, o.style);\n });\n }\n\n /**\n * Orientation is only supported in 1D linear layouts\n */\n if ((track.layout === 'circular' || Is2DTrack(track)) && track.orientation === 'vertical') {\n track.orientation = 'horizontal';\n }\n\n /**\n * A track with 2D genomic coordinates is forced to use a linear layout\n */\n if (Is2DTrack(track)) {\n // TODO: Add a test for this.\n track.layout = 'linear';\n\n /**\n * Add y-axis domain\n */\n if ((IsSingleTrack(track) || IsOverlaidTrack(track)) && IsChannelDeep(track.y) && !track.y.domain) {\n track.y.domain = spec.yDomain;\n } else if (IsOverlaidTrack(track)) {\n track._overlay.forEach(o => {\n if (IsChannelDeep(o.y) && !o.y.domain) {\n o.y.domain = spec.yDomain;\n }\n });\n }\n }\n\n /**\n * Add x-axis domain\n */\n if ((IsSingleTrack(track) || IsOverlaidTrack(track)) && IsChannelDeep(track.x) && !track.x.domain) {\n track.x.domain = spec.xDomain;\n } else if (IsOverlaidTrack(track)) {\n track._overlay.forEach(o => {\n if (IsChannelDeep(o.x) && !o.x.domain) {\n o.x.domain = spec.xDomain;\n }\n });\n }\n\n /**\n * Link tracks in a single view\n */\n if ((IsSingleTrack(track) || IsOverlaidTrack(track)) && IsChannelDeep(track.x) && !track.x.linkingId) {\n track.x.linkingId = spec.linkingId ?? linkID;\n } else if (IsOverlaidTrack(track)) {\n let isAdded = false;\n track._overlay.forEach(o => {\n if (isAdded) return; // We want to add only once\n\n if (IsChannelDeep(o.x) && !o.x.linkingId) {\n // TODO: Is this safe?\n o.x.linkingId = spec.linkingId ?? linkID;\n isAdded = true;\n }\n });\n }\n\n if (i === 0) {\n // There is no track to overlay on\n track.overlayOnPreviousTrack = false;\n }\n\n // This means this track is positioned on the top of a view\n if (\n i === 0 ||\n (i !== 0 &&\n tracks.slice(0, i).filter(d => !d.overlayOnPreviousTrack).length === 1 &&\n track.overlayOnPreviousTrack === true)\n ) {\n /**\n * Add axis to the first track, i.e., the track on the top, if undefined\n */\n if ((IsSingleTrack(track) || IsOverlaidTrack(track)) && IsChannelDeep(track.x) && !track.x.axis) {\n if (track.orientation === 'vertical') {\n track.x.axis = 'left';\n } else {\n track.x.axis = 'top';\n }\n } else if (IsOverlaidTrack(track)) {\n // let isNone = false; // If there is at least one 'none' axis, should not render axis.\n track._overlay.forEach(o => {\n if (IsChannelDeep(o.x) && !o.x.axis) {\n if (track.orientation === 'vertical') {\n o.x.axis = 'left';\n } else {\n o.x.axis = 'top';\n }\n }\n // else if (IsChannelDeep(o.x) && o.x.axis === 'none') {\n // isNone = true;\n // }\n });\n }\n }\n\n /*\n * Change axis positions considering the orientation.\n */\n if (\n (IsSingleTrack(track) || IsOverlaidTrack(track)) &&\n IsChannelDeep(track.x) &&\n track.x.axis &&\n track.x.axis !== 'none'\n ) {\n if (track.orientation === 'vertical') {\n if (track.x.axis === 'top') {\n track.x.axis = 'left';\n } else if (track.x.axis === 'bottom') {\n track.x.axis = 'right';\n }\n } else {\n if (track.x.axis === 'left') {\n track.x.axis = 'top';\n } else if (track.x.axis === 'right') {\n track.x.axis = 'bottom';\n }\n }\n } else if (IsOverlaidTrack(track)) {\n // let isNone = false; // If there is at least one 'none' axis, should not render axis.\n track._overlay.forEach(o => {\n if (IsChannelDeep(o.x) && o.x.axis && o.x.axis !== 'none') {\n if (track.orientation === 'vertical') {\n if (o.x.axis === 'top') {\n o.x.axis = 'left';\n } else if (o.x.axis === 'bottom') {\n o.x.axis = 'right';\n }\n } else {\n if (o.x.axis === 'left') {\n o.x.axis = 'top';\n } else if (o.x.axis === 'right') {\n o.x.axis = 'bottom';\n }\n }\n }\n // else if (IsChannelDeep(o.x) && o.x.axis === 'none') {\n // isNone = true;\n // }\n });\n }\n\n /*\n * Flip y scale if the last track uses `link` marks\n */\n if (\n // first track can never flipped by default\n i !== 0 &&\n // [0, ..., i] tracks should not overlaid as a single track\n ((i === array.length - 1 && array.slice(0, i + 1).filter(d => d.overlayOnPreviousTrack).length < i) ||\n // Are the rest of the tracks overlaid as a single track?\n (i !== array.length - 1 &&\n array.slice(i + 1).filter(d => d.overlayOnPreviousTrack).length === array.length - i - 1 &&\n array.slice(0, i + 1).filter(d => d.overlayOnPreviousTrack).length < i))\n ) {\n if (IsSingleTrack(track) && track.mark === 'withinLink' && track.flipY === undefined) {\n track.flipY = true;\n } else if (IsOverlaidTrack(track)) {\n if (track.mark === 'withinLink' && track.flipY === undefined) {\n track.flipY = true;\n }\n track._overlay.forEach(o => {\n if (o.mark === 'withinLink' && o.flipY === undefined) {\n o.flipY = true;\n }\n });\n }\n }\n\n if (track.overlayOnPreviousTrack && array[i - 1]) {\n // Use the same size as the previous one\n track.width = array[i - 1].width;\n track.height = array[i - 1].height;\n\n track.layout = array[i - 1].layout;\n track.assembly = array[i - 1].assembly;\n }\n });\n // Filter out any invalid tracks\n tracks = tracks.filter(track => !track._invalidTrack);\n\n spec.tracks = tracks;\n } else {\n // we did not reach track definition, so continue traversing\n spec.views.forEach(v => {\n traverseToFixSpecDownstream(v, spec as CommonViewDef);\n });\n }\n}\n","export const CHROM_SIZE_HG38 = {\n chr1: 248956422,\n chr2: 242193529,\n chr3: 198295559,\n chr4: 190214555,\n chr5: 181538259,\n chr6: 170805979,\n chr7: 159345973,\n chr8: 145138636,\n chr9: 138394717,\n chr10: 133797422,\n chr11: 135086622,\n chr12: 133275309,\n chr13: 114364328,\n chr14: 107043718,\n chr15: 101991189,\n chr16: 90338345,\n chr17: 83257441,\n chr18: 80373285,\n chr19: 58617616,\n chr20: 64444167,\n chr21: 46709983,\n chr22: 50818468,\n chrX: 156040895,\n chrY: 57227415\n};\n\nexport const CHROM_SIZE_HG19 = {\n chr1: 249250621,\n chr2: 243199373,\n chr3: 198022430,\n chr4: 191154276,\n chr5: 180915260,\n chr6: 171115067,\n chr7: 159138663,\n chr8: 146364022,\n chr9: 141213431,\n chr10: 135534747,\n chr11: 135006516,\n chr12: 133851895,\n chr13: 115169878,\n chr14: 107349540,\n chr15: 102531392,\n chr16: 90354753,\n chr17: 81195210,\n chr18: 78077248,\n chr19: 59128983,\n chr20: 63025520,\n chr21: 48129895,\n chr22: 51304566,\n chrX: 155270560,\n chrY: 59373566,\n chrM: 16571\n};\n\nexport const CHROM_SIZE_HG18 = {\n chr1: 247249719,\n chr2: 242951149,\n chr3: 199501827,\n chr4: 191273063,\n chr5: 180857866,\n chr6: 170899992,\n chr7: 158821424,\n chr8: 146274826,\n chr9: 140273252,\n chr10: 135374737,\n chr11: 134452384,\n chr12: 132349534,\n chr13: 114142980,\n chr14: 106368585,\n chr15: 100338915,\n chr16: 88827254,\n chr17: 78774742,\n chr18: 76117153,\n chr19: 63811651,\n chr20: 62435964,\n chr21: 46944323,\n chr22: 49691432,\n chrX: 154913754,\n chrY: 57772954,\n chrM: 16571\n};\n\nexport const CHROM_SIZE_HG17 = {\n chr1: 245522847,\n chr2: 243018229,\n chr3: 199505740,\n chr4: 191411218,\n chr5: 180857866,\n chr6: 170975699,\n chr7: 158628139,\n chr8: 146274826,\n chr9: 138429268,\n chr10: 135413628,\n chr11: 134452384,\n chr12: 132449811,\n chr13: 114142980,\n chr14: 106368585,\n chr15: 100338915,\n chr16: 88827254,\n chr17: 78774742,\n chr18: 76117153,\n chr19: 63811651,\n chr20: 62435964,\n chr21: 46944323,\n chr22: 49554710,\n chrX: 154824264,\n chrY: 57701691,\n chrM: 16571\n};\n\nexport const CHROM_SIZE_HG16 = {\n chr1: 246127941,\n chr2: 243615958,\n chr3: 199344050,\n chr4: 191731959,\n chr5: 181034922,\n chr6: 170914576,\n chr7: 158545518,\n chr8: 146308819,\n chr9: 136372045,\n chr10: 135037215,\n chr11: 134482954,\n chr12: 132078379,\n chr13: 113042980,\n chr14: 105311216,\n chr15: 100256656,\n chr16: 90041932,\n chr17: 81860266,\n chr18: 76115139,\n chr19: 63811651,\n chr20: 63741868,\n chr21: 46976097,\n chr22: 49396972,\n chrX: 153692391,\n chrY: 50286555,\n chrM: 16571\n};\n\nexport const CHROM_SIZE_MM10 = {\n chr1: 195471971,\n chr2: 182113224,\n chr3: 160039680,\n chr4: 156508116,\n chr5: 151834684,\n chr6: 149736546,\n chr7: 145441459,\n chr8: 129401213,\n chr9: 124595110,\n chr10: 130694993,\n chr11: 122082543,\n chr12: 120129022,\n chr13: 120421639,\n chr14: 124902244,\n chr15: 104043685,\n chr16: 98207768,\n chr17: 94987271,\n chr18: 90702639,\n chr19: 61431566,\n chrX: 171031299,\n chrY: 91744698,\n chrM: 16299\n};\n\nexport const CHROM_SIZE_MM9 = {\n chr1: 197195432,\n chr2: 181748087,\n chr3: 159599783,\n chr4: 155630120,\n chr5: 152537259,\n chr6: 149517037,\n chr7: 152524553,\n chr8: 131738871,\n chr9: 124076172,\n chr10: 129993255,\n chr11: 121843856,\n chr12: 121257530,\n chr13: 120284312,\n chr14: 125194864,\n chr15: 103494974,\n chr16: 98319150,\n chr17: 95272651,\n chr18: 90772031,\n chr19: 61342430,\n chrX: 166650296,\n chrY: 15902555,\n chrM: 16299\n};\n\nexport type Chromosome =\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | '10'\n | '11'\n | '12'\n | '13'\n | '14'\n | '15'\n | '16'\n | '17'\n | '18'\n | '19'\n | '20'\n | '21'\n | '22'\n | 'X'\n | 'Y'\n | 'M'\n | 'chr1'\n | 'chr2'\n | 'chr3'\n | 'chr4'\n | 'chr5'\n | 'chr6'\n | 'chr7'\n | 'chr8'\n | 'chr9'\n | 'chr10'\n | 'chr11'\n | 'chr12'\n | 'chr13'\n | 'chr14'\n | 'chr15'\n | 'chr16'\n | 'chr17'\n | 'chr18'\n | 'chr19'\n | 'chr20'\n | 'chr21'\n | 'chr22'\n | 'chrX'\n | 'chrY'\n | 'chrM';\n","import type { Assembly, ChromSizes, GenomicPosition } from '@gosling-lang/gosling-schema';\nimport {\n CHROM_SIZE_HG16,\n CHROM_SIZE_HG17,\n CHROM_SIZE_HG18,\n CHROM_SIZE_HG19,\n CHROM_SIZE_HG38,\n CHROM_SIZE_MM10,\n CHROM_SIZE_MM9\n} from './chrom-size';\n\nexport interface ChromSize {\n size: { [chr: string]: number };\n interval: { [chr: string]: [number, number] };\n total: number;\n path: string;\n}\n\n/**\n * Get relative chromosome position (e.g., `100` => `{ chromosome: 'chr1', position: 100 }`)\n * @param absPos number which is the absolute chromosome position\n * @param assembly the assembly used to calculate which chromosome position\n * @param returnWithinAssembly If true, then if the absolute position is before the first chromosome, it returns the\n * first position of the first chromosome. If the absolute position is after the last chromosome, it returns the last\n * position of the last chromosome\n * @returns the genomic position of the absPos\n */\nexport function getRelativeGenomicPosition(\n absPos: number,\n assembly?: Assembly,\n returnWithinAssembly = false\n): GenomicPosition {\n const chrSizes = Object.entries(computeChromSizes(assembly).interval);\n const minPosChr = { chromosome: 'unknown', position: Infinity } as GenomicPosition;\n const maxPosChr = { chromosome: 'unknown', position: 0 } as GenomicPosition;\n for (const chrSize of chrSizes) {\n const [chromosome, absInterval] = chrSize;\n const [start, end] = absInterval;\n // absPos was found within this chromosome\n if (start <= absPos && absPos < end) {\n return { chromosome, position: absPos - start } as GenomicPosition;\n }\n // Update the min and max chromosomes found\n if (start < minPosChr.position) {\n minPosChr.chromosome = chromosome;\n minPosChr.position = start;\n }\n if (end > maxPosChr.position) {\n maxPosChr.chromosome = chromosome;\n maxPosChr.position = end;\n }\n }\n if (returnWithinAssembly) {\n // Return either the min or max chromosome position\n if (absPos < minPosChr.position) {\n return minPosChr;\n } else {\n return maxPosChr;\n }\n } else {\n return { chromosome: 'unknown', position: absPos };\n }\n}\n\n/**\n * Generate a URL for custom chrom sizes\n * @param chromSizes A custom assembly that specifies chromosomes and their sizes\n */\nfunction createChromSizesUrl(chromSizes: ChromSizes): string {\n const text = chromSizes.map(d => d.join('\\t')).join('\\n');\n const tsv = new Blob([text], { type: 'text/tsv' });\n return URL.createObjectURL(tsv);\n}\n\n/**\n * Get chromosome sizes.\n * @param assembly (default: 'hg38')\n */\nexport function computeChromSizes(assembly?: Assembly): ChromSize {\n if (assembly && typeof assembly === 'string' && assembly in CRHOM_SIZES) {\n return CRHOM_SIZES[assembly];\n } else if (Array.isArray(assembly) && assembly.length !== 0) {\n // custom assembly\n const size = Object.fromEntries(assembly);\n return {\n size,\n interval: getChromInterval(size),\n total: getChromTotalSize(size),\n path: createChromSizesUrl(assembly)\n };\n } else {\n // We do not have that assembly prepared, so return a default one.\n return CRHOM_SIZES.hg38;\n }\n}\n\nconst basePath = (assembly: string) => `https://s3.amazonaws.com/gosling-lang.org/data/${assembly}.chrom.sizes`;\nconst CRHOM_SIZES: { [assembly: string]: ChromSize } = Object.freeze({\n hg38: {\n size: CHROM_SIZE_HG38,\n interval: getChromInterval(CHROM_SIZE_HG38),\n total: getChromTotalSize(CHROM_SIZE_HG38),\n path: basePath('hg38')\n },\n hg19: {\n size: CHROM_SIZE_HG19,\n interval: getChromInterval(CHROM_SIZE_HG19),\n total: getChromTotalSize(CHROM_SIZE_HG19),\n path: basePath('hg19')\n },\n hg18: {\n size: CHROM_SIZE_HG18,\n interval: getChromInterval(CHROM_SIZE_HG18),\n total: getChromTotalSize(CHROM_SIZE_HG18),\n path: basePath('hg18')\n },\n hg17: {\n size: CHROM_SIZE_HG17,\n interval: getChromInterval(CHROM_SIZE_HG17),\n total: getChromTotalSize(CHROM_SIZE_HG17),\n path: basePath('hg17')\n },\n hg16: {\n size: CHROM_SIZE_HG16,\n interval: getChromInterval(CHROM_SIZE_HG16),\n total: getChromTotalSize(CHROM_SIZE_HG16),\n path: basePath('hg16')\n },\n mm10: {\n size: CHROM_SIZE_MM10,\n interval: getChromInterval(CHROM_SIZE_MM10),\n total: getChromTotalSize(CHROM_SIZE_MM10),\n path: basePath('mm10')\n },\n mm9: {\n size: CHROM_SIZE_MM9,\n interval: getChromInterval(CHROM_SIZE_MM9),\n total: getChromTotalSize(CHROM_SIZE_MM9),\n path: basePath('mm9')\n },\n // `unknown` assembly contains only one chromosome with max length\n unknown: {\n size: { chr: Number.MAX_VALUE },\n interval: { chr: [0, Number.MAX_VALUE] },\n total: Number.MAX_VALUE,\n path: basePath('hg38') // just to ensure this does not make crash\n }\n});\n\n/**\n * Some presets of auto-complete IDs (`autocompleteId`) to search for genes using the HiGlass server.\n */\nexport function getAutoCompleteObject(assembly: Assembly = 'hg38') {\n const base = {\n autocompleteServer: 'https://server.gosling-lang.org/api/v1',\n chromInfoServer: 'https://server.gosling-lang.org/api/v1',\n chromInfoId: assembly\n };\n switch (assembly) {\n case 'hg19':\n return { ...base, autocompleteId: 'gene-annotation-hg19' };\n case 'mm10':\n return { ...base, autocompleteId: 'gene-annotation-mm10' };\n case 'mm9':\n // mm9 is not supported by the Gosling server, so we use HiGlass server.\n // To support, we need to add mm9 gene annotation to the Gosling server.\n return {\n ...base,\n autocompleteServer: 'https://higlass.io/api/v1',\n chromInfoServer: 'https://higlass.io/api/v1',\n autocompleteId: 'GUm5aBiLRCyz2PsBea7Yzg'\n };\n case 'hg38':\n default:\n return { ...base, autocompleteId: 'gene-annotation' };\n }\n}\n\n/**\n * Calculate cumulative interval of each chromosome.\n */\nexport function getChromInterval(chromSize: { [k: string]: number }) {\n const interval: { [k: string]: [number, number] } = {};\n\n Object.keys(chromSize).reduce((sum, k) => {\n interval[k] = [sum, sum + chromSize[k]];\n return sum + chromSize[k];\n }, 0);\n\n return interval;\n}\n\n/**\n * Calculate total size of entire chromosomes.\n */\nexport function getChromTotalSize(chromSize: { [k: string]: number }) {\n return Object.values(chromSize).reduce((sum, current) => sum + current, 0);\n}\n\nexport function parseGenomicPosition(position: string): { chromosome: string; start?: number; end?: number } {\n const [chromosome, intervalString] = position.split(':');\n if (intervalString) {\n const [start, end] = intervalString.split('-').map(s => +s.replace(/,/g, ''));\n // only return if both are valid\n if (!Number.isNaN(start) && !Number.isNaN(end)) {\n return { chromosome, start, end };\n }\n }\n return { chromosome };\n}\n\n/**\n * A class that consistently manage and convert genomics positions.\n */\nexport class GenomicPositionHelper {\n constructor(public chromosome: string, public start?: number, public end?: number) {}\n static fromString(str: string) {\n const result = parseGenomicPosition(str);\n return new GenomicPositionHelper(result.chromosome, result.start, result.end);\n }\n toAbsoluteCoordinates(assembly?: Assembly, padding = 0): [number, number] {\n const info = computeChromSizes(assembly);\n const size = info.size[this.chromosome];\n const interval = info.interval[this.chromosome];\n if (size === undefined || interval === undefined) {\n throw new Error(`Chromosome name ${this.chromosome} is not valid`);\n }\n let { start, end } = this;\n if (start === undefined || end === undefined) {\n // if only a chromosome name is specified, set to the extent of the chromosome\n [start, end] = [1, size];\n }\n const offset = interval[0];\n return [start + offset - padding, end + offset + padding];\n }\n}\n","import { bisector } from 'd3-array';\nimport { RemoteFile as _RemoteFile } from 'generic-filehandle';\n\nimport type * as HiGlass from '@higlass/types';\nimport type { Assembly, ChromSizes, Datum } from '@gosling-lang/gosling-schema';\n\nexport type CommonDataConfig = {\n assembly: Assembly;\n x?: string;\n xe?: string;\n x1?: string;\n x1e?: string;\n urlFetchOptions?: RequestInit;\n};\n\nexport class DataSource<File, Options> {\n chromInfo: ExtendedChromInfo;\n tilesetInfo: ReturnType<typeof tilesetInfoFromChromInfo>;\n\n constructor(public file: File, chromSizes: ChromSizes, public options: Options) {\n this.chromInfo = sizesToChromInfo(chromSizes);\n this.tilesetInfo = tilesetInfoFromChromInfo(this.chromInfo);\n }\n}\n\n/**\n * Filter data before sending to a track considering the visible genomic area in the track.\n * TODO(2022-Jul-13): Consider genomic `y` channels as well.\n */\nexport function filterUsingGenoPos(\n data: Datum[],\n [minX, maxX]: [number, number],\n config: Omit<CommonDataConfig, 'assembly'>\n) {\n const { x, xe, x1, x1e } = config;\n const definedXFields = [x, xe, x1, x1e].filter(f => f) as string[];\n return data.filter((d: Datum) => {\n if (definedXFields.length === 0) {\n // no filter applies\n return true;\n } else if (definedXFields.length === 1) {\n // filter based on one genomic position\n const value = +d[definedXFields[0]];\n return typeof value === 'number' && minX < value && value <= maxX;\n } else {\n // filter based on two genomic positions, i.e., check overlaps\n const values = definedXFields.map(f => +d[f]).filter(v => !isNaN(v));\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n return minX <= maxValue && minValue <= maxX;\n }\n });\n}\n\nconst chromInfoBisector = bisector((d: { pos: number }) => d.pos).left;\n\nconst chrToAbs = (chrom: string, chromPos: number, chromInfo: HiGlass.ChromInfo) =>\n chromInfo.chrPositions[chrom].pos + chromPos;\n\nconst absToChr = (absPosition: number, chromInfo: HiGlass.ChromInfo) => {\n if (!chromInfo || !chromInfo.cumPositions || !chromInfo.cumPositions.length) {\n return null;\n }\n\n let insertPoint = chromInfoBisector(chromInfo.cumPositions, absPosition);\n const lastChr = chromInfo.cumPositions[chromInfo.cumPositions.length - 1].chr;\n const lastLength = chromInfo.chromLengths[lastChr];\n\n // @ts-expect-error\n insertPoint -= insertPoint > 0 && 1;\n\n let chrPosition = Math.floor(absPosition - chromInfo.cumPositions[insertPoint].pos);\n let offset = 0;\n\n if (chrPosition < 0) {\n // before the start of the genome\n offset = chrPosition - 1;\n chrPosition = 1;\n }\n\n if (insertPoint === chromInfo.cumPositions.length - 1 && chrPosition > lastLength) {\n // beyond the last chromosome\n offset = chrPosition - lastLength;\n chrPosition = lastLength;\n }\n\n return [chromInfo.cumPositions[insertPoint].chr, chrPosition, offset, insertPoint] as const;\n};\n\n/**\n * Get a chromosome name for the consistentcy, e.g., `1` --> `chr1`.\n * @param chrName A chromosome name to be sanitized\n * @param assembly A genome assembly of the data\n * @param chromosomePrefix A prefix string that can be replaced to 'chr'\n * @returns\n */\nexport function sanitizeChrName(chrName: string, assembly: Assembly, chromosomePrefix?: string) {\n if (Array.isArray(assembly)) {\n // this is a custom assembly, so use this as is\n return chrName;\n }\n\n // For assemblies in Gosling, we use the `chr` prefix consistently\n if (chromosomePrefix) {\n // `hs1` --> `chr1`\n chrName = chrName.replace(chromosomePrefix, 'chr');\n } else if (!chrName.includes('chr')) {\n // `1` --> `chr1`\n chrName = `chr${chrName}`;\n }\n return chrName;\n}\n\nexport type ExtendedChromInfo = HiGlass.ChromInfo & {\n absToChr(absPos: number): ReturnType<typeof absToChr> | null;\n chrToAbs(chr: [name: string, pos: number]): number | null;\n};\n\nexport function tilesetInfoFromChromInfo(chromInfo: ExtendedChromInfo, tileSize = 1024) {\n return {\n tile_size: tileSize,\n bins_per_dimension: tileSize,\n max_zoom: Math.ceil(Math.log(chromInfo.totalLength / tileSize) / Math.log(2)),\n max_width: chromInfo.totalLength,\n min_pos: [0],\n max_pos: [chromInfo.totalLength]\n };\n}\n\nexport function sizesToChromInfo(sizes: [string, number][]): ExtendedChromInfo {\n const info: HiGlass.ChromInfo = {\n cumPositions: [],\n chromLengths: {},\n chrPositions: {},\n totalLength: 0\n };\n\n sizes.forEach(([chr, length], i) => {\n const chrPosition = { id: i, chr, pos: info.totalLength };\n info.chrPositions[chr] = chrPosition;\n info.chromLengths[chr] = length;\n info.cumPositions.push(chrPosition);\n info.totalLength += length;\n });\n\n return {\n ...info,\n absToChr: absPos => (info.chrPositions ? absToChr(absPos, info) : null),\n chrToAbs: ([chrName, chrPos]) => (info.chrPositions ? chrToAbs(chrName, chrPos, info) : null)\n };\n}\n\nexport class RemoteFile extends _RemoteFile {\n // Overrides `read` to eagerly read 200 or 206 response\n // from https://github.com/GMOD/generic-filehandle/blob/0e8209be25e3097307bd15e964edd8c017e808d7/src/remoteFile.ts#L100-L162\n public read: _RemoteFile['read'] = async (\n buffer,\n offset = 0,\n length,\n position = 0,\n opts = {}\n ): Promise<{ bytesRead: number; buffer: Buffer }> => {\n const { headers = {}, signal, overrides = {} } = opts;\n\n if (length < Infinity) {\n headers.range = `bytes=${position}-${position + length}`;\n } else if (length === Infinity && position !== 0) {\n headers.range = `bytes=${position}-`;\n }\n const args = {\n // @ts-expect-error private property\n ...this.baseOverrides,\n ...overrides,\n headers: {\n ...headers,\n ...overrides.headers,\n // @ts-expect-error private property\n ...this.baseOverrides.headers\n },\n method: 'GET',\n redirect: 'follow',\n mode: 'cors',\n signal\n };\n const response = await this.fetch(this.url, args);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} ${response.statusText} ${this.url}`);\n }\n\n // Just read the response if it was successful.\n if (response.status === 200 || response.status === 206) {\n // @ts-expect-error private method\n const responseData = await this.getBufferFromResponse(response);\n const bytesCopied = responseData.copy(buffer, offset, 0, Math.min(length, responseData.length));\n\n // try to parse out the size of the remote file\n const res = response.headers.get('content-range');\n const sizeMatch = /\\/(\\d+)$/.exec(res || '');\n if (sizeMatch && sizeMatch[1]) {\n // @ts-expect-error private property\n this._stat = { size: parseInt(sizeMatch[1], 10) };\n }\n\n return { bytesRead: bytesCopied, buffer };\n }\n\n // TODO: try harder here to gather more information about what the problem is\n throw new Error(`HTTP ${response.status} fetching ${this.url}`);\n };\n}\n\nexport interface TabularDataFetcher<Tile> {\n getTabularData(tileIds: string[]): Promise<Tile[]>;\n MAX_TILE_WIDTH?: number;\n}\n"],"names":["max","data","color","_a","_b","d3max","d3min","_c","_d","_f","_e","_h","_g","x1","d","title","labelTextStyle","t","type","global","this","exports","HEXDIG$$","PCT_ENCODED$","UNRESERVED$$","ucs2encode","basicToDigit","digitToBasic","adapt","decode","encode","toUnicode","toASCII","decodeUnreserved","base","resolve","uri","equal","parse","serialize","UUID","ucs2length","util","toHash","require$$0","require$$1","IDENTIFIER","rules","JSON_POINTER","RELATIVE_JSON_POINTER","SchemaObject","traverse","jsonSchemaTraverseModule","URI","require$$2","require$$3","require$$4","compile","ref","self","ValidationError","MissingRefError","validate","$id","$schema","$rulesGroup","$rule","errorClasses","stableStringify","require$$5","formats","localRefs","baseId","customRuleCode","v","refVal","schema","keyword","validateSchema","Cache","cacheModule","URL","$sch","properties","required","require$$7","require$$9","require$$11","require$$12","require$$13","require$$14","require$$19","require$$21","require$$23","KEYWORDS","group","metaSchema","dataType","definition","i","require$$6","require$$8","require$$10","regex","format","_RemoteFile"],"mappings":"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EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACV;AAEO,MAAM,kBAAkB;AAAA,EAC3B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACV;AAEO,MAAM,kBAAkB;AAAA,EAC3B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACV;AAEO,MAAM,kBAAkB;AAAA,EAC3B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,O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","x_google_ignoreList":[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68]}