@deephaven/console 0.15.1-beta.0 → 0.15.1-beta.4

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.
Files changed (166) hide show
  1. package/dist/Console.d.ts +129 -121
  2. package/dist/Console.d.ts.map +1 -1
  3. package/dist/Console.js +98 -99
  4. package/dist/Console.js.map +1 -1
  5. package/dist/ConsoleInput.d.ts +47 -43
  6. package/dist/ConsoleInput.d.ts.map +1 -1
  7. package/dist/ConsoleInput.js +111 -73
  8. package/dist/ConsoleInput.js.map +1 -1
  9. package/dist/ConsoleMenu.d.ts +24 -22
  10. package/dist/ConsoleMenu.d.ts.map +1 -1
  11. package/dist/ConsoleMenu.js +7 -12
  12. package/dist/ConsoleMenu.js.map +1 -1
  13. package/dist/ConsolePropTypes.d.ts +2 -2
  14. package/dist/ConsolePropTypes.d.ts.map +1 -1
  15. package/dist/ConsolePropTypes.js.map +1 -1
  16. package/dist/ConsoleStatusBar.d.ts +26 -29
  17. package/dist/ConsoleStatusBar.d.ts.map +1 -1
  18. package/dist/ConsoleStatusBar.js +11 -12
  19. package/dist/ConsoleStatusBar.js.map +1 -1
  20. package/dist/StoragePropTypes.d.ts +2 -2
  21. package/dist/StoragePropTypes.d.ts.map +1 -1
  22. package/dist/StoragePropTypes.js.map +1 -1
  23. package/dist/command-history/CommandHistory.d.ts +52 -77
  24. package/dist/command-history/CommandHistory.d.ts.map +1 -1
  25. package/dist/command-history/CommandHistory.js +12 -14
  26. package/dist/command-history/CommandHistory.js.map +1 -1
  27. package/dist/command-history/CommandHistoryActions.d.ts +11 -19
  28. package/dist/command-history/CommandHistoryActions.d.ts.map +1 -1
  29. package/dist/command-history/CommandHistoryActions.js +4 -19
  30. package/dist/command-history/CommandHistoryActions.js.map +1 -1
  31. package/dist/command-history/CommandHistoryItem.d.ts +15 -21
  32. package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
  33. package/dist/command-history/CommandHistoryItem.js +1 -10
  34. package/dist/command-history/CommandHistoryItem.js.map +1 -1
  35. package/dist/command-history/CommandHistoryItemTooltip.d.ts +34 -31
  36. package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
  37. package/dist/command-history/CommandHistoryItemTooltip.js +28 -36
  38. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  39. package/dist/command-history/CommandHistoryTypes.d.ts +19 -0
  40. package/dist/command-history/CommandHistoryTypes.d.ts.map +1 -0
  41. package/dist/command-history/CommandHistoryTypes.js +2 -0
  42. package/dist/command-history/CommandHistoryTypes.js.map +1 -0
  43. package/dist/command-history/index.d.ts +5 -5
  44. package/dist/command-history/index.d.ts.map +1 -1
  45. package/dist/command-history/index.js.map +1 -1
  46. package/dist/common/Code.d.ts +10 -11
  47. package/dist/common/Code.d.ts.map +1 -1
  48. package/dist/common/Code.js +5 -5
  49. package/dist/common/Code.js.map +1 -1
  50. package/dist/common/ConsoleUtils.d.ts +20 -8
  51. package/dist/common/ConsoleUtils.d.ts.map +1 -1
  52. package/dist/common/ConsoleUtils.js +34 -10
  53. package/dist/common/ConsoleUtils.js.map +1 -1
  54. package/dist/console-history/ConsoleHistory.d.ts +19 -18
  55. package/dist/console-history/ConsoleHistory.d.ts.map +1 -1
  56. package/dist/console-history/ConsoleHistory.js +5 -9
  57. package/dist/console-history/ConsoleHistory.js.map +1 -1
  58. package/dist/console-history/ConsoleHistoryItem.d.ts +21 -44
  59. package/dist/console-history/ConsoleHistoryItem.d.ts.map +1 -1
  60. package/dist/console-history/ConsoleHistoryItem.js +12 -28
  61. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  62. package/dist/console-history/ConsoleHistoryItemResult.d.ts +13 -9
  63. package/dist/console-history/ConsoleHistoryItemResult.d.ts.map +1 -1
  64. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  65. package/dist/console-history/ConsoleHistoryResultErrorMessage.d.ts +25 -21
  66. package/dist/console-history/ConsoleHistoryResultErrorMessage.d.ts.map +1 -1
  67. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +15 -9
  68. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  69. package/dist/console-history/ConsoleHistoryResultInProgress.d.ts +21 -17
  70. package/dist/console-history/ConsoleHistoryResultInProgress.d.ts.map +1 -1
  71. package/dist/console-history/ConsoleHistoryResultInProgress.js +12 -10
  72. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  73. package/dist/console-history/ConsoleHistoryTypes.d.ts +19 -0
  74. package/dist/console-history/ConsoleHistoryTypes.d.ts.map +1 -0
  75. package/dist/console-history/ConsoleHistoryTypes.js +2 -0
  76. package/dist/console-history/ConsoleHistoryTypes.js.map +1 -0
  77. package/dist/console-history/index.d.ts +5 -5
  78. package/dist/console-history/index.d.ts.map +1 -1
  79. package/dist/console-history/index.js.map +1 -1
  80. package/dist/csv/CsvFormats.d.ts +13 -12
  81. package/dist/csv/CsvFormats.d.ts.map +1 -1
  82. package/dist/csv/CsvFormats.js +8 -8
  83. package/dist/csv/CsvFormats.js.map +1 -1
  84. package/dist/csv/CsvInputBar.d.ts +46 -38
  85. package/dist/csv/CsvInputBar.d.ts.map +1 -1
  86. package/dist/csv/CsvInputBar.js +15 -23
  87. package/dist/csv/CsvInputBar.js.map +1 -1
  88. package/dist/csv/CsvOverlay.d.ts +40 -40
  89. package/dist/csv/CsvOverlay.d.ts.map +1 -1
  90. package/dist/csv/CsvOverlay.js +38 -29
  91. package/dist/csv/CsvOverlay.js.map +1 -1
  92. package/dist/csv/CsvParser.d.ts +44 -46
  93. package/dist/csv/CsvParser.d.ts.map +1 -1
  94. package/dist/csv/CsvParser.js +53 -8
  95. package/dist/csv/CsvParser.js.map +1 -1
  96. package/dist/csv/CsvTypeParser.d.ts +32 -27
  97. package/dist/csv/CsvTypeParser.d.ts.map +1 -1
  98. package/dist/csv/CsvTypeParser.js +42 -8
  99. package/dist/csv/CsvTypeParser.js.map +1 -1
  100. package/dist/csv/NewTableColumnTypes.d.ts +1 -1
  101. package/dist/csv/NewTableColumnTypes.d.ts.map +1 -1
  102. package/dist/csv/NewTableColumnTypes.js.map +1 -1
  103. package/dist/declaration.d.js +2 -0
  104. package/dist/declaration.d.js.map +1 -0
  105. package/dist/index.d.ts +14 -13
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/log/LogLevel.d.ts +1 -1
  109. package/dist/log/LogLevel.d.ts.map +1 -1
  110. package/dist/log/LogLevel.js.map +1 -1
  111. package/dist/log/LogLevelMenuItem.d.ts +11 -12
  112. package/dist/log/LogLevelMenuItem.d.ts.map +1 -1
  113. package/dist/log/LogLevelMenuItem.js +0 -6
  114. package/dist/log/LogLevelMenuItem.js.map +1 -1
  115. package/dist/log/LogView.d.ts +40 -47
  116. package/dist/log/LogView.d.ts.map +1 -1
  117. package/dist/log/LogView.js +65 -29
  118. package/dist/log/LogView.js.map +1 -1
  119. package/dist/monaco/MonacoCompletionProvider.d.ts +19 -19
  120. package/dist/monaco/MonacoCompletionProvider.d.ts.map +1 -1
  121. package/dist/monaco/MonacoCompletionProvider.js +11 -15
  122. package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
  123. package/dist/monaco/MonacoUtils.d.ts +77 -20
  124. package/dist/monaco/MonacoUtils.d.ts.map +1 -1
  125. package/dist/monaco/MonacoUtils.js +32 -24
  126. package/dist/monaco/MonacoUtils.js.map +1 -1
  127. package/dist/monaco/index.d.ts +3 -2
  128. package/dist/monaco/index.d.ts.map +1 -1
  129. package/dist/monaco/index.js.map +1 -1
  130. package/dist/monaco/lang/Language.d.ts +7 -0
  131. package/dist/monaco/lang/Language.d.ts.map +1 -0
  132. package/dist/monaco/lang/Language.js +2 -0
  133. package/dist/monaco/lang/Language.js.map +1 -0
  134. package/dist/monaco/lang/db.d.ts +3 -93
  135. package/dist/monaco/lang/db.d.ts.map +1 -1
  136. package/dist/monaco/lang/db.js +18 -3
  137. package/dist/monaco/lang/db.js.map +1 -1
  138. package/dist/monaco/lang/groovy.d.ts +3 -146
  139. package/dist/monaco/lang/groovy.d.ts.map +1 -1
  140. package/dist/monaco/lang/groovy.js +15 -2
  141. package/dist/monaco/lang/groovy.js.map +1 -1
  142. package/dist/monaco/lang/log.d.ts +3 -40
  143. package/dist/monaco/lang/log.d.ts.map +1 -1
  144. package/dist/monaco/lang/log.js +2 -1
  145. package/dist/monaco/lang/log.js.map +1 -1
  146. package/dist/monaco/lang/python.d.ts +3 -154
  147. package/dist/monaco/lang/python.d.ts.map +1 -1
  148. package/dist/monaco/lang/python.js +15 -2
  149. package/dist/monaco/lang/python.js.map +1 -1
  150. package/dist/monaco/lang/scala.d.ts +3 -140
  151. package/dist/monaco/lang/scala.d.ts.map +1 -1
  152. package/dist/monaco/lang/scala.js +10 -3
  153. package/dist/monaco/lang/scala.js.map +1 -1
  154. package/dist/notebook/Editor.d.ts +26 -27
  155. package/dist/notebook/Editor.d.ts.map +1 -1
  156. package/dist/notebook/Editor.js +23 -19
  157. package/dist/notebook/Editor.js.map +1 -1
  158. package/dist/notebook/ScriptEditor.d.ts +54 -51
  159. package/dist/notebook/ScriptEditor.d.ts.map +1 -1
  160. package/dist/notebook/ScriptEditor.js +45 -48
  161. package/dist/notebook/ScriptEditor.js.map +1 -1
  162. package/dist/notebook/ScriptEditorUtils.d.ts +15 -10
  163. package/dist/notebook/ScriptEditorUtils.d.ts.map +1 -1
  164. package/dist/notebook/ScriptEditorUtils.js +7 -7
  165. package/dist/notebook/ScriptEditorUtils.js.map +1 -1
  166. package/package.json +12 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/csv/CsvOverlay.jsx"],"names":["React","Component","PropTypes","memoize","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","dropError","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","handleFile","target","files","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","FILE_TYPE_ERROR","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","getFileTypeErrorString","propTypes","bool","func","isRequired","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { TextUtils } from '@deephaven/utils';\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component {\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item) {\n return (\n item &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name, allowZip = false) {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName) {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n dropError: null,\n };\n }\n\n componentDidMount() {\n this.divElem.current.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current.focus();\n }\n\n componentWillUnmount() {\n this.divElem.current.removeEventListener('paste', this.handlePasteEvent);\n }\n\n handleSelectFile() {\n this.fileElem.current.value = null;\n this.fileElem.current.click();\n }\n\n handleFiles(event) {\n event.stopPropagation();\n event.preventDefault();\n this.handleFile(event.target.files[0]);\n }\n\n handleDrop(e) {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError) {\n clearDragError();\n return;\n }\n\n if (!e.dataTransfer || !e.dataTransfer.items) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event) {\n const { onFileOpened } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onFileOpened(null);\n this.setState({\n selectedFileName: '',\n dropError: null,\n });\n }\n\n handleFile(file) {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: null,\n });\n }\n\n handleMenuPaste() {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: null,\n });\n })\n .catch(e => onError(e));\n }\n\n handlePasteEvent(event) {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems() {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize(allowZip =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize(allowZip =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize(allowZip =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render() {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError || dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex=\"-1\"\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && !error && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleSelectFile}\n >\n Select File...\n </button>\n </div>\n )}\n {selectedFileName && !error && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-2\"\n onClick={this.unstageFile}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n )}\n </label>\n </div>\n </div>\n )}\n {error && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nCsvOverlay.propTypes = {\n allowZip: PropTypes.bool,\n onFileOpened: PropTypes.func.isRequired,\n onPaste: PropTypes.func.isRequired,\n clearDragError: PropTypes.func.isRequired,\n dragError: PropTypes.string,\n onError: PropTypes.func.isRequired,\n uploadInProgress: PropTypes.bool.isRequired,\n};\n\nCsvOverlay.defaultProps = {\n allowZip: false,\n dragError: null,\n};\n\nexport default CsvOverlay;\n"],"file":"CsvOverlay.js"}
1
+ {"version":3,"sources":["../../src/csv/CsvOverlay.tsx"],"names":["React","Component","memoize","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","getFileTypeErrorString"],"mappings":"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","sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError) {\n clearDragError();\n return;\n }\n\n if (!e.dataTransfer || !e.dataTransfer.items) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize(allowZip =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize(allowZip =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize(allowZip =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError || dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && !error && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleSelectFile}\n >\n Select File...\n </button>\n </div>\n )}\n {selectedFileName && !error && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-2\"\n onClick={this.unstageFile}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n )}\n </label>\n </div>\n </div>\n )}\n {error && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"file":"CsvOverlay.js"}
@@ -1,61 +1,59 @@
1
- export default CsvParser;
1
+ /// <reference types="node" />
2
+ import { ParseLocalConfig, Parser, ParseResult } from 'papaparse';
3
+ import { IdeSession, Table } from '@deephaven/jsapi-shim';
4
+ import type { JSZipObject } from 'jszip';
5
+ import { CsvTypes } from './CsvFormats';
6
+ interface CsvParserConstructor {
7
+ onFileCompleted: (tables: Table[]) => void;
8
+ session: IdeSession;
9
+ file: Blob | JSZipObject;
10
+ type: CsvTypes;
11
+ readHeaders: boolean;
12
+ onProgress: (progressValue: number) => boolean;
13
+ onError: (e: unknown) => void;
14
+ timeZone: string;
15
+ isZip: boolean;
16
+ }
2
17
  /**
3
18
  * Parser a CSV file in chunks and returns a table handle for each chunk.
4
19
  */
5
20
  declare class CsvParser {
6
- static generateHeaders: (numColumns: any) => string[];
7
- static generateHeaderRecursive(n: any): string;
8
- constructor({ onFileCompleted, session, file, type, readHeaders, onProgress, onError, timeZone, isZip, }: {
9
- onFileCompleted: any;
10
- session: any;
11
- file: any;
12
- type: any;
13
- readHeaders?: boolean | undefined;
14
- onProgress: any;
15
- onError: any;
16
- timeZone: any;
17
- isZip: any;
18
- });
19
- onFileCompleted: any;
20
- session: any;
21
- file: any;
22
- isZip: any;
23
- type: any;
21
+ static generateHeaders: (numColumns: number) => string[];
22
+ static generateHeaderRecursive(n: number): string;
23
+ constructor({ onFileCompleted, session, file, type, readHeaders, onProgress, onError, timeZone, isZip, }: CsvParserConstructor);
24
+ onFileCompleted: (tables: Table[]) => void;
25
+ session: IdeSession;
26
+ file: Blob | JSZipObject;
27
+ isZip: boolean;
28
+ type: CsvTypes;
24
29
  readHeaders: boolean;
25
- timeZone: any;
26
- onProgress: any;
27
- onError: any;
28
- tables: any[];
29
- headers: string[] | null;
30
- types: any;
30
+ timeZone: string;
31
+ onProgress: (progressValue: number) => boolean;
32
+ onError: (e: unknown) => void;
33
+ tables: Table[];
34
+ headers?: string[];
35
+ types?: string[];
31
36
  chunks: number;
32
37
  totalChunks: number;
33
38
  isComplete: boolean;
34
39
  zipProgress: number;
35
- consolidatedChunks: any;
40
+ consolidatedChunks?: string[][];
36
41
  numConsolidated: number;
37
42
  isCancelled: boolean;
38
- handleChunk(result: any, parser: any): void;
39
- handleError(error: any): void;
40
- handleComplete(results: any): void;
41
- handleNodeUpdate(metadata: any): void;
42
- handleCreateTable(index: any, columns: any, parser: any): void;
43
- config: {
44
- delimiter: any;
45
- newline: any;
46
- escapeChar: any;
47
- dynamicTyping: boolean;
48
- error: (error: any) => void;
49
- skipEmptyLines: any;
50
- chunk: (result: any, parser: any) => void;
51
- complete: (results: any) => void;
52
- fastMode: boolean;
53
- };
43
+ config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;
54
44
  cancel(): void;
55
- transpose(numColumns: any, array: any): any[][];
56
- nullCheck(value: any): any;
45
+ transpose(numColumns: number, array: string[][]): string[][];
46
+ nullCheck(value: string): string;
57
47
  parse(): void;
58
- consolidateChunks(columns: any, parser: any): void;
59
- uploadConsolidatedChunks(parser: any): void;
48
+ handleChunk(result: ParseResult<string[]>, parser: Parser): void;
49
+ consolidateChunks(columns: string[][], parser: Parser): void;
50
+ uploadConsolidatedChunks(parser: Parser | null): void;
51
+ handleCreateTable(index: number, columns: string[][], parser: Parser | null): void;
52
+ handleComplete(results: ParseResult<unknown>): void;
53
+ handleError(error: unknown): void;
54
+ handleNodeUpdate(metadata: {
55
+ percent: number;
56
+ }): void;
60
57
  }
58
+ export default CsvParser;
61
59
  //# sourceMappingURL=CsvParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CsvParser.d.ts","sourceRoot":"","sources":["../../src/csv/CsvParser.js"],"names":[],"mappings":";AAWA;;GAEG;AACH;IAEE,sDAME;IAEF,+CAUC;IAED;;;;;;;;;;OAgDC;IArCC,qBAAsC;IACtC,aAAsB;IACtB,UAAgB;IAChB,WAAkB;IAClB,UAAgB;IAChB,qBAA8B;IAC9B,cAAwB;IACxB,gBAA4B;IAC5B,aAAsB;IACtB,cAAgB;IAChB,yBAAmB;IACnB,WAAiB;IACjB,eAAe;IACf,oBAAyE;IACzE,oBAAuB;IACvB,oBAAoB;IACpB,wBAA8B;IAC9B,wBAAwB;IACxB,qBAAwB;IAwE1B,4CAgCC;IAyFD,8BAGC;IAdD,mCASC;IAOD,sCAEC;IApED,+DAgDC;IA5KC;;;;;;;;;;MAUC;IAGH,eAEC;IAED,gDAkBC;IAED,2BAEC;IAED,cAqBC;IAoCD,mDAcC;IAED,4CAQC;CAuEF"}
1
+ {"version":3,"file":"CsvParser.d.ts","sourceRoot":"","sources":["../../src/csv/CsvParser.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,16 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  import Papa from 'papaparse';
4
4
  import Log from '@deephaven/log';
5
- import { DbNameValidator } from '@deephaven/utils';
5
+ import { assertNotNull, DbNameValidator } from '@deephaven/utils';
6
6
  import CsvTypeParser from "./CsvTypeParser.js";
7
7
  var log = Log.module('CsvParser'); // This is based on jszip streaming ~15 KB chunks to papa parse
8
8
  // Want to consolidate to ~10 MB chunks
9
9
 
10
10
  var ZIP_CONSOLIDATE_CHUNKS = 650;
11
+
11
12
  /**
12
13
  * Parser a CSV file in chunks and returns a table handle for each chunk.
13
14
  */
14
-
15
15
  class CsvParser {
16
16
  // Generates column names A-Z, AA-AZ, BA-BZ, etc...
17
17
  static generateHeaderRecursive(n) {
@@ -38,6 +38,47 @@ class CsvParser {
38
38
  timeZone,
39
39
  isZip
40
40
  } = _ref;
41
+
42
+ _defineProperty(this, "onFileCompleted", void 0);
43
+
44
+ _defineProperty(this, "session", void 0);
45
+
46
+ _defineProperty(this, "file", void 0);
47
+
48
+ _defineProperty(this, "isZip", void 0);
49
+
50
+ _defineProperty(this, "type", void 0);
51
+
52
+ _defineProperty(this, "readHeaders", void 0);
53
+
54
+ _defineProperty(this, "timeZone", void 0);
55
+
56
+ _defineProperty(this, "onProgress", void 0);
57
+
58
+ _defineProperty(this, "onError", void 0);
59
+
60
+ _defineProperty(this, "tables", void 0);
61
+
62
+ _defineProperty(this, "headers", void 0);
63
+
64
+ _defineProperty(this, "types", void 0);
65
+
66
+ _defineProperty(this, "chunks", void 0);
67
+
68
+ _defineProperty(this, "totalChunks", void 0);
69
+
70
+ _defineProperty(this, "isComplete", void 0);
71
+
72
+ _defineProperty(this, "zipProgress", void 0);
73
+
74
+ _defineProperty(this, "consolidatedChunks", void 0);
75
+
76
+ _defineProperty(this, "numConsolidated", void 0);
77
+
78
+ _defineProperty(this, "isCancelled", void 0);
79
+
80
+ _defineProperty(this, "config", void 0);
81
+
41
82
  this.onFileCompleted = onFileCompleted;
42
83
  this.session = session;
43
84
  this.file = file;
@@ -48,13 +89,10 @@ class CsvParser {
48
89
  this.onProgress = onProgress;
49
90
  this.onError = onError;
50
91
  this.tables = [];
51
- this.headers = null;
52
- this.types = null;
53
92
  this.chunks = 0;
54
93
  this.totalChunks = isZip ? 0 : Math.ceil(file.size / Papa.LocalChunkSize);
55
94
  this.isComplete = false;
56
95
  this.zipProgress = 0;
57
- this.consolidatedChunks = null;
58
96
  this.numConsolidated = 0;
59
97
  this.isCancelled = false;
60
98
  this.handleChunk = this.handleChunk.bind(this);
@@ -105,7 +143,9 @@ class CsvParser {
105
143
 
106
144
  parse() {
107
145
  var handleParseDone = types => {
108
- var toParse = this.isZip ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate) : this.file;
146
+ var toParse = this.isZip ? this.file.nodeStream( // JsZip types are incorrect, thus the funny casting
147
+ // Actual parameter is 'nodebuffer'
148
+ 'nodebuffer', this.handleNodeUpdate) : this.file;
109
149
  this.types = types;
110
150
  Papa.parse(toParse, this.config);
111
151
  };
@@ -178,14 +218,17 @@ class CsvParser {
178
218
  }
179
219
 
180
220
  uploadConsolidatedChunks(parser) {
221
+ var _this$consolidatedChu;
222
+
181
223
  var {
182
224
  handleCreateTable
183
225
  } = this;
184
226
  var index = this.chunks;
185
227
  this.chunks += 1;
186
- var toUpload = this.consolidatedChunks.slice();
187
- this.consolidatedChunks = null;
228
+ var toUpload = (_this$consolidatedChu = this.consolidatedChunks) === null || _this$consolidatedChu === void 0 ? void 0 : _this$consolidatedChu.slice();
229
+ this.consolidatedChunks = undefined;
188
230
  this.numConsolidated = 0;
231
+ assertNotNull(toUpload);
189
232
  handleCreateTable(index, toUpload, parser);
190
233
  }
191
234
 
@@ -204,6 +247,8 @@ class CsvParser {
204
247
  parser.pause();
205
248
  }
206
249
 
250
+ assertNotNull(this.headers);
251
+ assertNotNull(types);
207
252
  session.newTable(this.headers, types, columns, this.timeZone).then(table => {
208
253
  if (this.isCancelled) {
209
254
  log.debug2('CSV parser cancelled.');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/csv/CsvParser.js"],"names":["Papa","Log","DbNameValidator","CsvTypeParser","log","module","ZIP_CONSOLIDATE_CHUNKS","CsvParser","generateHeaderRecursive","n","header","char","concat","Math","floor","String","fromCharCode","constructor","onFileCompleted","session","file","type","readHeaders","onProgress","onError","timeZone","isZip","tables","headers","types","chunks","totalChunks","ceil","size","LocalChunkSize","isComplete","zipProgress","consolidatedChunks","numConsolidated","isCancelled","handleChunk","bind","handleError","handleComplete","handleNodeUpdate","handleCreateTable","config","delimiter","newline","escapeChar","dynamicTyping","error","skipEmptyLines","chunk","complete","fastMode","cancel","transpose","numColumns","array","numRows","length","columns","Array","fill","map","r","row","Error","c","value","shouldTrim","trim","nullCheck","nullString","parse","handleParseDone","toParse","nodeStream","typeParser","result","parser","debug2","abort","forEach","t","close","data","legalizeColumnNames","slice","generateHeaders","consolidateChunks","index","e","i","uploadConsolidatedChunks","toUpload","pause","newTable","then","table","resume","progress","round","catch","results","meta","aborted","metadata","percent","push"],"mappings":"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","sourcesContent":["import Papa from 'papaparse';\nimport Log from '@deephaven/log';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CsvTypeParser from './CsvTypeParser';\n\nconst log = Log.module('CsvParser');\n\n// This is based on jszip streaming ~15 KB chunks to papa parse\n// Want to consolidate to ~10 MB chunks\nconst ZIP_CONSOLIDATE_CHUNKS = 650;\n\n/**\n * Parser a CSV file in chunks and returns a table handle for each chunk.\n */\nclass CsvParser {\n // Generates column names A-Z, AA-AZ, BA-BZ, etc...\n static generateHeaders = numColumns => {\n const headers = [];\n for (let i = 0; i < numColumns; i += 1) {\n headers.push(CsvParser.generateHeaderRecursive(i));\n }\n return headers;\n };\n\n static generateHeaderRecursive(n) {\n let header = '';\n let char = n;\n if (n >= 26) {\n header = header.concat(\n CsvParser.generateHeaderRecursive(Math.floor(n / 26) - 1)\n );\n char = n % 26;\n }\n return header.concat(String.fromCharCode(65 + char));\n }\n\n constructor({\n onFileCompleted,\n session,\n file,\n type,\n readHeaders = true,\n onProgress,\n onError,\n timeZone,\n isZip,\n }) {\n this.onFileCompleted = onFileCompleted;\n this.session = session;\n this.file = file;\n this.isZip = isZip;\n this.type = type;\n this.readHeaders = readHeaders;\n this.timeZone = timeZone;\n this.onProgress = onProgress;\n this.onError = onError;\n this.tables = [];\n this.headers = null;\n this.types = null;\n this.chunks = 0;\n this.totalChunks = isZip ? 0 : Math.ceil(file.size / Papa.LocalChunkSize);\n this.isComplete = false;\n this.zipProgress = 0;\n this.consolidatedChunks = null;\n this.numConsolidated = 0;\n this.isCancelled = false;\n\n this.handleChunk = this.handleChunk.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleComplete = this.handleComplete.bind(this);\n this.handleNodeUpdate = this.handleNodeUpdate.bind(this);\n this.handleCreateTable = this.handleCreateTable.bind(this);\n\n this.config = {\n delimiter: type.delimiter,\n newline: type.newline,\n escapeChar: type.escapeChar,\n dynamicTyping: false,\n error: this.handleError,\n skipEmptyLines: type.skipEmptyLines,\n chunk: this.handleChunk,\n complete: this.handleComplete,\n fastMode: false,\n };\n }\n\n cancel() {\n this.isCancelled = true;\n }\n\n transpose(numColumns, array) {\n const numRows = array.length;\n const columns = new Array(numColumns)\n .fill(null)\n .map(() => new Array(numRows));\n for (let r = 0; r < numRows; r += 1) {\n const row = array[r];\n if (row.length < numColumns) {\n throw new Error(\n `Insufficient columns. Expected ${numColumns} but found ${row.length}\\n${row}`\n );\n }\n for (let c = 0; c < numColumns; c += 1) {\n const value = this.type.shouldTrim ? array[r][c].trim() : array[r][c];\n columns[c][r] = this.nullCheck(value);\n }\n }\n return columns;\n }\n\n nullCheck(value) {\n return value === this.type.nullString ? '' : value;\n }\n\n parse() {\n const handleParseDone = types => {\n const toParse = this.isZip\n ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate)\n : this.file;\n this.types = types;\n Papa.parse(toParse, this.config);\n };\n const typeParser = new CsvTypeParser(\n handleParseDone,\n this.file,\n this.readHeaders,\n this.config,\n this.type.nullString,\n this.onProgress,\n this.onError,\n this.totalChunks,\n this.isZip,\n this.type.shouldTrim\n );\n typeParser.parse();\n }\n\n handleChunk(result, parser) {\n const { readHeaders, onError, handleCreateTable, isZip, tables } = this;\n if (this.isCancelled) {\n log.debug2('CSV parser cancelled.');\n parser.abort();\n tables.forEach(t => t.close());\n return;\n }\n let { data } = result;\n if (!this.headers) {\n if (readHeaders) {\n this.headers = DbNameValidator.legalizeColumnNames(data[0]);\n data = data.slice(1);\n } else {\n this.headers = CsvParser.generateHeaders(data[0].length);\n }\n }\n\n let columns = [];\n try {\n columns = this.transpose(this.headers.length, data);\n if (isZip) {\n // Zip file chunks are tiny, so consolidate them to avoid create thousands of small tables\n this.consolidateChunks(columns, parser);\n } else {\n const index = this.chunks;\n this.chunks += 1;\n handleCreateTable(index, columns, parser);\n }\n } catch (e) {\n onError(e);\n }\n }\n\n consolidateChunks(columns, parser) {\n if (!this.consolidatedChunks) {\n this.consolidatedChunks = columns.slice();\n } else {\n for (let i = 0; i < columns.length; i += 1) {\n this.consolidatedChunks[i] = this.consolidatedChunks[i].concat(\n columns[i]\n );\n }\n }\n this.numConsolidated += 1;\n if (this.numConsolidated >= ZIP_CONSOLIDATE_CHUNKS || this.isComplete) {\n this.uploadConsolidatedChunks(parser);\n }\n }\n\n uploadConsolidatedChunks(parser) {\n const { handleCreateTable } = this;\n const index = this.chunks;\n this.chunks += 1;\n const toUpload = this.consolidatedChunks.slice();\n this.consolidatedChunks = null;\n this.numConsolidated = 0;\n handleCreateTable(index, toUpload, parser);\n }\n\n handleCreateTable(index, columns, parser) {\n const {\n session,\n tables,\n onFileCompleted,\n totalChunks,\n types,\n onProgress,\n onError,\n } = this;\n if (parser) {\n parser.pause();\n }\n session\n .newTable(this.headers, types, columns, this.timeZone)\n .then(table => {\n if (this.isCancelled) {\n log.debug2('CSV parser cancelled.');\n if (parser) {\n parser.abort();\n }\n tables.forEach(t => t.close());\n return;\n }\n if (parser) {\n parser.resume();\n }\n tables[index] = table;\n // This accounts for 50% of parsing plus 50% already done by the type parser\n let progress = 0;\n if (totalChunks > 0) {\n progress = Math.round((tables.length / totalChunks) * 50) + 50;\n } else {\n progress = Math.round(50 + this.zipProgress / 2);\n }\n log.debug2(`CSV parser progress ${progress}`);\n onProgress(progress);\n if (this.isComplete && tables.length === this.chunks) {\n log.debug2('CSV parser complete.');\n onFileCompleted(tables);\n }\n })\n .catch(e => {\n if (!this.isComplete && parser) {\n parser.abort();\n }\n onError(e);\n });\n }\n\n handleComplete(results) {\n // results is undefined for a succesful parse, but has meta data for an abort\n if (!results || !results.meta.aborted) {\n this.isComplete = true;\n // Check if there are any consolidated chunks left over from a zip file\n if (this.consolidatedChunks) {\n this.uploadConsolidatedChunks(null);\n }\n }\n }\n\n handleError(error) {\n const { onError } = this;\n onError(error);\n }\n\n handleNodeUpdate(metadata) {\n this.zipProgress = metadata.percent;\n }\n}\n\nexport default CsvParser;\n"],"file":"CsvParser.js"}
1
+ {"version":3,"sources":["../../src/csv/CsvParser.ts"],"names":["Papa","Log","assertNotNull","DbNameValidator","CsvTypeParser","log","module","ZIP_CONSOLIDATE_CHUNKS","CsvParser","generateHeaderRecursive","n","header","char","concat","Math","floor","String","fromCharCode","constructor","onFileCompleted","session","file","type","readHeaders","onProgress","onError","timeZone","isZip","tables","chunks","totalChunks","ceil","size","LocalChunkSize","isComplete","zipProgress","numConsolidated","isCancelled","handleChunk","bind","handleError","handleComplete","handleNodeUpdate","handleCreateTable","config","delimiter","newline","escapeChar","dynamicTyping","error","skipEmptyLines","chunk","complete","fastMode","cancel","transpose","numColumns","array","numRows","length","columns","Array","fill","map","r","row","Error","c","value","shouldTrim","trim","nullCheck","nullString","parse","handleParseDone","types","toParse","nodeStream","typeParser","result","parser","debug2","abort","forEach","t","close","data","headers","legalizeColumnNames","slice","generateHeaders","consolidateChunks","index","e","consolidatedChunks","i","uploadConsolidatedChunks","toUpload","undefined","pause","newTable","then","table","resume","progress","round","catch","results","meta","aborted","metadata","percent","push"],"mappings":"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","sourcesContent":["import Papa, { ParseLocalConfig, Parser, ParseResult } from 'papaparse';\nimport Log from '@deephaven/log';\nimport { assertNotNull, DbNameValidator } from '@deephaven/utils';\nimport { IdeSession, Table } from '@deephaven/jsapi-shim';\nimport type { JSZipObject } from 'jszip';\nimport CsvTypeParser from './CsvTypeParser';\nimport { CsvTypes } from './CsvFormats';\n\nconst log = Log.module('CsvParser');\n\n// This is based on jszip streaming ~15 KB chunks to papa parse\n// Want to consolidate to ~10 MB chunks\nconst ZIP_CONSOLIDATE_CHUNKS = 650;\n\ninterface CsvParserConstructor {\n onFileCompleted: (tables: Table[]) => void;\n session: IdeSession;\n file: Blob | JSZipObject;\n type: CsvTypes;\n readHeaders: boolean;\n onProgress: (progressValue: number) => boolean;\n onError: (e: unknown) => void;\n timeZone: string;\n isZip: boolean;\n}\n\n/**\n * Parser a CSV file in chunks and returns a table handle for each chunk.\n */\nclass CsvParser {\n // Generates column names A-Z, AA-AZ, BA-BZ, etc...\n static generateHeaders = (numColumns: number): string[] => {\n const headers = [];\n for (let i = 0; i < numColumns; i += 1) {\n headers.push(CsvParser.generateHeaderRecursive(i));\n }\n return headers;\n };\n\n static generateHeaderRecursive(n: number): string {\n let header = '';\n let char = n;\n if (n >= 26) {\n header = header.concat(\n CsvParser.generateHeaderRecursive(Math.floor(n / 26) - 1)\n );\n char = n % 26;\n }\n return header.concat(String.fromCharCode(65 + char));\n }\n\n constructor({\n onFileCompleted,\n session,\n file,\n type,\n readHeaders = true,\n onProgress,\n onError,\n timeZone,\n isZip,\n }: CsvParserConstructor) {\n this.onFileCompleted = onFileCompleted;\n this.session = session;\n this.file = file;\n this.isZip = isZip;\n this.type = type;\n this.readHeaders = readHeaders;\n this.timeZone = timeZone;\n this.onProgress = onProgress;\n this.onError = onError;\n this.tables = [];\n this.chunks = 0;\n this.totalChunks = isZip\n ? 0\n : Math.ceil((file as Blob).size / Papa.LocalChunkSize);\n this.isComplete = false;\n this.zipProgress = 0;\n this.numConsolidated = 0;\n this.isCancelled = false;\n\n this.handleChunk = this.handleChunk.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleComplete = this.handleComplete.bind(this);\n this.handleNodeUpdate = this.handleNodeUpdate.bind(this);\n this.handleCreateTable = this.handleCreateTable.bind(this);\n\n this.config = {\n delimiter: type.delimiter,\n newline: type.newline as '\\r\\n' | '\\n' | '\\r' | undefined,\n escapeChar: type.escapeChar,\n dynamicTyping: false,\n error: this.handleError,\n skipEmptyLines: type.skipEmptyLines,\n chunk: this.handleChunk,\n complete: this.handleComplete,\n fastMode: false,\n };\n }\n\n onFileCompleted: (tables: Table[]) => void;\n\n session: IdeSession;\n\n file: Blob | JSZipObject;\n\n isZip: boolean;\n\n type: CsvTypes;\n\n readHeaders: boolean;\n\n timeZone: string;\n\n onProgress: (progressValue: number) => boolean;\n\n onError: (e: unknown) => void;\n\n tables: Table[];\n\n headers?: string[];\n\n types?: string[];\n\n chunks: number;\n\n totalChunks: number;\n\n isComplete: boolean;\n\n zipProgress: number;\n\n consolidatedChunks?: string[][];\n\n numConsolidated: number;\n\n isCancelled: boolean;\n\n config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;\n\n cancel(): void {\n this.isCancelled = true;\n }\n\n transpose(numColumns: number, array: string[][]): string[][] {\n const numRows = array.length;\n const columns = new Array(numColumns)\n .fill(null)\n .map(() => new Array(numRows));\n for (let r = 0; r < numRows; r += 1) {\n const row = array[r];\n if (row.length < numColumns) {\n throw new Error(\n `Insufficient columns. Expected ${numColumns} but found ${row.length}\\n${row}`\n );\n }\n for (let c = 0; c < numColumns; c += 1) {\n const value = this.type.shouldTrim ? array[r][c].trim() : array[r][c];\n columns[c][r] = this.nullCheck(value);\n }\n }\n return columns as string[][];\n }\n\n nullCheck(value: string): string {\n return value === this.type.nullString ? '' : value;\n }\n\n parse(): void {\n const handleParseDone = (types: string[]) => {\n const toParse = this.isZip\n ? (this.file as JSZipObject).nodeStream(\n // JsZip types are incorrect, thus the funny casting\n // Actual parameter is 'nodebuffer'\n 'nodebuffer' as 'nodestream',\n this.handleNodeUpdate\n )\n : (this.file as Blob);\n this.types = types;\n Papa.parse(toParse, this.config);\n };\n const typeParser = new CsvTypeParser(\n handleParseDone,\n this.file,\n this.readHeaders,\n this.config,\n this.type.nullString,\n this.onProgress,\n this.onError,\n this.totalChunks,\n this.isZip,\n this.type.shouldTrim\n );\n typeParser.parse();\n }\n\n handleChunk(result: ParseResult<string[]>, parser: Parser): void {\n const { readHeaders, onError, handleCreateTable, isZip, tables } = this;\n if (this.isCancelled) {\n log.debug2('CSV parser cancelled.');\n parser.abort();\n tables.forEach(t => t.close());\n return;\n }\n let { data } = result;\n if (!this.headers) {\n if (readHeaders) {\n this.headers = DbNameValidator.legalizeColumnNames(data[0]);\n data = data.slice(1);\n } else {\n this.headers = CsvParser.generateHeaders(data[0].length);\n }\n }\n\n let columns: string[][] = [];\n try {\n columns = this.transpose(this.headers.length, data);\n if (isZip) {\n // Zip file chunks are tiny, so consolidate them to avoid create thousands of small tables\n this.consolidateChunks(columns, parser);\n } else {\n const index = this.chunks;\n this.chunks += 1;\n handleCreateTable(index, columns, parser);\n }\n } catch (e: unknown) {\n onError(e);\n }\n }\n\n consolidateChunks(columns: string[][], parser: Parser): void {\n if (!this.consolidatedChunks) {\n this.consolidatedChunks = columns.slice();\n } else {\n for (let i = 0; i < columns.length; i += 1) {\n this.consolidatedChunks[i] = this.consolidatedChunks[i].concat(\n columns[i]\n );\n }\n }\n this.numConsolidated += 1;\n if (this.numConsolidated >= ZIP_CONSOLIDATE_CHUNKS || this.isComplete) {\n this.uploadConsolidatedChunks(parser);\n }\n }\n\n uploadConsolidatedChunks(parser: Parser | null): void {\n const { handleCreateTable } = this;\n const index = this.chunks;\n this.chunks += 1;\n const toUpload = this.consolidatedChunks?.slice();\n this.consolidatedChunks = undefined;\n this.numConsolidated = 0;\n assertNotNull(toUpload);\n handleCreateTable(index, toUpload, parser);\n }\n\n handleCreateTable(\n index: number,\n columns: string[][],\n parser: Parser | null\n ): void {\n const {\n session,\n tables,\n onFileCompleted,\n totalChunks,\n types,\n onProgress,\n onError,\n } = this;\n if (parser) {\n parser.pause();\n }\n assertNotNull(this.headers);\n assertNotNull(types);\n session\n .newTable(this.headers, types, columns, this.timeZone)\n .then(table => {\n if (this.isCancelled) {\n log.debug2('CSV parser cancelled.');\n if (parser) {\n parser.abort();\n }\n tables.forEach(t => t.close());\n return;\n }\n if (parser) {\n parser.resume();\n }\n tables[index] = table;\n // This accounts for 50% of parsing plus 50% already done by the type parser\n let progress = 0;\n if (totalChunks > 0) {\n progress = Math.round((tables.length / totalChunks) * 50) + 50;\n } else {\n progress = Math.round(50 + this.zipProgress / 2);\n }\n log.debug2(`CSV parser progress ${progress}`);\n onProgress(progress);\n if (this.isComplete && tables.length === this.chunks) {\n log.debug2('CSV parser complete.');\n onFileCompleted(tables);\n }\n })\n .catch(e => {\n if (!this.isComplete && parser) {\n parser.abort();\n }\n onError(e);\n });\n }\n\n handleComplete(results: ParseResult<unknown>): void {\n // results is undefined for a succesful parse, but has meta data for an abort\n if (!results || !results.meta.aborted) {\n this.isComplete = true;\n // Check if there are any consolidated chunks left over from a zip file\n if (this.consolidatedChunks) {\n this.uploadConsolidatedChunks(null);\n }\n }\n }\n\n handleError(error: unknown): void {\n const { onError } = this;\n onError(error);\n }\n\n handleNodeUpdate(metadata: { percent: number }): void {\n this.zipProgress = metadata.percent;\n }\n}\n\nexport default CsvParser;\n"],"file":"CsvParser.js"}
@@ -1,36 +1,41 @@
1
- export default CsvTypeParser;
1
+ /// <reference types="node" />
2
+ import type { JSZipObject } from 'jszip';
3
+ import { Parser, ParseResult, ParseLocalConfig } from 'papaparse';
2
4
  /**
3
5
  * Determines the type of each column in a CSV file by parsing it and looking at every value.
4
6
  */
5
7
  declare class CsvTypeParser {
6
- static determineType(value: any, type: any, nullString: any): any;
7
- static isNotParsableNumber(s: any): boolean;
8
- static checkInteger(value: any): string;
9
- static checkLong(value: any): string;
10
- static checkDouble(value: any): string;
11
- static checkBoolean(value: any): string;
12
- static checkDateTime(value: any): string;
13
- static checkLocalTime(value: any): string;
14
- static getTypeFromUnknown(value: any): string;
15
- static getNumberType(value: any): string;
16
- constructor(onFileCompleted: any, file: any, readHeaders: any, parentConfig: any, nullString: any, onProgress: any, onError: any, totalChunks: any, isZip: any, shouldTrim: any);
17
- onFileCompleted: any;
18
- file: any;
19
- readHeaders: any;
20
- nullString: any;
21
- onProgress: any;
22
- onError: any;
23
- types: any[] | null;
8
+ static determineType(value: string, type: string, nullString: string | null): string;
9
+ static isNotParsableNumber(s: string): boolean;
10
+ static checkInteger(value: string): string;
11
+ static checkLong(value: string): string;
12
+ static checkDouble(value: string): string;
13
+ static checkBoolean(value: string): string;
14
+ static checkDateTime(value: string): string;
15
+ static checkLocalTime(value: string): string;
16
+ static getTypeFromUnknown(value: string): string;
17
+ static getNumberType(value: string): string;
18
+ constructor(onFileCompleted: (types: string[]) => void, file: Blob | JSZipObject, readHeaders: boolean, parentConfig: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>, nullString: string | null, onProgress: (progressValue: number) => boolean, onError: (e: unknown) => void, totalChunks: number, isZip: boolean, shouldTrim: boolean);
19
+ onFileCompleted: (types: string[]) => void;
20
+ file: Blob | JSZipObject;
21
+ readHeaders: boolean;
22
+ nullString: string | null;
23
+ onProgress: (progressValue: number) => boolean;
24
+ onError: (e: unknown) => void;
25
+ types?: string[];
24
26
  chunks: number;
25
- totalChunks: any;
26
- isZip: any;
27
- shouldTrim: any;
27
+ totalChunks: number;
28
+ isZip: boolean;
29
+ shouldTrim: boolean;
28
30
  zipProgress: number;
29
- handleChunk(result: any, parser: any): void;
30
- handleComplete(results: any): void;
31
- handleError(error: any): void;
32
- handleNodeUpdate(metadata: any): void;
33
- config: any;
31
+ config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;
34
32
  parse(): void;
33
+ handleChunk(result: ParseResult<string[]>, parser: Parser): void;
34
+ handleComplete(results: ParseResult<unknown>): void;
35
+ handleError(error: unknown): void;
36
+ handleNodeUpdate(metadata: {
37
+ percent: number;
38
+ }): void;
35
39
  }
40
+ export default CsvTypeParser;
36
41
  //# sourceMappingURL=CsvTypeParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CsvTypeParser.d.ts","sourceRoot":"","sources":["../../src/csv/CsvTypeParser.js"],"names":[],"mappings":";AAcA;;GAEG;AACH;IACE,kEAyBC;IAGD,4CAEC;IAED,wCAOC;IAED,qCAWC;IAED,uCAOC;IAED,wCAMC;IAED,yCAMC;IAED,0CAMC;IAED,8CAoBC;IAED,yCAkBC;IAED,iLAoCC;IAxBC,qBAAsC;IACtC,UAAgB;IAChB,iBAA8B;IAC9B,gBAA4B;IAC5B,gBAA4B;IAC5B,aAAsB;IACtB,oBAAiB;IACjB,eAAe;IACf,iBAA8B;IAC9B,WAAkB;IAClB,gBAA4B;IAC5B,oBAAoB;IAsBtB,4CA4CC;IAED,mCAUC;IAED,8BAGC;IAED,sCAEC;IAhFC,YAKC;IAGH,cAKC;CAoEF"}
1
+ {"version":3,"file":"CsvTypeParser.d.ts","sourceRoot":"","sources":["../../src/csv/CsvTypeParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAa,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAcxE;;GAEG;AACH,cAAM,aAAa;IACjB,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM;IA4BT,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAM9C,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAS1C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAavC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASzC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ1C,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ3C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ5C,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAsBhD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;gBAqBzC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,EAC1C,IAAI,EAAE,IAAI,GAAG,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,EACrE,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,EAC9C,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,OAAO;IA2BrB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAE3C,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC;IAEzB,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC;IAE/C,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAE9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,EAAE,OAAO,CAAC;IAEf,UAAU,EAAE,OAAO,CAAC;IAEpB,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAEhE,KAAK,IAAI,IAAI;IAYb,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAmDhE,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAanD,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKjC,gBAAgB,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAGtD;AAED,eAAe,aAAa,CAAC"}
@@ -4,10 +4,11 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
4
4
 
5
5
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
 
7
- // Intentionally using isNaN rather than Number.isNaN
7
+ import { assertNotNull } from '@deephaven/utils';
8
+ import Papa from 'papaparse'; // Intentionally using isNaN rather than Number.isNaN
8
9
 
9
10
  /* eslint-disable no-restricted-globals */
10
- import Papa from 'papaparse';
11
+
11
12
  import NewTableColumnTypes from "./NewTableColumnTypes.js"; // Initially column types start al unknown
12
13
 
13
14
  var UNKNOWN = 'unknown';
@@ -166,13 +167,38 @@ class CsvTypeParser {
166
167
  }
167
168
 
168
169
  constructor(onFileCompleted, file, readHeaders, parentConfig, nullString, onProgress, onError, totalChunks, isZip, shouldTrim) {
170
+ _defineProperty(this, "onFileCompleted", void 0);
171
+
172
+ _defineProperty(this, "file", void 0);
173
+
174
+ _defineProperty(this, "readHeaders", void 0);
175
+
176
+ _defineProperty(this, "nullString", void 0);
177
+
178
+ _defineProperty(this, "onProgress", void 0);
179
+
180
+ _defineProperty(this, "onError", void 0);
181
+
182
+ _defineProperty(this, "types", void 0);
183
+
184
+ _defineProperty(this, "chunks", void 0);
185
+
186
+ _defineProperty(this, "totalChunks", void 0);
187
+
188
+ _defineProperty(this, "isZip", void 0);
189
+
190
+ _defineProperty(this, "shouldTrim", void 0);
191
+
192
+ _defineProperty(this, "zipProgress", void 0);
193
+
194
+ _defineProperty(this, "config", void 0);
195
+
169
196
  this.onFileCompleted = onFileCompleted;
170
197
  this.file = file;
171
198
  this.readHeaders = readHeaders;
172
199
  this.nullString = nullString;
173
200
  this.onProgress = onProgress;
174
201
  this.onError = onError;
175
- this.types = null;
176
202
  this.chunks = 0;
177
203
  this.totalChunks = totalChunks;
178
204
  this.isZip = isZip;
@@ -190,7 +216,9 @@ class CsvTypeParser {
190
216
  }
191
217
 
192
218
  parse() {
193
- var toParse = this.isZip ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate) : this.file;
219
+ var toParse = this.isZip ? this.file.nodeStream( // JsZip types are incorrect, thus the funny casting
220
+ // Actual parameter is 'nodebuffer'
221
+ 'nodebuffer', this.handleNodeUpdate) : this.file;
194
222
  Papa.parse(toParse, this.config);
195
223
  }
196
224
 
@@ -214,14 +242,18 @@ class CsvTypeParser {
214
242
  }
215
243
  }
216
244
 
245
+ assertNotNull(this.types);
246
+ var cloneTypes = [...this.types];
217
247
  data.forEach(row => {
218
- if (row.length >= this.types.length) {
219
- for (var i = 0; i < this.types.length; i += 1) {
220
- this.types[i] = CsvTypeParser.determineType(this.shouldTrim ? row[i].trim() : row[i], this.types[i], this.nullString);
248
+ if (row.length >= cloneTypes.length) {
249
+ for (var i = 0; i < cloneTypes.length; i += 1) {
250
+ cloneTypes[i] = CsvTypeParser.determineType(this.shouldTrim ? row[i].trim() : row[i], cloneTypes[i], this.nullString);
221
251
  }
252
+
253
+ this.types = cloneTypes;
222
254
  } else {
223
255
  parser.abort();
224
- this.onError("Error parsing CSV: Insufficient data in row.\nExpected length ".concat(this.types.length, " but found ").concat(row.length, ".\nRow = ").concat(row));
256
+ this.onError("Error parsing CSV: Insufficient data in row.\nExpected length ".concat(cloneTypes.length, " but found ").concat(row.length, ".\nRow = ").concat(row));
225
257
  }
226
258
  });
227
259
  this.chunks += 1; // 50 because the type parsing accounts for 50% of the parsing
@@ -247,6 +279,8 @@ class CsvTypeParser {
247
279
  onFileCompleted
248
280
  } = this; // results is undefined for a succesful parse, but has meta data for an abort
249
281
 
282
+ assertNotNull(types);
283
+
250
284
  if (!results || !results.meta.aborted) {
251
285
  onFileCompleted(types.map(type => type === UNKNOWN ? NewTableColumnTypes.STRING : type));
252
286
  }