@lssm-tech/lib.utils-typescript
Builds use the existing public manifest targets, retaining all 31 existing root/type entrypoints. The root's runtime helpers remain bundled once per target; new private files cannot become build entries or public subpaths through a source glob. Source and published export maps remain explicit, and strict declaration consumers keep their import paths. bun run test checks the runtime exhaustiveness helper and entry policy; packed probes qualify utility types.
The supported UtilsTypescriptFeature retains its complete FeatureModuleSpec
type and existing metadata. Its canonical model/helper dependency is the portable
@lssm-tech/lib.contracts-spec-core/features surface; the utility package no longer loads the legacy feature installation and registry surface through that helper. The production Core dependency also supplies declarations to isolated consumers.
Website: https://contractspec.io
TypeScript utility types and helpers.
What It Provides
- Couche: lib.
- Consumers: many libs and bundles (wide blast radius).
- Related ContractSpec packages include
@lssm-tech/tool.bun, @lssm-tech/tool.typescript.
- Related ContractSpec packages include
@lssm-tech/tool.bun, @lssm-tech/tool.typescript.
Installation
npm install @lssm-tech/lib.utils-typescript
or
bun add @lssm-tech/lib.utils-typescript
Usage
Import the root entrypoint from @lssm-tech/lib.utils-typescript, or choose a documented subpath when you only need one part of the package surface.
Architecture
src/index.ts is the root public barrel and package entrypoint.
src/lib/ contains package-local helper utilities and adapters.
src/staticShouldNotHappen.ts is part of the package's public or composition surface.
Public Entry Points
- Export
. resolves through ./src/index.ts.
- Export
./lib/AwaitedResult resolves through ./src/lib/AwaitedResult.ts.
- Export
./lib/BrowserNativeObject resolves through ./src/lib/BrowserNativeObject.ts.
- Export
./lib/DeepInfiniteArray resolves through ./src/lib/DeepInfiniteArray.ts.
- Export
./lib/DeepKeepOnly resolves through ./src/lib/DeepKeepOnly.ts.
- Export
./lib/DeepKey resolves through ./src/lib/DeepKey.ts.
- Export
./lib/DeepMap resolves through ./src/lib/DeepMap.ts.
- Export
./lib/DeepNullable resolves through ./src/lib/DeepNullable.ts.
- Export
./lib/DeepOr resolves through ./src/lib/DeepOr.ts.
- Export
./lib/DeepPartial resolves through ./src/lib/DeepPartial.ts.
- The package publishes 33 total export subpaths; keep docs aligned with
package.json.
Local Commands
bun run dev — contractspec-bun-build dev
bun run build — contractspec-bun-build build
bun run lint — bun run lint:fix
bun run lint:check — biome check .
bun run lint:fix — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
bun run typecheck — tsgo --noEmit
bun run publish:pkg — bun publish --tolerate-republish --ignore-scripts --verbose
bun run publish:pkg:canary — bun publish:pkg --tag canary
bun run clean — rm -rf dist
bun run build:bundle — contractspec-bun-build transpile
bun run build:types — contractspec-bun-build types
bun run prebuild — contractspec-bun-build prebuild
Recent Updates
- Replace eslint+prettier by biomejs to optimize speed.
Notes
- Utility types are used across the entire monorepo — changes can break many packages.
- Must stay zero-dependency (no runtime deps).
- Test any signature change against downstream consumers before merging.
Portable filesystem and logging contracts now have one canonical owner in
@lssm-tech/lib.utils-typescript/ports/fs and /ports/logger. Their complete interfaces are unchanged. Existing CLI /ports/fs and /ports/logger imports remain compatible type exports; Builder delivery uses the portable contracts directly and no longer depends on the CLI host.
Canonical operation names
The explicit ./lib/operationNames leaf owns the complete provider-neutral
defaultRestPath, sanitizeMcpName, defaultMcpTool, defaultMcpPrompt and
defaultGqlField helpers. Legacy JSON-schema imports forward to these same functions; dots, version formatting, prompt sanitization and truncation defaults remain unchanged. JSON-schema conversion stays in its existing owner.