{"version":3,"file":"primitive-type-checker.js","sources":["../node_modules/@actualwave/has-own/has-own.js","../node_modules/@actualwave/map-of-sets/index.js","../node_modules/@actualwave/type-checker-levels-storage/index.js","../node_modules/@actualwave/type-checker-simple-reporting/index.js","../source/error-reporter.js","../source/utils.js","../source/checker.js"],"sourcesContent":["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst hasOwn = (\n (has) =>\n (target, property) =>\n Boolean(target && has.call(target, property))\n)(Object.prototype.hasOwnProperty);\n\nexports.hasOwn = hasOwn;\nexports.default = hasOwn;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass MapOfSets {\n constructor() {\n this.storage = new Map();\n }\n /**\r\n * Check if key exists\r\n * @param {*} key\r\n */\n\n\n has(key) {\n const values = this.storage.get(key);\n return values && values.size;\n }\n /**\r\n * Check if value exists for key\r\n * @param {*} key\r\n * @param {*} value\r\n */\n\n\n hasValue(key, value) {\n const values = this.storage.get(key);\n return values && values.has(value);\n }\n /**\r\n * Get Set of values for key\r\n * @param {*} key\r\n */\n\n\n get(key) {\n return this.storage.get(key);\n }\n /**\r\n * List values for key, returns empty array if no key nor values stored\r\n * @param {*} key\r\n */\n\n\n list(key) {\n const values = this.storage.get(key);\n return values ? Array.from(values) : [];\n }\n /**\r\n * Call callback for each value of each key\r\n * callback (value:*, key:*, storage:*):void\r\n * @param {Function} callback\r\n */\n\n\n forEach(callback) {\n this.storage.forEach((values, key) => values.forEach(value => callback(value, key, this)));\n }\n /**\r\n * Call callback function for each value of specified key\r\n * callback (value:*, key:*, storage:*):void\r\n * @param {*} key\r\n * @param {Function} callback\r\n */\n\n\n eachValue(key, callback) {\n const values = this.storage.get(key);\n\n if (values) {\n values.forEach(value => callback(value, key, this));\n }\n }\n /**\r\n * Add to new value to key.\r\n * @param {*} key\r\n * @param {*} value\r\n */\n\n\n add(key, value) {\n if (!value) return;\n const values = this.storage.get(key);\n\n if (values) {\n values.add(value);\n } else {\n this.storage.set(key, new Set([value]));\n }\n }\n /**\r\n * Replace all values for key\r\n * @param {*} key\r\n * @param {Set} types\r\n */\n\n\n set(key, values) {\n if (!values || values.size === 0) {\n this.remove(key);\n return;\n }\n\n this.storage.set(key, new Set(values));\n }\n /**\r\n * Remove all values for key\r\n * @param {*} key\r\n */\n\n\n remove(key) {\n this.storage.delete(key);\n }\n /**\r\n * Remove single value from key\r\n * @param {*} key\r\n * @param {*} value\r\n */\n\n\n removeValue(key, value) {\n const values = this.storage.get(key);\n\n if (values) {\n values.delete(value);\n\n if (!values.size) {\n this.remove(key);\n }\n }\n }\n /**\r\n * Clone all key-value stores\r\n */\n\n\n clone() {\n const target = new MapOfSets();\n this.storage.forEach((values, key) => target.set(key, new Set(values)));\n return target;\n }\n\n}\nconst createMapOfSets = () => new MapOfSets();\n\nexports.MapOfSets = MapOfSets;\nexports.createMapOfSets = createMapOfSets;\nexports.default = MapOfSets;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar hasOwn = _interopDefault(require('@actualwave/has-own'));\nvar MapOfSets = _interopDefault(require('@actualwave/map-of-sets'));\n\n/**\n * Do not check or report type inconsistency\n */\nconst REPORT_NEVER = 'never';\n/**\n * Report type inconsistency once, i.e. record all types and report new\n */\nconst REPORT_ONCE = 'once';\n/**\n * Report whenever type is inconsistent with initial\n */\nconst REPORT_ALL = 'all';\n\nconst REPORT_KEY = Symbol('type-checkers:report-level');\nconst PROPERTY_REPORT_KEY = Symbol('type-checkers:property-report-level');\n\nlet globalReportingLevel = REPORT_ALL;\n\nconst validateReportingLevel = level => {\n switch (level) {\n case REPORT_NEVER:\n case REPORT_ONCE:\n return level;\n default:\n return REPORT_ALL;\n }\n};\n\nconst setGlobalReportingLevel = level => {\n globalReportingLevel = validateReportingLevel(level);\n};\n\nconst getGlobalReportingLevel = () => globalReportingLevel;\n\nconst setTargetGeneralReportingLevel = (target, level) => {\n if (level) {\n target[REPORT_KEY] = validateReportingLevel(level);\n } else {\n delete target[REPORT_KEY];\n }\n};\n\nconst setTargetPropertyReportingLevel = (target, perPropertyLevels) => {\n if (!perPropertyLevels) {\n delete target[PROPERTY_REPORT_KEY];\n return;\n }\n\n target[PROPERTY_REPORT_KEY] = Object.keys(perPropertyLevels).reduce((levels, prop) => {\n levels[prop] = validateReportingLevel(perPropertyLevels[prop]);\n return levels;\n }, {});\n};\n\nconst setReportingLevel = (target, generalLevel, perPropertyLevels) => {\n setTargetGeneralReportingLevel(target, generalLevel);\n setTargetPropertyReportingLevel(target, perPropertyLevels);\n};\n\nconst getTargetReportingLevel = (target, key) => {\n if (hasOwn(target[PROPERTY_REPORT_KEY], key)) {\n return target[PROPERTY_REPORT_KEY][key];\n }\n\n return target[REPORT_KEY];\n};\n\nconst getReportingLevel = (target, key) => {\n let level = getTargetReportingLevel(target, key);\n\n if (!level) {\n level = getTargetReportingLevel(target.constructor, key);\n }\n\n return level || getGlobalReportingLevel();\n};\n\n/**\n *\n * @param {any} key\n * @param {Set} target\n * @param {Set} source\n */\nconst defaultMergeStrategy = (key, target, source) => {\n source.forEach(type => {\n if (!target.has(type)) {\n target.add(type);\n }\n });\n\n return target;\n};\n\nclass TypeInfoStorage extends MapOfSets {\n /**\n * Add to type information for specified key.\n * @param {*} key\n * @param {*} type\n * @param {Number} level\n */\n add(key, type, level) {\n if (!type) return;\n\n switch (level) {\n case REPORT_NEVER:\n this.remove(key);\n break;\n case REPORT_ONCE:\n super.add(key, type);\n break;\n case REPORT_ALL:\n default:\n {\n const types = this.storage.get(key);\n\n if (!types || !types.size) {\n this.storage.set(key, new Set([type]));\n }\n }\n break;\n }\n }\n\n addFor(key, type, target) {\n this.add(key, type, getReportingLevel(target, key));\n }\n\n /**\n * Replace types information for specific key\n * @param {*} key\n * @param {Set} types\n * @param {Number} level\n */\n set(key, types, level) {\n if (!types || types.size === 0 || level === REPORT_NEVER) {\n this.remove(key);\n return;\n }\n\n super.set(key, types);\n }\n\n /**\n *\n * @param {*} key\n * @param {Set} types\n * @param {Object} target\n */\n setFor(key, types, target) {\n return this.set(key, types, getReportingLevel(target, key));\n }\n\n clone() {\n const target = new TypeInfoStorage();\n this.storage.forEach((types, key) => target.set(key, new Set(types)));\n\n return target;\n }\n\n /**\n * Copy types from current storage to storage passed as first argument.\n * @param {Map} storage\n * @param {Object} [target]\n * @param {Function} [mergeStrategy]\n */\n copyTo(storage, target, mergeStrategy = defaultMergeStrategy) {\n this.storage.forEach((types, key) => {\n const level = validateReportingLevel(target && getReportingLevel(target, key));\n\n switch (level) {\n case REPORT_ALL:\n case REPORT_ONCE:\n if (storage.has(key)) {\n storage.set(key, mergeStrategy(key, storage.get(key), types, level), level);\n } else {\n storage.set(key, new Set(types));\n }\n break;\n case REPORT_NEVER:\n default:\n break;\n }\n });\n\n return storage;\n }\n}\n\nconst createTypesStorage = () => new TypeInfoStorage();\n\nexports.REPORT_ALL = REPORT_ALL;\nexports.REPORT_NEVER = REPORT_NEVER;\nexports.REPORT_ONCE = REPORT_ONCE;\nexports.createTypesStorage = createTypesStorage;\nexports.defaultMergeStrategy = defaultMergeStrategy;\nexports.getGlobalReportingLevel = getGlobalReportingLevel;\nexports.setGlobalReportingLevel = setGlobalReportingLevel;\nexports.getReportingLevel = getReportingLevel;\nexports.setReportingLevel = setReportingLevel;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/* eslint-disable import/prefer-default-export */\n\nconst constructErrorString = (action, name, required, received) => `${action}Error on \"${name}\" instead of \"${required}\" received \"${received}\"`;\n\n/* eslint-disable no-console */\n\nconst ConsoleErrorReporter = (action, name, requiredTypeString, actualTypeString) => console.error(constructErrorString(action, name, requiredTypeString, actualTypeString));\n\nconst ConsoleWarnReporter = (action, name, requiredTypeString, actualTypeString) => console.warn(constructErrorString(action, name, requiredTypeString, actualTypeString));\n\n/* eslint-disable import/prefer-default-export */\n\nconst ThrowErrorReporter = (action, name, requiredTypeString, receivedTypeString) => {\n throw new Error(constructErrorString(action, name, requiredTypeString, receivedTypeString));\n};\n\nexports.ConsoleErrorReporter = ConsoleErrorReporter;\nexports.ConsoleWarnReporter = ConsoleWarnReporter;\nexports.ThrowErrorReporter = ThrowErrorReporter;\n//# sourceMappingURL=index.js.map\n","import { ConsoleErrorReporter } from '@actualwave/type-checker-simple-reporting';\n\nlet errorReporter = ConsoleErrorReporter;\n\nexport const getErrorReporter = () => errorReporter;\n\nexport const setErrorReporter = (value) => {\n errorReporter = value;\n};\n","import { getErrorReporter } from './error-reporter';\n\nexport const MERGE = '(Merge)';\nexport const GET_PROPERTY = '(GetProperty)';\nexport const SET_PROPERTY = '(SetProperty)';\nexport const ARGUMENTS = '(Arguments)';\nexport const RETURN_VALUE = '(ReturnValue)';\n\nexport const checkPrimitiveType = (storage, key, type) => {\n return !storage.has(key) || storage.hasValue(key, type);\n};\n\nexport const getTypeValue = (value) => {\n if (value === undefined) {\n return '';\n }\n\n const type = typeof value;\n\n if (type === 'object' && value instanceof Array) {\n return 'array';\n }\n\n return type;\n};\n","/* eslint-disable class-methods-use-this */\nimport { createTypesStorage } from '@actualwave/type-checker-levels-storage';\n\nimport { getErrorReporter } from './error-reporter';\n\nimport {\n MERGE,\n ARGUMENTS,\n GET_PROPERTY,\n RETURN_VALUE,\n SET_PROPERTY,\n checkPrimitiveType,\n getTypeValue,\n} from './utils';\n\nclass PrimitiveTypeChecker {\n constructor(collectTypesOnInit = true, enableGetChecker = true) {\n this.collectTypesOnInit = collectTypesOnInit;\n this.enableGetChecker = enableGetChecker;\n }\n\n init(target, cachedStorage = null) {\n let storage;\n\n if (cachedStorage) {\n storage = cachedStorage;\n } else if (this.collectTypesOnInit) {\n storage = createTypesStorage();\n Object.keys(target).forEach((key) =>\n storage.addFor(key, this.getTypeValue(target[key]), target),\n );\n }\n\n return storage;\n }\n\n getTypeValue(value) {\n return getTypeValue(value);\n }\n\n checkValueType(action, storage, target, names, type) {\n if (!type) {\n return true;\n }\n\n const { lastName } = names;\n\n const compatible = this.isTypeCompatible(storage, lastName, type, target);\n\n if (!compatible) {\n const errorReporter = getErrorReporter();\n\n errorReporter(action, names.toString(), storage.list(lastName), type);\n }\n\n storage.addFor(lastName, type, target);\n\n return compatible;\n }\n\n isTypeCompatible(storage, key, type) {\n return checkPrimitiveType(storage, key, type);\n }\n\n /**\n * FIXME add function to @actualwave/type-checker-levels-storage to merge configs\n * this function should accept storages and merge strategy callback which will\n * receive type info and decide what should be merged and what not\n */\n mergeConfigs(storage, sourceStorage, names) {\n const errorReporter = getErrorReporter();\n\n sourceStorage.copyTo(storage, null, (key, target, source) => {\n const targetFirstValue = target.values().next().value;\n\n source.forEach((sourceType) => {\n if (!target.has(sourceType)) {\n target.add(sourceType);\n\n if (targetFirstValue) {\n errorReporter(MERGE, names, targetFirstValue, sourceType);\n }\n }\n });\n\n return target;\n });\n }\n\n getProperty(target, names, value, storage) {\n if (!this.enableGetChecker) {\n return true;\n }\n\n const type = this.getTypeValue(value);\n\n return this.checkValueType(GET_PROPERTY, storage, target, names, type);\n }\n\n setProperty(target, names, value, storage) {\n const type = this.getTypeValue(value);\n\n return this.checkValueType(SET_PROPERTY, storage, target, names, type);\n }\n\n arguments(target, names, args, storage) {\n const { length } = args;\n let valid = true;\n\n for (let index = 0; index < length; index++) {\n const type = this.getTypeValue(args[index]);\n const agrValid = this.checkValueType(ARGUMENTS, storage, target, names.clone(index), type);\n\n valid = agrValid && valid;\n }\n\n return valid;\n }\n\n returnValue(target, names, value, storage) {\n const type = this.getTypeValue(value);\n\n const callNames = names.clone();\n callNames.appendCustomValue(RETURN_VALUE);\n\n return this.checkValueType(RETURN_VALUE, storage, target, callNames, type);\n }\n}\n\nexport const createPrimitiveTypeChecker = (collectTypesOnInit = true, enableGetChecker = true) =>\n new PrimitiveTypeChecker(collectTypesOnInit, enableGetChecker);\n\nexport default PrimitiveTypeChecker;\n"],"names":["require$$0","require$$1","errorReporter","ConsoleErrorReporter","getErrorReporter","setErrorReporter","value","MERGE","GET_PROPERTY","SET_PROPERTY","ARGUMENTS","RETURN_VALUE","checkPrimitiveType","storage","key","type","has","hasValue","getTypeValue","undefined","Array","PrimitiveTypeChecker","constructor","collectTypesOnInit","enableGetChecker","init","target","cachedStorage","createTypesStorage","Object","keys","forEach","addFor","checkValueType","action","names","lastName","compatible","isTypeCompatible","toString","list","mergeConfigs","sourceStorage","copyTo","source","targetFirstValue","values","next","sourceType","add","getProperty","setProperty","arguments","args","length","valid","index","agrValid","clone","returnValue","callNames","appendCustomValue","createPrimitiveTypeChecker"],"mappings":"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"}