cursedbelt-core 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/core/activity/index.d.ts +2 -2
  2. package/dist/core/activity/index.js +1 -1
  3. package/dist/core/activity/model.d.ts +2 -2
  4. package/dist/core/analytics/index.d.ts +2 -2
  5. package/dist/core/analytics/index.js +2 -2
  6. package/dist/core/category/index.d.ts +3 -3
  7. package/dist/core/category/index.js +2 -2
  8. package/dist/core/category/memoryStore.d.ts +1 -1
  9. package/dist/core/category/memoryStore.js +1 -1
  10. package/dist/core/category/tree.d.ts +1 -1
  11. package/dist/core/colorScheme/index.d.ts +1 -1
  12. package/dist/core/colorScheme/index.js +1 -1
  13. package/dist/core/folder-tree/actions.d.ts +1 -1
  14. package/dist/core/folder-tree/actions.js +1 -1
  15. package/dist/core/folder-tree/index.d.ts +3 -3
  16. package/dist/core/folder-tree/index.js +3 -3
  17. package/dist/core/folder-tree/tree.js +1 -1
  18. package/dist/core/master-lock/index.d.ts +4 -4
  19. package/dist/core/master-lock/index.js +4 -4
  20. package/dist/core/master-lock/wire.d.ts +1 -1
  21. package/dist/core/media/ffmpeg.d.ts +1 -1
  22. package/dist/core/media/format.d.ts +1 -1
  23. package/dist/core/media/index.d.ts +12 -12
  24. package/dist/core/media/index.js +11 -11
  25. package/dist/core/media/mediaItem.d.ts +1 -1
  26. package/dist/core/media/renderPlan.d.ts +1 -1
  27. package/dist/core/media/renderPlan.js +1 -1
  28. package/dist/core/media/validate.d.ts +1 -1
  29. package/dist/core/media/validate.js +1 -1
  30. package/dist/core/navigation/coverageTest.d.ts +1 -1
  31. package/dist/core/navigation/coverageTest.js +1 -1
  32. package/dist/core/navigation/index.d.ts +6 -6
  33. package/dist/core/navigation/index.js +6 -6
  34. package/dist/core/navigation/migrateNavPreferences.d.ts +1 -1
  35. package/dist/core/navigation/navigationSelectors.d.ts +1 -1
  36. package/dist/core/navigation/navigationSelectors.js +1 -1
  37. package/dist/core/navigation/searchCatalogue.d.ts +1 -1
  38. package/dist/core/palette/fuzzyRank.d.ts +1 -1
  39. package/dist/core/palette/index.d.ts +3 -3
  40. package/dist/core/palette/index.js +3 -3
  41. package/dist/core/sharing/index.d.ts +2 -2
  42. package/dist/core/sharing/index.js +1 -1
  43. package/dist/core/tokens/registry.d.ts +2 -2
  44. package/dist/core/tokens/registry.js +1 -1
  45. package/dist/core/uiScale/index.d.ts +2 -2
  46. package/dist/core/uiScale/index.js +2 -2
  47. package/dist/core/uiScale/uiScaleStore.js +1 -1
  48. package/dist/core/wire/__fixtures__/rowsMarshalWorker.js +1 -1
  49. package/dist/core/wire/index.d.ts +4 -4
  50. package/dist/core/wire/index.js +4 -4
  51. package/dist/core/wire/ingress.d.ts +1 -1
  52. package/dist/core/wire/ingress.js +3 -3
  53. package/dist/core/wire/marshalWorker.d.ts +1 -1
  54. package/dist/core/wire/marshalWorker.js +2 -2
  55. package/dist/core/wire/marshalling.js +1 -1
  56. package/dist/ctgr/chunkAccumulator.d.ts +1 -1
  57. package/dist/ctgr/chunkAccumulator.js +2 -2
  58. package/dist/ctgr/chunkStore.d.ts +1 -1
  59. package/dist/ctgr/chunkStore.js +2 -2
  60. package/dist/ctgr/codec.d.ts +1 -1
  61. package/dist/ctgr/codec.js +5 -5
  62. package/dist/ctgr/index.d.ts +9 -9
  63. package/dist/ctgr/index.js +9 -9
  64. package/dist/ctgr/v0compat.d.ts +1 -1
  65. package/dist/ctgr/v0compat.js +2 -2
  66. package/dist/index.d.ts +2 -2
  67. package/dist/index.js +2 -2
  68. package/dist/testing/index.d.ts +3 -3
  69. package/dist/testing/index.js +3 -3
  70. package/package.json +2 -2
  71. package/src/config/appConfig.spec.ts +1 -1
  72. package/src/core/activity/index.ts +2 -2
  73. package/src/core/activity/model.ts +2 -2
  74. package/src/core/analytics/index.ts +2 -2
  75. package/src/core/analytics/range.spec.ts +1 -1
  76. package/src/core/analytics/schedule.spec.ts +1 -1
  77. package/src/core/category/category.spec.ts +1 -1
  78. package/src/core/category/index.ts +3 -3
  79. package/src/core/category/memoryStore.ts +2 -2
  80. package/src/core/category/tree.ts +1 -1
  81. package/src/core/color.spec.ts +1 -1
  82. package/src/core/colorScheme/colorScheme.spec.ts +1 -1
  83. package/src/core/colorScheme/index.ts +1 -1
  84. package/src/core/download.spec.ts +1 -1
  85. package/src/core/duplicates/index.spec.ts +1 -1
  86. package/src/core/events/ccEventBus.spec.ts +1 -1
  87. package/src/core/file-tree/fileTreeModel.spec.ts +1 -1
  88. package/src/core/folder-tree/actions.spec.ts +2 -2
  89. package/src/core/folder-tree/actions.ts +2 -2
  90. package/src/core/folder-tree/index.ts +3 -3
  91. package/src/core/folder-tree/path.spec.ts +1 -1
  92. package/src/core/folder-tree/tree.spec.ts +1 -1
  93. package/src/core/folder-tree/tree.ts +1 -1
  94. package/src/core/master-lock/index.ts +4 -4
  95. package/src/core/master-lock/kdf.spec.ts +2 -2
  96. package/src/core/master-lock/presence.spec.ts +1 -1
  97. package/src/core/master-lock/wire.spec.ts +1 -1
  98. package/src/core/master-lock/wire.ts +1 -1
  99. package/src/core/media/bgRemoval.spec.ts +1 -1
  100. package/src/core/media/ffmpeg.spec.ts +2 -2
  101. package/src/core/media/ffmpeg.ts +1 -1
  102. package/src/core/media/format.spec.ts +1 -1
  103. package/src/core/media/format.ts +1 -1
  104. package/src/core/media/index.ts +12 -12
  105. package/src/core/media/mediaItem.spec.ts +2 -2
  106. package/src/core/media/mediaItem.ts +1 -1
  107. package/src/core/media/renderPlan.spec.ts +1 -1
  108. package/src/core/media/renderPlan.ts +2 -2
  109. package/src/core/media/segment.spec.ts +1 -1
  110. package/src/core/media/size.spec.ts +1 -1
  111. package/src/core/media/trim.spec.ts +1 -1
  112. package/src/core/media/validate.spec.ts +2 -2
  113. package/src/core/media/validate.ts +2 -2
  114. package/src/core/media/videoCuts.spec.ts +1 -1
  115. package/src/core/navigation/coverageTest.ts +2 -2
  116. package/src/core/navigation/index.ts +6 -6
  117. package/src/core/navigation/migrateNavPreferences.ts +1 -1
  118. package/src/core/navigation/navigation.spec.ts +1 -1
  119. package/src/core/navigation/navigationSelectors.ts +1 -1
  120. package/src/core/navigation/searchCatalogue.ts +1 -1
  121. package/src/core/net/reconnectSchedule.spec.ts +1 -1
  122. package/src/core/palette/fuzzyRank.ts +1 -1
  123. package/src/core/palette/index.ts +3 -3
  124. package/src/core/palette/palette.spec.ts +4 -4
  125. package/src/core/schema/projection.spec.ts +1 -1
  126. package/src/core/sharing/index.ts +2 -2
  127. package/src/core/sharing/model.spec.ts +1 -1
  128. package/src/core/tokens/registry.spec.ts +1 -1
  129. package/src/core/tokens/registry.ts +2 -2
  130. package/src/core/uiScale/index.ts +2 -2
  131. package/src/core/uiScale/uiScale.spec.ts +1 -1
  132. package/src/core/uiScale/uiScaleStore.ts +1 -1
  133. package/src/core/wire/__fixtures__/rowsMarshalWorker.ts +1 -1
  134. package/src/core/wire/index.ts +4 -4
  135. package/src/core/wire/ingress.spec.ts +2 -2
  136. package/src/core/wire/ingress.ts +3 -3
  137. package/src/core/wire/marshalWorker.spec.ts +2 -2
  138. package/src/core/wire/marshalWorker.ts +2 -2
  139. package/src/core/wire/marshalling.spec.ts +1 -1
  140. package/src/core/wire/marshalling.ts +1 -1
  141. package/src/core/wire/wireHub.spec.ts +1 -1
  142. package/src/ctgr/chunkAccumulator.ts +3 -3
  143. package/src/ctgr/chunkStore.spec.ts +2 -2
  144. package/src/ctgr/chunkStore.ts +3 -3
  145. package/src/ctgr/codec.spec.ts +4 -4
  146. package/src/ctgr/codec.ts +5 -5
  147. package/src/ctgr/index.ts +9 -9
  148. package/src/ctgr/v0compat.spec.ts +2 -2
  149. package/src/ctgr/v0compat.ts +3 -3
  150. package/src/index.ts +2 -2
  151. package/src/testTmpRoot.spec.ts +1 -1
  152. package/src/testing/index.ts +3 -3
@@ -3,7 +3,7 @@
3
3
  // (`cursedbelt/react/media`), and any consuming app/test. No React, no Bun, no npm
4
4
  // dep — the same module loads identically everywhere.
5
5
 
6
- export { type FloodFillBGOptions, floodFillBGS } from './bgRemoval';
6
+ export { type FloodFillBGOptions, floodFillBGS } from './bgRemoval.js';
7
7
  export {
8
8
  buildProbeArgs,
9
9
  buildThumbnailArgs,
@@ -14,7 +14,7 @@ export {
14
14
  parseFfprobe,
15
15
  type VideoCodecPlan,
16
16
  videoCodecPlan,
17
- } from './ffmpeg';
17
+ } from './ffmpeg.js';
18
18
  export {
19
19
  clampQuality,
20
20
  IMAGE_OUTPUT_FORMATS,
@@ -22,14 +22,14 @@ export {
22
22
  imageFormatToMime,
23
23
  mimeToImageFormat,
24
24
  pickThumbnailFormat,
25
- } from './format';
25
+ } from './format.js';
26
26
  export {
27
27
  isAudioItem,
28
28
  isImageItem,
29
29
  isVideoItem,
30
30
  mediaItemAspect,
31
31
  mediaItemDimensions,
32
- } from './mediaItem';
32
+ } from './mediaItem.js';
33
33
  export {
34
34
  buildAtempoChain,
35
35
  buildTimelineRenderPlan,
@@ -40,7 +40,7 @@ export {
40
40
  speedFilters,
41
41
  type TimelineRenderOptions,
42
42
  type TimelineRenderPlan,
43
- } from './renderPlan';
43
+ } from './renderPlan.js';
44
44
  export {
45
45
  closeMask,
46
46
  createRegionSegmenter,
@@ -56,15 +56,15 @@ export {
56
56
  type SegmentSource,
57
57
  sensitivityToTolerance,
58
58
  upscaleMask,
59
- } from './segment';
60
- export { formatBytes } from './size';
59
+ } from './segment.js';
60
+ export { formatBytes } from './size.js';
61
61
  export {
62
62
  type ClampTrimOptions,
63
63
  clampTrimRange,
64
64
  formatTimecode,
65
65
  type TrimRange,
66
66
  trimDurationSeconds,
67
- } from './trim';
67
+ } from './trim.js';
68
68
  export type {
69
69
  GalleryMedia,
70
70
  GalleryPhoto,
@@ -80,15 +80,15 @@ export type {
80
80
  VideoProgressEvent,
81
81
  VideoQuality,
82
82
  VideoTrimSpec,
83
- } from './types';
84
- export { DEFAULT_UPLOAD_CHUNK_SIZE, MAX_SINGLE_UPLOAD_BYTES } from './uploadLimits';
83
+ } from './types.js';
84
+ export { DEFAULT_UPLOAD_CHUNK_SIZE, MAX_SINGLE_UPLOAD_BYTES } from './uploadLimits.js';
85
85
  export {
86
86
  assertValidImagePipelineSpec,
87
87
  assertValidVideoTrimSpec,
88
88
  type ValidationResult,
89
89
  validateImagePipelineSpec,
90
90
  validateVideoTrimSpec,
91
- } from './validate';
91
+ } from './validate.js';
92
92
 
93
93
  // Marking sections of a video to CUT OUT. Framework-free on purpose: the dialog
94
94
  // (`react/media/VideoCutEditor`), the app route that refuses an unexecutable list and the
@@ -102,4 +102,4 @@ export {
102
102
  MIN_CUT_SECONDS,
103
103
  normalizeCuts,
104
104
  type VideoCut,
105
- } from './videoCuts';
105
+ } from './videoCuts.js';
@@ -5,8 +5,8 @@ import {
5
5
  isVideoItem,
6
6
  mediaItemAspect,
7
7
  mediaItemDimensions,
8
- } from './mediaItem';
9
- import type { MediaItem } from './types';
8
+ } from './mediaItem.js';
9
+ import type { MediaItem } from './types.js';
10
10
 
11
11
  const item = (over: Partial<MediaItem> = {}): MediaItem => ({
12
12
  id: '1',
@@ -2,7 +2,7 @@
2
2
  // catalogue maps items to layout photos through these, so the "what size is this
3
3
  // thumbnail" logic is tested here, not buried in a component.
4
4
 
5
- import type { MediaItem } from './types';
5
+ import type { MediaItem } from './types.js';
6
6
 
7
7
  export const isImageItem = (item: MediaItem): boolean => item.type === 'image';
8
8
  export const isVideoItem = (item: MediaItem): boolean => item.type === 'video';
@@ -5,7 +5,7 @@ import {
5
5
  buildTimelineRenderPlan,
6
6
  DEFAULT_NORMALIZE,
7
7
  speedFilters,
8
- } from './renderPlan';
8
+ } from './renderPlan.js';
9
9
 
10
10
  const clip = (partial: Partial<TimelineClip> & { id: string }): TimelineClip => ({
11
11
  name: partial.id,
@@ -16,8 +16,8 @@
16
16
  // where the gaps were. Audio clip offsets are their absolute `timelineStart`.
17
17
 
18
18
  import { clipDuration, roundSeconds, type TimelineClip, type TimelineTrack } from 'cwip/timeline';
19
- import { videoCodecPlan } from './ffmpeg';
20
- import type { VideoFormat, VideoQuality } from './types';
19
+ import { videoCodecPlan } from './ffmpeg.js';
20
+ import type { VideoFormat, VideoQuality } from './types.js';
21
21
 
22
22
  /** An auxiliary text file the executor writes before running the commands. */
23
23
  export interface RenderPlanFile {
@@ -9,7 +9,7 @@ import {
9
9
  type SegmentSource,
10
10
  sensitivityToTolerance,
11
11
  upscaleMask,
12
- } from './segment';
12
+ } from './segment.js';
13
13
 
14
14
  /** Build an RGBA source from a per-pixel color function. */
15
15
  const makeSource = (
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
- import { formatBytes } from './size';
2
+ import { formatBytes } from './size.js';
3
3
 
4
4
  describe('formatBytes', () => {
5
5
  test('formats across unit boundaries, dropping the decimal at ≥ 100 / in bytes', () => {
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
- import { clampTrimRange, formatTimecode, trimDurationSeconds } from './trim';
2
+ import { clampTrimRange, formatTimecode, trimDurationSeconds } from './trim.js';
3
3
 
4
4
  describe('clampTrimRange', () => {
5
5
  test('passes a valid range through', () => {
@@ -1,11 +1,11 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
- import type { ImagePipelineSpec, VideoTrimSpec } from './types';
2
+ import type { ImagePipelineSpec, VideoTrimSpec } from './types.js';
3
3
  import {
4
4
  assertValidImagePipelineSpec,
5
5
  assertValidVideoTrimSpec,
6
6
  validateImagePipelineSpec,
7
7
  validateVideoTrimSpec,
8
- } from './validate';
8
+ } from './validate.js';
9
9
 
10
10
  const baseImage = (over: Partial<ImagePipelineSpec> = {}): ImagePipelineSpec => ({
11
11
  input: '/tmp/in.jpg',
@@ -2,8 +2,8 @@
2
2
  // sharp or ffmpeg (where the failure mode is an opaque native error). No deps;
3
3
  // `validate*` returns a collected error list, `assert*` throws on the first problem.
4
4
 
5
- import { IMAGE_OUTPUT_FORMATS } from './format';
6
- import type { ImageOperation, ImagePipelineSpec, VideoTrimSpec } from './types';
5
+ import { IMAGE_OUTPUT_FORMATS } from './format.js';
6
+ import type { ImageOperation, ImagePipelineSpec, VideoTrimSpec } from './types.js';
7
7
 
8
8
  export interface ValidationResult {
9
9
  valid: boolean;
@@ -19,7 +19,7 @@ import {
19
19
  removeSplit,
20
20
  toggleSegment,
21
21
  type VideoCut,
22
- } from './videoCuts';
22
+ } from './videoCuts.js';
23
23
 
24
24
  const cut = (start: number, end: number): VideoCut => ({ start, end });
25
25
  const shape = (cuts: readonly VideoCut[]): string =>
@@ -6,8 +6,8 @@
6
6
  // can never silently bury. Framework-agnostic (throws a plain Error; works under
7
7
  // bun:test, vitest, jest) so the same factory drops into any app's spec file.
8
8
 
9
- import type { NavigationModel } from './navigationModel';
10
- import { deriveAllPaths, normalizeNavPath } from './navigationSelectors';
9
+ import type { NavigationModel } from './navigationModel.js';
10
+ import { deriveAllPaths, normalizeNavPath } from './navigationSelectors.js';
11
11
 
12
12
  /**
13
13
  * Build the coverage assertion for `model` against `allRoutePaths` (the app's full
@@ -7,11 +7,11 @@ export {
7
7
  type BreadcrumbItem,
8
8
  type BreadcrumbNode,
9
9
  buildBreadcrumbTrail,
10
- } from './breadcrumbCompat';
10
+ } from './breadcrumbCompat.js';
11
11
  export {
12
12
  createCoverageTest,
13
13
  findCoverageGaps,
14
- } from './coverageTest';
14
+ } from './coverageTest.js';
15
15
  export {
16
16
  CURRENT_NAV_PREFS_VERSION,
17
17
  type LegacyNavPrefs,
@@ -19,7 +19,7 @@ export {
19
19
  migrateNavPreferences,
20
20
  type NavPreferences,
21
21
  type NavTilePrefs,
22
- } from './migrateNavPreferences';
22
+ } from './migrateNavPreferences.js';
23
23
  export {
24
24
  allowAllGate,
25
25
  type GateFn,
@@ -29,7 +29,7 @@ export {
29
29
  type NavHostLimit,
30
30
  type NavItem,
31
31
  type NavigationModel,
32
- } from './navigationModel';
32
+ } from './navigationModel.js';
33
33
  export {
34
34
  deriveAllPaths,
35
35
  deriveBreadcrumbTrail,
@@ -41,10 +41,10 @@ export {
41
41
  type NavCrumb,
42
42
  normalizeNavPath,
43
43
  type SearchCatalogueEntry,
44
- } from './navigationSelectors';
44
+ } from './navigationSelectors.js';
45
45
  export {
46
46
  type CatalogueHit,
47
47
  type CatalogueResultGroup,
48
48
  groupCatalogueHits,
49
49
  rankCatalogue,
50
- } from './searchCatalogue';
50
+ } from './searchCatalogue.js';
@@ -6,7 +6,7 @@
6
6
  // cold load but no-ops once `version` is current, so colors/hidden the user set
7
7
  // AFTER migrating are never clobbered.
8
8
 
9
- import type { NavigationModel } from './navigationModel';
9
+ import type { NavigationModel } from './navigationModel.js';
10
10
 
11
11
  /** Bump when the migration logic or the prefs shape changes. */
12
12
  export const CURRENT_NAV_PREFS_VERSION = 1;
@@ -17,7 +17,7 @@ import {
17
17
  type NavigationModel,
18
18
  normalizeNavPath,
19
19
  rankCatalogue,
20
- } from './index';
20
+ } from './index.js';
21
21
 
22
22
  // A representative slice of the ca IA: 6 domains + an Admin domain + ungrouped, with
23
23
  // deepLinkOnly + gated + tab-target items — enough to exercise every selector.
@@ -11,7 +11,7 @@ import {
11
11
  type NavGroup,
12
12
  type NavItem,
13
13
  type NavigationModel,
14
- } from './navigationModel';
14
+ } from './navigationModel.js';
15
15
 
16
16
  /**
17
17
  * Normalize a path for route *matching* — drop the query string, the hash (the
@@ -4,7 +4,7 @@
4
4
  // shared by HeaderSearch and (task 14) the command palette. The palette upgrades the
5
5
  // *ranking* to uFuzzy; this is the dependency-free baseline both can fall back to.
6
6
 
7
- import type { SearchCatalogueEntry } from './navigationSelectors';
7
+ import type { SearchCatalogueEntry } from './navigationSelectors.js';
8
8
 
9
9
  /** A query hit with its computed relevance score (higher = better). */
10
10
  export interface CatalogueHit extends SearchCatalogueEntry {
@@ -3,7 +3,7 @@ import {
3
3
  createReconnectSchedule,
4
4
  RECONNECT_CAP_MS,
5
5
  retriesAreJittered,
6
- } from './reconnectSchedule';
6
+ } from './reconnectSchedule.js';
7
7
 
8
8
  describe('reconnect backoff with full jitter (J5-2)', () => {
9
9
  it('doubles the ceiling per attempt up to the cap', () => {
@@ -18,7 +18,7 @@
18
18
  // too, so "mandelbrot" still finds "Fractal".
19
19
 
20
20
  import uFuzzy from '@leeoniya/ufuzzy';
21
- import type { NavItem } from '../navigation';
21
+ import type { NavItem } from '../navigation/index.js';
22
22
 
23
23
  // One singleton instance — uFuzzy compiles regexes from its options on construction,
24
24
  // so re-creating it per query would be wasteful. `intraMode: 1` = contiguous match.
@@ -7,16 +7,16 @@
7
7
  export {
8
8
  fuzzyRankItems,
9
9
  searchInitials,
10
- } from './fuzzyRank';
10
+ } from './fuzzyRank.js';
11
11
  export {
12
12
  formatHotkey,
13
13
  isApplePlatform,
14
14
  matchHotkey,
15
15
  type ParsedHotkey,
16
16
  parseHotkey,
17
- } from './hotkeys';
17
+ } from './hotkeys.js';
18
18
  export {
19
19
  type ShortcutEntry,
20
20
  ShortcutRegistry,
21
21
  shortcutRegistry,
22
- } from './ShortcutRegistry';
22
+ } from './ShortcutRegistry.js';
@@ -1,8 +1,8 @@
1
1
  import { describe, expect, mock, test } from 'bun:test';
2
- import type { NavItem } from '../navigation';
3
- import { fuzzyRankItems, searchInitials } from './fuzzyRank';
4
- import { formatHotkey, matchHotkey, parseHotkey } from './hotkeys';
5
- import { ShortcutRegistry } from './ShortcutRegistry';
2
+ import type { NavItem } from '../navigation/index.js';
3
+ import { fuzzyRankItems, searchInitials } from './fuzzyRank.js';
4
+ import { formatHotkey, matchHotkey, parseHotkey } from './hotkeys.js';
5
+ import { ShortcutRegistry } from './ShortcutRegistry.js';
6
6
 
7
7
  // ── fuzzyRank ────────────────────────────────────────────────────────────────
8
8
 
@@ -11,7 +11,7 @@ import {
11
11
  projectColumn,
12
12
  projectRow,
13
13
  STORAGE_COLUMN,
14
- } from './projection';
14
+ } from './projection.js';
15
15
 
16
16
  const column = (over: Partial<ProjectedColumn> & Pick<ProjectedColumn, 'colType'>): ProjectedColumn => ({
17
17
  id: 'col_1',
@@ -17,7 +17,7 @@ export {
17
17
  sameSubject,
18
18
  SHARE_ACTIONS,
19
19
  strongerAccess,
20
- } from "./model";
20
+ } from "./model.js";
21
21
  export type {
22
22
  ShareAccess,
23
23
  ShareAction,
@@ -30,4 +30,4 @@ export type {
30
30
  ShareSubject,
31
31
  ShareSubjectType,
32
32
  ShareViewer,
33
- } from "./model";
33
+ } from "./model.js";
@@ -12,7 +12,7 @@ import {
12
12
  resourceKey,
13
13
  type ShareGrant,
14
14
  strongerAccess,
15
- } from "./model";
15
+ } from "./model.js";
16
16
 
17
17
  const resource = { app: "family", kind: "person", id: "p1" };
18
18
 
@@ -9,7 +9,7 @@ import {
9
9
  stagingPluginOf,
10
10
  type TokenDef,
11
11
  TokenRegistry,
12
- } from './registry';
12
+ } from './registry.js';
13
13
 
14
14
  const token = (over: Partial<TokenDef> & { id: string }): TokenDef => ({
15
15
  mode: 'value',
@@ -55,13 +55,13 @@ export interface TokenDef<S extends z.ZodType = z.ZodType> {
55
55
  * They used to be a second, divergent declaration of the same names — see the
56
56
  * unification note on `CCWireMarshaller` (05 §B1).
57
57
  */
58
- import type { CCWireMarshaller } from '../wire/marshalling';
58
+ import type { CCWireMarshaller } from '../wire/marshalling.js';
59
59
 
60
60
  export {
61
61
  type CCWireMarshaller,
62
62
  MARSHALLER_WORKER_OFFLOAD_BYTES,
63
63
  requiresWorkerOffload,
64
- } from '../wire/marshalling';
64
+ } from '../wire/marshalling.js';
65
65
 
66
66
  export type TokenRegistryIssueCode =
67
67
  | 'token-collision'
@@ -16,7 +16,7 @@ export {
16
16
  type UiScaleLevel,
17
17
  type UiScaleLevelId,
18
18
  uiScaleToFontSize,
19
- } from './scale';
19
+ } from './scale.js';
20
20
  export {
21
21
  applyUiScaleToDocument,
22
22
  createUiScaleStore,
@@ -29,4 +29,4 @@ export {
29
29
  type UiScaleStore,
30
30
  type UiScaleStoreOptions,
31
31
  uiScaleStore,
32
- } from './uiScaleStore';
32
+ } from './uiScaleStore.js';
@@ -7,7 +7,7 @@ import {
7
7
  stepUiScale,
8
8
  type UiScaleStorage,
9
9
  uiScaleToFontSize,
10
- } from './index';
10
+ } from './index.js';
11
11
 
12
12
  describe('ui-scale pure model', () => {
13
13
  test('clamps into the supported range; non-finite → default', () => {
@@ -9,7 +9,7 @@
9
9
  * `localStorage` + the `<html>` element.
10
10
  */
11
11
 
12
- import { clampUiScale, DEFAULT_UI_SCALE, stepUiScale, uiScaleToFontSize } from './scale';
12
+ import { clampUiScale, DEFAULT_UI_SCALE, stepUiScale, uiScaleToFontSize } from './scale.js';
13
13
 
14
14
  /** The slice of the Web Storage API the store needs (so a test can fake it). */
15
15
  export interface UiScaleStorage {
@@ -8,7 +8,7 @@
8
8
  * and the worker imports it.
9
9
  */
10
10
  import { z } from 'zod';
11
- import { serveMarshalWorker } from '../marshalWorker';
11
+ import { serveMarshalWorker } from '../marshalWorker.js';
12
12
 
13
13
  const schema = z.object({ rows: z.array(z.object({ id: z.string() })) });
14
14
 
@@ -24,7 +24,7 @@ export {
24
24
  marshalInbound,
25
25
  payloadBytes,
26
26
  requiresWorkerOffload,
27
- } from './marshalling';
27
+ } from './marshalling.js';
28
28
 
29
29
  export {
30
30
  createMarshalWorkerClient,
@@ -36,14 +36,14 @@ export {
36
36
  type MarshalWorkerRequest,
37
37
  type MarshalWorkerResponse,
38
38
  serveMarshalWorker,
39
- } from './marshalWorker';
39
+ } from './marshalWorker.js';
40
40
 
41
41
  export {
42
42
  createMarshalledIngress,
43
43
  INGRESS_TOKEN_UNKNOWN,
44
44
  type MarshalledIngress,
45
45
  type MarshalledIngressOptions,
46
- } from './ingress';
46
+ } from './ingress.js';
47
47
 
48
48
  export {
49
49
  createInstanceRuntime,
@@ -53,4 +53,4 @@ export {
53
53
  type WireEnvelope,
54
54
  type WireHub,
55
55
  type WireHubOptions,
56
- } from './wireHub';
56
+ } from './wireHub.js';
@@ -11,8 +11,8 @@
11
11
  import { describe, expect, it } from 'bun:test';
12
12
  import { Hono } from 'hono';
13
13
  import { z } from 'zod';
14
- import { createMarshalledIngress, INGRESS_TOKEN_UNKNOWN } from './ingress';
15
- import { type CCWireMarshaller, createMarshallerRegistry } from './marshalling';
14
+ import { createMarshalledIngress, INGRESS_TOKEN_UNKNOWN } from './ingress.js';
15
+ import { type CCWireMarshaller, createMarshallerRegistry } from './marshalling.js';
16
16
 
17
17
  const schema = z.object({ rows: z.array(z.object({ id: z.string() })) });
18
18
  const WORKER_ENTRY = new URL('./__fixtures__/rowsMarshalWorker.ts', import.meta.url);
@@ -50,14 +50,14 @@
50
50
  * A CSV import is the same three lines with a different marshaller and a
51
51
  * different service call. Neither needs to know that a worker exists.
52
52
  */
53
- import { AppError } from '../../shared/errors';
54
- import { createMarshalWorkerClient, type MarshalWorkerClient } from './marshalWorker';
53
+ import { AppError } from '../../shared/errors.js';
54
+ import { createMarshalWorkerClient, type MarshalWorkerClient } from './marshalWorker.js';
55
55
  import {
56
56
  type CCWireMarshaller,
57
57
  marshalInbound,
58
58
  type MarshallerRegistry,
59
59
  type MarshalWorker,
60
- } from './marshalling';
60
+ } from './marshalling.js';
61
61
 
62
62
  /** No marshaller is registered for the token an ingress was asked to feed. */
63
63
  export const INGRESS_TOKEN_UNKNOWN = 'INGRESS_TOKEN_UNKNOWN';
@@ -15,8 +15,8 @@ import {
15
15
  createMarshalWorkerClient,
16
16
  MARSHALLER_WORKER_FAILED,
17
17
  MARSHALLER_WORKER_TIMEOUT,
18
- } from './marshalWorker';
19
- import { type CCWireMarshaller, marshalInbound, requiresWorkerOffload } from './marshalling';
18
+ } from './marshalWorker.js';
19
+ import { type CCWireMarshaller, marshalInbound, requiresWorkerOffload } from './marshalling.js';
20
20
 
21
21
  const schema = z.object({ rows: z.array(z.object({ id: z.string() })) });
22
22
  const WORKER_ENTRY = new URL('./__fixtures__/rowsMarshalWorker.ts', import.meta.url);
@@ -33,13 +33,13 @@
33
33
  * inside the server branch — a static import would put a Node builtin in the
34
34
  * module graph of every client bundle that touches wire code.
35
35
  */
36
- import { AppError } from '../../shared/errors';
36
+ import { AppError } from '../../shared/errors.js';
37
37
  import {
38
38
  type CCWireMarshaller,
39
39
  MARSHALLER_SCHEMA_VIOLATION,
40
40
  MARSHALLER_VALIDATION_FAILED,
41
41
  type MarshalWorker,
42
- } from './marshalling';
42
+ } from './marshalling.js';
43
43
 
44
44
  export const MARSHALLER_WORKER_FAILED = 'MARSHALLER_WORKER_FAILED';
45
45
  export const MARSHALLER_WORKER_TIMEOUT = 'MARSHALLER_WORKER_TIMEOUT';
@@ -9,7 +9,7 @@ import {
9
9
  MARSHALLER_WORKER_OFFLOAD_BYTES,
10
10
  marshalInbound,
11
11
  payloadBytes,
12
- } from './marshalling';
12
+ } from './marshalling.js';
13
13
 
14
14
  const schema = z.object({ rows: z.array(z.object({ id: z.string() })) });
15
15
 
@@ -15,7 +15,7 @@
15
15
  * the work is offloaded to a Worker (structured-clone in, validated result out).
16
16
  */
17
17
  import type { z } from 'zod';
18
- import { AppError } from '../../shared/errors';
18
+ import { AppError } from '../../shared/errors.js';
19
19
 
20
20
  /** Above this, `validate` + `transform` are offloaded to a Worker (02 §7.1). */
21
21
  export const MARSHALLER_WORKER_OFFLOAD_BYTES = 512 * 1024;
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'bun:test';
2
- import { createInstanceRuntime, createWireHub, type WireEnvelope } from './wireHub';
2
+ import { createInstanceRuntime, createWireHub, type WireEnvelope } from './wireHub.js';
3
3
 
4
4
  const envelope = <T>(rev: number, payload: T, scope?: string): WireEnvelope<T> => ({ rev, at: rev, payload, scope });
5
5
 
@@ -62,9 +62,9 @@
62
62
  * - The service itself is a singleton; do NOT create multiple instances per server or request thread
63
63
  */
64
64
 
65
- import { decodePayload, type ParsedChunk, parseChunk } from './codec';
66
- import { sha256Hex } from './digest';
67
- import type { CtgrDecoded, CtgrMethod } from './types';
65
+ import { decodePayload, type ParsedChunk, parseChunk } from './codec.js';
66
+ import { sha256Hex } from './digest.js';
67
+ import type { CtgrDecoded, CtgrMethod } from './types.js';
68
68
 
69
69
  /**
70
70
  * Configuration for ChunkAccumulator resource limits and timing behavior.
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
- import { ChunkStore } from './chunkStore';
3
- import { encodeRequest } from './codec';
2
+ import { ChunkStore } from './chunkStore.js';
3
+ import { encodeRequest } from './codec.js';
4
4
 
5
5
  const bigBody = { data: 'y'.repeat(8000), tag: 'multi' };
6
6
  // gzip disabled (high threshold) so the chunk count is deterministic — 'y'*8000 would
@@ -9,9 +9,9 @@
9
9
  * It NEVER throws: a malformed/corrupt/oversized payload returns an `Error` the
10
10
  * middleware maps to a 400; an intermediate chunk returns `false` (→ 202).
11
11
  */
12
- import { decodePayload, type ParsedChunk, parseChunk } from './codec';
13
- import { sha256Hex } from './digest';
14
- import type { CtgrDecoded, CtgrMethod } from './types';
12
+ import { decodePayload, type ParsedChunk, parseChunk } from './codec.js';
13
+ import { sha256Hex } from './digest.js';
14
+ import type { CtgrDecoded, CtgrMethod } from './types.js';
15
15
 
16
16
  export interface ChunkStoreOpts {
17
17
  /** Max concurrent in-flight (incomplete) payloads. Default 200. */
@@ -1,8 +1,8 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
- import { toBase64 } from './base64url';
3
- import { ChunkStore } from './chunkStore';
4
- import { decodePayload, decodeRequest, encodeRequest, extractFiles, parseChunk } from './codec';
5
- import { ABBREV_TO_METHOD } from './types';
2
+ import { toBase64 } from './base64url.js';
3
+ import { ChunkStore } from './chunkStore.js';
4
+ import { decodePayload, decodeRequest, encodeRequest, extractFiles, parseChunk } from './codec.js';
5
+ import { ABBREV_TO_METHOD } from './types.js';
6
6
 
7
7
  const paramsOf = (url: string) => Object.fromEntries(new URL(url, 'http://x').searchParams);
8
8