Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
91ac05d
remove papaparse, add vitest
severo Oct 21, 2025
f5e9a2e
rename csv?.ts to dataframe.ts
severo Oct 21, 2025
2862be9
Initial structure for the csv parser
severo Oct 21, 2025
6bc4208
refactor
severo Oct 21, 2025
005084a
move to csv-range (still wip)
severo Nov 17, 2025
bf08b35
simplify header
severo Nov 18, 2025
d78a3f4
add tests
severo Nov 18, 2025
7554c79
fix missing ranges and add tests
severo Nov 18, 2025
372732c
simplify
severo Nov 18, 2025
1472102
add tests and fix things
severo Nov 18, 2025
81c123a
add tests
severo Nov 18, 2025
2f624c2
tests
severo Nov 18, 2025
aaf31d0
add tests
severo Nov 18, 2025
149ca6c
add test
severo Nov 18, 2025
c928be0
add tests
severo Nov 18, 2025
ca5285c
upgrade deps
severo Nov 19, 2025
2533222
remove obsolete field
severo Nov 19, 2025
f50246b
add test + fix max lastByte
severo Nov 19, 2025
75c9120
add tests + fix validation of row
severo Nov 19, 2025
d53525f
fix test
severo Nov 19, 2025
15298dd
add tests + fix details
severo Nov 19, 2025
02415bb
add tests
severo Nov 19, 2025
7ceac0b
fix infinite loop, and increase limits
severo Nov 19, 2025
6fe1c67
fix test
severo Nov 20, 2025
83043b3
add a test
severo Nov 20, 2025
e191ff9
throw if impossible condition happens
severo Nov 20, 2025
6e53dd1
no need to test this
severo Nov 20, 2025
4251670
use header byte count to improve num rows estimate + fix getNextMissi…
severo Nov 20, 2025
9fa9f23
remove impossible condition, and add test
severo Nov 20, 2025
2ccb0ed
fetch multiple ranges until getting all the rows, prevented if we rea…
severo Nov 20, 2025
5d58d93
add test
severo Nov 20, 2025
5891c74
report if the number of rows is an estimate in the metadata
severo Nov 20, 2025
cdc75ea
Fix row number style
severo Nov 20, 2025
e0547fe
add comment
severo Nov 20, 2025
0cc53fb
improve estimate of the next missing row: half the previous row, inst…
severo Nov 20, 2025
e80918a
don't return a next missing row if end of file is reached + add test
severo Nov 20, 2025
27bf6ef
provide cache.numRowsEstimate
severo Nov 20, 2025
4e925e9
fix type
severo Nov 20, 2025
c95f6c9
Update test/cache.test.ts
severo Nov 20, 2025
6f55c9a
Update test/dataframe.test.ts
severo Nov 20, 2025
4b4c3df
apply copilot comments
severo Nov 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ dist-ssr
*.njsproj
*.sln
*.sw?

coverage
74 changes: 46 additions & 28 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,51 @@
import { defineConfig } from "eslint/config";
import js from "@eslint/js";
import globals from "globals";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import tseslint from "typescript-eslint";
import { globalIgnores } from "eslint/config";
import reactX from "eslint-plugin-react-x";
import reactDom from "eslint-plugin-react-dom";
import { fileURLToPath } from 'node:url'

import { includeIgnoreFile } from '@eslint/compat'
import js from '@eslint/js'
import stylistic from '@stylistic/eslint-plugin'
import { defineConfig } from 'eslint/config'
import jsdoc from 'eslint-plugin-jsdoc'
import reactDom from 'eslint-plugin-react-dom'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import reactX from 'eslint-plugin-react-x'
import simpleImportSort from 'eslint-plugin-simple-import-sort'
import globals from 'globals'
import tseslint from 'typescript-eslint'

const gitignorePath = fileURLToPath(new URL('.gitignore', import.meta.url))

export default defineConfig([
globalIgnores(["dist"]),
includeIgnoreFile(gitignorePath, 'Imported .gitignore patterns'),
{
files: ['**/*.{ts,tsx,js}'],
plugins: { js, '@stylistic': stylistic },
extends: ['js/recommended'],
languageOptions: { globals: { ...globals.browser, ...globals.node } },
},
tseslint.configs.recommended,
stylistic.configs.recommended,
jsdoc.configs['flat/recommended-error'],

reactHooks.configs.flat['recommended-latest'],
reactRefresh.configs.vite,
reactX.configs['recommended-typescript'],
reactDom.configs.recommended,
{
files: ['**/*.{ts,tsx,js}'],
plugins: { 'simple-import-sort': simpleImportSort, jsdoc },
rules: {
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
'jsdoc/require-yields-type': 'off',
'jsdoc/require-param-type': 'off',
'jsdoc/require-returns-type': 'off',
},
},
{
files: ["**/*.{ts,tsx}"],
extends: [
js.configs.recommended,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
reactHooks.configs.flat['recommended-latest'],
reactRefresh.configs.vite,
reactX.configs["recommended-typescript"],
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
ecmaVersion: 2020,
globals: globals.browser,
files: ['tests/*.ts'],
rules: {
'jsdoc/require-jsdoc': 'off',
},
},
]);
])
Loading