@superblocksteam/vite-plugin-file-sync 1.99.99-next.2
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/LICENSE.txt +87 -0
- package/dist/ai-service/app-interface/shell.d.ts +15 -0
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -0
- package/dist/ai-service/app-interface/shell.js +81 -0
- package/dist/ai-service/app-interface/shell.js.map +1 -0
- package/dist/ai-service/artifacts/bolt.d.ts +8 -0
- package/dist/ai-service/artifacts/bolt.d.ts.map +1 -0
- package/dist/ai-service/artifacts/bolt.js +34 -0
- package/dist/ai-service/artifacts/bolt.js.map +1 -0
- package/dist/ai-service/const.d.ts +9 -0
- package/dist/ai-service/const.d.ts.map +1 -0
- package/dist/ai-service/const.js +10 -0
- package/dist/ai-service/const.js.map +1 -0
- package/dist/ai-service/eval/template-renderer.d.ts +13 -0
- package/dist/ai-service/eval/template-renderer.d.ts.map +1 -0
- package/dist/ai-service/eval/template-renderer.js +67 -0
- package/dist/ai-service/eval/template-renderer.js.map +1 -0
- package/dist/ai-service/index.d.ts +21 -0
- package/dist/ai-service/index.d.ts.map +1 -0
- package/dist/ai-service/index.js +153 -0
- package/dist/ai-service/index.js.map +1 -0
- package/dist/ai-service/integrations/const.d.ts +41 -0
- package/dist/ai-service/integrations/const.d.ts.map +1 -0
- package/dist/ai-service/integrations/const.js +76 -0
- package/dist/ai-service/integrations/const.js.map +1 -0
- package/dist/ai-service/integrations/from-prompt-context.d.ts +4 -0
- package/dist/ai-service/integrations/from-prompt-context.d.ts.map +1 -0
- package/dist/ai-service/integrations/from-prompt-context.js +56 -0
- package/dist/ai-service/integrations/from-prompt-context.js.map +1 -0
- package/dist/ai-service/integrations/to-sdk-prompt.d.ts +3 -0
- package/dist/ai-service/integrations/to-sdk-prompt.d.ts.map +1 -0
- package/dist/ai-service/integrations/to-sdk-prompt.js +45 -0
- package/dist/ai-service/integrations/to-sdk-prompt.js.map +1 -0
- package/dist/ai-service/integrations/types.d.ts +31 -0
- package/dist/ai-service/integrations/types.d.ts.map +1 -0
- package/dist/ai-service/integrations/types.js +2 -0
- package/dist/ai-service/integrations/types.js.map +1 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.d.ts +2 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.d.ts.map +1 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.js +386 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.js.map +1 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.d.ts +2 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.d.ts.map +1 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.js +219 -0
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.js.map +1 -0
- package/dist/ai-service/prompts/generated/index.d.ts +4 -0
- package/dist/ai-service/prompts/generated/index.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/index.js +6 -0
- package/dist/ai-service/prompts/generated/index.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/index.d.ts +17 -0
- package/dist/ai-service/prompts/generated/library-components/index.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/index.js +19 -0
- package/dist/ai-service/prompts/generated/library-components/index.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/Dim.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-typedefs/Dim.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/Dim.js +6 -0
- package/dist/ai-service/prompts/generated/library-typedefs/Dim.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js +6 -0
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts +3 -0
- package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/index.js +5 -0
- package/dist/ai-service/prompts/generated/library-typedefs/index.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/index.d.ts +11 -0
- package/dist/ai-service/prompts/generated/subprompts/index.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/index.js +13 -0
- package/dist/ai-service/prompts/generated/subprompts/index.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.js.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/system.d.ts +2 -0
- package/dist/ai-service/prompts/generated/subprompts/system.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/subprompts/system.js +6 -0
- package/dist/ai-service/prompts/generated/subprompts/system.js.map +1 -0
- package/dist/ai-service/prompts/markdown-loader.d.ts +10 -0
- package/dist/ai-service/prompts/markdown-loader.d.ts.map +1 -0
- package/dist/ai-service/prompts/markdown-loader.js +71 -0
- package/dist/ai-service/prompts/markdown-loader.js.map +1 -0
- package/dist/ai-service/prompts/system.d.ts +2 -0
- package/dist/ai-service/prompts/system.d.ts.map +1 -0
- package/dist/ai-service/prompts/system.js +152 -0
- package/dist/ai-service/prompts/system.js.map +1 -0
- package/dist/ai-service/result-buffer/bolt.d.ts +15 -0
- package/dist/ai-service/result-buffer/bolt.d.ts.map +1 -0
- package/dist/ai-service/result-buffer/bolt.js +73 -0
- package/dist/ai-service/result-buffer/bolt.js.map +1 -0
- package/dist/ai-service/result-buffer/shared.d.ts +13 -0
- package/dist/ai-service/result-buffer/shared.d.ts.map +1 -0
- package/dist/ai-service/result-buffer/shared.js +7 -0
- package/dist/ai-service/result-buffer/shared.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts +177 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.js +70 -0
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -0
- package/dist/ai-service/state-machine/fsm.d.ts +42 -0
- package/dist/ai-service/state-machine/fsm.d.ts.map +1 -0
- package/dist/ai-service/state-machine/fsm.js +64 -0
- package/dist/ai-service/state-machine/fsm.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts +3 -0
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/agent-planning.js +263 -0
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts +3 -0
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/awaiting-user.js +36 -0
- package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/idle.d.ts +3 -0
- package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/idle.js +24 -0
- package/dist/ai-service/state-machine/handlers/idle.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +3 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.js +160 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/play-dead.d.ts +3 -0
- package/dist/ai-service/state-machine/handlers/play-dead.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/play-dead.js +11 -0
- package/dist/ai-service/state-machine/handlers/play-dead.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts +3 -0
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/post-processing.js +85 -0
- package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts +4 -0
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +40 -0
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/metadata.d.ts +6 -0
- package/dist/ai-service/state-machine/helpers/metadata.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/metadata.js +11 -0
- package/dist/ai-service/state-machine/helpers/metadata.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/peer.d.ts +5 -0
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/peer.js +7 -0
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/transition.d.ts +12 -0
- package/dist/ai-service/state-machine/helpers/transition.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/transition.js +12 -0
- package/dist/ai-service/state-machine/helpers/transition.js.map +1 -0
- package/dist/ai-service/state-machine/mocks.d.ts +7 -0
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -0
- package/dist/ai-service/state-machine/mocks.js +72 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -0
- package/dist/ai-service/state-machine/test-util.d.ts +5 -0
- package/dist/ai-service/state-machine/test-util.d.ts.map +1 -0
- package/dist/ai-service/state-machine/test-util.js +29 -0
- package/dist/ai-service/state-machine/test-util.js.map +1 -0
- package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.d.ts +21 -0
- package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.d.ts.map +1 -0
- package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.js +48 -0
- package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.js.map +1 -0
- package/dist/ai-service/transform/api-builder/shared.d.ts +11 -0
- package/dist/ai-service/transform/api-builder/shared.d.ts.map +1 -0
- package/dist/ai-service/transform/api-builder/shared.js +55 -0
- package/dist/ai-service/transform/api-builder/shared.js.map +1 -0
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts +27 -0
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts.map +1 -0
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +67 -0
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -0
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts +23 -0
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts.map +1 -0
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +59 -0
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -0
- package/dist/ai-service/transform/remove-api-builder-imports/transformer.d.ts +19 -0
- package/dist/ai-service/transform/remove-api-builder-imports/transformer.d.ts.map +1 -0
- package/dist/ai-service/transform/remove-api-builder-imports/transformer.js +45 -0
- package/dist/ai-service/transform/remove-api-builder-imports/transformer.js.map +1 -0
- package/dist/ai-service/transform/shared.d.ts +20 -0
- package/dist/ai-service/transform/shared.d.ts.map +1 -0
- package/dist/ai-service/transform/shared.js +134 -0
- package/dist/ai-service/transform/shared.js.map +1 -0
- package/dist/ai-service/transform/workaround-missing-sbapi/transformer.d.ts +17 -0
- package/dist/ai-service/transform/workaround-missing-sbapi/transformer.d.ts.map +1 -0
- package/dist/ai-service/transform/workaround-missing-sbapi/transformer.js +33 -0
- package/dist/ai-service/transform/workaround-missing-sbapi/transformer.js.map +1 -0
- package/dist/ai-service/types.d.ts +71 -0
- package/dist/ai-service/types.d.ts.map +1 -0
- package/dist/ai-service/types.js +8 -0
- package/dist/ai-service/types.js.map +1 -0
- package/dist/binding-extraction/extract-control-block-identifiers.d.ts +4 -0
- package/dist/binding-extraction/extract-control-block-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/extract-control-block-identifiers.js +86 -0
- package/dist/binding-extraction/extract-control-block-identifiers.js.map +1 -0
- package/dist/binding-extraction/extract-embedded-identifiers.d.ts +16 -0
- package/dist/binding-extraction/extract-embedded-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/extract-embedded-identifiers.js +100 -0
- package/dist/binding-extraction/extract-embedded-identifiers.js.map +1 -0
- package/dist/binding-extraction/extract-identifiers.d.ts +8 -0
- package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/extract-identifiers.js +150 -0
- package/dist/binding-extraction/extract-identifiers.js.map +1 -0
- package/dist/binding-extraction/extract-js-identifiers.d.ts +19 -0
- package/dist/binding-extraction/extract-js-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/extract-js-identifiers.js +161 -0
- package/dist/binding-extraction/extract-js-identifiers.js.map +1 -0
- package/dist/binding-extraction/extract-py-identifiers.d.ts +4 -0
- package/dist/binding-extraction/extract-py-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/extract-py-identifiers.js +161 -0
- package/dist/binding-extraction/extract-py-identifiers.js.map +1 -0
- package/dist/binding-extraction/shared.d.ts +225 -0
- package/dist/binding-extraction/shared.d.ts.map +1 -0
- package/dist/binding-extraction/shared.js +43 -0
- package/dist/binding-extraction/shared.js.map +1 -0
- package/dist/binding-extraction/template-strings.d.ts +9 -0
- package/dist/binding-extraction/template-strings.d.ts.map +1 -0
- package/dist/binding-extraction/template-strings.js +45 -0
- package/dist/binding-extraction/template-strings.js.map +1 -0
- package/dist/codegen.d.ts +26 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +222 -0
- package/dist/codegen.js.map +1 -0
- package/dist/components-manager.d.ts +38 -0
- package/dist/components-manager.d.ts.map +1 -0
- package/dist/components-manager.js +177 -0
- package/dist/components-manager.js.map +1 -0
- package/dist/custom-components.d.ts +6 -0
- package/dist/custom-components.d.ts.map +1 -0
- package/dist/custom-components.js +51 -0
- package/dist/custom-components.js.map +1 -0
- package/dist/draft-interface.d.ts +12 -0
- package/dist/draft-interface.d.ts.map +1 -0
- package/dist/draft-interface.js +2 -0
- package/dist/draft-interface.js.map +1 -0
- package/dist/errors/error-handler.d.ts +35 -0
- package/dist/errors/error-handler.d.ts.map +1 -0
- package/dist/errors/error-handler.js +65 -0
- package/dist/errors/error-handler.js.map +1 -0
- package/dist/errors/make-server-error.d.ts +5 -0
- package/dist/errors/make-server-error.d.ts.map +1 -0
- package/dist/errors/make-server-error.js +21 -0
- package/dist/errors/make-server-error.js.map +1 -0
- package/dist/file-sync-vite-plugin.d.ts +4 -0
- package/dist/file-sync-vite-plugin.d.ts.map +1 -0
- package/dist/file-sync-vite-plugin.js +691 -0
- package/dist/file-sync-vite-plugin.js.map +1 -0
- package/dist/file-system-helpers.d.ts +7 -0
- package/dist/file-system-helpers.d.ts.map +1 -0
- package/dist/file-system-helpers.js +12 -0
- package/dist/file-system-helpers.js.map +1 -0
- package/dist/file-system-manager.d.ts +133 -0
- package/dist/file-system-manager.d.ts.map +1 -0
- package/dist/file-system-manager.js +1205 -0
- package/dist/file-system-manager.js.map +1 -0
- package/dist/generate.d.ts +8 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +7 -0
- package/dist/generate.js.map +1 -0
- package/dist/ids.d.ts +2 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +21 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/injected-index.d.ts +12 -0
- package/dist/injected-index.d.ts.map +1 -0
- package/dist/injected-index.js +38 -0
- package/dist/injected-index.js.map +1 -0
- package/dist/lock-service/index.d.ts +108 -0
- package/dist/lock-service/index.d.ts.map +1 -0
- package/dist/lock-service/index.js +324 -0
- package/dist/lock-service/index.js.map +1 -0
- package/dist/parsing/bindings.d.ts +4 -0
- package/dist/parsing/bindings.d.ts.map +1 -0
- package/dist/parsing/bindings.js +17 -0
- package/dist/parsing/bindings.js.map +1 -0
- package/dist/parsing/computed/index.d.ts +4 -0
- package/dist/parsing/computed/index.d.ts.map +1 -0
- package/dist/parsing/computed/index.js +7 -0
- package/dist/parsing/computed/index.js.map +1 -0
- package/dist/parsing/computed/to-code-computed.d.ts +2 -0
- package/dist/parsing/computed/to-code-computed.d.ts.map +1 -0
- package/dist/parsing/computed/to-code-computed.js +43 -0
- package/dist/parsing/computed/to-code-computed.js.map +1 -0
- package/dist/parsing/computed/to-value-computed.d.ts +4 -0
- package/dist/parsing/computed/to-value-computed.d.ts.map +1 -0
- package/dist/parsing/computed/to-value-computed.js +13 -0
- package/dist/parsing/computed/to-value-computed.js.map +1 -0
- package/dist/parsing/dim/index.d.ts +5 -0
- package/dist/parsing/dim/index.d.ts.map +1 -0
- package/dist/parsing/dim/index.js +7 -0
- package/dist/parsing/dim/index.js.map +1 -0
- package/dist/parsing/dim/to-code-dimensions.d.ts +3 -0
- package/dist/parsing/dim/to-code-dimensions.d.ts.map +1 -0
- package/dist/parsing/dim/to-code-dimensions.js +22 -0
- package/dist/parsing/dim/to-code-dimensions.js.map +1 -0
- package/dist/parsing/dim/to-value-dimensions.d.ts +4 -0
- package/dist/parsing/dim/to-value-dimensions.d.ts.map +1 -0
- package/dist/parsing/dim/to-value-dimensions.js +39 -0
- package/dist/parsing/dim/to-value-dimensions.js.map +1 -0
- package/dist/parsing/entity/index.d.ts +7 -0
- package/dist/parsing/entity/index.d.ts.map +1 -0
- package/dist/parsing/entity/index.js +7 -0
- package/dist/parsing/entity/index.js.map +1 -0
- package/dist/parsing/entity/to-code-entity.d.ts +3 -0
- package/dist/parsing/entity/to-code-entity.d.ts.map +1 -0
- package/dist/parsing/entity/to-code-entity.js +41 -0
- package/dist/parsing/entity/to-code-entity.js.map +1 -0
- package/dist/parsing/entity/to-value-entity.d.ts +8 -0
- package/dist/parsing/entity/to-value-entity.d.ts.map +1 -0
- package/dist/parsing/entity/to-value-entity.js +120 -0
- package/dist/parsing/entity/to-value-entity.js.map +1 -0
- package/dist/parsing/events/index.d.ts +5 -0
- package/dist/parsing/events/index.d.ts.map +1 -0
- package/dist/parsing/events/index.js +7 -0
- package/dist/parsing/events/index.js.map +1 -0
- package/dist/parsing/events/to-code-events.d.ts +3 -0
- package/dist/parsing/events/to-code-events.d.ts.map +1 -0
- package/dist/parsing/events/to-code-events.js +100 -0
- package/dist/parsing/events/to-code-events.js.map +1 -0
- package/dist/parsing/events/to-value-events.d.ts +6 -0
- package/dist/parsing/events/to-value-events.d.ts.map +1 -0
- package/dist/parsing/events/to-value-events.js +194 -0
- package/dist/parsing/events/to-value-events.js.map +1 -0
- package/dist/parsing/ids.d.ts +17 -0
- package/dist/parsing/ids.d.ts.map +1 -0
- package/dist/parsing/ids.js +143 -0
- package/dist/parsing/ids.js.map +1 -0
- package/dist/parsing/imports.d.ts +6 -0
- package/dist/parsing/imports.d.ts.map +1 -0
- package/dist/parsing/imports.js +31 -0
- package/dist/parsing/imports.js.map +1 -0
- package/dist/parsing/jsx-utils.d.ts +9 -0
- package/dist/parsing/jsx-utils.d.ts.map +1 -0
- package/dist/parsing/jsx-utils.js +48 -0
- package/dist/parsing/jsx-utils.js.map +1 -0
- package/dist/parsing/jsx.d.ts +23 -0
- package/dist/parsing/jsx.d.ts.map +1 -0
- package/dist/parsing/jsx.js +330 -0
- package/dist/parsing/jsx.js.map +1 -0
- package/dist/parsing/page.d.ts +9 -0
- package/dist/parsing/page.d.ts.map +1 -0
- package/dist/parsing/page.js +156 -0
- package/dist/parsing/page.js.map +1 -0
- package/dist/parsing/properties.d.ts +5 -0
- package/dist/parsing/properties.d.ts.map +1 -0
- package/dist/parsing/properties.js +89 -0
- package/dist/parsing/properties.js.map +1 -0
- package/dist/parsing/scope.d.ts +90 -0
- package/dist/parsing/scope.d.ts.map +1 -0
- package/dist/parsing/scope.js +669 -0
- package/dist/parsing/scope.js.map +1 -0
- package/dist/parsing/template/index.d.ts +5 -0
- package/dist/parsing/template/index.d.ts.map +1 -0
- package/dist/parsing/template/index.js +7 -0
- package/dist/parsing/template/index.js.map +1 -0
- package/dist/parsing/template/to-code-template.d.ts +2 -0
- package/dist/parsing/template/to-code-template.d.ts.map +1 -0
- package/dist/parsing/template/to-code-template.js +5 -0
- package/dist/parsing/template/to-code-template.js.map +1 -0
- package/dist/parsing/template/to-value-template.d.ts +4 -0
- package/dist/parsing/template/to-value-template.d.ts.map +1 -0
- package/dist/parsing/template/to-value-template.js +30 -0
- package/dist/parsing/template/to-value-template.js.map +1 -0
- package/dist/parsing/theme.d.ts +3 -0
- package/dist/parsing/theme.d.ts.map +1 -0
- package/dist/parsing/theme.js +87 -0
- package/dist/parsing/theme.js.map +1 -0
- package/dist/parsing/type-parsing-registry.d.ts +8 -0
- package/dist/parsing/type-parsing-registry.d.ts.map +1 -0
- package/dist/parsing/type-parsing-registry.js +11 -0
- package/dist/parsing/type-parsing-registry.js.map +1 -0
- package/dist/parsing/types.d.ts +9 -0
- package/dist/parsing/types.d.ts.map +1 -0
- package/dist/parsing/types.js +2 -0
- package/dist/parsing/types.js.map +1 -0
- package/dist/parsing/util.d.ts +34 -0
- package/dist/parsing/util.d.ts.map +1 -0
- package/dist/parsing/util.js +338 -0
- package/dist/parsing/util.js.map +1 -0
- package/dist/plugin-options.d.ts +25 -0
- package/dist/plugin-options.d.ts.map +1 -0
- package/dist/plugin-options.js +14 -0
- package/dist/plugin-options.js.map +1 -0
- package/dist/refactor/blocks.d.ts +10 -0
- package/dist/refactor/blocks.d.ts.map +1 -0
- package/dist/refactor/blocks.js +214 -0
- package/dist/refactor/blocks.js.map +1 -0
- package/dist/refactor/javascript.d.ts +15 -0
- package/dist/refactor/javascript.d.ts.map +1 -0
- package/dist/refactor/javascript.js +182 -0
- package/dist/refactor/javascript.js.map +1 -0
- package/dist/refactor-jsx.d.ts +28 -0
- package/dist/refactor-jsx.d.ts.map +1 -0
- package/dist/refactor-jsx.js +77 -0
- package/dist/refactor-jsx.js.map +1 -0
- package/dist/rename-manager.d.ts +27 -0
- package/dist/rename-manager.d.ts.map +1 -0
- package/dist/rename-manager.js +140 -0
- package/dist/rename-manager.js.map +1 -0
- package/dist/routing.d.ts +6 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +76 -0
- package/dist/routing.js.map +1 -0
- package/dist/sb-scope-manager.d.ts +102 -0
- package/dist/sb-scope-manager.d.ts.map +1 -0
- package/dist/sb-scope-manager.js +507 -0
- package/dist/sb-scope-manager.js.map +1 -0
- package/dist/socket-manager.d.ts +39 -0
- package/dist/socket-manager.d.ts.map +1 -0
- package/dist/socket-manager.js +184 -0
- package/dist/socket-manager.js.map +1 -0
- package/dist/source-tracker.d.ts +190 -0
- package/dist/source-tracker.d.ts.map +1 -0
- package/dist/source-tracker.js +962 -0
- package/dist/source-tracker.js.map +1 -0
- package/dist/sync-service/download.d.ts +15 -0
- package/dist/sync-service/download.d.ts.map +1 -0
- package/dist/sync-service/download.js +116 -0
- package/dist/sync-service/download.js.map +1 -0
- package/dist/sync-service/draft-helpers.d.ts +77 -0
- package/dist/sync-service/draft-helpers.d.ts.map +1 -0
- package/dist/sync-service/draft-helpers.js +512 -0
- package/dist/sync-service/draft-helpers.js.map +1 -0
- package/dist/sync-service/hash-cache.d.ts +15 -0
- package/dist/sync-service/hash-cache.d.ts.map +1 -0
- package/dist/sync-service/hash-cache.js +58 -0
- package/dist/sync-service/hash-cache.js.map +1 -0
- package/dist/sync-service/hash-dir-tree.d.ts +10 -0
- package/dist/sync-service/hash-dir-tree.d.ts.map +1 -0
- package/dist/sync-service/hash-dir-tree.js +53 -0
- package/dist/sync-service/hash-dir-tree.js.map +1 -0
- package/dist/sync-service/index.d.ts +143 -0
- package/dist/sync-service/index.d.ts.map +1 -0
- package/dist/sync-service/index.js +351 -0
- package/dist/sync-service/index.js.map +1 -0
- package/dist/sync-service/list-dir.d.ts +29 -0
- package/dist/sync-service/list-dir.d.ts.map +1 -0
- package/dist/sync-service/list-dir.js +66 -0
- package/dist/sync-service/list-dir.js.map +1 -0
- package/dist/sync-service/server-rpc/client.d.ts +13 -0
- package/dist/sync-service/server-rpc/client.d.ts.map +1 -0
- package/dist/sync-service/server-rpc/client.js +65 -0
- package/dist/sync-service/server-rpc/client.js.map +1 -0
- package/dist/sync-service/server-rpc/handlers.d.ts +3 -0
- package/dist/sync-service/server-rpc/handlers.d.ts.map +1 -0
- package/dist/sync-service/server-rpc/handlers.js +18 -0
- package/dist/sync-service/server-rpc/handlers.js.map +1 -0
- package/dist/sync-service/snapshot/take-snapshot.d.ts +35 -0
- package/dist/sync-service/snapshot/take-snapshot.d.ts.map +1 -0
- package/dist/sync-service/snapshot/take-snapshot.js +227 -0
- package/dist/sync-service/snapshot/take-snapshot.js.map +1 -0
- package/dist/sync-service/snapshot/types.d.ts +24 -0
- package/dist/sync-service/snapshot/types.d.ts.map +1 -0
- package/dist/sync-service/snapshot/types.js +3 -0
- package/dist/sync-service/snapshot/types.js.map +1 -0
- package/dist/sync-service/snapshot/upload-snapshot.d.ts +5 -0
- package/dist/sync-service/snapshot/upload-snapshot.d.ts.map +1 -0
- package/dist/sync-service/snapshot/upload-snapshot.js +63 -0
- package/dist/sync-service/snapshot/upload-snapshot.js.map +1 -0
- package/dist/traverse.d.ts +6 -0
- package/dist/traverse.d.ts.map +1 -0
- package/dist/traverse.js +7 -0
- package/dist/traverse.js.map +1 -0
- package/dist/util/generation-number-sequence.d.ts +7 -0
- package/dist/util/generation-number-sequence.d.ts.map +1 -0
- package/dist/util/generation-number-sequence.js +13 -0
- package/dist/util/generation-number-sequence.js.map +1 -0
- package/dist/util/logger.d.ts +22 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +64 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/operation-queue.d.ts +17 -0
- package/dist/util/operation-queue.d.ts.map +1 -0
- package/dist/util/operation-queue.js +27 -0
- package/dist/util/operation-queue.js.map +1 -0
- package/dist/util/tracing.d.ts +4 -0
- package/dist/util/tracing.d.ts.map +1 -0
- package/dist/util/tracing.js +56 -0
- package/dist/util/tracing.js.map +1 -0
- package/dist/util/with-resolvers.d.ts +10 -0
- package/dist/util/with-resolvers.d.ts.map +1 -0
- package/dist/util/with-resolvers.js +14 -0
- package/dist/util/with-resolvers.js.map +1 -0
- package/dist/util.d.ts +28 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +123 -0
- package/dist/util.js.map +1 -0
- package/package.json +127 -0
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
import * as fsp from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
const EDIT_EXT = ".sbswap.edit";
|
|
4
|
+
const ADD_EXT = ".sbswap.add";
|
|
5
|
+
/**
|
|
6
|
+
* Gets the marker file path for a given file path and app root directory.
|
|
7
|
+
* Marker files are stored in .superblocks/drafts/ with the same relative structure.
|
|
8
|
+
*
|
|
9
|
+
* @param filePath - The absolute path to the file.
|
|
10
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
11
|
+
* @param markerType - The type of marker file ('.sbswap.edit' or '.sbswap.add').
|
|
12
|
+
* @returns The absolute path to the marker file.
|
|
13
|
+
*/
|
|
14
|
+
function getMarkerFilePath(filePath, appRootDirPath, markerType) {
|
|
15
|
+
const relativePath = path.relative(appRootDirPath, filePath);
|
|
16
|
+
return path.join(getDraftsDirectoryPath(appRootDirPath), `${relativePath}${markerType}`);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Gets the drafts directory path for the app root.
|
|
20
|
+
*
|
|
21
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
22
|
+
* @returns The absolute path to the drafts directory.
|
|
23
|
+
*/
|
|
24
|
+
function getDraftsDirectoryPath(appRootDirPath) {
|
|
25
|
+
return path.join(appRootDirPath, ".superblocks", "drafts");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a draft edit or addition based on the presence of an existing file.
|
|
29
|
+
* This makes the draft content visible to the build system while preserving the original.
|
|
30
|
+
*
|
|
31
|
+
* @param filePath - The absolute path to the file to edit or add.
|
|
32
|
+
* @param draftContent - The content of the draft edit or addition.
|
|
33
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
34
|
+
* @returns A promise that resolves to "edit" if the file already exists, or "add" if the file does not exist.
|
|
35
|
+
*/
|
|
36
|
+
export async function createDraft(filePath, draftContent, appRootDirPath) {
|
|
37
|
+
const editMarkerPath = getMarkerFilePath(filePath, appRootDirPath, EDIT_EXT);
|
|
38
|
+
const addMarkerPath = getMarkerFilePath(filePath, appRootDirPath, ADD_EXT);
|
|
39
|
+
let state = "NEW";
|
|
40
|
+
try {
|
|
41
|
+
await fsp.access(filePath);
|
|
42
|
+
state = "FILE_EXISTS";
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
//
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await fsp.access(editMarkerPath);
|
|
49
|
+
state = "EDIT_MARKER";
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
//
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
await fsp.access(addMarkerPath);
|
|
56
|
+
state = "ADD_MARKER";
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
//
|
|
60
|
+
}
|
|
61
|
+
switch (state) {
|
|
62
|
+
case "ADD_MARKER": {
|
|
63
|
+
// This is an iteration on an existing draft addition - just update content
|
|
64
|
+
await fsp.writeFile(filePath, draftContent);
|
|
65
|
+
return "add";
|
|
66
|
+
}
|
|
67
|
+
case "EDIT_MARKER": {
|
|
68
|
+
// This is an iteration on an existing draft edit - just update content
|
|
69
|
+
await fsp.writeFile(filePath, draftContent);
|
|
70
|
+
return "edit";
|
|
71
|
+
}
|
|
72
|
+
case "FILE_EXISTS": {
|
|
73
|
+
// This is a new draft edit
|
|
74
|
+
await createDraftEdit(filePath, draftContent, appRootDirPath);
|
|
75
|
+
return "edit";
|
|
76
|
+
}
|
|
77
|
+
case "NEW": {
|
|
78
|
+
// This is a new draft addition
|
|
79
|
+
await createDraftAdd(filePath, draftContent, appRootDirPath);
|
|
80
|
+
return "add";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Creates a draft edit by copying the original file to the drafts directory and writing draft content to the original location.
|
|
86
|
+
* This makes the draft content visible to the build system while preserving the original.
|
|
87
|
+
* If a draft edit already exists, this will just update the draft content.
|
|
88
|
+
*
|
|
89
|
+
* @param filePath - The absolute path to the file to edit.
|
|
90
|
+
* @param draftContent - The content of the draft edit.
|
|
91
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
92
|
+
* @returns A promise that resolves when the draft edit is created.
|
|
93
|
+
*/
|
|
94
|
+
export async function createDraftEdit(filePath, draftContent, appRootDirPath) {
|
|
95
|
+
const editMarkerPath = getMarkerFilePath(filePath, appRootDirPath, EDIT_EXT);
|
|
96
|
+
// Check if original file exists
|
|
97
|
+
try {
|
|
98
|
+
await fsp.access(filePath);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
throw new Error(`Cannot create draft edit: original file does not exist: ${filePath}`);
|
|
102
|
+
}
|
|
103
|
+
// Check if draft already exists
|
|
104
|
+
try {
|
|
105
|
+
await fsp.access(editMarkerPath);
|
|
106
|
+
// If we get here, the marker file exists, which means draft already exists
|
|
107
|
+
// This is an iteration - just update the draft content
|
|
108
|
+
await fsp.writeFile(filePath, draftContent);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Marker file doesn't exist, proceed with normal draft creation
|
|
113
|
+
}
|
|
114
|
+
// Ensure the drafts directory structure exists
|
|
115
|
+
const editMarkerDir = path.dirname(editMarkerPath);
|
|
116
|
+
await fsp.mkdir(editMarkerDir, { recursive: true });
|
|
117
|
+
// Copy original file to .sbswap.edit marker in drafts directory
|
|
118
|
+
await fsp.copyFile(filePath, editMarkerPath);
|
|
119
|
+
// Write draft content to original location
|
|
120
|
+
await fsp.writeFile(filePath, draftContent);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Creates a draft addition by writing new file content and creating a .sbswap.add marker.
|
|
124
|
+
* This makes the new file visible to the build system while marking it as a draft addition.
|
|
125
|
+
* If a draft addition already exists, this will just update the content.
|
|
126
|
+
*
|
|
127
|
+
* @param filePath - The absolute path where the new file should be created.
|
|
128
|
+
* @param content - The content of the new file.
|
|
129
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
130
|
+
* @returns A promise that resolves when the draft addition is created.
|
|
131
|
+
*/
|
|
132
|
+
export async function createDraftAdd(filePath, content, appRootDirPath) {
|
|
133
|
+
const addMarkerPath = getMarkerFilePath(filePath, appRootDirPath, ".sbswap.add");
|
|
134
|
+
// Check if this is an iteration on an existing draft addition
|
|
135
|
+
try {
|
|
136
|
+
await fsp.access(addMarkerPath);
|
|
137
|
+
// Marker exists, this is an iteration - just update content
|
|
138
|
+
const dirPath = path.dirname(filePath);
|
|
139
|
+
await fsp.mkdir(dirPath, { recursive: true });
|
|
140
|
+
await fsp.writeFile(filePath, content);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Marker doesn't exist, proceed with normal draft addition creation
|
|
145
|
+
}
|
|
146
|
+
// Check if file already exists (and it's not a draft)
|
|
147
|
+
try {
|
|
148
|
+
await fsp.access(filePath);
|
|
149
|
+
// If we get here, the file exists, which is not allowed for new draft additions
|
|
150
|
+
throw new Error(`Cannot create draft add: file already exists: ${filePath}`);
|
|
151
|
+
}
|
|
152
|
+
catch (accessError) {
|
|
153
|
+
// If access fails, the file doesn't exist, which is what we want
|
|
154
|
+
if (accessError.message?.includes("Cannot create draft add")) {
|
|
155
|
+
throw accessError; // Re-throw our own error
|
|
156
|
+
}
|
|
157
|
+
// Otherwise, continue - the file doesn't exist, which is expected
|
|
158
|
+
}
|
|
159
|
+
// Ensure directory exists for the new file
|
|
160
|
+
const dirPath = path.dirname(filePath);
|
|
161
|
+
await fsp.mkdir(dirPath, { recursive: true });
|
|
162
|
+
// Ensure the drafts directory structure exists
|
|
163
|
+
const addMarkerDir = path.dirname(addMarkerPath);
|
|
164
|
+
await fsp.mkdir(addMarkerDir, { recursive: true });
|
|
165
|
+
// Write new file content
|
|
166
|
+
await fsp.writeFile(filePath, content);
|
|
167
|
+
// Create marker to indicate this is a draft addition
|
|
168
|
+
await fsp.writeFile(addMarkerPath, "");
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Recursively checks if any draft files exist in the drafts directory.
|
|
172
|
+
* Looks for .sbswap.edit and .sbswap.add marker files.
|
|
173
|
+
*
|
|
174
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
175
|
+
* @returns A promise that resolves to true if any draft files are found, false otherwise.
|
|
176
|
+
*/
|
|
177
|
+
export async function hasSwapFiles(appRootDirPath) {
|
|
178
|
+
const draftsDir = getDraftsDirectoryPath(appRootDirPath);
|
|
179
|
+
try {
|
|
180
|
+
await fsp.access(draftsDir);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Drafts directory doesn't exist, so no draft files
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
return await hasSwapFilesInDirectory(draftsDir);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Helper function to recursively check for swap files in a directory.
|
|
190
|
+
*
|
|
191
|
+
* @param directoryPath - The path to the directory to scan for draft files.
|
|
192
|
+
* @returns A promise that resolves to true if any draft files are found, false otherwise.
|
|
193
|
+
*/
|
|
194
|
+
async function hasSwapFilesInDirectory(directoryPath) {
|
|
195
|
+
try {
|
|
196
|
+
const entries = await fsp.readdir(directoryPath, { withFileTypes: true });
|
|
197
|
+
for (const entry of entries) {
|
|
198
|
+
if (entry.isFile() &&
|
|
199
|
+
(entry.name.endsWith(EDIT_EXT) || entry.name.endsWith(ADD_EXT))) {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
if (entry.isDirectory()) {
|
|
203
|
+
const subdirPath = path.join(directoryPath, entry.name);
|
|
204
|
+
if (await hasSwapFilesInDirectory(subdirPath)) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
catch (_error) {
|
|
212
|
+
// If directory doesn't exist or can't be read, no draft files
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Discards all draft changes by restoring original files and removing draft additions.
|
|
218
|
+
* - For .sbswap.edit files: copies them back to the original location
|
|
219
|
+
* - For .sbswap.add markers: removes both the marker and the corresponding file
|
|
220
|
+
*
|
|
221
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
222
|
+
* @returns A promise that resolves when all drafts have been discarded.
|
|
223
|
+
*/
|
|
224
|
+
export async function discardAllDrafts(appRootDirPath) {
|
|
225
|
+
const draftsDir = getDraftsDirectoryPath(appRootDirPath);
|
|
226
|
+
try {
|
|
227
|
+
await fsp.access(draftsDir);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Drafts directory doesn't exist, nothing to discard
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
await discardDraftsInDirectory(draftsDir, appRootDirPath);
|
|
234
|
+
// Clean up the entire drafts directory
|
|
235
|
+
await cleanUpDraftsDirectory(appRootDirPath);
|
|
236
|
+
}
|
|
237
|
+
export async function cleanUpDraftsDirectory(appRootDirPath) {
|
|
238
|
+
const draftsDir = getDraftsDirectoryPath(appRootDirPath);
|
|
239
|
+
try {
|
|
240
|
+
await fsp.rm(draftsDir, { recursive: true });
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Ignore cleanup errors
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Helper function to recursively discard drafts in a directory.
|
|
248
|
+
*
|
|
249
|
+
* @param directoryPath - The path to the directory to discard drafts from.
|
|
250
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
251
|
+
* @returns A promise that resolves when all drafts have been discarded.
|
|
252
|
+
*/
|
|
253
|
+
async function discardDraftsInDirectory(directoryPath, appRootDirPath) {
|
|
254
|
+
try {
|
|
255
|
+
const entries = await fsp.readdir(directoryPath, { withFileTypes: true });
|
|
256
|
+
for (const entry of entries) {
|
|
257
|
+
const fullPath = path.join(directoryPath, entry.name);
|
|
258
|
+
if (entry.isFile()) {
|
|
259
|
+
if (entry.name.endsWith(EDIT_EXT)) {
|
|
260
|
+
// Restore original file
|
|
261
|
+
const markerRelativePath = path.relative(getDraftsDirectoryPath(appRootDirPath), fullPath);
|
|
262
|
+
const originalRelativePath = markerRelativePath.slice(0, -EDIT_EXT.length);
|
|
263
|
+
const originalPath = path.join(appRootDirPath, originalRelativePath);
|
|
264
|
+
try {
|
|
265
|
+
// Remove current draft content
|
|
266
|
+
await fsp.unlink(originalPath);
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// File might not exist, that's okay
|
|
270
|
+
}
|
|
271
|
+
// Copy original back from drafts directory
|
|
272
|
+
await fsp.copyFile(fullPath, originalPath);
|
|
273
|
+
}
|
|
274
|
+
else if (entry.name.endsWith(ADD_EXT)) {
|
|
275
|
+
// Remove draft addition
|
|
276
|
+
const markerRelativePath = path.relative(getDraftsDirectoryPath(appRootDirPath), fullPath);
|
|
277
|
+
const addedFileRelativePath = markerRelativePath.slice(0, -ADD_EXT.length);
|
|
278
|
+
const addedFilePath = path.join(appRootDirPath, addedFileRelativePath);
|
|
279
|
+
try {
|
|
280
|
+
await fsp.unlink(addedFilePath);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// File might not exist, that's okay
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (entry.isDirectory()) {
|
|
288
|
+
await discardDraftsInDirectory(fullPath, appRootDirPath);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch (_error) {
|
|
293
|
+
// Ignore errors reading the directory
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Commits all draft changes by removing .sbswap.edit and .sbswap.add markers.
|
|
298
|
+
* This leaves the current filesystem state as the committed state.
|
|
299
|
+
*
|
|
300
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
301
|
+
* @returns A promise that resolves when all drafts have been committed.
|
|
302
|
+
*/
|
|
303
|
+
export async function commitAllDrafts(appRootDirPath) {
|
|
304
|
+
const draftsDir = getDraftsDirectoryPath(appRootDirPath);
|
|
305
|
+
try {
|
|
306
|
+
await fsp.access(draftsDir);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// Drafts directory doesn't exist, nothing to commit
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// Simply remove the entire drafts directory
|
|
313
|
+
try {
|
|
314
|
+
await fsp.rm(draftsDir, { recursive: true });
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// Ignore deletion errors
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Gets information about all draft files in the drafts directory.
|
|
322
|
+
*
|
|
323
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
324
|
+
* @returns A promise that resolves to information about draft files.
|
|
325
|
+
*/
|
|
326
|
+
export async function getDraftInfo(appRootDirPath) {
|
|
327
|
+
const edits = [];
|
|
328
|
+
const additions = [];
|
|
329
|
+
const draftsDir = getDraftsDirectoryPath(appRootDirPath);
|
|
330
|
+
try {
|
|
331
|
+
await fsp.access(draftsDir);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
// Drafts directory doesn't exist, no drafts
|
|
335
|
+
return { edits, additions };
|
|
336
|
+
}
|
|
337
|
+
async function scanDirectory(currentPath) {
|
|
338
|
+
try {
|
|
339
|
+
const entries = await fsp.readdir(currentPath, { withFileTypes: true });
|
|
340
|
+
for (const entry of entries) {
|
|
341
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
342
|
+
if (entry.isFile()) {
|
|
343
|
+
if (entry.name.endsWith(EDIT_EXT)) {
|
|
344
|
+
const markerRelativePath = path.relative(draftsDir, fullPath);
|
|
345
|
+
const originalRelativePath = markerRelativePath.slice(0, -EDIT_EXT.length);
|
|
346
|
+
edits.push(originalRelativePath);
|
|
347
|
+
}
|
|
348
|
+
else if (entry.name.endsWith(ADD_EXT)) {
|
|
349
|
+
const markerRelativePath = path.relative(draftsDir, fullPath);
|
|
350
|
+
const addedFileRelativePath = markerRelativePath.slice(0, -ADD_EXT.length);
|
|
351
|
+
additions.push(addedFileRelativePath);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
if (entry.isDirectory()) {
|
|
355
|
+
await scanDirectory(fullPath);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
// Ignore errors reading directories
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
await scanDirectory(draftsDir);
|
|
364
|
+
return { edits, additions };
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Generates a git-like diff showing all draft changes.
|
|
368
|
+
*
|
|
369
|
+
* @param appRootDirPath - The absolute path to the app root directory.
|
|
370
|
+
* @param specificPaths - An optional array of relative paths to limit the diff to.
|
|
371
|
+
* @returns A promise that resolves to a git-like diff string.
|
|
372
|
+
*/
|
|
373
|
+
export async function generateDraftDiff(appRootDirPath, specificPaths = []) {
|
|
374
|
+
const draftsDir = getDraftsDirectoryPath(appRootDirPath);
|
|
375
|
+
try {
|
|
376
|
+
await fsp.access(draftsDir);
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
return "No draft changes found.";
|
|
380
|
+
}
|
|
381
|
+
const diffLines = [];
|
|
382
|
+
let { edits, additions } = await getDraftInfo(appRootDirPath);
|
|
383
|
+
edits = edits.filter((edit) => specificPaths.length === 0 ||
|
|
384
|
+
specificPaths.some((path) => edit.startsWith(path)));
|
|
385
|
+
additions = additions.filter((add) => specificPaths.length === 0 ||
|
|
386
|
+
specificPaths.some((path) => add.startsWith(path)));
|
|
387
|
+
if (edits.length === 0 && additions.length === 0) {
|
|
388
|
+
return "No draft changes found.";
|
|
389
|
+
}
|
|
390
|
+
// Process draft edits
|
|
391
|
+
for (const editPath of edits) {
|
|
392
|
+
const originalPath = path.join(appRootDirPath, editPath);
|
|
393
|
+
const markerPath = getMarkerFilePath(originalPath, appRootDirPath, EDIT_EXT);
|
|
394
|
+
try {
|
|
395
|
+
const currentContent = await fsp.readFile(originalPath, "utf8");
|
|
396
|
+
const originalContent = await fsp.readFile(markerPath, "utf8");
|
|
397
|
+
diffLines.push(`diff --git a/${editPath} b/${editPath}`);
|
|
398
|
+
diffLines.push(`index 0000000..1000000 100644`);
|
|
399
|
+
diffLines.push(`--- a/${editPath}`);
|
|
400
|
+
diffLines.push(`+++ b/${editPath}`);
|
|
401
|
+
const unifiedDiff = generateUnifiedDiff(originalContent, currentContent);
|
|
402
|
+
diffLines.push(...unifiedDiff);
|
|
403
|
+
diffLines.push(""); // Empty line between files
|
|
404
|
+
}
|
|
405
|
+
catch (_error) {
|
|
406
|
+
// Skip files that can't be read
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Process draft additions
|
|
411
|
+
for (const addPath of additions) {
|
|
412
|
+
const filePath = path.join(appRootDirPath, addPath);
|
|
413
|
+
try {
|
|
414
|
+
const content = await fsp.readFile(filePath, "utf8");
|
|
415
|
+
diffLines.push(`diff --git a/${addPath} b/${addPath}`);
|
|
416
|
+
diffLines.push(`new file mode 100644`);
|
|
417
|
+
diffLines.push(`index 0000000..1000000`);
|
|
418
|
+
diffLines.push(`--- /dev/null`);
|
|
419
|
+
diffLines.push(`+++ b/${addPath}`);
|
|
420
|
+
diffLines.push(`@@ -0,0 +1,${content.split("\n").length} @@`);
|
|
421
|
+
const lines = content.split("\n");
|
|
422
|
+
for (const line of lines) {
|
|
423
|
+
diffLines.push(`+${line}`);
|
|
424
|
+
}
|
|
425
|
+
diffLines.push(""); // Empty line between files
|
|
426
|
+
}
|
|
427
|
+
catch (_error) {
|
|
428
|
+
// Skip files that can't be read
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// Remove trailing empty line
|
|
433
|
+
if (diffLines[diffLines.length - 1] === "") {
|
|
434
|
+
diffLines.pop();
|
|
435
|
+
}
|
|
436
|
+
return diffLines.join("\n");
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Generates a unified diff between two text contents.
|
|
440
|
+
* This is a simplified implementation that shows line-by-line changes.
|
|
441
|
+
*
|
|
442
|
+
* @param originalContent - The original content.
|
|
443
|
+
* @param currentContent - The current content.
|
|
444
|
+
* @returns An array of diff lines.
|
|
445
|
+
*/
|
|
446
|
+
function generateUnifiedDiff(originalContent, currentContent) {
|
|
447
|
+
const originalLines = originalContent.split("\n");
|
|
448
|
+
const currentLines = currentContent.split("\n");
|
|
449
|
+
const diffLines = [];
|
|
450
|
+
let hasChanges = false;
|
|
451
|
+
// Find ranges of changes
|
|
452
|
+
const changes = [];
|
|
453
|
+
let i = 0, j = 0;
|
|
454
|
+
while (i < originalLines.length || j < currentLines.length) {
|
|
455
|
+
if (i < originalLines.length && j < currentLines.length) {
|
|
456
|
+
const originalLine = originalLines[i] ?? "";
|
|
457
|
+
const currentLine = currentLines[j] ?? "";
|
|
458
|
+
if (originalLine === currentLine) {
|
|
459
|
+
// Lines match
|
|
460
|
+
changes.push({ type: "context", line: originalLine });
|
|
461
|
+
i++;
|
|
462
|
+
j++;
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
// Lines differ - for simplicity, treat as remove + add
|
|
466
|
+
changes.push({ type: "remove", line: originalLine });
|
|
467
|
+
changes.push({ type: "add", line: currentLine });
|
|
468
|
+
i++;
|
|
469
|
+
j++;
|
|
470
|
+
hasChanges = true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
else if (i < originalLines.length) {
|
|
474
|
+
// Only original lines left (removals)
|
|
475
|
+
const originalLine = originalLines[i] ?? "";
|
|
476
|
+
changes.push({ type: "remove", line: originalLine });
|
|
477
|
+
i++;
|
|
478
|
+
hasChanges = true;
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
// Only current lines left (additions)
|
|
482
|
+
const currentLine = currentLines[j] ?? "";
|
|
483
|
+
changes.push({ type: "add", line: currentLine });
|
|
484
|
+
j++;
|
|
485
|
+
hasChanges = true;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
if (!hasChanges) {
|
|
489
|
+
return [];
|
|
490
|
+
}
|
|
491
|
+
// Generate hunk headers and content
|
|
492
|
+
const hunkStart = 1;
|
|
493
|
+
const hunkOriginalCount = originalLines.length;
|
|
494
|
+
const hunkCurrentCount = currentLines.length;
|
|
495
|
+
diffLines.push(`@@ -${hunkStart},${hunkOriginalCount} +${hunkStart},${hunkCurrentCount} @@`);
|
|
496
|
+
// Add the changes with proper prefixes
|
|
497
|
+
for (const change of changes) {
|
|
498
|
+
switch (change.type) {
|
|
499
|
+
case "context":
|
|
500
|
+
diffLines.push(` ${change.line}`);
|
|
501
|
+
break;
|
|
502
|
+
case "remove":
|
|
503
|
+
diffLines.push(`-${change.line}`);
|
|
504
|
+
break;
|
|
505
|
+
case "add":
|
|
506
|
+
diffLines.push(`+${change.line}`);
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
return diffLines;
|
|
511
|
+
}
|
|
512
|
+
//# sourceMappingURL=draft-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-helpers.js","sourceRoot":"","sources":["../../src/sync-service/draft-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DirectorySnapshot, DirectoryState } from "./snapshot/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* A cache of hashes of DBFS objects that we know that are already stored in the server.
|
|
4
|
+
*/
|
|
5
|
+
export declare class HashCache {
|
|
6
|
+
private directories;
|
|
7
|
+
private file_contents;
|
|
8
|
+
private now;
|
|
9
|
+
add_directory(hash: string): void;
|
|
10
|
+
add_file_content(hash: string): void;
|
|
11
|
+
add_directory_recursive(directory: DirectoryState | DirectorySnapshot): void;
|
|
12
|
+
check_directory(hash: string): boolean;
|
|
13
|
+
check_file_content(hash: string): boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=hash-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-cache.d.ts","sourceRoot":"","sources":["../../src/sync-service/hash-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAS7E;;GAEG;AACH,qBAAa,SAAS;IAGpB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,GAAG;IAIX,aAAa,CAAC,IAAI,EAAE,MAAM;IAI1B,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAI7B,uBAAuB,CAAC,SAAS,EAAE,cAAc,GAAG,iBAAiB;IAWrE,eAAe,CAAC,IAAI,EAAE,MAAM;IAY5B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAWhC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** How long after we've seen a hash in the server, we consider it to be still in the server. */
|
|
2
|
+
const CACHE_DURATION_MS = 1_000 * 60 * 60 * 6; // 6 hours
|
|
3
|
+
// TODO(george): We are not currently removing old entries from the cache after they expire. We only do this when one of the
|
|
4
|
+
// `check_*` methods is called. If a hash is added to the cache but never checked, it will never be removed from the cache.
|
|
5
|
+
// This causes a memory leak. This can be a problem if the user has a large number of files in their project and/or if they are
|
|
6
|
+
// keeping the dev server running for a long time.
|
|
7
|
+
/**
|
|
8
|
+
* A cache of hashes of DBFS objects that we know that are already stored in the server.
|
|
9
|
+
*/
|
|
10
|
+
export class HashCache {
|
|
11
|
+
// for both maps, the values are timestamps from the monotonic clock (`performance.now()`) that represent the time
|
|
12
|
+
// when we added the hash to the respective cache
|
|
13
|
+
directories = new Map();
|
|
14
|
+
file_contents = new Map();
|
|
15
|
+
now() {
|
|
16
|
+
return performance.now();
|
|
17
|
+
}
|
|
18
|
+
add_directory(hash) {
|
|
19
|
+
this.directories.set(hash, this.now());
|
|
20
|
+
}
|
|
21
|
+
add_file_content(hash) {
|
|
22
|
+
this.file_contents.set(hash, this.now());
|
|
23
|
+
}
|
|
24
|
+
add_directory_recursive(directory) {
|
|
25
|
+
this.add_directory(directory.hash);
|
|
26
|
+
for (const entry of directory.contents) {
|
|
27
|
+
if (entry.type === "d") {
|
|
28
|
+
this.add_directory_recursive(entry);
|
|
29
|
+
}
|
|
30
|
+
else if (entry.type === "-") {
|
|
31
|
+
this.add_file_content(entry.hash);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
check_directory(hash) {
|
|
36
|
+
const timestamp = this.directories.get(hash);
|
|
37
|
+
if (timestamp === undefined) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (this.now() - timestamp > CACHE_DURATION_MS) {
|
|
41
|
+
this.directories.delete(hash);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
check_file_content(hash) {
|
|
47
|
+
const timestamp = this.file_contents.get(hash);
|
|
48
|
+
if (timestamp === undefined) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (this.now() - timestamp > CACHE_DURATION_MS) {
|
|
52
|
+
this.file_contents.delete(hash);
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=hash-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-cache.js","sourceRoot":"","sources":["../../src/sync-service/hash-cache.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,MAAM,iBAAiB,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;AAEzD,4HAA4H;AAC5H,2HAA2H;AAC3H,+HAA+H;AAC/H,kDAAkD;AAClD;;GAEG;AACH,MAAM,OAAO,SAAS;IACpB,kHAAkH;IAClH,iDAAiD;IACzC,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,GAAG;QACT,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,uBAAuB,CAAC,SAA6C;QACnE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DirectoryState } from "./snapshot/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Computes the hash of a local directory, including the hashes of all its contents recursively.
|
|
4
|
+
*
|
|
5
|
+
* @param localDirectoryPath - The path to the local directory to hash.
|
|
6
|
+
* @param excludedDirectories - An array of directory names to be ignored.
|
|
7
|
+
* @returns A promise that resolves to the hash of the directory and its contents.
|
|
8
|
+
*/
|
|
9
|
+
export declare function hashLocalDirectory(localDirectoryPath: string): Promise<DirectoryState>;
|
|
10
|
+
//# sourceMappingURL=hash-dir-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-dir-tree.d.ts","sourceRoot":"","sources":["../../src/sync-service/hash-dir-tree.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,cAAc,CAAC,CA0CzB"}
|