@bigbinary/neeto-molecules 4.0.130 → 4.0.131
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.
- package/dist/AuditLogs.js +4 -4
- package/dist/AuditLogs.js.map +1 -1
- package/dist/Breadcrumbs.js +2 -2
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/Builder.js +15 -22
- package/dist/Builder.js.map +1 -1
- package/dist/CalendarView.js +5 -6
- package/dist/CalendarView.js.map +1 -1
- package/dist/CardLayout.js +0 -1
- package/dist/CardLayout.js.map +1 -1
- package/dist/{Chevron-Cat_oK6Q.js → Chevron-CvDNGT0i.js} +9 -10
- package/dist/Chevron-CvDNGT0i.js.map +1 -0
- package/dist/Codeblock.js +3 -5
- package/dist/Codeblock.js.map +1 -1
- package/dist/{Columns-CsOYfWFt.js → Columns-D51hN86M.js} +8 -9
- package/dist/Columns-D51hN86M.js.map +1 -0
- package/dist/Columns.js +1 -1
- package/dist/ConfigurePageSidebar.js +2 -3
- package/dist/ConfigurePageSidebar.js.map +1 -1
- package/dist/ConfirmationModal.js +2 -2
- package/dist/ConfirmationModal.js.map +1 -1
- package/dist/CopyToClipboardButton.js +1 -2
- package/dist/CopyToClipboardButton.js.map +1 -1
- package/dist/DeleteArchiveModal.js +5 -7
- package/dist/DeleteArchiveModal.js.map +1 -1
- package/dist/DeviceIncompatibilityMessage.js +0 -1
- package/dist/DeviceIncompatibilityMessage.js.map +1 -1
- package/dist/DocumentEditor.js +3 -3
- package/dist/DocumentEditor.js.map +1 -1
- package/dist/DynamicVariables.js +4 -6
- package/dist/DynamicVariables.js.map +1 -1
- package/dist/EmailForm.js +4 -5
- package/dist/EmailForm.js.map +1 -1
- package/dist/EmailPreview.js +4 -5
- package/dist/EmailPreview.js.map +1 -1
- package/dist/EmojiPicker.js +1 -1
- package/dist/EmojiPicker.js.map +1 -1
- package/dist/EmojiReactions.js +1 -1
- package/dist/EmojiReactions.js.map +1 -1
- package/dist/ErrorPage.js +5 -5
- package/dist/ErrorPage.js.map +1 -1
- package/dist/FileUpload.js +9 -10
- package/dist/FileUpload.js.map +1 -1
- package/dist/FloatingActionMenu.js +19 -38
- package/dist/FloatingActionMenu.js.map +1 -1
- package/dist/Header.js +1 -3
- package/dist/Header.js.map +1 -1
- package/dist/HelpPopover.js +1 -5
- package/dist/HelpPopover.js.map +1 -1
- package/dist/IconPicker.js +2 -3
- package/dist/IconPicker.js.map +1 -1
- package/dist/Insights.js +3 -6
- package/dist/Insights.js.map +1 -1
- package/dist/IntegrationCard.js +10 -12
- package/dist/IntegrationCard.js.map +1 -1
- package/dist/IpRestriction.js +11 -13
- package/dist/IpRestriction.js.map +1 -1
- package/dist/KeyboardShortcuts.js +3 -4
- package/dist/KeyboardShortcuts.js.map +1 -1
- package/dist/LoginPage.js +3 -6
- package/dist/LoginPage.js.map +1 -1
- package/dist/MadeWith.js +0 -1
- package/dist/MadeWith.js.map +1 -1
- package/dist/MenuBar.js +6 -6
- package/dist/MenuBar.js.map +1 -1
- package/dist/Metadata.js +4 -7
- package/dist/Metadata.js.map +1 -1
- package/dist/MobilePreviewHeader.js +1 -1
- package/dist/MobilePreviewHeader.js.map +1 -1
- package/dist/MoreDropdown.js +1 -2
- package/dist/MoreDropdown.js.map +1 -1
- package/dist/NavigationHeader.js +1 -6
- package/dist/NavigationHeader.js.map +1 -1
- package/dist/NeetoWidget.js +1 -2
- package/dist/NeetoWidget.js.map +1 -1
- package/dist/Onboarding.js +1 -9
- package/dist/Onboarding.js.map +1 -1
- package/dist/OptionFields.js +6 -22
- package/dist/OptionFields.js.map +1 -1
- package/dist/PageLoader.js +1 -1
- package/dist/PageLoader.js.map +1 -1
- package/dist/PhoneNumber.js +0 -1
- package/dist/PhoneNumber.js.map +1 -1
- package/dist/ProductEmbed.js +7 -20
- package/dist/ProductEmbed.js.map +1 -1
- package/dist/PublishBlock.js +1 -12
- package/dist/PublishBlock.js.map +1 -1
- package/dist/PublishYourItem.js +2 -2
- package/dist/PublishYourItem.js.map +1 -1
- package/dist/Rename.js +9 -13
- package/dist/Rename.js.map +1 -1
- package/dist/Schedule.js +16 -20
- package/dist/Schedule.js.map +1 -1
- package/dist/SendToFields.js +1 -5
- package/dist/SendToFields.js.map +1 -1
- package/dist/SessionEnvironment.js +1 -7
- package/dist/SessionEnvironment.js.map +1 -1
- package/dist/Settings.js +8 -9
- package/dist/Settings.js.map +1 -1
- package/dist/ShareRecordingPane.js +6 -6
- package/dist/ShareRecordingPane.js.map +1 -1
- package/dist/ShareViaEmail.js +6 -9
- package/dist/ShareViaEmail.js.map +1 -1
- package/dist/ShareViaLink.js +5 -21
- package/dist/ShareViaLink.js.map +1 -1
- package/dist/Sidebar.js +5 -7
- package/dist/Sidebar.js.map +1 -1
- package/dist/StatusDropdown.js +7 -10
- package/dist/StatusDropdown.js.map +1 -1
- package/dist/StickyRibbonsContainer.js +3 -3
- package/dist/StickyRibbonsContainer.js.map +1 -1
- package/dist/SubHeader.js +12 -15
- package/dist/SubHeader.js.map +1 -1
- package/dist/Taxonomy.js +3 -5
- package/dist/Taxonomy.js.map +1 -1
- package/dist/ToggleFeatureCard.js +18 -24
- package/dist/ToggleFeatureCard.js.map +1 -1
- package/dist/VersionHistory.js +1 -3
- package/dist/VersionHistory.js.map +1 -1
- package/dist/cjs/AuditLogs.js +4 -4
- package/dist/cjs/AuditLogs.js.map +1 -1
- package/dist/cjs/Breadcrumbs.js +2 -2
- package/dist/cjs/Breadcrumbs.js.map +1 -1
- package/dist/cjs/Builder.js +15 -22
- package/dist/cjs/Builder.js.map +1 -1
- package/dist/cjs/CalendarView.js +5 -6
- package/dist/cjs/CalendarView.js.map +1 -1
- package/dist/cjs/CardLayout.js +0 -1
- package/dist/cjs/CardLayout.js.map +1 -1
- package/dist/cjs/{Chevron-ChTcXDNM.js → Chevron-CLyBYgRO.js} +9 -10
- package/dist/cjs/Chevron-CLyBYgRO.js.map +1 -0
- package/dist/cjs/Codeblock.js +3 -5
- package/dist/cjs/Codeblock.js.map +1 -1
- package/dist/cjs/{Columns-DHPNrFgq.js → Columns-7xltEL2z.js} +8 -9
- package/dist/cjs/Columns-7xltEL2z.js.map +1 -0
- package/dist/cjs/Columns.js +1 -1
- package/dist/cjs/ConfigurePageSidebar.js +2 -3
- package/dist/cjs/ConfigurePageSidebar.js.map +1 -1
- package/dist/cjs/ConfirmationModal.js +2 -2
- package/dist/cjs/ConfirmationModal.js.map +1 -1
- package/dist/cjs/CopyToClipboardButton.js +1 -2
- package/dist/cjs/CopyToClipboardButton.js.map +1 -1
- package/dist/cjs/DeleteArchiveModal.js +5 -7
- package/dist/cjs/DeleteArchiveModal.js.map +1 -1
- package/dist/cjs/DeviceIncompatibilityMessage.js +0 -1
- package/dist/cjs/DeviceIncompatibilityMessage.js.map +1 -1
- package/dist/cjs/DocumentEditor.js +3 -3
- package/dist/cjs/DocumentEditor.js.map +1 -1
- package/dist/cjs/DynamicVariables.js +4 -6
- package/dist/cjs/DynamicVariables.js.map +1 -1
- package/dist/cjs/EmailForm.js +4 -5
- package/dist/cjs/EmailForm.js.map +1 -1
- package/dist/cjs/EmailPreview.js +4 -5
- package/dist/cjs/EmailPreview.js.map +1 -1
- package/dist/cjs/EmojiPicker.js +1 -1
- package/dist/cjs/EmojiPicker.js.map +1 -1
- package/dist/cjs/EmojiReactions.js +1 -1
- package/dist/cjs/EmojiReactions.js.map +1 -1
- package/dist/cjs/ErrorPage.js +5 -5
- package/dist/cjs/ErrorPage.js.map +1 -1
- package/dist/cjs/FileUpload.js +9 -10
- package/dist/cjs/FileUpload.js.map +1 -1
- package/dist/cjs/FloatingActionMenu.js +19 -38
- package/dist/cjs/FloatingActionMenu.js.map +1 -1
- package/dist/cjs/Header.js +1 -3
- package/dist/cjs/Header.js.map +1 -1
- package/dist/cjs/HelpPopover.js +1 -5
- package/dist/cjs/HelpPopover.js.map +1 -1
- package/dist/cjs/IconPicker.js +2 -3
- package/dist/cjs/IconPicker.js.map +1 -1
- package/dist/cjs/Insights.js +3 -6
- package/dist/cjs/Insights.js.map +1 -1
- package/dist/cjs/IntegrationCard.js +9 -11
- package/dist/cjs/IntegrationCard.js.map +1 -1
- package/dist/cjs/IpRestriction.js +11 -13
- package/dist/cjs/IpRestriction.js.map +1 -1
- package/dist/cjs/KeyboardShortcuts.js +3 -4
- package/dist/cjs/KeyboardShortcuts.js.map +1 -1
- package/dist/cjs/LoginPage.js +3 -6
- package/dist/cjs/LoginPage.js.map +1 -1
- package/dist/cjs/MadeWith.js +0 -1
- package/dist/cjs/MadeWith.js.map +1 -1
- package/dist/cjs/MenuBar.js +6 -6
- package/dist/cjs/MenuBar.js.map +1 -1
- package/dist/cjs/Metadata.js +4 -7
- package/dist/cjs/Metadata.js.map +1 -1
- package/dist/cjs/MobilePreviewHeader.js +1 -1
- package/dist/cjs/MobilePreviewHeader.js.map +1 -1
- package/dist/cjs/MoreDropdown.js +1 -2
- package/dist/cjs/MoreDropdown.js.map +1 -1
- package/dist/cjs/NavigationHeader.js +1 -6
- package/dist/cjs/NavigationHeader.js.map +1 -1
- package/dist/cjs/NeetoWidget.js +1 -2
- package/dist/cjs/NeetoWidget.js.map +1 -1
- package/dist/cjs/Onboarding.js +1 -9
- package/dist/cjs/Onboarding.js.map +1 -1
- package/dist/cjs/OptionFields.js +6 -22
- package/dist/cjs/OptionFields.js.map +1 -1
- package/dist/cjs/PageLoader.js +1 -1
- package/dist/cjs/PageLoader.js.map +1 -1
- package/dist/cjs/PhoneNumber.js +0 -1
- package/dist/cjs/PhoneNumber.js.map +1 -1
- package/dist/cjs/ProductEmbed.js +7 -20
- package/dist/cjs/ProductEmbed.js.map +1 -1
- package/dist/cjs/PublishBlock.js +1 -12
- package/dist/cjs/PublishBlock.js.map +1 -1
- package/dist/cjs/PublishYourItem.js +2 -2
- package/dist/cjs/PublishYourItem.js.map +1 -1
- package/dist/cjs/Rename.js +9 -13
- package/dist/cjs/Rename.js.map +1 -1
- package/dist/cjs/Schedule.js +16 -20
- package/dist/cjs/Schedule.js.map +1 -1
- package/dist/cjs/SendToFields.js +1 -5
- package/dist/cjs/SendToFields.js.map +1 -1
- package/dist/cjs/SessionEnvironment.js +1 -7
- package/dist/cjs/SessionEnvironment.js.map +1 -1
- package/dist/cjs/Settings.js +8 -9
- package/dist/cjs/Settings.js.map +1 -1
- package/dist/cjs/ShareRecordingPane.js +6 -6
- package/dist/cjs/ShareRecordingPane.js.map +1 -1
- package/dist/cjs/ShareViaEmail.js +6 -9
- package/dist/cjs/ShareViaEmail.js.map +1 -1
- package/dist/cjs/ShareViaLink.js +5 -21
- package/dist/cjs/ShareViaLink.js.map +1 -1
- package/dist/cjs/Sidebar.js +5 -7
- package/dist/cjs/Sidebar.js.map +1 -1
- package/dist/cjs/StatusDropdown.js +6 -9
- package/dist/cjs/StatusDropdown.js.map +1 -1
- package/dist/cjs/StickyRibbonsContainer.js +3 -3
- package/dist/cjs/StickyRibbonsContainer.js.map +1 -1
- package/dist/cjs/SubHeader.js +12 -15
- package/dist/cjs/SubHeader.js.map +1 -1
- package/dist/cjs/Taxonomy.js +3 -5
- package/dist/cjs/Taxonomy.js.map +1 -1
- package/dist/cjs/ToggleFeatureCard.js +17 -23
- package/dist/cjs/ToggleFeatureCard.js.map +1 -1
- package/dist/cjs/VersionHistory.js +1 -3
- package/dist/cjs/VersionHistory.js.map +1 -1
- package/package.json +1 -1
- package/types/IntegrationCard.d.ts +1 -1
- package/types/Settings.d.ts +2 -2
- package/types/ShareViaLink.d.ts +2 -2
- package/types/SubHeader.d.ts +2 -2
- package/types/ToggleFeatureCard.d.ts +3 -3
- package/dist/Chevron-Cat_oK6Q.js.map +0 -1
- package/dist/Columns-CsOYfWFt.js.map +0 -1
- package/dist/cjs/Chevron-ChTcXDNM.js.map +0 -1
- package/dist/cjs/Columns-DHPNrFgq.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SendToFields.js","sources":["../../src/components/SendToFields/constants.js","../../src/components/SendToFields/Requirements.jsx","../../src/components/SendToFields/BulkUploadPane.jsx","../../node_modules/papaparse/papaparse.js","../../src/components/SendToFields/utils.js","../../src/components/SendToFields/index.jsx"],"sourcesContent":["export const SIZES = { small: \"small\", medium: \"medium\", large: \"large\" };\nexport const CSV_FILE_SIZE_IN_KB = 32;\nexport const ONE_KILOBYTE_IN_BYTES = 1024;\nexport const DOWNLOAD_SAMPLE_EMAIL_CSV_FILE =\n \"https://d2v7kzglnr2dnh.cloudfront.net/others/sample-bulk-email.csv\";\n","import { memo } from \"react\";\n\nimport withT from \"neetocommons/react-utils/withT\";\nimport { Download } from \"neetoicons\";\nimport { Button, Callout } from \"neetoui\";\nimport { Trans } from \"react-i18next\";\n\nimport { DOWNLOAD_SAMPLE_EMAIL_CSV_FILE } from \"./constants\";\n\nconst Requirements = withT(({ t, fileSize }) => (\n <Callout className=\"flex flex-col items-center py-6\" style=\"info\">\n <ul className=\"flex list-outside list-disc flex-col gap-y-1 font-normal leading-normal\">\n {fileSize && (\n <li>\n {t(\"neetoMolecules.shareViaLink.requirements.fileTypeAndSize\", {\n limit: fileSize,\n })}\n </li>\n )}\n <li>\n <Trans\n components={{ strong: <strong className=\"font-semibold\" /> }}\n i18nKey=\"neetoMolecules.shareViaLink.requirements.shouldContainColumns\"\n />\n </li>\n </ul>\n <Button\n href={DOWNLOAD_SAMPLE_EMAIL_CSV_FILE}\n icon={Download}\n iconPosition=\"left\"\n label={t(\"neetoMolecules.shareViaLink.bulkUploadPane.downloadSampleCSV\")}\n style=\"link\"\n />\n </Callout>\n));\n\nexport default memo(Requirements);\n","import classNames from \"classnames\";\nimport { Upload } from \"neetoicons\";\nimport { Button, Typography, Pane } from \"neetoui\";\nimport { useDropzone } from \"react-dropzone\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport { ONE_KILOBYTE_IN_BYTES } from \"./constants\";\nimport Requirements from \"./Requirements\";\n\nconst BulkUploadPane = ({ isOpen, fileSize, onClose, handleFileSubmit }) => {\n const { getRootProps, getInputProps, isDragActive, fileRejections } =\n useDropzone({\n accept: { \"text/csv\": [] },\n maxFiles: 1,\n maxSize: fileSize * ONE_KILOBYTE_IN_BYTES,\n onDrop: files => files[0] && handleFileSubmit(files[0]),\n });\n\n const errors = fileRejections[0]?.errors.map(({ message, code }) => (\n <Typography\n className=\"neeto-ui-text-error-500 items\"\n data-cy=\"file-input-error-message\"\n key={code}\n style=\"body3\"\n >\n {message}\n </Typography>\n ));\n\n const { t } = useTranslation();\n\n return (\n <Pane {...{ isOpen, onClose }} data-testid=\"bulk-upload-pane\">\n <div tabIndex={0}>\n <Pane.Header>\n <Typography\n data-testid=\"bulk-upload-header\"\n style=\"h2\"\n weight=\"semibold\"\n >\n {t(\"neetoMolecules.shareViaLink.bulkUpload\")}\n </Typography>\n </Pane.Header>\n <Pane.Body>\n <div className=\"flex w-full flex-col gap-y-4\">\n <Requirements {...{ fileSize }} />\n <div\n {...getRootProps({\n className: classNames(\n \"flex flex-col p-2 border neeto-ui-border-primary-500 border-dashed neeto-ui-rounded-md transition duration-500 ease-in-out hover:neeto-ui-bg-gray-100 cursor-pointer items-center\",\n {\n \"neeto-ui-border-gray-100\": isDragActive,\n \"neeto-ui-border-error neeto-ui-bg-pastel-red hover:neeto-ui-bg-pastel-red\":\n fileRejections.length,\n }\n ),\n })}\n >\n <div className=\"flex flex-col items-center gap-y-3 p-4\">\n <Upload className=\"neeto-ui-text-primary-500\" size={32} />\n <input\n {...getInputProps()}\n data-cy=\"csv-upload-input\"\n data-testid=\"csv-upload-input\"\n />\n {isDragActive ? (\n <Typography style=\"body2\">\n {t(\n \"neetoMolecules.shareViaLink.bulkUploadPane.dropFileHere\"\n )}\n </Typography>\n ) : (\n <div className=\"flex flex-col items-center gap-y-1\">\n <div className=\"flex w-full items-center justify-center gap-x-1\">\n <Trans\n i18nKey=\"neetoMolecules.shareViaLink.bulkUploadPane.dragNDrop\"\n components={{\n Button: <Button style=\"link\" />,\n }}\n />\n </div>\n <Typography\n className=\"neeto-ui-text-gray-700\"\n style=\"body3\"\n >\n <Trans\n i18nKey=\"neetoMolecules.shareViaLink.bulkUploadPane.supportedFormat\"\n values={{ fileType: \"csv\" }}\n components={{\n code: (\n <code className=\"neeto-ui-typography neeto-ui-text-body3 neeto-ui-bg-white m-0 border-s-0 p-0\" />\n ),\n }}\n />{\" \"}\n {fileSize &&\n t(\n \"neetoMolecules.shareViaLink.bulkUploadPane.supportedSize\",\n { fileSize }\n )}\n </Typography>\n </div>\n )}\n </div>\n {errors}\n </div>\n </div>\n </Pane.Body>\n <Pane.Footer className=\"flex items-center gap-x-2\">\n <Button\n data-cy=\"bulk-upload-cancel-button\"\n data-testid=\"bulk-upload-cancel-button\"\n label={t(\"neetoMolecules.common.actions.cancel\")}\n style=\"text\"\n type=\"reset\"\n onClick={onClose}\n />\n </Pane.Footer>\n </div>\n </Pane>\n );\n};\n\nexport default BulkUploadPane;\n","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n\n(function(root, factory)\n{\n\t/* globals define */\n\tif (typeof define === 'function' && define.amd)\n\t{\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t}\n\telse if (typeof module === 'object' && typeof exports !== 'undefined')\n\t{\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t}\n\telse\n\t{\n\t\t// Browser globals (root is window)\n\t\troot.Papa = factory();\n\t}\n\t// in strict mode we cannot access arguments.callee, so we need a named reference to\n\t// stringify the factory method for the blob worker\n\t// eslint-disable-next-line func-name\n}(this, function moduleFactory()\n{\n\t'use strict';\n\n\tvar global = (function() {\n\t\t// alternative method, similar to `Function('return this')()`\n\t\t// but without using `eval` (which is disabled when\n\t\t// using Content Security Policy).\n\n\t\tif (typeof self !== 'undefined') { return self; }\n\t\tif (typeof window !== 'undefined') { return window; }\n\t\tif (typeof global !== 'undefined') { return global; }\n\n\t\t// When running tests none of the above have been defined\n\t\treturn {};\n\t})();\n\n\n\tfunction getWorkerBlob() {\n\t\tvar URL = global.URL || global.webkitURL || null;\n\t\tvar code = moduleFactory.toString();\n\t\treturn Papa.BLOB_URL || (Papa.BLOB_URL = URL.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \", '(', code, ')();'], {type: 'text/javascript'})));\n\t}\n\n\tvar IS_WORKER = !global.document && !!global.postMessage,\n\t\tIS_PAPA_WORKER = global.IS_PAPA_WORKER || false;\n\n\tvar workers = {}, workerIdCounter = 0;\n\n\tvar Papa = {};\n\n\tPapa.parse = CsvToJson;\n\tPapa.unparse = JsonToCsv;\n\n\tPapa.RECORD_SEP = String.fromCharCode(30);\n\tPapa.UNIT_SEP = String.fromCharCode(31);\n\tPapa.BYTE_ORDER_MARK = '\\ufeff';\n\tPapa.BAD_DELIMITERS = ['\\r', '\\n', '\"', Papa.BYTE_ORDER_MARK];\n\tPapa.WORKERS_SUPPORTED = !IS_WORKER && !!global.Worker;\n\tPapa.NODE_STREAM_INPUT = 1;\n\n\t// Configurable chunk sizes for local and remote files, respectively\n\tPapa.LocalChunkSize = 1024 * 1024 * 10;\t// 10 MB\n\tPapa.RemoteChunkSize = 1024 * 1024 * 5;\t// 5 MB\n\tPapa.DefaultDelimiter = ',';\t\t\t// Used if not specified and detection fails\n\n\t// Exposed for testing and development only\n\tPapa.Parser = Parser;\n\tPapa.ParserHandle = ParserHandle;\n\tPapa.NetworkStreamer = NetworkStreamer;\n\tPapa.FileStreamer = FileStreamer;\n\tPapa.StringStreamer = StringStreamer;\n\tPapa.ReadableStreamStreamer = ReadableStreamStreamer;\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tPapa.DuplexStreamStreamer = DuplexStreamStreamer;\n\t}\n\n\tif (global.jQuery)\n\t{\n\t\tvar $ = global.jQuery;\n\t\t$.fn.parse = function(options)\n\t\t{\n\t\t\tvar config = options.config || {};\n\t\t\tvar queue = [];\n\n\t\t\tthis.each(function(idx)\n\t\t\t{\n\t\t\t\tvar supported = $(this).prop('tagName').toUpperCase() === 'INPUT'\n\t\t\t\t\t\t\t\t&& $(this).attr('type').toLowerCase() === 'file'\n\t\t\t\t\t\t\t\t&& global.FileReader;\n\n\t\t\t\tif (!supported || !this.files || this.files.length === 0)\n\t\t\t\t\treturn true;\t// continue to next input element\n\n\t\t\t\tfor (var i = 0; i < this.files.length; i++)\n\t\t\t\t{\n\t\t\t\t\tqueue.push({\n\t\t\t\t\t\tfile: this.files[i],\n\t\t\t\t\t\tinputElem: this,\n\t\t\t\t\t\tinstanceConfig: $.extend({}, config)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tparseNextFile();\t// begin parsing\n\t\t\treturn this;\t\t// maintains chainability\n\n\n\t\t\tfunction parseNextFile()\n\t\t\t{\n\t\t\t\tif (queue.length === 0)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(options.complete))\n\t\t\t\t\t\toptions.complete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar f = queue[0];\n\n\t\t\t\tif (isFunction(options.before))\n\t\t\t\t{\n\t\t\t\t\tvar returned = options.before(f.file, f.inputElem);\n\n\t\t\t\t\tif (typeof returned === 'object')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (returned.action === 'abort')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror('AbortError', f.file, f.inputElem, returned.reason);\n\t\t\t\t\t\t\treturn;\t// Aborts all queued files immediately\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (returned.action === 'skip')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (typeof returned.config === 'object')\n\t\t\t\t\t\t\tf.instanceConfig = $.extend(f.instanceConfig, returned.config);\n\t\t\t\t\t}\n\t\t\t\t\telse if (returned === 'skip')\n\t\t\t\t\t{\n\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Wrap up the user's complete callback, if any, so that ours also gets executed\n\t\t\t\tvar userCompleteFunc = f.instanceConfig.complete;\n\t\t\t\tf.instanceConfig.complete = function(results)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(userCompleteFunc))\n\t\t\t\t\t\tuserCompleteFunc(results, f.file, f.inputElem);\n\t\t\t\t\tfileComplete();\n\t\t\t\t};\n\n\t\t\t\tPapa.parse(f.file, f.instanceConfig);\n\t\t\t}\n\n\t\t\tfunction error(name, file, elem, reason)\n\t\t\t{\n\t\t\t\tif (isFunction(options.error))\n\t\t\t\t\toptions.error({name: name}, file, elem, reason);\n\t\t\t}\n\n\t\t\tfunction fileComplete()\n\t\t\t{\n\t\t\t\tqueue.splice(0, 1);\n\t\t\t\tparseNextFile();\n\t\t\t}\n\t\t};\n\t}\n\n\n\tif (IS_PAPA_WORKER)\n\t{\n\t\tglobal.onmessage = workerThreadReceivedMessage;\n\t}\n\n\n\n\n\tfunction CsvToJson(_input, _config)\n\t{\n\t\t_config = _config || {};\n\t\tvar dynamicTyping = _config.dynamicTyping || false;\n\t\tif (isFunction(dynamicTyping)) {\n\t\t\t_config.dynamicTypingFunction = dynamicTyping;\n\t\t\t// Will be filled on first row call\n\t\t\tdynamicTyping = {};\n\t\t}\n\t\t_config.dynamicTyping = dynamicTyping;\n\n\t\t_config.transform = isFunction(_config.transform) ? _config.transform : false;\n\n\t\tif (_config.worker && Papa.WORKERS_SUPPORTED)\n\t\t{\n\t\t\tvar w = newWorker();\n\n\t\t\tw.userStep = _config.step;\n\t\t\tw.userChunk = _config.chunk;\n\t\t\tw.userComplete = _config.complete;\n\t\t\tw.userError = _config.error;\n\n\t\t\t_config.step = isFunction(_config.step);\n\t\t\t_config.chunk = isFunction(_config.chunk);\n\t\t\t_config.complete = isFunction(_config.complete);\n\t\t\t_config.error = isFunction(_config.error);\n\t\t\tdelete _config.worker;\t// prevent infinite loop\n\n\t\t\tw.postMessage({\n\t\t\t\tinput: _input,\n\t\t\t\tconfig: _config,\n\t\t\t\tworkerId: w.id\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar streamer = null;\n\t\tif (_input === Papa.NODE_STREAM_INPUT && typeof PAPA_BROWSER_CONTEXT === 'undefined')\n\t\t{\n\t\t\t// create a node Duplex stream for use\n\t\t\t// with .pipe\n\t\t\tstreamer = new DuplexStreamStreamer(_config);\n\t\t\treturn streamer.getStream();\n\t\t}\n\t\telse if (typeof _input === 'string')\n\t\t{\n\t\t\t_input = stripBom(_input);\n\t\t\tif (_config.download)\n\t\t\t\tstreamer = new NetworkStreamer(_config);\n\t\t\telse\n\t\t\t\tstreamer = new StringStreamer(_config);\n\t\t}\n\t\telse if (_input.readable === true && isFunction(_input.read) && isFunction(_input.on))\n\t\t{\n\t\t\tstreamer = new ReadableStreamStreamer(_config);\n\t\t}\n\t\telse if ((global.File && _input instanceof File) || _input instanceof Object)\t// ...Safari. (see issue #106)\n\t\t\tstreamer = new FileStreamer(_config);\n\n\t\treturn streamer.stream(_input);\n\n\t\t// Strip character from UTF-8 BOM encoded files that cause issue parsing the file\n\t\tfunction stripBom(string) {\n\t\t\tif (string.charCodeAt(0) === 0xfeff) {\n\t\t\t\treturn string.slice(1);\n\t\t\t}\n\t\t\treturn string;\n\t\t}\n\t}\n\n\n\n\n\n\n\tfunction JsonToCsv(_input, _config)\n\t{\n\t\t// Default configuration\n\n\t\t/** whether to surround every datum with quotes */\n\t\tvar _quotes = false;\n\n\t\t/** whether to write headers */\n\t\tvar _writeHeader = true;\n\n\t\t/** delimiting character(s) */\n\t\tvar _delimiter = ',';\n\n\t\t/** newline character(s) */\n\t\tvar _newline = '\\r\\n';\n\n\t\t/** quote character */\n\t\tvar _quoteChar = '\"';\n\n\t\t/** escaped quote character, either \"\" or <config.escapeChar>\" */\n\t\tvar _escapedQuote = _quoteChar + _quoteChar;\n\n\t\t/** whether to skip empty lines */\n\t\tvar _skipEmptyLines = false;\n\n\t\t/** the columns (keys) we expect when we unparse objects */\n\t\tvar _columns = null;\n\n\t\t/** whether to prevent outputting cells that can be parsed as formulae by spreadsheet software (Excel and LibreOffice) */\n\t\tvar _escapeFormulae = false;\n\n\t\tunpackConfig();\n\n\t\tvar quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g');\n\n\t\tif (typeof _input === 'string')\n\t\t\t_input = JSON.parse(_input);\n\n\t\tif (Array.isArray(_input))\n\t\t{\n\t\t\tif (!_input.length || Array.isArray(_input[0]))\n\t\t\t\treturn serialize(null, _input, _skipEmptyLines);\n\t\t\telse if (typeof _input[0] === 'object')\n\t\t\t\treturn serialize(_columns || Object.keys(_input[0]), _input, _skipEmptyLines);\n\t\t}\n\t\telse if (typeof _input === 'object')\n\t\t{\n\t\t\tif (typeof _input.data === 'string')\n\t\t\t\t_input.data = JSON.parse(_input.data);\n\n\t\t\tif (Array.isArray(_input.data))\n\t\t\t{\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields = _input.meta && _input.meta.fields || _columns;\n\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields = Array.isArray(_input.data[0])\n\t\t\t\t\t\t? _input.fields\n\t\t\t\t\t\t: typeof _input.data[0] === 'object'\n\t\t\t\t\t\t\t? Object.keys(_input.data[0])\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tif (!(Array.isArray(_input.data[0])) && typeof _input.data[0] !== 'object')\n\t\t\t\t\t_input.data = [_input.data];\t// handles input like [1,2,3] or ['asdf']\n\t\t\t}\n\n\t\t\treturn serialize(_input.fields || [], _input.data || [], _skipEmptyLines);\n\t\t}\n\n\t\t// Default (any valid paths should return before this)\n\t\tthrow new Error('Unable to serialize unrecognized input');\n\n\n\t\tfunction unpackConfig()\n\t\t{\n\t\t\tif (typeof _config !== 'object')\n\t\t\t\treturn;\n\n\t\t\tif (typeof _config.delimiter === 'string'\n && !Papa.BAD_DELIMITERS.filter(function(value) { return _config.delimiter.indexOf(value) !== -1; }).length)\n\t\t\t{\n\t\t\t\t_delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tif (typeof _config.quotes === 'boolean'\n\t\t\t\t|| typeof _config.quotes === 'function'\n\t\t\t\t|| Array.isArray(_config.quotes))\n\t\t\t\t_quotes = _config.quotes;\n\n\t\t\tif (typeof _config.skipEmptyLines === 'boolean'\n\t\t\t\t|| typeof _config.skipEmptyLines === 'string')\n\t\t\t\t_skipEmptyLines = _config.skipEmptyLines;\n\n\t\t\tif (typeof _config.newline === 'string')\n\t\t\t\t_newline = _config.newline;\n\n\t\t\tif (typeof _config.quoteChar === 'string')\n\t\t\t\t_quoteChar = _config.quoteChar;\n\n\t\t\tif (typeof _config.header === 'boolean')\n\t\t\t\t_writeHeader = _config.header;\n\n\t\t\tif (Array.isArray(_config.columns)) {\n\n\t\t\t\tif (_config.columns.length === 0) throw new Error('Option columns is empty');\n\n\t\t\t\t_columns = _config.columns;\n\t\t\t}\n\n\t\t\tif (_config.escapeChar !== undefined) {\n\t\t\t\t_escapedQuote = _config.escapeChar + _quoteChar;\n\t\t\t}\n\n\t\t\tif (_config.escapeFormulae instanceof RegExp) {\n\t\t\t\t_escapeFormulae = _config.escapeFormulae;\n\t\t\t} else if (typeof _config.escapeFormulae === 'boolean' && _config.escapeFormulae) {\n\t\t\t\t_escapeFormulae = /^[=+\\-@\\t\\r].*$/;\n\t\t\t}\n\t\t}\n\n\t\t/** The double for loop that iterates the data and writes out a CSV string including header row */\n\t\tfunction serialize(fields, data, skipEmptyLines)\n\t\t{\n\t\t\tvar csv = '';\n\n\t\t\tif (typeof fields === 'string')\n\t\t\t\tfields = JSON.parse(fields);\n\t\t\tif (typeof data === 'string')\n\t\t\t\tdata = JSON.parse(data);\n\n\t\t\tvar hasHeader = Array.isArray(fields) && fields.length > 0;\n\t\t\tvar dataKeyedByField = !(Array.isArray(data[0]));\n\n\t\t\t// If there a header row, write it first\n\t\t\tif (hasHeader && _writeHeader)\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < fields.length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\tcsv += safe(fields[i], i);\n\t\t\t\t}\n\t\t\t\tif (data.length > 0)\n\t\t\t\t\tcsv += _newline;\n\t\t\t}\n\n\t\t\t// Then write out the data\n\t\t\tfor (var row = 0; row < data.length; row++)\n\t\t\t{\n\t\t\t\tvar maxCol = hasHeader ? fields.length : data[row].length;\n\n\t\t\t\tvar emptyLine = false;\n\t\t\t\tvar nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0;\n\t\t\t\tif (skipEmptyLines && !hasHeader)\n\t\t\t\t{\n\t\t\t\t\temptyLine = skipEmptyLines === 'greedy' ? data[row].join('').trim() === '' : data[row].length === 1 && data[row][0].length === 0;\n\t\t\t\t}\n\t\t\t\tif (skipEmptyLines === 'greedy' && hasHeader) {\n\t\t\t\t\tvar line = [];\n\t\t\t\t\tfor (var c = 0; c < maxCol; c++) {\n\t\t\t\t\t\tvar cx = dataKeyedByField ? fields[c] : c;\n\t\t\t\t\t\tline.push(data[row][cx]);\n\t\t\t\t\t}\n\t\t\t\t\temptyLine = line.join('').trim() === '';\n\t\t\t\t}\n\t\t\t\tif (!emptyLine)\n\t\t\t\t{\n\t\t\t\t\tfor (var col = 0; col < maxCol; col++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (col > 0 && !nullLine)\n\t\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\t\tvar colIdx = hasHeader && dataKeyedByField ? fields[col] : col;\n\t\t\t\t\t\tcsv += safe(data[row][colIdx], col);\n\t\t\t\t\t}\n\t\t\t\t\tif (row < data.length - 1 && (!skipEmptyLines || (maxCol > 0 && !nullLine)))\n\t\t\t\t\t{\n\t\t\t\t\t\tcsv += _newline;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn csv;\n\t\t}\n\n\t\t/** Encloses a value around quotes if needed (makes a value safe for CSV insertion) */\n\t\tfunction safe(str, col)\n\t\t{\n\t\t\tif (typeof str === 'undefined' || str === null)\n\t\t\t\treturn '';\n\n\t\t\tif (str.constructor === Date)\n\t\t\t\treturn JSON.stringify(str).slice(1, 25);\n\n\t\t\tvar needsQuotes = false;\n\n\t\t\tif (_escapeFormulae && typeof str === \"string\" && _escapeFormulae.test(str)) {\n\t\t\t\tstr = \"'\" + str;\n\t\t\t\tneedsQuotes = true;\n\t\t\t}\n\n\t\t\tvar escapedQuoteStr = str.toString().replace(quoteCharRegex, _escapedQuote);\n\n\t\t\tneedsQuotes = needsQuotes\n\t\t\t\t\t\t\t|| _quotes === true\n\t\t\t\t\t\t\t|| (typeof _quotes === 'function' && _quotes(str, col))\n\t\t\t\t\t\t\t|| (Array.isArray(_quotes) && _quotes[col])\n\t\t\t\t\t\t\t|| hasAny(escapedQuoteStr, Papa.BAD_DELIMITERS)\n\t\t\t\t\t\t\t|| escapedQuoteStr.indexOf(_delimiter) > -1\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(0) === ' '\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(escapedQuoteStr.length - 1) === ' ';\n\n\t\t\treturn needsQuotes ? _quoteChar + escapedQuoteStr + _quoteChar : escapedQuoteStr;\n\t\t}\n\n\t\tfunction hasAny(str, substrings)\n\t\t{\n\t\t\tfor (var i = 0; i < substrings.length; i++)\n\t\t\t\tif (str.indexOf(substrings[i]) > -1)\n\t\t\t\t\treturn true;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\t/** ChunkStreamer is the base prototype for various streamer implementations. */\n\tfunction ChunkStreamer(config)\n\t{\n\t\tthis._handle = null;\n\t\tthis._finished = false;\n\t\tthis._completed = false;\n\t\tthis._halted = false;\n\t\tthis._input = null;\n\t\tthis._baseIndex = 0;\n\t\tthis._partialLine = '';\n\t\tthis._rowCount = 0;\n\t\tthis._start = 0;\n\t\tthis._nextChunk = null;\n\t\tthis.isFirstChunk = true;\n\t\tthis._completeResults = {\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\t\treplaceConfig.call(this, config);\n\n\t\tthis.parseChunk = function(chunk, isFakeChunk)\n\t\t{\n\t\t\t// First chunk pre-processing\n\t\t\tconst skipFirstNLines = parseInt(this._config.skipFirstNLines) || 0;\n\t\t\tif (this.isFirstChunk && skipFirstNLines > 0) {\n\t\t\t\tlet _newline = this._config.newline;\n\t\t\t\tif (!_newline) {\n\t\t\t\t\tconst quoteChar = this._config.quoteChar || '\"';\n\t\t\t\t\t_newline = this._handle.guessLineEndings(chunk, quoteChar);\n\t\t\t\t}\n\t\t\t\tconst splitChunk = chunk.split(_newline);\n\t\t\t\tchunk = [...splitChunk.slice(skipFirstNLines)].join(_newline);\n\t\t\t}\n\t\t\tif (this.isFirstChunk && isFunction(this._config.beforeFirstChunk))\n\t\t\t{\n\t\t\t\tvar modifiedChunk = this._config.beforeFirstChunk(chunk);\n\t\t\t\tif (modifiedChunk !== undefined)\n\t\t\t\t\tchunk = modifiedChunk;\n\t\t\t}\n\t\t\tthis.isFirstChunk = false;\n\t\t\tthis._halted = false;\n\n\t\t\t// Rejoin the line we likely just split in two by chunking the file\n\t\t\tvar aggregate = this._partialLine + chunk;\n\t\t\tthis._partialLine = '';\n\t\t\tvar results = this._handle.parse(aggregate, this._baseIndex, !this._finished);\n\n\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\tthis._halted = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lastIndex = results.meta.cursor;\n\n\t\t\tif (!this._finished)\n\t\t\t{\n\t\t\t\tthis._partialLine = aggregate.substring(lastIndex - this._baseIndex);\n\t\t\t\tthis._baseIndex = lastIndex;\n\t\t\t}\n\n\t\t\tif (results && results.data)\n\t\t\t\tthis._rowCount += results.data.length;\n\n\t\t\tvar finishedIncludingPreview = this._finished || (this._config.preview && this._rowCount >= this._config.preview);\n\n\t\t\tif (IS_PAPA_WORKER)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tresults: results,\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tfinished: finishedIncludingPreview\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (isFunction(this._config.chunk) && !isFakeChunk)\n\t\t\t{\n\t\t\t\tthis._config.chunk(results, this._handle);\n\t\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\t\tthis._halted = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresults = undefined;\n\t\t\t\tthis._completeResults = undefined;\n\t\t\t}\n\n\t\t\tif (!this._config.step && !this._config.chunk) {\n\t\t\t\tthis._completeResults.data = this._completeResults.data.concat(results.data);\n\t\t\t\tthis._completeResults.errors = this._completeResults.errors.concat(results.errors);\n\t\t\t\tthis._completeResults.meta = results.meta;\n\t\t\t}\n\n\t\t\tif (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) {\n\t\t\t\tthis._config.complete(this._completeResults, this._input);\n\t\t\t\tthis._completed = true;\n\t\t\t}\n\n\t\t\tif (!finishedIncludingPreview && (!results || !results.meta.paused))\n\t\t\t\tthis._nextChunk();\n\n\t\t\treturn results;\n\t\t};\n\n\t\tthis._sendError = function(error)\n\t\t{\n\t\t\tif (isFunction(this._config.error))\n\t\t\t\tthis._config.error(error);\n\t\t\telse if (IS_PAPA_WORKER && this._config.error)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\terror: error,\n\t\t\t\t\tfinished: false\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tfunction replaceConfig(config)\n\t\t{\n\t\t\t// Deep-copy the config so we can edit it\n\t\t\tvar configCopy = copy(config);\n\t\t\tconfigCopy.chunkSize = parseInt(configCopy.chunkSize);\t// parseInt VERY important so we don't concatenate strings!\n\t\t\tif (!config.step && !config.chunk)\n\t\t\t\tconfigCopy.chunkSize = null; // disable Range header if not streaming; bad values break IIS - see issue #196\n\t\t\tthis._handle = new ParserHandle(configCopy);\n\t\t\tthis._handle.streamer = this;\n\t\t\tthis._config = configCopy;\t// persist the copy to the caller\n\t\t}\n\t}\n\n\n\tfunction NetworkStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.RemoteChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar xhr;\n\n\t\tif (IS_WORKER)\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t\tthis._chunkLoaded();\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t};\n\t\t}\n\n\t\tthis.stream = function(url)\n\t\t{\n\t\t\tthis._input = url;\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tif (this._finished)\n\t\t\t{\n\t\t\t\tthis._chunkLoaded();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\txhr = new XMLHttpRequest();\n\n\t\t\tif (this._config.withCredentials)\n\t\t\t{\n\t\t\t\txhr.withCredentials = this._config.withCredentials;\n\t\t\t}\n\n\t\t\tif (!IS_WORKER)\n\t\t\t{\n\t\t\t\txhr.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\txhr.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\n\t\t\txhr.open(this._config.downloadRequestBody ? 'POST' : 'GET', this._input, !IS_WORKER);\n\t\t\t// Headers can only be set when once the request state is OPENED\n\t\t\tif (this._config.downloadRequestHeaders)\n\t\t\t{\n\t\t\t\tvar headers = this._config.downloadRequestHeaders;\n\n\t\t\t\tfor (var headerName in headers)\n\t\t\t\t{\n\t\t\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = this._start + this._config.chunkSize - 1;\t// minus one because byte range is inclusive\n\t\t\t\txhr.setRequestHeader('Range', 'bytes=' + this._start + '-' + end);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\txhr.send(this._config.downloadRequestBody);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis._chunkError(err.message);\n\t\t\t}\n\n\t\t\tif (IS_WORKER && xhr.status === 0)\n\t\t\t\tthis._chunkError();\n\t\t};\n\n\t\tthis._chunkLoaded = function()\n\t\t{\n\t\t\tif (xhr.readyState !== 4)\n\t\t\t\treturn;\n\n\t\t\tif (xhr.status < 200 || xhr.status >= 400)\n\t\t\t{\n\t\t\t\tthis._chunkError();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Use chunckSize as it may be a diference on reponse lentgh due to characters with more than 1 byte\n\t\t\tthis._start += this._config.chunkSize ? this._config.chunkSize : xhr.responseText.length;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= getFileSize(xhr);\n\t\t\tthis.parseChunk(xhr.responseText);\n\t\t};\n\n\t\tthis._chunkError = function(errorMessage)\n\t\t{\n\t\t\tvar errorText = xhr.statusText || errorMessage;\n\t\t\tthis._sendError(new Error(errorText));\n\t\t};\n\n\t\tfunction getFileSize(xhr)\n\t\t{\n\t\t\tvar contentRange = xhr.getResponseHeader('Content-Range');\n\t\t\tif (contentRange === null) { // no content range, then finish!\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn parseInt(contentRange.substring(contentRange.lastIndexOf('/') + 1));\n\t\t}\n\t}\n\tNetworkStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tNetworkStreamer.prototype.constructor = NetworkStreamer;\n\n\n\tfunction FileStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.LocalChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar reader, slice;\n\n\t\t// FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862\n\t\t// But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76\n\t\tvar usingAsyncReader = typeof FileReader !== 'undefined';\t// Safari doesn't consider it a function - see issue #105\n\n\t\tthis.stream = function(file)\n\t\t{\n\t\t\tthis._input = file;\n\t\t\tslice = file.slice || file.webkitSlice || file.mozSlice;\n\n\t\t\tif (usingAsyncReader)\n\t\t\t{\n\t\t\t\treader = new FileReader();\t\t// Preferred method of reading files, even in workers\n\t\t\t\treader.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\treader.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\t\t\telse\n\t\t\t\treader = new FileReaderSync();\t// Hack for running in a web worker in Firefox\n\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (!this._finished && (!this._config.preview || this._rowCount < this._config.preview))\n\t\t\t\tthis._readChunk();\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tvar input = this._input;\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = Math.min(this._start + this._config.chunkSize, this._input.size);\n\t\t\t\tinput = slice.call(input, this._start, end);\n\t\t\t}\n\t\t\tvar txt = reader.readAsText(input, this._config.encoding);\n\t\t\tif (!usingAsyncReader)\n\t\t\t\tthis._chunkLoaded({ target: { result: txt } });\t// mimic the async signature\n\t\t};\n\n\t\tthis._chunkLoaded = function(event)\n\t\t{\n\t\t\t// Very important to increment start each time before handling results\n\t\t\tthis._start += this._config.chunkSize;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= this._input.size;\n\t\t\tthis.parseChunk(event.target.result);\n\t\t};\n\n\t\tthis._chunkError = function()\n\t\t{\n\t\t\tthis._sendError(reader.error);\n\t\t};\n\n\t}\n\tFileStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tFileStreamer.prototype.constructor = FileStreamer;\n\n\n\tfunction StringStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar remaining;\n\t\tthis.stream = function(s)\n\t\t{\n\t\t\tremaining = s;\n\t\t\treturn this._nextChunk();\n\t\t};\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (this._finished) return;\n\t\t\tvar size = this._config.chunkSize;\n\t\t\tvar chunk;\n\t\t\tif(size) {\n\t\t\t\tchunk = remaining.substring(0, size);\n\t\t\t\tremaining = remaining.substring(size);\n\t\t\t} else {\n\t\t\t\tchunk = remaining;\n\t\t\t\tremaining = '';\n\t\t\t}\n\t\t\tthis._finished = !remaining;\n\t\t\treturn this.parseChunk(chunk);\n\t\t};\n\t}\n\tStringStreamer.prototype = Object.create(StringStreamer.prototype);\n\tStringStreamer.prototype.constructor = StringStreamer;\n\n\n\tfunction ReadableStreamStreamer(config)\n\t{\n\t\tconfig = config || {};\n\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar queue = [];\n\t\tvar parseOnData = true;\n\t\tvar streamHasEnded = false;\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.pause.apply(this, arguments);\n\t\t\tthis._input.pause();\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.resume.apply(this, arguments);\n\t\t\tthis._input.resume();\n\t\t};\n\n\t\tthis.stream = function(stream)\n\t\t{\n\t\t\tthis._input = stream;\n\n\t\t\tthis._input.on('data', this._streamData);\n\t\t\tthis._input.on('end', this._streamEnd);\n\t\t\tthis._input.on('error', this._streamError);\n\t\t};\n\n\t\tthis._checkIsFinished = function()\n\t\t{\n\t\t\tif (streamHasEnded && queue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tthis._checkIsFinished();\n\t\t\tif (queue.length)\n\t\t\t{\n\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tparseOnData = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._streamData = bindFunction(function(chunk)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tqueue.push(typeof chunk === 'string' ? chunk : chunk.toString(this._config.encoding));\n\n\t\t\t\tif (parseOnData)\n\t\t\t\t{\n\t\t\t\t\tparseOnData = false;\n\t\t\t\t\tthis._checkIsFinished();\n\t\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tthis._streamError(error);\n\t\t\t}\n\t\t}, this);\n\n\t\tthis._streamError = bindFunction(function(error)\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tthis._sendError(error);\n\t\t}, this);\n\n\t\tthis._streamEnd = bindFunction(function()\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tstreamHasEnded = true;\n\t\t\tthis._streamData('');\n\t\t}, this);\n\n\t\tthis._streamCleanUp = bindFunction(function()\n\t\t{\n\t\t\tthis._input.removeListener('data', this._streamData);\n\t\t\tthis._input.removeListener('end', this._streamEnd);\n\t\t\tthis._input.removeListener('error', this._streamError);\n\t\t}, this);\n\t}\n\tReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer;\n\n\n\tfunction DuplexStreamStreamer(_config) {\n\t\tvar Duplex = require('stream').Duplex;\n\t\tvar config = copy(_config);\n\t\tvar parseOnWrite = true;\n\t\tvar writeStreamHasFinished = false;\n\t\tvar parseCallbackQueue = [];\n\t\tvar stream = null;\n\n\t\tthis._onCsvData = function(results)\n\t\t{\n\t\t\tvar data = results.data;\n\t\t\tif (!stream.push(data) && !this._handle.paused()) {\n\t\t\t\t// the writeable consumer buffer has filled up\n\t\t\t\t// so we need to pause until more items\n\t\t\t\t// can be processed\n\t\t\t\tthis._handle.pause();\n\t\t\t}\n\t\t};\n\n\t\tthis._onCsvComplete = function()\n\t\t{\n\t\t\t// node will finish the read stream when\n\t\t\t// null is pushed\n\t\t\tstream.push(null);\n\t\t};\n\n\t\tconfig.step = bindFunction(this._onCsvData, this);\n\t\tconfig.complete = bindFunction(this._onCsvComplete, this);\n\t\tChunkStreamer.call(this, config);\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (writeStreamHasFinished && parseCallbackQueue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t\tif (parseCallbackQueue.length) {\n\t\t\t\tparseCallbackQueue.shift()();\n\t\t\t} else {\n\t\t\t\tparseOnWrite = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._addToParseQueue = function(chunk, callback)\n\t\t{\n\t\t\t// add to queue so that we can indicate\n\t\t\t// completion via callback\n\t\t\t// node will automatically pause the incoming stream\n\t\t\t// when too many items have been added without their\n\t\t\t// callback being invoked\n\t\t\tparseCallbackQueue.push(bindFunction(function() {\n\t\t\t\tthis.parseChunk(typeof chunk === 'string' ? chunk : chunk.toString(config.encoding));\n\t\t\t\tif (isFunction(callback)) {\n\t\t\t\t\treturn callback();\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tif (parseOnWrite) {\n\t\t\t\tparseOnWrite = false;\n\t\t\t\tthis._nextChunk();\n\t\t\t}\n\t\t};\n\n\t\tthis._onRead = function()\n\t\t{\n\t\t\tif (this._handle.paused()) {\n\t\t\t\t// the writeable consumer can handle more data\n\t\t\t\t// so resume the chunk parsing\n\t\t\t\tthis._handle.resume();\n\t\t\t}\n\t\t};\n\n\t\tthis._onWrite = function(chunk, encoding, callback)\n\t\t{\n\t\t\tthis._addToParseQueue(chunk, callback);\n\t\t};\n\n\t\tthis._onWriteComplete = function()\n\t\t{\n\t\t\twriteStreamHasFinished = true;\n\t\t\t// have to write empty string\n\t\t\t// so parser knows its done\n\t\t\tthis._addToParseQueue('');\n\t\t};\n\n\t\tthis.getStream = function()\n\t\t{\n\t\t\treturn stream;\n\t\t};\n\t\tstream = new Duplex({\n\t\t\treadableObjectMode: true,\n\t\t\tdecodeStrings: false,\n\t\t\tread: bindFunction(this._onRead, this),\n\t\t\twrite: bindFunction(this._onWrite, this)\n\t\t});\n\t\tstream.once('finish', bindFunction(this._onWriteComplete, this));\n\t}\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tDuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\t\tDuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer;\n\t}\n\n\n\t// Use one ParserHandle per entire CSV file or string\n\tfunction ParserHandle(_config)\n\t{\n\t\t// One goal is to minimize the use of regular expressions...\n\t\tvar MAX_FLOAT = Math.pow(2, 53);\n\t\tvar MIN_FLOAT = -MAX_FLOAT;\n\t\tvar FLOAT = /^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/;\n\t\tvar ISO_DATE = /^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/;\n\t\tvar self = this;\n\t\tvar _stepCounter = 0;\t// Number of times step was called (number of rows parsed)\n\t\tvar _rowCounter = 0;\t// Number of rows that have been parsed so far\n\t\tvar _input;\t\t\t\t// The input being parsed\n\t\tvar _parser;\t\t\t// The core parser being used\n\t\tvar _paused = false;\t// Whether we are paused or not\n\t\tvar _aborted = false;\t// Whether the parser has aborted or not\n\t\tvar _delimiterError;\t// Temporary state between delimiter detection and processing results\n\t\tvar _fields = [];\t\t// Fields are from the header row of the input, if there is one\n\t\tvar _results = {\t\t// The last results returned from the parser\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\n\t\tif (isFunction(_config.step))\n\t\t{\n\t\t\tvar userStep = _config.step;\n\t\t\t_config.step = function(results)\n\t\t\t{\n\t\t\t\t_results = results;\n\n\t\t\t\tif (needsHeaderRow())\n\t\t\t\t\tprocessResults();\n\t\t\t\telse\t// only call user's step function after header row\n\t\t\t\t{\n\t\t\t\t\tprocessResults();\n\n\t\t\t\t\t// It's possbile that this line was empty and there's no row here after all\n\t\t\t\t\tif (_results.data.length === 0)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t_stepCounter += results.data.length;\n\t\t\t\t\tif (_config.preview && _stepCounter > _config.preview)\n\t\t\t\t\t\t_parser.abort();\n\t\t\t\t\telse {\n\t\t\t\t\t\t_results.data = _results.data[0];\n\t\t\t\t\t\tuserStep(_results, self);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Parses input. Most users won't need, and shouldn't mess with, the baseIndex\n\t\t * and ignoreLastRow parameters. They are used by streamers (wrapper functions)\n\t\t * when an input comes in multiple chunks, like from a file.\n\t\t */\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\tvar quoteChar = _config.quoteChar || '\"';\n\t\t\tif (!_config.newline)\n\t\t\t\t_config.newline = this.guessLineEndings(input, quoteChar);\n\n\t\t\t_delimiterError = false;\n\t\t\tif (!_config.delimiter)\n\t\t\t{\n\t\t\t\tvar delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess);\n\t\t\t\tif (delimGuess.successful)\n\t\t\t\t\t_config.delimiter = delimGuess.bestDelimiter;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_delimiterError = true;\t// add error after parsing (otherwise it would be overwritten)\n\t\t\t\t\t_config.delimiter = Papa.DefaultDelimiter;\n\t\t\t\t}\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\t\t\telse if(isFunction(_config.delimiter))\n\t\t\t{\n\t\t\t\t_config.delimiter = _config.delimiter(input);\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tvar parserConfig = copy(_config);\n\t\t\tif (_config.preview && _config.header)\n\t\t\t\tparserConfig.preview++;\t// to compensate for header row\n\n\t\t\t_input = input;\n\t\t\t_parser = new Parser(parserConfig);\n\t\t\t_results = _parser.parse(_input, baseIndex, ignoreLastRow);\n\t\t\tprocessResults();\n\t\t\treturn _paused ? { meta: { paused: true } } : (_results || { meta: { paused: false } });\n\t\t};\n\n\t\tthis.paused = function()\n\t\t{\n\t\t\treturn _paused;\n\t\t};\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\t_paused = true;\n\t\t\t_parser.abort();\n\n\t\t\t// If it is streaming via \"chunking\", the reader will start appending correctly already so no need to substring,\n\t\t\t// otherwise we can get duplicate content within a row\n\t\t\t_input = isFunction(_config.chunk) ? \"\" : _input.substring(_parser.getCharIndex());\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tif(self.streamer._halted) {\n\t\t\t\t_paused = false;\n\t\t\t\tself.streamer.parseChunk(_input, true);\n\t\t\t} else {\n\t\t\t\t// Bugfix: #636 In case the processing hasn't halted yet\n\t\t\t\t// wait for it to halt in order to resume\n\t\t\t\tsetTimeout(self.resume, 3);\n\t\t\t}\n\t\t};\n\n\t\tthis.aborted = function()\n\t\t{\n\t\t\treturn _aborted;\n\t\t};\n\n\t\tthis.abort = function()\n\t\t{\n\t\t\t_aborted = true;\n\t\t\t_parser.abort();\n\t\t\t_results.meta.aborted = true;\n\t\t\tif (isFunction(_config.complete))\n\t\t\t\t_config.complete(_results);\n\t\t\t_input = '';\n\t\t};\n\n\t\tthis.guessLineEndings = function(input, quoteChar)\n\t\t{\n\t\t\tinput = input.substring(0, 1024 * 1024);\t// max length 1 MB\n\t\t\t// Replace all the text inside quotes\n\t\t\tvar re = new RegExp(escapeRegExp(quoteChar) + '([^]*?)' + escapeRegExp(quoteChar), 'gm');\n\t\t\tinput = input.replace(re, '');\n\n\t\t\tvar r = input.split('\\r');\n\n\t\t\tvar n = input.split('\\n');\n\n\t\t\tvar nAppearsFirst = (n.length > 1 && n[0].length < r[0].length);\n\n\t\t\tif (r.length === 1 || nAppearsFirst)\n\t\t\t\treturn '\\n';\n\n\t\t\tvar numWithN = 0;\n\t\t\tfor (var i = 0; i < r.length; i++)\n\t\t\t{\n\t\t\t\tif (r[i][0] === '\\n')\n\t\t\t\t\tnumWithN++;\n\t\t\t}\n\n\t\t\treturn numWithN >= r.length / 2 ? '\\r\\n' : '\\r';\n\t\t};\n\n\t\tfunction testEmptyLine(s) {\n\t\t\treturn _config.skipEmptyLines === 'greedy' ? s.join('').trim() === '' : s.length === 1 && s[0].length === 0;\n\t\t}\n\n\t\tfunction testFloat(s) {\n\t\t\tif (FLOAT.test(s)) {\n\t\t\t\tvar floatValue = parseFloat(s);\n\t\t\t\tif (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction processResults()\n\t\t{\n\t\t\tif (_results && _delimiterError)\n\t\t\t{\n\t\t\t\taddError('Delimiter', 'UndetectableDelimiter', 'Unable to auto-detect delimiting character; defaulted to \\'' + Papa.DefaultDelimiter + '\\'');\n\t\t\t\t_delimiterError = false;\n\t\t\t}\n\n\t\t\tif (_config.skipEmptyLines)\n\t\t\t{\n\t\t\t\t_results.data = _results.data.filter(function(d) {\n\t\t\t\t\treturn !testEmptyLine(d);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (needsHeaderRow())\n\t\t\t\tfillHeaderFields();\n\n\t\t\treturn applyHeaderAndDynamicTypingAndTransformation();\n\t\t}\n\n\t\tfunction needsHeaderRow()\n\t\t{\n\t\t\treturn _config.header && _fields.length === 0;\n\t\t}\n\n\t\tfunction fillHeaderFields()\n\t\t{\n\t\t\tif (!_results)\n\t\t\t\treturn;\n\n\t\t\tfunction addHeader(header, i)\n\t\t\t{\n\t\t\t\tif (isFunction(_config.transformHeader))\n\t\t\t\t\theader = _config.transformHeader(header, i);\n\n\t\t\t\t_fields.push(header);\n\t\t\t}\n\n\t\t\tif (Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\tfor (var i = 0; needsHeaderRow() && i < _results.data.length; i++)\n\t\t\t\t\t_results.data[i].forEach(addHeader);\n\n\t\t\t\t_results.data.splice(0, 1);\n\t\t\t}\n\t\t\t// if _results.data[0] is not an array, we are in a step where _results.data is the row.\n\t\t\telse\n\t\t\t\t_results.data.forEach(addHeader);\n\t\t}\n\n\t\tfunction shouldApplyDynamicTyping(field) {\n\t\t\t// Cache function values to avoid calling it for each row\n\t\t\tif (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) {\n\t\t\t\t_config.dynamicTyping[field] = _config.dynamicTypingFunction(field);\n\t\t\t}\n\t\t\treturn (_config.dynamicTyping[field] || _config.dynamicTyping) === true;\n\t\t}\n\n\t\tfunction parseDynamic(field, value)\n\t\t{\n\t\t\tif (shouldApplyDynamicTyping(field))\n\t\t\t{\n\t\t\t\tif (value === 'true' || value === 'TRUE')\n\t\t\t\t\treturn true;\n\t\t\t\telse if (value === 'false' || value === 'FALSE')\n\t\t\t\t\treturn false;\n\t\t\t\telse if (testFloat(value))\n\t\t\t\t\treturn parseFloat(value);\n\t\t\t\telse if (ISO_DATE.test(value))\n\t\t\t\t\treturn new Date(value);\n\t\t\t\telse\n\t\t\t\t\treturn (value === '' ? null : value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tfunction applyHeaderAndDynamicTypingAndTransformation()\n\t\t{\n\t\t\tif (!_results || (!_config.header && !_config.dynamicTyping && !_config.transform))\n\t\t\t\treturn _results;\n\n\t\t\tfunction processRow(rowSource, i)\n\t\t\t{\n\t\t\t\tvar row = _config.header ? {} : [];\n\n\t\t\t\tvar j;\n\t\t\t\tfor (j = 0; j < rowSource.length; j++)\n\t\t\t\t{\n\t\t\t\t\tvar field = j;\n\t\t\t\t\tvar value = rowSource[j];\n\n\t\t\t\t\tif (_config.header)\n\t\t\t\t\t\tfield = j >= _fields.length ? '__parsed_extra' : _fields[j];\n\n\t\t\t\t\tif (_config.transform)\n\t\t\t\t\t\tvalue = _config.transform(value,field);\n\n\t\t\t\t\tvalue = parseDynamic(field, value);\n\n\t\t\t\t\tif (field === '__parsed_extra')\n\t\t\t\t\t{\n\t\t\t\t\t\trow[field] = row[field] || [];\n\t\t\t\t\t\trow[field].push(value);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trow[field] = value;\n\t\t\t\t}\n\n\n\t\t\t\tif (_config.header)\n\t\t\t\t{\n\t\t\t\t\tif (j > _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t\telse if (j < _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t}\n\n\t\t\t\treturn row;\n\t\t\t}\n\n\t\t\tvar incrementBy = 1;\n\t\t\tif (!_results.data.length || Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\t_results.data = _results.data.map(processRow);\n\t\t\t\tincrementBy = _results.data.length;\n\t\t\t}\n\t\t\telse\n\t\t\t\t_results.data = processRow(_results.data, 0);\n\n\n\t\t\tif (_config.header && _results.meta)\n\t\t\t\t_results.meta.fields = _fields;\n\n\t\t\t_rowCounter += incrementBy;\n\t\t\treturn _results;\n\t\t}\n\n\t\tfunction guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) {\n\t\t\tvar bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount;\n\n\t\t\tdelimitersToGuess = delimitersToGuess || [',', '\\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP];\n\n\t\t\tfor (var i = 0; i < delimitersToGuess.length; i++) {\n\t\t\t\tvar delim = delimitersToGuess[i];\n\t\t\t\tvar delta = 0, avgFieldCount = 0, emptyLinesCount = 0;\n\t\t\t\tfieldCountPrevRow = undefined;\n\n\t\t\t\tvar preview = new Parser({\n\t\t\t\t\tcomments: comments,\n\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\tnewline: newline,\n\t\t\t\t\tpreview: 10\n\t\t\t\t}).parse(input);\n\n\t\t\t\tfor (var j = 0; j < preview.data.length; j++) {\n\t\t\t\t\tif (skipEmptyLines && testEmptyLine(preview.data[j])) {\n\t\t\t\t\t\temptyLinesCount++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar fieldCount = preview.data[j].length;\n\t\t\t\t\tavgFieldCount += fieldCount;\n\n\t\t\t\t\tif (typeof fieldCountPrevRow === 'undefined') {\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (fieldCount > 0) {\n\t\t\t\t\t\tdelta += Math.abs(fieldCount - fieldCountPrevRow);\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (preview.data.length > 0)\n\t\t\t\t\tavgFieldCount /= (preview.data.length - emptyLinesCount);\n\n\t\t\t\tif ((typeof bestDelta === 'undefined' || delta <= bestDelta)\n\t\t\t\t\t&& (typeof maxFieldCount === 'undefined' || avgFieldCount > maxFieldCount) && avgFieldCount > 1.99) {\n\t\t\t\t\tbestDelta = delta;\n\t\t\t\t\tbestDelim = delim;\n\t\t\t\t\tmaxFieldCount = avgFieldCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_config.delimiter = bestDelim;\n\n\t\t\treturn {\n\t\t\t\tsuccessful: !!bestDelim,\n\t\t\t\tbestDelimiter: bestDelim\n\t\t\t};\n\t\t}\n\n\t\tfunction addError(type, code, msg, row)\n\t\t{\n\t\t\tvar error = {\n\t\t\t\ttype: type,\n\t\t\t\tcode: code,\n\t\t\t\tmessage: msg\n\t\t\t};\n\t\t\tif(row !== undefined) {\n\t\t\t\terror.row = row;\n\t\t\t}\n\t\t\t_results.errors.push(error);\n\t\t}\n\t}\n\n\t/** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */\n\tfunction escapeRegExp(string)\n\t{\n\t\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\t}\n\n\t/** The core parser implements speedy and correct CSV parsing */\n\tfunction Parser(config)\n\t{\n\t\t// Unpack the config object\n\t\tconfig = config || {};\n\t\tvar delim = config.delimiter;\n\t\tvar newline = config.newline;\n\t\tvar comments = config.comments;\n\t\tvar step = config.step;\n\t\tvar preview = config.preview;\n\t\tvar fastMode = config.fastMode;\n\t\tvar quoteChar;\n\t\tvar renamedHeaders = null;\n\t\tvar headerParsed = false;\n\n\t\tif (config.quoteChar === undefined || config.quoteChar === null) {\n\t\t\tquoteChar = '\"';\n\t\t} else {\n\t\t\tquoteChar = config.quoteChar;\n\t\t}\n\t\tvar escapeChar = quoteChar;\n\t\tif (config.escapeChar !== undefined) {\n\t\t\tescapeChar = config.escapeChar;\n\t\t}\n\n\t\t// Delimiter must be valid\n\t\tif (typeof delim !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(delim) > -1)\n\t\t\tdelim = ',';\n\n\t\t// Comment character must be valid\n\t\tif (comments === delim)\n\t\t\tthrow new Error('Comment character same as delimiter');\n\t\telse if (comments === true)\n\t\t\tcomments = '#';\n\t\telse if (typeof comments !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(comments) > -1)\n\t\t\tcomments = false;\n\n\t\t// Newline must be valid: \\r, \\n, or \\r\\n\n\t\tif (newline !== '\\n' && newline !== '\\r' && newline !== '\\r\\n')\n\t\t\tnewline = '\\n';\n\n\t\t// We're gonna need these at the Parser scope\n\t\tvar cursor = 0;\n\t\tvar aborted = false;\n\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\t// For some reason, in Chrome, this speeds things up (!?)\n\t\t\tif (typeof input !== 'string')\n\t\t\t\tthrow new Error('Input must be a string');\n\n\t\t\t// We don't need to compute some of these every time parse() is called,\n\t\t\t// but having them in a more local scope seems to perform better\n\t\t\tvar inputLen = input.length,\n\t\t\t\tdelimLen = delim.length,\n\t\t\t\tnewlineLen = newline.length,\n\t\t\t\tcommentsLen = comments.length;\n\t\t\tvar stepIsFunction = isFunction(step);\n\n\t\t\t// Establish starting state\n\t\t\tcursor = 0;\n\t\t\tvar data = [], errors = [], row = [], lastCursor = 0;\n\n\t\t\tif (!input)\n\t\t\t\treturn returnable();\n\n\t\t\tif (fastMode || (fastMode !== false && input.indexOf(quoteChar) === -1))\n\t\t\t{\n\t\t\t\tvar rows = input.split(newline);\n\t\t\t\tfor (var i = 0; i < rows.length; i++)\n\t\t\t\t{\n\t\t\t\t\trow = rows[i];\n\t\t\t\t\tcursor += row.length;\n\n\t\t\t\t\tif (i !== rows.length - 1)\n\t\t\t\t\t\tcursor += newline.length;\n\t\t\t\t\telse if (ignoreLastRow)\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tif (comments && row.substring(0, commentsLen) === comments)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\tif (preview && i >= preview)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = data.slice(0, preview);\n\t\t\t\t\t\treturn returnable(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\tvar nextDelim = input.indexOf(delim, cursor);\n\t\t\tvar nextNewline = input.indexOf(newline, cursor);\n\t\t\tvar quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g');\n\t\t\tvar quoteSearch = input.indexOf(quoteChar, cursor);\n\n\t\t\t// Parser loop\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\t// Field has opening quote\n\t\t\t\tif (input[cursor] === quoteChar)\n\t\t\t\t{\n\t\t\t\t\t// Start our search for the closing quote where the cursor is\n\t\t\t\t\tquoteSearch = cursor;\n\n\t\t\t\t\t// Skip the opening quote\n\t\t\t\t\tcursor++;\n\n\t\t\t\t\tfor (;;)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Find closing quote\n\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, quoteSearch + 1);\n\n\t\t\t\t\t\t//No other quotes are found - no other delimiters\n\t\t\t\t\t\tif (quoteSearch === -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!ignoreLastRow) {\n\t\t\t\t\t\t\t\t// No closing quote... what a pity\n\t\t\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\t\t\tcode: 'MissingQuotes',\n\t\t\t\t\t\t\t\t\tmessage: 'Quoted field unterminated',\n\t\t\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn finish();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Closing quote at EOF\n\t\t\t\t\t\tif (quoteSearch === inputLen - 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar);\n\t\t\t\t\t\t\treturn finish(value);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this quote is escaped, it's part of the data; skip it\n\t\t\t\t\t\t// If the quote character is the escape character, then check if the next character is the escape character\n\t\t\t\t\t\tif (quoteChar === escapeChar && input[quoteSearch + 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the quote character is not the escape character, then check if the previous character was the escape character\n\t\t\t\t\t\tif (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(nextDelim !== -1 && nextDelim < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(nextNewline !== -1 && nextNewline < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Check up to nextDelim or nextNewline, whichever is closest\n\t\t\t\t\t\tvar checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline);\n\t\t\t\t\t\tvar spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo);\n\n\t\t\t\t\t\t// Closing quote followed by delimiter or 'unnecessary spaces + delimiter'\n\t\t\t\t\t\tif (input.substr(quoteSearch + 1 + spacesBetweenQuoteAndDelimiter, delimLen) === delim)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tcursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen;\n\n\t\t\t\t\t\t\t// If char after following delimiter is not quoteChar, we find next quote char position\n\t\t\t\t\t\t\tif (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen] !== quoteChar)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline);\n\n\t\t\t\t\t\t// Closing quote followed by newline or 'unnecessary spaces + newLine'\n\t\t\t\t\t\tif (input.substring(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen) === newline)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tsaveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen);\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\t// because we may have skipped the nextDelim in the quoted field\n\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\t// we search for first quote in next line\n\n\t\t\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t// Checks for valid closing quotes are complete (escaped quotes or quote followed by EOF/delimiter/newline) -- assume these quotes are part of an invalid text string\n\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\tcode: 'InvalidQuotes',\n\t\t\t\t\t\t\tmessage: 'Trailing quote on quoted field is malformed',\n\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Comment found at start of new line\n\t\t\t\tif (comments && row.length === 0 && input.substring(cursor, cursor + commentsLen) === comments)\n\t\t\t\t{\n\t\t\t\t\tif (nextNewline === -1)\t// Comment ends at EOF\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tcursor = nextNewline + newlineLen;\n\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Next delimiter comes before next newline, so we've reached end of field\n\t\t\t\tif (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1))\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextDelim));\n\t\t\t\t\tcursor = nextDelim + delimLen;\n\t\t\t\t\t// we look for next delimiter char\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// End of row\n\t\t\t\tif (nextNewline !== -1)\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextNewline));\n\t\t\t\t\tsaveRow(nextNewline + newlineLen);\n\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn finish();\n\n\n\t\t\tfunction pushRow(row)\n\t\t\t{\n\t\t\t\tdata.push(row);\n\t\t\t\tlastCursor = cursor;\n\t\t\t}\n\n\t\t\t/**\n * checks if there are extra spaces after closing quote and given index without any text\n * if Yes, returns the number of spaces\n */\n\t\t\tfunction extraSpaces(index) {\n\t\t\t\tvar spaceLength = 0;\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tvar textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index);\n\t\t\t\t\tif (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === '') {\n\t\t\t\t\t\tspaceLength = textBetweenClosingQuoteAndIndex.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spaceLength;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the remaining input from cursor to the end into\n\t\t\t * row, saves the row, calls step, and returns the results.\n\t\t\t */\n\t\t\tfunction finish(value)\n\t\t\t{\n\t\t\t\tif (ignoreLastRow)\n\t\t\t\t\treturn returnable();\n\t\t\t\tif (typeof value === 'undefined')\n\t\t\t\t\tvalue = input.substring(cursor);\n\t\t\t\trow.push(value);\n\t\t\t\tcursor = inputLen;\t// important in case parsing is paused\n\t\t\t\tpushRow(row);\n\t\t\t\tif (stepIsFunction)\n\t\t\t\t\tdoStep();\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the current row to the results. It sets the cursor\n\t\t\t * to newCursor and finds the nextNewline. The caller should\n\t\t\t * take care to execute user's step function and check for\n\t\t\t * preview and end parsing if necessary.\n\t\t\t */\n\t\t\tfunction saveRow(newCursor)\n\t\t\t{\n\t\t\t\tcursor = newCursor;\n\t\t\t\tpushRow(row);\n\t\t\t\trow = [];\n\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t}\n\n\t\t\t/** Returns an object with the results, errors, and meta. */\n\t\t\tfunction returnable(stopped)\n\t\t\t{\n\t\t\t\tif (config.header && !baseIndex && data.length && !headerParsed)\n\t\t\t\t{\n\t\t\t\t\tconst result = data[0];\n\t\t\t\t\tconst headerCount = Object.create(null); // To track the count of each base header\n\t\t\t\t\tconst usedHeaders = new Set(result); // To track used headers and avoid duplicates\n\t\t\t\t\tlet duplicateHeaders = false;\n\n\t\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\t\tlet header = result[i];\n\t\t\t\t\t\tif (isFunction(config.transformHeader))\n\t\t\t\t\t\t\theader = config.transformHeader(header, i);\n\n\t\t\t\t\t\tif (!headerCount[header]) {\n\t\t\t\t\t\t\theaderCount[header] = 1;\n\t\t\t\t\t\t\tresult[i] = header;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet newHeader;\n\t\t\t\t\t\t\tlet suffixCount = headerCount[header];\n\n\t\t\t\t\t\t\t// Find a unique new header\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tnewHeader = `${header}_${suffixCount}`;\n\t\t\t\t\t\t\t\tsuffixCount++;\n\t\t\t\t\t\t\t} while (usedHeaders.has(newHeader));\n\n\t\t\t\t\t\t\tusedHeaders.add(newHeader); // Mark this new Header as used\n\t\t\t\t\t\t\tresult[i] = newHeader;\n\t\t\t\t\t\t\theaderCount[header]++;\n\t\t\t\t\t\t\tduplicateHeaders = true;\n\t\t\t\t\t\t\tif (renamedHeaders === null) {\n\t\t\t\t\t\t\t\trenamedHeaders = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenamedHeaders[newHeader] = header;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tusedHeaders.add(header); // Ensure the original header is marked as used\n\t\t\t\t\t}\n\t\t\t\t\tif (duplicateHeaders) {\n\t\t\t\t\t\tconsole.warn('Duplicate headers found and renamed.');\n\t\t\t\t\t}\n\t\t\t\t\theaderParsed = true;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdata: data,\n\t\t\t\t\terrors: errors,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\t\tlinebreak: newline,\n\t\t\t\t\t\taborted: aborted,\n\t\t\t\t\t\ttruncated: !!stopped,\n\t\t\t\t\t\tcursor: lastCursor + (baseIndex || 0),\n\t\t\t\t\t\trenamedHeaders: renamedHeaders\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/** Executes the user's step function and resets data & errors. */\n\t\t\tfunction doStep()\n\t\t\t{\n\t\t\t\tstep(returnable());\n\t\t\t\tdata = [];\n\t\t\t\terrors = [];\n\t\t\t}\n\t\t};\n\n\t\t/** Sets the abort flag */\n\t\tthis.abort = function()\n\t\t{\n\t\t\taborted = true;\n\t\t};\n\n\t\t/** Gets the cursor position */\n\t\tthis.getCharIndex = function()\n\t\t{\n\t\t\treturn cursor;\n\t\t};\n\t}\n\n\n\tfunction newWorker()\n\t{\n\t\tif (!Papa.WORKERS_SUPPORTED)\n\t\t\treturn false;\n\n\t\tvar workerUrl = getWorkerBlob();\n\t\tvar w = new global.Worker(workerUrl);\n\t\tw.onmessage = mainThreadReceivedMessage;\n\t\tw.id = workerIdCounter++;\n\t\tworkers[w.id] = w;\n\t\treturn w;\n\t}\n\n\t/** Callback when main thread receives a message */\n\tfunction mainThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\t\tvar worker = workers[msg.workerId];\n\t\tvar aborted = false;\n\n\t\tif (msg.error)\n\t\t\tworker.userError(msg.error, msg.file);\n\t\telse if (msg.results && msg.results.data)\n\t\t{\n\t\t\tvar abort = function() {\n\t\t\t\taborted = true;\n\t\t\t\tcompleteWorker(msg.workerId, { data: [], errors: [], meta: { aborted: true } });\n\t\t\t};\n\n\t\t\tvar handle = {\n\t\t\t\tabort: abort,\n\t\t\t\tpause: notImplemented,\n\t\t\t\tresume: notImplemented\n\t\t\t};\n\n\t\t\tif (isFunction(worker.userStep))\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < msg.results.data.length; i++)\n\t\t\t\t{\n\t\t\t\t\tworker.userStep({\n\t\t\t\t\t\tdata: msg.results.data[i],\n\t\t\t\t\t\terrors: msg.results.errors,\n\t\t\t\t\t\tmeta: msg.results.meta\n\t\t\t\t\t}, handle);\n\t\t\t\t\tif (aborted)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdelete msg.results;\t// free memory ASAP\n\t\t\t}\n\t\t\telse if (isFunction(worker.userChunk))\n\t\t\t{\n\t\t\t\tworker.userChunk(msg.results, handle, msg.file);\n\t\t\t\tdelete msg.results;\n\t\t\t}\n\t\t}\n\n\t\tif (msg.finished && !aborted)\n\t\t\tcompleteWorker(msg.workerId, msg.results);\n\t}\n\n\tfunction completeWorker(workerId, results) {\n\t\tvar worker = workers[workerId];\n\t\tif (isFunction(worker.userComplete))\n\t\t\tworker.userComplete(results);\n\t\tworker.terminate();\n\t\tdelete workers[workerId];\n\t}\n\n\tfunction notImplemented() {\n\t\tthrow new Error('Not implemented.');\n\t}\n\n\t/** Callback when worker thread receives a message */\n\tfunction workerThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\n\t\tif (typeof Papa.WORKER_ID === 'undefined' && msg)\n\t\t\tPapa.WORKER_ID = msg.workerId;\n\n\t\tif (typeof msg.input === 'string')\n\t\t{\n\t\t\tglobal.postMessage({\n\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\tresults: Papa.parse(msg.input, msg.config),\n\t\t\t\tfinished: true\n\t\t\t});\n\t\t}\n\t\telse if ((global.File && msg.input instanceof File) || msg.input instanceof Object)\t// thank you, Safari (see issue #106)\n\t\t{\n\t\t\tvar results = Papa.parse(msg.input, msg.config);\n\t\t\tif (results)\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tresults: results,\n\t\t\t\t\tfinished: true\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Makes a deep copy of an array or object (mostly) */\n\tfunction copy(obj)\n\t{\n\t\tif (typeof obj !== 'object' || obj === null)\n\t\t\treturn obj;\n\t\tvar cpy = Array.isArray(obj) ? [] : {};\n\t\tfor (var key in obj)\n\t\t\tcpy[key] = copy(obj[key]);\n\t\treturn cpy;\n\t}\n\n\tfunction bindFunction(f, self)\n\t{\n\t\treturn function() { f.apply(self, arguments); };\n\t}\n\tfunction isFunction(func)\n\t{\n\t\treturn typeof func === 'function';\n\t}\n\n\treturn Papa;\n}));\n","import { t } from \"i18next\";\nimport { Toastr } from \"neetoui\";\nimport Papa from \"papaparse\";\nimport { prop } from \"ramda\";\nimport { string } from \"yup\";\n\nconst isValidEmail = email => string().email().isValidSync(email);\n\nexport const createEmailOptions = (emails = []) =>\n emails.map(email => ({\n label: email,\n value: email,\n valid: isValidEmail(email),\n }));\n\nexport const parseCsvEmails = (file, onSuccess) => {\n Papa.parse(file, {\n header: true,\n skipEmptyLines: true,\n transformHeader: h => h.toLowerCase().replace(/\\W/g, \"\"),\n complete: results => {\n const isEmailFieldPresent = results.meta.fields?.includes(\"email\");\n if (isEmailFieldPresent) {\n const emails = results.data\n .filter(prop(\"email\"))\n .map(item => item.email.trim());\n onSuccess(createEmailOptions(emails));\n } else {\n Toastr.error(t(\"neetoMolecules.sendToFields.errors.invalidCsv\"));\n }\n },\n });\n};\n","import { useRef, useState } from \"react\";\n\nimport { useFormikContext } from \"formik\";\nimport { Upload } from \"neetoicons\";\nimport { Button, Toastr } from \"neetoui\";\nimport { MultiEmailInput } from \"neetoui/formik\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\n\nimport BulkUploadPane from \"./BulkUploadPane\";\nimport { CSV_FILE_SIZE_IN_KB, SIZES } from \"./constants\";\nimport { parseCsvEmails } from \"./utils\";\n\nconst SendToFields = ({\n emailInputProps,\n ccInputProps,\n bccInputProps,\n showUploadCsvButton = false,\n showCcBccButton = false,\n showCcField = false,\n showBccField = false,\n showSendToField = true,\n}) => {\n const [isBulkUploadPaneOpen, setIsBulkUploadPaneOpen] = useState(false);\n const sendToFieldRef = useRef();\n const {\n values: {\n showCopyEmails,\n [emailInputProps.name || \"sendTo\"]: existingSendToEmails,\n },\n setFieldValue,\n } = useFormikContext();\n const { t } = useTranslation();\n\n const handleCSVFile = file => {\n try {\n const onSuccess = values =>\n setFieldValue(emailInputProps.name || \"sendTo\", [\n ...existingSendToEmails,\n ...values,\n ]);\n\n parseCsvEmails(file, onSuccess);\n setIsBulkUploadPaneOpen(false);\n sendToFieldRef.current?.focus();\n } catch (error) {\n Toastr.error(error);\n }\n };\n\n const handelCcBccButtonClick = e => {\n e.stopPropagation();\n setFieldValue(\"showCopyEmails\", !showCopyEmails);\n };\n\n return (\n <div\n className=\"relative w-full flex-col gap-2\"\n data-testid=\"send-to-text-field\"\n >\n {showUploadCsvButton && (\n <Button\n className=\"absolute end-1 top-0\"\n data-cy=\"bulk-upload-button\"\n data-testid=\"bulk-upload-button\"\n icon={Upload}\n label={t(\"neetoMolecules.shareViaLink.bulkUpload\")}\n size=\"small\"\n style=\"link\"\n onClick={() => setIsBulkUploadPaneOpen(true)}\n />\n )}\n {showSendToField && (\n <div className=\"neeto-ui-border-gray-200 w-full border-b pb-1\">\n <MultiEmailInput\n name=\"sendTo\"\n ref={sendToFieldRef}\n {...emailInputProps}\n suffix={\n showCcBccButton && (\n <Button\n data-cy=\"cc-bcc-button\"\n data-testid=\"cc-bcc-button\"\n label={t(\"neetoMolecules.emailForm.labels.ccBcc\")}\n size=\"small\"\n style=\"link\"\n onClick={handelCcBccButtonClick}\n onKeyDown={event => event.stopPropagation()}\n />\n )\n }\n />\n </div>\n )}\n {(showCopyEmails || showCcField || showBccField) && (\n <div className=\"mt-5 flex w-full flex-col gap-5\">\n {(showCopyEmails || showCcField) && (\n <div className=\"neeto-ui-border-gray-200 w-full border-b pb-1\">\n <MultiEmailInput name=\"sendToBcc\" {...ccInputProps} />\n </div>\n )}\n {(showCopyEmails || showBccField) && (\n <div className=\"neeto-ui-border-gray-200 w-full border-b pb-1\">\n <MultiEmailInput name=\"sendToCc\" {...bccInputProps} />\n </div>\n )}\n </div>\n )}\n <BulkUploadPane\n fileSize={CSV_FILE_SIZE_IN_KB}\n handleFileSubmit={handleCSVFile}\n isOpen={isBulkUploadPaneOpen}\n onClose={() => setIsBulkUploadPaneOpen(false)}\n />\n </div>\n );\n};\n\nconst inputPropTypes = PropTypes.shape({\n name: PropTypes.string,\n display: PropTypes.node,\n label: PropTypes.string,\n editButtonTooltip: PropTypes.string,\n editButtonDataCy: PropTypes.string,\n placeholder: PropTypes.string,\n dataCy: PropTypes.string,\n onChange: PropTypes.func,\n suffix: PropTypes.node,\n prefix: PropTypes.node,\n className: PropTypes.string,\n nakedInput: PropTypes.bool,\n size: PropTypes.oneOf(Object.values(SIZES)),\n type: PropTypes.string,\n maxLength: PropTypes.number,\n contentSize: PropTypes.number,\n unlimitedChars: PropTypes.bool,\n required: PropTypes.bool,\n});\n\nSendToFields.propTypes = {\n /**\n * Input props for sendTo input field.\n */\n emailInputProps: inputPropTypes,\n /**\n * Input props for CC input field.\n */\n ccInputProps: inputPropTypes,\n /**\n * Input props for BCC input field.\n */\n bccInputProps: inputPropTypes,\n /**\n * Flag to determine whether the 'FilePicker' button is displayed.\n */\n showUploadCsvButton: PropTypes.bool,\n /**\n * Flag to determine whether the 'Cc/Bcc' button is displayed.\n */\n showCcBccButton: PropTypes.bool,\n /**\n * To show or hide the CC field.\n */\n showCcField: PropTypes.bool,\n /**\n * To show or hide the BCC field.\n */\n showBccField: PropTypes.bool,\n /**\n * To show or hide the \"Send to\" field.\n */\n showSendToField: PropTypes.bool,\n};\n\nexport default SendToFields;\n"],"names":["CSV_FILE_SIZE_IN_KB","ONE_KILOBYTE_IN_BYTES","DOWNLOAD_SAMPLE_EMAIL_CSV_FILE","Requirements","withT","_ref","t","fileSize","_jsxs","Callout","className","style","children","_jsx","limit","Trans","components","strong","i18nKey","Button","href","icon","Download","iconPosition","label","memo","BulkUploadPane","_fileRejections$","isOpen","onClose","handleFileSubmit","_useDropzone","useDropzone","accept","maxFiles","maxSize","onDrop","files","getRootProps","getInputProps","isDragActive","fileRejections","errors","map","_ref2","message","code","Typography","_useTranslation","useTranslation","Pane","tabIndex","Header","weight","Body","_objectSpread","classNames","length","Upload","size","values","fileType","Footer","type","onClick","this","isValidEmail","email","string","isValidSync","createEmailOptions","emails","arguments","undefined","value","valid","parseCsvEmails","file","onSuccess","Papa","parse","header","skipEmptyLines","transformHeader","h","toLowerCase","replace","complete","results","_results$meta$fields","isEmailFieldPresent","meta","fields","includes","data","filter","prop","item","trim","Toastr","error","SendToFields","emailInputProps","ccInputProps","bccInputProps","_ref$showUploadCsvBut","showUploadCsvButton","_ref$showCcBccButton","showCcBccButton","_ref$showCcField","showCcField","_ref$showBccField","showBccField","_ref$showSendToField","showSendToField","_useState","useState","_useState2","_slicedToArray","isBulkUploadPaneOpen","setIsBulkUploadPaneOpen","sendToFieldRef","useRef","_useFormikContext","useFormikContext","_useFormikContext$val","showCopyEmails","existingSendToEmails","name","setFieldValue","handleCSVFile","_sendToFieldRef$curre","concat","_toConsumableArray","current","focus","handelCcBccButtonClick","e","stopPropagation","MultiEmailInput","ref","suffix","onKeyDown","event"],"mappings":"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","x_google_ignoreList":[3]}
|
|
1
|
+
{"version":3,"file":"SendToFields.js","sources":["../../src/components/SendToFields/constants.js","../../src/components/SendToFields/Requirements.jsx","../../src/components/SendToFields/BulkUploadPane.jsx","../../node_modules/papaparse/papaparse.js","../../src/components/SendToFields/utils.js","../../src/components/SendToFields/index.jsx"],"sourcesContent":["export const SIZES = { small: \"small\", medium: \"medium\", large: \"large\" };\nexport const CSV_FILE_SIZE_IN_KB = 32;\nexport const ONE_KILOBYTE_IN_BYTES = 1024;\nexport const DOWNLOAD_SAMPLE_EMAIL_CSV_FILE =\n \"https://d2v7kzglnr2dnh.cloudfront.net/others/sample-bulk-email.csv\";\n","import { memo } from \"react\";\n\nimport withT from \"neetocommons/react-utils/withT\";\nimport { Download } from \"neetoicons\";\nimport { Button, Callout } from \"neetoui\";\nimport { Trans } from \"react-i18next\";\n\nimport { DOWNLOAD_SAMPLE_EMAIL_CSV_FILE } from \"./constants\";\n\nconst Requirements = withT(({ t, fileSize }) => (\n <Callout className=\"flex flex-col items-center py-6\" style=\"info\">\n <ul className=\"flex list-outside list-disc flex-col gap-y-1 font-normal leading-normal\">\n {fileSize && (\n <li>\n {t(\"neetoMolecules.shareViaLink.requirements.fileTypeAndSize\", {\n limit: fileSize,\n })}\n </li>\n )}\n <li>\n <Trans\n components={{ strong: <strong className=\"font-semibold\" /> }}\n i18nKey=\"neetoMolecules.shareViaLink.requirements.shouldContainColumns\"\n />\n </li>\n </ul>\n <Button\n href={DOWNLOAD_SAMPLE_EMAIL_CSV_FILE}\n icon={Download}\n iconPosition=\"left\"\n label={t(\"neetoMolecules.shareViaLink.bulkUploadPane.downloadSampleCSV\")}\n style=\"link\"\n />\n </Callout>\n));\n\nexport default memo(Requirements);\n","import classNames from \"classnames\";\nimport { Upload } from \"neetoicons\";\nimport { Button, Typography, Pane } from \"neetoui\";\nimport { useDropzone } from \"react-dropzone\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport { ONE_KILOBYTE_IN_BYTES } from \"./constants\";\nimport Requirements from \"./Requirements\";\n\nconst BulkUploadPane = ({ isOpen, fileSize, onClose, handleFileSubmit }) => {\n const { getRootProps, getInputProps, isDragActive, fileRejections } =\n useDropzone({\n accept: { \"text/csv\": [] },\n maxFiles: 1,\n maxSize: fileSize * ONE_KILOBYTE_IN_BYTES,\n onDrop: files => files[0] && handleFileSubmit(files[0]),\n });\n\n const errors = fileRejections[0]?.errors.map(({ message, code }) => (\n <Typography\n className=\"neeto-ui-text-error-500 items\"\n data-testid=\"file-input-error-message\"\n key={code}\n style=\"body3\"\n >\n {message}\n </Typography>\n ));\n\n const { t } = useTranslation();\n\n return (\n <Pane {...{ isOpen, onClose }} data-testid=\"bulk-upload-pane\">\n <div tabIndex={0}>\n <Pane.Header>\n <Typography\n data-testid=\"bulk-upload-header\"\n style=\"h2\"\n weight=\"semibold\"\n >\n {t(\"neetoMolecules.shareViaLink.bulkUpload\")}\n </Typography>\n </Pane.Header>\n <Pane.Body>\n <div className=\"flex w-full flex-col gap-y-4\">\n <Requirements {...{ fileSize }} />\n <div\n {...getRootProps({\n className: classNames(\n \"flex flex-col p-2 border neeto-ui-border-primary-500 border-dashed neeto-ui-rounded-md transition duration-500 ease-in-out hover:neeto-ui-bg-gray-100 cursor-pointer items-center\",\n {\n \"neeto-ui-border-gray-100\": isDragActive,\n \"neeto-ui-border-error neeto-ui-bg-pastel-red hover:neeto-ui-bg-pastel-red\":\n fileRejections.length,\n }\n ),\n })}\n >\n <div className=\"flex flex-col items-center gap-y-3 p-4\">\n <Upload className=\"neeto-ui-text-primary-500\" size={32} />\n <input {...getInputProps()} data-testid=\"csv-upload-input\" />\n {isDragActive ? (\n <Typography style=\"body2\">\n {t(\n \"neetoMolecules.shareViaLink.bulkUploadPane.dropFileHere\"\n )}\n </Typography>\n ) : (\n <div className=\"flex flex-col items-center gap-y-1\">\n <div className=\"flex w-full items-center justify-center gap-x-1\">\n <Trans\n i18nKey=\"neetoMolecules.shareViaLink.bulkUploadPane.dragNDrop\"\n components={{\n Button: <Button style=\"link\" />,\n }}\n />\n </div>\n <Typography\n className=\"neeto-ui-text-gray-700\"\n style=\"body3\"\n >\n <Trans\n i18nKey=\"neetoMolecules.shareViaLink.bulkUploadPane.supportedFormat\"\n values={{ fileType: \"csv\" }}\n components={{\n code: (\n <code className=\"neeto-ui-typography neeto-ui-text-body3 neeto-ui-bg-white m-0 border-s-0 p-0\" />\n ),\n }}\n />{\" \"}\n {fileSize &&\n t(\n \"neetoMolecules.shareViaLink.bulkUploadPane.supportedSize\",\n { fileSize }\n )}\n </Typography>\n </div>\n )}\n </div>\n {errors}\n </div>\n </div>\n </Pane.Body>\n <Pane.Footer className=\"flex items-center gap-x-2\">\n <Button\n data-testid=\"bulk-upload-cancel-button\"\n label={t(\"neetoMolecules.common.actions.cancel\")}\n style=\"text\"\n type=\"reset\"\n onClick={onClose}\n />\n </Pane.Footer>\n </div>\n </Pane>\n );\n};\n\nexport default BulkUploadPane;\n","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n\n(function(root, factory)\n{\n\t/* globals define */\n\tif (typeof define === 'function' && define.amd)\n\t{\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t}\n\telse if (typeof module === 'object' && typeof exports !== 'undefined')\n\t{\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t}\n\telse\n\t{\n\t\t// Browser globals (root is window)\n\t\troot.Papa = factory();\n\t}\n\t// in strict mode we cannot access arguments.callee, so we need a named reference to\n\t// stringify the factory method for the blob worker\n\t// eslint-disable-next-line func-name\n}(this, function moduleFactory()\n{\n\t'use strict';\n\n\tvar global = (function() {\n\t\t// alternative method, similar to `Function('return this')()`\n\t\t// but without using `eval` (which is disabled when\n\t\t// using Content Security Policy).\n\n\t\tif (typeof self !== 'undefined') { return self; }\n\t\tif (typeof window !== 'undefined') { return window; }\n\t\tif (typeof global !== 'undefined') { return global; }\n\n\t\t// When running tests none of the above have been defined\n\t\treturn {};\n\t})();\n\n\n\tfunction getWorkerBlob() {\n\t\tvar URL = global.URL || global.webkitURL || null;\n\t\tvar code = moduleFactory.toString();\n\t\treturn Papa.BLOB_URL || (Papa.BLOB_URL = URL.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \", '(', code, ')();'], {type: 'text/javascript'})));\n\t}\n\n\tvar IS_WORKER = !global.document && !!global.postMessage,\n\t\tIS_PAPA_WORKER = global.IS_PAPA_WORKER || false;\n\n\tvar workers = {}, workerIdCounter = 0;\n\n\tvar Papa = {};\n\n\tPapa.parse = CsvToJson;\n\tPapa.unparse = JsonToCsv;\n\n\tPapa.RECORD_SEP = String.fromCharCode(30);\n\tPapa.UNIT_SEP = String.fromCharCode(31);\n\tPapa.BYTE_ORDER_MARK = '\\ufeff';\n\tPapa.BAD_DELIMITERS = ['\\r', '\\n', '\"', Papa.BYTE_ORDER_MARK];\n\tPapa.WORKERS_SUPPORTED = !IS_WORKER && !!global.Worker;\n\tPapa.NODE_STREAM_INPUT = 1;\n\n\t// Configurable chunk sizes for local and remote files, respectively\n\tPapa.LocalChunkSize = 1024 * 1024 * 10;\t// 10 MB\n\tPapa.RemoteChunkSize = 1024 * 1024 * 5;\t// 5 MB\n\tPapa.DefaultDelimiter = ',';\t\t\t// Used if not specified and detection fails\n\n\t// Exposed for testing and development only\n\tPapa.Parser = Parser;\n\tPapa.ParserHandle = ParserHandle;\n\tPapa.NetworkStreamer = NetworkStreamer;\n\tPapa.FileStreamer = FileStreamer;\n\tPapa.StringStreamer = StringStreamer;\n\tPapa.ReadableStreamStreamer = ReadableStreamStreamer;\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tPapa.DuplexStreamStreamer = DuplexStreamStreamer;\n\t}\n\n\tif (global.jQuery)\n\t{\n\t\tvar $ = global.jQuery;\n\t\t$.fn.parse = function(options)\n\t\t{\n\t\t\tvar config = options.config || {};\n\t\t\tvar queue = [];\n\n\t\t\tthis.each(function(idx)\n\t\t\t{\n\t\t\t\tvar supported = $(this).prop('tagName').toUpperCase() === 'INPUT'\n\t\t\t\t\t\t\t\t&& $(this).attr('type').toLowerCase() === 'file'\n\t\t\t\t\t\t\t\t&& global.FileReader;\n\n\t\t\t\tif (!supported || !this.files || this.files.length === 0)\n\t\t\t\t\treturn true;\t// continue to next input element\n\n\t\t\t\tfor (var i = 0; i < this.files.length; i++)\n\t\t\t\t{\n\t\t\t\t\tqueue.push({\n\t\t\t\t\t\tfile: this.files[i],\n\t\t\t\t\t\tinputElem: this,\n\t\t\t\t\t\tinstanceConfig: $.extend({}, config)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tparseNextFile();\t// begin parsing\n\t\t\treturn this;\t\t// maintains chainability\n\n\n\t\t\tfunction parseNextFile()\n\t\t\t{\n\t\t\t\tif (queue.length === 0)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(options.complete))\n\t\t\t\t\t\toptions.complete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar f = queue[0];\n\n\t\t\t\tif (isFunction(options.before))\n\t\t\t\t{\n\t\t\t\t\tvar returned = options.before(f.file, f.inputElem);\n\n\t\t\t\t\tif (typeof returned === 'object')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (returned.action === 'abort')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror('AbortError', f.file, f.inputElem, returned.reason);\n\t\t\t\t\t\t\treturn;\t// Aborts all queued files immediately\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (returned.action === 'skip')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (typeof returned.config === 'object')\n\t\t\t\t\t\t\tf.instanceConfig = $.extend(f.instanceConfig, returned.config);\n\t\t\t\t\t}\n\t\t\t\t\telse if (returned === 'skip')\n\t\t\t\t\t{\n\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Wrap up the user's complete callback, if any, so that ours also gets executed\n\t\t\t\tvar userCompleteFunc = f.instanceConfig.complete;\n\t\t\t\tf.instanceConfig.complete = function(results)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(userCompleteFunc))\n\t\t\t\t\t\tuserCompleteFunc(results, f.file, f.inputElem);\n\t\t\t\t\tfileComplete();\n\t\t\t\t};\n\n\t\t\t\tPapa.parse(f.file, f.instanceConfig);\n\t\t\t}\n\n\t\t\tfunction error(name, file, elem, reason)\n\t\t\t{\n\t\t\t\tif (isFunction(options.error))\n\t\t\t\t\toptions.error({name: name}, file, elem, reason);\n\t\t\t}\n\n\t\t\tfunction fileComplete()\n\t\t\t{\n\t\t\t\tqueue.splice(0, 1);\n\t\t\t\tparseNextFile();\n\t\t\t}\n\t\t};\n\t}\n\n\n\tif (IS_PAPA_WORKER)\n\t{\n\t\tglobal.onmessage = workerThreadReceivedMessage;\n\t}\n\n\n\n\n\tfunction CsvToJson(_input, _config)\n\t{\n\t\t_config = _config || {};\n\t\tvar dynamicTyping = _config.dynamicTyping || false;\n\t\tif (isFunction(dynamicTyping)) {\n\t\t\t_config.dynamicTypingFunction = dynamicTyping;\n\t\t\t// Will be filled on first row call\n\t\t\tdynamicTyping = {};\n\t\t}\n\t\t_config.dynamicTyping = dynamicTyping;\n\n\t\t_config.transform = isFunction(_config.transform) ? _config.transform : false;\n\n\t\tif (_config.worker && Papa.WORKERS_SUPPORTED)\n\t\t{\n\t\t\tvar w = newWorker();\n\n\t\t\tw.userStep = _config.step;\n\t\t\tw.userChunk = _config.chunk;\n\t\t\tw.userComplete = _config.complete;\n\t\t\tw.userError = _config.error;\n\n\t\t\t_config.step = isFunction(_config.step);\n\t\t\t_config.chunk = isFunction(_config.chunk);\n\t\t\t_config.complete = isFunction(_config.complete);\n\t\t\t_config.error = isFunction(_config.error);\n\t\t\tdelete _config.worker;\t// prevent infinite loop\n\n\t\t\tw.postMessage({\n\t\t\t\tinput: _input,\n\t\t\t\tconfig: _config,\n\t\t\t\tworkerId: w.id\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar streamer = null;\n\t\tif (_input === Papa.NODE_STREAM_INPUT && typeof PAPA_BROWSER_CONTEXT === 'undefined')\n\t\t{\n\t\t\t// create a node Duplex stream for use\n\t\t\t// with .pipe\n\t\t\tstreamer = new DuplexStreamStreamer(_config);\n\t\t\treturn streamer.getStream();\n\t\t}\n\t\telse if (typeof _input === 'string')\n\t\t{\n\t\t\t_input = stripBom(_input);\n\t\t\tif (_config.download)\n\t\t\t\tstreamer = new NetworkStreamer(_config);\n\t\t\telse\n\t\t\t\tstreamer = new StringStreamer(_config);\n\t\t}\n\t\telse if (_input.readable === true && isFunction(_input.read) && isFunction(_input.on))\n\t\t{\n\t\t\tstreamer = new ReadableStreamStreamer(_config);\n\t\t}\n\t\telse if ((global.File && _input instanceof File) || _input instanceof Object)\t// ...Safari. (see issue #106)\n\t\t\tstreamer = new FileStreamer(_config);\n\n\t\treturn streamer.stream(_input);\n\n\t\t// Strip character from UTF-8 BOM encoded files that cause issue parsing the file\n\t\tfunction stripBom(string) {\n\t\t\tif (string.charCodeAt(0) === 0xfeff) {\n\t\t\t\treturn string.slice(1);\n\t\t\t}\n\t\t\treturn string;\n\t\t}\n\t}\n\n\n\n\n\n\n\tfunction JsonToCsv(_input, _config)\n\t{\n\t\t// Default configuration\n\n\t\t/** whether to surround every datum with quotes */\n\t\tvar _quotes = false;\n\n\t\t/** whether to write headers */\n\t\tvar _writeHeader = true;\n\n\t\t/** delimiting character(s) */\n\t\tvar _delimiter = ',';\n\n\t\t/** newline character(s) */\n\t\tvar _newline = '\\r\\n';\n\n\t\t/** quote character */\n\t\tvar _quoteChar = '\"';\n\n\t\t/** escaped quote character, either \"\" or <config.escapeChar>\" */\n\t\tvar _escapedQuote = _quoteChar + _quoteChar;\n\n\t\t/** whether to skip empty lines */\n\t\tvar _skipEmptyLines = false;\n\n\t\t/** the columns (keys) we expect when we unparse objects */\n\t\tvar _columns = null;\n\n\t\t/** whether to prevent outputting cells that can be parsed as formulae by spreadsheet software (Excel and LibreOffice) */\n\t\tvar _escapeFormulae = false;\n\n\t\tunpackConfig();\n\n\t\tvar quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g');\n\n\t\tif (typeof _input === 'string')\n\t\t\t_input = JSON.parse(_input);\n\n\t\tif (Array.isArray(_input))\n\t\t{\n\t\t\tif (!_input.length || Array.isArray(_input[0]))\n\t\t\t\treturn serialize(null, _input, _skipEmptyLines);\n\t\t\telse if (typeof _input[0] === 'object')\n\t\t\t\treturn serialize(_columns || Object.keys(_input[0]), _input, _skipEmptyLines);\n\t\t}\n\t\telse if (typeof _input === 'object')\n\t\t{\n\t\t\tif (typeof _input.data === 'string')\n\t\t\t\t_input.data = JSON.parse(_input.data);\n\n\t\t\tif (Array.isArray(_input.data))\n\t\t\t{\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields = _input.meta && _input.meta.fields || _columns;\n\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields = Array.isArray(_input.data[0])\n\t\t\t\t\t\t? _input.fields\n\t\t\t\t\t\t: typeof _input.data[0] === 'object'\n\t\t\t\t\t\t\t? Object.keys(_input.data[0])\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tif (!(Array.isArray(_input.data[0])) && typeof _input.data[0] !== 'object')\n\t\t\t\t\t_input.data = [_input.data];\t// handles input like [1,2,3] or ['asdf']\n\t\t\t}\n\n\t\t\treturn serialize(_input.fields || [], _input.data || [], _skipEmptyLines);\n\t\t}\n\n\t\t// Default (any valid paths should return before this)\n\t\tthrow new Error('Unable to serialize unrecognized input');\n\n\n\t\tfunction unpackConfig()\n\t\t{\n\t\t\tif (typeof _config !== 'object')\n\t\t\t\treturn;\n\n\t\t\tif (typeof _config.delimiter === 'string'\n && !Papa.BAD_DELIMITERS.filter(function(value) { return _config.delimiter.indexOf(value) !== -1; }).length)\n\t\t\t{\n\t\t\t\t_delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tif (typeof _config.quotes === 'boolean'\n\t\t\t\t|| typeof _config.quotes === 'function'\n\t\t\t\t|| Array.isArray(_config.quotes))\n\t\t\t\t_quotes = _config.quotes;\n\n\t\t\tif (typeof _config.skipEmptyLines === 'boolean'\n\t\t\t\t|| typeof _config.skipEmptyLines === 'string')\n\t\t\t\t_skipEmptyLines = _config.skipEmptyLines;\n\n\t\t\tif (typeof _config.newline === 'string')\n\t\t\t\t_newline = _config.newline;\n\n\t\t\tif (typeof _config.quoteChar === 'string')\n\t\t\t\t_quoteChar = _config.quoteChar;\n\n\t\t\tif (typeof _config.header === 'boolean')\n\t\t\t\t_writeHeader = _config.header;\n\n\t\t\tif (Array.isArray(_config.columns)) {\n\n\t\t\t\tif (_config.columns.length === 0) throw new Error('Option columns is empty');\n\n\t\t\t\t_columns = _config.columns;\n\t\t\t}\n\n\t\t\tif (_config.escapeChar !== undefined) {\n\t\t\t\t_escapedQuote = _config.escapeChar + _quoteChar;\n\t\t\t}\n\n\t\t\tif (_config.escapeFormulae instanceof RegExp) {\n\t\t\t\t_escapeFormulae = _config.escapeFormulae;\n\t\t\t} else if (typeof _config.escapeFormulae === 'boolean' && _config.escapeFormulae) {\n\t\t\t\t_escapeFormulae = /^[=+\\-@\\t\\r].*$/;\n\t\t\t}\n\t\t}\n\n\t\t/** The double for loop that iterates the data and writes out a CSV string including header row */\n\t\tfunction serialize(fields, data, skipEmptyLines)\n\t\t{\n\t\t\tvar csv = '';\n\n\t\t\tif (typeof fields === 'string')\n\t\t\t\tfields = JSON.parse(fields);\n\t\t\tif (typeof data === 'string')\n\t\t\t\tdata = JSON.parse(data);\n\n\t\t\tvar hasHeader = Array.isArray(fields) && fields.length > 0;\n\t\t\tvar dataKeyedByField = !(Array.isArray(data[0]));\n\n\t\t\t// If there a header row, write it first\n\t\t\tif (hasHeader && _writeHeader)\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < fields.length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\tcsv += safe(fields[i], i);\n\t\t\t\t}\n\t\t\t\tif (data.length > 0)\n\t\t\t\t\tcsv += _newline;\n\t\t\t}\n\n\t\t\t// Then write out the data\n\t\t\tfor (var row = 0; row < data.length; row++)\n\t\t\t{\n\t\t\t\tvar maxCol = hasHeader ? fields.length : data[row].length;\n\n\t\t\t\tvar emptyLine = false;\n\t\t\t\tvar nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0;\n\t\t\t\tif (skipEmptyLines && !hasHeader)\n\t\t\t\t{\n\t\t\t\t\temptyLine = skipEmptyLines === 'greedy' ? data[row].join('').trim() === '' : data[row].length === 1 && data[row][0].length === 0;\n\t\t\t\t}\n\t\t\t\tif (skipEmptyLines === 'greedy' && hasHeader) {\n\t\t\t\t\tvar line = [];\n\t\t\t\t\tfor (var c = 0; c < maxCol; c++) {\n\t\t\t\t\t\tvar cx = dataKeyedByField ? fields[c] : c;\n\t\t\t\t\t\tline.push(data[row][cx]);\n\t\t\t\t\t}\n\t\t\t\t\temptyLine = line.join('').trim() === '';\n\t\t\t\t}\n\t\t\t\tif (!emptyLine)\n\t\t\t\t{\n\t\t\t\t\tfor (var col = 0; col < maxCol; col++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (col > 0 && !nullLine)\n\t\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\t\tvar colIdx = hasHeader && dataKeyedByField ? fields[col] : col;\n\t\t\t\t\t\tcsv += safe(data[row][colIdx], col);\n\t\t\t\t\t}\n\t\t\t\t\tif (row < data.length - 1 && (!skipEmptyLines || (maxCol > 0 && !nullLine)))\n\t\t\t\t\t{\n\t\t\t\t\t\tcsv += _newline;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn csv;\n\t\t}\n\n\t\t/** Encloses a value around quotes if needed (makes a value safe for CSV insertion) */\n\t\tfunction safe(str, col)\n\t\t{\n\t\t\tif (typeof str === 'undefined' || str === null)\n\t\t\t\treturn '';\n\n\t\t\tif (str.constructor === Date)\n\t\t\t\treturn JSON.stringify(str).slice(1, 25);\n\n\t\t\tvar needsQuotes = false;\n\n\t\t\tif (_escapeFormulae && typeof str === \"string\" && _escapeFormulae.test(str)) {\n\t\t\t\tstr = \"'\" + str;\n\t\t\t\tneedsQuotes = true;\n\t\t\t}\n\n\t\t\tvar escapedQuoteStr = str.toString().replace(quoteCharRegex, _escapedQuote);\n\n\t\t\tneedsQuotes = needsQuotes\n\t\t\t\t\t\t\t|| _quotes === true\n\t\t\t\t\t\t\t|| (typeof _quotes === 'function' && _quotes(str, col))\n\t\t\t\t\t\t\t|| (Array.isArray(_quotes) && _quotes[col])\n\t\t\t\t\t\t\t|| hasAny(escapedQuoteStr, Papa.BAD_DELIMITERS)\n\t\t\t\t\t\t\t|| escapedQuoteStr.indexOf(_delimiter) > -1\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(0) === ' '\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(escapedQuoteStr.length - 1) === ' ';\n\n\t\t\treturn needsQuotes ? _quoteChar + escapedQuoteStr + _quoteChar : escapedQuoteStr;\n\t\t}\n\n\t\tfunction hasAny(str, substrings)\n\t\t{\n\t\t\tfor (var i = 0; i < substrings.length; i++)\n\t\t\t\tif (str.indexOf(substrings[i]) > -1)\n\t\t\t\t\treturn true;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\t/** ChunkStreamer is the base prototype for various streamer implementations. */\n\tfunction ChunkStreamer(config)\n\t{\n\t\tthis._handle = null;\n\t\tthis._finished = false;\n\t\tthis._completed = false;\n\t\tthis._halted = false;\n\t\tthis._input = null;\n\t\tthis._baseIndex = 0;\n\t\tthis._partialLine = '';\n\t\tthis._rowCount = 0;\n\t\tthis._start = 0;\n\t\tthis._nextChunk = null;\n\t\tthis.isFirstChunk = true;\n\t\tthis._completeResults = {\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\t\treplaceConfig.call(this, config);\n\n\t\tthis.parseChunk = function(chunk, isFakeChunk)\n\t\t{\n\t\t\t// First chunk pre-processing\n\t\t\tconst skipFirstNLines = parseInt(this._config.skipFirstNLines) || 0;\n\t\t\tif (this.isFirstChunk && skipFirstNLines > 0) {\n\t\t\t\tlet _newline = this._config.newline;\n\t\t\t\tif (!_newline) {\n\t\t\t\t\tconst quoteChar = this._config.quoteChar || '\"';\n\t\t\t\t\t_newline = this._handle.guessLineEndings(chunk, quoteChar);\n\t\t\t\t}\n\t\t\t\tconst splitChunk = chunk.split(_newline);\n\t\t\t\tchunk = [...splitChunk.slice(skipFirstNLines)].join(_newline);\n\t\t\t}\n\t\t\tif (this.isFirstChunk && isFunction(this._config.beforeFirstChunk))\n\t\t\t{\n\t\t\t\tvar modifiedChunk = this._config.beforeFirstChunk(chunk);\n\t\t\t\tif (modifiedChunk !== undefined)\n\t\t\t\t\tchunk = modifiedChunk;\n\t\t\t}\n\t\t\tthis.isFirstChunk = false;\n\t\t\tthis._halted = false;\n\n\t\t\t// Rejoin the line we likely just split in two by chunking the file\n\t\t\tvar aggregate = this._partialLine + chunk;\n\t\t\tthis._partialLine = '';\n\t\t\tvar results = this._handle.parse(aggregate, this._baseIndex, !this._finished);\n\n\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\tthis._halted = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lastIndex = results.meta.cursor;\n\n\t\t\tif (!this._finished)\n\t\t\t{\n\t\t\t\tthis._partialLine = aggregate.substring(lastIndex - this._baseIndex);\n\t\t\t\tthis._baseIndex = lastIndex;\n\t\t\t}\n\n\t\t\tif (results && results.data)\n\t\t\t\tthis._rowCount += results.data.length;\n\n\t\t\tvar finishedIncludingPreview = this._finished || (this._config.preview && this._rowCount >= this._config.preview);\n\n\t\t\tif (IS_PAPA_WORKER)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tresults: results,\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tfinished: finishedIncludingPreview\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (isFunction(this._config.chunk) && !isFakeChunk)\n\t\t\t{\n\t\t\t\tthis._config.chunk(results, this._handle);\n\t\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\t\tthis._halted = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresults = undefined;\n\t\t\t\tthis._completeResults = undefined;\n\t\t\t}\n\n\t\t\tif (!this._config.step && !this._config.chunk) {\n\t\t\t\tthis._completeResults.data = this._completeResults.data.concat(results.data);\n\t\t\t\tthis._completeResults.errors = this._completeResults.errors.concat(results.errors);\n\t\t\t\tthis._completeResults.meta = results.meta;\n\t\t\t}\n\n\t\t\tif (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) {\n\t\t\t\tthis._config.complete(this._completeResults, this._input);\n\t\t\t\tthis._completed = true;\n\t\t\t}\n\n\t\t\tif (!finishedIncludingPreview && (!results || !results.meta.paused))\n\t\t\t\tthis._nextChunk();\n\n\t\t\treturn results;\n\t\t};\n\n\t\tthis._sendError = function(error)\n\t\t{\n\t\t\tif (isFunction(this._config.error))\n\t\t\t\tthis._config.error(error);\n\t\t\telse if (IS_PAPA_WORKER && this._config.error)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\terror: error,\n\t\t\t\t\tfinished: false\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tfunction replaceConfig(config)\n\t\t{\n\t\t\t// Deep-copy the config so we can edit it\n\t\t\tvar configCopy = copy(config);\n\t\t\tconfigCopy.chunkSize = parseInt(configCopy.chunkSize);\t// parseInt VERY important so we don't concatenate strings!\n\t\t\tif (!config.step && !config.chunk)\n\t\t\t\tconfigCopy.chunkSize = null; // disable Range header if not streaming; bad values break IIS - see issue #196\n\t\t\tthis._handle = new ParserHandle(configCopy);\n\t\t\tthis._handle.streamer = this;\n\t\t\tthis._config = configCopy;\t// persist the copy to the caller\n\t\t}\n\t}\n\n\n\tfunction NetworkStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.RemoteChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar xhr;\n\n\t\tif (IS_WORKER)\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t\tthis._chunkLoaded();\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t};\n\t\t}\n\n\t\tthis.stream = function(url)\n\t\t{\n\t\t\tthis._input = url;\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tif (this._finished)\n\t\t\t{\n\t\t\t\tthis._chunkLoaded();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\txhr = new XMLHttpRequest();\n\n\t\t\tif (this._config.withCredentials)\n\t\t\t{\n\t\t\t\txhr.withCredentials = this._config.withCredentials;\n\t\t\t}\n\n\t\t\tif (!IS_WORKER)\n\t\t\t{\n\t\t\t\txhr.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\txhr.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\n\t\t\txhr.open(this._config.downloadRequestBody ? 'POST' : 'GET', this._input, !IS_WORKER);\n\t\t\t// Headers can only be set when once the request state is OPENED\n\t\t\tif (this._config.downloadRequestHeaders)\n\t\t\t{\n\t\t\t\tvar headers = this._config.downloadRequestHeaders;\n\n\t\t\t\tfor (var headerName in headers)\n\t\t\t\t{\n\t\t\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = this._start + this._config.chunkSize - 1;\t// minus one because byte range is inclusive\n\t\t\t\txhr.setRequestHeader('Range', 'bytes=' + this._start + '-' + end);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\txhr.send(this._config.downloadRequestBody);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis._chunkError(err.message);\n\t\t\t}\n\n\t\t\tif (IS_WORKER && xhr.status === 0)\n\t\t\t\tthis._chunkError();\n\t\t};\n\n\t\tthis._chunkLoaded = function()\n\t\t{\n\t\t\tif (xhr.readyState !== 4)\n\t\t\t\treturn;\n\n\t\t\tif (xhr.status < 200 || xhr.status >= 400)\n\t\t\t{\n\t\t\t\tthis._chunkError();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Use chunckSize as it may be a diference on reponse lentgh due to characters with more than 1 byte\n\t\t\tthis._start += this._config.chunkSize ? this._config.chunkSize : xhr.responseText.length;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= getFileSize(xhr);\n\t\t\tthis.parseChunk(xhr.responseText);\n\t\t};\n\n\t\tthis._chunkError = function(errorMessage)\n\t\t{\n\t\t\tvar errorText = xhr.statusText || errorMessage;\n\t\t\tthis._sendError(new Error(errorText));\n\t\t};\n\n\t\tfunction getFileSize(xhr)\n\t\t{\n\t\t\tvar contentRange = xhr.getResponseHeader('Content-Range');\n\t\t\tif (contentRange === null) { // no content range, then finish!\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn parseInt(contentRange.substring(contentRange.lastIndexOf('/') + 1));\n\t\t}\n\t}\n\tNetworkStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tNetworkStreamer.prototype.constructor = NetworkStreamer;\n\n\n\tfunction FileStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.LocalChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar reader, slice;\n\n\t\t// FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862\n\t\t// But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76\n\t\tvar usingAsyncReader = typeof FileReader !== 'undefined';\t// Safari doesn't consider it a function - see issue #105\n\n\t\tthis.stream = function(file)\n\t\t{\n\t\t\tthis._input = file;\n\t\t\tslice = file.slice || file.webkitSlice || file.mozSlice;\n\n\t\t\tif (usingAsyncReader)\n\t\t\t{\n\t\t\t\treader = new FileReader();\t\t// Preferred method of reading files, even in workers\n\t\t\t\treader.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\treader.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\t\t\telse\n\t\t\t\treader = new FileReaderSync();\t// Hack for running in a web worker in Firefox\n\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (!this._finished && (!this._config.preview || this._rowCount < this._config.preview))\n\t\t\t\tthis._readChunk();\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tvar input = this._input;\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = Math.min(this._start + this._config.chunkSize, this._input.size);\n\t\t\t\tinput = slice.call(input, this._start, end);\n\t\t\t}\n\t\t\tvar txt = reader.readAsText(input, this._config.encoding);\n\t\t\tif (!usingAsyncReader)\n\t\t\t\tthis._chunkLoaded({ target: { result: txt } });\t// mimic the async signature\n\t\t};\n\n\t\tthis._chunkLoaded = function(event)\n\t\t{\n\t\t\t// Very important to increment start each time before handling results\n\t\t\tthis._start += this._config.chunkSize;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= this._input.size;\n\t\t\tthis.parseChunk(event.target.result);\n\t\t};\n\n\t\tthis._chunkError = function()\n\t\t{\n\t\t\tthis._sendError(reader.error);\n\t\t};\n\n\t}\n\tFileStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tFileStreamer.prototype.constructor = FileStreamer;\n\n\n\tfunction StringStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar remaining;\n\t\tthis.stream = function(s)\n\t\t{\n\t\t\tremaining = s;\n\t\t\treturn this._nextChunk();\n\t\t};\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (this._finished) return;\n\t\t\tvar size = this._config.chunkSize;\n\t\t\tvar chunk;\n\t\t\tif(size) {\n\t\t\t\tchunk = remaining.substring(0, size);\n\t\t\t\tremaining = remaining.substring(size);\n\t\t\t} else {\n\t\t\t\tchunk = remaining;\n\t\t\t\tremaining = '';\n\t\t\t}\n\t\t\tthis._finished = !remaining;\n\t\t\treturn this.parseChunk(chunk);\n\t\t};\n\t}\n\tStringStreamer.prototype = Object.create(StringStreamer.prototype);\n\tStringStreamer.prototype.constructor = StringStreamer;\n\n\n\tfunction ReadableStreamStreamer(config)\n\t{\n\t\tconfig = config || {};\n\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar queue = [];\n\t\tvar parseOnData = true;\n\t\tvar streamHasEnded = false;\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.pause.apply(this, arguments);\n\t\t\tthis._input.pause();\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.resume.apply(this, arguments);\n\t\t\tthis._input.resume();\n\t\t};\n\n\t\tthis.stream = function(stream)\n\t\t{\n\t\t\tthis._input = stream;\n\n\t\t\tthis._input.on('data', this._streamData);\n\t\t\tthis._input.on('end', this._streamEnd);\n\t\t\tthis._input.on('error', this._streamError);\n\t\t};\n\n\t\tthis._checkIsFinished = function()\n\t\t{\n\t\t\tif (streamHasEnded && queue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tthis._checkIsFinished();\n\t\t\tif (queue.length)\n\t\t\t{\n\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tparseOnData = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._streamData = bindFunction(function(chunk)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tqueue.push(typeof chunk === 'string' ? chunk : chunk.toString(this._config.encoding));\n\n\t\t\t\tif (parseOnData)\n\t\t\t\t{\n\t\t\t\t\tparseOnData = false;\n\t\t\t\t\tthis._checkIsFinished();\n\t\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tthis._streamError(error);\n\t\t\t}\n\t\t}, this);\n\n\t\tthis._streamError = bindFunction(function(error)\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tthis._sendError(error);\n\t\t}, this);\n\n\t\tthis._streamEnd = bindFunction(function()\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tstreamHasEnded = true;\n\t\t\tthis._streamData('');\n\t\t}, this);\n\n\t\tthis._streamCleanUp = bindFunction(function()\n\t\t{\n\t\t\tthis._input.removeListener('data', this._streamData);\n\t\t\tthis._input.removeListener('end', this._streamEnd);\n\t\t\tthis._input.removeListener('error', this._streamError);\n\t\t}, this);\n\t}\n\tReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer;\n\n\n\tfunction DuplexStreamStreamer(_config) {\n\t\tvar Duplex = require('stream').Duplex;\n\t\tvar config = copy(_config);\n\t\tvar parseOnWrite = true;\n\t\tvar writeStreamHasFinished = false;\n\t\tvar parseCallbackQueue = [];\n\t\tvar stream = null;\n\n\t\tthis._onCsvData = function(results)\n\t\t{\n\t\t\tvar data = results.data;\n\t\t\tif (!stream.push(data) && !this._handle.paused()) {\n\t\t\t\t// the writeable consumer buffer has filled up\n\t\t\t\t// so we need to pause until more items\n\t\t\t\t// can be processed\n\t\t\t\tthis._handle.pause();\n\t\t\t}\n\t\t};\n\n\t\tthis._onCsvComplete = function()\n\t\t{\n\t\t\t// node will finish the read stream when\n\t\t\t// null is pushed\n\t\t\tstream.push(null);\n\t\t};\n\n\t\tconfig.step = bindFunction(this._onCsvData, this);\n\t\tconfig.complete = bindFunction(this._onCsvComplete, this);\n\t\tChunkStreamer.call(this, config);\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (writeStreamHasFinished && parseCallbackQueue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t\tif (parseCallbackQueue.length) {\n\t\t\t\tparseCallbackQueue.shift()();\n\t\t\t} else {\n\t\t\t\tparseOnWrite = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._addToParseQueue = function(chunk, callback)\n\t\t{\n\t\t\t// add to queue so that we can indicate\n\t\t\t// completion via callback\n\t\t\t// node will automatically pause the incoming stream\n\t\t\t// when too many items have been added without their\n\t\t\t// callback being invoked\n\t\t\tparseCallbackQueue.push(bindFunction(function() {\n\t\t\t\tthis.parseChunk(typeof chunk === 'string' ? chunk : chunk.toString(config.encoding));\n\t\t\t\tif (isFunction(callback)) {\n\t\t\t\t\treturn callback();\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tif (parseOnWrite) {\n\t\t\t\tparseOnWrite = false;\n\t\t\t\tthis._nextChunk();\n\t\t\t}\n\t\t};\n\n\t\tthis._onRead = function()\n\t\t{\n\t\t\tif (this._handle.paused()) {\n\t\t\t\t// the writeable consumer can handle more data\n\t\t\t\t// so resume the chunk parsing\n\t\t\t\tthis._handle.resume();\n\t\t\t}\n\t\t};\n\n\t\tthis._onWrite = function(chunk, encoding, callback)\n\t\t{\n\t\t\tthis._addToParseQueue(chunk, callback);\n\t\t};\n\n\t\tthis._onWriteComplete = function()\n\t\t{\n\t\t\twriteStreamHasFinished = true;\n\t\t\t// have to write empty string\n\t\t\t// so parser knows its done\n\t\t\tthis._addToParseQueue('');\n\t\t};\n\n\t\tthis.getStream = function()\n\t\t{\n\t\t\treturn stream;\n\t\t};\n\t\tstream = new Duplex({\n\t\t\treadableObjectMode: true,\n\t\t\tdecodeStrings: false,\n\t\t\tread: bindFunction(this._onRead, this),\n\t\t\twrite: bindFunction(this._onWrite, this)\n\t\t});\n\t\tstream.once('finish', bindFunction(this._onWriteComplete, this));\n\t}\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tDuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\t\tDuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer;\n\t}\n\n\n\t// Use one ParserHandle per entire CSV file or string\n\tfunction ParserHandle(_config)\n\t{\n\t\t// One goal is to minimize the use of regular expressions...\n\t\tvar MAX_FLOAT = Math.pow(2, 53);\n\t\tvar MIN_FLOAT = -MAX_FLOAT;\n\t\tvar FLOAT = /^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/;\n\t\tvar ISO_DATE = /^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/;\n\t\tvar self = this;\n\t\tvar _stepCounter = 0;\t// Number of times step was called (number of rows parsed)\n\t\tvar _rowCounter = 0;\t// Number of rows that have been parsed so far\n\t\tvar _input;\t\t\t\t// The input being parsed\n\t\tvar _parser;\t\t\t// The core parser being used\n\t\tvar _paused = false;\t// Whether we are paused or not\n\t\tvar _aborted = false;\t// Whether the parser has aborted or not\n\t\tvar _delimiterError;\t// Temporary state between delimiter detection and processing results\n\t\tvar _fields = [];\t\t// Fields are from the header row of the input, if there is one\n\t\tvar _results = {\t\t// The last results returned from the parser\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\n\t\tif (isFunction(_config.step))\n\t\t{\n\t\t\tvar userStep = _config.step;\n\t\t\t_config.step = function(results)\n\t\t\t{\n\t\t\t\t_results = results;\n\n\t\t\t\tif (needsHeaderRow())\n\t\t\t\t\tprocessResults();\n\t\t\t\telse\t// only call user's step function after header row\n\t\t\t\t{\n\t\t\t\t\tprocessResults();\n\n\t\t\t\t\t// It's possbile that this line was empty and there's no row here after all\n\t\t\t\t\tif (_results.data.length === 0)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t_stepCounter += results.data.length;\n\t\t\t\t\tif (_config.preview && _stepCounter > _config.preview)\n\t\t\t\t\t\t_parser.abort();\n\t\t\t\t\telse {\n\t\t\t\t\t\t_results.data = _results.data[0];\n\t\t\t\t\t\tuserStep(_results, self);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Parses input. Most users won't need, and shouldn't mess with, the baseIndex\n\t\t * and ignoreLastRow parameters. They are used by streamers (wrapper functions)\n\t\t * when an input comes in multiple chunks, like from a file.\n\t\t */\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\tvar quoteChar = _config.quoteChar || '\"';\n\t\t\tif (!_config.newline)\n\t\t\t\t_config.newline = this.guessLineEndings(input, quoteChar);\n\n\t\t\t_delimiterError = false;\n\t\t\tif (!_config.delimiter)\n\t\t\t{\n\t\t\t\tvar delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess);\n\t\t\t\tif (delimGuess.successful)\n\t\t\t\t\t_config.delimiter = delimGuess.bestDelimiter;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_delimiterError = true;\t// add error after parsing (otherwise it would be overwritten)\n\t\t\t\t\t_config.delimiter = Papa.DefaultDelimiter;\n\t\t\t\t}\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\t\t\telse if(isFunction(_config.delimiter))\n\t\t\t{\n\t\t\t\t_config.delimiter = _config.delimiter(input);\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tvar parserConfig = copy(_config);\n\t\t\tif (_config.preview && _config.header)\n\t\t\t\tparserConfig.preview++;\t// to compensate for header row\n\n\t\t\t_input = input;\n\t\t\t_parser = new Parser(parserConfig);\n\t\t\t_results = _parser.parse(_input, baseIndex, ignoreLastRow);\n\t\t\tprocessResults();\n\t\t\treturn _paused ? { meta: { paused: true } } : (_results || { meta: { paused: false } });\n\t\t};\n\n\t\tthis.paused = function()\n\t\t{\n\t\t\treturn _paused;\n\t\t};\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\t_paused = true;\n\t\t\t_parser.abort();\n\n\t\t\t// If it is streaming via \"chunking\", the reader will start appending correctly already so no need to substring,\n\t\t\t// otherwise we can get duplicate content within a row\n\t\t\t_input = isFunction(_config.chunk) ? \"\" : _input.substring(_parser.getCharIndex());\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tif(self.streamer._halted) {\n\t\t\t\t_paused = false;\n\t\t\t\tself.streamer.parseChunk(_input, true);\n\t\t\t} else {\n\t\t\t\t// Bugfix: #636 In case the processing hasn't halted yet\n\t\t\t\t// wait for it to halt in order to resume\n\t\t\t\tsetTimeout(self.resume, 3);\n\t\t\t}\n\t\t};\n\n\t\tthis.aborted = function()\n\t\t{\n\t\t\treturn _aborted;\n\t\t};\n\n\t\tthis.abort = function()\n\t\t{\n\t\t\t_aborted = true;\n\t\t\t_parser.abort();\n\t\t\t_results.meta.aborted = true;\n\t\t\tif (isFunction(_config.complete))\n\t\t\t\t_config.complete(_results);\n\t\t\t_input = '';\n\t\t};\n\n\t\tthis.guessLineEndings = function(input, quoteChar)\n\t\t{\n\t\t\tinput = input.substring(0, 1024 * 1024);\t// max length 1 MB\n\t\t\t// Replace all the text inside quotes\n\t\t\tvar re = new RegExp(escapeRegExp(quoteChar) + '([^]*?)' + escapeRegExp(quoteChar), 'gm');\n\t\t\tinput = input.replace(re, '');\n\n\t\t\tvar r = input.split('\\r');\n\n\t\t\tvar n = input.split('\\n');\n\n\t\t\tvar nAppearsFirst = (n.length > 1 && n[0].length < r[0].length);\n\n\t\t\tif (r.length === 1 || nAppearsFirst)\n\t\t\t\treturn '\\n';\n\n\t\t\tvar numWithN = 0;\n\t\t\tfor (var i = 0; i < r.length; i++)\n\t\t\t{\n\t\t\t\tif (r[i][0] === '\\n')\n\t\t\t\t\tnumWithN++;\n\t\t\t}\n\n\t\t\treturn numWithN >= r.length / 2 ? '\\r\\n' : '\\r';\n\t\t};\n\n\t\tfunction testEmptyLine(s) {\n\t\t\treturn _config.skipEmptyLines === 'greedy' ? s.join('').trim() === '' : s.length === 1 && s[0].length === 0;\n\t\t}\n\n\t\tfunction testFloat(s) {\n\t\t\tif (FLOAT.test(s)) {\n\t\t\t\tvar floatValue = parseFloat(s);\n\t\t\t\tif (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction processResults()\n\t\t{\n\t\t\tif (_results && _delimiterError)\n\t\t\t{\n\t\t\t\taddError('Delimiter', 'UndetectableDelimiter', 'Unable to auto-detect delimiting character; defaulted to \\'' + Papa.DefaultDelimiter + '\\'');\n\t\t\t\t_delimiterError = false;\n\t\t\t}\n\n\t\t\tif (_config.skipEmptyLines)\n\t\t\t{\n\t\t\t\t_results.data = _results.data.filter(function(d) {\n\t\t\t\t\treturn !testEmptyLine(d);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (needsHeaderRow())\n\t\t\t\tfillHeaderFields();\n\n\t\t\treturn applyHeaderAndDynamicTypingAndTransformation();\n\t\t}\n\n\t\tfunction needsHeaderRow()\n\t\t{\n\t\t\treturn _config.header && _fields.length === 0;\n\t\t}\n\n\t\tfunction fillHeaderFields()\n\t\t{\n\t\t\tif (!_results)\n\t\t\t\treturn;\n\n\t\t\tfunction addHeader(header, i)\n\t\t\t{\n\t\t\t\tif (isFunction(_config.transformHeader))\n\t\t\t\t\theader = _config.transformHeader(header, i);\n\n\t\t\t\t_fields.push(header);\n\t\t\t}\n\n\t\t\tif (Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\tfor (var i = 0; needsHeaderRow() && i < _results.data.length; i++)\n\t\t\t\t\t_results.data[i].forEach(addHeader);\n\n\t\t\t\t_results.data.splice(0, 1);\n\t\t\t}\n\t\t\t// if _results.data[0] is not an array, we are in a step where _results.data is the row.\n\t\t\telse\n\t\t\t\t_results.data.forEach(addHeader);\n\t\t}\n\n\t\tfunction shouldApplyDynamicTyping(field) {\n\t\t\t// Cache function values to avoid calling it for each row\n\t\t\tif (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) {\n\t\t\t\t_config.dynamicTyping[field] = _config.dynamicTypingFunction(field);\n\t\t\t}\n\t\t\treturn (_config.dynamicTyping[field] || _config.dynamicTyping) === true;\n\t\t}\n\n\t\tfunction parseDynamic(field, value)\n\t\t{\n\t\t\tif (shouldApplyDynamicTyping(field))\n\t\t\t{\n\t\t\t\tif (value === 'true' || value === 'TRUE')\n\t\t\t\t\treturn true;\n\t\t\t\telse if (value === 'false' || value === 'FALSE')\n\t\t\t\t\treturn false;\n\t\t\t\telse if (testFloat(value))\n\t\t\t\t\treturn parseFloat(value);\n\t\t\t\telse if (ISO_DATE.test(value))\n\t\t\t\t\treturn new Date(value);\n\t\t\t\telse\n\t\t\t\t\treturn (value === '' ? null : value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tfunction applyHeaderAndDynamicTypingAndTransformation()\n\t\t{\n\t\t\tif (!_results || (!_config.header && !_config.dynamicTyping && !_config.transform))\n\t\t\t\treturn _results;\n\n\t\t\tfunction processRow(rowSource, i)\n\t\t\t{\n\t\t\t\tvar row = _config.header ? {} : [];\n\n\t\t\t\tvar j;\n\t\t\t\tfor (j = 0; j < rowSource.length; j++)\n\t\t\t\t{\n\t\t\t\t\tvar field = j;\n\t\t\t\t\tvar value = rowSource[j];\n\n\t\t\t\t\tif (_config.header)\n\t\t\t\t\t\tfield = j >= _fields.length ? '__parsed_extra' : _fields[j];\n\n\t\t\t\t\tif (_config.transform)\n\t\t\t\t\t\tvalue = _config.transform(value,field);\n\n\t\t\t\t\tvalue = parseDynamic(field, value);\n\n\t\t\t\t\tif (field === '__parsed_extra')\n\t\t\t\t\t{\n\t\t\t\t\t\trow[field] = row[field] || [];\n\t\t\t\t\t\trow[field].push(value);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trow[field] = value;\n\t\t\t\t}\n\n\n\t\t\t\tif (_config.header)\n\t\t\t\t{\n\t\t\t\t\tif (j > _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t\telse if (j < _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t}\n\n\t\t\t\treturn row;\n\t\t\t}\n\n\t\t\tvar incrementBy = 1;\n\t\t\tif (!_results.data.length || Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\t_results.data = _results.data.map(processRow);\n\t\t\t\tincrementBy = _results.data.length;\n\t\t\t}\n\t\t\telse\n\t\t\t\t_results.data = processRow(_results.data, 0);\n\n\n\t\t\tif (_config.header && _results.meta)\n\t\t\t\t_results.meta.fields = _fields;\n\n\t\t\t_rowCounter += incrementBy;\n\t\t\treturn _results;\n\t\t}\n\n\t\tfunction guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) {\n\t\t\tvar bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount;\n\n\t\t\tdelimitersToGuess = delimitersToGuess || [',', '\\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP];\n\n\t\t\tfor (var i = 0; i < delimitersToGuess.length; i++) {\n\t\t\t\tvar delim = delimitersToGuess[i];\n\t\t\t\tvar delta = 0, avgFieldCount = 0, emptyLinesCount = 0;\n\t\t\t\tfieldCountPrevRow = undefined;\n\n\t\t\t\tvar preview = new Parser({\n\t\t\t\t\tcomments: comments,\n\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\tnewline: newline,\n\t\t\t\t\tpreview: 10\n\t\t\t\t}).parse(input);\n\n\t\t\t\tfor (var j = 0; j < preview.data.length; j++) {\n\t\t\t\t\tif (skipEmptyLines && testEmptyLine(preview.data[j])) {\n\t\t\t\t\t\temptyLinesCount++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar fieldCount = preview.data[j].length;\n\t\t\t\t\tavgFieldCount += fieldCount;\n\n\t\t\t\t\tif (typeof fieldCountPrevRow === 'undefined') {\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (fieldCount > 0) {\n\t\t\t\t\t\tdelta += Math.abs(fieldCount - fieldCountPrevRow);\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (preview.data.length > 0)\n\t\t\t\t\tavgFieldCount /= (preview.data.length - emptyLinesCount);\n\n\t\t\t\tif ((typeof bestDelta === 'undefined' || delta <= bestDelta)\n\t\t\t\t\t&& (typeof maxFieldCount === 'undefined' || avgFieldCount > maxFieldCount) && avgFieldCount > 1.99) {\n\t\t\t\t\tbestDelta = delta;\n\t\t\t\t\tbestDelim = delim;\n\t\t\t\t\tmaxFieldCount = avgFieldCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_config.delimiter = bestDelim;\n\n\t\t\treturn {\n\t\t\t\tsuccessful: !!bestDelim,\n\t\t\t\tbestDelimiter: bestDelim\n\t\t\t};\n\t\t}\n\n\t\tfunction addError(type, code, msg, row)\n\t\t{\n\t\t\tvar error = {\n\t\t\t\ttype: type,\n\t\t\t\tcode: code,\n\t\t\t\tmessage: msg\n\t\t\t};\n\t\t\tif(row !== undefined) {\n\t\t\t\terror.row = row;\n\t\t\t}\n\t\t\t_results.errors.push(error);\n\t\t}\n\t}\n\n\t/** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */\n\tfunction escapeRegExp(string)\n\t{\n\t\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\t}\n\n\t/** The core parser implements speedy and correct CSV parsing */\n\tfunction Parser(config)\n\t{\n\t\t// Unpack the config object\n\t\tconfig = config || {};\n\t\tvar delim = config.delimiter;\n\t\tvar newline = config.newline;\n\t\tvar comments = config.comments;\n\t\tvar step = config.step;\n\t\tvar preview = config.preview;\n\t\tvar fastMode = config.fastMode;\n\t\tvar quoteChar;\n\t\tvar renamedHeaders = null;\n\t\tvar headerParsed = false;\n\n\t\tif (config.quoteChar === undefined || config.quoteChar === null) {\n\t\t\tquoteChar = '\"';\n\t\t} else {\n\t\t\tquoteChar = config.quoteChar;\n\t\t}\n\t\tvar escapeChar = quoteChar;\n\t\tif (config.escapeChar !== undefined) {\n\t\t\tescapeChar = config.escapeChar;\n\t\t}\n\n\t\t// Delimiter must be valid\n\t\tif (typeof delim !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(delim) > -1)\n\t\t\tdelim = ',';\n\n\t\t// Comment character must be valid\n\t\tif (comments === delim)\n\t\t\tthrow new Error('Comment character same as delimiter');\n\t\telse if (comments === true)\n\t\t\tcomments = '#';\n\t\telse if (typeof comments !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(comments) > -1)\n\t\t\tcomments = false;\n\n\t\t// Newline must be valid: \\r, \\n, or \\r\\n\n\t\tif (newline !== '\\n' && newline !== '\\r' && newline !== '\\r\\n')\n\t\t\tnewline = '\\n';\n\n\t\t// We're gonna need these at the Parser scope\n\t\tvar cursor = 0;\n\t\tvar aborted = false;\n\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\t// For some reason, in Chrome, this speeds things up (!?)\n\t\t\tif (typeof input !== 'string')\n\t\t\t\tthrow new Error('Input must be a string');\n\n\t\t\t// We don't need to compute some of these every time parse() is called,\n\t\t\t// but having them in a more local scope seems to perform better\n\t\t\tvar inputLen = input.length,\n\t\t\t\tdelimLen = delim.length,\n\t\t\t\tnewlineLen = newline.length,\n\t\t\t\tcommentsLen = comments.length;\n\t\t\tvar stepIsFunction = isFunction(step);\n\n\t\t\t// Establish starting state\n\t\t\tcursor = 0;\n\t\t\tvar data = [], errors = [], row = [], lastCursor = 0;\n\n\t\t\tif (!input)\n\t\t\t\treturn returnable();\n\n\t\t\tif (fastMode || (fastMode !== false && input.indexOf(quoteChar) === -1))\n\t\t\t{\n\t\t\t\tvar rows = input.split(newline);\n\t\t\t\tfor (var i = 0; i < rows.length; i++)\n\t\t\t\t{\n\t\t\t\t\trow = rows[i];\n\t\t\t\t\tcursor += row.length;\n\n\t\t\t\t\tif (i !== rows.length - 1)\n\t\t\t\t\t\tcursor += newline.length;\n\t\t\t\t\telse if (ignoreLastRow)\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tif (comments && row.substring(0, commentsLen) === comments)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\tif (preview && i >= preview)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = data.slice(0, preview);\n\t\t\t\t\t\treturn returnable(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\tvar nextDelim = input.indexOf(delim, cursor);\n\t\t\tvar nextNewline = input.indexOf(newline, cursor);\n\t\t\tvar quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g');\n\t\t\tvar quoteSearch = input.indexOf(quoteChar, cursor);\n\n\t\t\t// Parser loop\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\t// Field has opening quote\n\t\t\t\tif (input[cursor] === quoteChar)\n\t\t\t\t{\n\t\t\t\t\t// Start our search for the closing quote where the cursor is\n\t\t\t\t\tquoteSearch = cursor;\n\n\t\t\t\t\t// Skip the opening quote\n\t\t\t\t\tcursor++;\n\n\t\t\t\t\tfor (;;)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Find closing quote\n\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, quoteSearch + 1);\n\n\t\t\t\t\t\t//No other quotes are found - no other delimiters\n\t\t\t\t\t\tif (quoteSearch === -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!ignoreLastRow) {\n\t\t\t\t\t\t\t\t// No closing quote... what a pity\n\t\t\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\t\t\tcode: 'MissingQuotes',\n\t\t\t\t\t\t\t\t\tmessage: 'Quoted field unterminated',\n\t\t\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn finish();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Closing quote at EOF\n\t\t\t\t\t\tif (quoteSearch === inputLen - 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar);\n\t\t\t\t\t\t\treturn finish(value);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this quote is escaped, it's part of the data; skip it\n\t\t\t\t\t\t// If the quote character is the escape character, then check if the next character is the escape character\n\t\t\t\t\t\tif (quoteChar === escapeChar && input[quoteSearch + 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the quote character is not the escape character, then check if the previous character was the escape character\n\t\t\t\t\t\tif (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(nextDelim !== -1 && nextDelim < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(nextNewline !== -1 && nextNewline < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Check up to nextDelim or nextNewline, whichever is closest\n\t\t\t\t\t\tvar checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline);\n\t\t\t\t\t\tvar spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo);\n\n\t\t\t\t\t\t// Closing quote followed by delimiter or 'unnecessary spaces + delimiter'\n\t\t\t\t\t\tif (input.substr(quoteSearch + 1 + spacesBetweenQuoteAndDelimiter, delimLen) === delim)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tcursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen;\n\n\t\t\t\t\t\t\t// If char after following delimiter is not quoteChar, we find next quote char position\n\t\t\t\t\t\t\tif (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen] !== quoteChar)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline);\n\n\t\t\t\t\t\t// Closing quote followed by newline or 'unnecessary spaces + newLine'\n\t\t\t\t\t\tif (input.substring(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen) === newline)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tsaveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen);\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\t// because we may have skipped the nextDelim in the quoted field\n\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\t// we search for first quote in next line\n\n\t\t\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t// Checks for valid closing quotes are complete (escaped quotes or quote followed by EOF/delimiter/newline) -- assume these quotes are part of an invalid text string\n\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\tcode: 'InvalidQuotes',\n\t\t\t\t\t\t\tmessage: 'Trailing quote on quoted field is malformed',\n\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Comment found at start of new line\n\t\t\t\tif (comments && row.length === 0 && input.substring(cursor, cursor + commentsLen) === comments)\n\t\t\t\t{\n\t\t\t\t\tif (nextNewline === -1)\t// Comment ends at EOF\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tcursor = nextNewline + newlineLen;\n\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Next delimiter comes before next newline, so we've reached end of field\n\t\t\t\tif (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1))\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextDelim));\n\t\t\t\t\tcursor = nextDelim + delimLen;\n\t\t\t\t\t// we look for next delimiter char\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// End of row\n\t\t\t\tif (nextNewline !== -1)\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextNewline));\n\t\t\t\t\tsaveRow(nextNewline + newlineLen);\n\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn finish();\n\n\n\t\t\tfunction pushRow(row)\n\t\t\t{\n\t\t\t\tdata.push(row);\n\t\t\t\tlastCursor = cursor;\n\t\t\t}\n\n\t\t\t/**\n * checks if there are extra spaces after closing quote and given index without any text\n * if Yes, returns the number of spaces\n */\n\t\t\tfunction extraSpaces(index) {\n\t\t\t\tvar spaceLength = 0;\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tvar textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index);\n\t\t\t\t\tif (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === '') {\n\t\t\t\t\t\tspaceLength = textBetweenClosingQuoteAndIndex.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spaceLength;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the remaining input from cursor to the end into\n\t\t\t * row, saves the row, calls step, and returns the results.\n\t\t\t */\n\t\t\tfunction finish(value)\n\t\t\t{\n\t\t\t\tif (ignoreLastRow)\n\t\t\t\t\treturn returnable();\n\t\t\t\tif (typeof value === 'undefined')\n\t\t\t\t\tvalue = input.substring(cursor);\n\t\t\t\trow.push(value);\n\t\t\t\tcursor = inputLen;\t// important in case parsing is paused\n\t\t\t\tpushRow(row);\n\t\t\t\tif (stepIsFunction)\n\t\t\t\t\tdoStep();\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the current row to the results. It sets the cursor\n\t\t\t * to newCursor and finds the nextNewline. The caller should\n\t\t\t * take care to execute user's step function and check for\n\t\t\t * preview and end parsing if necessary.\n\t\t\t */\n\t\t\tfunction saveRow(newCursor)\n\t\t\t{\n\t\t\t\tcursor = newCursor;\n\t\t\t\tpushRow(row);\n\t\t\t\trow = [];\n\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t}\n\n\t\t\t/** Returns an object with the results, errors, and meta. */\n\t\t\tfunction returnable(stopped)\n\t\t\t{\n\t\t\t\tif (config.header && !baseIndex && data.length && !headerParsed)\n\t\t\t\t{\n\t\t\t\t\tconst result = data[0];\n\t\t\t\t\tconst headerCount = Object.create(null); // To track the count of each base header\n\t\t\t\t\tconst usedHeaders = new Set(result); // To track used headers and avoid duplicates\n\t\t\t\t\tlet duplicateHeaders = false;\n\n\t\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\t\tlet header = result[i];\n\t\t\t\t\t\tif (isFunction(config.transformHeader))\n\t\t\t\t\t\t\theader = config.transformHeader(header, i);\n\n\t\t\t\t\t\tif (!headerCount[header]) {\n\t\t\t\t\t\t\theaderCount[header] = 1;\n\t\t\t\t\t\t\tresult[i] = header;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet newHeader;\n\t\t\t\t\t\t\tlet suffixCount = headerCount[header];\n\n\t\t\t\t\t\t\t// Find a unique new header\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tnewHeader = `${header}_${suffixCount}`;\n\t\t\t\t\t\t\t\tsuffixCount++;\n\t\t\t\t\t\t\t} while (usedHeaders.has(newHeader));\n\n\t\t\t\t\t\t\tusedHeaders.add(newHeader); // Mark this new Header as used\n\t\t\t\t\t\t\tresult[i] = newHeader;\n\t\t\t\t\t\t\theaderCount[header]++;\n\t\t\t\t\t\t\tduplicateHeaders = true;\n\t\t\t\t\t\t\tif (renamedHeaders === null) {\n\t\t\t\t\t\t\t\trenamedHeaders = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenamedHeaders[newHeader] = header;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tusedHeaders.add(header); // Ensure the original header is marked as used\n\t\t\t\t\t}\n\t\t\t\t\tif (duplicateHeaders) {\n\t\t\t\t\t\tconsole.warn('Duplicate headers found and renamed.');\n\t\t\t\t\t}\n\t\t\t\t\theaderParsed = true;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdata: data,\n\t\t\t\t\terrors: errors,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\t\tlinebreak: newline,\n\t\t\t\t\t\taborted: aborted,\n\t\t\t\t\t\ttruncated: !!stopped,\n\t\t\t\t\t\tcursor: lastCursor + (baseIndex || 0),\n\t\t\t\t\t\trenamedHeaders: renamedHeaders\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/** Executes the user's step function and resets data & errors. */\n\t\t\tfunction doStep()\n\t\t\t{\n\t\t\t\tstep(returnable());\n\t\t\t\tdata = [];\n\t\t\t\terrors = [];\n\t\t\t}\n\t\t};\n\n\t\t/** Sets the abort flag */\n\t\tthis.abort = function()\n\t\t{\n\t\t\taborted = true;\n\t\t};\n\n\t\t/** Gets the cursor position */\n\t\tthis.getCharIndex = function()\n\t\t{\n\t\t\treturn cursor;\n\t\t};\n\t}\n\n\n\tfunction newWorker()\n\t{\n\t\tif (!Papa.WORKERS_SUPPORTED)\n\t\t\treturn false;\n\n\t\tvar workerUrl = getWorkerBlob();\n\t\tvar w = new global.Worker(workerUrl);\n\t\tw.onmessage = mainThreadReceivedMessage;\n\t\tw.id = workerIdCounter++;\n\t\tworkers[w.id] = w;\n\t\treturn w;\n\t}\n\n\t/** Callback when main thread receives a message */\n\tfunction mainThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\t\tvar worker = workers[msg.workerId];\n\t\tvar aborted = false;\n\n\t\tif (msg.error)\n\t\t\tworker.userError(msg.error, msg.file);\n\t\telse if (msg.results && msg.results.data)\n\t\t{\n\t\t\tvar abort = function() {\n\t\t\t\taborted = true;\n\t\t\t\tcompleteWorker(msg.workerId, { data: [], errors: [], meta: { aborted: true } });\n\t\t\t};\n\n\t\t\tvar handle = {\n\t\t\t\tabort: abort,\n\t\t\t\tpause: notImplemented,\n\t\t\t\tresume: notImplemented\n\t\t\t};\n\n\t\t\tif (isFunction(worker.userStep))\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < msg.results.data.length; i++)\n\t\t\t\t{\n\t\t\t\t\tworker.userStep({\n\t\t\t\t\t\tdata: msg.results.data[i],\n\t\t\t\t\t\terrors: msg.results.errors,\n\t\t\t\t\t\tmeta: msg.results.meta\n\t\t\t\t\t}, handle);\n\t\t\t\t\tif (aborted)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdelete msg.results;\t// free memory ASAP\n\t\t\t}\n\t\t\telse if (isFunction(worker.userChunk))\n\t\t\t{\n\t\t\t\tworker.userChunk(msg.results, handle, msg.file);\n\t\t\t\tdelete msg.results;\n\t\t\t}\n\t\t}\n\n\t\tif (msg.finished && !aborted)\n\t\t\tcompleteWorker(msg.workerId, msg.results);\n\t}\n\n\tfunction completeWorker(workerId, results) {\n\t\tvar worker = workers[workerId];\n\t\tif (isFunction(worker.userComplete))\n\t\t\tworker.userComplete(results);\n\t\tworker.terminate();\n\t\tdelete workers[workerId];\n\t}\n\n\tfunction notImplemented() {\n\t\tthrow new Error('Not implemented.');\n\t}\n\n\t/** Callback when worker thread receives a message */\n\tfunction workerThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\n\t\tif (typeof Papa.WORKER_ID === 'undefined' && msg)\n\t\t\tPapa.WORKER_ID = msg.workerId;\n\n\t\tif (typeof msg.input === 'string')\n\t\t{\n\t\t\tglobal.postMessage({\n\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\tresults: Papa.parse(msg.input, msg.config),\n\t\t\t\tfinished: true\n\t\t\t});\n\t\t}\n\t\telse if ((global.File && msg.input instanceof File) || msg.input instanceof Object)\t// thank you, Safari (see issue #106)\n\t\t{\n\t\t\tvar results = Papa.parse(msg.input, msg.config);\n\t\t\tif (results)\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tresults: results,\n\t\t\t\t\tfinished: true\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Makes a deep copy of an array or object (mostly) */\n\tfunction copy(obj)\n\t{\n\t\tif (typeof obj !== 'object' || obj === null)\n\t\t\treturn obj;\n\t\tvar cpy = Array.isArray(obj) ? [] : {};\n\t\tfor (var key in obj)\n\t\t\tcpy[key] = copy(obj[key]);\n\t\treturn cpy;\n\t}\n\n\tfunction bindFunction(f, self)\n\t{\n\t\treturn function() { f.apply(self, arguments); };\n\t}\n\tfunction isFunction(func)\n\t{\n\t\treturn typeof func === 'function';\n\t}\n\n\treturn Papa;\n}));\n","import { t } from \"i18next\";\nimport { Toastr } from \"neetoui\";\nimport Papa from \"papaparse\";\nimport { prop } from \"ramda\";\nimport { string } from \"yup\";\n\nconst isValidEmail = email => string().email().isValidSync(email);\n\nexport const createEmailOptions = (emails = []) =>\n emails.map(email => ({\n label: email,\n value: email,\n valid: isValidEmail(email),\n }));\n\nexport const parseCsvEmails = (file, onSuccess) => {\n Papa.parse(file, {\n header: true,\n skipEmptyLines: true,\n transformHeader: h => h.toLowerCase().replace(/\\W/g, \"\"),\n complete: results => {\n const isEmailFieldPresent = results.meta.fields?.includes(\"email\");\n if (isEmailFieldPresent) {\n const emails = results.data\n .filter(prop(\"email\"))\n .map(item => item.email.trim());\n onSuccess(createEmailOptions(emails));\n } else {\n Toastr.error(t(\"neetoMolecules.sendToFields.errors.invalidCsv\"));\n }\n },\n });\n};\n","import { useRef, useState } from \"react\";\n\nimport { useFormikContext } from \"formik\";\nimport { Upload } from \"neetoicons\";\nimport { Button, Toastr } from \"neetoui\";\nimport { MultiEmailInput } from \"neetoui/formik\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\n\nimport BulkUploadPane from \"./BulkUploadPane\";\nimport { CSV_FILE_SIZE_IN_KB, SIZES } from \"./constants\";\nimport { parseCsvEmails } from \"./utils\";\n\nconst SendToFields = ({\n emailInputProps,\n ccInputProps,\n bccInputProps,\n showUploadCsvButton = false,\n showCcBccButton = false,\n showCcField = false,\n showBccField = false,\n showSendToField = true,\n}) => {\n const [isBulkUploadPaneOpen, setIsBulkUploadPaneOpen] = useState(false);\n const sendToFieldRef = useRef();\n const {\n values: {\n showCopyEmails,\n [emailInputProps.name || \"sendTo\"]: existingSendToEmails,\n },\n setFieldValue,\n } = useFormikContext();\n const { t } = useTranslation();\n\n const handleCSVFile = file => {\n try {\n const onSuccess = values =>\n setFieldValue(emailInputProps.name || \"sendTo\", [\n ...existingSendToEmails,\n ...values,\n ]);\n\n parseCsvEmails(file, onSuccess);\n setIsBulkUploadPaneOpen(false);\n sendToFieldRef.current?.focus();\n } catch (error) {\n Toastr.error(error);\n }\n };\n\n const handelCcBccButtonClick = e => {\n e.stopPropagation();\n setFieldValue(\"showCopyEmails\", !showCopyEmails);\n };\n\n return (\n <div\n className=\"relative w-full flex-col gap-2\"\n data-testid=\"send-to-text-field\"\n >\n {showUploadCsvButton && (\n <Button\n className=\"absolute end-1 top-0\"\n data-testid=\"bulk-upload-button\"\n icon={Upload}\n label={t(\"neetoMolecules.shareViaLink.bulkUpload\")}\n size=\"small\"\n style=\"link\"\n onClick={() => setIsBulkUploadPaneOpen(true)}\n />\n )}\n {showSendToField && (\n <div className=\"neeto-ui-border-gray-200 w-full border-b pb-1\">\n <MultiEmailInput\n name=\"sendTo\"\n ref={sendToFieldRef}\n {...emailInputProps}\n suffix={\n showCcBccButton && (\n <Button\n data-testid=\"cc-bcc-button\"\n label={t(\"neetoMolecules.emailForm.labels.ccBcc\")}\n size=\"small\"\n style=\"link\"\n onClick={handelCcBccButtonClick}\n onKeyDown={event => event.stopPropagation()}\n />\n )\n }\n />\n </div>\n )}\n {(showCopyEmails || showCcField || showBccField) && (\n <div className=\"mt-5 flex w-full flex-col gap-5\">\n {(showCopyEmails || showCcField) && (\n <div className=\"neeto-ui-border-gray-200 w-full border-b pb-1\">\n <MultiEmailInput name=\"sendToBcc\" {...ccInputProps} />\n </div>\n )}\n {(showCopyEmails || showBccField) && (\n <div className=\"neeto-ui-border-gray-200 w-full border-b pb-1\">\n <MultiEmailInput name=\"sendToCc\" {...bccInputProps} />\n </div>\n )}\n </div>\n )}\n <BulkUploadPane\n fileSize={CSV_FILE_SIZE_IN_KB}\n handleFileSubmit={handleCSVFile}\n isOpen={isBulkUploadPaneOpen}\n onClose={() => setIsBulkUploadPaneOpen(false)}\n />\n </div>\n );\n};\n\nconst inputPropTypes = PropTypes.shape({\n name: PropTypes.string,\n display: PropTypes.node,\n label: PropTypes.string,\n editButtonTooltip: PropTypes.string,\n editButtonDataTestid: PropTypes.string,\n placeholder: PropTypes.string,\n dataTestid: PropTypes.string,\n onChange: PropTypes.func,\n suffix: PropTypes.node,\n prefix: PropTypes.node,\n className: PropTypes.string,\n nakedInput: PropTypes.bool,\n size: PropTypes.oneOf(Object.values(SIZES)),\n type: PropTypes.string,\n maxLength: PropTypes.number,\n contentSize: PropTypes.number,\n unlimitedChars: PropTypes.bool,\n required: PropTypes.bool,\n});\n\nSendToFields.propTypes = {\n /**\n * Input props for sendTo input field.\n */\n emailInputProps: inputPropTypes,\n /**\n * Input props for CC input field.\n */\n ccInputProps: inputPropTypes,\n /**\n * Input props for BCC input field.\n */\n bccInputProps: inputPropTypes,\n /**\n * Flag to determine whether the 'FilePicker' button is displayed.\n */\n showUploadCsvButton: PropTypes.bool,\n /**\n * Flag to determine whether the 'Cc/Bcc' button is displayed.\n */\n showCcBccButton: PropTypes.bool,\n /**\n * To show or hide the CC field.\n */\n showCcField: PropTypes.bool,\n /**\n * To show or hide the BCC field.\n */\n showBccField: PropTypes.bool,\n /**\n * To show or hide the \"Send to\" field.\n */\n showSendToField: PropTypes.bool,\n};\n\nexport default SendToFields;\n"],"names":["CSV_FILE_SIZE_IN_KB","ONE_KILOBYTE_IN_BYTES","DOWNLOAD_SAMPLE_EMAIL_CSV_FILE","Requirements","withT","_ref","t","fileSize","_jsxs","Callout","className","style","children","_jsx","limit","Trans","components","strong","i18nKey","Button","href","icon","Download","iconPosition","label","memo","BulkUploadPane","_fileRejections$","isOpen","onClose","handleFileSubmit","_useDropzone","useDropzone","accept","maxFiles","maxSize","onDrop","files","getRootProps","getInputProps","isDragActive","fileRejections","errors","map","_ref2","message","code","Typography","_useTranslation","useTranslation","Pane","tabIndex","Header","weight","Body","_objectSpread","classNames","length","Upload","size","values","fileType","Footer","type","onClick","this","isValidEmail","email","string","isValidSync","createEmailOptions","emails","arguments","undefined","value","valid","parseCsvEmails","file","onSuccess","Papa","parse","header","skipEmptyLines","transformHeader","h","toLowerCase","replace","complete","results","_results$meta$fields","isEmailFieldPresent","meta","fields","includes","data","filter","prop","item","trim","Toastr","error","SendToFields","emailInputProps","ccInputProps","bccInputProps","_ref$showUploadCsvBut","showUploadCsvButton","_ref$showCcBccButton","showCcBccButton","_ref$showCcField","showCcField","_ref$showBccField","showBccField","_ref$showSendToField","showSendToField","_useState","useState","_useState2","_slicedToArray","isBulkUploadPaneOpen","setIsBulkUploadPaneOpen","sendToFieldRef","useRef","_useFormikContext","useFormikContext","_useFormikContext$val","showCopyEmails","existingSendToEmails","name","setFieldValue","handleCSVFile","_sendToFieldRef$curre","concat","_toConsumableArray","current","focus","handelCcBccButtonClick","e","stopPropagation","MultiEmailInput","ref","suffix","onKeyDown","event"],"mappings":"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","x_google_ignoreList":[3]}
|