From 4e527f9267ce37b3dfb3c2519aaedb7f15e74937 Mon Sep 17 00:00:00 2001 From: implementer Date: Fri, 28 Aug 2026 00:00:51 +0000 Subject: [PATCH] feat: add strict tsconfig.base.json shared by all packages (E00-S01-T02) Adds a strict base TypeScript config at the workspace root (ES2023 / NodeNext / strict family incl. noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, useUnknownInCatchVariables, verbatimModuleSyntax per Engineering-Standards) and gives every workspace package (apps/server, packages/core, extensions/example) a tsconfig.json that extends it. Each package gets a minimal src/index.ts placeholder so it compiles under the base config (CJS-safe `export {}` until ESM boundaries land in T03). Verified: every package typechecks and emits (js + d.ts + sourcemap) with the pinned TypeScript 6.0.3; a strictness probe confirms the strict family fires. Closes #155 --- apps/server/src/index.ts | 8 ++++++++ apps/server/tsconfig.json | 8 ++++++++ extensions/example/src/index.ts | 7 +++++++ extensions/example/tsconfig.json | 8 ++++++++ packages/core/src/index.ts | 7 +++++++ packages/core/tsconfig.json | 8 ++++++++ tsconfig.base.json | 20 ++++++++++++++++++++ 7 files changed, 66 insertions(+) create mode 100644 apps/server/src/index.ts create mode 100644 apps/server/tsconfig.json create mode 100644 extensions/example/src/index.ts create mode 100644 extensions/example/tsconfig.json create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/tsconfig.json create mode 100644 tsconfig.base.json diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts new file mode 100644 index 0000000..bd4187d --- /dev/null +++ b/apps/server/src/index.ts @@ -0,0 +1,8 @@ +/** + * @personal-blog/server — EPPP public server application. + * + * Bootstrap placeholder so apps/ is a real workspace package that compiles + * under tsconfig.base.json. The Fastify 5 application shell (and its real + * exports) lands in a later story. + */ +export {}; diff --git a/apps/server/tsconfig.json b/apps/server/tsconfig.json new file mode 100644 index 0000000..5285d28 --- /dev/null +++ b/apps/server/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/extensions/example/src/index.ts b/extensions/example/src/index.ts new file mode 100644 index 0000000..6b5602c --- /dev/null +++ b/extensions/example/src/index.ts @@ -0,0 +1,7 @@ +/** + * @personal-blog/example-extension — bootstrap placeholder extension. + * + * Real extensions (e.g. theme-amber) replace this placeholder in later + * stories. + */ +export {}; diff --git a/extensions/example/tsconfig.json b/extensions/example/tsconfig.json new file mode 100644 index 0000000..5285d28 --- /dev/null +++ b/extensions/example/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000..e74fa11 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,7 @@ +/** + * @personal-blog/core — EPPP application core. + * + * Bootstrap placeholder. Later EPPP stories replace this module with the real + * application core (site identity, content primitives, extension runtime). + */ +export {}; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..5285d28 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..4dc62c7 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2023", + "lib": ["ES2023"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "noImplicitOverride": true, + "useUnknownInCatchVariables": true, + "verbatimModuleSyntax": true, + "isolatedModules": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "sourceMap": true, + "skipLibCheck": true + } +}