diff --git a/package.json b/package.json index bd77589..42a314d 100644 --- a/package.json +++ b/package.json @@ -28,13 +28,13 @@ "types": "types/index.d.ts", "exports": { ".": { - "node": { - "types": "./types/node.d.ts", - "import": "./src/node.js" - }, - "default": { + "browser": { "types": "./types/index.d.ts", "import": "./src/index.js" + }, + "default": { + "types": "./types/node.d.ts", + "import": "./src/node.js" } }, "./src/*.js": { diff --git a/src/filewriter.js b/src/filewriter.js deleted file mode 100644 index ef01cb0..0000000 --- a/src/filewriter.js +++ /dev/null @@ -1,49 +0,0 @@ -import fs from 'fs' -import { ByteWriter } from './bytewriter.js' - -/** - * Buffered file writer. - * Writes data to a local file in chunks using node fs. - * - * @import {Writer} from '../src/types.js' - * @param {string} filename - * @returns {Writer} - */ -export function fileWriter(filename) { - const writer = new ByteWriter() - const chunkSize = 1_000_000 // 1mb - - // create a new file or overwrite existing one - fs.writeFileSync(filename, '', { flag: 'w' }) - - function flush() { - const chunk = writer.buffer.slice(0, writer.index) - // TODO: async - fs.writeFileSync(filename, new Uint8Array(chunk), { flag: 'a' }) - writer.index = 0 - } - - /** - * Override the ensure method - * @param {number} size - */ - writer.ensure = function(size) { - if (writer.index > chunkSize) { - flush() - } - if (writer.index + size > writer.buffer.byteLength) { - const newSize = Math.max(writer.buffer.byteLength * 2, writer.index + size) - const newBuffer = new ArrayBuffer(newSize) - new Uint8Array(newBuffer).set(new Uint8Array(writer.buffer)) - writer.buffer = newBuffer - writer.view = new DataView(writer.buffer) - } - } - writer.getBuffer = function () { - throw new Error('getBuffer not supported for FileWriter') - } - writer.finish = function() { - flush() - } - return writer -} diff --git a/src/node.js b/src/node.js index 90722d6..301f187 100644 --- a/src/node.js +++ b/src/node.js @@ -1,15 +1,13 @@ -import { fileWriter } from './filewriter.js' +import fs from 'fs' +import { ByteWriter } from './bytewriter.js' import { parquetWrite } from './write.js' -export { parquetWrite, parquetWriteBuffer } from './write.js' -export { ByteWriter } from './bytewriter.js' -export { ParquetWriter } from './parquet-writer.js' -export { fileWriter } +export * from './index.js' /** * Write data as parquet to a local file. * - * @import {ParquetWriteOptions} from '../src/types.js' + * @import {ParquetWriteOptions, Writer} from '../src/types.js' * @param {Omit & {filename: string}} options */ export function parquetWriteFile(options) { @@ -17,3 +15,49 @@ export function parquetWriteFile(options) { const writer = fileWriter(filename) parquetWrite({ ...rest, writer }) } + +/** + * Buffered file writer. + * Writes data to a local file in chunks using node fs. + * + * @param {string} filename + * @returns {Writer} + */ +export function fileWriter(filename) { + const writer = new ByteWriter() + const chunkSize = 1_000_000 // 1mb + + // create a new file or overwrite existing one + fs.writeFileSync(filename, '', { flag: 'w' }) + + function flush() { + const chunk = writer.buffer.slice(0, writer.index) + // TODO: async + fs.writeFileSync(filename, new Uint8Array(chunk), { flag: 'a' }) + writer.index = 0 + } + + /** + * Override the ensure method + * @param {number} size + */ + writer.ensure = function(size) { + if (writer.index > chunkSize) { + flush() + } + if (writer.index + size > writer.buffer.byteLength) { + const newSize = Math.max(writer.buffer.byteLength * 2, writer.index + size) + const newBuffer = new ArrayBuffer(newSize) + new Uint8Array(newBuffer).set(new Uint8Array(writer.buffer)) + writer.buffer = newBuffer + writer.view = new DataView(writer.buffer) + } + } + writer.getBuffer = function () { + throw new Error('getBuffer not supported for FileWriter') + } + writer.finish = function() { + flush() + } + return writer +} diff --git a/test/filewriter.test.js b/test/filewriter.test.js index 78b39ce..8e9bef5 100644 --- a/test/filewriter.test.js +++ b/test/filewriter.test.js @@ -1,6 +1,6 @@ import fs from 'fs' import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import { fileWriter } from '../src/filewriter.js' +import { fileWriter } from '../src/node.js' const filedir = 'data/' const filename = 'data/filewriter.test.bin' diff --git a/test/package.test.js b/test/package.test.js index 77ca349..9ff093b 100644 --- a/test/package.test.js +++ b/test/package.test.js @@ -30,8 +30,8 @@ describe('package.json', () => { const { exports } = packageJson expect(Object.keys(exports)).toEqual(['.', './src/*.js']) // node vs default (browser) - expect(Object.keys(exports['.'])).toEqual(['node', 'default']) - expect(Object.keys(exports['.'].node)).toEqual(['types', 'import']) + expect(Object.keys(exports['.'])).toEqual(['browser', 'default']) + expect(Object.keys(exports['.'].browser)).toEqual(['types', 'import']) expect(Object.keys(exports['.'].default)).toEqual(['types', 'import']) // deep imports expect(Object.keys(exports['./src/*.js'])).toEqual(['types', 'import'])