@slicemachine/manager 0.26.7-alpha.aa-prismicnextrichtext.2 → 0.26.7-alpha.jp-import-slice-base.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/managers/telemetry/types.ts"],"sourcesContent":["import {\n\tFieldType,\n\tLinkConfig,\n} from \"@prismicio/types-internal/lib/customtypes/widgets\";\n\nimport { CustomTypeFormat } from \"../customTypes/types\";\nimport type { PushChangesLimitType } from \"../prismicRepository/types\";\n\nexport type { Variant } from \"@amplitude/experiment-node-server\";\n\nexport const SegmentEventType = {\n\tcommand_init_start: \"command:init:start\",\n\tcommand_init_identify: \"command:init:identify\",\n\tcommand_init_end: \"command:init:end\",\n\tsliceSimulator_open: \"slice-simulator:open\",\n\tsliceSimulator_isNotRunning: \"slice-simulator:is-not-running\",\n\tpageView: \"page-view\",\n\topenVideoTutorials: \"open-video-tutorials\",\n\tfield_added: \"field:added\",\n\tfield_updated: \"field:updated\",\n\tfield_settingsOpened: \"field:settings-opened\",\n\tcustomType_created: \"custom-type:created\",\n\tcustomType_sliceZoneUpdated: \"custom-type:slice-zone-updated\",\n\tcustomType_openAddFromTemplates: \"custom-type:open-add-from-templates\",\n\tcustomType_saved: \"custom-type:saved\",\n\tslice_created: \"slice:created\",\n\tlegacySlice_converted: \"legacy-slice:converted\",\n\tscreenshotTaken: \"screenshot-taken\",\n\tchanges_pushed: \"changes:pushed\",\n\tchanges_groupPushed: \"changes:group-pushed\",\n\tchanges_limitReach: \"changes:limit-reach\",\n\teditor_widgetUsed: \"editor:widget-used\",\n\topen_page_snippet: \"page-type:open-snippet\",\n\tcopy_page_snippet: \"page-type:copy-snippet\",\n\tswitch_environment: \"environment:switch\",\n\tdevCollab_joinBetaClicked: \"dev-collab:join-beta-clicked\",\n\tdevCollab_setUpWorkflowOpened: \"dev-collab:set-up-workflow-opened\",\n\tdevCollab_workflowStubDisplayed: \"dev-collab:workflow-stub-displayed\",\n\tsliceMachine_start: \"slice-machine:start\",\n\tpostPush_emptyStateCtaClicked: \"post-push:empty-state-cta-clicked\",\n\tpostPush_toastCtaClicked: \"post-push:toast-cta-clicked\",\n\texperiment_exposure: \"experiment:exposure\",\n\tsharedOnboarding_step_opened: \"shared-onboarding:step-opened\",\n\tsharedOnboarding_step_completed: \"shared-onboarding:step-completed\",\n\tsharedOnboarding_completed: \"shared-onboarding:completed\",\n\tsharedOnboarding_tutorial: \"shared-onboarding:follow-tutorial\",\n\tsliceGenerationFeedback: \"slice-generation-feedback\",\n\tsliceGeneration_pastedFromFigma: \"slice-generation:pasted-from-figma\",\n\tsliceGeneration_started: \"slice-generation:started\",\n\tsliceGeneration_ended: \"slice-generation:ended\",\n\tsliceGeneration_pluginInstallationClicked:\n\t\t\"slice-generation:plugin-installation-clicked\",\n\tnavigation_documentationLinkClicked: \"navigation:documentation-link-clicked\",\n\tsidebar_link_clicked: \"sidebar:link-clicked\",\n\tmcp_promo_link_clicked: \"mcp:promo-link-clicked\",\n\tinfo_banner_dismissed: \"info-banner:dismissed\",\n\tinfo_banner_button_clicked: \"info-banner:button-clicked\",\n} as const;\ntype SegmentEventTypes =\n\t(typeof SegmentEventType)[keyof typeof SegmentEventType];\n\nexport const HumanSegmentEventType = {\n\t[SegmentEventType.command_init_start]: \"SliceMachine Init Start\",\n\t[SegmentEventType.command_init_identify]: \"SliceMachine Init Identify\",\n\t[SegmentEventType.command_init_end]: \"SliceMachine Init End\",\n\t[SegmentEventType.sliceSimulator_open]: \"SliceMachine Slice Simulator Open\",\n\t[SegmentEventType.sliceSimulator_isNotRunning]:\n\t\t\"SliceMachine Slice Simulator is not running\",\n\t[SegmentEventType.pageView]: \"SliceMachine Page View\",\n\t[SegmentEventType.openVideoTutorials]: \"SliceMachine Open Video Tutorials\",\n\t[SegmentEventType.field_added]: \"SliceMachine Field Added\",\n\t[SegmentEventType.field_updated]: \"SliceMachine Field Updated\",\n\t[SegmentEventType.field_settingsOpened]: \"SliceMachine Field Settings Opened\",\n\t[SegmentEventType.customType_created]: \"SliceMachine Custom Type Created\",\n\t[SegmentEventType.customType_sliceZoneUpdated]:\n\t\t\"SliceMachine Slicezone Updated\",\n\t[SegmentEventType.customType_openAddFromTemplates]:\n\t\t\"SliceMachine Open Add from templates\",\n\t[SegmentEventType.customType_saved]: \"SliceMachine Custom Type Saved\",\n\t[SegmentEventType.slice_created]: \"SliceMachine Slice Created\",\n\t[SegmentEventType.legacySlice_converted]:\n\t\t\"SliceMachine Legacy Slice Converted\",\n\t[SegmentEventType.screenshotTaken]: \"SliceMachine Screenshot Taken\",\n\t[SegmentEventType.changes_pushed]: \"SliceMachine Changes Pushed\",\n\t[SegmentEventType.changes_groupPushed]: \"SliceMachine Group Field Pushed\",\n\t[SegmentEventType.changes_limitReach]: \"SliceMachine Changes Limit Reach\",\n\t[SegmentEventType.editor_widgetUsed]: \"SliceMachine Editor Widget Used\",\n\t[SegmentEventType.open_page_snippet]:\n\t\t\"SliceMachine Opens Page Type Snippet Dialog\",\n\t[SegmentEventType.copy_page_snippet]:\n\t\t\"Slice Machine page code snippet copied\",\n\t[SegmentEventType.switch_environment]: \"SliceMachine environment switch\",\n\t[SegmentEventType.devCollab_joinBetaClicked]:\n\t\t\"SliceMachine Dev Collab Join Beta Clicked\",\n\t[SegmentEventType.devCollab_setUpWorkflowOpened]:\n\t\t\"SliceMachine Dev Collab Set Up Workflow Opened\",\n\t[SegmentEventType.devCollab_workflowStubDisplayed]:\n\t\t\"SliceMachine Dev Collab Workflow Stub Displayed\",\n\t[SegmentEventType.sliceMachine_start]: \"SliceMachine Start\",\n\t[SegmentEventType.postPush_emptyStateCtaClicked]:\n\t\t\"SliceMachine Post Push Empty State CTA Clicked\",\n\t[SegmentEventType.postPush_toastCtaClicked]:\n\t\t\"SliceMachine Post Push Toast CTA Clicked\",\n\t[SegmentEventType.experiment_exposure]: \"$exposure\",\n\t[SegmentEventType.sharedOnboarding_step_completed]:\n\t\t\"Prismic Onboarding Guide Step Completed\",\n\t[SegmentEventType.sharedOnboarding_step_opened]:\n\t\t\"Prismic Onboarding Guide Step Open\",\n\t[SegmentEventType.sharedOnboarding_completed]:\n\t\t\"Prismic Onboarding Guide Completed\",\n\t[SegmentEventType.sharedOnboarding_tutorial]:\n\t\t\"Prismic Onboarding Guide Follow Tutorial\",\n\t[SegmentEventType.sliceGenerationFeedback]: \"Slice Generation Feedback\",\n\t[SegmentEventType.sliceGeneration_pastedFromFigma]:\n\t\t\"SliceMachine Shared Slice Generation - Pasted From Figma\",\n\t[SegmentEventType.sliceGeneration_started]:\n\t\t\"SliceMachine Shared Slice Generation - Started\",\n\t[SegmentEventType.sliceGeneration_ended]:\n\t\t\"SliceMachine Shared Slice Generation - Ended\",\n\t[SegmentEventType.sliceGeneration_pluginInstallationClicked]:\n\t\t\"SliceMachine Shared Slice Generation - Plugin Installation Clicked\",\n\t[SegmentEventType.navigation_documentationLinkClicked]:\n\t\t\"SliceMachine Documentation Link Clicked\",\n\t[SegmentEventType.sidebar_link_clicked]: \"Sidebar Link Clicked\",\n\t[SegmentEventType.mcp_promo_link_clicked]: \"MCP Promo Link Clicked\",\n\t[SegmentEventType.info_banner_dismissed]:\n\t\t\"SliceMachine Info Banner Dismissed\",\n\t[SegmentEventType.info_banner_button_clicked]:\n\t\t\"SliceMachine Info Banner Button Clicked\",\n} as const;\n\nexport type HumanSegmentEventTypes =\n\t(typeof HumanSegmentEventType)[keyof typeof HumanSegmentEventType];\n\ntype SegmentEvent<\n\tTType extends SegmentEventTypes,\n\tTProperties extends Record<string, unknown> | void = void,\n> = TProperties extends void\n\t? {\n\t\t\tevent: TType;\n\t\t\trepository?: string;\n\t }\n\t: {\n\t\t\tevent: TType;\n\t\t\trepository?: string;\n\t } & TProperties;\n\ntype CommandInitStartSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.command_init_start\n>;\n\n// This event feels off, we have a dedicated `identify` method...\ntype CommandInitIdentifySegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.command_init_identify\n>;\n\ntype CommandInitEndSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.command_init_end,\n\t{ framework: string; success: boolean; error?: string }\n>;\n\ntype SliceSimulatorOpenSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.sliceSimulator_open\n>;\n\ntype SliceSimulatorIsNotRunningSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.sliceSimulator_isNotRunning\n>;\n\ntype PageViewSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.pageView,\n\t{\n\t\turl: string;\n\t\tpath: string;\n\t\tsearch: string;\n\t\ttitle: string;\n\t\treferrer: string;\n\t\tadapter: string;\n\t\t/*\n\t\t * We are tracking outer sizes instead of inner sizes as with the latter, we\n\t\t * can't differentiate between users with a high-density screen and those\n\t\t * zooming in/out with ⌘ + / ⌘ -. Indeed, when users zoom in/out, some\n\t\t * browsers (like Google Chrome) will update `window.devicePixelRatio` while\n\t\t * others (like Safari) will keep it unchanged so that it always reflects\n\t\t * the ratio of physical pixels to CSS pixels.\n\t\t */\n\t\touterWidth: number;\n\t\touterHeight: number;\n\t\tscreenWidth: number;\n\t\tscreenHeight: number;\n\t}\n>;\n\ntype OpenPageSnippetSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.open_page_snippet,\n\t{ framework: string }\n>;\n\ntype CopyPageSnippetSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.copy_page_snippet,\n\t{ framework: string }\n>;\n\ntype SwitchEnvironmentSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.switch_environment,\n\t{ domain: string }\n>;\n\ntype OpenVideoTutorialsSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.openVideoTutorials,\n\t{ video: string }\n>;\n\ntype FieldAddedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.field_added,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\ttype: FieldType;\n\t\tisInAGroup: boolean;\n\t\tcontentType: \"page type\" | \"custom type\" | \"slice\";\n\t\tallowText?: boolean;\n\t\trepeat?: boolean;\n\t\tvariants?: string[];\n\t\tlinkSelect?: LinkConfig[\"select\"];\n\t\tlinkPickedFields?: number;\n\t\tlinkNestedPickedFields?: number;\n\t}\n>;\n\ntype FieldUpdatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.field_updated,\n\t{\n\t\tpreviousId: string;\n\t\tid: string;\n\t\tidUpdated: boolean;\n\t\tname: string;\n\t\ttype: FieldType;\n\t\tisInAGroup: boolean;\n\t\tcontentType: \"page type\" | \"custom type\" | \"slice\";\n\t\tallowText?: boolean;\n\t\trepeat?: boolean;\n\t\tvariants?: string[];\n\t\tlinkSelect?: LinkConfig[\"select\"];\n\t\tlinkPickedFields?: number;\n\t\tlinkNestedPickedFields?: number;\n\t}\n>;\n\ntype FieldSettingsOpenedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.field_settingsOpened,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\ttype: FieldType;\n\t\tisInAGroup: boolean;\n\t\tcontentType: \"page type\" | \"custom type\" | \"slice\";\n\t}\n>;\n\ntype CustomTypeCreatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_created,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\tformat: CustomTypeFormat;\n\t\ttype: \"repeatable\" | \"single\";\n\t\torigin: \"onboarding\" | \"table\";\n\t}\n>;\n\ntype CustomTypeSliceZoneUpdatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_sliceZoneUpdated,\n\t{ customTypeId: string }\n>;\n\ntype CustomTypeOpenAddFromTemplatesEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_openAddFromTemplates,\n\t{ customTypeId: string; customTypeFormat: CustomTypeFormat }\n>;\n\ntype CustomTypeSavedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_saved,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\tformat: CustomTypeFormat;\n\t\ttype: \"repeatable\" | \"single\";\n\t}\n>;\n\ntype SliceCreatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.slice_created,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\tlibrary: string;\n\t\tlocation: \"custom_type\" | \"page_type\" | \"slices\";\n\t} & (\n\t\t| { mode: \"ai\"; langSmithUrl?: string }\n\t\t| { mode: \"figma-to-slice\" }\n\t\t| { mode: \"manual\" }\n\t\t| { mode: \"template\"; sliceTemplate: string }\n\t)\n>;\n\ntype LegacySliceConvertedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.legacySlice_converted,\n\t{\n\t\tid: string;\n\t\tvariation: string;\n\t\tlibrary: string;\n\t\tconversionType:\n\t\t\t| \"as_new_slice\"\n\t\t\t| \"as_new_variation\"\n\t\t\t| \"merge_with_identical\";\n\t}\n>;\n\ntype ScreenshotTakenSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.screenshotTaken,\n\t{\n\t\ttype: \"custom\";\n\t\tmethod: \"upload\" | \"dragAndDrop\";\n\t}\n>;\n\ntype ChangesPushedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.changes_pushed,\n\t{\n\t\tcustomTypesCreated: number;\n\t\tcustomTypesModified: number;\n\t\tcustomTypesDeleted: number;\n\t\tslicesCreated: number;\n\t\tslicesModified: number;\n\t\tslicesDeleted: number;\n\t\tmissingScreenshots: number;\n\t\ttotal: number;\n\t\tduration: number;\n\t\thasDeletedDocuments: boolean;\n\t}\n>;\n\ntype ChangesGroupPushedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.changes_groupPushed,\n\t{\n\t\tisInStaticZone: boolean;\n\t\tisInSlice: boolean;\n\t} & {\n\t\t[key in FieldType]?: number;\n\t}\n>;\n\ntype ChangesLimitReachSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.changes_limitReach,\n\t{ limitType: PushChangesLimitType }\n>;\n\ntype EditorWidgetUsedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.editor_widgetUsed,\n\t{ sliceId: string }\n>;\n\ntype DevCollabJoinBetaClicked = SegmentEvent<\n\ttypeof SegmentEventType.devCollab_joinBetaClicked\n>;\n\ntype DevCollabSetUpWorkflowOpened = SegmentEvent<\n\ttypeof SegmentEventType.devCollab_setUpWorkflowOpened\n>;\n\ntype DevCollabWorkflowStubDisplayed = SegmentEvent<\n\ttypeof SegmentEventType.devCollab_workflowStubDisplayed\n>;\n\ntype SliceMachineStart = SegmentEvent<\n\ttypeof SegmentEventType.sliceMachine_start,\n\t{\n\t\tadapter?: string;\n\t\tadapterVersion?: string;\n\t\tisAdapterUpdateAvailable?: boolean;\n\t\tisLoggedIn?: boolean;\n\t\tisSliceMachineUpdateAvailable?: boolean;\n\t\tisTypeScriptProject?: boolean;\n\t\tnodeVersion?: string;\n\t\tnumberOfCustomTypes?: number;\n\t\tnumberOfSlices?: number;\n\t\tosPlatform?: string;\n\t\tpackageManager?: string;\n\t\tprojectPort?: string;\n\t\tsliceMachineVersion?: string;\n\t\tversionControlSystem?: string;\n\t}\n>;\n\ntype OnboardingCommonPayload = { stepId: string; stepTitle: string };\ntype SharedOnboardingProperties<T = Record<string, string>> = T & {\n\tsource: \"SliceMachine\";\n};\n\ntype SliceMachineSharedOnboardingStepOpened = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_step_opened,\n\tSharedOnboardingProperties<OnboardingCommonPayload>\n>;\ntype SliceMachineSharedOnboardingStepCompleted = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_step_completed,\n\tSharedOnboardingProperties<OnboardingCommonPayload>\n>;\ntype SliceMachineSharedOnboardingCompleted = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_completed,\n\tSharedOnboardingProperties\n>;\ntype SliceMachineSharedOnboardingTutorial = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_tutorial,\n\tSharedOnboardingProperties\n>;\ntype SliceMachinePostPushEmptyStateCtaClicked = SegmentEvent<\n\ttypeof SegmentEventType.postPush_emptyStateCtaClicked\n>;\n\ntype SliceMachinePostPushToastCtaClicked = SegmentEvent<\n\ttypeof SegmentEventType.postPush_toastCtaClicked\n>;\n\ntype SliceMachineExperimentExposure = SegmentEvent<\n\ttypeof SegmentEventType.experiment_exposure,\n\t{\n\t\tflag_key: string;\n\t\tvariant: string;\n\t}\n>;\n\ntype SliceGenerationFeedback = SegmentEvent<\n\ttypeof SegmentEventType.sliceGenerationFeedback,\n\t{\n\t\ttype: \"model\";\n\t\tsliceId: string;\n\t\tvariationId: string;\n\t\tfeedback: \"up\" | \"down\";\n\t\tlangSmithUrl?: string;\n\t}\n>;\n\ntype SliceGenerationPastedFromFigma = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_pastedFromFigma,\n\t{\n\t\tsource: \"shortcut\" | \"button\";\n\t}\n>;\n\ntype SliceGenerationStarted = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_started,\n\t{\n\t\tsource: \"figma\" | \"upload\";\n\t\tllmProxyUrl: string;\n\t}\n>;\n\ntype SliceGenerationEnded = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_ended,\n\t{\n\t\terror: boolean;\n\t\tsource: \"figma\" | \"upload\";\n\t}\n>;\n\ntype SliceGenerationPluginInstallationClicked = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_pluginInstallationClicked\n>;\n\ntype NavigationDocumentationLinkClicked = SegmentEvent<\n\ttypeof SegmentEventType.navigation_documentationLinkClicked,\n\t{\n\t\tframework: string;\n\t}\n>;\n\ntype SidebarLinkClicked = SegmentEvent<\n\ttypeof SegmentEventType.sidebar_link_clicked,\n\t{\n\t\tlink_name: string;\n\t\tsource: string;\n\t}\n>;\n\ntype McpPromoLinkClicked = SegmentEvent<\n\ttypeof SegmentEventType.mcp_promo_link_clicked,\n\t{\n\t\tsource: string;\n\t\ttarget: string;\n\t}\n>;\n\ntype InfoBannerDismissed = SegmentEvent<\n\ttypeof SegmentEventType.info_banner_dismissed,\n\t{\n\t\tinfoBannerId: string;\n\t}\n>;\n\ntype InfoBannerButtonClicked = SegmentEvent<\n\ttypeof SegmentEventType.info_banner_button_clicked,\n\t{\n\t\tinfoBannerId: string;\n\t}\n>;\n\nexport type SegmentEvents =\n\t| CommandInitStartSegmentEvent\n\t| CommandInitIdentifySegmentEvent\n\t| CommandInitEndSegmentEvent\n\t| SliceSimulatorOpenSegmentEvent\n\t| SliceSimulatorIsNotRunningSegmentEvent\n\t| PageViewSegmentEvent\n\t| OpenVideoTutorialsSegmentEvent\n\t| FieldAddedSegmentEvent\n\t| FieldUpdatedSegmentEvent\n\t| FieldSettingsOpenedSegmentEvent\n\t| CustomTypeCreatedSegmentEvent\n\t| CustomTypeSliceZoneUpdatedSegmentEvent\n\t| CustomTypeOpenAddFromTemplatesEvent\n\t| CustomTypeSavedSegmentEvent\n\t| SliceCreatedSegmentEvent\n\t| LegacySliceConvertedSegmentEvent\n\t| ScreenshotTakenSegmentEvent\n\t| ChangesPushedSegmentEvent\n\t| ChangesGroupPushedSegmentEvent\n\t| ChangesLimitReachSegmentEvent\n\t| EditorWidgetUsedSegmentEvent\n\t| OpenPageSnippetSegmentEvent\n\t| CopyPageSnippetSegmentEvent\n\t| SwitchEnvironmentSegmentEvent\n\t| DevCollabJoinBetaClicked\n\t| DevCollabSetUpWorkflowOpened\n\t| DevCollabWorkflowStubDisplayed\n\t| SliceMachineStart\n\t| SliceMachineSharedOnboardingStepOpened\n\t| SliceMachineSharedOnboardingStepCompleted\n\t| SliceMachineSharedOnboardingCompleted\n\t| SliceMachineSharedOnboardingTutorial\n\t| SliceMachinePostPushEmptyStateCtaClicked\n\t| SliceMachinePostPushToastCtaClicked\n\t| SliceMachineExperimentExposure\n\t| SliceGenerationFeedback\n\t| SliceGenerationPastedFromFigma\n\t| SliceGenerationStarted\n\t| SliceGenerationEnded\n\t| SliceGenerationPluginInstallationClicked\n\t| NavigationDocumentationLinkClicked\n\t| SidebarLinkClicked\n\t| McpPromoLinkClicked\n\t| InfoBannerDismissed\n\t| InfoBannerButtonClicked;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/managers/telemetry/types.ts"],"sourcesContent":["import {\n\tFieldType,\n\tLinkConfig,\n} from \"@prismicio/types-internal/lib/customtypes/widgets\";\n\nimport { CustomTypeFormat } from \"../customTypes/types\";\nimport type { PushChangesLimitType } from \"../prismicRepository/types\";\n\nexport type { Variant } from \"@amplitude/experiment-node-server\";\n\nexport const SegmentEventType = {\n\tcommand_init_start: \"command:init:start\",\n\tcommand_init_identify: \"command:init:identify\",\n\tcommand_init_end: \"command:init:end\",\n\tsliceSimulator_open: \"slice-simulator:open\",\n\tsliceSimulator_isNotRunning: \"slice-simulator:is-not-running\",\n\tpageView: \"page-view\",\n\topenVideoTutorials: \"open-video-tutorials\",\n\tfield_added: \"field:added\",\n\tfield_updated: \"field:updated\",\n\tfield_settingsOpened: \"field:settings-opened\",\n\tcustomType_created: \"custom-type:created\",\n\tcustomType_sliceZoneUpdated: \"custom-type:slice-zone-updated\",\n\tcustomType_openAddFromTemplates: \"custom-type:open-add-from-templates\",\n\tcustomType_saved: \"custom-type:saved\",\n\tslice_created: \"slice:created\",\n\tlegacySlice_converted: \"legacy-slice:converted\",\n\tscreenshotTaken: \"screenshot-taken\",\n\tchanges_pushed: \"changes:pushed\",\n\tchanges_groupPushed: \"changes:group-pushed\",\n\tchanges_limitReach: \"changes:limit-reach\",\n\teditor_widgetUsed: \"editor:widget-used\",\n\topen_page_snippet: \"page-type:open-snippet\",\n\tcopy_page_snippet: \"page-type:copy-snippet\",\n\tswitch_environment: \"environment:switch\",\n\tdevCollab_joinBetaClicked: \"dev-collab:join-beta-clicked\",\n\tdevCollab_setUpWorkflowOpened: \"dev-collab:set-up-workflow-opened\",\n\tdevCollab_workflowStubDisplayed: \"dev-collab:workflow-stub-displayed\",\n\tsliceMachine_start: \"slice-machine:start\",\n\tpostPush_emptyStateCtaClicked: \"post-push:empty-state-cta-clicked\",\n\tpostPush_toastCtaClicked: \"post-push:toast-cta-clicked\",\n\texperiment_exposure: \"experiment:exposure\",\n\tsharedOnboarding_step_opened: \"shared-onboarding:step-opened\",\n\tsharedOnboarding_step_completed: \"shared-onboarding:step-completed\",\n\tsharedOnboarding_completed: \"shared-onboarding:completed\",\n\tsharedOnboarding_tutorial: \"shared-onboarding:follow-tutorial\",\n\tsliceGenerationFeedback: \"slice-generation-feedback\",\n\tsliceGeneration_pastedFromFigma: \"slice-generation:pasted-from-figma\",\n\tsliceGeneration_started: \"slice-generation:started\",\n\tsliceGeneration_ended: \"slice-generation:ended\",\n\tsliceGeneration_pluginInstallationClicked:\n\t\t\"slice-generation:plugin-installation-clicked\",\n\tnavigation_documentationLinkClicked: \"navigation:documentation-link-clicked\",\n\tsidebar_link_clicked: \"sidebar:link-clicked\",\n\tmcp_promo_link_clicked: \"mcp:promo-link-clicked\",\n\tinfo_banner_dismissed: \"info-banner:dismissed\",\n\tinfo_banner_button_clicked: \"info-banner:button-clicked\",\n\tslice_library_opened: \"slice-library:opened\",\n\tslice_library_projects_listed: \"slice-library:projects-listed\",\n\tslice_library_slice_selected: \"slice-library:slice-selected\",\n\tslice_library_fetching_started: \"slice-library:fetching-started\",\n\tslice_library_fetching_ended: \"slice-library:fetching-ended\",\n\tslice_library_import_started: \"slice-library:import-started\",\n\tslice_library_import_ended: \"slice-library:import-ended\",\n} as const;\ntype SegmentEventTypes =\n\t(typeof SegmentEventType)[keyof typeof SegmentEventType];\n\nexport const HumanSegmentEventType = {\n\t[SegmentEventType.command_init_start]: \"SliceMachine Init Start\",\n\t[SegmentEventType.command_init_identify]: \"SliceMachine Init Identify\",\n\t[SegmentEventType.command_init_end]: \"SliceMachine Init End\",\n\t[SegmentEventType.sliceSimulator_open]: \"SliceMachine Slice Simulator Open\",\n\t[SegmentEventType.sliceSimulator_isNotRunning]:\n\t\t\"SliceMachine Slice Simulator is not running\",\n\t[SegmentEventType.pageView]: \"SliceMachine Page View\",\n\t[SegmentEventType.openVideoTutorials]: \"SliceMachine Open Video Tutorials\",\n\t[SegmentEventType.field_added]: \"SliceMachine Field Added\",\n\t[SegmentEventType.field_updated]: \"SliceMachine Field Updated\",\n\t[SegmentEventType.field_settingsOpened]: \"SliceMachine Field Settings Opened\",\n\t[SegmentEventType.customType_created]: \"SliceMachine Custom Type Created\",\n\t[SegmentEventType.customType_sliceZoneUpdated]:\n\t\t\"SliceMachine Slicezone Updated\",\n\t[SegmentEventType.customType_openAddFromTemplates]:\n\t\t\"SliceMachine Open Add from templates\",\n\t[SegmentEventType.customType_saved]: \"SliceMachine Custom Type Saved\",\n\t[SegmentEventType.slice_created]: \"SliceMachine Slice Created\",\n\t[SegmentEventType.legacySlice_converted]:\n\t\t\"SliceMachine Legacy Slice Converted\",\n\t[SegmentEventType.screenshotTaken]: \"SliceMachine Screenshot Taken\",\n\t[SegmentEventType.changes_pushed]: \"SliceMachine Changes Pushed\",\n\t[SegmentEventType.changes_groupPushed]: \"SliceMachine Group Field Pushed\",\n\t[SegmentEventType.changes_limitReach]: \"SliceMachine Changes Limit Reach\",\n\t[SegmentEventType.editor_widgetUsed]: \"SliceMachine Editor Widget Used\",\n\t[SegmentEventType.open_page_snippet]:\n\t\t\"SliceMachine Opens Page Type Snippet Dialog\",\n\t[SegmentEventType.copy_page_snippet]:\n\t\t\"Slice Machine page code snippet copied\",\n\t[SegmentEventType.switch_environment]: \"SliceMachine environment switch\",\n\t[SegmentEventType.devCollab_joinBetaClicked]:\n\t\t\"SliceMachine Dev Collab Join Beta Clicked\",\n\t[SegmentEventType.devCollab_setUpWorkflowOpened]:\n\t\t\"SliceMachine Dev Collab Set Up Workflow Opened\",\n\t[SegmentEventType.devCollab_workflowStubDisplayed]:\n\t\t\"SliceMachine Dev Collab Workflow Stub Displayed\",\n\t[SegmentEventType.sliceMachine_start]: \"SliceMachine Start\",\n\t[SegmentEventType.postPush_emptyStateCtaClicked]:\n\t\t\"SliceMachine Post Push Empty State CTA Clicked\",\n\t[SegmentEventType.postPush_toastCtaClicked]:\n\t\t\"SliceMachine Post Push Toast CTA Clicked\",\n\t[SegmentEventType.experiment_exposure]: \"$exposure\",\n\t[SegmentEventType.sharedOnboarding_step_completed]:\n\t\t\"Prismic Onboarding Guide Step Completed\",\n\t[SegmentEventType.sharedOnboarding_step_opened]:\n\t\t\"Prismic Onboarding Guide Step Open\",\n\t[SegmentEventType.sharedOnboarding_completed]:\n\t\t\"Prismic Onboarding Guide Completed\",\n\t[SegmentEventType.sharedOnboarding_tutorial]:\n\t\t\"Prismic Onboarding Guide Follow Tutorial\",\n\t[SegmentEventType.sliceGenerationFeedback]: \"Slice Generation Feedback\",\n\t[SegmentEventType.sliceGeneration_pastedFromFigma]:\n\t\t\"SliceMachine Shared Slice Generation - Pasted From Figma\",\n\t[SegmentEventType.sliceGeneration_started]:\n\t\t\"SliceMachine Shared Slice Generation - Started\",\n\t[SegmentEventType.sliceGeneration_ended]:\n\t\t\"SliceMachine Shared Slice Generation - Ended\",\n\t[SegmentEventType.sliceGeneration_pluginInstallationClicked]:\n\t\t\"SliceMachine Shared Slice Generation - Plugin Installation Clicked\",\n\t[SegmentEventType.navigation_documentationLinkClicked]:\n\t\t\"SliceMachine Documentation Link Clicked\",\n\t[SegmentEventType.sidebar_link_clicked]: \"Sidebar Link Clicked\",\n\t[SegmentEventType.mcp_promo_link_clicked]: \"MCP Promo Link Clicked\",\n\t[SegmentEventType.info_banner_dismissed]:\n\t\t\"SliceMachine Info Banner Dismissed\",\n\t[SegmentEventType.info_banner_button_clicked]:\n\t\t\"SliceMachine Info Banner Button Clicked\",\n\t[SegmentEventType.slice_library_opened]:\n\t\t\"SliceMachine Slice Library - Opened\",\n\t[SegmentEventType.slice_library_projects_listed]:\n\t\t\"SliceMachine Slice Library - Projects Listed\",\n\t[SegmentEventType.slice_library_slice_selected]:\n\t\t\"SliceMachine Slice Library - Slice Selected\",\n\t[SegmentEventType.slice_library_fetching_started]:\n\t\t\"SliceMachine Slice Library - Slice Fetching Started\",\n\t[SegmentEventType.slice_library_fetching_ended]:\n\t\t\"SliceMachine Slice Library - Slice Fetching Ended\",\n\t[SegmentEventType.slice_library_import_started]:\n\t\t\"SliceMachine Slice Library - Slice Import Started\",\n\t[SegmentEventType.slice_library_import_ended]:\n\t\t\"SliceMachine Slice Library - Slice Import Ended\",\n} as const;\n\nexport type HumanSegmentEventTypes =\n\t(typeof HumanSegmentEventType)[keyof typeof HumanSegmentEventType];\n\ntype SegmentEvent<\n\tTType extends SegmentEventTypes,\n\tTProperties extends Record<string, unknown> | void = void,\n> = TProperties extends void\n\t? {\n\t\t\tevent: TType;\n\t\t\trepository?: string;\n\t }\n\t: {\n\t\t\tevent: TType;\n\t\t\trepository?: string;\n\t } & TProperties;\n\ntype CommandInitStartSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.command_init_start\n>;\n\n// This event feels off, we have a dedicated `identify` method...\ntype CommandInitIdentifySegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.command_init_identify\n>;\n\ntype CommandInitEndSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.command_init_end,\n\t{ framework: string; success: boolean; error?: string }\n>;\n\ntype SliceSimulatorOpenSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.sliceSimulator_open\n>;\n\ntype SliceSimulatorIsNotRunningSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.sliceSimulator_isNotRunning\n>;\n\ntype PageViewSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.pageView,\n\t{\n\t\turl: string;\n\t\tpath: string;\n\t\tsearch: string;\n\t\ttitle: string;\n\t\treferrer: string;\n\t\tadapter: string;\n\t\t/*\n\t\t * We are tracking outer sizes instead of inner sizes as with the latter, we\n\t\t * can't differentiate between users with a high-density screen and those\n\t\t * zooming in/out with ⌘ + / ⌘ -. Indeed, when users zoom in/out, some\n\t\t * browsers (like Google Chrome) will update `window.devicePixelRatio` while\n\t\t * others (like Safari) will keep it unchanged so that it always reflects\n\t\t * the ratio of physical pixels to CSS pixels.\n\t\t */\n\t\touterWidth: number;\n\t\touterHeight: number;\n\t\tscreenWidth: number;\n\t\tscreenHeight: number;\n\t}\n>;\n\ntype OpenPageSnippetSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.open_page_snippet,\n\t{ framework: string }\n>;\n\ntype CopyPageSnippetSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.copy_page_snippet,\n\t{ framework: string }\n>;\n\ntype SwitchEnvironmentSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.switch_environment,\n\t{ domain: string }\n>;\n\ntype OpenVideoTutorialsSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.openVideoTutorials,\n\t{ video: string }\n>;\n\ntype FieldAddedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.field_added,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\ttype: FieldType;\n\t\tisInAGroup: boolean;\n\t\tcontentType: \"page type\" | \"custom type\" | \"slice\";\n\t\tallowText?: boolean;\n\t\trepeat?: boolean;\n\t\tvariants?: string[];\n\t\tlinkSelect?: LinkConfig[\"select\"];\n\t\tlinkPickedFields?: number;\n\t\tlinkNestedPickedFields?: number;\n\t}\n>;\n\ntype FieldUpdatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.field_updated,\n\t{\n\t\tpreviousId: string;\n\t\tid: string;\n\t\tidUpdated: boolean;\n\t\tname: string;\n\t\ttype: FieldType;\n\t\tisInAGroup: boolean;\n\t\tcontentType: \"page type\" | \"custom type\" | \"slice\";\n\t\tallowText?: boolean;\n\t\trepeat?: boolean;\n\t\tvariants?: string[];\n\t\tlinkSelect?: LinkConfig[\"select\"];\n\t\tlinkPickedFields?: number;\n\t\tlinkNestedPickedFields?: number;\n\t}\n>;\n\ntype FieldSettingsOpenedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.field_settingsOpened,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\ttype: FieldType;\n\t\tisInAGroup: boolean;\n\t\tcontentType: \"page type\" | \"custom type\" | \"slice\";\n\t}\n>;\n\ntype CustomTypeCreatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_created,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\tformat: CustomTypeFormat;\n\t\ttype: \"repeatable\" | \"single\";\n\t\torigin: \"onboarding\" | \"table\";\n\t}\n>;\n\ntype CustomTypeSliceZoneUpdatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_sliceZoneUpdated,\n\t{ customTypeId: string }\n>;\n\ntype CustomTypeOpenAddFromTemplatesEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_openAddFromTemplates,\n\t{ customTypeId: string; customTypeFormat: CustomTypeFormat }\n>;\n\ntype CustomTypeSavedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.customType_saved,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\tformat: CustomTypeFormat;\n\t\ttype: \"repeatable\" | \"single\";\n\t}\n>;\n\ntype SliceCreatedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.slice_created,\n\t{\n\t\tid: string;\n\t\tname: string;\n\t\tlibrary: string;\n\t\tlocation: \"custom_type\" | \"page_type\" | \"slices\";\n\t} & (\n\t\t| { mode: \"ai\"; langSmithUrl?: string }\n\t\t| { mode: \"figma-to-slice\" }\n\t\t| { mode: \"manual\" }\n\t\t| { mode: \"template\"; sliceTemplate: string }\n\t\t| { mode: \"import\" }\n\t)\n>;\n\ntype LegacySliceConvertedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.legacySlice_converted,\n\t{\n\t\tid: string;\n\t\tvariation: string;\n\t\tlibrary: string;\n\t\tconversionType:\n\t\t\t| \"as_new_slice\"\n\t\t\t| \"as_new_variation\"\n\t\t\t| \"merge_with_identical\";\n\t}\n>;\n\ntype ScreenshotTakenSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.screenshotTaken,\n\t{\n\t\ttype: \"custom\";\n\t\tmethod: \"upload\" | \"dragAndDrop\";\n\t}\n>;\n\ntype ChangesPushedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.changes_pushed,\n\t{\n\t\tcustomTypesCreated: number;\n\t\tcustomTypesModified: number;\n\t\tcustomTypesDeleted: number;\n\t\tslicesCreated: number;\n\t\tslicesModified: number;\n\t\tslicesDeleted: number;\n\t\tmissingScreenshots: number;\n\t\ttotal: number;\n\t\tduration: number;\n\t\thasDeletedDocuments: boolean;\n\t}\n>;\n\ntype ChangesGroupPushedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.changes_groupPushed,\n\t{\n\t\tisInStaticZone: boolean;\n\t\tisInSlice: boolean;\n\t} & {\n\t\t[key in FieldType]?: number;\n\t}\n>;\n\ntype ChangesLimitReachSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.changes_limitReach,\n\t{ limitType: PushChangesLimitType }\n>;\n\ntype EditorWidgetUsedSegmentEvent = SegmentEvent<\n\ttypeof SegmentEventType.editor_widgetUsed,\n\t{ sliceId: string }\n>;\n\ntype DevCollabJoinBetaClicked = SegmentEvent<\n\ttypeof SegmentEventType.devCollab_joinBetaClicked\n>;\n\ntype DevCollabSetUpWorkflowOpened = SegmentEvent<\n\ttypeof SegmentEventType.devCollab_setUpWorkflowOpened\n>;\n\ntype DevCollabWorkflowStubDisplayed = SegmentEvent<\n\ttypeof SegmentEventType.devCollab_workflowStubDisplayed\n>;\n\ntype SliceMachineStart = SegmentEvent<\n\ttypeof SegmentEventType.sliceMachine_start,\n\t{\n\t\tadapter?: string;\n\t\tadapterVersion?: string;\n\t\tisAdapterUpdateAvailable?: boolean;\n\t\tisLoggedIn?: boolean;\n\t\tisSliceMachineUpdateAvailable?: boolean;\n\t\tisTypeScriptProject?: boolean;\n\t\tnodeVersion?: string;\n\t\tnumberOfCustomTypes?: number;\n\t\tnumberOfSlices?: number;\n\t\tosPlatform?: string;\n\t\tpackageManager?: string;\n\t\tprojectPort?: string;\n\t\tsliceMachineVersion?: string;\n\t\tversionControlSystem?: string;\n\t}\n>;\n\ntype OnboardingCommonPayload = { stepId: string; stepTitle: string };\ntype SharedOnboardingProperties<T = Record<string, string>> = T & {\n\tsource: \"SliceMachine\";\n};\n\ntype SliceMachineSharedOnboardingStepOpened = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_step_opened,\n\tSharedOnboardingProperties<OnboardingCommonPayload>\n>;\ntype SliceMachineSharedOnboardingStepCompleted = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_step_completed,\n\tSharedOnboardingProperties<OnboardingCommonPayload>\n>;\ntype SliceMachineSharedOnboardingCompleted = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_completed,\n\tSharedOnboardingProperties\n>;\ntype SliceMachineSharedOnboardingTutorial = SegmentEvent<\n\ttypeof SegmentEventType.sharedOnboarding_tutorial,\n\tSharedOnboardingProperties\n>;\ntype SliceMachinePostPushEmptyStateCtaClicked = SegmentEvent<\n\ttypeof SegmentEventType.postPush_emptyStateCtaClicked\n>;\n\ntype SliceMachinePostPushToastCtaClicked = SegmentEvent<\n\ttypeof SegmentEventType.postPush_toastCtaClicked\n>;\n\ntype SliceMachineExperimentExposure = SegmentEvent<\n\ttypeof SegmentEventType.experiment_exposure,\n\t{\n\t\tflag_key: string;\n\t\tvariant: string;\n\t}\n>;\n\ntype SliceGenerationFeedback = SegmentEvent<\n\ttypeof SegmentEventType.sliceGenerationFeedback,\n\t{\n\t\ttype: \"model\";\n\t\tsliceId: string;\n\t\tvariationId: string;\n\t\tfeedback: \"up\" | \"down\";\n\t\tlangSmithUrl?: string;\n\t}\n>;\n\ntype SliceGenerationPastedFromFigma = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_pastedFromFigma,\n\t{\n\t\tsource: \"shortcut\" | \"button\";\n\t}\n>;\n\ntype SliceGenerationStarted = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_started,\n\t{\n\t\tsource: \"figma\" | \"upload\";\n\t\tllmProxyUrl: string;\n\t}\n>;\n\ntype SliceGenerationEnded = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_ended,\n\t{\n\t\terror: boolean;\n\t\tsource: \"figma\" | \"upload\";\n\t}\n>;\n\ntype SliceGenerationPluginInstallationClicked = SegmentEvent<\n\ttypeof SegmentEventType.sliceGeneration_pluginInstallationClicked\n>;\n\ntype NavigationDocumentationLinkClicked = SegmentEvent<\n\ttypeof SegmentEventType.navigation_documentationLinkClicked,\n\t{\n\t\tframework: string;\n\t}\n>;\n\ntype SidebarLinkClicked = SegmentEvent<\n\ttypeof SegmentEventType.sidebar_link_clicked,\n\t{\n\t\tlink_name: string;\n\t\tsource: string;\n\t}\n>;\n\ntype McpPromoLinkClicked = SegmentEvent<\n\ttypeof SegmentEventType.mcp_promo_link_clicked,\n\t{\n\t\tsource: string;\n\t\ttarget: string;\n\t}\n>;\n\ntype InfoBannerDismissed = SegmentEvent<\n\ttypeof SegmentEventType.info_banner_dismissed,\n\t{\n\t\tinfoBannerId: string;\n\t}\n>;\n\ntype InfoBannerButtonClicked = SegmentEvent<\n\ttypeof SegmentEventType.info_banner_button_clicked,\n\t{\n\t\tinfoBannerId: string;\n\t}\n>;\n\ntype SliceLibraryOpened = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_opened\n>;\ntype SliceLibraryProjectsListed = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_projects_listed,\n\t{\n\t\trepositories_count: number;\n\t}\n>;\ntype SliceLibrarySliceSelected = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_slice_selected,\n\t{\n\t\tslices_count: number;\n\t\tsource_project_id: string;\n\t\tdestination_project_id: string;\n\t}\n>;\ntype SliceLibraryFetchingStarted = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_fetching_started,\n\t{\n\t\tsource_project_id: string;\n\t}\n>;\ntype SliceLibraryFetchingEnded = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_fetching_ended,\n\t| {\n\t\t\terror: false;\n\t\t\tslices_count: number;\n\t\t\tsource_project_id: string;\n\t }\n\t| {\n\t\t\terror: true;\n\t\t\tslices_count?: never;\n\t\t\tsource_project_id: string;\n\t }\n>;\ntype SliceLibraryImportStarted = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_import_started,\n\t{\n\t\tsource_project_id: string;\n\t}\n>;\ntype SliceLibraryImportEnded = SegmentEvent<\n\ttypeof SegmentEventType.slice_library_import_ended,\n\t| {\n\t\t\terror: false;\n\t\t\tslices_count: number;\n\t\t\tsource_project_id: string;\n\t\t\tdestination_project_id: string;\n\t }\n\t| {\n\t\t\terror: true;\n\t\t\tslices_count?: never;\n\t\t\tsource_project_id: string;\n\t\t\tdestination_project_id: string;\n\t }\n>;\n\nexport type SegmentEvents =\n\t| CommandInitStartSegmentEvent\n\t| CommandInitIdentifySegmentEvent\n\t| CommandInitEndSegmentEvent\n\t| SliceSimulatorOpenSegmentEvent\n\t| SliceSimulatorIsNotRunningSegmentEvent\n\t| PageViewSegmentEvent\n\t| OpenVideoTutorialsSegmentEvent\n\t| FieldAddedSegmentEvent\n\t| FieldUpdatedSegmentEvent\n\t| FieldSettingsOpenedSegmentEvent\n\t| CustomTypeCreatedSegmentEvent\n\t| CustomTypeSliceZoneUpdatedSegmentEvent\n\t| CustomTypeOpenAddFromTemplatesEvent\n\t| CustomTypeSavedSegmentEvent\n\t| SliceCreatedSegmentEvent\n\t| LegacySliceConvertedSegmentEvent\n\t| ScreenshotTakenSegmentEvent\n\t| ChangesPushedSegmentEvent\n\t| ChangesGroupPushedSegmentEvent\n\t| ChangesLimitReachSegmentEvent\n\t| EditorWidgetUsedSegmentEvent\n\t| OpenPageSnippetSegmentEvent\n\t| CopyPageSnippetSegmentEvent\n\t| SwitchEnvironmentSegmentEvent\n\t| DevCollabJoinBetaClicked\n\t| DevCollabSetUpWorkflowOpened\n\t| DevCollabWorkflowStubDisplayed\n\t| SliceMachineStart\n\t| SliceMachineSharedOnboardingStepOpened\n\t| SliceMachineSharedOnboardingStepCompleted\n\t| SliceMachineSharedOnboardingCompleted\n\t| SliceMachineSharedOnboardingTutorial\n\t| SliceMachinePostPushEmptyStateCtaClicked\n\t| SliceMachinePostPushToastCtaClicked\n\t| SliceMachineExperimentExposure\n\t| SliceGenerationFeedback\n\t| SliceGenerationPastedFromFigma\n\t| SliceGenerationStarted\n\t| SliceGenerationEnded\n\t| SliceGenerationPluginInstallationClicked\n\t| NavigationDocumentationLinkClicked\n\t| SidebarLinkClicked\n\t| McpPromoLinkClicked\n\t| InfoBannerDismissed\n\t| InfoBannerButtonClicked\n\t| SliceLibraryOpened\n\t| SliceLibraryProjectsListed\n\t| SliceLibrarySliceSelected\n\t| SliceLibraryFetchingStarted\n\t| SliceLibraryFetchingEnded\n\t| SliceLibraryImportStarted\n\t| SliceLibraryImportEnded;\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/manager",
3
- "version": "0.26.7-alpha.aa-prismicnextrichtext.2",
3
+ "version": "0.26.7-alpha.jp-import-slice-base.1",
4
4
  "description": "Manage all aspects of a Slice Machine project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -71,7 +71,7 @@
71
71
  "@prismicio/mocks": "2.14.0",
72
72
  "@prismicio/types-internal": "3.11.2",
73
73
  "@segment/analytics-node": "^2.1.2",
74
- "@slicemachine/plugin-kit": "0.4.92-alpha.aa-prismicnextrichtext.2",
74
+ "@slicemachine/plugin-kit": "0.4.92-alpha.jp-import-slice-base.1",
75
75
  "cookie": "^1.0.1",
76
76
  "cors": "^2.8.5",
77
77
  "execa": "^7.1.1",
@@ -13,6 +13,7 @@ export type APIEndpoints = {
13
13
  RepositoryService: string;
14
14
  LocaleService: string;
15
15
  CustomTypeService: string;
16
+ GitService: string;
16
17
  };
17
18
 
18
19
  export const API_ENDPOINTS: APIEndpoints = (() => {
@@ -47,6 +48,9 @@ export const API_ENDPOINTS: APIEndpoints = (() => {
47
48
  process.env.custom_type_api ??
48
49
  "https://api.internal.wroom.io/custom-type/",
49
50
  ),
51
+ GitService: addTrailingSlash(
52
+ process.env.git_service_api ?? "https://api.internal.wroom.io/git/",
53
+ ),
50
54
  };
51
55
 
52
56
  const missingAPIEndpoints = Object.keys(apiEndpoints).filter((key) => {
@@ -96,6 +100,7 @@ If you didn't intend to run Slice Machine this way, stop it immediately and unse
96
100
  RepositoryService: "https://api.internal.wroom.io/repository/",
97
101
  LocaleService: "https://api.internal.wroom.io/locale/",
98
102
  CustomTypeService: "https://api.internal.wroom.io/custom-type/",
103
+ GitService: "https://api.internal.wroom.io/git/",
99
104
  };
100
105
  }
101
106
 
@@ -114,6 +119,7 @@ If you didn't intend to run Slice Machine this way, stop it immediately and unse
114
119
  RepositoryService: `https://api.internal.${process.env.SM_ENV}-wroom.com/repository/`,
115
120
  LocaleService: `https://api.internal.${process.env.SM_ENV}-wroom.com/locale/`,
116
121
  CustomTypeService: `https://api.internal.${process.env.SM_ENV}-wroom.com/custom-type/`,
122
+ GitService: `https://api.internal.${process.env.SM_ENV}-wroom.com/git/`,
117
123
  };
118
124
  }
119
125
 
@@ -131,6 +137,7 @@ If you didn't intend to run Slice Machine this way, stop it immediately and unse
131
137
  RepositoryService: "https://api.internal.prismic.io/repository/",
132
138
  LocaleService: "https://api.internal.prismic.io/locale/",
133
139
  CustomTypeService: "https://api.internal.prismic.io/custom-type/",
140
+ GitService: "https://api.internal.prismic.io/git/",
134
141
  };
135
142
  }
136
143
  }
@@ -83,6 +83,34 @@ type PrismicRepositoryManagerFetchEnvironmentsReturnType = {
83
83
  environments?: Environment[];
84
84
  };
85
85
 
86
+ const GitIntegrationsSchema = z.object({
87
+ integrations: z.array(
88
+ z.discriminatedUnion("status", [
89
+ z.object({
90
+ id: z.string(),
91
+ status: z.literal("connected"),
92
+ owner: z.string(),
93
+ repositories: z.array(
94
+ z.object({
95
+ name: z.string(),
96
+ fullName: z.string(),
97
+ }),
98
+ ),
99
+ }),
100
+ z.object({
101
+ id: z.string(),
102
+ status: z.literal("broken"),
103
+ owner: z.string().optional(),
104
+ repositories: z.tuple([]),
105
+ }),
106
+ ]),
107
+ ),
108
+ });
109
+
110
+ const GitIntegrationTokenSchema = z.object({
111
+ token: z.string(),
112
+ });
113
+
86
114
  export class PrismicRepositoryManager extends BaseManager {
87
115
  // TODO: Add methods for repository-specific actions. E.g. creating a
88
116
  // new repository.
@@ -705,6 +733,68 @@ export class PrismicRepositoryManager extends BaseManager {
705
733
  }
706
734
  }
707
735
 
736
+ async fetchGitIntegrations(): Promise<z.infer<typeof GitIntegrationsSchema>> {
737
+ const repositoryName = await this.project.getRepositoryName();
738
+
739
+ const url = new URL("integrations", API_ENDPOINTS.GitService);
740
+ url.searchParams.set("repository", repositoryName);
741
+
742
+ const res = await this._fetch({ url });
743
+
744
+ if (!res.ok) {
745
+ const text = await res.text();
746
+ throw new Error(
747
+ `Failed to fetch integrations for repository ${repositoryName}`,
748
+ { cause: text },
749
+ );
750
+ }
751
+
752
+ const json = await res.json();
753
+ const { value, error } = decode(GitIntegrationsSchema, json);
754
+
755
+ if (error) {
756
+ throw new UnexpectedDataError(
757
+ `Failed to decode integrations: ${error.errors.join(", ")}`,
758
+ );
759
+ }
760
+
761
+ return value;
762
+ }
763
+
764
+ async fetchGitIntegrationToken(args: {
765
+ integrationId: string;
766
+ }): Promise<z.infer<typeof GitIntegrationTokenSchema>> {
767
+ const { integrationId } = args;
768
+ const repositoryName = await this.project.getRepositoryName();
769
+
770
+ const url = new URL(
771
+ `integrations/${integrationId}/token`,
772
+ API_ENDPOINTS.GitService,
773
+ );
774
+ url.searchParams.set("repository", repositoryName);
775
+
776
+ const res = await this._fetch({ url, method: "POST" });
777
+
778
+ if (!res.ok) {
779
+ const text = await res.text();
780
+ throw new Error(
781
+ `Failed to fetch token for integration ${integrationId}`,
782
+ { cause: text },
783
+ );
784
+ }
785
+
786
+ const json = await res.json();
787
+ const { value, error } = decode(GitIntegrationTokenSchema, json);
788
+
789
+ if (error) {
790
+ throw new UnexpectedDataError(
791
+ `Failed to decode integration token: ${error.errors.join(", ")}`,
792
+ );
793
+ }
794
+
795
+ return value;
796
+ }
797
+
708
798
  private _decodeLimitOrThrow(
709
799
  potentialLimit: unknown,
710
800
  statusCode: number,
@@ -20,6 +20,8 @@ import {
20
20
  SliceRenameHookData,
21
21
  SliceUpdateHook,
22
22
  } from "@slicemachine/plugin-kit";
23
+ import { writeSliceFile } from "@slicemachine/plugin-kit/fs";
24
+ import pLimit from "p-limit";
23
25
 
24
26
  import { DecodeError } from "../../lib/DecodeError";
25
27
  import { assertPluginsInitialized } from "../../lib/assertPluginsInitialized";
@@ -98,6 +100,22 @@ type SliceMachineManagerReadSliceScreenshotArgs = {
98
100
  variationID: string;
99
101
  };
100
102
 
103
+ type SliceFile = {
104
+ path: string;
105
+ contents: string | Buffer; // String for plain text files, Buffer for binary files
106
+ isBinary: boolean;
107
+ };
108
+
109
+ type SliceMachineManagerWriteSliceFilesArgs = {
110
+ libraryID: string;
111
+ sliceID: string;
112
+ files: SliceFile[];
113
+ };
114
+
115
+ type SliceMachineManagerWriteSliceFilesReturnType = {
116
+ errors: (HookError | DecodeError)[];
117
+ };
118
+
101
119
  type SliceMachineManagerReadSliceScreenshotReturnType = {
102
120
  data: Buffer | undefined;
103
121
  errors: (DecodeError | HookError)[];
@@ -1126,4 +1144,78 @@ export class SlicesManager extends BaseManager {
1126
1144
 
1127
1145
  return { errors: customTypeReadErrors };
1128
1146
  }
1147
+
1148
+ async writeSliceFiles(
1149
+ args: SliceMachineManagerWriteSliceFilesArgs,
1150
+ ): Promise<SliceMachineManagerWriteSliceFilesReturnType> {
1151
+ assertPluginsInitialized(this.sliceMachinePluginRunner);
1152
+
1153
+ const { libraryID, sliceID, files } = args;
1154
+
1155
+ // Read the slice model to get helpers
1156
+ const { model, errors: readSliceErrors } = await this.readSlice({
1157
+ libraryID,
1158
+ sliceID,
1159
+ });
1160
+
1161
+ if (!model) {
1162
+ return {
1163
+ errors: readSliceErrors,
1164
+ };
1165
+ }
1166
+
1167
+ // Write each file using writeSliceFile from plugin-kit with bounded concurrency
1168
+ const errors: HookError[] = [];
1169
+ const helpers = this.sliceMachinePluginRunner.rawHelpers;
1170
+ const limit = pLimit(8);
1171
+ await Promise.all(
1172
+ files.map((file) =>
1173
+ limit(async () => {
1174
+ try {
1175
+ const writtenPath = await writeSliceFile({
1176
+ libraryID,
1177
+ model,
1178
+ filename: file.path,
1179
+ contents: file.contents,
1180
+ helpers,
1181
+ });
1182
+ console.info(
1183
+ `Successfully wrote file: ${file.path} -> ${writtenPath}`,
1184
+ );
1185
+ } catch (error) {
1186
+ const errorMessage =
1187
+ error instanceof Error
1188
+ ? error.message
1189
+ : `Failed to write file ${file.path}`;
1190
+
1191
+ const errorStack = error instanceof Error ? error.stack : undefined;
1192
+ console.error(`Error writing file ${file.path}:`, errorMessage);
1193
+ if (errorStack) {
1194
+ console.error(`Stack trace:`, errorStack);
1195
+ }
1196
+
1197
+ const owner =
1198
+ this.sliceMachinePluginRunner?.hooksForType(
1199
+ "slice:asset:update",
1200
+ )[0]?.meta.owner ?? "SlicesManager";
1201
+
1202
+ errors.push(
1203
+ new HookError(
1204
+ {
1205
+ id: "writeSliceFile",
1206
+ type: "slice:asset:update",
1207
+ owner,
1208
+ },
1209
+ error,
1210
+ ),
1211
+ );
1212
+ }
1213
+ }),
1214
+ ),
1215
+ );
1216
+
1217
+ return {
1218
+ errors,
1219
+ };
1220
+ }
1129
1221
  }
@@ -55,6 +55,13 @@ export const SegmentEventType = {
55
55
  mcp_promo_link_clicked: "mcp:promo-link-clicked",
56
56
  info_banner_dismissed: "info-banner:dismissed",
57
57
  info_banner_button_clicked: "info-banner:button-clicked",
58
+ slice_library_opened: "slice-library:opened",
59
+ slice_library_projects_listed: "slice-library:projects-listed",
60
+ slice_library_slice_selected: "slice-library:slice-selected",
61
+ slice_library_fetching_started: "slice-library:fetching-started",
62
+ slice_library_fetching_ended: "slice-library:fetching-ended",
63
+ slice_library_import_started: "slice-library:import-started",
64
+ slice_library_import_ended: "slice-library:import-ended",
58
65
  } as const;
59
66
  type SegmentEventTypes =
60
67
  (typeof SegmentEventType)[keyof typeof SegmentEventType];
@@ -127,6 +134,20 @@ export const HumanSegmentEventType = {
127
134
  "SliceMachine Info Banner Dismissed",
128
135
  [SegmentEventType.info_banner_button_clicked]:
129
136
  "SliceMachine Info Banner Button Clicked",
137
+ [SegmentEventType.slice_library_opened]:
138
+ "SliceMachine Slice Library - Opened",
139
+ [SegmentEventType.slice_library_projects_listed]:
140
+ "SliceMachine Slice Library - Projects Listed",
141
+ [SegmentEventType.slice_library_slice_selected]:
142
+ "SliceMachine Slice Library - Slice Selected",
143
+ [SegmentEventType.slice_library_fetching_started]:
144
+ "SliceMachine Slice Library - Slice Fetching Started",
145
+ [SegmentEventType.slice_library_fetching_ended]:
146
+ "SliceMachine Slice Library - Slice Fetching Ended",
147
+ [SegmentEventType.slice_library_import_started]:
148
+ "SliceMachine Slice Library - Slice Import Started",
149
+ [SegmentEventType.slice_library_import_ended]:
150
+ "SliceMachine Slice Library - Slice Import Ended",
130
151
  } as const;
131
152
 
132
153
  export type HumanSegmentEventTypes =
@@ -301,6 +322,7 @@ type SliceCreatedSegmentEvent = SegmentEvent<
301
322
  | { mode: "figma-to-slice" }
302
323
  | { mode: "manual" }
303
324
  | { mode: "template"; sliceTemplate: string }
325
+ | { mode: "import" }
304
326
  )
305
327
  >;
306
328
 
@@ -505,6 +527,64 @@ type InfoBannerButtonClicked = SegmentEvent<
505
527
  }
506
528
  >;
507
529
 
530
+ type SliceLibraryOpened = SegmentEvent<
531
+ typeof SegmentEventType.slice_library_opened
532
+ >;
533
+ type SliceLibraryProjectsListed = SegmentEvent<
534
+ typeof SegmentEventType.slice_library_projects_listed,
535
+ {
536
+ repositories_count: number;
537
+ }
538
+ >;
539
+ type SliceLibrarySliceSelected = SegmentEvent<
540
+ typeof SegmentEventType.slice_library_slice_selected,
541
+ {
542
+ slices_count: number;
543
+ source_project_id: string;
544
+ destination_project_id: string;
545
+ }
546
+ >;
547
+ type SliceLibraryFetchingStarted = SegmentEvent<
548
+ typeof SegmentEventType.slice_library_fetching_started,
549
+ {
550
+ source_project_id: string;
551
+ }
552
+ >;
553
+ type SliceLibraryFetchingEnded = SegmentEvent<
554
+ typeof SegmentEventType.slice_library_fetching_ended,
555
+ | {
556
+ error: false;
557
+ slices_count: number;
558
+ source_project_id: string;
559
+ }
560
+ | {
561
+ error: true;
562
+ slices_count?: never;
563
+ source_project_id: string;
564
+ }
565
+ >;
566
+ type SliceLibraryImportStarted = SegmentEvent<
567
+ typeof SegmentEventType.slice_library_import_started,
568
+ {
569
+ source_project_id: string;
570
+ }
571
+ >;
572
+ type SliceLibraryImportEnded = SegmentEvent<
573
+ typeof SegmentEventType.slice_library_import_ended,
574
+ | {
575
+ error: false;
576
+ slices_count: number;
577
+ source_project_id: string;
578
+ destination_project_id: string;
579
+ }
580
+ | {
581
+ error: true;
582
+ slices_count?: never;
583
+ source_project_id: string;
584
+ destination_project_id: string;
585
+ }
586
+ >;
587
+
508
588
  export type SegmentEvents =
509
589
  | CommandInitStartSegmentEvent
510
590
  | CommandInitIdentifySegmentEvent
@@ -550,4 +630,11 @@ export type SegmentEvents =
550
630
  | SidebarLinkClicked
551
631
  | McpPromoLinkClicked
552
632
  | InfoBannerDismissed
553
- | InfoBannerButtonClicked;
633
+ | InfoBannerButtonClicked
634
+ | SliceLibraryOpened
635
+ | SliceLibraryProjectsListed
636
+ | SliceLibrarySliceSelected
637
+ | SliceLibraryFetchingStarted
638
+ | SliceLibraryFetchingEnded
639
+ | SliceLibraryImportStarted
640
+ | SliceLibraryImportEnded;