Plan 01-10 (welcome tab) has NOT yet landed at execute-plan time
(verified: ls src/welcome/welcome.html returns absent). Per Wave 5
branch 2B, src/welcome/* file modifications are DEFERRED — when Plan
01-10 lands, its executor will use src/shared/tokens.css directly
(skipping the placeholder welcome-tokens.css step entirely; the
canonical tokens.css is already import-ready from src/shared/).
Unconditional changes in this wave:
1. vite.config.ts gains __VITE_DEV__ define-token (RESEARCH §12 +
D-09 spirit-satisfaction). Defaults to false; activates iff env
var VITE_DEV=1 is set. Reserved for any future inline smoke-mode
check. Currently smoke.sh lives entirely outside Vite's input set
so the gate is a defensive no-op:
define: { __MOKOSH_UAT__: 'false', __VITE_DEV__: JSON.stringify(...) }
2. vite.test.config.ts inherits __VITE_DEV__ via mergeConfig (the
test config only overrides __MOKOSH_UAT__: 'true'; __VITE_DEV__
from base flows through untouched).
3. scripts/README.md (NEW, ~50 lines): documents the smoke-isolation
invariant — dev-only scripts in scripts/ are NOT bundled by
`npm run build`; the production dist/ contains zero smoke
artifacts (verified by RESEARCH §12 grep gate). Provides usage
example for VITE_DEV env override + cross-references RESEARCH §12
and brand-decisions-v1.md D-09. Index lists subset-fonts.sh,
rasterize-icons.sh, and smoke.sh (if present).
Note on Plan 01-10 deferral: when Plan 01-10 executes after this
plan closes, the welcome page src/welcome/welcome.css can either
@import '../shared/tokens.css' directly OR a thin welcome-tokens.css
re-export — both paths are supported by the canonical tokens.css
landed in Wave 1. Plan 01-10's executor must adopt chrome.i18n.getMessage
for any welcome copy strings using the 16-key matrix in _locales/
(welcomeHeroRu + welcomeHeroEn already defined; additional keys
added per Plan 01-10's own artifact list).
Verification:
- vitest baseline 147/147 GREEN (no change from Wave 4 close)
- npm run build clean (no warnings; __VITE_DEV__ propagates through
define static replacement)
- scripts/README.md exists with the smoke-isolation paragraph
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
import { defineConfig } from 'vite';
|
|
import { crx } from '@crxjs/vite-plugin';
|
|
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
|
import manifest from './manifest.json';
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
crx({
|
|
manifest,
|
|
contentScripts: {
|
|
injectCss: false,
|
|
},
|
|
}),
|
|
nodePolyfills({
|
|
include: ['buffer'],
|
|
globals: {
|
|
Buffer: true,
|
|
global: false,
|
|
process: false,
|
|
},
|
|
protocolImports: false,
|
|
}),
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
ebml: 'ebml/lib/ebml.js',
|
|
},
|
|
},
|
|
// `define` text-replaces token symbols at bundle time. We declare
|
|
// __MOKOSH_UAT__ as `false` in the production config so the gated
|
|
// hook-import branches in src/background/index.ts + src/offscreen/
|
|
// recorder.ts are static dead branches that Rollup tree-shakes. The
|
|
// test-only build (vite.test.config.ts) overrides this to `true`. We
|
|
// chose a dedicated token rather than gating on import.meta.env.MODE
|
|
// because vitest also uses MODE='test' by default — gating on MODE
|
|
// would activate the hooks during unit tests and overwrite the
|
|
// vi.fn() chrome.* mocks the existing 83-test baseline relies on.
|
|
// Reference: https://vite.dev/config/shared-options.html#define
|
|
define: {
|
|
__MOKOSH_UAT__: 'false',
|
|
// Plan 01-12 Wave 5 (RESEARCH §12 + D-09 spirit-satisfaction):
|
|
// Defensive token reserved for any future inline smoke-mode check.
|
|
// Currently the smoke harness lives entirely in `smoke.sh` outside
|
|
// Vite's input set — verified by `grep -rn 'smoke\|SMOKE\|data:text/html' src/`
|
|
// returning empty. Activated by setting the env var `VITE_DEV=1`
|
|
// before invoking `vite` / `vite build`; defaults to `false` so the
|
|
// gated branch (if any future plan adds one) is statically tree-
|
|
// shaken out of production. See scripts/README.md for the wider
|
|
// dev-script isolation invariant.
|
|
__VITE_DEV__: JSON.stringify(process.env.VITE_DEV === '1'),
|
|
},
|
|
build: {
|
|
// Plan 01-11: bump from default ES2020 to ES2022 so gated top-level
|
|
// await (`if (__MOKOSH_UAT__) { await import(...); }` in
|
|
// src/background/index.ts + src/offscreen/recorder.ts) compiles.
|
|
// The extension targets MV3 (Chrome ≥88); top-level await landed in
|
|
// Chrome 89 / Edge 89 / Firefox 89 / Safari 15 per MDN — comfortably
|
|
// inside the MV3 compatibility envelope.
|
|
// Reference: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/await#browser_compatibility
|
|
// Reference: https://vite.dev/config/build-options.html#build-target
|
|
target: 'es2022',
|
|
rollupOptions: {
|
|
input: {
|
|
offscreen: 'src/offscreen/index.html',
|
|
},
|
|
},
|
|
},
|
|
});
|