From d875df09a3b39c8b01f4455b2d03753206a8ca85 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Thu, 12 Feb 2026 11:19:29 -0800 Subject: [PATCH] chore(scaffold): initialize pnpm workspace with build tooling - Root package.json with @bytelyst/root, pnpm scripts (build, test, typecheck, clean) - pnpm-workspace.yaml declaring packages/* - tsconfig.base.json (ESM, strict, ES2022, NodeNext) - vitest.config.ts (globals, node environment) - .gitignore, .nvmrc (Node 20), .editorconfig - README.md with package overview and quick start --- .editorconfig | 12 ++++++++ .gitignore | 7 +++++ .nvmrc | 1 + README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 26 ++++++++++++++++++ pnpm-workspace.yaml | 2 ++ tsconfig.base.json | 18 ++++++++++++ vitest.config.ts | 8 ++++++ 8 files changed, 141 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 README.md create mode 100644 package.json create mode 100644 pnpm-workspace.yaml create mode 100644 tsconfig.base.json create mode 100644 vitest.config.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..4a7ea303 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..87274346 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +coverage/ +.DS_Store +*.tsbuildinfo +.env +.env.local diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..209e3ef4 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/README.md b/README.md new file mode 100644 index 00000000..f69e0479 --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# @bytelyst/common-platform + +Shared packages for the ByteLyst ecosystem — used by [LysnrAI](https://github.com/saravanakumardb1/learning_voice_ai_agent) and [MindLyst](https://github.com/saravanakumardb1/learning_multimodal_memory_agents). + +## Packages + +| Package | Description | Peer Dependencies | +|---------|-------------|-------------------| +| `@bytelyst/errors` | Typed HTTP service errors (400–429) | — | +| `@bytelyst/cosmos` | Azure Cosmos DB client singleton + container registry | `@azure/cosmos` | +| `@bytelyst/config` | Zod-based env config loader + product identity | `zod` | +| `@bytelyst/auth` | JWT utilities, auth middleware, password hashing | `jose`, `bcryptjs` | +| `@bytelyst/api-client` | Configurable fetch wrapper with auth token injection | — | +| `@bytelyst/react-auth` | React auth context factory (typed provider + hook) | `react` | +| `@bytelyst/design-tokens` | Cross-platform design tokens (JSON → CSS/TS/Kotlin/Swift) | — | + +## Quick Start + +```bash +# Install dependencies +pnpm install + +# Build all packages +pnpm build + +# Run all tests +pnpm test + +# Type-check all packages +pnpm typecheck +``` + +## Consuming from LysnrAI / MindLyst + +During development, use `file:` references in consumer `package.json`: + +```jsonc +// From Fastify services (3 levels up): +"@bytelyst/errors": "file:../../../learning_ai_common_plat/packages/errors" + +// From Next.js dashboards at repo root (2 levels up): +"@bytelyst/errors": "file:../../learning_ai_common_plat/packages/errors" + +// From MindLyst web (3 levels up — inside mindlyst-native/web/): +"@bytelyst/design-tokens": "file:../../../learning_ai_common_plat/packages/design-tokens" +``` + +All repos must be cloned side-by-side under the same parent directory. + +## Design Tokens + +Generate platform-specific token files from the canonical JSON: + +```bash +cd packages/design-tokens +pnpm generate +``` + +Outputs in `packages/design-tokens/generated/`: +- `tokens.css` — CSS custom properties (`--ml-*`) +- `tokens.ts` — TypeScript constants +- `MindLystTokens.kt` — Kotlin object for KMP +- `MindLystTheme.swift` — Swift structs for SwiftUI + +## Roadmap + +See [docs/ROADMAP.md](docs/ROADMAP.md) for the full phased extraction plan. diff --git a/package.json b/package.json new file mode 100644 index 00000000..4bcd552c --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "@bytelyst/root", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "build": "pnpm -r build", + "test": "pnpm -r test", + "typecheck": "pnpm -r exec tsc --noEmit", + "clean": "pnpm -r exec rm -rf dist" + }, + "devDependencies": { + "@types/bcryptjs": "^2.4.6", + "@types/node": "^20.0.0", + "@types/react": "^19.0.0", + "typescript": "^5.7.0", + "vitest": "^3.0.0" + }, + "peerDependencies": { + "@azure/cosmos": ">=4.0.0", + "bcryptjs": ">=2.4.0", + "jose": ">=5.0.0", + "react": ">=18.0.0", + "zod": ">=3.20.0" + } +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..dee51e92 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "packages/*" diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 00000000..2ec96e64 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": ["ES2022"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "dist", + "rootDir": "src" + } +} diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..3f824fb9 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + environment: "node", + }, +});