refactor: projection-key home moves to src/types.ts with /types + /client/types dual outlets
This commit is contained in:
@@ -15,9 +15,13 @@
|
||||
"types": "./lib/types/invariant.d.ts",
|
||||
"default": "./lib/invariant.js"
|
||||
},
|
||||
"./types": {
|
||||
"types": "./lib/types/types.d.ts",
|
||||
"default": "./lib/types/types.js"
|
||||
},
|
||||
"./client/types": {
|
||||
"types": "./lib/types/client/types.d.ts",
|
||||
"default": "./lib/types/client/types.js"
|
||||
"types": "./lib/types/client/index.d.ts",
|
||||
"default": "./lib/types/client/index.js"
|
||||
},
|
||||
"./src/*": "./src/*",
|
||||
"./package.json": "./package.json"
|
||||
|
||||
10
packages/session-title/session-title/src/client/index.ts
Normal file
10
packages/session-title/session-title/src/client/index.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Browser half-entry of the title domain: a pure re-export of the package's
|
||||
* types outlet. Client code imports ONLY the client namespace (repo
|
||||
* discipline), so `./client/types` projects the same single-source content
|
||||
* `./types` serves to host consumers — zero duplication.
|
||||
*
|
||||
* @module @deepseek-ai/dsh-session-title/client/types
|
||||
*/
|
||||
|
||||
export type * from '../types.ts'
|
||||
@@ -17,12 +17,11 @@ import type {
|
||||
} from '@deepseek-ai/dsh-session'
|
||||
// Type-only: resolves ctx.sessionProjections for the optional unit child.
|
||||
import type {} from '@deepseek-ai/dsh-session-projection'
|
||||
// The `title` projection-key declaration lives in the client outlet (its one
|
||||
// home). A PLAIN side-effect import, not `import type`: declaration emit
|
||||
// elides type-only imports, and the aggregate programs resolve this package
|
||||
// through its emitted declarations — the merge must survive in index.d.ts.
|
||||
// The imported module is types-only, so the runtime edge is an empty module.
|
||||
import './client/types.ts'
|
||||
// The `title` projection-key declaration lives in src/types.ts (its one home);
|
||||
// this re-export projects the type face onto the package root AND keeps the
|
||||
// module edge in the emitted index.d.ts, so aggregate programs consuming the
|
||||
// declarations still receive the SessionProjectionMap merge.
|
||||
export type * from './types.ts'
|
||||
import { fallbackSessionTitle, normalizeSessionTitle } from './normalize.ts'
|
||||
|
||||
export { fallbackSessionTitle, normalizeSessionTitle, truncateTitleUtf8 } from './normalize.ts'
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
/**
|
||||
* Pure-type client outlet of the title domain: the ONE home of the `title`
|
||||
* projection-key declaration, importable from client aggregates without
|
||||
* dragging this package's host-side value imports (cordis service,
|
||||
* schemastery, the llm seam). The host entry (`index.ts`) imports this module
|
||||
* type-only to reuse the same merge — one declaration serves both program
|
||||
* sides.
|
||||
* Pure types of the title domain: the ONE home of the `title` projection-key
|
||||
* declaration, free of this package's host-side value imports (cordis
|
||||
* service, schemastery, the llm seam). Two namespace projections serve it —
|
||||
* `./types` for host consumers, `./client/types` (the browser half-entry's
|
||||
* re-export) for client aggregates — with zero content duplication.
|
||||
*
|
||||
* @module @deepseek-ai/dsh-session-title/client/types
|
||||
* @module @deepseek-ai/dsh-session-title/types
|
||||
*/
|
||||
|
||||
// Marks this file a module so the declaration below AUGMENTS the projection
|
||||
Reference in New Issue
Block a user