@sqlrooms/utils 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/color.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,OAAO,EAAC,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACzD,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,uBAAuB,OAAO,GAAG,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACpB,OAAO,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,OAAO,EAAC,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACzD,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,uBAAuB,OAAO,GAAG,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACpB,OAAO,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC;AAC1D,CAAC","sourcesContent":["import {color as d3color} from 'd3-color';\n\nexport function opacifyHex(hexCode: string, opacity: number): string {\n const c = d3color(hexCode);\n if (!c) {\n console.warn('Invalid color: ', hexCode);\n return `rgba(255, 255, 255, ${opacity})`;\n }\n const col = c.rgb();\n return `rgba(${col.r}, ${col.g}, ${col.b}, ${opacity})`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"filepaths.js","sourceRoot":"","sources":["../src/filepaths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filepaths.js","sourceRoot":"","sources":["../src/filepaths.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Splits a file path into its directory, name, and extension components.\n * @param filePath - The full file path to split\n * @returns An object containing the directory path, file name (without extension), and extension\n * @example\n * splitFilePath(\"path/to/file.txt\") // returns { dir: \"path/to\", name: \"file\", ext: \"txt\" }\n */\nexport function splitFilePath(filePath: string): {\n dir: string;\n name: string;\n ext: string;\n filename: string;\n} {\n const pathParts = filePath.split('/');\n const file = pathParts.pop() || '';\n\n const dotIndex = file.lastIndexOf('.');\n if (dotIndex === -1 || dotIndex === 0)\n return {dir: pathParts.join('/'), name: file, ext: '', filename: file};\n\n const name = file.substring(0, dotIndex);\n const ext = file.substring(dotIndex + 1);\n\n return {dir: pathParts.join('/'), name, ext, filename: `${name}.${ext}`};\n}\n\n/**\n * Converts a filename into a valid and unique column or table name for database use.\n * - Removes file extension\n * - Replaces invalid characters with underscores\n * - Ensures the name starts with a letter or underscore\n * - Truncates to max length of 63 characters\n * - Ensures uniqueness among existing names\n *\n * @param filename - The original filename to convert\n * @param existingTables - Optional array of existing table names to ensure uniqueness\n * @returns A valid and unique table/column name\n * @example\n * convertToUniqueColumnOrTableName(\"my-file.csv\") // returns \"my_file\"\n * convertToUniqueColumnOrTableName(\"123data.csv\") // returns \"_123data\"\n */\nexport function convertToUniqueColumnOrTableName(\n filename: string,\n existingTables?: string[],\n): string {\n // Remove file extension\n const base = filename.replace(/\\.[^/.]+$/, '');\n\n // Replace any invalid character with underscore, and convert to lowercase\n let tableName = base.replace(/[^a-z0-9_]/gi, '_');\n\n // If the first character is a number, prepend an underscore\n if (/^\\d/.test(tableName)) {\n tableName = '_' + tableName;\n }\n\n // Truncate to the max length 63\n if (tableName.length > 63) {\n tableName = tableName.substring(0, 63);\n }\n\n tableName = generateUniqueName(tableName, existingTables);\n\n return tableName;\n}\n\n/**\n * Generates a unique name by appending a numeric suffix if the name already exists.\n * @param name - The base name to make unique\n * @param usedNames - Optional array of existing names to check against\n * @returns A unique name, potentially with a numeric suffix\n * @example\n * generateUniqueName(\"table\", [\"table\"]) // returns \"table_1\"\n * generateUniqueName(\"table_1\", [\"table_1\"]) // returns \"table_2\"\n */\nexport function generateUniqueName(name: string, usedNames?: string[]) {\n const usedNamesLower = usedNames?.map((n) => n.toLowerCase());\n\n // If tableName exists in the list\n if (usedNamesLower?.includes(name.toLowerCase())) {\n let baseName: string | undefined = name;\n let i = 0;\n\n // If tableName ends with `_${i}` pattern, update the baseTableName and i\n const matched = name.match(/^(.+)_(\\d+)$/);\n if (matched) {\n baseName = matched[1];\n i = Number(matched[2]);\n }\n\n do {\n i++;\n name = `${baseName}_${i}`;\n } while (usedNamesLower.includes(name.toLowerCase()));\n }\n\n return name;\n}\n\n/**\n * Generates a unique file path by appending a numeric suffix if the path already exists.\n * @param filePath - The original file path\n * @param existingPaths - Array of existing file paths to check against\n * @returns A unique file path\n * @example\n * generateUniquePath(\"file.txt\", [\"file.txt\"]) // returns \"file_1.txt\"\n */\nexport function generateUniquePath(\n filePath: string,\n existingPaths: string[],\n): string {\n let nextPath = filePath;\n if (existingPaths?.includes(filePath)) {\n const {dir, name, ext} = splitFilePath(filePath);\n\n let i = 0;\n let baseName: string | undefined = name;\n const matched = name.match(/^(.+)_(\\d+)$/);\n if (matched) {\n baseName = matched[1];\n i = Number(matched[2]);\n }\n\n do {\n i++;\n const fname = `${baseName}_${i}${ext ? `.${ext}` : ''}`;\n nextPath = `${dir}${dir ? '/' : ''}${fname}`;\n } while (existingPaths.includes(nextPath));\n }\n\n return nextPath;\n}\n\n/**\n * Converts a string into a valid and unique S3 object name.\n * - Replaces special characters with underscores\n * - Ensures name is within S3's length limits\n * - Ensures uniqueness among existing objects\n *\n * @param str - The string to convert into an S3 object name\n * @param existingObjects - Optional array of existing S3 object names to ensure uniqueness\n * @returns A valid and unique S3 object name\n * @example\n * convertToUniqueS3ObjectName(\"my file.txt\") // returns \"my_file.txt\"\n */\nexport function convertToUniqueS3ObjectName(\n str: string,\n existingObjects?: string[],\n): string {\n let rv = str\n .trim() // Remove leading and trailing white spaces\n .replace(/[^\\w\\s-\\.]/g, '_') // Replace special characters with underscores\n .replace(/\\s+/g, '_') // Replace consecutive spaces with a single underscore\n // .replace(/_+/g, '_') // Remove consecutive underscores\n // .replace(/^_/, '') // Remove leading underscores\n // .replace(/_$/, '') // Remove trailing underscores\n .slice(0, 255); // Truncate the string if it exceeds 255 characters\n\n if (existingObjects?.length) {\n rv = generateUniquePath(rv, existingObjects);\n }\n\n return rv;\n}\n\n/**\n * Converts a string into a valid and unique S3 folder path.\n * - Ensures the path ends with a forward slash\n * - Replaces special characters with underscores\n * - Ensures uniqueness among existing paths\n *\n * @param str - The string to convert into an S3 folder path\n * @param existingObjects - Optional array of existing S3 paths to ensure uniqueness\n * @returns A valid and unique S3 folder path ending with a forward slash\n * @example\n * convertToUniqueS3FolderPath(\"my folder\") // returns \"my_folder/\"\n */\nexport function convertToUniqueS3FolderPath(\n str: string,\n existingObjects?: string[],\n): string {\n let next = convertToUniqueS3ObjectName(str, existingObjects);\n if (!next.endsWith('/')) next += '/'; // Add trailing slash if not present\n return next;\n // return (\n // str\n // .trim() // Remove leading and trailing white spaces\n // .replace(/\\/+/g, '/') // Replace consecutive slashes with a single slash\n // .replace(/[^\\w\\s-\\/]/g, '_') // Replace special characters with underscores\n // .replace(/\\s+/g, '_') // Replace consecutive spaces with a single underscore\n // .replace(/^\\//, '') + // Remove leading slash\n // (str.endsWith('/') ? '' : '/')\n // );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"filepaths.test.js","sourceRoot":"","sources":["../src/filepaths.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filepaths.test.js","sourceRoot":"","sources":["../src/filepaths.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n generateUniqueName,\n generateUniquePath,\n convertToUniqueS3ObjectName,\n} from './filepaths';\n\ntest('generateUniqueName generates unique table names', () => {\n expect(generateUniqueName('foo', [])).toBe('foo');\n expect(generateUniqueName('foo', ['345'])).toBe('foo');\n expect(generateUniqueName('foo', ['foo_1'])).toBe('foo');\n expect(generateUniqueName('foo', ['foo', 'foo_1'])).toBe('foo_2');\n expect(generateUniqueName('foo_1', ['foo_1'])).toBe('foo_2');\n expect(generateUniqueName('foo_2', ['foo_2'])).toBe('foo_3');\n expect(generateUniqueName('foo', ['foo', 'foo_1', 'foo_2'])).toBe('foo_3');\n expect(generateUniqueName('')).toBe('');\n expect(generateUniqueName('', [''])).toBe('_1');\n expect(generateUniqueName('_', ['_'])).toBe('__1');\n});\n\ntest('generateUniquePath generates unique paths', () => {\n expect(generateUniquePath('/foo/bar.csv', [])).toBe('/foo/bar.csv');\n expect(generateUniquePath('/foo/bar.csv', ['345'])).toBe('/foo/bar.csv');\n expect(generateUniquePath('/foo/bar.csv', ['/foo/bar.csv'])).toBe(\n '/foo/bar_1.csv',\n );\n expect(generateUniquePath('/foo/bar.csv', ['/foo/bar_1.csv'])).toBe(\n '/foo/bar.csv',\n );\n expect(\n generateUniquePath('/foo/bar.csv', ['/foo/bar.csv', '/foo/bar_1.csv']),\n ).toBe('/foo/bar_2.csv');\n expect(\n generateUniquePath('/foo/bar.csv', [\n '/foo/bar.csv',\n '/foo/bar_1.csv',\n '/foo/bar_2.csv',\n ]),\n ).toBe('/foo/bar_3.csv');\n expect(generateUniquePath('/foo/bar_1.csv', ['/foo/bar_1.csv'])).toBe(\n '/foo/bar_2.csv',\n );\n expect(generateUniquePath('/foo/bar_2.csv', ['/foo/bar_2.csv'])).toBe(\n '/foo/bar_3.csv',\n );\n expect(generateUniquePath('/foo', [])).toBe('/foo');\n expect(generateUniquePath('/foo/bar', [])).toBe('/foo/bar');\n expect(generateUniquePath('/foo/bar', ['/foo/bar'])).toBe('/foo/bar_1');\n expect(generateUniquePath('/', [])).toBe('/');\n expect(generateUniquePath('', [])).toBe('');\n expect(generateUniquePath('', [''])).toBe('_1');\n expect(generateUniquePath('_', ['_'])).toBe('__1');\n});\n\ntest('convertToUniqueS3ObjectName works correctly', () => {\n expect(convertToUniqueS3ObjectName('/flows.csv', [])).toBe('_flows.csv');\n expect(convertToUniqueS3ObjectName('&flows.csv', [])).toBe('_flows.csv');\n expect(convertToUniqueS3ObjectName('@flows.csv', [])).toBe('_flows.csv');\n expect(convertToUniqueS3ObjectName('/flows.csv', [])).toBe('_flows.csv');\n expect(convertToUniqueS3ObjectName('flows.csv', ['flows.csv'])).toBe(\n 'flows_1.csv',\n );\n expect(\n convertToUniqueS3ObjectName('flows.csv', ['flows.csv', 'flows_1.csv']),\n ).toBe('flows_2.csv');\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,SAAS,GAAG,EAAE;IACjD,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,SAAS,GAAG,EAAE;IACjD,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,CAAC","sourcesContent":["import * as d3Format from 'd3-format';\n\n/**\n * Formats a number as a string with thousands separators and no decimal places.\n * Example: 1234567 -> \"1,234,567\"\n */\nexport const formatCount = d3Format.format(',.0f');\n\n/**\n * Formats a number as a string with 4 significant digits and SI prefix.\n * Example: 1234567 -> \"1.235M\"\n */\nexport const formatCount4 = d3Format.format('.4~s');\n\n/**\n * Formats a number as a string with thousands separators and SI prefix.\n * Example: 1234567 -> \"1M\"\n */\nexport const formatCountShort = d3Format.format(',.0s');\n\n/**\n * Shortens a string to a specified maximum length by truncating and adding an ellipsis.\n * @param str - The string to shorten\n * @param maxLength - Maximum length of the resulting string (including ellipsis). Defaults to 10.\n * @returns The shortened string with ellipsis if truncated, or the original string if shorter than maxLength\n * @example\n * shorten(\"Hello World\", 8) // Returns \"Hello...\"\n * shorten(\"Hi\", 8) // Returns \"Hi\"\n */\nexport function shorten(str: string, maxLength = 10): string {\n if (str.length <= maxLength) {\n return str;\n }\n return `${str.substring(0, maxLength - 3)}…`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IAC1D,qBAAqB,EAAE,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAClD,MAAM,gBAAgB,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAyB,EAAE,EAAE;IAC1D,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAyB,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAyB,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;IAClD,OAAO,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAU,EAAE,EAAE;IACtD,IAAI,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IAC1D,qBAAqB,EAAE,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAClD,MAAM,gBAAgB,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAyB,EAAE,EAAE;IAC1D,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAyB,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAyB,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;IAClD,OAAO,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAU,EAAE,EAAE;IACtD,IAAI,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC,CAAC","sourcesContent":["import {timeFormat} from 'd3-time-format';\n\nimport dayjs, {ConfigType} from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\n\ndayjs.extend(relativeTime);\n\n/**\n * Number formatter instance configured for US locale with no minimum fraction digits\n */\nexport const NUMBER_FORMAT = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: 0,\n});\n\n/**\n * Formats a number using US locale formatting\n * @param n - Number to format\n * @returns Formatted number string\n * @example\n * ```ts\n * formatNumber(1234567.89); // \"1,234,568\"\n * ```\n */\nexport const formatNumber = (n: number) => NUMBER_FORMAT.format(n);\n\nconst TIME_OF_DAY_FORMAT = timeFormat('%I:%M %p');\nconst DATE_TIME_FORMAT = timeFormat('%a %Y-%m-%d %I:%M %p');\nconst DATE_FORMAT = timeFormat('%Y-%m-%d');\n\n/**\n * Formats a date into a human-readable datetime string\n * @param d - Date to format (can be Date object, timestamp number, or bigint)\n * @returns Formatted string in \"Day YYYY-MM-DD HH:MM AM/PM\" format\n * @example\n * ```ts\n * formatDateTime(new Date()); // e.g., \"Wed 2024-03-13 02:30 PM\"\n * ```\n */\nexport const formatDateTime = (d: Date | number | bigint) => {\n const date = d instanceof Date ? d : new Date(Number(d));\n return DATE_TIME_FORMAT(date);\n};\n\n/**\n * Formats a date into YYYY-MM-DD format\n * @param d - Date to format (can be Date object, timestamp number, or bigint)\n * @returns Formatted date string\n * @example\n * ```ts\n * formatDate(new Date()); // e.g., \"2024-03-13\"\n * ```\n */\nexport const formatDate = (d: Date | number | bigint) => {\n const date = d instanceof Date ? d : new Date(Number(d));\n return DATE_FORMAT(date);\n};\n\n/**\n * Formats a date into time of day (HH:MM AM/PM)\n * @param d - Date to format (can be Date object, timestamp number, or bigint)\n * @returns Formatted time string\n * @example\n * ```ts\n * formatTimeOfDay(new Date()); // e.g., \"02:30 PM\"\n * ```\n */\nexport const formatTimeOfDay = (d: Date | number | bigint) => {\n const date = d instanceof Date ? d : new Date(Number(d));\n return TIME_OF_DAY_FORMAT(date);\n};\n\n/**\n * Formats a date relative to the current time (e.g., \"2 hours ago\", \"in 3 days\")\n * @param d - Date to format (accepts any dayjs ConfigType)\n * @returns Human-readable relative time string\n * @example\n * ```ts\n * formatTimeRelative(new Date(Date.now() - 3600000)); // \"1 hour ago\"\n * ```\n */\nexport const formatTimeRelative = (d: ConfigType) => {\n return dayjs().to(d);\n};\n\n/**\n * Extracts and formats an error message for display, removing common prefixes and truncating at first newline\n * @param e - Error object or any other value that can be converted to string\n * @returns Cleaned up error message string\n * @example\n * ```ts\n * getErrorMessageForDisplay(new Error(\"Query failed: Error: Invalid syntax\\nMore details...\")); // \"Invalid syntax\"\n * ```\n */\nexport const getErrorMessageForDisplay = (e: unknown) => {\n let msg = e instanceof Error ? e.message : String(e);\n msg = msg.replace(/Query failed: Error: /, '');\n const firstNl = msg.indexOf('\\n');\n return firstNl >= 0 ? msg.substring(0, firstNl) : msg;\n};\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC","sourcesContent":["export * from './color';\nexport * from './format';\nexport * from './helpers';\nexport * from './random';\nexport * from './str';\nexport * from './xhr';\nexport * from './filepaths';\nexport {safeJsonParse} from './json';\n"]}
package/dist/json.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAI,IAA+B;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAI,IAA+B;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["/**\n * Parse a JSON string and return the parsed object.\n * If the string is not valid JSON, return null.\n * @param json - The JSON string to parse.\n * @returns The parsed object or null if the string is not valid JSON.\n */\nexport function safeJsonParse<T>(json: string | undefined | null): T | null {\n if (!json) return null;\n try {\n return JSON.parse(json) as T;\n } catch (error) {\n console.error('Failed to parse JSON:', error);\n return null;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"random.js","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAChC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAa;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5C,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,QAAQ,CAAC;QACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACjD,CAAC;iBAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAClB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACjD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CACL,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAChC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAa;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5C,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,QAAQ,CAAC;QACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACjD,CAAC;iBAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAClB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACjD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CACL,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC","sourcesContent":["import {alea} from 'seedrandom';\n/**\n * Generates a random string of specified length with optional seed\n * @param length - The length of the random string to generate\n * @param seed - Optional seed string for reproducible random generation\n * @returns Random string containing uppercase letters, lowercase letters, and numbers\n * @example\n * ```ts\n * const random = genRandomStr(10); // e.g., \"aB3kF9mN2x\"\n * const seeded = genRandomStr(10, \"myseed\"); // Will always generate the same string for \"myseed\"\n * ```\n */\nexport function genRandomStr(length: number, seed?: string) {\n const rnd = seed ? alea(seed) : Math.random;\n return Array.from(\n (function* () {\n for (let i = 0; i < length; i++) {\n const v = Math.floor(rnd() * (26 * 2 + 10));\n if (v < 26) {\n yield String.fromCharCode(v + 65); // 'A' - 'Z'\n } else if (v < 52) {\n yield String.fromCharCode(v + 71); // 'a' - 'z'\n } else {\n yield String.fromCharCode(v + 48); // '0' - '9'\n }\n }\n })(),\n ).join('');\n}\n"]}
package/dist/str.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"str.js","sourceRoot":"","sources":["../src/str.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAExE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,+EAA+E;IAC/E,SAAS;QACP,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE5B,OAAO,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,0DAA0D;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtD,kEAAkE;IAClE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,2CAA2C;YAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,4BAA4B;IAC5C,CAAC;IAED,2DAA2D;IAC3D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"str.js","sourceRoot":"","sources":["../src/str.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAExE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,+EAA+E;IAC/E,SAAS;QACP,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE5B,OAAO,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,0DAA0D;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtD,kEAAkE;IAClE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,2CAA2C;YAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,4BAA4B;IAC5C,CAAC;IAED,2DAA2D;IAC3D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC","sourcesContent":["/**\n * Formats a number of bytes into a human-readable string with appropriate size units.\n * @param bytes - The number of bytes to format\n * @returns A string representation of the bytes with appropriate unit (Bytes, KB, MB, etc.)\n * @example\n * formatBytes(1024) // returns \"1 KB\"\n * formatBytes(1234567) // returns \"1.18 MB\"\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n let sizeValue = bytes / Math.pow(k, i);\n // Use floor to check if there's a non-zero fractional part, format accordingly\n sizeValue =\n sizeValue != Math.floor(sizeValue)\n ? parseFloat(sizeValue.toFixed(2))\n : Math.floor(sizeValue);\n\n return sizeValue + ' ' + sizes[i];\n}\n\n/**\n * Converts a camelCase string into a Title Case string.\n * @param camelCase - The camelCase string to convert\n * @returns A Title Case string with spaces between words\n * @example\n * camelCaseToTitle(\"myVariableName\") // returns \"My Variable Name\"\n * camelCaseToTitle(\"URL\") // returns \"URL\"\n */\nexport function camelCaseToTitle(camelCase: string): string {\n // Split the string into words on the camelCase boundaries\n const words = camelCase.match(/^[a-z]+|[A-Z][a-z]*/g);\n\n // If words are found, transform them and join into a title string\n if (words) {\n return words\n .map((word) => {\n // Capitalize the first letter of each word\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join(' '); // Join the words with space\n }\n\n // If no words were found, just capitalize the whole string\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n}\n"]}
package/dist/xhr.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../src/xhr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../src/xhr.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Posts data to a specified URL endpoint using fetch API\n * @param {Object} params - The parameters for the POST request\n * @param {string} params.url - The URL to send the POST request to\n * @param {Record<string, unknown>} [params.data] - Optional data to be sent in the request body\n * @returns {Promise<any>} The parsed JSON response from the server\n * @throws {Error} If the response is not ok, throws an error with the status message or error details\n */\nexport const postData = async ({\n url,\n data,\n}: {\n url: string;\n data?: Record<string, unknown>;\n}) => {\n const res: Response = await fetch(url, {\n method: 'POST',\n headers: new Headers({'Content-Type': 'application/json'}),\n credentials: 'same-origin',\n body: JSON.stringify(data),\n });\n if (!res.ok) {\n console.error('Error in postData', {url, data, res});\n let message = res.statusText;\n try {\n message = (await res.json()).error.message;\n console.error(message);\n } catch {\n // ignore\n }\n throw new Error(message);\n }\n\n return res.json();\n};\n\n/**\n * Represents progress information for file operations\n */\nexport type ProgressInfo = {loaded: number; total: number; ratio: number};\n\n// TODO: use range requests to download in chunks\n// https://github.com/duckdb/duckdb-wasm/blob/d9ea9c919b6301e7c6dc8a9b3fd527e86f69a38e/packages/duckdb-wasm/src/bindings/runtime_browser.ts#L307\n\n/**\n * Downloads a file from a specified URL using XMLHttpRequest\n * @param {string} url - The URL to download the file from\n * @param {Object} [opts] - Optional configuration for the download\n * @param {string} [opts.method='GET'] - The HTTP method to use\n * @param {Record<string, string>} [opts.headers] - Additional headers to include in the request\n * @param {(info: ProgressInfo) => void} [opts.onProgress] - Callback function to track download progress\n * @returns {Promise<Uint8Array>} The downloaded file as a Uint8Array\n * @throws {Object} Throws an object containing status and error message if download fails\n */\nexport async function downloadFile(\n url: string,\n opts: {\n method?: string;\n headers?: Record<string, string>;\n onProgress?: (info: ProgressInfo) => void;\n } = {},\n): Promise<Uint8Array> {\n const {method = 'GET', headers = {}, onProgress} = opts;\n return await new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n\n // https://www.html5rocks.com/en/tutorials/file/xhr2/#toc-bin-data\n xhr.open(method, url, true);\n xhr.responseType = 'arraybuffer';\n Object.keys(headers).map((key) => {\n if (headers[key]) {\n xhr.setRequestHeader(key, headers[key]);\n }\n });\n\n xhr.onload = () => resolve(new Uint8Array(xhr.response));\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status >= 200 && xhr.status < 300) {\n // already handled by onload\n } else {\n reject({status: xhr.status, error: `File download failed`});\n }\n }\n };\n xhr.onerror = () =>\n reject({status: xhr.status, error: `File download failed`});\n\n if (onProgress) {\n xhr.onprogress = (event) => {\n const {lengthComputable, loaded, total} = event;\n if (lengthComputable) {\n onProgress({loaded, total, ratio: total ? loaded / total : 0});\n }\n };\n }\n xhr.send(null);\n });\n}\n\n// TODO: upload in chunks https://www.html5rocks.com/en/tutorials/file/xhr2/\n\n/**\n * Uploads a file to a specified URL using XMLHttpRequest\n * @param {string} url - The URL to upload the file to\n * @param {File | Blob | FormData} content - The content to upload\n * @param {Object} [opts] - Optional configuration for the upload\n * @param {string} [opts.method='POST'] - The HTTP method to use\n * @param {Record<string, string>} [opts.headers] - Additional headers to include in the request\n * @param {(info: ProgressInfo) => void} [opts.onProgress] - Callback function to track upload progress\n * @returns {Promise<Response>} The server response\n * @throws {Object} Throws an object containing status and error message if upload fails\n */\nexport async function uploadFile(\n url: string,\n content: File | Blob | FormData,\n opts: {\n method?: string;\n headers?: Record<string, string>;\n onProgress?: (info: ProgressInfo) => void;\n } = {},\n): Promise<Response> {\n const {method = 'POST', headers = {}, onProgress} = opts;\n return await new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, true);\n Object.keys(headers).map((key) => {\n if (headers[key]) {\n xhr.setRequestHeader(key, headers[key]);\n }\n });\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.response);\n } else {\n reject({\n status: xhr.status,\n error: xhr.responseText,\n });\n }\n }\n };\n xhr.onerror = () => reject({status: xhr.status, error: xhr.responseText});\n if (onProgress) {\n xhr.upload.onprogress = (event) => {\n const {lengthComputable, loaded, total} = event;\n if (lengthComputable) {\n onProgress({loaded, total, ratio: total ? loaded / total : 0});\n }\n };\n }\n xhr.send(content);\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/utils",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -41,5 +41,5 @@
41
41
  "react": "^19.0.0",
42
42
  "usehooks-ts": "^3.1.1"
43
43
  },
44
- "gitHead": "2a27ef8a774f934c8150dce57aac22699fb6d22f"
44
+ "gitHead": "5e41362f1552ee1f8a661c487fe7cdb606cc6d23"
45
45
  }