A functional toolkit for authoring resource-leveling algorithms — compose constraint and scoring blocks, enumerate feasible schedules
0

Configure Feed

Select the types of activity you want to include in your feed.

chore: scaffold Bun + TypeScript + ESLint + Prettier toolchain

Establish the toolchain the rest of the library is built on: Bun as the
runtime and test runner, strict TypeScript, ESLint, and Prettier.

tsconfig turns on strict checking with exactOptionalPropertyTypes, so
optional fields must be modeled explicitly as `T | undefined`, and sets
`types: ["bun"]` because TS 6 no longer pulls @types/* in transitively —
without it bun:test, Bun, Buffer, and node:* globals fail to resolve.

Russ T. Fugal (Mar 9, 2026, 9:00 AM -0600) 820dc35b

+121
+44
.gitignore
··· 1 + # dependencies (bun install) 2 + node_modules 3 + 4 + # output 5 + out 6 + dist 7 + *.tgz 8 + 9 + # code coverage 10 + coverage 11 + *.lcov 12 + 13 + # logs 14 + logs 15 + _.log 16 + report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 17 + 18 + # dotenv environment variable files 19 + .env 20 + .env.development.local 21 + .env.test.local 22 + .env.production.local 23 + .env.local 24 + 25 + # caches 26 + .eslintcache 27 + .cache 28 + *.tsbuildinfo 29 + 30 + # IDEs and editors 31 + .idea 32 + .cursor 33 + .claude 34 + 35 + # Finder (MacOS) folder config 36 + .DS_Store 37 + 38 + # editor/backup artifacts 39 + *.bak 40 + 41 + # test fixtures (not committed) 42 + test/*.mpp 43 + test/project_data.json 44 + test/project_schedule.csv
+3
.prettierignore
··· 1 + node_modules 2 + dist 3 + bun.lock
+7
.prettierrc
··· 1 + { 2 + "semi": true, 3 + "singleQuote": false, 4 + "trailingComma": "all", 5 + "printWidth": 100, 6 + "tabWidth": 2 7 + }
+31
eslint.config.mjs
··· 1 + import js from "@eslint/js"; 2 + import tseslint from "@typescript-eslint/eslint-plugin"; 3 + import tsparser from "@typescript-eslint/parser"; 4 + 5 + const config = [ 6 + { 7 + ignores: ["node_modules", "dist", "bun.lock"], 8 + }, 9 + js.configs.recommended, 10 + { 11 + files: ["**/*.ts", "**/*.tsx"], 12 + languageOptions: { 13 + parser: tsparser, 14 + parserOptions: { 15 + ecmaVersion: "latest", 16 + sourceType: "module", 17 + }, 18 + }, 19 + plugins: { 20 + "@typescript-eslint": tseslint, 21 + }, 22 + rules: { 23 + ...tseslint.configs.recommended.rules, 24 + "no-undef": "off", 25 + "no-unused-vars": "off", 26 + "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], 27 + }, 28 + }, 29 + ]; 30 + 31 + export default config;
+36
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + // Environment setup & latest features 4 + "lib": ["ESNext"], 5 + "target": "ESNext", 6 + "module": "Preserve", 7 + "moduleDetection": "force", 8 + "jsx": "react-jsx", 9 + "allowJs": true, 10 + "types": ["bun"], 11 + 12 + // Bundler mode 13 + "moduleResolution": "bundler", 14 + "allowImportingTsExtensions": true, 15 + "verbatimModuleSyntax": true, 16 + "noEmit": true, 17 + 18 + // Best practices 19 + "strict": true, 20 + "skipLibCheck": true, 21 + "noFallthroughCasesInSwitch": true, 22 + "noUncheckedIndexedAccess": true, 23 + "noImplicitOverride": true, 24 + 25 + // Strict flags 26 + "noUnusedLocals": true, 27 + "noUnusedParameters": true, 28 + "noPropertyAccessFromIndexSignature": true, 29 + "exactOptionalPropertyTypes": true, 30 + "noImplicitReturns": true, 31 + 32 + // Cache 33 + "incremental": true, 34 + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo" 35 + } 36 + }