refactor: replace dynamic imports with static imports in CLI #61
@@ -0,0 +1,34 @@
|
||||
---
|
||||
description: Ban dynamic import() in production code — use static imports instead
|
||||
globs: packages/*/src/**/*.ts
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# No Dynamic Import in Production Code
|
||||
|
||||
## Rule
|
||||
|
||||
Do NOT use `await import()` or dynamic `import()` expressions in production source code.
|
||||
Always use static top-level `import` statements.
|
||||
|
||||
## Why
|
||||
|
||||
- Static imports enable tree-shaking and bundler optimizations
|
||||
- They make dependencies explicit and discoverable at a glance
|
||||
- Dynamic imports of Node built-ins or project modules add unnecessary async overhead
|
||||
|
||||
## Exceptions (must include a comment explaining why)
|
||||
|
||||
1. **`sense-runtime.ts`** — loads user-authored sense modules whose paths are only known at runtime
|
||||
2. **`workflow-worker.ts`** — loads user-authored workflow modules whose paths are only known at runtime
|
||||
|
||||
When suppressing, add a comment directly above:
|
||||
|
||||
```ts
|
||||
// Dynamic import required: user module path resolved at runtime
|
||||
const mod = await import(senseIndexPath);
|
||||
```
|
||||
|
||||
## Test Files
|
||||
|
||||
Test files (`__tests__/**`) are exempt — dynamic import after `vi.mock()` is standard vitest practice.
|
||||
@@ -173,6 +173,7 @@ export async function loadComputeFn(senseIndexPath: string): Promise<Result<Comp
|
||||
let mod: unknown;
|
||||
|
||||
try {
|
||||
// Dynamic import required: user-authored sense module, path resolved at runtime
|
||||
mod = await import(senseIndexPath);
|
||||
} catch (e) {
|
||||
const msg = e instanceof Error ? e.message : String(e);
|
||||
|
||||
@@ -197,6 +197,7 @@ async function loadWorkflowDefinition(
|
||||
);
|
||||
}
|
||||
|
||||
// Dynamic import required: user-authored workflow module, path resolved at runtime
|
||||
const mod = await import(indexPath);
|
||||
const def: unknown = mod.default ?? mod;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user