canopycms 0.0.61-int.75 → 0.0.62
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/ai/handler.js +1 -1
- package/dist/ai/handler.js.map +1 -1
- package/dist/ai/json-to-markdown.js +1 -2
- package/dist/ai/json-to-markdown.js.map +1 -1
- package/dist/api/__test__/mock-client.d.ts +5 -1
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +9 -2
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/admin-branch-health.d.ts +36 -1
- package/dist/api/admin-branch-health.d.ts.map +1 -1
- package/dist/api/admin-branch-health.js +176 -2
- package/dist/api/admin-branch-health.js.map +1 -1
- package/dist/api/admin.d.ts +8 -1
- package/dist/api/admin.d.ts.map +1 -1
- package/dist/api/admin.js.map +1 -1
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/assets.js +36 -4
- package/dist/api/assets.js.map +1 -1
- package/dist/api/branch-status.d.ts.map +1 -1
- package/dist/api/branch-status.js +56 -0
- package/dist/api/branch-status.js.map +1 -1
- package/dist/api/branch-withdraw.d.ts.map +1 -1
- package/dist/api/branch-withdraw.js +14 -3
- package/dist/api/branch-withdraw.js.map +1 -1
- package/dist/api/branch.d.ts +31 -2
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +268 -15
- package/dist/api/branch.js.map +1 -1
- package/dist/api/client.d.ts +5 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +6 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/comments.d.ts +2 -2
- package/dist/api/content.d.ts +11 -5
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +91 -10
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.d.ts +10 -0
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +51 -24
- package/dist/api/entries.js.map +1 -1
- package/dist/api/guards.d.ts.map +1 -1
- package/dist/api/guards.js +12 -5
- package/dist/api/guards.js.map +1 -1
- package/dist/api/permissions.d.ts +2 -2
- package/dist/api/permissions.d.ts.map +1 -1
- package/dist/api/permissions.js +51 -3
- package/dist/api/permissions.js.map +1 -1
- package/dist/api/reference-options.d.ts.map +1 -1
- package/dist/api/reference-options.js +10 -17
- package/dist/api/reference-options.js.map +1 -1
- package/dist/api/resolve-references.d.ts.map +1 -1
- package/dist/api/resolve-references.js +3 -1
- package/dist/api/resolve-references.js.map +1 -1
- package/dist/api/schema.d.ts +4 -4
- package/dist/api/schema.d.ts.map +1 -1
- package/dist/api/schema.js +16 -15
- package/dist/api/schema.js.map +1 -1
- package/dist/api/settings-helpers.d.ts.map +1 -1
- package/dist/api/settings-helpers.js +6 -5
- package/dist/api/settings-helpers.js.map +1 -1
- package/dist/assets/pipeline.d.ts +11 -2
- package/dist/assets/pipeline.d.ts.map +1 -1
- package/dist/assets/pipeline.js +114 -2
- package/dist/assets/pipeline.js.map +1 -1
- package/dist/assets/transform-directives.d.ts +18 -0
- package/dist/assets/transform-directives.d.ts.map +1 -1
- package/dist/assets/transform-directives.js +18 -0
- package/dist/assets/transform-directives.js.map +1 -1
- package/dist/assets/transform.d.ts.map +1 -1
- package/dist/assets/transform.js +20 -16
- package/dist/assets/transform.js.map +1 -1
- package/dist/auth/types.d.ts +29 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +1 -1
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/protected-branch.d.ts +75 -0
- package/dist/authorization/protected-branch.d.ts.map +1 -1
- package/dist/authorization/protected-branch.js +39 -0
- package/dist/authorization/protected-branch.js.map +1 -1
- package/dist/branch-health.d.ts +13 -0
- package/dist/branch-health.d.ts.map +1 -1
- package/dist/branch-health.js +23 -0
- package/dist/branch-health.js.map +1 -1
- package/dist/branch-registry.d.ts.map +1 -1
- package/dist/branch-registry.js +5 -1
- package/dist/branch-registry.js.map +1 -1
- package/dist/branch-schema-cache.d.ts.map +1 -1
- package/dist/branch-schema-cache.js +9 -0
- package/dist/branch-schema-cache.js.map +1 -1
- package/dist/build/generate-ai-content.js +1 -1
- package/dist/build/generate-ai-content.js.map +1 -1
- package/dist/cli/cli.js +2215 -1280
- package/dist/cli/generate-ai-content.js +1158 -585
- package/dist/cli/init.d.ts +8 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +459 -152
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/project-detect.d.ts +89 -0
- package/dist/cli/project-detect.d.ts.map +1 -0
- package/dist/cli/project-detect.js +240 -0
- package/dist/cli/project-detect.js.map +1 -0
- package/dist/cli/template-files/Dockerfile.cms.template +30 -7
- package/dist/cli/template-files/canopycms.config.ts.template +7 -0
- package/dist/cli/template-files/cdk-app.ts.template +82 -0
- package/dist/cli/template-files/cdk.json.template +9 -0
- package/dist/cli/template-files/cms-stack.ts.template +130 -0
- package/dist/cli/template-files/deploy-cms.yml.template +125 -13
- package/dist/cli/template-files/dockerignore.template +2 -1
- package/dist/cli/templates.d.ts +26 -2
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +36 -4
- package/dist/cli/templates.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config/schemas/config.d.ts +2 -3
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +21 -1
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/config/schemas/field.d.ts +15 -15
- package/dist/config/types.d.ts +2 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validation.d.ts +18 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +36 -12
- package/dist/config/validation.js.map +1 -1
- package/dist/content-id-index.d.ts +97 -5
- package/dist/content-id-index.d.ts.map +1 -1
- package/dist/content-id-index.js +170 -18
- package/dist/content-id-index.js.map +1 -1
- package/dist/content-reader.js +1 -1
- package/dist/content-reader.js.map +1 -1
- package/dist/content-store.d.ts +92 -7
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +445 -259
- package/dist/content-store.js.map +1 -1
- package/dist/dev-content-watcher.d.ts.map +1 -1
- package/dist/dev-content-watcher.js +4 -1
- package/dist/dev-content-watcher.js.map +1 -1
- package/dist/editor/BranchManager.d.ts +15 -0
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +61 -15
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/editor/CanopyEditor.d.ts.map +1 -1
- package/dist/editor/CanopyEditor.js +3 -3
- package/dist/editor/CanopyEditor.js.map +1 -1
- package/dist/editor/CanopyEditorPage.d.ts +9 -1
- package/dist/editor/CanopyEditorPage.d.ts.map +1 -1
- package/dist/editor/CanopyEditorPage.js +9 -2
- package/dist/editor/CanopyEditorPage.js.map +1 -1
- package/dist/editor/Editor.d.ts +9 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +156 -60
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +12 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.d.ts.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.js +14 -9
- package/dist/editor/admin/SystemHealthPanel.js.map +1 -1
- package/dist/editor/components/EditorHeader.d.ts +6 -0
- package/dist/editor/components/EditorHeader.d.ts.map +1 -1
- package/dist/editor/components/EditorHeader.js +76 -23
- package/dist/editor/components/EditorHeader.js.map +1 -1
- package/dist/editor/components/EntryCreateModal.d.ts +9 -1
- package/dist/editor/components/EntryCreateModal.d.ts.map +1 -1
- package/dist/editor/components/EntryCreateModal.js +25 -7
- package/dist/editor/components/EntryCreateModal.js.map +1 -1
- package/dist/editor/context/SWRProvider.d.ts +31 -0
- package/dist/editor/context/SWRProvider.d.ts.map +1 -0
- package/dist/editor/context/SWRProvider.js +12 -0
- package/dist/editor/context/SWRProvider.js.map +1 -0
- package/dist/editor/context/index.d.ts +3 -0
- package/dist/editor/context/index.d.ts.map +1 -1
- package/dist/editor/context/index.js +3 -0
- package/dist/editor/context/index.js.map +1 -1
- package/dist/editor/editor-utils.d.ts.map +1 -1
- package/dist/editor/editor-utils.js +8 -2
- package/dist/editor/editor-utils.js.map +1 -1
- package/dist/editor/fields/DateTimeField.d.ts +46 -0
- package/dist/editor/fields/DateTimeField.d.ts.map +1 -0
- package/dist/editor/fields/DateTimeField.js +66 -0
- package/dist/editor/fields/DateTimeField.js.map +1 -0
- package/dist/editor/fields/ImageField.d.ts.map +1 -1
- package/dist/editor/fields/ImageField.js +27 -3
- package/dist/editor/fields/ImageField.js.map +1 -1
- package/dist/editor/fields/NumberField.d.ts +34 -0
- package/dist/editor/fields/NumberField.d.ts.map +1 -0
- package/dist/editor/fields/NumberField.js +53 -0
- package/dist/editor/fields/NumberField.js.map +1 -0
- package/dist/editor/fields/NumberListField.d.ts +25 -0
- package/dist/editor/fields/NumberListField.d.ts.map +1 -0
- package/dist/editor/fields/NumberListField.js +53 -0
- package/dist/editor/fields/NumberListField.js.map +1 -0
- package/dist/editor/fields/ReferenceField.d.ts.map +1 -1
- package/dist/editor/fields/ReferenceField.js +52 -31
- package/dist/editor/fields/ReferenceField.js.map +1 -1
- package/dist/editor/hooks/__test__/test-utils.d.ts +38 -3
- package/dist/editor/hooks/__test__/test-utils.d.ts.map +1 -1
- package/dist/editor/hooks/__test__/test-utils.js +50 -4
- package/dist/editor/hooks/__test__/test-utils.js.map +1 -1
- package/dist/editor/hooks/index.d.ts +4 -1
- package/dist/editor/hooks/index.d.ts.map +1 -1
- package/dist/editor/hooks/index.js +4 -1
- package/dist/editor/hooks/index.js.map +1 -1
- package/dist/editor/hooks/useBranchManager.d.ts +21 -1
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +183 -58
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/editor/hooks/useBranchesData.d.ts +57 -0
- package/dist/editor/hooks/useBranchesData.d.ts.map +1 -0
- package/dist/editor/hooks/useBranchesData.js +69 -0
- package/dist/editor/hooks/useBranchesData.js.map +1 -0
- package/dist/editor/hooks/useCommentSystem.d.ts.map +1 -1
- package/dist/editor/hooks/useCommentSystem.js +24 -22
- package/dist/editor/hooks/useCommentSystem.js.map +1 -1
- package/dist/editor/hooks/useCommentsData.d.ts +29 -0
- package/dist/editor/hooks/useCommentsData.d.ts.map +1 -0
- package/dist/editor/hooks/useCommentsData.js +40 -0
- package/dist/editor/hooks/useCommentsData.js.map +1 -0
- package/dist/editor/hooks/useDraftManager.d.ts +8 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +290 -36
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useEntriesData.d.ts +35 -0
- package/dist/editor/hooks/useEntriesData.d.ts.map +1 -0
- package/dist/editor/hooks/useEntriesData.js +96 -0
- package/dist/editor/hooks/useEntriesData.js.map +1 -0
- package/dist/editor/hooks/useEntryManager.d.ts +29 -15
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
- package/dist/editor/hooks/useEntryManager.js +284 -119
- package/dist/editor/hooks/useEntryManager.js.map +1 -1
- package/dist/editor/hooks/usePermissionManager.d.ts +2 -2
- package/dist/editor/hooks/usePermissionManager.d.ts.map +1 -1
- package/dist/editor/hooks/usePermissionManager.js +11 -9
- package/dist/editor/hooks/usePermissionManager.js.map +1 -1
- package/dist/editor/hooks/useReferenceResolution.d.ts.map +1 -1
- package/dist/editor/hooks/useReferenceResolution.js +24 -1
- package/dist/editor/hooks/useReferenceResolution.js.map +1 -1
- package/dist/editor/media/MediaLibraryBody.d.ts.map +1 -1
- package/dist/editor/media/MediaLibraryBody.js +12 -2
- package/dist/editor/media/MediaLibraryBody.js.map +1 -1
- package/dist/editor/permission-manager/GroupSelector.d.ts.map +1 -1
- package/dist/editor/permission-manager/GroupSelector.js +7 -2
- package/dist/editor/permission-manager/GroupSelector.js.map +1 -1
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +3 -3
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts.map +1 -1
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +1 -0
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js.map +1 -1
- package/dist/editor/permission-manager/types.d.ts +6 -4
- package/dist/editor/permission-manager/types.d.ts.map +1 -1
- package/dist/editor/test-setup.js +8 -0
- package/dist/editor/test-setup.js.map +1 -1
- package/dist/editor/theme.d.ts +8 -8
- package/dist/git-manager.d.ts +175 -14
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +354 -39
- package/dist/git-manager.js.map +1 -1
- package/dist/github-service.d.ts.map +1 -1
- package/dist/github-service.js +13 -7
- package/dist/github-service.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +78 -29
- package/dist/http/handler.js.map +1 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +40 -3
- package/dist/http/router.js.map +1 -1
- package/dist/operating-mode/client-unsafe-strategy.d.ts.map +1 -1
- package/dist/operating-mode/client-unsafe-strategy.js +7 -8
- package/dist/operating-mode/client-unsafe-strategy.js.map +1 -1
- package/dist/operating-mode/deployment-name-fixtures.d.ts +29 -0
- package/dist/operating-mode/deployment-name-fixtures.d.ts.map +1 -0
- package/dist/operating-mode/deployment-name-fixtures.js +55 -0
- package/dist/operating-mode/deployment-name-fixtures.js.map +1 -0
- package/dist/operating-mode/deployment-name.d.ts +37 -0
- package/dist/operating-mode/deployment-name.d.ts.map +1 -0
- package/dist/operating-mode/deployment-name.js +86 -0
- package/dist/operating-mode/deployment-name.js.map +1 -0
- package/dist/operating-mode/index.d.ts +6 -1
- package/dist/operating-mode/index.d.ts.map +1 -1
- package/dist/operating-mode/index.js +10 -1
- package/dist/operating-mode/index.js.map +1 -1
- package/dist/operating-mode/mode-env.d.ts +58 -0
- package/dist/operating-mode/mode-env.d.ts.map +1 -0
- package/dist/operating-mode/mode-env.js +97 -0
- package/dist/operating-mode/mode-env.js.map +1 -0
- package/dist/operating-mode/types.d.ts +13 -3
- package/dist/operating-mode/types.d.ts.map +1 -1
- package/dist/paths/branch-name.d.ts +38 -0
- package/dist/paths/branch-name.d.ts.map +1 -1
- package/dist/paths/branch-name.js +46 -0
- package/dist/paths/branch-name.js.map +1 -1
- package/dist/paths/index.d.ts +1 -1
- package/dist/paths/index.d.ts.map +1 -1
- package/dist/paths/index.js +1 -1
- package/dist/paths/index.js.map +1 -1
- package/dist/reference-resolver.d.ts +6 -2
- package/dist/reference-resolver.d.ts.map +1 -1
- package/dist/reference-resolver.js +8 -1
- package/dist/reference-resolver.js.map +1 -1
- package/dist/resolve-canopy-user.d.ts +34 -0
- package/dist/resolve-canopy-user.d.ts.map +1 -0
- package/dist/resolve-canopy-user.js +55 -0
- package/dist/resolve-canopy-user.js.map +1 -0
- package/dist/schema/meta-loader.d.ts.map +1 -1
- package/dist/schema/meta-loader.js +10 -2
- package/dist/schema/meta-loader.js.map +1 -1
- package/dist/schema/schema-store.d.ts +64 -4
- package/dist/schema/schema-store.d.ts.map +1 -1
- package/dist/schema/schema-store.js +113 -30
- package/dist/schema/schema-store.js.map +1 -1
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -0
- package/dist/server.js.map +1 -1
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +40 -6
- package/dist/services.js.map +1 -1
- package/dist/settings-workspace.d.ts +27 -2
- package/dist/settings-workspace.d.ts.map +1 -1
- package/dist/settings-workspace.js +142 -58
- package/dist/settings-workspace.js.map +1 -1
- package/dist/types.d.ts +73 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/content-write-lock.d.ts +127 -0
- package/dist/utils/content-write-lock.d.ts.map +1 -0
- package/dist/utils/content-write-lock.js +170 -0
- package/dist/utils/content-write-lock.js.map +1 -0
- package/dist/utils/debug.d.ts +11 -0
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +12 -1
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/error.d.ts +1 -1
- package/dist/utils/error.js +1 -1
- package/dist/utils/git.d.ts +54 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +91 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/logger.d.ts +71 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +85 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sanitize-href.d.ts +28 -3
- package/dist/utils/sanitize-href.d.ts.map +1 -1
- package/dist/utils/sanitize-href.js +64 -6
- package/dist/utils/sanitize-href.js.map +1 -1
- package/dist/validation/entry-link-validator.d.ts +1 -1
- package/dist/validation/entry-link-validator.js +3 -3
- package/dist/validation/entry-link-validator.js.map +1 -1
- package/dist/validation/entry-type-reference-validator.d.ts +33 -0
- package/dist/validation/entry-type-reference-validator.d.ts.map +1 -0
- package/dist/validation/entry-type-reference-validator.js +110 -0
- package/dist/validation/entry-type-reference-validator.js.map +1 -0
- package/dist/validation/entry-validator.js +1 -1
- package/dist/validation/entry-validator.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +245 -3
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +1084 -253
- package/dist/worker/cms-worker.js.map +1 -1
- package/dist/worker/log.d.ts +61 -0
- package/dist/worker/log.d.ts.map +1 -0
- package/dist/worker/log.js +74 -0
- package/dist/worker/log.js.map +1 -0
- package/package.json +4 -2
package/dist/git-manager.d.ts
CHANGED
|
@@ -1,7 +1,45 @@
|
|
|
1
1
|
import { type SimpleGitOptions, type StatusResult } from 'simple-git';
|
|
2
2
|
import type { OperatingMode } from './operating-mode';
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Exported for GitManager's own use (see `this.git.env(...)` above),
|
|
5
|
+
* worker/cms-worker.ts's push-rejection-classified GitHub calls
|
|
6
|
+
* (`pushBranchToGitHub`, `syncGit`'s fetch/`pushSettingsBranches` instance),
|
|
7
|
+
* and tests.
|
|
8
|
+
*/
|
|
4
9
|
export declare function gitChildEnv(overrides: Record<string, string>): Record<string, string>;
|
|
10
|
+
export declare function gitNetworkChildEnv(): Record<string, string>;
|
|
11
|
+
/**
|
|
12
|
+
* Remote-tracking namespace that `syncGit()`'s GitHub fetch lands refs in
|
|
13
|
+
* (`+refs/heads/*:${GITHUB_TRACKING_REF_PREFIX}*`), instead of writing
|
|
14
|
+
* directly into `refs/heads/*`.
|
|
15
|
+
*
|
|
16
|
+
* `remote.git`'s `refs/heads/*` is NOT a throwaway mirror: it's the
|
|
17
|
+
* deployment's local origin. `GitManager.push()` writes editor work into it
|
|
18
|
+
* (`target:target`), branch-workspace clones are cloned FROM it, and the CMS
|
|
19
|
+
* worker itself pushes it on to GitHub (`pushBranchToGitHub`,
|
|
20
|
+
* `pushSettingsBranches` in worker/cms-worker.ts). A fetch that force-writes
|
|
21
|
+
* GitHub's refs straight into `refs/heads/*` (the old
|
|
22
|
+
* `+refs/heads/*:refs/heads/*` refspec) can therefore destroy work that
|
|
23
|
+
* reached `remote.git` but not GitHub yet: with `--prune`, a branch pushed
|
|
24
|
+
* into `remote.git` and not yet on GitHub gets deleted outright; without
|
|
25
|
+
* needing `--prune`, a branch where `remote.git` is ahead of GitHub gets
|
|
26
|
+
* force-rewound to GitHub's older tip, and the worker's next push then
|
|
27
|
+
* no-ops ("Everything up-to-date") -- the editor's commit silently never
|
|
28
|
+
* reaches GitHub even though the branch reports `synced`.
|
|
29
|
+
*
|
|
30
|
+
* Fetching into this remote-tracking namespace instead makes `--prune`/`+`
|
|
31
|
+
* safe again -- they now only ever affect GitHub's-view-of-the-world refs,
|
|
32
|
+
* never the local heads other code depends on. `reconcileTrackedBranches()`
|
|
33
|
+
* (worker/cms-worker.ts) is what subsequently, and non-destructively, brings
|
|
34
|
+
* `refs/heads/*` toward what's tracked here.
|
|
35
|
+
*
|
|
36
|
+
* Lives here (not worker/cms-worker.ts, where this constant originated) so
|
|
37
|
+
* `GitManager.bareRemoteHasBranch` -- which must recognize this namespace
|
|
38
|
+
* too, since it's what a branch pushed by another CanopyCMS deployment (or
|
|
39
|
+
* pushed directly to GitHub) shows up in before/without ever gaining a local
|
|
40
|
+
* head -- doesn't need a worker/ -> git-manager.ts back-reference.
|
|
41
|
+
*/
|
|
42
|
+
export declare const GITHUB_TRACKING_REF_PREFIX = "refs/remotes/github/";
|
|
5
43
|
/**
|
|
6
44
|
* Add a pattern to a repo's .git/info/exclude (a per-repository gitignore that
|
|
7
45
|
* never gets committed) so runtime metadata like .canopy-meta/ can't be staged
|
|
@@ -26,6 +64,31 @@ export declare class GitConflictError extends Error {
|
|
|
26
64
|
readonly conflictedFiles: string[];
|
|
27
65
|
constructor(conflictedFiles: string[]);
|
|
28
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* The branch has no ref on the remote yet, so there is nothing to pull.
|
|
69
|
+
*
|
|
70
|
+
* Distinguishing this from a real pull failure matters: it is the ONLY benign
|
|
71
|
+
* outcome of `pullCurrentBranch`, and callers that want to shrug it off (a
|
|
72
|
+
* settings branch's first-ever commit, see services.ts `commitToSettingsBranch`)
|
|
73
|
+
* must not shrug off merge failures with it. Everything else — a merge that
|
|
74
|
+
* cannot proceed, a corrupt workspace, an unreachable remote — is a genuine
|
|
75
|
+
* error the caller has to surface.
|
|
76
|
+
*/
|
|
77
|
+
export declare class GitRemoteRefMissingError extends Error {
|
|
78
|
+
readonly branch: string;
|
|
79
|
+
readonly remote: string;
|
|
80
|
+
/**
|
|
81
|
+
* The underlying git failure. A separate field rather than `Error.cause`:
|
|
82
|
+
* the build targets ES2021, whose `Error` constructor takes no options bag.
|
|
83
|
+
*/
|
|
84
|
+
readonly gitError?: unknown | undefined;
|
|
85
|
+
constructor(branch: string, remote: string,
|
|
86
|
+
/**
|
|
87
|
+
* The underlying git failure. A separate field rather than `Error.cause`:
|
|
88
|
+
* the build targets ES2021, whose `Error` constructor takes no options bag.
|
|
89
|
+
*/
|
|
90
|
+
gitError?: unknown | undefined);
|
|
91
|
+
}
|
|
29
92
|
export interface ResolveRemoteUrlOptions {
|
|
30
93
|
mode: OperatingMode;
|
|
31
94
|
remoteUrl?: string;
|
|
@@ -98,19 +161,83 @@ export declare class GitManager {
|
|
|
98
161
|
subdirectory?: string;
|
|
99
162
|
}): Promise<void>;
|
|
100
163
|
/**
|
|
101
|
-
* Whether a bare repository already has a
|
|
164
|
+
* Whether a bare repository already has a branch of the given name, in
|
|
165
|
+
* EITHER the local-heads namespace (`refs/heads/<branch>`) or the GitHub
|
|
166
|
+
* tracking namespace (`GITHUB_TRACKING_REF_PREFIX<branch>`).
|
|
167
|
+
*
|
|
168
|
+
* Originally checked `refs/heads/*` only, for dev-mode's
|
|
169
|
+
* `ensureLocalSimulatedRemote` (a simulated remote never gets a tracking
|
|
170
|
+
* namespace, so that caller only ever needed the local-heads check).
|
|
171
|
+
* Generalized/promoted to public for api/branch.ts's create-time collision
|
|
172
|
+
* guard, which also needs the tracking namespace: `syncGit()` fetches
|
|
173
|
+
* GitHub into `GITHUB_TRACKING_REF_PREFIX*` rather than `refs/heads/*`
|
|
174
|
+
* directly (see that constant's doc comment above), and
|
|
175
|
+
* `reconcileTrackedBranches()` (worker/cms-worker.ts) only
|
|
176
|
+
* non-destructively brings `refs/heads/*` toward what's tracked there — so
|
|
177
|
+
* a branch that another CanopyCMS deployment sharing this repo (or a
|
|
178
|
+
* direct push to GitHub) just created can sit in the tracking namespace
|
|
179
|
+
* for a while before, or without ever, gaining a local head here. Checking
|
|
180
|
+
* `refs/heads/*` alone would miss exactly the two-deployments-one-repo
|
|
181
|
+
* collision that guard exists to catch.
|
|
102
182
|
*
|
|
103
183
|
* Runs git with an explicit `--git-dir` instead of a cwd inside the repo:
|
|
104
184
|
* environments with `safe.bareRepository=explicit` (sandboxed/CI git setups)
|
|
105
185
|
* refuse cwd-based discovery of bare repos but expressly allow `--git-dir`.
|
|
106
|
-
*
|
|
107
|
-
* exception-based control flow —
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
186
|
+
* A single `for-each-ref` call checks both candidate refs at once (no
|
|
187
|
+
* exception-based control flow — `for-each-ref` exits 0 whether or not
|
|
188
|
+
* either ref exists, same reason the old implementation used `branch
|
|
189
|
+
* --list` instead of `rev-parse --verify --quiet`: simple-git only fails a
|
|
190
|
+
* task on stderr output, and `--quiet` suppresses exactly that).
|
|
191
|
+
* `--end-of-options` guards the ref-name positionals the same way
|
|
192
|
+
* `push` below does, since `branch` here can be a sanitized but otherwise
|
|
193
|
+
* caller-influenced string.
|
|
194
|
+
*
|
|
195
|
+
* A failure here therefore means the remote itself is unreadable and is
|
|
196
|
+
* surfaced, NOT treated as "branch absent" — that would route
|
|
197
|
+
* `ensureLocalSimulatedRemote` to the push path against a repo it couldn't
|
|
198
|
+
* even read, and would silently skip api/branch.ts's collision check
|
|
199
|
+
* instead of letting that caller distinguish "unreadable" from "absent"
|
|
200
|
+
* and decide what to do.
|
|
112
201
|
*/
|
|
113
|
-
|
|
202
|
+
static bareRemoteHasBranch(remotePath: string, branch: string, options?: {
|
|
203
|
+
namespaces?: 'both' | 'tracking';
|
|
204
|
+
}): Promise<boolean>;
|
|
205
|
+
/**
|
|
206
|
+
* Delete `refs/heads/<branch>` from a bare local mirror, if present. A
|
|
207
|
+
* no-op (not an error) when the ref doesn't exist.
|
|
208
|
+
*
|
|
209
|
+
* This is the "explicit path" for removing a deleted branch's local head
|
|
210
|
+
* that the sync loop deliberately is not (see GITHUB_TRACKING_REF_PREFIX's
|
|
211
|
+
* doc comment: reconcileTrackedBranches never deletes a head). Called by
|
|
212
|
+
* api/branch.ts's deleteBranchHandler: without it, a deleted branch's head
|
|
213
|
+
* lives in `remote.git` forever, and the ordinary create -> publish ->
|
|
214
|
+
* squash-merge -> delete -> reuse-the-name cycle then has the REUSED
|
|
215
|
+
* branch's first publish rejected non-fast-forward against the stale head
|
|
216
|
+
* (`GitManager.push()` pushes `branch:branch`, and a squash-merged old tip
|
|
217
|
+
* is not an ancestor of the new branch) -- a permanent, misleading 409.
|
|
218
|
+
* Worse, a retried submit skips the local push (clean tree) and enqueues
|
|
219
|
+
* the worker push of the STALE head, resurrecting the deleted branch's
|
|
220
|
+
* content on GitHub as an apparent success.
|
|
221
|
+
*
|
|
222
|
+
* Deliberately leaves the tracking ref (`GITHUB_TRACKING_REF_PREFIX<branch>`)
|
|
223
|
+
* alone: that namespace mirrors GitHub's view, and if the branch still
|
|
224
|
+
* exists on GitHub, the create-time collision check SHOULD keep reporting
|
|
225
|
+
* it until the remote side is actually gone.
|
|
226
|
+
*
|
|
227
|
+
* Same `--git-dir` invocation style as bareRemoteHasBranch above (works
|
|
228
|
+
* under `safe.bareRepository=explicit`). The existence pre-check makes
|
|
229
|
+
* "absent" deterministic instead of parsing update-ref's locale-dependent
|
|
230
|
+
* failure text, and its captured SHA is passed to `update-ref -d` as the
|
|
231
|
+
* expected old value -- same pattern as reconcileTrackedBranches'
|
|
232
|
+
* guarded updates (worker/cms-worker.ts): a concurrent Lambda push
|
|
233
|
+
* re-creating/moving this branch between the read and the delete makes
|
|
234
|
+
* update-ref throw (surfaced as the caller's best-effort warning) instead
|
|
235
|
+
* of silently deleting a commit that was just pushed. No
|
|
236
|
+
* `--end-of-options` on update-ref (older gits don't accept it there);
|
|
237
|
+
* the ref argument always begins with the literal `refs/heads/` prefix,
|
|
238
|
+
* so it can never parse as an option.
|
|
239
|
+
*/
|
|
240
|
+
static deleteBareRemoteHead(remotePath: string, branch: string): Promise<void>;
|
|
114
241
|
/**
|
|
115
242
|
* Push baseBranch from the source repo into the local bare remote via a
|
|
116
243
|
* temporary remote. With `subdirectory`, pushes a single snapshot commit of
|
|
@@ -173,6 +300,21 @@ export declare class GitManager {
|
|
|
173
300
|
* @returns Remote URL or undefined if no remote is needed
|
|
174
301
|
*/
|
|
175
302
|
static resolveRemoteUrl(options: ResolveRemoteUrlOptions): Promise<string | undefined>;
|
|
303
|
+
/**
|
|
304
|
+
* Check whether a git repository is already initialized at `workspacePath`.
|
|
305
|
+
*
|
|
306
|
+
* Uses `rev-parse --git-dir` with `GIT_CEILING_DIRECTORIES` pinned to the
|
|
307
|
+
* parent directory so a corrupt/missing `.git` can't make git silently
|
|
308
|
+
* traverse upward and report a false positive from an ancestor repo (the
|
|
309
|
+
* same protection `initializeWorkspace` relies on below).
|
|
310
|
+
*
|
|
311
|
+
* Shared by `initializeWorkspace` (clone-vs-reuse decision) and
|
|
312
|
+
* `SettingsWorkspaceManager`'s rename guard (settings-workspace.ts), which
|
|
313
|
+
* must know whether a settings workspace ALREADY exists before touching it —
|
|
314
|
+
* touching an existing orphan settings branch under a different name wipes
|
|
315
|
+
* permissions.json/groups.json (see that guard's doc comment).
|
|
316
|
+
*/
|
|
317
|
+
static repoExistsAt(workspacePath: string): Promise<boolean>;
|
|
176
318
|
/**
|
|
177
319
|
* Ensures a git workspace is initialized and ready for use.
|
|
178
320
|
* Handles cloning, remote configuration, and branch checkout/creation.
|
|
@@ -215,6 +357,30 @@ export declare class GitManager {
|
|
|
215
357
|
add(files: string | string[]): Promise<void>;
|
|
216
358
|
commit(message: string): Promise<void>;
|
|
217
359
|
push(branch?: string): Promise<void>;
|
|
360
|
+
/**
|
|
361
|
+
* Check whether the local branch has commits the remote mirror doesn't
|
|
362
|
+
* have -- i.e. whether push() would actually move the remote ref forward.
|
|
363
|
+
*
|
|
364
|
+
* Exists so callers (submitBranch) can gate pushing on "is there anything
|
|
365
|
+
* new to send" rather than on "is the working tree dirty": committing
|
|
366
|
+
* cleans the tree, so a dirty-tree gate around commit+push skips the push
|
|
367
|
+
* entirely on a retry after a failed push, even though the just-created
|
|
368
|
+
* commit never reached the remote (see services.ts submitBranch).
|
|
369
|
+
*
|
|
370
|
+
* Workspaces are cloned `--single-branch`, so the remote-tracking ref for
|
|
371
|
+
* any branch other than the one cloned never exists locally -- same
|
|
372
|
+
* constraint pullBaseInner works around. This fetches the specific branch
|
|
373
|
+
* directly (bypassing the configured single-branch refspec, exactly like
|
|
374
|
+
* pullBaseInner) and pins the result to FETCH_HEAD's SHA immediately after
|
|
375
|
+
* the fetch that populated it, rather than trusting `<remote>/<branch>`:
|
|
376
|
+
* FETCH_HEAD is a shared mutable file that any other fetch in this clone
|
|
377
|
+
* can repoint before it's read.
|
|
378
|
+
*
|
|
379
|
+
* A branch that has never been pushed has no ref on the remote at all --
|
|
380
|
+
* `git fetch` then fails ("couldn't find remote ref"), which this treats
|
|
381
|
+
* as "ahead" (needs pushing) rather than an error.
|
|
382
|
+
*/
|
|
383
|
+
hasUnpushedCommits(branch?: string): Promise<boolean>;
|
|
218
384
|
ensureAuthor(author: {
|
|
219
385
|
name: string;
|
|
220
386
|
email: string;
|
|
@@ -228,11 +394,6 @@ export declare class GitManager {
|
|
|
228
394
|
* Get list of uncommitted file paths
|
|
229
395
|
*/
|
|
230
396
|
getUncommittedFiles(): Promise<string[]>;
|
|
231
|
-
/**
|
|
232
|
-
* Force push (use with caution - for PR updates only)
|
|
233
|
-
* Uses --force-with-lease for safer force pushes
|
|
234
|
-
*/
|
|
235
|
-
forcePush(branch?: string): Promise<void>;
|
|
236
397
|
/**
|
|
237
398
|
* Get remote URL for current repo
|
|
238
399
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-manager.d.ts","sourceRoot":"","sources":["../src/git-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAA;AAInB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"git-manager.d.ts","sourceRoot":"","sources":["../src/git-manager.ts"],"names":[],"mappings":"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"}
|