@deephaven/console 0.46.1-beta.2 → 0.46.1-beta.7

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 (59) hide show
  1. package/dist/Console.js +66 -59
  2. package/dist/Console.js.map +1 -1
  3. package/dist/ConsoleInput.js +20 -16
  4. package/dist/ConsoleInput.js.map +1 -1
  5. package/dist/ConsoleMenu.js +73 -67
  6. package/dist/ConsoleMenu.js.map +1 -1
  7. package/dist/ConsoleStatusBar.js +17 -10
  8. package/dist/ConsoleStatusBar.js.map +1 -1
  9. package/dist/HeapUsage.js +89 -74
  10. package/dist/HeapUsage.js.map +1 -1
  11. package/dist/command-history/CommandHistory.js +43 -38
  12. package/dist/command-history/CommandHistory.js.map +1 -1
  13. package/dist/command-history/CommandHistoryActions.js +25 -22
  14. package/dist/command-history/CommandHistoryActions.js.map +1 -1
  15. package/dist/command-history/CommandHistoryItem.js +25 -21
  16. package/dist/command-history/CommandHistoryItem.js.map +1 -1
  17. package/dist/command-history/CommandHistoryItemTooltip.js +34 -21
  18. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  19. package/dist/common/Code.js +16 -12
  20. package/dist/common/Code.js.map +1 -1
  21. package/dist/common/ObjectIcon.js +5 -4
  22. package/dist/common/ObjectIcon.js.map +1 -1
  23. package/dist/console-history/ConsoleHistory.js +7 -6
  24. package/dist/console-history/ConsoleHistory.js.map +1 -1
  25. package/dist/console-history/ConsoleHistoryItem.js +35 -28
  26. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  27. package/dist/console-history/ConsoleHistoryItemResult.js +12 -7
  28. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  29. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +41 -30
  30. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  31. package/dist/console-history/ConsoleHistoryResultInProgress.js +15 -11
  32. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  33. package/dist/csv/CsvInputBar.d.ts +1 -1
  34. package/dist/csv/CsvInputBar.d.ts.map +1 -1
  35. package/dist/csv/CsvInputBar.js +80 -60
  36. package/dist/csv/CsvInputBar.js.map +1 -1
  37. package/dist/csv/CsvOverlay.js +74 -50
  38. package/dist/csv/CsvOverlay.js.map +1 -1
  39. package/dist/csv/CsvParser.d.ts +4 -2
  40. package/dist/csv/CsvParser.d.ts.map +1 -1
  41. package/dist/csv/CsvParser.js +21 -7
  42. package/dist/csv/CsvParser.js.map +1 -1
  43. package/dist/csv/CsvTypeParser.d.ts +4 -3
  44. package/dist/csv/CsvTypeParser.d.ts.map +1 -1
  45. package/dist/csv/CsvTypeParser.js +16 -7
  46. package/dist/csv/CsvTypeParser.js.map +1 -1
  47. package/dist/csv/ZipStreamHelper.d.ts +14 -0
  48. package/dist/csv/ZipStreamHelper.d.ts.map +1 -0
  49. package/dist/csv/ZipStreamHelper.js +15 -0
  50. package/dist/csv/ZipStreamHelper.js.map +1 -0
  51. package/dist/log/LogLevelMenuItem.js +9 -6
  52. package/dist/log/LogLevelMenuItem.js.map +1 -1
  53. package/dist/log/LogView.js +51 -42
  54. package/dist/log/LogView.js.map +1 -1
  55. package/dist/notebook/Editor.js +2 -1
  56. package/dist/notebook/Editor.js.map +1 -1
  57. package/dist/notebook/ScriptEditor.js +27 -18
  58. package/dist/notebook/ScriptEditor.js.map +1 -1
  59. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"CsvTypeParser.js","names":["assertNotNull","Papa","NewTableColumnTypes","UNKNOWN","MAX_INT","MIN_INT","DATE_TIME_REGEX","LOCAL_TIME_REGEX","CsvTypeParser","determineType","value","type","nullString","STRING","INTEGER","checkInteger","LONG","checkLong","DOUBLE","checkDouble","BOOLEAN","checkBoolean","DATE_TIME","checkDateTime","LOCAL_TIME","checkLocalTime","getTypeFromUnknown","isNotParsableNumber","s","isNaN","noCommas","replace","getNumberType","includes","lower","toLowerCase","test","maxIntLength","startsWith","length","intValue","parseInt","constructor","onFileCompleted","file","readHeaders","parentConfig","onProgress","onError","totalChunks","isZip","shouldTrim","chunks","zipProgress","handleChunk","bind","handleComplete","handleError","handleNodeUpdate","config","error","chunk","complete","parse","toParse","nodeStream","result","parser","data","types","abort","Array","fill","slice","cloneTypes","forEach","row","i","trim","progress","Math","round","isCancelled","results","meta","aborted","map","metadata","percent"],"sources":["../../src/csv/CsvTypeParser.ts"],"sourcesContent":["import type { JSZipObject } from 'jszip';\nimport { assertNotNull } from '@deephaven/utils';\nimport Papa, { Parser, ParseResult, ParseLocalConfig } from 'papaparse';\n// Intentionally using isNaN rather than Number.isNaN\n/* eslint-disable no-restricted-globals */\nimport NewTableColumnTypes from './NewTableColumnTypes';\n\n// Initially column types start as unknown\nconst UNKNOWN = 'unknown';\n\nconst MAX_INT = 2147483647;\nconst MIN_INT = -2147483648;\n\nconst DATE_TIME_REGEX =\n /^[0-9]{4}-[0-1][0-9]-[0-3][0-9][ T][0-2][0-9]:[0-5][0-9]:[0-6][0-9](?:\\.[0-9]{1,9})?(?: [a-zA-Z]+)?$/;\nconst LOCAL_TIME_REGEX =\n /^([0-9]+T)?([0-9]+):([0-9]+)(:[0-9]+)?(?:\\.[0-9]{1,9})?$/;\n\n/**\n * Determines the type of each column in a CSV file by parsing it and looking at every value.\n */\nclass CsvTypeParser {\n static determineType(\n value: string,\n type: string,\n nullString: string | null\n ): string {\n if (!value || value === nullString) {\n // A null tells us nothing about the type\n return type;\n }\n\n switch (type) {\n case NewTableColumnTypes.STRING:\n // Strings never get promoted\n return NewTableColumnTypes.STRING;\n case NewTableColumnTypes.INTEGER:\n return CsvTypeParser.checkInteger(value);\n case NewTableColumnTypes.LONG:\n return CsvTypeParser.checkLong(value);\n case NewTableColumnTypes.DOUBLE:\n return CsvTypeParser.checkDouble(value);\n case NewTableColumnTypes.BOOLEAN:\n return CsvTypeParser.checkBoolean(value);\n case NewTableColumnTypes.DATE_TIME:\n return CsvTypeParser.checkDateTime(value);\n case NewTableColumnTypes.LOCAL_TIME:\n return CsvTypeParser.checkLocalTime(value);\n default:\n return CsvTypeParser.getTypeFromUnknown(value);\n }\n }\n\n // Allows for cusomt rules in addition to isNaN\n static isNotParsableNumber(s: string): boolean {\n return (\n isNaN(s as unknown as number) || s === 'Infinity' || s === '-Infinity'\n );\n }\n\n static checkInteger(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static checkLong(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n if (noCommas.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n return NewTableColumnTypes.LONG;\n }\n\n static checkDouble(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return NewTableColumnTypes.DOUBLE;\n }\n\n static checkBoolean(value: string): string {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n return NewTableColumnTypes.STRING;\n }\n\n static checkDateTime(value: string): string {\n if (DATE_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static checkLocalTime(value: string): string {\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static getTypeFromUnknown(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n\n if (DATE_TIME_REGEX.test(value) && value.includes(':')) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static getNumberType(value: string): string {\n if (value.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n // Fast length check\n const maxIntLength = value.startsWith('-') ? 11 : 10;\n if (value.length > maxIntLength) {\n return NewTableColumnTypes.LONG;\n }\n\n // Slower parseInt check\n const intValue = parseInt(value, 10);\n if (intValue > MAX_INT || intValue < MIN_INT) {\n return NewTableColumnTypes.LONG;\n }\n\n return NewTableColumnTypes.INTEGER;\n }\n\n constructor(\n onFileCompleted: (types: string[]) => void,\n file: Blob | JSZipObject,\n readHeaders: boolean,\n parentConfig: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>,\n nullString: string | null,\n onProgress: (progressValue: number) => boolean,\n onError: (e: unknown) => void,\n totalChunks: number,\n isZip: boolean,\n shouldTrim: boolean\n ) {\n this.onFileCompleted = onFileCompleted;\n this.file = file;\n this.readHeaders = readHeaders;\n this.nullString = nullString;\n this.onProgress = onProgress;\n this.onError = onError;\n this.chunks = 0;\n this.totalChunks = totalChunks;\n this.isZip = isZip;\n this.shouldTrim = shouldTrim;\n this.zipProgress = 0;\n\n this.handleChunk = this.handleChunk.bind(this);\n this.handleComplete = this.handleComplete.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleNodeUpdate = this.handleNodeUpdate.bind(this);\n\n this.config = {\n ...parentConfig,\n error: this.handleError,\n chunk: this.handleChunk,\n complete: this.handleComplete,\n };\n }\n\n onFileCompleted: (types: string[]) => void;\n\n file: Blob | JSZipObject;\n\n readHeaders: boolean;\n\n nullString: string | null;\n\n onProgress: (progressValue: number) => boolean;\n\n onError: (e: unknown) => void;\n\n types?: string[];\n\n chunks: number;\n\n totalChunks: number;\n\n isZip: boolean;\n\n shouldTrim: boolean;\n\n zipProgress: number;\n\n config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;\n\n parse(): void {\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 Papa.parse(toParse, this.config);\n }\n\n handleChunk(result: ParseResult<string[]>, parser: Parser): void {\n let { data } = result;\n if (!this.types) {\n if (data == null || data.length === 0) {\n parser.abort();\n this.onError('Error parsing CSV: no data in file.');\n return;\n }\n this.types = new Array(data[0].length).fill(UNKNOWN);\n if (this.readHeaders) {\n // If headers are being read from the file, remove them from type analysis\n data = data.slice(1);\n }\n }\n\n assertNotNull(this.types);\n\n const cloneTypes = [...this.types];\n\n data.forEach(row => {\n if (row.length >= cloneTypes.length) {\n for (let i = 0; i < cloneTypes.length; i += 1) {\n cloneTypes[i] = CsvTypeParser.determineType(\n this.shouldTrim ? row[i].trim() : row[i],\n cloneTypes[i],\n this.nullString\n );\n }\n this.types = cloneTypes;\n } else {\n parser.abort();\n this.onError(\n `Error parsing CSV: Insufficient data in row.\\nExpected length ${cloneTypes.length} but found ${row.length}.\\nRow = ${row}`\n );\n }\n });\n\n this.chunks += 1;\n // 50 because the type parsing accounts for 50% of the parsing\n let progress = 0;\n if (this.totalChunks > 0) {\n progress = Math.round((this.chunks / this.totalChunks) * 50);\n } else {\n progress = Math.round(this.zipProgress / 2);\n }\n const isCancelled = this.onProgress(progress);\n if (isCancelled) {\n parser.abort();\n }\n }\n\n handleComplete(results: ParseResult<unknown>): void {\n const { types, onFileCompleted } = this;\n // results is undefined for a succesful parse, but has meta data for an abort\n assertNotNull(types);\n if (results == null || !results.meta.aborted) {\n onFileCompleted(\n types.map(type =>\n // If the type is still unknown or a local time, just map it to a string.\n // Local times are not supported by the backend in DHC, and probably should have more context to parse safely anyway (such as a date or a time zone).\n // In these cases, we just map it to a string, and the user can use an `.update_view` later if they want to parse it into a different type.\n type === UNKNOWN || type === NewTableColumnTypes.LOCAL_TIME\n ? NewTableColumnTypes.STRING\n : type\n )\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 CsvTypeParser;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CsvTypeParser.js","names":["assertNotNull","Papa","NewTableColumnTypes","makeZipStreamHelper","UNKNOWN","MAX_INT","MIN_INT","DATE_TIME_REGEX","LOCAL_TIME_REGEX","CsvTypeParser","determineType","value","type","nullString","STRING","INTEGER","checkInteger","LONG","checkLong","DOUBLE","checkDouble","BOOLEAN","checkBoolean","DATE_TIME","checkDateTime","LOCAL_TIME","checkLocalTime","getTypeFromUnknown","isNotParsableNumber","s","isNaN","noCommas","replace","getNumberType","includes","lower","toLowerCase","test","maxIntLength","startsWith","length","intValue","parseInt","constructor","onFileCompleted","file","readHeaders","parentConfig","onProgress","onError","totalChunks","isZip","shouldTrim","chunks","rowCount","zipProgress","handleChunk","bind","handleComplete","handleError","handleNodeUpdate","config","error","chunk","complete","parse","File","Blob","zipStream","resume","result","parser","data","types","abort","Array","fill","slice","cloneTypes","forEach","row","i","trim","progress","Math","round","isCancelled","results","meta","aborted","map","metadata","percent"],"sources":["../../src/csv/CsvTypeParser.ts"],"sourcesContent":["import type { JSZipObject } from 'jszip';\nimport { assertNotNull } from '@deephaven/utils';\nimport Papa, { Parser, ParseResult, ParseLocalConfig } from 'papaparse';\n// Intentionally using isNaN rather than Number.isNaN\n/* eslint-disable no-restricted-globals */\nimport NewTableColumnTypes from './NewTableColumnTypes';\nimport makeZipStreamHelper from './ZipStreamHelper';\n\n// Initially column types start as unknown\nconst UNKNOWN = 'unknown';\n\nconst MAX_INT = 2147483647;\nconst MIN_INT = -2147483648;\n\nconst DATE_TIME_REGEX =\n /^[0-9]{4}-[0-1][0-9]-[0-3][0-9][ T][0-2][0-9]:[0-5][0-9]:[0-6][0-9](?:\\.[0-9]{1,9})?(?: [a-zA-Z]+)?$/;\nconst LOCAL_TIME_REGEX =\n /^([0-9]+T)?([0-9]+):([0-9]+)(:[0-9]+)?(?:\\.[0-9]{1,9})?$/;\n\n/**\n * Determines the type of each column in a CSV file by parsing it and looking at every value.\n */\nclass CsvTypeParser {\n static determineType(\n value: string,\n type: string,\n nullString: string | null\n ): string {\n if (!value || value === nullString) {\n // A null tells us nothing about the type\n return type;\n }\n\n switch (type) {\n case NewTableColumnTypes.STRING:\n // Strings never get promoted\n return NewTableColumnTypes.STRING;\n case NewTableColumnTypes.INTEGER:\n return CsvTypeParser.checkInteger(value);\n case NewTableColumnTypes.LONG:\n return CsvTypeParser.checkLong(value);\n case NewTableColumnTypes.DOUBLE:\n return CsvTypeParser.checkDouble(value);\n case NewTableColumnTypes.BOOLEAN:\n return CsvTypeParser.checkBoolean(value);\n case NewTableColumnTypes.DATE_TIME:\n return CsvTypeParser.checkDateTime(value);\n case NewTableColumnTypes.LOCAL_TIME:\n return CsvTypeParser.checkLocalTime(value);\n default:\n return CsvTypeParser.getTypeFromUnknown(value);\n }\n }\n\n // Allows for cusomt rules in addition to isNaN\n static isNotParsableNumber(s: string): boolean {\n return (\n isNaN(s as unknown as number) || s === 'Infinity' || s === '-Infinity'\n );\n }\n\n static checkInteger(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static checkLong(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n if (noCommas.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n return NewTableColumnTypes.LONG;\n }\n\n static checkDouble(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return NewTableColumnTypes.DOUBLE;\n }\n\n static checkBoolean(value: string): string {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n return NewTableColumnTypes.STRING;\n }\n\n static checkDateTime(value: string): string {\n if (DATE_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static checkLocalTime(value: string): string {\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static getTypeFromUnknown(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n\n if (DATE_TIME_REGEX.test(value) && value.includes(':')) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static getNumberType(value: string): string {\n if (value.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n // Fast length check\n const maxIntLength = value.startsWith('-') ? 11 : 10;\n if (value.length > maxIntLength) {\n return NewTableColumnTypes.LONG;\n }\n\n // Slower parseInt check\n const intValue = parseInt(value, 10);\n if (intValue > MAX_INT || intValue < MIN_INT) {\n return NewTableColumnTypes.LONG;\n }\n\n return NewTableColumnTypes.INTEGER;\n }\n\n constructor(\n onFileCompleted: (types: string[], rowCount: number) => void,\n file: File | Blob | JSZipObject,\n readHeaders: boolean,\n parentConfig: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>,\n nullString: string | null,\n onProgress: (progressValue: number) => boolean,\n onError: (e: unknown) => void,\n totalChunks: number,\n isZip: boolean,\n shouldTrim: boolean\n ) {\n this.onFileCompleted = onFileCompleted;\n this.file = file;\n this.readHeaders = readHeaders;\n this.nullString = nullString;\n this.onProgress = onProgress;\n this.onError = onError;\n this.chunks = 0;\n this.totalChunks = totalChunks;\n this.rowCount = 0;\n this.isZip = isZip;\n this.shouldTrim = shouldTrim;\n this.zipProgress = 0;\n\n this.handleChunk = this.handleChunk.bind(this);\n this.handleComplete = this.handleComplete.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleNodeUpdate = this.handleNodeUpdate.bind(this);\n\n this.config = {\n ...parentConfig,\n error: this.handleError,\n chunk: this.handleChunk,\n complete: this.handleComplete,\n };\n }\n\n onFileCompleted: (types: string[], rowCount: number) => void;\n\n file: File | Blob | JSZipObject;\n\n readHeaders: boolean;\n\n nullString: string | null;\n\n onProgress: (progressValue: number) => boolean;\n\n onError: (e: unknown) => void;\n\n types?: string[];\n\n chunks: number;\n\n totalChunks: number;\n\n rowCount: number;\n\n isZip: boolean;\n\n shouldTrim: boolean;\n\n zipProgress: number;\n\n config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;\n\n parse(): void {\n if (this.file instanceof File || this.file instanceof Blob) {\n Papa.parse(this.file, this.config);\n } else {\n const zipStream = makeZipStreamHelper(this.file, this.handleNodeUpdate);\n // This is actually a stream, but papaparse TS doesn't like it\n Papa.parse(zipStream as unknown as Blob, this.config);\n // The stream needs to be manually resumed since jszip starts paused\n // Papaparse does not call resume and assumes the stream is already reading\n zipStream.resume();\n }\n }\n\n handleChunk(result: ParseResult<string[]>, parser: Parser): void {\n let { data } = result;\n if (!this.types) {\n if (data == null || data.length === 0) {\n parser.abort();\n this.onError('Error parsing CSV: no data in file.');\n return;\n }\n this.types = new Array(data[0].length).fill(UNKNOWN);\n if (this.readHeaders) {\n // If headers are being read from the file, remove them from type analysis\n data = data.slice(1);\n }\n }\n\n this.rowCount += data.length;\n\n assertNotNull(this.types);\n\n const cloneTypes = [...this.types];\n\n data.forEach(row => {\n if (row.length >= cloneTypes.length) {\n for (let i = 0; i < cloneTypes.length; i += 1) {\n cloneTypes[i] = CsvTypeParser.determineType(\n this.shouldTrim ? row[i].trim() : row[i],\n cloneTypes[i],\n this.nullString\n );\n }\n this.types = cloneTypes;\n } else {\n parser.abort();\n this.onError(\n `Error parsing CSV: Insufficient data in row.\\nExpected length ${cloneTypes.length} but found ${row.length}.\\nRow = ${row}`\n );\n }\n });\n\n this.chunks += 1;\n // 50 because the type parsing accounts for 50% of the parsing\n let progress = 0;\n if (this.totalChunks > 0) {\n progress = Math.round((this.chunks / this.totalChunks) * 50);\n } else {\n progress = Math.round(this.zipProgress / 2);\n }\n const isCancelled = this.onProgress(progress);\n if (isCancelled) {\n parser.abort();\n }\n }\n\n handleComplete(results: ParseResult<unknown>): void {\n const { types, onFileCompleted } = this;\n // results is undefined for a succesful parse, but has meta data for an abort\n assertNotNull(types);\n if (results == null || !results.meta.aborted) {\n onFileCompleted(\n types.map(type =>\n // If the type is still unknown or a local time, just map it to a string.\n // Local times are not supported by the backend in DHC, and probably should have more context to parse safely anyway (such as a date or a time zone).\n // In these cases, we just map it to a string, and the user can use an `.update_view` later if they want to parse it into a different type.\n type === UNKNOWN || type === NewTableColumnTypes.LOCAL_TIME\n ? NewTableColumnTypes.STRING\n : type\n ),\n this.rowCount\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 CsvTypeParser;\n"],"mappings":";;;;;AACA,SAASA,aAAa,QAAQ,kBAAkB;AAChD,OAAOC,IAAI,MAAiD,WAAW;AACvE;AACA;AAAA,OACOC,mBAAmB;AAAA,OACnBC,mBAAmB,8BAE1B;AACA,IAAMC,OAAO,GAAG,SAAS;AAEzB,IAAMC,OAAO,GAAG,UAAU;AAC1B,IAAMC,OAAO,GAAG,CAAC,UAAU;AAE3B,IAAMC,eAAe,GACnB,sGAAsG;AACxG,IAAMC,gBAAgB,GACpB,0DAA0D;;AAE5D;AACA;AACA;AACA,MAAMC,aAAa,CAAC;EAClB,OAAOC,aAAa,CAClBC,KAAa,EACbC,IAAY,EACZC,UAAyB,EACjB;IACR,IAAI,CAACF,KAAK,IAAIA,KAAK,KAAKE,UAAU,EAAE;MAClC;MACA,OAAOD,IAAI;IACb;IAEA,QAAQA,IAAI;MACV,KAAKV,mBAAmB,CAACY,MAAM;QAC7B;QACA,OAAOZ,mBAAmB,CAACY,MAAM;MACnC,KAAKZ,mBAAmB,CAACa,OAAO;QAC9B,OAAON,aAAa,CAACO,YAAY,CAACL,KAAK,CAAC;MAC1C,KAAKT,mBAAmB,CAACe,IAAI;QAC3B,OAAOR,aAAa,CAACS,SAAS,CAACP,KAAK,CAAC;MACvC,KAAKT,mBAAmB,CAACiB,MAAM;QAC7B,OAAOV,aAAa,CAACW,WAAW,CAACT,KAAK,CAAC;MACzC,KAAKT,mBAAmB,CAACmB,OAAO;QAC9B,OAAOZ,aAAa,CAACa,YAAY,CAACX,KAAK,CAAC;MAC1C,KAAKT,mBAAmB,CAACqB,SAAS;QAChC,OAAOd,aAAa,CAACe,aAAa,CAACb,KAAK,CAAC;MAC3C,KAAKT,mBAAmB,CAACuB,UAAU;QACjC,OAAOhB,aAAa,CAACiB,cAAc,CAACf,KAAK,CAAC;MAC5C;QACE,OAAOF,aAAa,CAACkB,kBAAkB,CAAChB,KAAK,CAAC;IAAC;EAErD;;EAEA;EACA,OAAOiB,mBAAmB,CAACC,CAAS,EAAW;IAC7C,OACEC,KAAK,CAACD,CAAC,CAAsB,IAAIA,CAAC,KAAK,UAAU,IAAIA,CAAC,KAAK,WAAW;EAE1E;EAEA,OAAOb,YAAY,CAACL,KAAa,EAAU;IACzC,IAAMoB,QAAQ,GAAGpB,KAAK,CAACqB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC,IAAIvB,aAAa,CAACmB,mBAAmB,CAACG,QAAQ,CAAC,EAAE;MAC/C,OAAO7B,mBAAmB,CAACY,MAAM;IACnC;IAEA,OAAOL,aAAa,CAACwB,aAAa,CAACF,QAAQ,CAAC;EAC9C;EAEA,OAAOb,SAAS,CAACP,KAAa,EAAU;IACtC,IAAMoB,QAAQ,GAAGpB,KAAK,CAACqB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC,IAAIvB,aAAa,CAACmB,mBAAmB,CAACG,QAAQ,CAAC,EAAE;MAC/C,OAAO7B,mBAAmB,CAACY,MAAM;IACnC;IAEA,IAAIiB,QAAQ,CAACG,QAAQ,CAAC,GAAG,CAAC,EAAE;MAC1B,OAAOhC,mBAAmB,CAACiB,MAAM;IACnC;IAEA,OAAOjB,mBAAmB,CAACe,IAAI;EACjC;EAEA,OAAOG,WAAW,CAACT,KAAa,EAAU;IACxC,IAAMoB,QAAQ,GAAGpB,KAAK,CAACqB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC,IAAIvB,aAAa,CAACmB,mBAAmB,CAACG,QAAQ,CAAC,EAAE;MAC/C,OAAO7B,mBAAmB,CAACY,MAAM;IACnC;IAEA,OAAOZ,mBAAmB,CAACiB,MAAM;EACnC;EAEA,OAAOG,YAAY,CAACX,KAAa,EAAU;IACzC,IAAMwB,KAAK,GAAGxB,KAAK,CAACyB,WAAW,EAAE;IACjC,IAAID,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,OAAO,EAAE;MACzC,OAAOjC,mBAAmB,CAACmB,OAAO;IACpC;IACA,OAAOnB,mBAAmB,CAACY,MAAM;EACnC;EAEA,OAAOU,aAAa,CAACb,KAAa,EAAU;IAC1C,IAAIJ,eAAe,CAAC8B,IAAI,CAAC1B,KAAK,CAAC,EAAE;MAC/B,OAAOT,mBAAmB,CAACqB,SAAS;IACtC;IAEA,OAAOrB,mBAAmB,CAACY,MAAM;EACnC;EAEA,OAAOY,cAAc,CAACf,KAAa,EAAU;IAC3C,IAAIH,gBAAgB,CAAC6B,IAAI,CAAC1B,KAAK,CAAC,EAAE;MAChC,OAAOT,mBAAmB,CAACuB,UAAU;IACvC;IAEA,OAAOvB,mBAAmB,CAACY,MAAM;EACnC;EAEA,OAAOa,kBAAkB,CAAChB,KAAa,EAAU;IAC/C,IAAMoB,QAAQ,GAAGpB,KAAK,CAACqB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC,IAAIvB,aAAa,CAACmB,mBAAmB,CAACG,QAAQ,CAAC,EAAE;MAC/C,IAAMI,KAAK,GAAGxB,KAAK,CAACyB,WAAW,EAAE;MACjC,IAAID,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,OAAO,EAAE;QACzC,OAAOjC,mBAAmB,CAACmB,OAAO;MACpC;MAEA,IAAId,eAAe,CAAC8B,IAAI,CAAC1B,KAAK,CAAC,IAAIA,KAAK,CAACuB,QAAQ,CAAC,GAAG,CAAC,EAAE;QACtD,OAAOhC,mBAAmB,CAACqB,SAAS;MACtC;MAEA,IAAIf,gBAAgB,CAAC6B,IAAI,CAAC1B,KAAK,CAAC,EAAE;QAChC,OAAOT,mBAAmB,CAACuB,UAAU;MACvC;MAEA,OAAOvB,mBAAmB,CAACY,MAAM;IACnC;IAEA,OAAOL,aAAa,CAACwB,aAAa,CAACF,QAAQ,CAAC;EAC9C;EAEA,OAAOE,aAAa,CAACtB,KAAa,EAAU;IAC1C,IAAIA,KAAK,CAACuB,QAAQ,CAAC,GAAG,CAAC,EAAE;MACvB,OAAOhC,mBAAmB,CAACiB,MAAM;IACnC;;IAEA;IACA,IAAMmB,YAAY,GAAG3B,KAAK,CAAC4B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;IACpD,IAAI5B,KAAK,CAAC6B,MAAM,GAAGF,YAAY,EAAE;MAC/B,OAAOpC,mBAAmB,CAACe,IAAI;IACjC;;IAEA;IACA,IAAMwB,QAAQ,GAAGC,QAAQ,CAAC/B,KAAK,EAAE,EAAE,CAAC;IACpC,IAAI8B,QAAQ,GAAGpC,OAAO,IAAIoC,QAAQ,GAAGnC,OAAO,EAAE;MAC5C,OAAOJ,mBAAmB,CAACe,IAAI;IACjC;IAEA,OAAOf,mBAAmB,CAACa,OAAO;EACpC;EAEA4B,WAAW,CACTC,eAA4D,EAC5DC,IAA+B,EAC/BC,WAAoB,EACpBC,YAAqE,EACrElC,UAAyB,EACzBmC,UAA8C,EAC9CC,OAA6B,EAC7BC,WAAmB,EACnBC,KAAc,EACdC,UAAmB,EACnB;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IACA,IAAI,CAACR,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACjC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACmC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACI,MAAM,GAAG,CAAC;IACf,IAAI,CAACH,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACI,QAAQ,GAAG,CAAC;IACjB,IAAI,CAACH,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACG,WAAW,GAAG,CAAC;IAEpB,IAAI,CAACC,WAAW,GAAG,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,cAAc,GAAG,IAAI,CAACA,cAAc,CAACD,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACH,IAAI,CAAC,IAAI,CAAC;IAExD,IAAI,CAACI,MAAM,mCACNd,YAAY;MACfe,KAAK,EAAE,IAAI,CAACH,WAAW;MACvBI,KAAK,EAAE,IAAI,CAACP,WAAW;MACvBQ,QAAQ,EAAE,IAAI,CAACN;IAAc,EAC9B;EACH;EA8BAO,KAAK,GAAS;IACZ,IAAI,IAAI,CAACpB,IAAI,YAAYqB,IAAI,IAAI,IAAI,CAACrB,IAAI,YAAYsB,IAAI,EAAE;MAC1DlE,IAAI,CAACgE,KAAK,CAAC,IAAI,CAACpB,IAAI,EAAE,IAAI,CAACgB,MAAM,CAAC;IACpC,CAAC,MAAM;MACL,IAAMO,SAAS,GAAGjE,mBAAmB,CAAC,IAAI,CAAC0C,IAAI,EAAE,IAAI,CAACe,gBAAgB,CAAC;MACvE;MACA3D,IAAI,CAACgE,KAAK,CAACG,SAAS,EAAqB,IAAI,CAACP,MAAM,CAAC;MACrD;MACA;MACAO,SAAS,CAACC,MAAM,EAAE;IACpB;EACF;EAEAb,WAAW,CAACc,MAA6B,EAAEC,MAAc,EAAQ;IAC/D,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IACrB,IAAI,CAAC,IAAI,CAACG,KAAK,EAAE;MACf,IAAID,IAAI,IAAI,IAAI,IAAIA,IAAI,CAAChC,MAAM,KAAK,CAAC,EAAE;QACrC+B,MAAM,CAACG,KAAK,EAAE;QACd,IAAI,CAACzB,OAAO,CAAC,qCAAqC,CAAC;QACnD;MACF;MACA,IAAI,CAACwB,KAAK,GAAG,IAAIE,KAAK,CAACH,IAAI,CAAC,CAAC,CAAC,CAAChC,MAAM,CAAC,CAACoC,IAAI,CAACxE,OAAO,CAAC;MACpD,IAAI,IAAI,CAAC0C,WAAW,EAAE;QACpB;QACA0B,IAAI,GAAGA,IAAI,CAACK,KAAK,CAAC,CAAC,CAAC;MACtB;IACF;IAEA,IAAI,CAACvB,QAAQ,IAAIkB,IAAI,CAAChC,MAAM;IAE5BxC,aAAa,CAAC,IAAI,CAACyE,KAAK,CAAC;IAEzB,IAAMK,UAAU,GAAG,CAAC,GAAG,IAAI,CAACL,KAAK,CAAC;IAElCD,IAAI,CAACO,OAAO,CAACC,GAAG,IAAI;MAClB,IAAIA,GAAG,CAACxC,MAAM,IAAIsC,UAAU,CAACtC,MAAM,EAAE;QACnC,KAAK,IAAIyC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,UAAU,CAACtC,MAAM,EAAEyC,CAAC,IAAI,CAAC,EAAE;UAC7CH,UAAU,CAACG,CAAC,CAAC,GAAGxE,aAAa,CAACC,aAAa,CACzC,IAAI,CAAC0C,UAAU,GAAG4B,GAAG,CAACC,CAAC,CAAC,CAACC,IAAI,EAAE,GAAGF,GAAG,CAACC,CAAC,CAAC,EACxCH,UAAU,CAACG,CAAC,CAAC,EACb,IAAI,CAACpE,UAAU,CAChB;QACH;QACA,IAAI,CAAC4D,KAAK,GAAGK,UAAU;MACzB,CAAC,MAAM;QACLP,MAAM,CAACG,KAAK,EAAE;QACd,IAAI,CAACzB,OAAO,yEACuD6B,UAAU,CAACtC,MAAM,wBAAcwC,GAAG,CAACxC,MAAM,sBAAYwC,GAAG,EAC1H;MACH;IACF,CAAC,CAAC;IAEF,IAAI,CAAC3B,MAAM,IAAI,CAAC;IAChB;IACA,IAAI8B,QAAQ,GAAG,CAAC;IAChB,IAAI,IAAI,CAACjC,WAAW,GAAG,CAAC,EAAE;MACxBiC,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAAE,IAAI,CAAChC,MAAM,GAAG,IAAI,CAACH,WAAW,GAAI,EAAE,CAAC;IAC9D,CAAC,MAAM;MACLiC,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC9B,WAAW,GAAG,CAAC,CAAC;IAC7C;IACA,IAAM+B,WAAW,GAAG,IAAI,CAACtC,UAAU,CAACmC,QAAQ,CAAC;IAC7C,IAAIG,WAAW,EAAE;MACff,MAAM,CAACG,KAAK,EAAE;IAChB;EACF;EAEAhB,cAAc,CAAC6B,OAA6B,EAAQ;IAClD,IAAM;MAAEd,KAAK;MAAE7B;IAAgB,CAAC,GAAG,IAAI;IACvC;IACA5C,aAAa,CAACyE,KAAK,CAAC;IACpB,IAAIc,OAAO,IAAI,IAAI,IAAI,CAACA,OAAO,CAACC,IAAI,CAACC,OAAO,EAAE;MAC5C7C,eAAe,CACb6B,KAAK,CAACiB,GAAG,CAAC9E,IAAI;MACZ;MACA;MACA;MACAA,IAAI,KAAKR,OAAO,IAAIQ,IAAI,KAAKV,mBAAmB,CAACuB,UAAU,GACvDvB,mBAAmB,CAACY,MAAM,GAC1BF,IAAI,CACT,EACD,IAAI,CAAC0C,QAAQ,CACd;IACH;EACF;EAEAK,WAAW,CAACG,KAAc,EAAQ;IAChC,IAAM;MAAEb;IAAQ,CAAC,GAAG,IAAI;IACxBA,OAAO,CAACa,KAAK,CAAC;EAChB;EAEAF,gBAAgB,CAAC+B,QAA6B,EAAQ;IACpD,IAAI,CAACpC,WAAW,GAAGoC,QAAQ,CAACC,OAAO;EACrC;AACF;AAEA,eAAenF,aAAa"}
@@ -0,0 +1,14 @@
1
+ import type { JSZipObject, OnUpdateCallback, JSZipStreamHelper } from 'jszip';
2
+ /**
3
+ * This is used to help papaparse understand our stream.
4
+ * It uses these fields for feature detection, but never actually calls read()
5
+ * https://github.com/mholt/PapaParse/blob/master/papaparse.js#L244
6
+ */
7
+ interface ZipStreamHelper extends JSZipStreamHelper<string> {
8
+ readable: boolean;
9
+ read(): void;
10
+ removeListener(): void;
11
+ }
12
+ export default function makeZipStreamHelper(zipObj: JSZipObject, onUpdate: OnUpdateCallback): ZipStreamHelper;
13
+ export {};
14
+ //# sourceMappingURL=ZipStreamHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZipStreamHelper.d.ts","sourceRoot":"","sources":["../../src/csv/ZipStreamHelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9E;;;;GAIG;AACH,UAAU,eAAgB,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IACzD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,IAAI,IAAI,CAAC;IACb,cAAc,IAAI,IAAI,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,gBAAgB,mBAiB3B"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This is used to help papaparse understand our stream.
3
+ * It uses these fields for feature detection, but never actually calls read()
4
+ * https://github.com/mholt/PapaParse/blob/master/papaparse.js#L244
5
+ */
6
+
7
+ export default function makeZipStreamHelper(zipObj, onUpdate) {
8
+ var helper = zipObj.internalStream('string');
9
+ helper.readable = true;
10
+ helper.read = () => false;
11
+ helper.removeListener = () => false;
12
+ helper.on('data', (_, metadata) => onUpdate(metadata));
13
+ return helper;
14
+ }
15
+ //# sourceMappingURL=ZipStreamHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZipStreamHelper.js","names":["makeZipStreamHelper","zipObj","onUpdate","helper","internalStream","readable","read","removeListener","on","_","metadata"],"sources":["../../src/csv/ZipStreamHelper.ts"],"sourcesContent":["import type { JSZipObject, OnUpdateCallback, JSZipStreamHelper } from 'jszip';\n\n/**\n * This is used to help papaparse understand our stream.\n * It uses these fields for feature detection, but never actually calls read()\n * https://github.com/mholt/PapaParse/blob/master/papaparse.js#L244\n */\ninterface ZipStreamHelper extends JSZipStreamHelper<string> {\n readable: boolean;\n read(): void;\n removeListener(): void;\n}\n\nexport default function makeZipStreamHelper(\n zipObj: JSZipObject,\n onUpdate: OnUpdateCallback\n) {\n const helper: ZipStreamHelper = (\n zipObj as JSZipObject & {\n // The type could be anything except nodebuffer from https://stuk.github.io/jszip/documentation/api_zipobject/internal_stream.html\n // We only need it as a string though\n // JSZip types don't include this method for some reason\n internalStream(type: 'string'): JSZipStreamHelper<string>;\n }\n ).internalStream('string') as ZipStreamHelper;\n\n helper.readable = true;\n helper.read = () => false;\n helper.removeListener = () => false;\n helper.on('data', (_, metadata) => onUpdate(metadata));\n\n return helper;\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;;AAOA,eAAe,SAASA,mBAAmB,CACzCC,MAAmB,EACnBC,QAA0B,EAC1B;EACA,IAAMC,MAAuB,GAC3BF,MAAM,CAMNG,cAAc,CAAC,QAAQ,CAAoB;EAE7CD,MAAM,CAACE,QAAQ,GAAG,IAAI;EACtBF,MAAM,CAACG,IAAI,GAAG,MAAM,KAAK;EACzBH,MAAM,CAACI,cAAc,GAAG,MAAM,KAAK;EACnCJ,MAAM,CAACK,EAAE,CAAC,MAAM,EAAE,CAACC,CAAC,EAAEC,QAAQ,KAAKR,QAAQ,CAACQ,QAAQ,CAAC,CAAC;EAEtD,OAAOP,MAAM;AACf"}
@@ -3,6 +3,8 @@ import React, { PureComponent } from 'react';
3
3
  import classNames from 'classnames';
4
4
  import { UISwitch } from '@deephaven/components';
5
5
  import "./LogLevelMenuItem.css";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
8
  class LogLevelMenuItem extends PureComponent {
7
9
  constructor(props) {
8
10
  super(props);
@@ -20,12 +22,13 @@ class LogLevelMenuItem extends PureComponent {
20
22
  logLevel,
21
23
  on
22
24
  } = this.props;
23
- return /*#__PURE__*/React.createElement("div", {
24
- className: classNames('log-level-menu-item', logLevel)
25
- }, /*#__PURE__*/React.createElement(UISwitch, {
26
- on: on,
27
- onClick: this.handleSwitchClick
28
- }), logLevel);
25
+ return /*#__PURE__*/_jsxs("div", {
26
+ className: classNames('log-level-menu-item', logLevel),
27
+ children: [/*#__PURE__*/_jsx(UISwitch, {
28
+ on: on,
29
+ onClick: this.handleSwitchClick
30
+ }), logLevel]
31
+ });
29
32
  }
30
33
  }
31
34
  export default LogLevelMenuItem;
@@ -1 +1 @@
1
- {"version":3,"file":"LogLevelMenuItem.js","names":["React","PureComponent","classNames","UISwitch","LogLevelMenuItem","constructor","props","handleSwitchClick","bind","logLevel","onClick","render","on"],"sources":["../../src/log/LogLevelMenuItem.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { UISwitch } from '@deephaven/components';\nimport './LogLevelMenuItem.scss';\n\ninterface LogLevelMenuItemProps {\n logLevel: string;\n on: boolean;\n onClick: (logLevel: string) => void;\n}\n\nclass LogLevelMenuItem extends PureComponent<\n LogLevelMenuItemProps,\n Record<string, never>\n> {\n constructor(props: LogLevelMenuItemProps) {\n super(props);\n\n this.handleSwitchClick = this.handleSwitchClick.bind(this);\n }\n\n handleSwitchClick(): void {\n const { logLevel, onClick } = this.props;\n onClick(logLevel);\n }\n\n render(): ReactElement {\n const { logLevel, on } = this.props;\n return (\n <div className={classNames('log-level-menu-item', logLevel)}>\n <UISwitch on={on} onClick={this.handleSwitchClick} />\n {logLevel}\n </div>\n );\n }\n}\n\nexport default LogLevelMenuItem;\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC;AASjD,MAAMC,gBAAgB,SAASH,aAAa,CAG1C;EACAI,WAAW,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;EAC5D;EAEAD,iBAAiB,GAAS;IACxB,IAAM;MAAEE,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IACxCI,OAAO,CAACD,QAAQ,CAAC;EACnB;EAEAE,MAAM,GAAiB;IACrB,IAAM;MAAEF,QAAQ;MAAEG;IAAG,CAAC,GAAG,IAAI,CAACN,KAAK;IACnC,oBACE;MAAK,SAAS,EAAEJ,UAAU,CAAC,qBAAqB,EAAEO,QAAQ;IAAE,gBAC1D,oBAAC,QAAQ;MAAC,EAAE,EAAEG,EAAG;MAAC,OAAO,EAAE,IAAI,CAACL;IAAkB,EAAG,EACpDE,QAAQ,CACL;EAEV;AACF;AAEA,eAAeL,gBAAgB"}
1
+ {"version":3,"file":"LogLevelMenuItem.js","names":["React","PureComponent","classNames","UISwitch","LogLevelMenuItem","constructor","props","handleSwitchClick","bind","logLevel","onClick","render","on"],"sources":["../../src/log/LogLevelMenuItem.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { UISwitch } from '@deephaven/components';\nimport './LogLevelMenuItem.scss';\n\ninterface LogLevelMenuItemProps {\n logLevel: string;\n on: boolean;\n onClick: (logLevel: string) => void;\n}\n\nclass LogLevelMenuItem extends PureComponent<\n LogLevelMenuItemProps,\n Record<string, never>\n> {\n constructor(props: LogLevelMenuItemProps) {\n super(props);\n\n this.handleSwitchClick = this.handleSwitchClick.bind(this);\n }\n\n handleSwitchClick(): void {\n const { logLevel, onClick } = this.props;\n onClick(logLevel);\n }\n\n render(): ReactElement {\n const { logLevel, on } = this.props;\n return (\n <div className={classNames('log-level-menu-item', logLevel)}>\n <UISwitch on={on} onClick={this.handleSwitchClick} />\n {logLevel}\n </div>\n );\n }\n}\n\nexport default LogLevelMenuItem;\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC;AAAA;AAAA;AASjD,MAAMC,gBAAgB,SAASH,aAAa,CAG1C;EACAI,WAAW,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;EAC5D;EAEAD,iBAAiB,GAAS;IACxB,IAAM;MAAEE,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IACxCI,OAAO,CAACD,QAAQ,CAAC;EACnB;EAEAE,MAAM,GAAiB;IACrB,IAAM;MAAEF,QAAQ;MAAEG;IAAG,CAAC,GAAG,IAAI,CAACN,KAAK;IACnC,oBACE;MAAK,SAAS,EAAEJ,UAAU,CAAC,qBAAqB,EAAEO,QAAQ,CAAE;MAAA,wBAC1D,KAAC,QAAQ;QAAC,EAAE,EAAEG,EAAG;QAAC,OAAO,EAAE,IAAI,CAACL;MAAkB,EAAG,EACpDE,QAAQ;IAAA,EACL;EAEV;AACF;AAEA,eAAeL,gBAAgB"}
@@ -13,6 +13,8 @@ import LogLevel from "./LogLevel.js";
13
13
  import "./LogView.css";
14
14
  import LogLevelMenuItem from "./LogLevelMenuItem.js";
15
15
  import { MonacoUtils } from "../monaco/index.js";
16
+ import { jsx as _jsx } from "react/jsx-runtime";
17
+ import { jsxs as _jsxs } from "react/jsx-runtime";
16
18
  /**
17
19
  * Log view contents. Uses a monaco editor to display/search the contents of the log.
18
20
  */
@@ -84,9 +86,10 @@ class LogView extends PureComponent {
84
86
  var _this = this;
85
87
  var actions = [];
86
88
  actions.push({
87
- menuElement: /*#__PURE__*/React.createElement("div", {
88
- className: "log-level-menu-title"
89
- }, "Display Log Levels"),
89
+ menuElement: /*#__PURE__*/_jsx("div", {
90
+ className: "log-level-menu-title",
91
+ children: "Display Log Levels"
92
+ }),
90
93
  group: 1,
91
94
  order: 10
92
95
  });
@@ -97,7 +100,7 @@ class LogView extends PureComponent {
97
100
  title: logLevel,
98
101
  group: 1,
99
102
  order: i + 100,
100
- menuElement: /*#__PURE__*/React.createElement(LogLevelMenuItem, {
103
+ menuElement: /*#__PURE__*/_jsx(LogLevelMenuItem, {
101
104
  logLevel: logLevel,
102
105
  on: on,
103
106
  onClick: _this.handleMenuItemClick,
@@ -115,16 +118,19 @@ class LogView extends PureComponent {
115
118
  actions.push({
116
119
  group: 1,
117
120
  order: 1000,
118
- menuElement: /*#__PURE__*/React.createElement("div", {
119
- className: "log-level-menu-controls"
120
- }, /*#__PURE__*/React.createElement(Button, {
121
- kind: "ghost",
122
- className: "log-level-toggle-all",
123
- onClick: this.handleToggleAllClick
124
- }, "Toggle All"), /*#__PURE__*/React.createElement(Button, {
125
- kind: "ghost",
126
- onClick: this.handleResetClick
127
- }, "Reset"))
121
+ menuElement: /*#__PURE__*/_jsxs("div", {
122
+ className: "log-level-menu-controls",
123
+ children: [/*#__PURE__*/_jsx(Button, {
124
+ kind: "ghost",
125
+ className: "log-level-toggle-all",
126
+ onClick: this.handleToggleAllClick,
127
+ children: "Toggle All"
128
+ }), /*#__PURE__*/_jsx(Button, {
129
+ kind: "ghost",
130
+ onClick: this.handleResetClick,
131
+ children: "Reset"
132
+ })]
133
+ })
128
134
  });
129
135
  return actions;
130
136
  }
@@ -450,34 +456,37 @@ class LogView extends PureComponent {
450
456
  shownLogLevels
451
457
  } = this.state;
452
458
  var actions = this.getMenuActions(shownLogLevels);
453
- return /*#__PURE__*/React.createElement("div", {
454
- className: "log-pane h-100 w-100"
455
- }, /*#__PURE__*/React.createElement("div", {
456
- className: "log-pane-menu"
457
- }, /*#__PURE__*/React.createElement(Button, {
458
- kind: "ghost",
459
- className: "btn-clear-logs",
460
- onClick: this.handleClearClick,
461
- icon: dhTrashUndo,
462
- tooltip: "Clear log"
463
- }), /*#__PURE__*/React.createElement(Button, {
464
- kind: "ghost",
465
- className: "btn-link-icon btn-overflow",
466
- icon: vsGear,
467
- tooltip: "Log Settings",
468
- onClick: () => {
469
- // no-op: click is handled in `DropdownMenu'
470
- }
471
- }, /*#__PURE__*/React.createElement(DropdownMenu, {
472
- actions: actions,
473
- popperClassName: "log-level-menu-popper",
474
- popperOptions: popperOptions
475
- }))), /*#__PURE__*/React.createElement("div", {
476
- className: "log-pane-editor h-100 w-100",
477
- ref: editorContainer => {
478
- this.editorContainer = editorContainer;
479
- }
480
- }));
459
+ return /*#__PURE__*/_jsxs("div", {
460
+ className: "log-pane h-100 w-100",
461
+ children: [/*#__PURE__*/_jsxs("div", {
462
+ className: "log-pane-menu",
463
+ children: [/*#__PURE__*/_jsx(Button, {
464
+ kind: "ghost",
465
+ className: "btn-clear-logs",
466
+ onClick: this.handleClearClick,
467
+ icon: dhTrashUndo,
468
+ tooltip: "Clear log"
469
+ }), /*#__PURE__*/_jsx(Button, {
470
+ kind: "ghost",
471
+ className: "btn-link-icon btn-overflow",
472
+ icon: vsGear,
473
+ tooltip: "Log Settings",
474
+ onClick: () => {
475
+ // no-op: click is handled in `DropdownMenu'
476
+ },
477
+ children: /*#__PURE__*/_jsx(DropdownMenu, {
478
+ actions: actions,
479
+ popperClassName: "log-level-menu-popper",
480
+ popperOptions: popperOptions
481
+ })
482
+ })]
483
+ }), /*#__PURE__*/_jsx("div", {
484
+ className: "log-pane-editor h-100 w-100",
485
+ ref: editorContainer => {
486
+ this.editorContainer = editorContainer;
487
+ }
488
+ })]
489
+ });
481
490
  }
482
491
  }
483
492
  _defineProperty(LogView, "DefaultLogLevels", [LogLevel.STDOUT, LogLevel.ERROR, LogLevel.FATAL, LogLevel.STDERR, LogLevel.WARN]);
@@ -1 +1 @@
1
- {"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","MonacoUtils","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\nimport { MonacoUtils } from '../monaco';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\n });\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","MonacoUtils","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\nimport { MonacoUtils } from '../monaco';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\n });\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
@@ -12,6 +12,7 @@ import * as monaco from 'monaco-editor';
12
12
  import { assertNotNull } from '@deephaven/utils';
13
13
  import MonacoUtils from "../monaco/MonacoUtils.js";
14
14
  import "./Editor.css";
15
+ import { jsx as _jsx } from "react/jsx-runtime";
15
16
  class Editor extends Component {
16
17
  constructor(props) {
17
18
  super(props);
@@ -111,7 +112,7 @@ class Editor extends Component {
111
112
  var {
112
113
  className
113
114
  } = this.props;
114
- return /*#__PURE__*/React.createElement("div", {
115
+ return /*#__PURE__*/_jsx("div", {
115
116
  className: classNames('editor-container', className),
116
117
  ref: container => {
117
118
  this.container = container;
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","Editor","constructor","props","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","layout","onEditorInitialized","settings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","links","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","languages","registerLinkProvider","provideLinks","onEditorWillDestroy","dispose","render","className"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from '../monaco/MonacoUtils';\nimport './Editor.scss';\n\ninterface EditorProps {\n className: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n settings: monaco.editor.IStandaloneEditorConstructionOptions;\n}\n\nclass Editor extends Component<EditorProps, Record<string, never>> {\n static defaultProps = {\n className: 'fill-parent-absolute',\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n settings: {},\n };\n\n constructor(props: EditorProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.container = null;\n this.state = {};\n }\n\n componentDidMount(): void {\n this.initEditor();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleResize);\n\n this.destroyEditor();\n }\n\n container: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setLanguage(language: string): void {\n if (this.editor) {\n const model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n toggleFind(): void {\n if (this.editor) {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor.focus();\n this.editor.trigger('toggleFind', 'actions.find', undefined);\n }\n }\n\n updateDimensions(): void {\n this.editor?.layout();\n }\n\n initEditor(): void {\n const { onEditorInitialized } = this.props;\n let { settings } = this.props;\n settings = {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: `python`,\n lineNumbersMinChars: 3,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n links: true,\n ...settings,\n };\n assertNotNull(this.container);\n\n this.editor = monaco.editor.create(this.container, settings);\n\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n ],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n\n run: () => {\n this.toggleFind();\n },\n });\n this.editor.layout();\n\n monaco.languages.registerLinkProvider('plaintext', {\n provideLinks: MonacoUtils.provideLinks,\n });\n\n onEditorInitialized(this.editor);\n }\n\n destroyEditor(): void {\n const { onEditorWillDestroy } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n\n render(): ReactElement {\n const { className } = this.props;\n return (\n <div\n className={classNames('editor-container', className)}\n ref={container => {\n this.container = container;\n }}\n />\n );\n }\n}\n\nexport default Editor;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","Editor","constructor","props","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","layout","onEditorInitialized","settings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","links","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","languages","registerLinkProvider","provideLinks","onEditorWillDestroy","dispose","render","className"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from '../monaco/MonacoUtils';\nimport './Editor.scss';\n\ninterface EditorProps {\n className: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n settings: monaco.editor.IStandaloneEditorConstructionOptions;\n}\n\nclass Editor extends Component<EditorProps, Record<string, never>> {\n static defaultProps = {\n className: 'fill-parent-absolute',\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n settings: {},\n };\n\n constructor(props: EditorProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.container = null;\n this.state = {};\n }\n\n componentDidMount(): void {\n this.initEditor();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleResize);\n\n this.destroyEditor();\n }\n\n container: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setLanguage(language: string): void {\n if (this.editor) {\n const model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n toggleFind(): void {\n if (this.editor) {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor.focus();\n this.editor.trigger('toggleFind', 'actions.find', undefined);\n }\n }\n\n updateDimensions(): void {\n this.editor?.layout();\n }\n\n initEditor(): void {\n const { onEditorInitialized } = this.props;\n let { settings } = this.props;\n settings = {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: `python`,\n lineNumbersMinChars: 3,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n links: true,\n ...settings,\n };\n assertNotNull(this.container);\n\n this.editor = monaco.editor.create(this.container, settings);\n\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n ],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n\n run: () => {\n this.toggleFind();\n },\n });\n this.editor.layout();\n\n monaco.languages.registerLinkProvider('plaintext', {\n provideLinks: MonacoUtils.provideLinks,\n });\n\n onEditorInitialized(this.editor);\n }\n\n destroyEditor(): void {\n const { onEditorWillDestroy } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n\n render(): ReactElement {\n const { className } = this.props;\n return (\n <div\n className={classNames('editor-container', className)}\n ref={container => {\n this.container = container;\n }}\n />\n );\n }\n}\n\nexport default Editor;\n"],"mappings":"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"}
@@ -14,6 +14,9 @@ import { MonacoProviders, MonacoUtils } from "../monaco/index.js";
14
14
  import "./ScriptEditor.css";
15
15
  import SHORTCUTS from "../ConsoleShortcuts.js";
16
16
  import ScriptEditorUtils from "./ScriptEditorUtils.js";
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { Fragment as _Fragment } from "react/jsx-runtime";
19
+ import { jsxs as _jsxs } from "react/jsx-runtime";
17
20
  var log = Log.module('ScriptEditor');
18
21
  class ScriptEditor extends Component {
19
22
  constructor(props) {
@@ -277,24 +280,30 @@ class ScriptEditor extends Component {
277
280
  var errorMessage = error ? "Unable to open document. ".concat(error) : null;
278
281
  var editorLanguage = settings ? (_settings$language = settings.language) !== null && _settings$language !== void 0 ? _settings$language : null : null;
279
282
  var completionProviderEnabled = model && session && editorLanguage === sessionLanguage;
280
- return /*#__PURE__*/React.createElement(React.Fragment, null, (error || isLoading) && /*#__PURE__*/React.createElement("div", {
281
- className: "h-100 w-100 position-relative"
282
- }, /*#__PURE__*/React.createElement(LoadingOverlay, {
283
- errorMessage: errorMessage,
284
- isLoading: isLoading,
285
- isLoaded: isLoaded
286
- })), isLoaded && /*#__PURE__*/React.createElement("div", {
287
- className: "h-100 w-100 script-editor"
288
- }, settings && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Editor, {
289
- ref: this.editorComponent,
290
- settings: settings,
291
- onEditorInitialized: this.handleEditorInitialized,
292
- onEditorWillDestroy: this.handleEditorWillDestroy
293
- }), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/React.createElement(MonacoProviders, {
294
- model: model,
295
- language: editorLanguage,
296
- session: session
297
- }))));
283
+ return /*#__PURE__*/_jsxs(_Fragment, {
284
+ children: [(error || isLoading) && /*#__PURE__*/_jsx("div", {
285
+ className: "h-100 w-100 position-relative",
286
+ children: /*#__PURE__*/_jsx(LoadingOverlay, {
287
+ errorMessage: errorMessage,
288
+ isLoading: isLoading,
289
+ isLoaded: isLoaded
290
+ })
291
+ }), isLoaded && /*#__PURE__*/_jsx("div", {
292
+ className: "h-100 w-100 script-editor",
293
+ children: settings && /*#__PURE__*/_jsxs(_Fragment, {
294
+ children: [/*#__PURE__*/_jsx(Editor, {
295
+ ref: this.editorComponent,
296
+ settings: settings,
297
+ onEditorInitialized: this.handleEditorInitialized,
298
+ onEditorWillDestroy: this.handleEditorWillDestroy
299
+ }), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/_jsx(MonacoProviders, {
300
+ model: model,
301
+ language: editorLanguage,
302
+ session: session
303
+ })]
304
+ })
305
+ })]
306
+ });
298
307
  }
299
308
  }
300
309
  _defineProperty(ScriptEditor, "defaultProps", {