cursedbelt 1.0.0 → 2.3.0
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.
- package/dist/client/index.js +1 -1
- package/dist/core/category/index.d.ts.map +1 -1
- package/dist/core/category/index.js +2 -1
- package/dist/core/category/index.js.map +1 -1
- package/dist/core/category/types.js +1 -1
- package/dist/core/category/types.js.map +1 -1
- package/dist/core/file-tree/fileTreeModel.d.ts +49 -0
- package/dist/core/file-tree/fileTreeModel.d.ts.map +1 -1
- package/dist/core/file-tree/fileTreeModel.js +84 -0
- package/dist/core/file-tree/fileTreeModel.js.map +1 -1
- package/dist/core/layout/index.js +1 -1
- package/dist/core/layout/index.js.map +1 -1
- package/dist/core/media/index.js +1 -1
- package/dist/core/media/index.js.map +1 -1
- package/dist/core/media/types.js +1 -1
- package/dist/core/media/types.js.map +1 -1
- package/dist/core/media/uploadLimits.js +1 -1
- package/dist/core/media/uploadLimits.js.map +1 -1
- package/dist/core/sharing/model.d.ts +1 -1
- package/dist/ctgr/index.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react/activity-bar/ActivityBar.d.ts +17 -0
- package/dist/react/activity-bar/ActivityBar.d.ts.map +1 -1
- package/dist/react/activity-bar/ActivityBar.js.map +1 -1
- package/dist/react/analytics/index.d.ts +1 -1
- package/dist/react/analytics/index.js +1 -1
- package/dist/react/chat/MessageComposer.d.ts.map +1 -1
- package/dist/react/chat/MessageComposer.js +5 -4
- package/dist/react/chat/MessageComposer.js.map +1 -1
- package/dist/react/components/Button.d.ts.map +1 -1
- package/dist/react/components/Button.js +3 -2
- package/dist/react/components/Button.js.map +1 -1
- package/dist/react/components/Checkbox.d.ts +19 -3
- package/dist/react/components/Checkbox.d.ts.map +1 -1
- package/dist/react/components/Checkbox.js +29 -12
- package/dist/react/components/Checkbox.js.map +1 -1
- package/dist/react/components/CodeArea.d.ts.map +1 -1
- package/dist/react/components/CodeArea.js +2 -1
- package/dist/react/components/CodeArea.js.map +1 -1
- package/dist/react/components/Collapsible.d.ts.map +1 -1
- package/dist/react/components/Collapsible.js +2 -1
- package/dist/react/components/Collapsible.js.map +1 -1
- package/dist/react/components/ComboboxField.d.ts.map +1 -1
- package/dist/react/components/ComboboxField.js +3 -2
- package/dist/react/components/ComboboxField.js.map +1 -1
- package/dist/react/components/CopyButton.d.ts.map +1 -1
- package/dist/react/components/CopyButton.js +2 -1
- package/dist/react/components/CopyButton.js.map +1 -1
- package/dist/react/components/DataTable/ColumnChecklist.d.ts.map +1 -1
- package/dist/react/components/DataTable/ColumnChecklist.js +2 -1
- package/dist/react/components/DataTable/ColumnChecklist.js.map +1 -1
- package/dist/react/components/DataTable/Pagination.d.ts.map +1 -1
- package/dist/react/components/DataTable/Pagination.js +2 -1
- package/dist/react/components/DataTable/Pagination.js.map +1 -1
- package/dist/react/components/DataTable/SortHeader.d.ts.map +1 -1
- package/dist/react/components/DataTable/SortHeader.js +2 -1
- package/dist/react/components/DataTable/SortHeader.js.map +1 -1
- package/dist/react/components/DataTable/TableFilterBuilder.d.ts +61 -0
- package/dist/react/components/DataTable/TableFilterBuilder.d.ts.map +1 -0
- package/dist/react/components/DataTable/{FilterBuilder.js → TableFilterBuilder.js} +26 -3
- package/dist/react/components/DataTable/TableFilterBuilder.js.map +1 -0
- package/dist/react/components/DataTable/Toolbar.d.ts +1 -1
- package/dist/react/components/DataTable/Toolbar.js +3 -3
- package/dist/react/components/DataTable/Toolbar.js.map +1 -1
- package/dist/react/components/DataTable/cells/LinkCell.d.ts.map +1 -1
- package/dist/react/components/DataTable/cells/LinkCell.js +2 -1
- package/dist/react/components/DataTable/cells/LinkCell.js.map +1 -1
- package/dist/react/components/DataTable/index.d.ts +1 -1
- package/dist/react/components/DataTable/index.d.ts.map +1 -1
- package/dist/react/components/DataTable/index.js +4 -1
- package/dist/react/components/DataTable/index.js.map +1 -1
- package/dist/react/components/DragHandle.d.ts.map +1 -1
- package/dist/react/components/DragHandle.js +2 -1
- package/dist/react/components/DragHandle.js.map +1 -1
- package/dist/react/components/EmojiField.d.ts.map +1 -1
- package/dist/react/components/EmojiField.js +2 -1
- package/dist/react/components/EmojiField.js.map +1 -1
- package/dist/react/components/EventTimeline.d.ts +3 -2
- package/dist/react/components/EventTimeline.d.ts.map +1 -1
- package/dist/react/components/EventTimeline.js +3 -2
- package/dist/react/components/EventTimeline.js.map +1 -1
- package/dist/react/components/IconButton.d.ts +1 -1
- package/dist/react/components/IconButton.js +1 -1
- package/dist/react/components/InfoHint.d.ts.map +1 -1
- package/dist/react/components/InfoHint.js +5 -4
- package/dist/react/components/InfoHint.js.map +1 -1
- package/dist/react/components/InheritBadge.js +1 -1
- package/dist/react/components/InheritBadge.js.map +1 -1
- package/dist/react/components/InlineEditableText.d.ts.map +1 -1
- package/dist/react/components/InlineEditableText.js +2 -1
- package/dist/react/components/InlineEditableText.js.map +1 -1
- package/dist/react/components/MeterList.d.ts.map +1 -1
- package/dist/react/components/MeterList.js +2 -1
- package/dist/react/components/MeterList.js.map +1 -1
- package/dist/react/components/PathText.d.ts +2 -2
- package/dist/react/components/PathText.d.ts.map +1 -1
- package/dist/react/components/PathText.js +2 -1
- package/dist/react/components/PathText.js.map +1 -1
- package/dist/react/components/RatingField.d.ts.map +1 -1
- package/dist/react/components/RatingField.js +2 -1
- package/dist/react/components/RatingField.js.map +1 -1
- package/dist/react/components/SecretInput.js +3 -2
- package/dist/react/components/SecretInput.js.map +1 -1
- package/dist/react/components/SegmentedControl.d.ts.map +1 -1
- package/dist/react/components/SegmentedControl.js +2 -1
- package/dist/react/components/SegmentedControl.js.map +1 -1
- package/dist/react/components/StarRating.d.ts.map +1 -1
- package/dist/react/components/StarRating.js +9 -5
- package/dist/react/components/StarRating.js.map +1 -1
- package/dist/react/components/StatStrip.d.ts.map +1 -1
- package/dist/react/components/StatStrip.js +2 -1
- package/dist/react/components/StatStrip.js.map +1 -1
- package/dist/react/components/StatTile.d.ts.map +1 -1
- package/dist/react/components/StatTile.js +3 -2
- package/dist/react/components/StatTile.js.map +1 -1
- package/dist/react/components/Tabs.d.ts.map +1 -1
- package/dist/react/components/Tabs.js +2 -1
- package/dist/react/components/Tabs.js.map +1 -1
- package/dist/react/components/TruncatedText.d.ts +2 -1
- package/dist/react/components/TruncatedText.d.ts.map +1 -1
- package/dist/react/components/TruncatedText.js +2 -1
- package/dist/react/components/TruncatedText.js.map +1 -1
- package/dist/react/components/calendar/MonthGrid.d.ts.map +1 -1
- package/dist/react/components/calendar/MonthGrid.js +2 -1
- package/dist/react/components/calendar/MonthGrid.js.map +1 -1
- package/dist/react/components/calendar/WeekView.d.ts.map +1 -1
- package/dist/react/components/calendar/WeekView.js +2 -1
- package/dist/react/components/calendar/WeekView.js.map +1 -1
- package/dist/react/components/revealOnHover.d.ts.map +1 -1
- package/dist/react/components/revealOnHover.js +2 -1
- package/dist/react/components/revealOnHover.js.map +1 -1
- package/dist/react/file-tree/FileTree.d.ts +50 -1
- package/dist/react/file-tree/FileTree.d.ts.map +1 -1
- package/dist/react/file-tree/FileTree.js +234 -6
- package/dist/react/file-tree/FileTree.js.map +1 -1
- package/dist/react/file-tree/fileTree.css +52 -0
- package/dist/react/filter-rail/FilterRail.d.ts.map +1 -1
- package/dist/react/filter-rail/FilterRail.js +5 -4
- package/dist/react/filter-rail/FilterRail.js.map +1 -1
- package/dist/react/folder-tree/FolderTreeRail.d.ts.map +1 -1
- package/dist/react/folder-tree/FolderTreeRail.js +2 -1
- package/dist/react/folder-tree/FolderTreeRail.js.map +1 -1
- package/dist/react/index.d.ts +5 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +5 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/layoutEngine/index.js +1 -1
- package/dist/react/layoutEngine/index.js.map +1 -1
- package/dist/react/lib/field.d.ts.map +1 -1
- package/dist/react/lib/field.js +3 -2
- package/dist/react/lib/field.js.map +1 -1
- package/dist/react/lib/floatingStyles.d.ts.map +1 -1
- package/dist/react/lib/floatingStyles.js +2 -1
- package/dist/react/lib/floatingStyles.js.map +1 -1
- package/dist/react/lib/tapTarget.d.ts +96 -0
- package/dist/react/lib/tapTarget.d.ts.map +1 -0
- package/dist/react/lib/tapTarget.js +96 -0
- package/dist/react/lib/tapTarget.js.map +1 -0
- package/dist/react/media/VideoTrimmer.d.ts +1 -1
- package/dist/react/media/VideoTrimmer.js +1 -1
- package/dist/react/media/denseGallery.css +3 -3
- package/dist/react/media/ffmpegWasm.js +2 -2
- package/dist/react/media/ffmpegWasm.js.map +1 -1
- package/dist/react/media/videoPlayer.css +42 -0
- package/dist/react/namespace/NamespaceTargetCapsule.d.ts +2 -2
- package/dist/react/namespace/NamespaceTargetCapsule.d.ts.map +1 -1
- package/dist/react/nav/BreadcrumbTrail.d.ts.map +1 -1
- package/dist/react/nav/BreadcrumbTrail.js +4 -3
- package/dist/react/nav/BreadcrumbTrail.js.map +1 -1
- package/dist/react/nav/HubTileGrid.d.ts.map +1 -1
- package/dist/react/nav/HubTileGrid.js +2 -1
- package/dist/react/nav/HubTileGrid.js.map +1 -1
- package/dist/react/nav/SideNav.d.ts.map +1 -1
- package/dist/react/nav/SideNav.js +4 -3
- package/dist/react/nav/SideNav.js.map +1 -1
- package/dist/react/nav/SideNavCustomize.d.ts.map +1 -1
- package/dist/react/nav/SideNavCustomize.js +2 -1
- package/dist/react/nav/SideNavCustomize.js.map +1 -1
- package/dist/react/palette/CommandPalette.d.ts.map +1 -1
- package/dist/react/palette/CommandPalette.js +3 -2
- package/dist/react/palette/CommandPalette.js.map +1 -1
- package/dist/server/drivers/pooledControlStores.pg.test.js +1 -0
- package/dist/server/drivers/pooledControlStores.pg.test.js.map +1 -1
- package/dist/server/drivers/pooledIdentityStore.pg.test.js +1 -0
- package/dist/server/drivers/pooledIdentityStore.pg.test.js.map +1 -1
- package/dist/server/drivers/retentionPolicy.pg.test.js +1 -0
- package/dist/server/drivers/retentionPolicy.pg.test.js.map +1 -1
- package/dist/server/guard/argon2Binding.d.ts +1 -1
- package/dist/server/guard/argon2Binding.js +1 -1
- package/dist/server/incidents/store.d.ts +3 -3
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/master-lock/masterLock.d.ts +1 -1
- package/dist/server/media-bun/index.js +1 -1
- package/dist/server/media-bun/index.js.map +1 -1
- package/dist/server/paths/appDataHome.d.ts +20 -0
- package/dist/server/paths/appDataHome.d.ts.map +1 -0
- package/dist/server/paths/appDataHome.js +69 -0
- package/dist/server/paths/appDataHome.js.map +1 -0
- package/dist/server/retention/archive.d.ts +3 -4
- package/dist/server/retention/archive.d.ts.map +1 -1
- package/dist/server/retention/archive.js +20 -15
- package/dist/server/retention/archive.js.map +1 -1
- package/dist/server/retention/index.d.ts +1 -1
- package/dist/server/retention/index.js +1 -1
- package/dist/server/retention/policy.d.ts +2 -2
- package/dist/server/retention/policy.d.ts.map +1 -1
- package/dist/server/retention/policy.js +1 -1
- package/dist/server/retention/store.d.ts.map +1 -1
- package/dist/server/retention/store.js +27 -20
- package/dist/server/retention/store.js.map +1 -1
- package/dist/server/runtime/localHost.d.ts +10 -5
- package/dist/server/runtime/localHost.d.ts.map +1 -1
- package/dist/server/runtime/localHost.js +12 -8
- package/dist/server/runtime/localHost.js.map +1 -1
- package/dist/server/runtime/meterRollup.pg.test.js +1 -0
- package/dist/server/runtime/meterRollup.pg.test.js.map +1 -1
- package/dist/server/runtime/recipe.d.ts +4 -4
- package/dist/server/runtime/retentionJob.pg.test.js +1 -0
- package/dist/server/runtime/retentionJob.pg.test.js.map +1 -1
- package/dist/server/search/pgSearchProvider.pg.test.js +1 -0
- package/dist/server/search/pgSearchProvider.pg.test.js.map +1 -1
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +1 -1
- package/dist/styles-static.css +391 -0
- package/dist/styles.css +27 -0
- package/package.json +19 -167
- package/scripts/generateStaticStyles.ts +122 -0
- package/scripts/publicSurface.ts +455 -0
- package/scripts/testTmpRoot.ts +34 -5
- package/src/client/index.ts +1 -1
- package/src/core/category/index.ts +2 -1
- package/src/core/category/types.ts +1 -1
- package/src/core/file-tree/fileTreeModel.spec.ts +134 -0
- package/src/core/file-tree/fileTreeModel.ts +104 -0
- package/src/core/layout/index.ts +1 -1
- package/src/core/media/index.ts +1 -1
- package/src/core/media/types.ts +1 -1
- package/src/core/media/uploadLimits.ts +1 -1
- package/src/core/sharing/model.ts +1 -1
- package/src/ctgr/index.ts +1 -1
- package/src/declaredDepsAreImported.spec.ts +87 -0
- package/src/demoFixture.spec.ts +133 -0
- package/src/index.ts +1 -1
- package/src/lockfileIsTracked.spec.ts +50 -0
- package/src/namedSubpathsResolve.spec.ts +119 -0
- package/src/publicSurface.spec.ts +72 -0
- package/src/react/activity-bar/ActivityBar.tsx +17 -0
- package/src/react/analytics/index.ts +1 -1
- package/src/react/chat/MessageComposer.tsx +5 -4
- package/src/react/components/Button.tsx +3 -2
- package/src/react/components/Checkbox.spec.tsx +51 -0
- package/src/react/components/Checkbox.tsx +68 -26
- package/src/react/components/CodeArea.tsx +2 -1
- package/src/react/components/CodeChip.spec.tsx +2 -2
- package/src/react/components/Collapsible.tsx +2 -1
- package/src/react/components/ComboboxField.tsx +3 -2
- package/src/react/components/CopyButton.tsx +2 -1
- package/src/react/components/CopyableText.spec.tsx +1 -1
- package/src/react/components/DataTable/ColumnChecklist.tsx +2 -1
- package/src/react/components/DataTable/Pagination.tsx +2 -1
- package/src/react/components/DataTable/SortHeader.tsx +2 -1
- package/src/react/components/DataTable/{FilterBuilder.tsx → TableFilterBuilder.tsx} +33 -5
- package/src/react/components/DataTable/Toolbar.tsx +3 -3
- package/src/react/components/DataTable/cells/LinkCell.tsx +2 -1
- package/src/react/components/DataTable/index.ts +8 -1
- package/src/react/components/DragHandle.tsx +2 -1
- package/src/react/components/EmojiField.tsx +2 -1
- package/src/react/components/EventTimeline.tsx +3 -2
- package/src/react/components/FileLocation.spec.tsx +1 -1
- package/src/react/components/IconButton.tsx +1 -1
- package/src/react/components/InfoHint.tsx +5 -4
- package/src/react/components/InheritBadge.tsx +1 -1
- package/src/react/components/InlineEditableText.tsx +2 -1
- package/src/react/components/MeterList.tsx +2 -1
- package/src/react/components/PathText.tsx +4 -3
- package/src/react/components/RatingField.tsx +2 -1
- package/src/react/components/SecretInput.tsx +3 -3
- package/src/react/components/SegmentedControl.tsx +2 -2
- package/src/react/components/StarRating.spec.tsx +2 -2
- package/src/react/components/StarRating.tsx +9 -5
- package/src/react/components/StatStrip.tsx +2 -1
- package/src/react/components/StatTile.tsx +3 -3
- package/src/react/components/Tabs.spec.tsx +3 -2
- package/src/react/components/Tabs.tsx +2 -1
- package/src/react/components/TruncatedText.tsx +2 -1
- package/src/react/components/calendar/MonthGrid.spec.tsx +2 -1
- package/src/react/components/calendar/MonthGrid.tsx +2 -1
- package/src/react/components/calendar/WeekView.tsx +2 -1
- package/src/react/components/revealOnHover.ts +3 -2
- package/src/react/file-tree/FileTree.spec.tsx +248 -0
- package/src/react/file-tree/FileTree.tsx +304 -4
- package/src/react/file-tree/fileTree.css +52 -0
- package/src/react/file-tree/fileTreeGeometry.fixture.json +151 -0
- package/src/react/file-tree/fileTreeGeometry.spec.ts +33 -52
- package/src/react/filter-rail/FilterRail.spec.tsx +2 -1
- package/src/react/filter-rail/FilterRail.tsx +5 -4
- package/src/react/folder-tree/FolderTreeRail.tsx +2 -1
- package/src/react/index.ts +13 -3
- package/src/react/layoutEngine/index.ts +1 -1
- package/src/react/layoutEngine/types.ts +1 -1
- package/src/react/lib/field.ts +4 -2
- package/src/react/lib/floatingStyles.spec.ts +2 -1
- package/src/react/lib/floatingStyles.ts +3 -1
- package/src/react/lib/tapTarget.ts +100 -0
- package/src/react/media/MaskPainter.tsx +2 -2
- package/src/react/media/VideoTrimmer.tsx +1 -1
- package/src/react/media/denseGallery.css +3 -3
- package/src/react/media/ffmpegWasm.ts +2 -2
- package/src/react/media/videoPlayer.css +42 -0
- package/src/react/namespace/NamespaceTargetCapsule.tsx +2 -2
- package/src/react/nav/BreadcrumbTrail.tsx +4 -3
- package/src/react/nav/HubTileGrid.tsx +2 -1
- package/src/react/nav/SideNav.tsx +4 -3
- package/src/react/nav/SideNavCustomize.tsx +2 -1
- package/src/react/palette/CommandPalette.tsx +3 -2
- package/src/server/ctgr.ts +1 -1
- package/src/server/drivers/pooledControlStores.pg.test.ts +1 -0
- package/src/server/drivers/pooledIdentityStore.pg.test.ts +1 -0
- package/src/server/drivers/retentionPolicy.pg.test.ts +1 -0
- package/src/server/guard/argon2Binding.ts +1 -1
- package/src/server/incidents/store.ts +3 -3
- package/src/server/index.ts +1 -1
- package/src/server/master-lock/masterLock.spec.ts +18 -2
- package/src/server/master-lock/masterLock.ts +1 -1
- package/src/server/media-bun/image.spec.ts +1 -0
- package/src/server/media-bun/index.ts +1 -1
- package/src/server/media-bun/video.spec.ts +1 -0
- package/src/server/paths/appDataHome.spec.ts +87 -0
- package/src/server/paths/appDataHome.ts +84 -0
- package/src/server/retention/archive.spec.ts +26 -4
- package/src/server/retention/archive.ts +20 -15
- package/src/server/retention/index.ts +1 -1
- package/src/server/retention/policy.ts +2 -2
- package/src/server/retention/store.spec.ts +38 -10
- package/src/server/retention/store.ts +26 -19
- package/src/server/runtime/localHost.spec.ts +22 -3
- package/src/server/runtime/localHost.ts +12 -9
- package/src/server/runtime/meterRollup.pg.test.ts +1 -0
- package/src/server/runtime/recipe.ts +4 -4
- package/src/server/runtime/retentionJob.pg.test.ts +1 -0
- package/src/server/search/pgSearchProvider.pg.test.ts +1 -0
- package/src/server/storage/binaryServerProcessing.integration.spec.ts +6 -2
- package/src/server/storage/chunked.integration.spec.ts +5 -2
- package/src/server/storage/fileUploadClient-chunked.integration.spec.ts +5 -2
- package/src/server/storage/files/adapter.photo.display.spec.ts +1 -0
- package/src/server/storage/imageThumbnail.spec.ts +1 -0
- package/src/server/storage/transcode.integration.spec.ts +5 -2
- package/src/server/storage/videoProcessor.posterOnly.spec.ts +1 -0
- package/src/shared/errors.ts +1 -1
- package/src/skippedTestsAreAnswered.spec.ts +215 -0
- package/src/styles-static.css +391 -0
- package/src/styles.css +27 -0
- package/src/stylesStaticMatches.spec.ts +134 -0
- package/src/tapTargetStylesheet.spec.ts +150 -0
- package/src/testTmpRoot.spec.ts +102 -0
- package/dist/core/duplicates/index.d.ts +0 -116
- package/dist/core/duplicates/index.d.ts.map +0 -1
- package/dist/core/duplicates/index.js +0 -178
- package/dist/core/duplicates/index.js.map +0 -1
- package/dist/core/namespace/helpers.d.ts +0 -14
- package/dist/core/namespace/helpers.d.ts.map +0 -1
- package/dist/core/namespace/helpers.js +0 -29
- package/dist/core/namespace/helpers.js.map +0 -1
- package/dist/core/namespace/index.d.ts +0 -4
- package/dist/core/namespace/index.d.ts.map +0 -1
- package/dist/core/namespace/index.js +0 -6
- package/dist/core/namespace/index.js.map +0 -1
- package/dist/core/namespace/memoryStore.d.ts +0 -19
- package/dist/core/namespace/memoryStore.d.ts.map +0 -1
- package/dist/core/namespace/memoryStore.js +0 -70
- package/dist/core/namespace/memoryStore.js.map +0 -1
- package/dist/core/namespace/types.d.ts +0 -44
- package/dist/core/namespace/types.d.ts.map +0 -1
- package/dist/core/namespace/types.js +0 -8
- package/dist/core/namespace/types.js.map +0 -1
- package/dist/game/core/DisposeRegistry.d.ts +0 -42
- package/dist/game/core/DisposeRegistry.d.ts.map +0 -1
- package/dist/game/core/DisposeRegistry.js +0 -67
- package/dist/game/core/DisposeRegistry.js.map +0 -1
- package/dist/game/core/drawBudget.d.ts +0 -26
- package/dist/game/core/drawBudget.d.ts.map +0 -1
- package/dist/game/core/drawBudget.js +0 -55
- package/dist/game/core/drawBudget.js.map +0 -1
- package/dist/game/core/fixedTimestep.d.ts +0 -38
- package/dist/game/core/fixedTimestep.d.ts.map +0 -1
- package/dist/game/core/fixedTimestep.js +0 -47
- package/dist/game/core/fixedTimestep.js.map +0 -1
- package/dist/game/core/index.d.ts +0 -9
- package/dist/game/core/index.d.ts.map +0 -1
- package/dist/game/core/index.js +0 -8
- package/dist/game/core/index.js.map +0 -1
- package/dist/game/core/inputCollector.d.ts +0 -82
- package/dist/game/core/inputCollector.d.ts.map +0 -1
- package/dist/game/core/inputCollector.js +0 -176
- package/dist/game/core/inputCollector.js.map +0 -1
- package/dist/game/core/resizeCanvas.d.ts +0 -19
- package/dist/game/core/resizeCanvas.d.ts.map +0 -1
- package/dist/game/core/resizeCanvas.js +0 -29
- package/dist/game/core/resizeCanvas.js.map +0 -1
- package/dist/game/react/index.d.ts +0 -3
- package/dist/game/react/index.d.ts.map +0 -1
- package/dist/game/react/index.js +0 -5
- package/dist/game/react/index.js.map +0 -1
- package/dist/game/react/useGameEngine.d.ts +0 -64
- package/dist/game/react/useGameEngine.d.ts.map +0 -1
- package/dist/game/react/useGameEngine.js +0 -78
- package/dist/game/react/useGameEngine.js.map +0 -1
- package/dist/react/canvas/CanvasNavHUD.d.ts +0 -64
- package/dist/react/canvas/CanvasNavHUD.d.ts.map +0 -1
- package/dist/react/canvas/CanvasNavHUD.js +0 -58
- package/dist/react/canvas/CanvasNavHUD.js.map +0 -1
- package/dist/react/canvas/fitLabel.d.ts +0 -53
- package/dist/react/canvas/fitLabel.d.ts.map +0 -1
- package/dist/react/canvas/fitLabel.js +0 -104
- package/dist/react/canvas/fitLabel.js.map +0 -1
- package/dist/react/canvas/index.d.ts +0 -4
- package/dist/react/canvas/index.d.ts.map +0 -1
- package/dist/react/canvas/index.js +0 -4
- package/dist/react/canvas/index.js.map +0 -1
- package/dist/react/canvas/lod.d.ts +0 -40
- package/dist/react/canvas/lod.d.ts.map +0 -1
- package/dist/react/canvas/lod.js +0 -37
- package/dist/react/canvas/lod.js.map +0 -1
- package/dist/react/components/DataTable/FilterBuilder.d.ts +0 -38
- package/dist/react/components/DataTable/FilterBuilder.d.ts.map +0 -1
- package/dist/react/components/DataTable/FilterBuilder.js.map +0 -1
- package/dist/react/seo/HeadProvider.d.ts +0 -14
- package/dist/react/seo/HeadProvider.d.ts.map +0 -1
- package/dist/react/seo/HeadProvider.js +0 -44
- package/dist/react/seo/HeadProvider.js.map +0 -1
- package/dist/react/seo/applyHeadToDocument.d.ts +0 -3
- package/dist/react/seo/applyHeadToDocument.d.ts.map +0 -1
- package/dist/react/seo/applyHeadToDocument.js +0 -66
- package/dist/react/seo/applyHeadToDocument.js.map +0 -1
- package/dist/react/seo/index.d.ts +0 -3
- package/dist/react/seo/index.d.ts.map +0 -1
- package/dist/react/seo/index.js +0 -7
- package/dist/react/seo/index.js.map +0 -1
- package/dist/react/timeline/ClipView.d.ts +0 -29
- package/dist/react/timeline/ClipView.d.ts.map +0 -1
- package/dist/react/timeline/ClipView.js +0 -53
- package/dist/react/timeline/ClipView.js.map +0 -1
- package/dist/react/timeline/Playhead.d.ts +0 -16
- package/dist/react/timeline/Playhead.d.ts.map +0 -1
- package/dist/react/timeline/Playhead.js +0 -26
- package/dist/react/timeline/Playhead.js.map +0 -1
- package/dist/react/timeline/TimeRuler.d.ts +0 -21
- package/dist/react/timeline/TimeRuler.d.ts.map +0 -1
- package/dist/react/timeline/TimeRuler.js +0 -31
- package/dist/react/timeline/TimeRuler.js.map +0 -1
- package/dist/react/timeline/TimelineSurface.d.ts +0 -29
- package/dist/react/timeline/TimelineSurface.d.ts.map +0 -1
- package/dist/react/timeline/TimelineSurface.js +0 -56
- package/dist/react/timeline/TimelineSurface.js.map +0 -1
- package/dist/react/timeline/TrackLane.d.ts +0 -31
- package/dist/react/timeline/TrackLane.d.ts.map +0 -1
- package/dist/react/timeline/TrackLane.js +0 -32
- package/dist/react/timeline/TrackLane.js.map +0 -1
- package/dist/react/timeline/index.d.ts +0 -6
- package/dist/react/timeline/index.d.ts.map +0 -1
- package/dist/react/timeline/index.js +0 -12
- package/dist/react/timeline/index.js.map +0 -1
- package/dist/server/private-media/index.d.ts +0 -7
- package/dist/server/private-media/index.d.ts.map +0 -1
- package/dist/server/private-media/index.js +0 -13
- package/dist/server/private-media/index.js.map +0 -1
- package/dist/server/seo/index.d.ts +0 -3
- package/dist/server/seo/index.d.ts.map +0 -1
- package/dist/server/seo/index.js +0 -6
- package/dist/server/seo/index.js.map +0 -1
- package/dist/server/seo/mountSeoRoutes.d.ts +0 -9
- package/dist/server/seo/mountSeoRoutes.d.ts.map +0 -1
- package/dist/server/seo/mountSeoRoutes.js +0 -19
- package/dist/server/seo/mountSeoRoutes.js.map +0 -1
- package/dist/server/seo/serveHeadInjectedIndex.d.ts +0 -9
- package/dist/server/seo/serveHeadInjectedIndex.d.ts.map +0 -1
- package/dist/server/seo/serveHeadInjectedIndex.js +0 -20
- package/dist/server/seo/serveHeadInjectedIndex.js.map +0 -1
- package/dist/upload.d.ts +0 -148
- package/dist/upload.d.ts.map +0 -1
- package/dist/upload.js +0 -159
- package/dist/upload.js.map +0 -1
- package/dist/verify/runtime/index.d.ts +0 -16
- package/dist/verify/runtime/index.d.ts.map +0 -1
- package/dist/verify/runtime/index.js +0 -16
- package/dist/verify/runtime/index.js.map +0 -1
- package/scripts/demoCheck.ts +0 -42
- package/src/core/duplicates/index.spec.ts +0 -116
- package/src/core/duplicates/index.ts +0 -203
- package/src/core/namespace/helpers.ts +0 -31
- package/src/core/namespace/index.ts +0 -12
- package/src/core/namespace/memoryStore.ts +0 -77
- package/src/core/namespace/namespace.spec.ts +0 -117
- package/src/core/namespace/types.ts +0 -53
- package/src/game/core/DisposeRegistry.spec.ts +0 -53
- package/src/game/core/DisposeRegistry.ts +0 -70
- package/src/game/core/drawBudget.spec.ts +0 -51
- package/src/game/core/drawBudget.ts +0 -75
- package/src/game/core/fixedTimestep.spec.ts +0 -91
- package/src/game/core/fixedTimestep.ts +0 -79
- package/src/game/core/index.ts +0 -16
- package/src/game/core/inputCollector.spec.ts +0 -29
- package/src/game/core/inputCollector.ts +0 -245
- package/src/game/core/resizeCanvas.ts +0 -31
- package/src/game/react/index.ts +0 -10
- package/src/game/react/useGameEngine.ts +0 -125
- package/src/react/canvas/CanvasNavHUD.spec.tsx +0 -62
- package/src/react/canvas/CanvasNavHUD.tsx +0 -210
- package/src/react/canvas/fitLabel.spec.ts +0 -82
- package/src/react/canvas/fitLabel.ts +0 -150
- package/src/react/canvas/index.ts +0 -15
- package/src/react/canvas/lod.ts +0 -53
- package/src/react/seo/HeadProvider.tsx +0 -67
- package/src/react/seo/applyHeadToDocument.ts +0 -73
- package/src/react/seo/index.ts +0 -12
- package/src/react/seo/seo.spec.tsx +0 -101
- package/src/react/timeline/ClipView.tsx +0 -146
- package/src/react/timeline/Playhead.tsx +0 -63
- package/src/react/timeline/TimeRuler.tsx +0 -85
- package/src/react/timeline/TimelineSurface.tsx +0 -157
- package/src/react/timeline/TrackLane.tsx +0 -87
- package/src/react/timeline/index.ts +0 -12
- package/src/react/timeline/timeline.spec.tsx +0 -175
- package/src/server/private-media/index.ts +0 -45
- package/src/server/seo/index.ts +0 -8
- package/src/server/seo/mountSeoRoutes.ts +0 -37
- package/src/server/seo/seo.spec.ts +0 -128
- package/src/server/seo/serveHeadInjectedIndex.ts +0 -36
- package/src/upload.spec.ts +0 -300
- package/src/upload.ts +0 -288
- package/src/verify/runtime/index.ts +0 -64
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryStore.d.ts","sourceRoot":"","sources":["../../../src/core/namespace/memoryStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAkB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGrG;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,MAAM,MAAkC,EACnD,GAAG,GAAE,MAAM,MAAyB;YAmB1B,SAAS,EAAE;kBAOL,oBAAoB,GAAG,SAAS;eAgBnC,MAAM,SAAS,oBAAoB,GAAG,SAAS;eAc/C,MAAM,GAAG,IAAI;EAI3B"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { nextHue, normalizeNamespaceLabel } from './helpers';
|
|
2
|
-
/**
|
|
3
|
-
* Zero-config in-memory {@link NamespaceStore}: a single per-boot `Map`, so a
|
|
4
|
-
* host that wires nothing up still gets a working (non-persistent) namespace
|
|
5
|
-
* list — the same role `createMemoryCategoryStore` plays. Swap in a
|
|
6
|
-
* persistent store (f's `createSqliteNamespaceStore`) for real data.
|
|
7
|
-
*
|
|
8
|
-
* Deliberately not annotated `: NamespaceStore` — the interface allows async
|
|
9
|
-
* returns, which would force callers (and these tests) to `await` values that
|
|
10
|
-
* are always synchronous here. Structural typing keeps it assignable wherever
|
|
11
|
-
* a `NamespaceStore` is expected.
|
|
12
|
-
*/
|
|
13
|
-
export function createMemoryNamespaceStore(idFactory = () => crypto.randomUUID(), now = () => Date.now()) {
|
|
14
|
-
const byId = new Map();
|
|
15
|
-
const requireNamespace = (id) => {
|
|
16
|
-
const ns = byId.get(id);
|
|
17
|
-
if (!ns)
|
|
18
|
-
throw new Error(`no namespace with id ${id}`);
|
|
19
|
-
return ns;
|
|
20
|
-
};
|
|
21
|
-
const nextOrd = () => {
|
|
22
|
-
let max = -1;
|
|
23
|
-
for (const ns of byId.values()) {
|
|
24
|
-
if (ns.ord > max)
|
|
25
|
-
max = ns.ord;
|
|
26
|
-
}
|
|
27
|
-
return max + 1;
|
|
28
|
-
};
|
|
29
|
-
return {
|
|
30
|
-
list() {
|
|
31
|
-
return [...byId.values()].sort((a, b) => {
|
|
32
|
-
if (a.archived !== b.archived)
|
|
33
|
-
return a.archived ? 1 : -1;
|
|
34
|
-
return a.ord - b.ord;
|
|
35
|
-
});
|
|
36
|
-
},
|
|
37
|
-
create(input) {
|
|
38
|
-
const existing = [...byId.values()];
|
|
39
|
-
const timestamp = now();
|
|
40
|
-
const namespace = {
|
|
41
|
-
id: idFactory(),
|
|
42
|
-
label: normalizeNamespaceLabel(input.label),
|
|
43
|
-
hue: input.hue ?? nextHue(existing),
|
|
44
|
-
ord: nextOrd(),
|
|
45
|
-
archived: false,
|
|
46
|
-
createdAt: timestamp,
|
|
47
|
-
updatedAt: timestamp,
|
|
48
|
-
};
|
|
49
|
-
byId.set(namespace.id, namespace);
|
|
50
|
-
return namespace;
|
|
51
|
-
},
|
|
52
|
-
update(id, input) {
|
|
53
|
-
const ns = requireNamespace(id);
|
|
54
|
-
const updated = {
|
|
55
|
-
...ns,
|
|
56
|
-
label: input.label !== undefined ? normalizeNamespaceLabel(input.label) : ns.label,
|
|
57
|
-
hue: input.hue ?? ns.hue,
|
|
58
|
-
ord: input.ord ?? ns.ord,
|
|
59
|
-
archived: input.archived ?? ns.archived,
|
|
60
|
-
updatedAt: now(),
|
|
61
|
-
};
|
|
62
|
-
byId.set(id, updated);
|
|
63
|
-
return updated;
|
|
64
|
-
},
|
|
65
|
-
remove(id) {
|
|
66
|
-
byId.delete(id);
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=memoryStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryStore.js","sourceRoot":"","sources":["../../../src/core/namespace/memoryStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAA0B,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EACnD,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE1C,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAa,EAAE;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG;gBAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;QACjC,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;YACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;oBAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,KAA2B;YAChC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;YACxB,MAAM,SAAS,GAAc;gBAC3B,EAAE,EAAE,SAAS,EAAE;gBACf,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC3C,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;gBACnC,GAAG,EAAE,OAAO,EAAE;gBACd,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,SAAS;aACrB,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,EAAU,EAAE,KAA2B;YAC5C,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;gBAClF,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG;gBACxB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ;gBACvC,SAAS,EAAE,GAAG,EAAE;aACjB,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,CAAC,EAAU;YACf,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/** A single namespace (colorway-tagged workspace). Namespaces are flat — no
|
|
2
|
-
* parent/child nesting, unlike `Category`. `hue` (0–359) is the colorway seed
|
|
3
|
-
* the UI derives all tints from. `ord` sorts non-archived namespaces
|
|
4
|
-
* ascending; archived namespaces always sort after non-archived ones. */
|
|
5
|
-
export interface Namespace {
|
|
6
|
-
id: string;
|
|
7
|
-
label: string;
|
|
8
|
-
hue: number;
|
|
9
|
-
ord: number;
|
|
10
|
-
archived: boolean;
|
|
11
|
-
createdAt: number;
|
|
12
|
-
updatedAt: number;
|
|
13
|
-
}
|
|
14
|
-
/** Fields a caller supplies when creating a namespace — the store assigns
|
|
15
|
-
* `id`, timestamps, and a default `hue`/`ord` when omitted. */
|
|
16
|
-
export interface NamespaceCreateInput {
|
|
17
|
-
label: string;
|
|
18
|
-
hue?: number;
|
|
19
|
-
}
|
|
20
|
-
/** Fields a caller supplies when updating a namespace — all optional, only
|
|
21
|
-
* the provided fields change. */
|
|
22
|
-
export interface NamespaceUpdateInput {
|
|
23
|
-
label?: string;
|
|
24
|
-
hue?: number;
|
|
25
|
-
ord?: number;
|
|
26
|
-
archived?: boolean;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Storage-agnostic namespace store. The host injects a real implementation
|
|
30
|
-
* (f backs it with SQLite, per-role); {@link createMemoryNamespaceStore} is
|
|
31
|
-
* the zero-config in-memory default.
|
|
32
|
-
*
|
|
33
|
-
* `remove` is a hard delete and is only legal when the caller has already
|
|
34
|
-
* verified no rows reference the namespace — callers should archive instead
|
|
35
|
-
* in the common case. A host-backed store enforces this by throwing when
|
|
36
|
-
* references still exist.
|
|
37
|
-
*/
|
|
38
|
-
export interface NamespaceStore {
|
|
39
|
-
list(): Namespace[] | Promise<Namespace[]>;
|
|
40
|
-
create(input: NamespaceCreateInput): Namespace | Promise<Namespace>;
|
|
41
|
-
update(id: string, input: NamespaceUpdateInput): Namespace | Promise<Namespace>;
|
|
42
|
-
remove(id: string): void | Promise<void>;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/namespace/types.ts"],"names":[],"mappings":"AAOA;;;yEAGyE;AACzE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;+DAC+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;iCACiC;AACjC,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// `cursedbelt/namespace` — a reusable, flat namespace/workspace model shared
|
|
2
|
-
// across content plugins (notes today; aliases/… later, see ns-03). React-free
|
|
3
|
-
// and storage-agnostic: the pure `Namespace` data + a host-injected
|
|
4
|
-
// `NamespaceStore` contract, mirroring `cursedbelt/category`'s split between a
|
|
5
|
-
// pure contract and a host-backed (SQLite) implementation. Importing this
|
|
6
|
-
// module on a server never pulls React.
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/namespace/types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E;AAC/E,0EAA0E;AAC1E,wCAAwC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A LIFO cleanup registry for game-engine resources (event listeners, rAF ids,
|
|
3
|
-
* WebGL contexts, audio nodes, timers). The single source of truth that replaces
|
|
4
|
-
* the per-game `DisposeRegistry` copies the apps each hand-rolled.
|
|
5
|
-
*
|
|
6
|
-
* A factory registers every resource it allocates with {@link DisposeRegistry.add};
|
|
7
|
-
* on unmount the host hook calls {@link DisposeRegistry.disposeAll}, which runs every
|
|
8
|
-
* cleanup in reverse registration order — the same ordering React uses for nested
|
|
9
|
-
* effect cleanups, so resources tear down in the opposite order they were built.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```ts
|
|
13
|
-
* const registry = new DisposeRegistry();
|
|
14
|
-
* const id = requestAnimationFrame(loop);
|
|
15
|
-
* registry.add(() => cancelAnimationFrame(id));
|
|
16
|
-
* canvas.addEventListener('pointermove', onMove);
|
|
17
|
-
* registry.add(() => canvas.removeEventListener('pointermove', onMove));
|
|
18
|
-
* // later, on unmount:
|
|
19
|
-
* registry.disposeAll(); // cancels rAF, removes the listener — in reverse order
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export declare class DisposeRegistry {
|
|
23
|
-
private cleanups;
|
|
24
|
-
private disposed;
|
|
25
|
-
/**
|
|
26
|
-
* Register a cleanup. If the registry has already been disposed (e.g. an async
|
|
27
|
-
* factory resolved after unmount and registered a late listener), the cleanup runs
|
|
28
|
-
* immediately so the resource can never leak.
|
|
29
|
-
*/
|
|
30
|
-
add(fn: () => void): void;
|
|
31
|
-
/** Number of pending cleanups (handy for tests / leak assertions). */
|
|
32
|
-
get size(): number;
|
|
33
|
-
/** Whether {@link disposeAll} has run. */
|
|
34
|
-
get isDisposed(): boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Run every registered cleanup in reverse (LIFO) order, swallowing individual
|
|
37
|
-
* errors so one failing cleanup can't strand the rest. Idempotent: the list is
|
|
38
|
-
* cleared and the registry is permanently marked disposed.
|
|
39
|
-
*/
|
|
40
|
-
disposeAll(): void;
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=DisposeRegistry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisposeRegistry.d.ts","sourceRoot":"","sources":["../../../src/game/core/DisposeRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAQzB,sEAAsE;IACtE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0CAA0C;IAC1C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;OAIG;IACH,UAAU,IAAI,IAAI;CAQnB"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A LIFO cleanup registry for game-engine resources (event listeners, rAF ids,
|
|
3
|
-
* WebGL contexts, audio nodes, timers). The single source of truth that replaces
|
|
4
|
-
* the per-game `DisposeRegistry` copies the apps each hand-rolled.
|
|
5
|
-
*
|
|
6
|
-
* A factory registers every resource it allocates with {@link DisposeRegistry.add};
|
|
7
|
-
* on unmount the host hook calls {@link DisposeRegistry.disposeAll}, which runs every
|
|
8
|
-
* cleanup in reverse registration order — the same ordering React uses for nested
|
|
9
|
-
* effect cleanups, so resources tear down in the opposite order they were built.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```ts
|
|
13
|
-
* const registry = new DisposeRegistry();
|
|
14
|
-
* const id = requestAnimationFrame(loop);
|
|
15
|
-
* registry.add(() => cancelAnimationFrame(id));
|
|
16
|
-
* canvas.addEventListener('pointermove', onMove);
|
|
17
|
-
* registry.add(() => canvas.removeEventListener('pointermove', onMove));
|
|
18
|
-
* // later, on unmount:
|
|
19
|
-
* registry.disposeAll(); // cancels rAF, removes the listener — in reverse order
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export class DisposeRegistry {
|
|
23
|
-
cleanups = [];
|
|
24
|
-
disposed = false;
|
|
25
|
-
/**
|
|
26
|
-
* Register a cleanup. If the registry has already been disposed (e.g. an async
|
|
27
|
-
* factory resolved after unmount and registered a late listener), the cleanup runs
|
|
28
|
-
* immediately so the resource can never leak.
|
|
29
|
-
*/
|
|
30
|
-
add(fn) {
|
|
31
|
-
if (this.disposed) {
|
|
32
|
-
runSafely(fn);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
this.cleanups.push(fn);
|
|
36
|
-
}
|
|
37
|
-
/** Number of pending cleanups (handy for tests / leak assertions). */
|
|
38
|
-
get size() {
|
|
39
|
-
return this.cleanups.length;
|
|
40
|
-
}
|
|
41
|
-
/** Whether {@link disposeAll} has run. */
|
|
42
|
-
get isDisposed() {
|
|
43
|
-
return this.disposed;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Run every registered cleanup in reverse (LIFO) order, swallowing individual
|
|
47
|
-
* errors so one failing cleanup can't strand the rest. Idempotent: the list is
|
|
48
|
-
* cleared and the registry is permanently marked disposed.
|
|
49
|
-
*/
|
|
50
|
-
disposeAll() {
|
|
51
|
-
this.disposed = true;
|
|
52
|
-
// Reverse order: the last resource allocated is the first torn down.
|
|
53
|
-
for (let i = this.cleanups.length - 1; i >= 0; i--) {
|
|
54
|
-
runSafely(this.cleanups[i]);
|
|
55
|
-
}
|
|
56
|
-
this.cleanups = [];
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function runSafely(fn) {
|
|
60
|
-
try {
|
|
61
|
-
fn();
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
console.error('DisposeRegistry: a cleanup threw and was swallowed', error);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=DisposeRegistry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisposeRegistry.js","sourceRoot":"","sources":["../../../src/game/core/DisposeRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAsB,EAAE,CAAC;IACjC,QAAQ,GAAG,KAAK,CAAC;IAEzB;;;;OAIG;IACH,GAAG,CAAC,EAAc;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,SAAS,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,sEAAsE;IACtE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,0CAA0C;IAC1C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,qEAAqE;QACrE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;CACF;AAED,SAAS,SAAS,CAAC,EAAc;IAC/B,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;IACP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface DrawBudgetOptions {
|
|
2
|
-
/** Frame-time budget target in frames per second (default `60`). */
|
|
3
|
-
targetFps?: number;
|
|
4
|
-
/** Rolling-average window in frames (default `30`). Larger = smoother, slower to react. */
|
|
5
|
-
windowSize?: number;
|
|
6
|
-
}
|
|
7
|
-
export interface DrawBudget {
|
|
8
|
-
/** Feed the wall-clock frame time (ms) each frame; updates `level` and `fps`. */
|
|
9
|
-
record: (frameMs: number) => void;
|
|
10
|
-
/**
|
|
11
|
-
* Adaptive quality in `[0, 1]`: `1` = full quality, `0` = minimal. Games multiply
|
|
12
|
-
* expensive feature counts (shadow res, particle count, draw distance) by this.
|
|
13
|
-
* Drops quickly when behind, recovers slowly when there's headroom (hysteresis,
|
|
14
|
-
* so one stray slow frame doesn't crater quality).
|
|
15
|
-
*/
|
|
16
|
-
readonly level: number;
|
|
17
|
-
/** Current rolling-average frames per second. */
|
|
18
|
-
readonly fps: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Adaptive draw-quality governor. Tracks a rolling average of frame times and exposes
|
|
22
|
-
* a `level` games use to scale render cost so a struggling device stays responsive.
|
|
23
|
-
* Replaces the duplicated per-game copies.
|
|
24
|
-
*/
|
|
25
|
-
export declare function drawBudget(opts?: DrawBudgetOptions): DrawBudget;
|
|
26
|
-
//# sourceMappingURL=drawBudget.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drawBudget.d.ts","sourceRoot":"","sources":["../../../src/game/core/drawBudget.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAQD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAoCnE"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
// Drop ~this fraction of `level` per frame, per multiple of target frame time over
|
|
2
|
-
// budget. Recover this much per frame when comfortable. Asymmetric on purpose —
|
|
3
|
-
// shed load fast, restore it gently — so quality doesn't oscillate.
|
|
4
|
-
const DROP_COEFFICIENT = 0.05;
|
|
5
|
-
const RECOVER_PER_FRAME = 0.01;
|
|
6
|
-
/**
|
|
7
|
-
* Adaptive draw-quality governor. Tracks a rolling average of frame times and exposes
|
|
8
|
-
* a `level` games use to scale render cost so a struggling device stays responsive.
|
|
9
|
-
* Replaces the duplicated per-game copies.
|
|
10
|
-
*/
|
|
11
|
-
export function drawBudget(opts = {}) {
|
|
12
|
-
const { targetFps = 60, windowSize = 30 } = opts;
|
|
13
|
-
const targetMs = 1000 / targetFps;
|
|
14
|
-
const samples = [];
|
|
15
|
-
let sum = 0;
|
|
16
|
-
let avgMs = targetMs;
|
|
17
|
-
let level = 1;
|
|
18
|
-
return {
|
|
19
|
-
record(frameMs) {
|
|
20
|
-
if (!Number.isFinite(frameMs) || frameMs < 0)
|
|
21
|
-
return;
|
|
22
|
-
samples.push(frameMs);
|
|
23
|
-
sum += frameMs;
|
|
24
|
-
if (samples.length > windowSize)
|
|
25
|
-
sum -= samples.shift();
|
|
26
|
-
avgMs = sum / samples.length;
|
|
27
|
-
// headroom > 0 → comfortably under budget; < 0 → behind.
|
|
28
|
-
const headroom = targetMs - avgMs;
|
|
29
|
-
if (headroom < 0) {
|
|
30
|
-
// How many target-frames behind we are scales the drop; far behind drops fast.
|
|
31
|
-
level += (headroom / targetMs) * DROP_COEFFICIENT;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
level += RECOVER_PER_FRAME;
|
|
35
|
-
}
|
|
36
|
-
level = clamp01(level);
|
|
37
|
-
},
|
|
38
|
-
get level() {
|
|
39
|
-
return level;
|
|
40
|
-
},
|
|
41
|
-
get fps() {
|
|
42
|
-
if (samples.length === 0)
|
|
43
|
-
return targetFps; // nothing recorded yet → report the target
|
|
44
|
-
return avgMs > 0 ? 1000 / avgMs : targetFps;
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function clamp01(value) {
|
|
49
|
-
if (value < 0)
|
|
50
|
-
return 0;
|
|
51
|
-
if (value > 1)
|
|
52
|
-
return 1;
|
|
53
|
-
return value;
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=drawBudget.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drawBudget.js","sourceRoot":"","sources":["../../../src/game/core/drawBudget.ts"],"names":[],"mappings":"AAqBA,mFAAmF;AACnF,gFAAgF;AAChF,oEAAoE;AACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0B,EAAE;IACrD,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;IAElC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,QAAQ,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO;QACL,MAAM,CAAC,OAAe;YACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAO;YAErD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,GAAG,IAAI,OAAO,CAAC;YACf,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU;gBAAE,GAAG,IAAI,OAAO,CAAC,KAAK,EAAY,CAAC;YAClE,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;YAE7B,yDAAyD;YACzD,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;YAClC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,+EAA+E;gBAC/E,KAAK,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,gBAAgB,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,iBAAiB,CAAC;YAC7B,CAAC;YACD,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,KAAK;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,GAAG;YACL,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,CAAC,2CAA2C;YACvF,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export interface FixedTimestepOptions {
|
|
2
|
-
/** Update rate in Hz (e.g. 60 → a fixed 1/60 s simulation step). */
|
|
3
|
-
hz: number;
|
|
4
|
-
/**
|
|
5
|
-
* Called zero or more times per frame with the fixed timestep in **seconds**
|
|
6
|
-
* (e.g. `1/60 ≈ 0.0167`). Drive all simulation/physics from this `dt` so behavior
|
|
7
|
-
* is frame-rate independent.
|
|
8
|
-
*/
|
|
9
|
-
onUpdate: (dt: number) => void;
|
|
10
|
-
/**
|
|
11
|
-
* Called exactly once per frame with the interpolation factor `alpha` in `[0, 1)`
|
|
12
|
-
* — the fraction of a step the accumulator is into the next update. Render the
|
|
13
|
-
* visual state as `lerp(prev, current, alpha)` for smooth motion between updates.
|
|
14
|
-
*/
|
|
15
|
-
onRender: (alpha: number) => void;
|
|
16
|
-
/**
|
|
17
|
-
* Maximum simulation steps per frame (default `5`). The "spiral of death" guard:
|
|
18
|
-
* without it, a tab backgrounded for 5 s would try to simulate hundreds of steps
|
|
19
|
-
* in one frame and lock the thread. When the cap is hit the leftover backlog is
|
|
20
|
-
* dropped (time is sacrificed to keep the frame responsive).
|
|
21
|
-
*/
|
|
22
|
-
maxCatchup?: number;
|
|
23
|
-
}
|
|
24
|
-
export interface FixedTimestep {
|
|
25
|
-
/** Advance by the wall-clock delta since the previous frame, in **milliseconds**. */
|
|
26
|
-
step: (deltaMs: number) => void;
|
|
27
|
-
/** Clear the accumulator — call after a pause/resume so the gap isn't simulated. */
|
|
28
|
-
reset: () => void;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Creates a fixed-timestep accumulator: the canonical decoupling of a fixed-rate
|
|
32
|
-
* simulation from a variable-rate render. Call {@link FixedTimestep.step} once per
|
|
33
|
-
* animation frame with the wall-clock delta; it invokes `onUpdate(dt)` zero or more
|
|
34
|
-
* times with the fixed `dt`, then `onRender(alpha)` once with the interpolation
|
|
35
|
-
* factor. Replaces the verbatim copies the apps each carried per game.
|
|
36
|
-
*/
|
|
37
|
-
export declare function createFixedTimestep(opts: FixedTimestepOptions): FixedTimestep;
|
|
38
|
-
//# sourceMappingURL=fixedTimestep.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fixedTimestep.d.ts","sourceRoot":"","sources":["../../../src/game/core/fixedTimestep.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,oFAAoF;IACpF,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAwC7E"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a fixed-timestep accumulator: the canonical decoupling of a fixed-rate
|
|
3
|
-
* simulation from a variable-rate render. Call {@link FixedTimestep.step} once per
|
|
4
|
-
* animation frame with the wall-clock delta; it invokes `onUpdate(dt)` zero or more
|
|
5
|
-
* times with the fixed `dt`, then `onRender(alpha)` once with the interpolation
|
|
6
|
-
* factor. Replaces the verbatim copies the apps each carried per game.
|
|
7
|
-
*/
|
|
8
|
-
export function createFixedTimestep(opts) {
|
|
9
|
-
const { hz, onUpdate, onRender, maxCatchup = 5 } = opts;
|
|
10
|
-
if (!(hz > 0))
|
|
11
|
-
throw new Error(`createFixedTimestep: hz must be > 0 (got ${hz})`);
|
|
12
|
-
const stepMs = 1000 / hz;
|
|
13
|
-
const stepSeconds = stepMs / 1000;
|
|
14
|
-
// Repeated `accumulator -= stepMs` accrues float error, so an exact integer multiple
|
|
15
|
-
// (e.g. 100ms at 60hz = 6 steps) can fall a rounding-bit short of the final step.
|
|
16
|
-
// A tiny epsilon recovers the mathematically-correct count without ever firing a
|
|
17
|
-
// spurious step (a real sub-step delta is never within 1e-9 ms of the boundary).
|
|
18
|
-
const threshold = stepMs - 1e-9;
|
|
19
|
-
let accumulator = 0;
|
|
20
|
-
return {
|
|
21
|
-
step(deltaMs) {
|
|
22
|
-
// Guard against NaN, negatives, and the huge delta after a backgrounded tab.
|
|
23
|
-
if (!Number.isFinite(deltaMs) || deltaMs < 0)
|
|
24
|
-
deltaMs = 0;
|
|
25
|
-
accumulator += deltaMs;
|
|
26
|
-
let steps = 0;
|
|
27
|
-
while (accumulator >= threshold && steps < maxCatchup) {
|
|
28
|
-
onUpdate(stepSeconds);
|
|
29
|
-
accumulator -= stepMs;
|
|
30
|
-
steps++;
|
|
31
|
-
}
|
|
32
|
-
// Hit the catch-up cap with backlog remaining → drop it (spiral-of-death guard).
|
|
33
|
-
if (steps >= maxCatchup && accumulator >= threshold) {
|
|
34
|
-
accumulator = 0;
|
|
35
|
-
}
|
|
36
|
-
else if (accumulator < 0) {
|
|
37
|
-
// Epsilon stepping can leave a sub-femtosecond negative residue; floor it.
|
|
38
|
-
accumulator = 0;
|
|
39
|
-
}
|
|
40
|
-
onRender(accumulator / stepMs);
|
|
41
|
-
},
|
|
42
|
-
reset() {
|
|
43
|
-
accumulator = 0;
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=fixedTimestep.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fixedTimestep.js","sourceRoot":"","sources":["../../../src/game/core/fixedTimestep.ts"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA0B;IAC5D,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;IAElF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,qFAAqF;IACrF,kFAAkF;IAClF,iFAAiF;IACjF,iFAAiF;IACjF,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,OAAO;QACL,IAAI,CAAC,OAAe;YAClB,6EAA6E;YAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC,CAAC;YAC1D,WAAW,IAAI,OAAO,CAAC;YAEvB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,WAAW,IAAI,SAAS,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;gBACtD,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACtB,WAAW,IAAI,MAAM,CAAC;gBACtB,KAAK,EAAE,CAAC;YACV,CAAC;YAED,iFAAiF;YACjF,IAAI,KAAK,IAAI,UAAU,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBACpD,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC3B,2EAA2E;gBAC3E,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YAED,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,KAAK;YACH,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { DisposeRegistry } from './DisposeRegistry';
|
|
2
|
-
export type { DrawBudget, DrawBudgetOptions } from './drawBudget';
|
|
3
|
-
export { drawBudget } from './drawBudget';
|
|
4
|
-
export type { FixedTimestep, FixedTimestepOptions } from './fixedTimestep';
|
|
5
|
-
export { createFixedTimestep } from './fixedTimestep';
|
|
6
|
-
export type { GamepadSnapshot, InputCollector, InputCollectorOptions, InputSnapshot, PointerSnapshot, } from './inputCollector';
|
|
7
|
-
export { createInputCollector, deadzone } from './inputCollector';
|
|
8
|
-
export { resizeCanvasToDisplaySize } from './resizeCanvas';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/game/core/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EACV,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/game/core/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// cursedbelt/game core — engine-agnostic, zero React, browser-safe to import from a
|
|
2
|
-
// Bun server test. The React host hook lives in `cursedbelt/game/react`.
|
|
3
|
-
export { DisposeRegistry } from './DisposeRegistry';
|
|
4
|
-
export { drawBudget } from './drawBudget';
|
|
5
|
-
export { createFixedTimestep } from './fixedTimestep';
|
|
6
|
-
export { createInputCollector, deadzone } from './inputCollector';
|
|
7
|
-
export { resizeCanvasToDisplaySize } from './resizeCanvas';
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/game/core/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,yEAAyE;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAQtD,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import type { DisposeRegistry } from './DisposeRegistry';
|
|
2
|
-
export interface PointerSnapshot {
|
|
3
|
-
/** Canvas-relative X in CSS pixels. */
|
|
4
|
-
x: number;
|
|
5
|
-
/** Canvas-relative Y in CSS pixels. */
|
|
6
|
-
y: number;
|
|
7
|
-
/** Bitmask of currently-pressed buttons (`PointerEvent.buttons`). */
|
|
8
|
-
buttons: number;
|
|
9
|
-
/** The originating `PointerEvent.pointerId`. */
|
|
10
|
-
id: number;
|
|
11
|
-
/** `'mouse' | 'pen' | 'touch'`. */
|
|
12
|
-
type: string;
|
|
13
|
-
}
|
|
14
|
-
export interface GamepadSnapshot {
|
|
15
|
-
index: number;
|
|
16
|
-
/** Axes with the deadzone already applied. Even indices = X, odd = Y, by convention. */
|
|
17
|
-
axes: number[];
|
|
18
|
-
/** Per-button analog value in `[0, 1]`. */
|
|
19
|
-
buttons: number[];
|
|
20
|
-
/** Per-button pressed flag. */
|
|
21
|
-
pressed: boolean[];
|
|
22
|
-
}
|
|
23
|
-
export interface InputSnapshot {
|
|
24
|
-
/** The primary (most-recently-active) pointer. */
|
|
25
|
-
pointer: {
|
|
26
|
-
x: number;
|
|
27
|
-
y: number;
|
|
28
|
-
buttons: number;
|
|
29
|
-
};
|
|
30
|
-
/** `KeyboardEvent.code` → held. Cleared on window blur to avoid stuck keys. */
|
|
31
|
-
keys: Record<string, boolean>;
|
|
32
|
-
/** One entry per active touch contact, canvas-relative. */
|
|
33
|
-
touch: {
|
|
34
|
-
x: number;
|
|
35
|
-
y: number;
|
|
36
|
-
}[];
|
|
37
|
-
/** The first connected gamepad with deadzone-corrected axes, or `null`. */
|
|
38
|
-
gamepad: GamepadSnapshot | null;
|
|
39
|
-
}
|
|
40
|
-
export interface InputCollectorOptions {
|
|
41
|
-
/**
|
|
42
|
-
* Where keyboard listeners attach. Defaults to `window` so the game receives keys
|
|
43
|
-
* without the canvas needing focus. Pass the canvas to scope keys to focus instead.
|
|
44
|
-
*/
|
|
45
|
-
keyboardTarget?: Window | HTMLElement;
|
|
46
|
-
/** Gamepad axis deadzone (default `0.15`). */
|
|
47
|
-
gamepadDeadzone?: number;
|
|
48
|
-
/**
|
|
49
|
-
* Set `canvas.style.touchAction = 'none'` so dragging on a touch device doesn't
|
|
50
|
-
* scroll/zoom the page (default `true`). Restored on dispose.
|
|
51
|
-
*/
|
|
52
|
-
preventTouchScroll?: boolean;
|
|
53
|
-
}
|
|
54
|
-
export interface InputCollector {
|
|
55
|
-
/** A point-in-time copy of all input state — call once per frame. */
|
|
56
|
-
snapshot: () => InputSnapshot;
|
|
57
|
-
/** Subscribe to pointer-down events (mouse/pen/touch unified). */
|
|
58
|
-
onPointerDown: (fn: (e: PointerSnapshot) => void) => void;
|
|
59
|
-
/** Subscribe to pointer-up events. */
|
|
60
|
-
onPointerUp: (fn: (e: PointerSnapshot) => void) => void;
|
|
61
|
-
/** Subscribe to a specific `KeyboardEvent.code`; `down` is `true` on press, `false` on release. */
|
|
62
|
-
onKey: (code: string, fn: (down: boolean) => void) => void;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Applies a radial deadzone to a normalized axis value in `[-1, 1]` and rescales the
|
|
66
|
-
* remainder so output still spans the full range past the threshold (no sudden jump
|
|
67
|
-
* at the deadzone edge). Use for gamepad sticks / analog inputs.
|
|
68
|
-
*/
|
|
69
|
-
export declare function deadzone(value: number, threshold?: number): number;
|
|
70
|
-
/**
|
|
71
|
-
* Collects raw input state from pointer, keyboard, touch, and gamepad into a single
|
|
72
|
-
* snapshot-able object. Pointer events unify mouse/pen/touch; touch contacts are also
|
|
73
|
-
* surfaced individually in `snapshot().touch`. All listeners attach via the supplied
|
|
74
|
-
* {@link DisposeRegistry}, so they're torn down automatically on engine dispose.
|
|
75
|
-
*
|
|
76
|
-
* Per-game `computeIntent(snapshot)` (mapping raw input → a game-specific action enum)
|
|
77
|
-
* stays in the game — this layer only handles the common collection + deadzone.
|
|
78
|
-
*
|
|
79
|
-
* Browser-only: reads `document`/`window`/`navigator`. Never call from a server file.
|
|
80
|
-
*/
|
|
81
|
-
export declare function createInputCollector(canvas: HTMLCanvasElement, registry: DisposeRegistry, opts?: InputCollectorOptions): InputCollector;
|
|
82
|
-
//# sourceMappingURL=inputCollector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputCollector.d.ts","sourceRoot":"","sources":["../../../src/game/core/inputCollector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;IACV,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2CAA2C;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,2DAA2D;IAC3D,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClC,2EAA2E;IAC3E,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACtC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,aAAa,CAAC;IAC9B,kEAAkE;IAClE,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,KAAK,IAAI,CAAC;IAC1D,sCAAsC;IACtC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,KAAK,IAAI,CAAC;IACxD,mGAAmG;IACnG,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;CAC5D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CAKhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,eAAe,EACzB,IAAI,GAAE,qBAA0B,GAC/B,cAAc,CA2JhB"}
|