{"version":3,"file":"Form.min.js","mappings":"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","sources":["webpack://formla/webpack/universalModuleDefinition","webpack://formla/./node_modules/extract-files/lib/extractFiles.js","webpack://formla/./node_modules/extract-files/lib/index.js","webpack://formla/./node_modules/extract-files/lib/ReactNativeFile.js","webpack://formla/webpack/bootstrap","webpack://formla/webpack/runtime/define property getters","webpack://formla/webpack/runtime/hasOwnProperty shorthand","webpack://formla/webpack/runtime/make namespace object","webpack://formla/./src/utils.js","webpack://formla/./src/Errors.js","webpack://formla/./src/Form.js","webpack://formla/./src/http.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"formla\"] = factory();\n\telse\n\t\troot[\"formla\"] = factory();\n})(self, () => {\nreturn ","'use strict'\n\nexports.__esModule = true\nexports.extractFiles = extractFiles\n\nvar _ReactNativeFile = require('./ReactNativeFile')\n\nfunction extractFiles(value, path) {\n  if (path === void 0) {\n    path = ''\n  }\n\n  var clone\n  var files = new Map()\n\n  function addFile(paths, file) {\n    var storedPaths = files.get(file)\n    if (storedPaths) storedPaths.push.apply(storedPaths, paths)\n    else files.set(file, paths)\n  }\n\n  if (\n    (typeof File !== 'undefined' && value instanceof File) ||\n    (typeof Blob !== 'undefined' && value instanceof Blob) ||\n    value instanceof _ReactNativeFile.ReactNativeFile\n  ) {\n    clone = null\n    addFile([path], value)\n  } else {\n    var prefix = path ? path + '.' : ''\n    if (typeof FileList !== 'undefined' && value instanceof FileList)\n      clone = Array.prototype.map.call(value, function(file, i) {\n        addFile(['' + prefix + i], file)\n        return null\n      })\n    else if (Array.isArray(value))\n      clone = value.map(function(child, i) {\n        var result = extractFiles(child, '' + prefix + i)\n        result.files.forEach(addFile)\n        return result.clone\n      })\n    else if (value && value.constructor === Object) {\n      clone = {}\n\n      for (var i in value) {\n        var result = extractFiles(value[i], '' + prefix + i)\n        result.files.forEach(addFile)\n        clone[i] = result.clone\n      }\n    } else clone = value\n  }\n\n  return {\n    clone: clone,\n    files: files\n  }\n}\n","'use strict'\n\nexports.__esModule = true\nexports.ReactNativeFile = exports.extractFiles = void 0\n\nvar _extractFiles = require('./extractFiles')\n\nexports.extractFiles = _extractFiles.extractFiles\n\nvar _ReactNativeFile = require('./ReactNativeFile')\n\nexports.ReactNativeFile = _ReactNativeFile.ReactNativeFile\n","'use strict'\n\nexports.__esModule = true\nexports.ReactNativeFile = void 0\n\nvar ReactNativeFile = function ReactNativeFile(_ref) {\n  var uri = _ref.uri,\n    name = _ref.name,\n    type = _ref.type\n  this.uri = uri\n  this.name = name\n  this.type = type\n}\n\nexports.ReactNativeFile = ReactNativeFile\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// @flow\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function hasOwn (obj: Object, key: string): boolean %checks {\n    return hasOwnProperty.call(obj, key)\n}\n\nexport function isFile(val: mixed): boolean %checks {\n    return !!val && (val instanceof Blob);\n}\n\nexport function clone(obj: any): any {\n    if (isArr(obj)) {\n        return obj.map(clone);\n    }\n    if (obj === null || obj === undefined) {\n        return null;\n    }\n    if (isFile(obj) || ['number', 'string', 'boolean'].includes(typeof obj)) {\n        return obj;\n    }\n    if (isObj(obj)) {\n        let target = {};\n\n        Object.keys(obj).forEach((key) => target[key] = clone(obj[key]));\n\n        return target;\n    }\n}\n\nexport function emptyValue(original: mixed): Array<any> | {} | '' | null {\n    if (original instanceof Array) {\n        return [];\n    }\n    if (typeof original === 'object') {\n        return {};\n    }\n    if (typeof original === 'string') {\n        return '';\n    }\n    return null;\n}\n\nexport function isObj(value: mixed): boolean %checks {\n    return value !== null && typeof value === 'object';\n}\n\nexport function isArr(value: mixed): %checks {\n    return value instanceof Array;\n}\n\nexport function isNil(value: mixed): %checks {\n    return value == null;\n}\n\nexport function isFunc(value: mixed): %checks {\n    return value instanceof Function;\n}\n\nexport function isStr(value: mixed): %checks {\n    return typeof value === 'string';\n}\n\nexport function escapeRegExp(string: string) {\n    return string.replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&');\n}\n\nexport function containsFile(obj: any): boolean {\n    if (isArr(obj)) {\n        for (let i = 0; i < obj.length; i++) {\n            if (obj[i] instanceof File) {\n                return true;\n            }\n            if (isObj(obj[i])) {\n                return containsFile(obj[i]);\n            }\n        }\n    } else {\n        for (let key in obj) {\n            if (obj[key] instanceof File) {\n                return true;\n            }\n            if (isObj(obj[key]) && containsFile(obj[key])) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nexport function arrayToObject(array: any[]): { [string]: any } {\n    let target = {};\n\n    array.forEach((item, index) => {\n        target[index] = item;\n    });\n\n    return target;\n}\n\nexport function isInViewport(el: Element) {\n    const boundingBox = el.getBoundingClientRect();\n    // $FlowFixMe\n    return boundingBox.top >= 0 && boundingBox.bottom <= (window.innerHeight || window.document.documentElement.clientHeight);\n}\n","// @flow\nimport { escapeRegExp, isArr, isInViewport, isNil } from \"./utils\";\n\ntype ErrorValue = string | Array<string>;\nexport type ErrorValues = { [string]: ErrorValue };\n\nclass Errors {\n\n    errors: ErrorValues;\n    elements: Array<{ key: string | RegExp, el: Element }>;\n\n    /**\n     * Create a new Errors instance.\n     */\n    constructor() {\n        this.errors = {};\n        this.elements = [];\n    }\n\n    /**\n     * Determine if an errors exists for the given field.\n     *\n     * @param {string|RegExp} field\n     */\n    has(field: string | RegExp): boolean {\n        if (field instanceof RegExp) {\n            return Object.keys(this.errors).some(key => field.test(key));\n        }\n        return this.errors.hasOwnProperty(field);\n    }\n\n    /**\n     * Determine if we have any errors.\n     */\n    any(): boolean {\n        return Object.keys(this.errors).length > 0;\n    }\n\n    /**\n     * Retrieve the error message for a field.\n     *\n     * @param {string} field\n     */\n    getFirst(field: string, matchWildCards: boolean = true): ?string {\n        let error = this.get(field, matchWildCards);\n        if (error) {\n            if (isArr(error)) {\n                return error.length ? error[0] : null;\n            } else {\n                return error || null;\n            }\n        }\n    }\n\n    get(field: string, matchWildCards: boolean = true) {\n        if (field.includes('*') && matchWildCards) {\n            const regExpStr = field.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n                .replace('*', '(.*)');\n            const regExp = new RegExp(regExpStr);\n            let errors = [];\n            Object.keys(this.errors).forEach((key) => {\n                if (regExp.test(key)) {\n                    const keyErrors = this.errors[key];\n                    if (isArr(keyErrors)) {\n                        errors = errors.concat(keyErrors);\n                    } else {\n                        errors.push(keyErrors);\n                    }\n                }\n            });\n            return errors;\n        }\n        return this.errors[field];\n    }\n\n    /**\n     * Add a new error message if one doesn't already exist.\n     *\n     * @param {string} field\n     * @param error\n     * @param force\n     */\n    add(field: string, error: ErrorValue, force: boolean = false) {\n        if (!this.has(field) || force) {\n            this.errors[field] = error;\n        }\n    }\n\n    /**\n     * Record the new errors.\n     *\n     * @param {object} errors\n     * @param timeout\n     */\n    record(errors: ErrorValues, timeout: ?(false | number) = 3000) {\n        this.errors = errors;\n        if (timeout) {\n            window.setTimeout(() => {\n                this.clear();\n            }, timeout);\n        }\n    }\n\n    /**\n     * Clear one or all error fields.\n     *\n     * @param {string|null} field\n     */\n    clear(field: ?string) {\n        if (field) {\n            const { [field]: _, ...rest } = this.errors;\n            this.errors = rest;\n\n            return;\n        }\n\n        this.errors = {};\n    }\n\n    addElement(key: string | RegExp | string[], el: Element) {\n        if (isArr(key)) {\n            key.forEach(field => this.addElement(field, el));\n        } else {\n            this.elements.push({ key, el });\n        }\n    }\n\n    removeElement(element: Element) {\n        this.elements = this.elements.filter(({ el }) => el !== element);\n    }\n\n    removeElementKey(field: string | RegExp | string[]) {\n        if (isArr(field)) {\n            field.forEach(key => this.removeElementKey(key));\n        } else {\n            this.elements = this.elements.filter(({ key }) => key !== field);\n        }\n    }\n\n    hasElements(): boolean {\n        return !!this.elements.length;\n    }\n\n    scrollToFirst(options: ?boolean | {\n        behavior?: ('auto' | 'instant' | 'smooth'),\n        block?: ('start' | 'center' | 'end' | 'nearest'),\n        inline?: ('start' | 'center' | 'end' | 'nearest'),\n    } = null) {\n        options = isNil(options) ? { behavior: 'smooth', inline: 'center' } : options;\n\n        const element = this.elements.find(({ key, el }) => {\n            let rx: RegExp;\n            if (key instanceof RegExp) {\n                rx = key;\n            } else {\n                let expression = escapeRegExp(key);\n                rx = new RegExp(expression.replace('*', '.*'));\n            }\n\n            if (Object.keys(this.errors).some(key => rx.test(key))) {\n                return true;\n            }\n        });\n\n        if (element && !isInViewport(element.el)) {\n            element.el.scrollIntoView(options);\n        }\n    }\n}\n\nexport default Errors;\n","// @flow\nimport { extractFiles } from 'extract-files';\nimport type { ErrorValues } from './Errors';\nimport Errors from './Errors';\nimport type { Method } from './flow';\nimport http from './http';\nimport { arrayToObject, clone, containsFile, emptyValue, hasOwn, isArr, isFile, isNil, isObj, isStr, isFunc } from './utils';\n\ntype PrimitiveFormValue = string | number | boolean | null | typeof undefined;\n\ntype ScalarFormValue = PrimitiveFormValue | Blob | File;\n\ntype FormValue = ScalarFormValue | Array<?FormValue> | { [string]: ?FormValue };\n\nexport type Data = { [string]: FormValue };\n\ntype DataCb = () => Data;\n\ntype Options = {\n    method: Method,\n    baseUrl: string,\n    url: string,\n    query: string,\n    graphql: string,\n    sendWith: (method: Method, url: string, data: FormData | Data, options: Options) => Promise<any>,\n    useJson: boolean,\n    strictMode: boolean,\n    isValidationError: ({ status: number }) => boolean,\n    formatData: (Data) => Data,\n    formatErrorResponse: (any) => ErrorValues,\n    timeout: false | number,\n    autoRemoveError: boolean,\n    clear: boolean,\n    quiet: boolean,\n    clone: boolean,\n    addAppendToDataCallback: boolean,\n}\n\ntype PartialOptions = $Shape<Options>;\n\nfunction set(obj: FormValue, keys: number|string|string[], value: FormValue) {\n    if (isStr(keys) || (typeof keys === 'number')) {\n        keys = (''+keys).split('.');\n    }\n\n    let key = keys.shift();\n\n    if (!isObj(obj) || isFile(obj)) {\n        return;\n    }\n\n    if (!keys.length) {\n        if (isArr(obj)) {\n            obj[+key] = value;\n        } else {\n            obj[key] = value;\n        }\n    } else {\n        if (!hasOwn(obj, key)) {\n            if (isArr(obj)) {\n                obj[+key] = key === '0' ? [] : {};\n            } else {\n                obj[key] = key === '0' ? [] : {};\n            }\n        }\n        if (isArr(obj)) {\n            set(obj[+key], keys, value);\n        } else {\n            set(obj[key], keys, value);\n        }\n    }\n}\n\nfunction get(obj: FormValue, keys: string|string[]): FormValue {\n    if (isStr(keys)) {\n        keys = keys.split('.');\n    }\n\n    let key = keys.shift();\n\n    if (!isObj(obj) || isFile(obj) || !hasOwn(obj, key)) {\n        return undefined;\n    }\n\n    let result: FormValue;\n\n    if (isArr(obj)) {\n        result = obj[+key];\n    } else if (isObj(obj) && !isFile(obj)) {\n        result = obj[key];\n    } else {\n        result = undefined;\n    }\n\n    if (!keys.length) {\n        return result;\n    }\n    get(result, keys);\n}\n\nfunction parseOptions(method: ?(Method | PartialOptions), url: ?(string | PartialOptions), options: ?PartialOptions): PartialOptions {\n    method = method ? (isObj(method) ? method : { method }) : {};\n    url = url ? (isObj(url) ? url : { url }) : {};\n    options = options || {};\n\n    return {\n        ...options,\n        ...url,\n        ...method,\n    }\n}\n\nfunction flattenToQueryParams(data: Data | Array<FormValue>, prefix: string = ''): Array<[ string, string | Blob | File ]> {\n    let params = [];\n\n    if (isArr(data)) {\n        data.forEach((item, index) => {\n            let paramKey = `${prefix}[${index}]`;\n\n            if (isObj(item) && !isFile(item)) {\n                params = params.concat(flattenToQueryParams(item, paramKey));\n                return;\n            }\n\n            params.push([paramKey, isFile(item) ? item : formValueToString(item)]);\n        })\n    } else {\n        Object.keys(data).forEach(key => {\n            let item = data[key];\n\n            let paramKey = prefix ? `${prefix}[${key}]` : '' + key;\n\n            if (isObj(item) && !isFile(item)) {\n                params = params.concat(flattenToQueryParams(item, paramKey));\n                return;\n            }\n\n            params.push([paramKey, isFile(item) ? item : formValueToString(item)]);\n        });\n    }\n\n    return params;\n}\n\nfunction formValueToString(value: PrimitiveFormValue): string {\n    if (typeof value === 'boolean') {\n        return ''+(+value);\n    }\n    if (typeof value === 'number') {\n        return value.toString();\n    }\n    return value || '';\n}\n\nfunction bubbleError(error: Error | Object): Promise<Object> {\n    if (error instanceof Error) {\n        throw error;\n    }\n    return Promise.reject(error);\n}\n\nfunction isValidErrorObject(errors) {\n    return !errors ||\n        typeof errors !== 'object' ||\n        !Object.keys(errors).length ||\n        Object.values(errors).some(error => {\n            if (isArr(error)) {\n                return error.some(message => !isStr(message));\n            }\n            return !isStr(error);\n        });\n}\n\nclass Form {\n\n    _errors: Errors;\n\n    _data: Data;\n    _dataCb: ?DataCb;\n    _originalData: Data;\n    _originalConstantData: Data;\n    _options: Options;\n\n    static defaultOptions: Options = {\n        // The default method type used by the submit method\n        method: 'post',\n\n        // If set any relative urls will be appended to the baseUrl\n        baseUrl: '',\n\n        // The url to submit the form\n        url: '',\n\n        // The endpoint to use for all graphql queries\n        graphql: 'graphql',\n\n        query: '',\n\n        // A callback to implement custom HTTP logic.\n        // It is recommended to use this option so the form can utilise your HTTP library.\n        // The callback should return a promise that the form can use to handle the response.\n        sendWith: http,\n\n        // Set to true if you want the form to submit the data as a json object.\n        // This will pass the data as a JavaScript object to the sendWith callback so it is up to you to stringify it for your HTTP library.\n        // If the data contains a File or Blob object the data will be a FormData object regardless of this option (unless strictMode is true).\n        useJson: false,\n\n        // If set to true the form will use follow the `useJson` option even if the data contains non JSONable values (including files).\n        strictMode: false,\n\n        // The status code for which the form should handle validation errors.\n        isValidationError: ({ status }) => status === 422,\n\n        // A callback to format the data before sending it.\n        formatData: (data) => data,\n\n        // A callback that should turn the error response into an object of field names and their validation errors.\n        formatErrorResponse: (response) => {\n            let data = response.data || response.response;\n            if (typeof data === 'string') {\n                try {\n                    data = JSON.parse(data);\n                } catch (e) {\n                    throw new Error('Unable to find errors in the response');\n                }\n            }\n            let errors: ErrorValues = data.errors;\n            if (isValidErrorObject(errors)) {\n                throw new Error('Unable to find errors in the response');\n            }\n            return errors;\n        },\n\n        // The number of milliseconds to wait before clearing the error messages.\n        // When timeout is false the error messages will stay indefinitely.\n        timeout: false,\n\n        // When set to true the errors for a field will be cleared when that field's value is updated.\n        autoRemoveError: true,\n\n        // When set to true, the data will be reverted to it's original values after a successful request.\n        clear: true,\n\n        // When set to true, no errors will be recorded.\n        quiet: false,\n\n        // If clone is set to false any nested objects and arrays will be stored in the form by reference.\n        clone: true,\n\n        // If the form is called with a callback constructor then any data added\n        // later will be included when the form is reset. Set this to false to\n        // have the form reset using just the callback.\n        addAppendToDataCallback: true,\n    };\n\n    static setOptions = function (options: Options) {\n        Form.defaultOptions = {\n            ...Form.defaultOptions,\n            ...options\n        };\n    };\n\n    constructor(data: Data|DataCb, options: ?Options) {\n        this.setOptions(options);\n\n        if (isFunc(data)) {\n            this._dataCb = data;\n            data = data();\n        }\n\n        this._originalData = {};\n        this._originalConstantData = {};\n        this._data = {};\n\n        // $FlowFixMe\n        this.append(data, undefined, false, false);\n\n        this._errors = new Errors();\n    }\n\n    setOptions(options: ?Options) {\n        this._options = this._options || Form.defaultOptions;\n        if (options) {\n            this._options = {\n                ...this._options,\n                ...options,\n            }\n        }\n    }\n\n    append(key: string | Data, value: FormValue, constant: ?boolean = false, addToDataCallback: ?boolean = true): Form {\n        if (this._dataCb && !constant && this._options.addAppendToDataCallback && addToDataCallback) {\n            const originalCb = this._dataCb;\n            this._dataCb = () => {\n                const data = originalCb();\n                if (isObj(key)) {\n                    return {\n                        ...data,\n                        ...key\n                    };\n                }\n                return {\n                    ...data,\n                    [key]: value,\n                };\n            }\n        }\n\n        if (isObj(key)) {\n            Object.keys(key).forEach(field => {\n                this.append(field, key[field], constant, false);\n            });\n            return this;\n        }\n\n        value = this.parseData(value);\n        if (constant) {\n            set(this._originalConstantData, key, value);\n        } else {\n            set(this._originalData, key, this.parseData(value));\n        }\n        if (!constant) {\n            set(this._data, key, value);\n            this.defineProperty(key);\n        } else {\n            Object.defineProperty(\n                this,\n                key,\n                {\n                    get: () => undefined,\n                    set: () => {\n                        throw new Error(`The \"${key}\" value has been set as constant and cannot be modified`);\n                    }\n                }\n            );\n        }\n\n        return this;\n    }\n\n    defineProperty(key: string) {\n        Object.defineProperty(\n            this,\n            key,\n            {\n                configurable: true,\n                enumerable: true,\n                get: () => get(this._data, key),\n                set: (newValue: FormValue) => {\n                    this.setData(key, newValue);\n                }\n            }\n        );\n    }\n\n    constantData(key: string | Data, value: FormValue): Form {\n        return this.append(key, value, true, false);\n    }\n\n    getData(): Data {\n        return {\n            ...this._data,\n            ...this._originalConstantData,\n        }\n    }\n\n    setData(key: string, value: FormValue) {\n        set(this._data, key, value);\n        if (this._options.autoRemoveError) {\n            this._errors.clear(key);\n        }\n    }\n\n    errors(): Errors {\n        return this._errors;\n    }\n\n    reset(): Form {\n        const originalData = this._dataCb ? this._dataCb() : this._originalData;\n\n        for (let field in this._data) {\n            // $FlowFixMe\n            delete this[field];\n        }\n\n        this._originalData = {};\n        this._data = {};\n\n        this.append(originalData, undefined, false, false);\n\n        this._errors.clear();\n\n        return this;\n    }\n\n    clear(field: string): Form {\n        if (hasOwn(this, field)) {\n            set(this._data, field, emptyValue(get(this._data, field)));\n        }\n        return this;\n    }\n\n    parseData(data: FormValue): FormValue {\n        return this._options.clone ? clone(data) : data;\n    }\n\n    addFileFromEvent(event: Event | DragEvent, key: ?string): Form {\n        let node = event.target;\n        if (!(node instanceof HTMLInputElement)) {\n            throw new Error('Incompatible event target, must be of type HTMLInputElement');\n        }\n        if (!key) {\n            key = node.name;\n        }\n        if (key in this && (node.value !== '')) {\n            if (event instanceof DragEvent) {\n                this.setData(key, event.dataTransfer && event.dataTransfer.files.length && event.dataTransfer.files[0]);\n            } else {\n                this.setData(key, node.files && node.files.length && node.files[0]);\n            }\n            node.value = '';\n        }\n        return this;\n    }\n\n    post(url: string | Options, options: ?Options): Promise<any> {\n        return this.submit('post', url, options);\n    }\n\n    put(url: string | Options, options: ?Options): Promise<any> {\n        return this.submit('put', url, options);\n    }\n\n    patch(url: string | Options, options: ?Options): Promise<any> {\n        return this.submit('patch', url, options);\n    }\n\n    delete(url: string | Options, options: ?Options): Promise<any> {\n        return this.submit('delete', url, options);\n    }\n\n    get(url: string | Options, options: ?Options): Promise<any> {\n        return this.submit('get', url, options);\n    }\n\n    graphql(query: string, options: ?Options): Promise<any> {\n        options = options || {};\n        const originalFormatDataCallback = options.formatData || this._options.formatData;\n\n        options.url = options.graphql || this._options.graphql;\n        options.query = query;\n        if (typeof options.useJson === 'undefined') {\n            options.useJson = !this.hasFile();\n        }\n\n        options.formatData = (data) => {\n            data = originalFormatDataCallback ? originalFormatDataCallback(data) : data;\n            const operations = {\n                query,\n                variables: data,\n            };\n\n            if (!this.hasFile()) {\n                return operations;\n            }\n            const { clone, files } = extractFiles(data);\n            operations.variables = clone;\n            return {\n                operations: JSON.stringify(operations),\n                map: JSON.stringify(arrayToObject(Array.from(files.values()))),\n                ...arrayToObject(Array.from(files.keys())),\n            };\n        };\n        return this.post(options);\n    }\n\n    submit(method: Method | Options, url: ?string | Options, options: ?Options): Promise<any> {\n        options = parseOptions(method, url, options);\n        const requestOptions = {\n            ...this._options,\n            ...options,\n        };\n\n        let formData, data = requestOptions.formatData(this.getData());\n        if (this.shouldConvertToFormData(requestOptions)) {\n            formData = new FormData();\n\n            let params = flattenToQueryParams(data);\n\n            params.forEach(([key, param]) => {\n                formData.append(key, param);\n            });\n\n            data = formData;\n        }\n\n        let httpAdapter = requestOptions.sendWith;\n\n        const finalUrl = this.buildBaseUrl(requestOptions);\n        delete requestOptions.baseUrl; // This is a reserved key by axios so it complains if we pass it\n\n        return httpAdapter(requestOptions.method, finalUrl, data, requestOptions).then(response => {\n            if (requestOptions.isValidationError(response)) {\n                this.onFail(response, requestOptions);\n            } else {\n                this.onSuccess(requestOptions);\n            }\n            return response;\n        }).catch(error => {\n            if (requestOptions.isValidationError(error)) {\n                this.onFail(error, requestOptions);\n            }\n            return bubbleError(error);\n        });\n    }\n\n    shouldConvertToFormData(options: ?Options) {\n        options = options || this._options;\n        if (options.strictMode) {\n            return !options.useJson;\n        }\n        return !options.useJson || this.hasFile();\n    }\n\n    hasFile(): boolean {\n        return containsFile(this.getData());\n    }\n\n    onSuccess(options: ?Options) {\n        options = options || this._options;\n        if (options.clear) {\n            this.reset();\n        }\n    }\n\n    onFail(error: XMLHttpRequest, options: ?Options) {\n        options = options || this._options;\n        if (!options.quiet) {\n            let errors = options.formatErrorResponse(error);\n            this._errors.record(errors, options.timeout);\n            if (this._errors.hasElements()) {\n                this._errors.scrollToFirst();\n            }\n        }\n    }\n\n    buildBaseUrl(options: ?Options) {\n        options = options || this._options;\n        if (options.url.includes('://')) {\n            return options.url;\n        }\n        let baseUrl = options.baseUrl;\n        let relativeUrl = options.url;\n\n        baseUrl = baseUrl.replace(/\\/+$/g, '');\n        relativeUrl = relativeUrl.replace(/^\\/+/g, '');\n\n        return `${baseUrl}/${relativeUrl}`;\n    }\n\n    makeUrl(options: ?Options): string {\n        let url = this.buildBaseUrl(options);\n        let queryStart = url.includes('?') ? '&' : '?';\n        let fullUrl = url + queryStart;\n        let properties = [];\n        let data = this.getData();\n\n        let params = flattenToQueryParams(data);\n\n        params.forEach(([key, item]) => {\n            if (isFile(item)) {\n                throw new Error('Cannot convert file to a string');\n            }\n\n            properties.push(key + (isNil(item) ? '' : `=${item}`));\n        });\n        return fullUrl + properties.join('&');\n    }\n\n    addElement(key: string, el: HTMLElement) {\n        this._errors.addElement(key, el);\n    }\n\n    removeElement(el: HTMLElement) {\n        this._errors.removeElement(el);\n    }\n\n    removeElementKey(key: string) {\n        this._errors.removeElementKey(key);\n    }\n}\n\n\nexport default Form;\n","// @flow\nimport type { Method } from './flow';\nimport type { Data } from \"./Form\";\n\ntype Options = {\n    method: Method,\n    url: string,\n}\n\nexport default function http(method: Method, url: string, data: FormData | Data, options: Options) {\n    let xhr = new XMLHttpRequest();\n\n    let response = new Promise<XMLHttpRequest>((resolve, reject) => {\n        xhr.onload = () => {\n            if (xhr.status >= 200 && xhr.status < 300) {\n                resolve(xhr);\n            } else {\n                reject(xhr);\n            }\n        };\n        xhr.onerror = () => reject(xhr);\n    });\n\n    xhr.open(method, url);\n    if (data instanceof FormData) {\n        xhr.setRequestHeader('Content-Type', 'multipart/form-data');\n        xhr.send(data);\n    } else {\n        xhr.setRequestHeader('Content-Type', 'application/json');\n        xhr.send(JSON.stringify(data));\n    }\n\n    return response;\n}"],"names":["root","factory","exports","module","define","amd","self","__esModule","extractFiles","value","path","clone","files","Map","addFile","paths","file","storedPaths","get","push","apply","set","File","Blob","_ReactNativeFile","ReactNativeFile","prefix","FileList","Array","prototype","map","call","i","isArray","child","result","forEach","constructor","Object","_extractFiles","_ref","uri","name","type","this","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","defineProperty","enumerable","obj","prop","hasOwnProperty","r","Symbol","toStringTag","hasOwn","isFile","val","isArr","includes","isObj","target","keys","isNil","isStr","containsFile","length","arrayToObject","array","item","index","_defineProperty","errors","elements","has","field","RegExp","some","test","any","getFirst","matchWildCards","error","regExpStr","replace","regExp","keyErrors","concat","add","force","record","timeout","window","setTimeout","clear","_","rest","addElement","el","removeElement","element","filter","removeElementKey","hasElements","scrollToFirst","options","behavior","inline","find","rx","expression","boundingBox","getBoundingClientRect","top","bottom","innerHeight","document","documentElement","clientHeight","isInViewport","scrollIntoView","split","shift","flattenToQueryParams","data","params","paramKey","formValueToString","toString","Form","setOptions","Function","_dataCb","_originalData","_originalConstantData","_data","append","_errors","Errors","_options","defaultOptions","constant","addToDataCallback","addAppendToDataCallback","originalCb","parseData","Error","configurable","newValue","setData","constantData","getData","autoRemoveError","reset","originalData","original","addFileFromEvent","event","node","HTMLInputElement","DragEvent","dataTransfer","post","url","submit","put","patch","delete","graphql","query","originalFormatDataCallback","formatData","useJson","hasFile","operations","variables","JSON","stringify","from","values","method","parseOptions","requestOptions","formData","shouldConvertToFormData","FormData","param","httpAdapter","sendWith","finalUrl","buildBaseUrl","baseUrl","then","response","isValidationError","onFail","onSuccess","catch","Promise","reject","bubbleError","strictMode","quiet","formatErrorResponse","relativeUrl","makeUrl","queryStart","fullUrl","properties","join","_Form","xhr","XMLHttpRequest","resolve","onload","status","onerror","open","setRequestHeader","send","parse","e","message","isValidErrorObject"],"sourceRoot":""}