@forthtilliath/ts-kit
v0.1.0
Published
Framework-agnostic TypeScript utility functions — arrays, maths, browser file downloads, and a couple of `Array` extensions with better type-narrowing.
Readme
@forthtilliath/ts-kit
Framework-agnostic TypeScript utility functions — arrays, maths, browser file
downloads, and a couple of Array extensions with better type-narrowing.
Status: not currently consumed by any other package in this monorepo. Built, linted, tested and type-checked like everything else, but nothing imports it yet.
Install
Within the workspace:
{
"dependencies": {
"@forthtilliath/ts-kit": "workspace:*"
}
}Usage
Each module is exported individually — import the file you need directly rather than a single barrel:
import { chunk } from "@forthtilliath/ts-kit/array/chunk";
import { flattenDeep } from "@forthtilliath/ts-kit/array/flattenDeep";
import { FArray } from "@forthtilliath/ts-kit/classes/array";
import {
downloadText,
downloadTextBlob,
} from "@forthtilliath/ts-kit/files/downloadText";
import { avg } from "@forthtilliath/ts-kit/maths/average";
import { sum } from "@forthtilliath/ts-kit/maths/sum";array
chunk(array, size)— splits an array into chunks of a given size.flattenDeep(array)— recursively flattens nested arrays.
classes
FArray— anArraysubclass whoseincludes()narrows the type of the searched value when it's found (unlike the nativeArray.prototype.includes, which only narrows the array's element type).
files
downloadText(filename, text)— triggers a browser download of a text file via adata:URI.downloadTextBlob(filename, text)— same, but via aBlob+ object URL (better for larger content).
maths
sum(numbers)— sum of an array of numbers.avg(numbers)— average of an array of numbers.
Scripts
pnpm run build # tsc -> dist/ (excludes *.test.ts)
pnpm run dev # tsc --watch, same exclusion
pnpm run check-types # tsc --noEmit, includes test files
pnpm run lint # eslint
pnpm run test # vitest runType-checking and building use different tsconfigs on purpose:
tsconfig.json includes *.test.ts (so lint/check-types see them),
tsconfig.build.json excludes them (so they never end up in dist/).
