@flanksource/clicky-ui 0.3.34 → 0.3.36
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/README.md +4 -0
- package/dist/ai.cjs +4 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +4 -0
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentThread.d.ts +1 -1
- package/dist/comments/CommentThreadList.d.ts +1 -1
- package/dist/comments/MentionTextarea.d.ts +1 -1
- package/dist/comments/comment-context.d.ts +4 -4
- package/dist/comments/comment-fixtures.d.ts +1 -1
- package/dist/comments/comment-types.d.ts +1 -1
- package/dist/components/AccordionList.d.ts +1 -1
- package/dist/components/ComboboxControl.d.ts +1 -1
- package/dist/components/ComboboxMenu.d.ts +2 -2
- package/dist/components/ComboboxTags.cjs +41 -11
- package/dist/components/ComboboxTags.cjs.map +1 -1
- package/dist/components/ComboboxTags.d.ts +6 -0
- package/dist/components/ComboboxTags.d.ts.map +1 -1
- package/dist/components/ComboboxTags.js +41 -11
- package/dist/components/ComboboxTags.js.map +1 -1
- package/dist/components/DateField.d.ts +3 -3
- package/dist/components/DatePicker.d.ts +3 -3
- package/dist/components/DateTimePicker.d.ts +3 -3
- package/dist/components/ErrorWrapper.d.ts +2 -2
- package/dist/components/Field.d.ts +1 -1
- package/dist/components/FilterBar.d.ts +1 -1
- package/dist/components/FormLookupProvider.d.ts +1 -1
- package/dist/components/FormatOptionsDropdown.d.ts +1 -1
- package/dist/components/IconButton.d.ts +3 -3
- package/dist/components/InputField.d.ts +2 -2
- package/dist/components/ItemActions.d.ts +1 -1
- package/dist/components/JsonSchemaForm.cjs +17 -36
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +17 -36
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/ListMenu.d.ts +1 -1
- package/dist/components/MultiSelect.d.ts +1 -1
- package/dist/components/SearchInput.d.ts +1 -1
- package/dist/components/SegmentedControl.d.ts +1 -1
- package/dist/components/SplitButton.d.ts +1 -1
- package/dist/components/Switch.d.ts +1 -1
- package/dist/components/TreePickerField.cjs +11 -2
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +13 -4
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +11 -2
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/UnitStepControls.d.ts +1 -1
- package/dist/components/button.d.ts +3 -3
- package/dist/components/combobox-types.d.ts +1 -1
- package/dist/components/density-switcher.d.ts +1 -1
- package/dist/components/filter-bar-context.d.ts +1 -1
- package/dist/components/filter-bar-field-utils.d.ts +2 -2
- package/dist/components/form-lookup-context.d.ts +1 -1
- package/dist/components/icon-menu-picker.d.ts +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +44 -21
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-accordion-array.js +47 -24
- package/dist/components/json-schema-form-accordion-array.js.map +1 -1
- package/dist/components/json-schema-form-array.cjs +53 -30
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +54 -31
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-cards-array.cjs +32 -22
- package/dist/components/json-schema-form-cards-array.cjs.map +1 -1
- package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-cards-array.js +33 -23
- package/dist/components/json-schema-form-cards-array.js.map +1 -1
- package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts +44 -0
- package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts.map +1 -0
- package/dist/components/json-schema-form-discriminator.d.ts +1 -1
- package/dist/components/json-schema-form-errors.cjs +5 -1
- package/dist/components/json-schema-form-errors.cjs.map +1 -1
- package/dist/components/json-schema-form-errors.d.ts +2 -1
- package/dist/components/json-schema-form-errors.d.ts.map +1 -1
- package/dist/components/json-schema-form-errors.js +6 -2
- package/dist/components/json-schema-form-errors.js.map +1 -1
- package/dist/components/json-schema-form-extensions.d.ts +1 -1
- package/dist/components/json-schema-form-filter-input.cjs +50 -0
- package/dist/components/json-schema-form-filter-input.cjs.map +1 -0
- package/dist/components/json-schema-form-filter-input.d.ts +5 -0
- package/dist/components/json-schema-form-filter-input.d.ts.map +1 -0
- package/dist/components/json-schema-form-filter-input.js +50 -0
- package/dist/components/json-schema-form-filter-input.js.map +1 -0
- package/dist/components/json-schema-form-filter.cjs +49 -0
- package/dist/components/json-schema-form-filter.cjs.map +1 -0
- package/dist/components/json-schema-form-filter.d.ts +8 -0
- package/dist/components/json-schema-form-filter.d.ts.map +1 -0
- package/dist/components/json-schema-form-filter.js +49 -0
- package/dist/components/json-schema-form-filter.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +84 -17
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +1 -1
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +84 -17
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-list-array.cjs +16 -5
- package/dist/components/json-schema-form-list-array.cjs.map +1 -1
- package/dist/components/json-schema-form-list-array.d.ts +2 -1
- package/dist/components/json-schema-form-list-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-list-array.js +16 -5
- package/dist/components/json-schema-form-list-array.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +239 -85
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts +2 -2
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +241 -87
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-preferences.cjs +1 -1
- package/dist/components/json-schema-form-preferences.cjs.map +1 -1
- package/dist/components/json-schema-form-preferences.d.ts +1 -1
- package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
- package/dist/components/json-schema-form-preferences.js +1 -1
- package/dist/components/json-schema-form-preferences.js.map +1 -1
- package/dist/components/json-schema-form-properties-errors.fixtures.d.ts +14 -0
- package/dist/components/json-schema-form-properties-errors.fixtures.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties-size.cjs +19 -0
- package/dist/components/json-schema-form-properties-size.cjs.map +1 -0
- package/dist/components/json-schema-form-properties-size.d.ts +4 -0
- package/dist/components/json-schema-form-properties-size.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties-size.js +19 -0
- package/dist/components/json-schema-form-properties-size.js.map +1 -0
- package/dist/components/json-schema-form-properties.cjs +305 -0
- package/dist/components/json-schema-form-properties.cjs.map +1 -0
- package/dist/components/json-schema-form-properties.d.ts +20 -0
- package/dist/components/json-schema-form-properties.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties.fixtures.d.ts +157 -0
- package/dist/components/json-schema-form-properties.fixtures.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties.js +305 -0
- package/dist/components/json-schema-form-properties.js.map +1 -0
- package/dist/components/json-schema-form-property-actions-context.cjs +6 -0
- package/dist/components/json-schema-form-property-actions-context.cjs.map +1 -0
- package/dist/components/json-schema-form-property-actions-context.d.ts +2 -0
- package/dist/components/json-schema-form-property-actions-context.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-actions-context.js +6 -0
- package/dist/components/json-schema-form-property-actions-context.js.map +1 -0
- package/dist/components/json-schema-form-property-collection.cjs +31 -0
- package/dist/components/json-schema-form-property-collection.cjs.map +1 -0
- package/dist/components/json-schema-form-property-collection.d.ts +6 -0
- package/dist/components/json-schema-form-property-collection.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-collection.js +31 -0
- package/dist/components/json-schema-form-property-collection.js.map +1 -0
- package/dist/components/json-schema-form-property-draft.cjs +45 -0
- package/dist/components/json-schema-form-property-draft.cjs.map +1 -0
- package/dist/components/json-schema-form-property-draft.d.ts +8 -0
- package/dist/components/json-schema-form-property-draft.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-draft.js +45 -0
- package/dist/components/json-schema-form-property-draft.js.map +1 -0
- package/dist/components/json-schema-form-property-preview.cjs +68 -0
- package/dist/components/json-schema-form-property-preview.cjs.map +1 -0
- package/dist/components/json-schema-form-property-preview.d.ts +7 -0
- package/dist/components/json-schema-form-property-preview.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-preview.js +68 -0
- package/dist/components/json-schema-form-property-preview.js.map +1 -0
- package/dist/components/json-schema-form-property-selection.cjs +89 -0
- package/dist/components/json-schema-form-property-selection.cjs.map +1 -0
- package/dist/components/json-schema-form-property-selection.d.ts +6 -0
- package/dist/components/json-schema-form-property-selection.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-selection.js +89 -0
- package/dist/components/json-schema-form-property-selection.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +41 -4
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +42 -5
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +2 -0
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +2 -0
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-runtime-types.d.ts +222 -0
- package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -0
- package/dist/components/json-schema-form-table-array.cjs +82 -51
- package/dist/components/json-schema-form-table-array.cjs.map +1 -1
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-table-array.js +84 -53
- package/dist/components/json-schema-form-table-array.js.map +1 -1
- package/dist/components/json-schema-form-template-menu.d.ts +1 -1
- package/dist/components/json-schema-form-template.d.ts +1 -1
- package/dist/components/json-schema-form-types.d.ts +7 -179
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +10 -9
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +11 -1
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +10 -9
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/loading.d.ts +4 -4
- package/dist/components/mdx-editor-callout.d.ts +1 -1
- package/dist/components/mdx-editor-options.d.ts +1 -1
- package/dist/components/select.d.ts +3 -3
- package/dist/components/theme-switcher.d.ts +1 -1
- package/dist/components/use-list-menu-selection.d.ts +1 -1
- package/dist/components/useComboboxLayout.d.ts +1 -1
- package/dist/components/workload-picker-utils.d.ts +1 -1
- package/dist/data/Avatar.d.ts +1 -1
- package/dist/data/AvatarBadge.d.ts +1 -1
- package/dist/data/Badge.d.ts +1 -1
- package/dist/data/Callout.d.ts +1 -1
- package/dist/data/DataTable.cjs +575 -435
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +21 -13
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.grouping.d.ts +1 -1
- package/dist/data/DataTable.js +575 -435
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/ExecutionTree.d.ts +1 -1
- package/dist/data/FilterPill.d.ts +1 -1
- package/dist/data/FixtureEditor/RawFenceEditor.d.ts +1 -1
- package/dist/data/FixtureEditor/types.d.ts +1 -1
- package/dist/data/Gauge.d.ts +1 -1
- package/dist/data/GaugeHoverCard.d.ts +1 -1
- package/dist/data/Icon.d.ts +1 -1
- package/dist/data/KeyValueList.d.ts +1 -1
- package/dist/data/MarkdownEditor.d.ts +1 -1
- package/dist/data/MatrixTable.d.ts +1 -1
- package/dist/data/ObjectGraph.d.ts +1 -1
- package/dist/data/ProgressBars.d.ts +1 -1
- package/dist/data/Properties.cjs +86 -35
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.d.ts +2 -2
- package/dist/data/Properties.d.ts.map +1 -1
- package/dist/data/Properties.js +87 -36
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/RadialGauge.d.ts +1 -1
- package/dist/data/SchemaViewer.d.ts +1 -1
- package/dist/data/SortableHeader.d.ts +1 -1
- package/dist/data/StatStrip.d.ts +1 -1
- package/dist/data/StatusBreakdown.d.ts +1 -1
- package/dist/data/TabButton.d.ts +1 -1
- package/dist/data/TaskHeaderExtras.cjs +35 -0
- package/dist/data/TaskHeaderExtras.cjs.map +1 -0
- package/dist/data/TaskHeaderExtras.d.ts +27 -0
- package/dist/data/TaskHeaderExtras.d.ts.map +1 -0
- package/dist/data/TaskHeaderExtras.js +35 -0
- package/dist/data/TaskHeaderExtras.js.map +1 -0
- package/dist/data/TaskManager.cjs +27 -23
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts +13 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +27 -23
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +17 -34
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +18 -35
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProcessDetails.cjs +7 -25
- package/dist/data/TaskProcessDetails.cjs.map +1 -1
- package/dist/data/TaskProcessDetails.d.ts +2 -1
- package/dist/data/TaskProcessDetails.d.ts.map +1 -1
- package/dist/data/TaskProcessDetails.js +7 -25
- package/dist/data/TaskProcessDetails.js.map +1 -1
- package/dist/data/TaskProcessMetadata.cjs +50 -0
- package/dist/data/TaskProcessMetadata.cjs.map +1 -0
- package/dist/data/TaskProcessMetadata.d.ts +20 -0
- package/dist/data/TaskProcessMetadata.d.ts.map +1 -0
- package/dist/data/TaskProcessMetadata.js +50 -0
- package/dist/data/TaskProcessMetadata.js.map +1 -0
- package/dist/data/TaskProgress.cjs +41 -41
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +15 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +41 -41
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskResourceReadings.cjs +42 -0
- package/dist/data/TaskResourceReadings.cjs.map +1 -0
- package/dist/data/TaskResourceReadings.d.ts +6 -0
- package/dist/data/TaskResourceReadings.d.ts.map +1 -0
- package/dist/data/TaskResourceReadings.js +42 -0
- package/dist/data/TaskResourceReadings.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +36 -1
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TaskStreamTabs.cjs +78 -0
- package/dist/data/TaskStreamTabs.cjs.map +1 -0
- package/dist/data/TaskStreamTabs.d.ts +35 -0
- package/dist/data/TaskStreamTabs.d.ts.map +1 -0
- package/dist/data/TaskStreamTabs.js +78 -0
- package/dist/data/TaskStreamTabs.js.map +1 -0
- package/dist/data/Timeline.d.ts +1 -1
- package/dist/data/Tree.d.ts +1 -1
- package/dist/data/TreeGroupHeader.d.ts +1 -1
- package/dist/data/TreeNode.d.ts +1 -1
- package/dist/data/Version.d.ts +3 -3
- package/dist/data/ai/ChatWindow.cjs +22 -12
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +22 -12
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
- package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +2 -0
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +2 -0
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/PolicyTree.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +4 -0
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/SessionChatComposer.d.ts +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.cjs +9 -0
- package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.approvals-model.d.ts +17 -0
- package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.approvals-model.js +9 -0
- package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -0
- package/dist/data/ai/SessionInspector.approvals.cjs +143 -0
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.approvals.d.ts +13 -0
- package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.approvals.js +143 -0
- package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
- package/dist/data/ai/SessionInspector.cjs +21 -8
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.d.ts +6 -2
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
- package/dist/data/ai/SessionInspector.js +21 -8
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.panel-parts.cjs +34 -0
- package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.panel-parts.d.ts +19 -0
- package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.panel-parts.js +34 -0
- package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
- package/dist/data/ai/SessionInspector.panel-values.cjs +18 -0
- package/dist/data/ai/SessionInspector.panel-values.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.panel-values.d.ts +13 -0
- package/dist/data/ai/SessionInspector.panel-values.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.panel-values.js +18 -0
- package/dist/data/ai/SessionInspector.panel-values.js.map +1 -0
- package/dist/data/ai/SessionInspector.panels.cjs +41 -99
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
- package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.panels.js +13 -71
- package/dist/data/ai/SessionInspector.panels.js.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
- package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +1 -0
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +13 -5
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +1 -0
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.d.ts +1 -1
- package/dist/data/cache-browser/adapter.d.ts +1 -1
- package/dist/data/cells/CellFilterActions.d.ts +1 -1
- package/dist/data/cells/EntityCell.d.ts +1 -1
- package/dist/data/cells/tag-utils.d.ts +1 -1
- package/dist/data/chat/Chat.cjs +42 -46
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +16 -5
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +43 -47
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ModelSelector.d.ts +1 -1
- package/dist/data/chat/PromptInput.cjs +13 -0
- package/dist/data/chat/PromptInput.cjs.map +1 -1
- package/dist/data/chat/PromptInput.d.ts +8 -2
- package/dist/data/chat/PromptInput.d.ts.map +1 -1
- package/dist/data/chat/PromptInput.js +14 -1
- package/dist/data/chat/PromptInput.js.map +1 -1
- package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
- package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
- package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
- package/dist/data/chat/tool-render/adapter.d.ts +1 -1
- package/dist/data/chat/tool-render/context.d.ts +1 -1
- package/dist/data/chat/tool-render/defaults.d.ts +1 -1
- package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
- package/dist/data/chat/tool-render/summary.d.ts +1 -1
- package/dist/data/chat/types.d.ts +1 -1
- package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
- package/dist/data/data-table-server-filters.d.ts +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
- package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
- package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
- package/dist/data/git/GitChangeList.d.ts +1 -1
- package/dist/data/icon-fallback.d.ts +1 -1
- package/dist/data/properties-context.cjs +6 -0
- package/dist/data/properties-context.cjs.map +1 -0
- package/dist/data/properties-context.d.ts +7 -0
- package/dist/data/properties-context.d.ts.map +1 -0
- package/dist/data/properties-context.js +6 -0
- package/dist/data/properties-context.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +7 -3
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +7 -3
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/task-copy.cjs +1 -1
- package/dist/data/task-copy.cjs.map +1 -1
- package/dist/data/task-copy.js +1 -1
- package/dist/data/task-copy.js.map +1 -1
- package/dist/data/task-metadata.cjs +36 -0
- package/dist/data/task-metadata.cjs.map +1 -0
- package/dist/data/task-metadata.d.ts +39 -0
- package/dist/data/task-metadata.d.ts.map +1 -0
- package/dist/data/task-metadata.js +36 -0
- package/dist/data/task-metadata.js.map +1 -0
- package/dist/data/task-resource-summary.cjs +30 -0
- package/dist/data/task-resource-summary.cjs.map +1 -0
- package/dist/data/task-resource-summary.d.ts +15 -0
- package/dist/data/task-resource-summary.d.ts.map +1 -0
- package/dist/data/task-resource-summary.js +30 -0
- package/dist/data/task-resource-summary.js.map +1 -0
- package/dist/data/task-status.cjs +8 -2
- package/dist/data/task-status.cjs.map +1 -1
- package/dist/data/task-status.d.ts +3 -0
- package/dist/data/task-status.d.ts.map +1 -1
- package/dist/data/task-status.js +8 -2
- package/dist/data/task-status.js.map +1 -1
- package/dist/data/task-streams.cjs +39 -0
- package/dist/data/task-streams.cjs.map +1 -0
- package/dist/data/task-streams.d.ts +60 -0
- package/dist/data/task-streams.d.ts.map +1 -0
- package/dist/data/task-streams.js +39 -0
- package/dist/data/task-streams.js.map +1 -0
- package/dist/data/task-work-progress.cjs +24 -0
- package/dist/data/task-work-progress.cjs.map +1 -0
- package/dist/data/task-work-progress.d.ts +21 -0
- package/dist/data/task-work-progress.d.ts.map +1 -0
- package/dist/data/task-work-progress.js +24 -0
- package/dist/data/task-work-progress.js.map +1 -0
- package/dist/data/test-runner/TestRunner.d.ts +1 -1
- package/dist/data/test-runner/adapter.d.ts +1 -1
- package/dist/data/test-runner/context.d.ts +1 -1
- package/dist/data/use-data-table-virtual.cjs +73 -0
- package/dist/data/use-data-table-virtual.cjs.map +1 -0
- package/dist/data/use-data-table-virtual.d.ts +40 -0
- package/dist/data/use-data-table-virtual.d.ts.map +1 -0
- package/dist/data/use-data-table-virtual.js +73 -0
- package/dist/data/use-data-table-virtual.js.map +1 -0
- package/dist/data/verification/VerificationResults.d.ts +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +14 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +6 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +14 -0
- package/dist/data.js.map +1 -1
- package/dist/expressions/lang/attributes.cjs +56 -0
- package/dist/expressions/lang/attributes.cjs.map +1 -0
- package/dist/expressions/lang/attributes.d.ts +22 -0
- package/dist/expressions/lang/attributes.d.ts.map +1 -0
- package/dist/expressions/lang/attributes.js +56 -0
- package/dist/expressions/lang/attributes.js.map +1 -0
- package/dist/expressions/lang/completion.cjs +164 -0
- package/dist/expressions/lang/completion.cjs.map +1 -0
- package/dist/expressions/lang/completion.d.ts +29 -0
- package/dist/expressions/lang/completion.d.ts.map +1 -0
- package/dist/expressions/lang/completion.js +164 -0
- package/dist/expressions/lang/completion.js.map +1 -0
- package/dist/expressions/lang/environment.cjs +115 -0
- package/dist/expressions/lang/environment.cjs.map +1 -0
- package/dist/expressions/lang/environment.d.ts +54 -0
- package/dist/expressions/lang/environment.d.ts.map +1 -0
- package/dist/expressions/lang/environment.js +115 -0
- package/dist/expressions/lang/environment.js.map +1 -0
- package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
- package/dist/expressions/lang/generated/index.cjs +18 -0
- package/dist/expressions/lang/generated/index.cjs.map +1 -0
- package/dist/expressions/lang/generated/index.d.ts +9 -0
- package/dist/expressions/lang/generated/index.d.ts.map +1 -0
- package/dist/expressions/lang/generated/index.js +18 -0
- package/dist/expressions/lang/generated/index.js.map +1 -0
- package/dist/expressions/lang/generated/languages.json.cjs +18 -0
- package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
- package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
- package/dist/expressions/lang/generated/languages.json.js +18 -0
- package/dist/expressions/lang/generated/languages.json.js.map +1 -0
- package/dist/expressions/lang/generated/spec.json.cjs +12 -0
- package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
- package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
- package/dist/expressions/lang/generated/spec.json.js +12 -0
- package/dist/expressions/lang/generated/spec.json.js.map +1 -0
- package/dist/expressions/lang/hover.cjs +106 -0
- package/dist/expressions/lang/hover.cjs.map +1 -0
- package/dist/expressions/lang/hover.d.ts +54 -0
- package/dist/expressions/lang/hover.d.ts.map +1 -0
- package/dist/expressions/lang/hover.js +106 -0
- package/dist/expressions/lang/hover.js.map +1 -0
- package/dist/expressions/lang/index.cjs +87 -0
- package/dist/expressions/lang/index.cjs.map +1 -0
- package/dist/expressions/lang/index.d.ts +65 -0
- package/dist/expressions/lang/index.d.ts.map +1 -0
- package/dist/expressions/lang/index.js +90 -0
- package/dist/expressions/lang/index.js.map +1 -0
- package/dist/expressions/lang/merge.cjs +52 -0
- package/dist/expressions/lang/merge.cjs.map +1 -0
- package/dist/expressions/lang/merge.d.ts +12 -0
- package/dist/expressions/lang/merge.d.ts.map +1 -0
- package/dist/expressions/lang/merge.js +52 -0
- package/dist/expressions/lang/merge.js.map +1 -0
- package/dist/expressions/lang/prefix.cjs +91 -0
- package/dist/expressions/lang/prefix.cjs.map +1 -0
- package/dist/expressions/lang/prefix.d.ts +36 -0
- package/dist/expressions/lang/prefix.d.ts.map +1 -0
- package/dist/expressions/lang/prefix.js +91 -0
- package/dist/expressions/lang/prefix.js.map +1 -0
- package/dist/expressions/lang/spec.d.ts +13 -0
- package/dist/expressions/lang/spec.d.ts.map +1 -0
- package/dist/expressions/lang/theme.cjs +97 -0
- package/dist/expressions/lang/theme.cjs.map +1 -0
- package/dist/expressions/lang/theme.d.ts +6 -0
- package/dist/expressions/lang/theme.d.ts.map +1 -0
- package/dist/expressions/lang/theme.js +97 -0
- package/dist/expressions/lang/theme.js.map +1 -0
- package/dist/expressions/lang/types.d.ts +81 -0
- package/dist/expressions/lang/types.d.ts.map +1 -0
- package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
- package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
- package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
- package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
- package/dist/expressions/playground/ExpressionPlayground.js +291 -0
- package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
- package/dist/expressions/playground/RunControls.cjs +51 -0
- package/dist/expressions/playground/RunControls.cjs.map +1 -0
- package/dist/expressions/playground/RunControls.d.ts +7 -0
- package/dist/expressions/playground/RunControls.d.ts.map +1 -0
- package/dist/expressions/playground/RunControls.js +51 -0
- package/dist/expressions/playground/RunControls.js.map +1 -0
- package/dist/expressions/playground/VerticalSplit.cjs +109 -0
- package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
- package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
- package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
- package/dist/expressions/playground/VerticalSplit.js +109 -0
- package/dist/expressions/playground/VerticalSplit.js.map +1 -0
- package/dist/expressions/playground/api.cjs +49 -0
- package/dist/expressions/playground/api.cjs.map +1 -0
- package/dist/expressions/playground/api.d.ts +53 -0
- package/dist/expressions/playground/api.d.ts.map +1 -0
- package/dist/expressions/playground/api.js +49 -0
- package/dist/expressions/playground/api.js.map +1 -0
- package/dist/expressions/playground/languages.cjs +88 -0
- package/dist/expressions/playground/languages.cjs.map +1 -0
- package/dist/expressions/playground/languages.d.ts +43 -0
- package/dist/expressions/playground/languages.d.ts.map +1 -0
- package/dist/expressions/playground/languages.js +88 -0
- package/dist/expressions/playground/languages.js.map +1 -0
- package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
- package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
- package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/GraphPanel.js +72 -0
- package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
- package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
- package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
- package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/ResultPanel.js +82 -0
- package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
- package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
- package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
- package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/SpecPanel.js +76 -0
- package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
- package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
- package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
- package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/TokensPanel.js +72 -0
- package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
- package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
- package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
- package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
- package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
- package/dist/expressions/playground/panels/graphNodes.js +35 -0
- package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
- package/dist/expressions/playground/runAction.cjs +12 -0
- package/dist/expressions/playground/runAction.cjs.map +1 -0
- package/dist/expressions/playground/runAction.d.ts +15 -0
- package/dist/expressions/playground/runAction.d.ts.map +1 -0
- package/dist/expressions/playground/runAction.js +12 -0
- package/dist/expressions/playground/runAction.js.map +1 -0
- package/dist/expressions/playground/runShortcut.cjs +9 -0
- package/dist/expressions/playground/runShortcut.cjs.map +1 -0
- package/dist/expressions/playground/runShortcut.d.ts +2 -0
- package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
- package/dist/expressions/playground/runShortcut.js +9 -0
- package/dist/expressions/playground/runShortcut.js.map +1 -0
- package/dist/expressions/playground/useEditorTheme.cjs +40 -0
- package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
- package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
- package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
- package/dist/expressions/playground/useEditorTheme.js +23 -0
- package/dist/expressions/playground/useEditorTheme.js.map +1 -0
- package/dist/expressions/playground/useEvaluator.cjs +72 -0
- package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
- package/dist/expressions/playground/useEvaluator.d.ts +25 -0
- package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
- package/dist/expressions/playground/useEvaluator.js +72 -0
- package/dist/expressions/playground/useEvaluator.js.map +1 -0
- package/dist/expressions/playground/useParsedInput.cjs +22 -0
- package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
- package/dist/expressions/playground/useParsedInput.d.ts +20 -0
- package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
- package/dist/expressions/playground/useParsedInput.js +22 -0
- package/dist/expressions/playground/useParsedInput.js.map +1 -0
- package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
- package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
- package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
- package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
- package/dist/expressions/playground/verticalSplitModel.js +11 -0
- package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
- package/dist/expressions/playground.cjs +18 -0
- package/dist/expressions/playground.cjs.map +1 -0
- package/dist/expressions/playground.d.ts +18 -0
- package/dist/expressions/playground.d.ts.map +1 -0
- package/dist/expressions/playground.js +18 -0
- package/dist/expressions/playground.js.map +1 -0
- package/dist/expressions.cjs +28 -0
- package/dist/expressions.cjs.map +1 -0
- package/dist/expressions.d.ts +10 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +28 -0
- package/dist/expressions.js.map +1 -0
- package/dist/hooks/density-provider.d.ts +1 -1
- package/dist/hooks/theme-provider.d.ts +1 -1
- package/dist/hooks/use-density.d.ts +1 -1
- package/dist/hooks/use-resource-clock.cjs +14 -0
- package/dist/hooks/use-resource-clock.cjs.map +1 -0
- package/dist/hooks/use-resource-clock.d.ts +2 -0
- package/dist/hooks/use-resource-clock.d.ts.map +1 -0
- package/dist/hooks/use-resource-clock.js +14 -0
- package/dist/hooks/use-resource-clock.js.map +1 -0
- package/dist/hooks/use-task-run.cjs +25 -18
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +26 -19
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/hooks/use-theme.d.ts +1 -1
- package/dist/icons/registry.d.ts +1 -1
- package/dist/icons/types.d.ts +1 -1
- package/dist/index.cjs +14 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.d.ts +1 -1
- package/dist/layout/AppShell.nav.drag.d.ts +1 -1
- package/dist/layout/AppSidebar.d.ts +1 -1
- package/dist/layout/Panel.d.ts +1 -1
- package/dist/layout/PanelFrame.d.ts +1 -1
- package/dist/layout/Section.d.ts +1 -1
- package/dist/layout/SplitPane.d.ts +1 -1
- package/dist/layout/Tabs.d.ts +1 -1
- package/dist/layout/Workspace.d.ts +1 -1
- package/dist/layout/Workspace.model.d.ts +1 -1
- package/dist/lib/combobox-values.d.ts +1 -1
- package/dist/monaco/MonacoEditor.cjs +3 -3
- package/dist/monaco/MonacoEditor.cjs.map +1 -1
- package/dist/monaco/MonacoEditor.js +2 -2
- package/dist/monaco/MonacoEditor.js.map +1 -1
- package/dist/monaco/types.d.ts +1 -1
- package/dist/monaco/use-monaco-worker.d.ts +1 -1
- package/dist/overlay/CellActions.d.ts +1 -1
- package/dist/overlay/CommandPalette.d.ts +2 -2
- package/dist/overlay/CommandPalette.model.d.ts +1 -1
- package/dist/overlay/CommandPaletteList.d.ts +1 -1
- package/dist/overlay/DropdownMenu.d.ts +1 -1
- package/dist/overlay/HoverCard.d.ts +1 -1
- package/dist/overlay/Modal.d.ts +2 -2
- package/dist/overlay/Toast.d.ts +1 -1
- package/dist/overlay/TourCard.d.ts +1 -1
- package/dist/overlay/TourProvider.d.ts +1 -1
- package/dist/overlay/dropdownMenuContext.d.ts +1 -1
- package/dist/overlay/toast-context.d.ts +2 -2
- package/dist/overlay/tour-context.d.ts +1 -1
- package/dist/overlay/tour-types.d.ts +1 -1
- package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
- package/dist/profiles/editor/profileBuilder.d.ts +1 -1
- package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
- package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
- package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
- package/dist/profiles/fields/profileFieldState.d.ts +1 -1
- package/dist/profiles/query/jsonPathSample.d.ts +1 -1
- package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
- package/dist/profiles/query/prometheusResults.d.ts +2 -2
- package/dist/rpc/EndpointList.d.ts +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +1 -1
- package/dist/rpc/OperationCatalog.d.ts +1 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +1 -1
- package/dist/rpc/OperationResultView.d.ts +1 -1
- package/dist/rpc/RouterProvider.d.ts +1 -1
- package/dist/rpc/SchemaActionForm.d.ts +1 -1
- package/dist/rpc/formMetadata.d.ts +1 -1
- package/dist/rpc/router.d.ts +1 -1
- package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
- package/dist/styles.css +1 -1
- package/package.json +21 -2
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { functionDocumentation, macroDocumentation } from "./hover.js";
|
|
2
|
+
import { pathFlavour, resolvePath, childEntries, pathExpression } from "./environment.js";
|
|
3
|
+
import { environmentPrefixAt } from "./prefix.js";
|
|
4
|
+
function registerCompletion(monaco, languageId, options) {
|
|
5
|
+
return monaco.languages.registerCompletionItemProvider(
|
|
6
|
+
languageId,
|
|
7
|
+
completionProvider(monaco, languageId, options)
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
function completionProvider(monaco, languageId, { spec, environment }) {
|
|
11
|
+
const items = catalogueItems(monaco, languageId, spec);
|
|
12
|
+
return {
|
|
13
|
+
// A dot must retrigger, or `k8s.` offers nothing until another key is hit.
|
|
14
|
+
triggerCharacters: ["."],
|
|
15
|
+
provideCompletionItems(model, position) {
|
|
16
|
+
const suggestions = environmentItems(
|
|
17
|
+
monaco,
|
|
18
|
+
model,
|
|
19
|
+
position,
|
|
20
|
+
languageId,
|
|
21
|
+
environment
|
|
22
|
+
);
|
|
23
|
+
const range = wordRange(model, position);
|
|
24
|
+
for (const item of items) suggestions.push({ ...item, range });
|
|
25
|
+
return { suggestions };
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function catalogueItems(monaco, languageId, spec) {
|
|
30
|
+
switch (pathFlavour(languageId)) {
|
|
31
|
+
case "cel":
|
|
32
|
+
return celCompletionItems(monaco, spec);
|
|
33
|
+
case "gotemplate":
|
|
34
|
+
return goTemplateCompletionItems(monaco, spec);
|
|
35
|
+
default:
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function environmentItems(monaco, model, position, languageId, environment) {
|
|
40
|
+
if (!environment) return [];
|
|
41
|
+
const document = environment();
|
|
42
|
+
if (document === void 0 || document === null) return [];
|
|
43
|
+
const prefix = environmentPrefixAt(model, position, languageId);
|
|
44
|
+
if (!prefix) return [];
|
|
45
|
+
const parent = resolvePath(document, prefix.segments);
|
|
46
|
+
if (parent === void 0) return [];
|
|
47
|
+
const kinds = monaco.languages.CompletionItemKind;
|
|
48
|
+
const range = {
|
|
49
|
+
startLineNumber: position.lineNumber,
|
|
50
|
+
endLineNumber: position.lineNumber,
|
|
51
|
+
startColumn: prefix.startColumn,
|
|
52
|
+
endColumn: prefix.endColumn
|
|
53
|
+
};
|
|
54
|
+
const typedHead = prefix.typed.slice(0, prefix.typed.length - prefix.leaf.length);
|
|
55
|
+
const items = [];
|
|
56
|
+
for (const entry of childEntries(parent)) {
|
|
57
|
+
const insertText = pathExpression(languageId, [...prefix.segments, entry.segment]);
|
|
58
|
+
if (insertText === null) continue;
|
|
59
|
+
items.push({
|
|
60
|
+
label: entry.key,
|
|
61
|
+
kind: entry.container ? kinds.Folder : kinds.Field,
|
|
62
|
+
insertText,
|
|
63
|
+
filterText: `${typedHead}${entry.key}`,
|
|
64
|
+
detail: `${entry.kind} · ${entry.summary}`,
|
|
65
|
+
// A key of the document being evaluated beats any catalogue entry: it is
|
|
66
|
+
// what the author came to the editor to write.
|
|
67
|
+
sortText: `0${entry.key}`,
|
|
68
|
+
range
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return items;
|
|
72
|
+
}
|
|
73
|
+
function celCompletionItems(monaco, spec) {
|
|
74
|
+
const kinds = monaco.languages.CompletionItemKind;
|
|
75
|
+
const items = [];
|
|
76
|
+
for (const fn of spec.cel.functions) {
|
|
77
|
+
items.push(buildFunctionItem(monaco, fn, celInsertText(fn), kinds.Function));
|
|
78
|
+
}
|
|
79
|
+
for (const macro of spec.cel.macros) {
|
|
80
|
+
items.push(buildMacroItem(monaco, macro));
|
|
81
|
+
}
|
|
82
|
+
for (const keyword of spec.cel.keywords) {
|
|
83
|
+
items.push({
|
|
84
|
+
label: keyword,
|
|
85
|
+
kind: kinds.Keyword,
|
|
86
|
+
insertText: keyword,
|
|
87
|
+
detail: "CEL keyword"
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
for (const type of spec.cel.types) {
|
|
91
|
+
items.push({ label: type, kind: kinds.TypeParameter, insertText: type, detail: "CEL type" });
|
|
92
|
+
}
|
|
93
|
+
return items;
|
|
94
|
+
}
|
|
95
|
+
function goTemplateCompletionItems(monaco, spec) {
|
|
96
|
+
const kinds = monaco.languages.CompletionItemKind;
|
|
97
|
+
const items = [];
|
|
98
|
+
for (const fn of spec.gotemplate.functions) {
|
|
99
|
+
items.push(buildFunctionItem(monaco, fn, fn.name, kinds.Function));
|
|
100
|
+
}
|
|
101
|
+
for (const builtin of spec.gotemplate.builtins) {
|
|
102
|
+
items.push({
|
|
103
|
+
label: builtin,
|
|
104
|
+
kind: kinds.Function,
|
|
105
|
+
insertText: builtin,
|
|
106
|
+
detail: "text/template builtin"
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
for (const keyword of spec.gotemplate.keywords) {
|
|
110
|
+
items.push({
|
|
111
|
+
label: keyword,
|
|
112
|
+
kind: kinds.Keyword,
|
|
113
|
+
insertText: keyword,
|
|
114
|
+
detail: "template keyword"
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return items;
|
|
118
|
+
}
|
|
119
|
+
function buildFunctionItem(monaco, fn, insertText, kind) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
const detail = fn.signature ?? ((_b = (_a = fn.overloads) == null ? void 0 : _a[0]) == null ? void 0 : _b.result);
|
|
122
|
+
return {
|
|
123
|
+
label: fn.name,
|
|
124
|
+
kind: fn.memberOnly ? monaco.languages.CompletionItemKind.Method : kind,
|
|
125
|
+
insertText,
|
|
126
|
+
...detail === void 0 ? {} : { detail },
|
|
127
|
+
documentation: { value: functionDocumentation(fn) },
|
|
128
|
+
filterText: fn.name,
|
|
129
|
+
// Un-namespaced names first: they are the short, common ones, and a
|
|
130
|
+
// namespace is easy to reach by typing its prefix.
|
|
131
|
+
sortText: fn.namespace ? `2${fn.name}` : `1${fn.name}`
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function buildMacroItem(monaco, macro) {
|
|
135
|
+
return {
|
|
136
|
+
label: macro.name,
|
|
137
|
+
kind: monaco.languages.CompletionItemKind.Keyword,
|
|
138
|
+
insertText: macro.name,
|
|
139
|
+
detail: `macro (${macro.argCount === 0 ? "variadic" : `${macro.argCount} args`})`,
|
|
140
|
+
documentation: { value: macroDocumentation(macro) },
|
|
141
|
+
filterText: macro.name,
|
|
142
|
+
sortText: `1${macro.name}`
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function celInsertText(fn) {
|
|
146
|
+
var _a, _b, _c, _d;
|
|
147
|
+
const arity = ((_b = (_a = fn.overloads) == null ? void 0 : _a[0]) == null ? void 0 : _b.args.length) ?? 0;
|
|
148
|
+
const receiver = ((_d = (_c = fn.overloads) == null ? void 0 : _c[0]) == null ? void 0 : _d.member) ? 1 : 0;
|
|
149
|
+
return arity - receiver === 0 ? `${fn.name}()` : `${fn.name}(`;
|
|
150
|
+
}
|
|
151
|
+
function wordRange(model, position) {
|
|
152
|
+
const word = model.getWordUntilPosition(position);
|
|
153
|
+
return {
|
|
154
|
+
startLineNumber: position.lineNumber,
|
|
155
|
+
endLineNumber: position.lineNumber,
|
|
156
|
+
startColumn: word.startColumn,
|
|
157
|
+
endColumn: word.endColumn
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export {
|
|
161
|
+
completionProvider,
|
|
162
|
+
registerCompletion
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sources":["../../../src/expressions/lang/completion.ts"],"sourcesContent":["import type * as monaco from \"monaco-editor\";\nimport type { GomplateSpec, Monaco, SpecFunction, SpecMacro } from \"./types\";\nimport { functionDocumentation, macroDocumentation } from \"./hover\";\nimport { childEntries, pathExpression, pathFlavour, resolvePath } from \"./environment\";\nimport { environmentPrefixAt } from \"./prefix\";\n\n/** Supplies the document expressions are evaluated against, on every request. */\nexport type EnvironmentSource = () => unknown;\n\nexport interface CompletionOptions {\n /** The catalogue to complete from — gomplate's, or a host's merged over it. */\n spec: GomplateSpec;\n environment?: EnvironmentSource | undefined;\n}\n\n/**\n * Registers completion for one language.\n *\n * The catalogue half is built once per registration, so a host that supplies\n * its own spec re-registers rather than mutating in place. The document half is\n * rebuilt per request, because the document is being edited alongside the\n * expression.\n */\nexport function registerCompletion(\n monaco: Monaco,\n languageId: string,\n options: CompletionOptions,\n) {\n return monaco.languages.registerCompletionItemProvider(\n languageId,\n completionProvider(monaco, languageId, options),\n );\n}\n\n/**\n * The provider `registerCompletion` installs, exposed so it can be driven\n * directly by a test over a real model rather than through Monaco's registry.\n */\nexport function completionProvider(\n monaco: Monaco,\n languageId: string,\n { spec, environment }: CompletionOptions,\n) {\n const items = catalogueItems(monaco, languageId, spec);\n return {\n // A dot must retrigger, or `k8s.` offers nothing until another key is hit.\n triggerCharacters: [\".\"],\n provideCompletionItems(model: monaco.editor.ITextModel, position: monaco.Position) {\n const suggestions: monaco.languages.CompletionItem[] = environmentItems(\n monaco,\n model,\n position,\n languageId,\n environment,\n );\n const range = wordRange(model, position);\n for (const item of items) suggestions.push({ ...item, range });\n return { suggestions };\n },\n };\n}\n\n/**\n * A completion item without its range. The range depends on the cursor, so it\n * is attached per request while the rest of the item is built once.\n */\ntype Item = Omit<monaco.languages.CompletionItem, \"range\">;\n\nfunction catalogueItems(monaco: Monaco, languageId: string, spec: GomplateSpec): Item[] {\n switch (pathFlavour(languageId)) {\n case \"cel\":\n return celCompletionItems(monaco, spec);\n case \"gotemplate\":\n return goTemplateCompletionItems(monaco, spec);\n default:\n // JSONPath's dialect has no catalogue to generate from; its completions\n // come entirely from the document.\n return [];\n }\n}\n\n/**\n * The keys reachable from the cursor's position in the document.\n *\n * Each item replaces the whole path typed so far with a freshly rendered one,\n * rather than appending to it, so what lands in the editor is always valid in\n * that language — quoting an awkward key, or dropping the suggestion entirely\n * where the language cannot express the path.\n */\nfunction environmentItems(\n monaco: Monaco,\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n languageId: string,\n environment: EnvironmentSource | undefined,\n): monaco.languages.CompletionItem[] {\n if (!environment) return [];\n const document = environment();\n if (document === undefined || document === null) return [];\n\n const prefix = environmentPrefixAt(model, position, languageId);\n if (!prefix) return [];\n\n const parent = resolvePath(document, prefix.segments);\n if (parent === undefined) return [];\n\n const kinds = monaco.languages.CompletionItemKind;\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: prefix.startColumn,\n endColumn: prefix.endColumn,\n };\n\n // Monaco filters a candidate against the model text from the range start to\n // the cursor, so `filterText` has to continue what was typed rather than\n // repeat the rendered path: `pod.items[0]` does not match `pod.items.`, and\n // the subscripted keys would be filtered straight back out.\n const typedHead = prefix.typed.slice(0, prefix.typed.length - prefix.leaf.length);\n\n const items: monaco.languages.CompletionItem[] = [];\n for (const entry of childEntries(parent)) {\n const insertText = pathExpression(languageId, [...prefix.segments, entry.segment]);\n if (insertText === null) continue;\n items.push({\n label: entry.key,\n kind: entry.container ? kinds.Folder : kinds.Field,\n insertText,\n filterText: `${typedHead}${entry.key}`,\n detail: `${entry.kind} · ${entry.summary}`,\n // A key of the document being evaluated beats any catalogue entry: it is\n // what the author came to the editor to write.\n sortText: `0${entry.key}`,\n range,\n });\n }\n return items;\n}\n\nfunction celCompletionItems(monaco: Monaco, spec: GomplateSpec) {\n const kinds = monaco.languages.CompletionItemKind;\n const items: Item[] = [];\n\n for (const fn of spec.cel.functions) {\n items.push(buildFunctionItem(monaco, fn, celInsertText(fn), kinds.Function));\n }\n for (const macro of spec.cel.macros) {\n items.push(buildMacroItem(monaco, macro));\n }\n for (const keyword of spec.cel.keywords) {\n items.push({\n label: keyword,\n kind: kinds.Keyword,\n insertText: keyword,\n detail: \"CEL keyword\",\n });\n }\n for (const type of spec.cel.types) {\n items.push({ label: type, kind: kinds.TypeParameter, insertText: type, detail: \"CEL type\" });\n }\n return items;\n}\n\nfunction goTemplateCompletionItems(monaco: Monaco, spec: GomplateSpec) {\n const kinds = monaco.languages.CompletionItemKind;\n const items: Item[] = [];\n\n for (const fn of spec.gotemplate.functions) {\n items.push(buildFunctionItem(monaco, fn, fn.name, kinds.Function));\n }\n for (const builtin of spec.gotemplate.builtins) {\n items.push({\n label: builtin,\n kind: kinds.Function,\n insertText: builtin,\n detail: \"text/template builtin\",\n });\n }\n for (const keyword of spec.gotemplate.keywords) {\n items.push({\n label: keyword,\n kind: kinds.Keyword,\n insertText: keyword,\n detail: \"template keyword\",\n });\n }\n return items;\n}\n\nfunction buildFunctionItem(\n monaco: Monaco,\n fn: SpecFunction,\n insertText: string,\n kind: monaco.languages.CompletionItemKind,\n): Item {\n // A function with neither a Go signature nor an overload has no detail to\n // show; the key has to be absent rather than explicitly undefined.\n const detail = fn.signature ?? fn.overloads?.[0]?.result;\n return {\n label: fn.name,\n kind: fn.memberOnly ? monaco.languages.CompletionItemKind.Method : kind,\n insertText,\n ...(detail === undefined ? {} : { detail }),\n documentation: { value: functionDocumentation(fn) },\n filterText: fn.name,\n // Un-namespaced names first: they are the short, common ones, and a\n // namespace is easy to reach by typing its prefix.\n sortText: fn.namespace ? `2${fn.name}` : `1${fn.name}`,\n };\n}\n\nfunction buildMacroItem(monaco: Monaco, macro: SpecMacro): Item {\n return {\n label: macro.name,\n kind: monaco.languages.CompletionItemKind.Keyword,\n insertText: macro.name,\n detail: `macro (${macro.argCount === 0 ? \"variadic\" : `${macro.argCount} args`})`,\n documentation: { value: macroDocumentation(macro) },\n filterText: macro.name,\n sortText: `1${macro.name}`,\n };\n}\n\n/**\n * CEL functions take parentheses; a member-only function is offered without a\n * leading dot because the dot is already typed when completion fires.\n */\nfunction celInsertText(fn: SpecFunction) {\n const arity = fn.overloads?.[0]?.args.length ?? 0;\n const receiver = fn.overloads?.[0]?.member ? 1 : 0;\n return arity - receiver === 0 ? `${fn.name}()` : `${fn.name}(`;\n}\n\nfunction wordRange(\n model: {\n getWordUntilPosition(p: { lineNumber: number; column: number }): {\n startColumn: number;\n endColumn: number;\n };\n },\n position: { lineNumber: number; column: number },\n) {\n const word = model.getWordUntilPosition(position);\n return {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
4
|
+
function isIdentifier(key) {
|
|
5
|
+
return IDENTIFIER.test(key);
|
|
6
|
+
}
|
|
7
|
+
function kindOf(value) {
|
|
8
|
+
if (value === null || value === void 0) return "null";
|
|
9
|
+
if (Array.isArray(value)) return "array";
|
|
10
|
+
switch (typeof value) {
|
|
11
|
+
case "string":
|
|
12
|
+
return "string";
|
|
13
|
+
case "number":
|
|
14
|
+
return "number";
|
|
15
|
+
case "boolean":
|
|
16
|
+
return "boolean";
|
|
17
|
+
default:
|
|
18
|
+
return "object";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const SUMMARY_LIMIT = 32;
|
|
22
|
+
function summarize(value) {
|
|
23
|
+
switch (kindOf(value)) {
|
|
24
|
+
case "null":
|
|
25
|
+
return "null";
|
|
26
|
+
case "array":
|
|
27
|
+
return plural(value.length, "item");
|
|
28
|
+
case "object":
|
|
29
|
+
return plural(Object.keys(value).length, "key");
|
|
30
|
+
case "string": {
|
|
31
|
+
const text = value;
|
|
32
|
+
return text.length > SUMMARY_LIMIT ? `${JSON.stringify(text.slice(0, SUMMARY_LIMIT))}…` : JSON.stringify(text);
|
|
33
|
+
}
|
|
34
|
+
default:
|
|
35
|
+
return String(value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function plural(count, noun) {
|
|
39
|
+
return `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
40
|
+
}
|
|
41
|
+
function resolvePath(environment, segments) {
|
|
42
|
+
let current = environment;
|
|
43
|
+
for (const segment of segments) {
|
|
44
|
+
if (typeof segment === "number") {
|
|
45
|
+
if (!Array.isArray(current)) return void 0;
|
|
46
|
+
current = current[segment];
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (!isRecord(current)) return void 0;
|
|
50
|
+
current = current[segment];
|
|
51
|
+
}
|
|
52
|
+
return current;
|
|
53
|
+
}
|
|
54
|
+
function childEntries(value) {
|
|
55
|
+
if (Array.isArray(value)) {
|
|
56
|
+
return value.map((element, index) => ({
|
|
57
|
+
key: String(index),
|
|
58
|
+
segment: index,
|
|
59
|
+
kind: kindOf(element),
|
|
60
|
+
summary: summarize(element),
|
|
61
|
+
container: isContainer(element)
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
if (!isRecord(value)) return [];
|
|
65
|
+
return Object.entries(value).map(([key, child]) => ({
|
|
66
|
+
key,
|
|
67
|
+
segment: key,
|
|
68
|
+
kind: kindOf(child),
|
|
69
|
+
summary: summarize(child),
|
|
70
|
+
container: isContainer(child)
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
function isContainer(value) {
|
|
74
|
+
const kind = kindOf(value);
|
|
75
|
+
return kind === "object" || kind === "array";
|
|
76
|
+
}
|
|
77
|
+
function isRecord(value) {
|
|
78
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
79
|
+
}
|
|
80
|
+
function pathExpression(languageId, segments) {
|
|
81
|
+
const flavour = pathFlavour(languageId);
|
|
82
|
+
if (!flavour) return null;
|
|
83
|
+
if (flavour === "gotemplate") {
|
|
84
|
+
if (segments.some((segment) => typeof segment === "number" || !isIdentifier(segment))) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return segments.length === 0 ? "." : segments.map((segment) => `.${String(segment)}`).join("");
|
|
88
|
+
}
|
|
89
|
+
const root = flavour === "jsonpath" ? "$" : "";
|
|
90
|
+
let out = root;
|
|
91
|
+
for (const segment of segments) {
|
|
92
|
+
if (typeof segment === "number") {
|
|
93
|
+
out += `[${segment}]`;
|
|
94
|
+
} else if (isIdentifier(segment)) {
|
|
95
|
+
out += out === "" ? segment : `.${segment}`;
|
|
96
|
+
} else {
|
|
97
|
+
out += `[${JSON.stringify(segment)}]`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
function pathFlavour(languageId) {
|
|
103
|
+
if (languageId === "cel") return "cel";
|
|
104
|
+
if (languageId === "jsonpath") return "jsonpath";
|
|
105
|
+
if (languageId === "gomplate" || languageId.endsWith("-gomplate")) return "gotemplate";
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
exports.childEntries = childEntries;
|
|
109
|
+
exports.isIdentifier = isIdentifier;
|
|
110
|
+
exports.kindOf = kindOf;
|
|
111
|
+
exports.pathExpression = pathExpression;
|
|
112
|
+
exports.pathFlavour = pathFlavour;
|
|
113
|
+
exports.resolvePath = resolvePath;
|
|
114
|
+
exports.summarize = summarize;
|
|
115
|
+
//# sourceMappingURL=environment.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.cjs","sources":["../../../src/expressions/lang/environment.ts"],"sourcesContent":["/**\n * Introspection of the document an expression is evaluated against.\n *\n * Deliberately free of Monaco and of any UI dependency: the same functions back\n * editor completion and any caller that needs to render a document's shape.\n */\n\n/** One step of a path. A number indexes a list, a string keys a map. */\nexport type PathSegment = string | number;\n\n/** The JSON shape of a value, as a name a reader recognises. */\nexport type ValueKind = \"string\" | \"number\" | \"boolean\" | \"null\" | \"object\" | \"array\";\n\n/** One child of a container, as completion and shape views need it. */\nexport interface EnvironmentEntry {\n /** The key or index, as typed. */\n key: string;\n segment: PathSegment;\n kind: ValueKind;\n /** A short rendering of the value, for a detail column. */\n summary: string;\n /** Whether the value has children of its own. */\n container: boolean;\n}\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** Whether `key` can be written as a bare `.key` rather than a subscript. */\nexport function isIdentifier(key: string): boolean {\n return IDENTIFIER.test(key);\n}\n\nexport function kindOf(value: unknown): ValueKind {\n if (value === null || value === undefined) return \"null\";\n if (Array.isArray(value)) return \"array\";\n switch (typeof value) {\n case \"string\":\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"object\";\n }\n}\n\nconst SUMMARY_LIMIT = 32;\n\n/** A one-line rendering of a value: the sample a completion detail shows. */\nexport function summarize(value: unknown): string {\n switch (kindOf(value)) {\n case \"null\":\n return \"null\";\n case \"array\":\n return plural((value as unknown[]).length, \"item\");\n case \"object\":\n return plural(Object.keys(value as Record<string, unknown>).length, \"key\");\n case \"string\": {\n const text = value as string;\n return text.length > SUMMARY_LIMIT ? `${JSON.stringify(text.slice(0, SUMMARY_LIMIT))}…` : JSON.stringify(text);\n }\n default:\n return String(value);\n }\n}\n\nfunction plural(count: number, noun: string): string {\n return `${count} ${noun}${count === 1 ? \"\" : \"s\"}`;\n}\n\n/**\n * Walks `segments` from the root.\n *\n * A numeric segment indexes a list and nothing else; a string segment keys a\n * map. Returns undefined as soon as a step does not apply, so a half-typed path\n * simply yields no completions rather than throwing.\n */\nexport function resolvePath(environment: unknown, segments: readonly PathSegment[]): unknown {\n let current = environment;\n for (const segment of segments) {\n if (typeof segment === \"number\") {\n if (!Array.isArray(current)) return undefined;\n current = current[segment];\n continue;\n }\n if (!isRecord(current)) return undefined;\n current = current[segment];\n }\n return current;\n}\n\n/**\n * The children of a container, in document order.\n *\n * A list yields its indices rather than the keys of its first element: no\n * language here lets a field follow a list without an index, so offering\n * `containers.name` would complete an expression that cannot evaluate.\n */\nexport function childEntries(value: unknown): EnvironmentEntry[] {\n if (Array.isArray(value)) {\n return value.map((element, index) => ({\n key: String(index),\n segment: index,\n kind: kindOf(element),\n summary: summarize(element),\n container: isContainer(element),\n }));\n }\n if (!isRecord(value)) return [];\n return Object.entries(value).map(([key, child]) => ({\n key,\n segment: key,\n kind: kindOf(child),\n summary: summarize(child),\n container: isContainer(child),\n }));\n}\n\nfunction isContainer(value: unknown): boolean {\n const kind = kindOf(value);\n return kind === \"object\" || kind === \"array\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Renders a path in one language's syntax.\n *\n * The single place path syntax is spelled out, so completion and click-to-insert\n * cannot drift apart. Returns null when the path has no expression in that\n * language — a go-template reaches a list element or an awkward key through\n * `index`, which is a call rather than a path.\n */\nexport function pathExpression(languageId: string, segments: readonly PathSegment[]): string | null {\n const flavour = pathFlavour(languageId);\n if (!flavour) return null;\n if (flavour === \"gotemplate\") {\n if (segments.some((segment) => typeof segment === \"number\" || !isIdentifier(segment))) {\n return null;\n }\n return segments.length === 0 ? \".\" : segments.map((segment) => `.${String(segment)}`).join(\"\");\n }\n\n const root = flavour === \"jsonpath\" ? \"$\" : \"\";\n let out = root;\n for (const segment of segments) {\n if (typeof segment === \"number\") {\n out += `[${segment}]`;\n } else if (isIdentifier(segment)) {\n out += out === \"\" ? segment : `.${segment}`;\n } else {\n out += `[${JSON.stringify(segment)}]`;\n }\n }\n return out;\n}\n\n/** Which path syntax a language id uses. */\nexport function pathFlavour(languageId: string): \"cel\" | \"gotemplate\" | \"jsonpath\" | null {\n if (languageId === \"cel\") return \"cel\";\n if (languageId === \"jsonpath\") return \"jsonpath\";\n if (languageId === \"gomplate\" || languageId.endsWith(\"-gomplate\")) return \"gotemplate\";\n return null;\n}\n"],"names":[],"mappings":";;AAyBA,MAAM,aAAa;AAGZ,SAAS,aAAa,KAAsB;AACjD,SAAO,WAAW,KAAK,GAAG;AAC5B;AAEO,SAAS,OAAO,OAA2B;AAChD,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,UAAQ,OAAO,OAAA;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAEA,MAAM,gBAAgB;AAGf,SAAS,UAAU,OAAwB;AAChD,UAAQ,OAAO,KAAK,GAAA;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,OAAQ,MAAoB,QAAQ,MAAM;AAAA,IACnD,KAAK;AACH,aAAO,OAAO,OAAO,KAAK,KAAgC,EAAE,QAAQ,KAAK;AAAA,IAC3E,KAAK,UAAU;AACb,YAAM,OAAO;AACb,aAAO,KAAK,SAAS,gBAAgB,GAAG,KAAK,UAAU,KAAK,MAAM,GAAG,aAAa,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI;AAAA,IAC/G;AAAA,IACA;AACE,aAAO,OAAO,KAAK;AAAA,EAAA;AAEzB;AAEA,SAAS,OAAO,OAAe,MAAsB;AACnD,SAAO,GAAG,KAAK,IAAI,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG;AAClD;AASO,SAAS,YAAY,aAAsB,UAA2C;AAC3F,MAAI,UAAU;AACd,aAAW,WAAW,UAAU;AAC9B,QAAI,OAAO,YAAY,UAAU;AAC/B,UAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AACpC,gBAAU,QAAQ,OAAO;AACzB;AAAA,IACF;AACA,QAAI,CAAC,SAAS,OAAO,EAAG,QAAO;AAC/B,cAAU,QAAQ,OAAO;AAAA,EAC3B;AACA,SAAO;AACT;AASO,SAAS,aAAa,OAAoC;AAC/D,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS,WAAW;AAAA,MACpC,KAAK,OAAO,KAAK;AAAA,MACjB,SAAS;AAAA,MACT,MAAM,OAAO,OAAO;AAAA,MACpB,SAAS,UAAU,OAAO;AAAA,MAC1B,WAAW,YAAY,OAAO;AAAA,IAAA,EAC9B;AAAA,EACJ;AACA,MAAI,CAAC,SAAS,KAAK,UAAU,CAAA;AAC7B,SAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,IAClD;AAAA,IACA,SAAS;AAAA,IACT,MAAM,OAAO,KAAK;AAAA,IAClB,SAAS,UAAU,KAAK;AAAA,IACxB,WAAW,YAAY,KAAK;AAAA,EAAA,EAC5B;AACJ;AAEA,SAAS,YAAY,OAAyB;AAC5C,QAAM,OAAO,OAAO,KAAK;AACzB,SAAO,SAAS,YAAY,SAAS;AACvC;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAUO,SAAS,eAAe,YAAoB,UAAiD;AAClG,QAAM,UAAU,YAAY,UAAU;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,YAAY,cAAc;AAC5B,QAAI,SAAS,KAAK,CAAC,YAAY,OAAO,YAAY,YAAY,CAAC,aAAa,OAAO,CAAC,GAAG;AACrF,aAAO;AAAA,IACT;AACA,WAAO,SAAS,WAAW,IAAI,MAAM,SAAS,IAAI,CAAC,YAAY,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE;AAAA,EAC/F;AAEA,QAAM,OAAO,YAAY,aAAa,MAAM;AAC5C,MAAI,MAAM;AACV,aAAW,WAAW,UAAU;AAC9B,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO,IAAI,OAAO;AAAA,IACpB,WAAW,aAAa,OAAO,GAAG;AAChC,aAAO,QAAQ,KAAK,UAAU,IAAI,OAAO;AAAA,IAC3C,OAAO;AACL,aAAO,IAAI,KAAK,UAAU,OAAO,CAAC;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,YAAY,YAA8D;AACxF,MAAI,eAAe,MAAO,QAAO;AACjC,MAAI,eAAe,WAAY,QAAO;AACtC,MAAI,eAAe,cAAc,WAAW,SAAS,WAAW,EAAG,QAAO;AAC1E,SAAO;AACT;;;;;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Introspection of the document an expression is evaluated against.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately free of Monaco and of any UI dependency: the same functions back
|
|
5
|
+
* editor completion and any caller that needs to render a document's shape.
|
|
6
|
+
*/
|
|
7
|
+
/** One step of a path. A number indexes a list, a string keys a map. */
|
|
8
|
+
export type PathSegment = string | number;
|
|
9
|
+
/** The JSON shape of a value, as a name a reader recognises. */
|
|
10
|
+
export type ValueKind = "string" | "number" | "boolean" | "null" | "object" | "array";
|
|
11
|
+
/** One child of a container, as completion and shape views need it. */
|
|
12
|
+
export interface EnvironmentEntry {
|
|
13
|
+
/** The key or index, as typed. */
|
|
14
|
+
key: string;
|
|
15
|
+
segment: PathSegment;
|
|
16
|
+
kind: ValueKind;
|
|
17
|
+
/** A short rendering of the value, for a detail column. */
|
|
18
|
+
summary: string;
|
|
19
|
+
/** Whether the value has children of its own. */
|
|
20
|
+
container: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Whether `key` can be written as a bare `.key` rather than a subscript. */
|
|
23
|
+
export declare function isIdentifier(key: string): boolean;
|
|
24
|
+
export declare function kindOf(value: unknown): ValueKind;
|
|
25
|
+
/** A one-line rendering of a value: the sample a completion detail shows. */
|
|
26
|
+
export declare function summarize(value: unknown): string;
|
|
27
|
+
/**
|
|
28
|
+
* Walks `segments` from the root.
|
|
29
|
+
*
|
|
30
|
+
* A numeric segment indexes a list and nothing else; a string segment keys a
|
|
31
|
+
* map. Returns undefined as soon as a step does not apply, so a half-typed path
|
|
32
|
+
* simply yields no completions rather than throwing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolvePath(environment: unknown, segments: readonly PathSegment[]): unknown;
|
|
35
|
+
/**
|
|
36
|
+
* The children of a container, in document order.
|
|
37
|
+
*
|
|
38
|
+
* A list yields its indices rather than the keys of its first element: no
|
|
39
|
+
* language here lets a field follow a list without an index, so offering
|
|
40
|
+
* `containers.name` would complete an expression that cannot evaluate.
|
|
41
|
+
*/
|
|
42
|
+
export declare function childEntries(value: unknown): EnvironmentEntry[];
|
|
43
|
+
/**
|
|
44
|
+
* Renders a path in one language's syntax.
|
|
45
|
+
*
|
|
46
|
+
* The single place path syntax is spelled out, so completion and click-to-insert
|
|
47
|
+
* cannot drift apart. Returns null when the path has no expression in that
|
|
48
|
+
* language — a go-template reaches a list element or an awkward key through
|
|
49
|
+
* `index`, which is a call rather than a path.
|
|
50
|
+
*/
|
|
51
|
+
export declare function pathExpression(languageId: string, segments: readonly PathSegment[]): string | null;
|
|
52
|
+
/** Which path syntax a language id uses. */
|
|
53
|
+
export declare function pathFlavour(languageId: string): "cel" | "gotemplate" | "jsonpath" | null;
|
|
54
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/expressions/lang/environment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wEAAwE;AACxE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtF,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAahD;AAID,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAehD;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAY3F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAkB/D;AAWD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAsBlG;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,GAAG,IAAI,CAKxF"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
2
|
+
function isIdentifier(key) {
|
|
3
|
+
return IDENTIFIER.test(key);
|
|
4
|
+
}
|
|
5
|
+
function kindOf(value) {
|
|
6
|
+
if (value === null || value === void 0) return "null";
|
|
7
|
+
if (Array.isArray(value)) return "array";
|
|
8
|
+
switch (typeof value) {
|
|
9
|
+
case "string":
|
|
10
|
+
return "string";
|
|
11
|
+
case "number":
|
|
12
|
+
return "number";
|
|
13
|
+
case "boolean":
|
|
14
|
+
return "boolean";
|
|
15
|
+
default:
|
|
16
|
+
return "object";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const SUMMARY_LIMIT = 32;
|
|
20
|
+
function summarize(value) {
|
|
21
|
+
switch (kindOf(value)) {
|
|
22
|
+
case "null":
|
|
23
|
+
return "null";
|
|
24
|
+
case "array":
|
|
25
|
+
return plural(value.length, "item");
|
|
26
|
+
case "object":
|
|
27
|
+
return plural(Object.keys(value).length, "key");
|
|
28
|
+
case "string": {
|
|
29
|
+
const text = value;
|
|
30
|
+
return text.length > SUMMARY_LIMIT ? `${JSON.stringify(text.slice(0, SUMMARY_LIMIT))}…` : JSON.stringify(text);
|
|
31
|
+
}
|
|
32
|
+
default:
|
|
33
|
+
return String(value);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function plural(count, noun) {
|
|
37
|
+
return `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
38
|
+
}
|
|
39
|
+
function resolvePath(environment, segments) {
|
|
40
|
+
let current = environment;
|
|
41
|
+
for (const segment of segments) {
|
|
42
|
+
if (typeof segment === "number") {
|
|
43
|
+
if (!Array.isArray(current)) return void 0;
|
|
44
|
+
current = current[segment];
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (!isRecord(current)) return void 0;
|
|
48
|
+
current = current[segment];
|
|
49
|
+
}
|
|
50
|
+
return current;
|
|
51
|
+
}
|
|
52
|
+
function childEntries(value) {
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
return value.map((element, index) => ({
|
|
55
|
+
key: String(index),
|
|
56
|
+
segment: index,
|
|
57
|
+
kind: kindOf(element),
|
|
58
|
+
summary: summarize(element),
|
|
59
|
+
container: isContainer(element)
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
if (!isRecord(value)) return [];
|
|
63
|
+
return Object.entries(value).map(([key, child]) => ({
|
|
64
|
+
key,
|
|
65
|
+
segment: key,
|
|
66
|
+
kind: kindOf(child),
|
|
67
|
+
summary: summarize(child),
|
|
68
|
+
container: isContainer(child)
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
function isContainer(value) {
|
|
72
|
+
const kind = kindOf(value);
|
|
73
|
+
return kind === "object" || kind === "array";
|
|
74
|
+
}
|
|
75
|
+
function isRecord(value) {
|
|
76
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
77
|
+
}
|
|
78
|
+
function pathExpression(languageId, segments) {
|
|
79
|
+
const flavour = pathFlavour(languageId);
|
|
80
|
+
if (!flavour) return null;
|
|
81
|
+
if (flavour === "gotemplate") {
|
|
82
|
+
if (segments.some((segment) => typeof segment === "number" || !isIdentifier(segment))) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
return segments.length === 0 ? "." : segments.map((segment) => `.${String(segment)}`).join("");
|
|
86
|
+
}
|
|
87
|
+
const root = flavour === "jsonpath" ? "$" : "";
|
|
88
|
+
let out = root;
|
|
89
|
+
for (const segment of segments) {
|
|
90
|
+
if (typeof segment === "number") {
|
|
91
|
+
out += `[${segment}]`;
|
|
92
|
+
} else if (isIdentifier(segment)) {
|
|
93
|
+
out += out === "" ? segment : `.${segment}`;
|
|
94
|
+
} else {
|
|
95
|
+
out += `[${JSON.stringify(segment)}]`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
function pathFlavour(languageId) {
|
|
101
|
+
if (languageId === "cel") return "cel";
|
|
102
|
+
if (languageId === "jsonpath") return "jsonpath";
|
|
103
|
+
if (languageId === "gomplate" || languageId.endsWith("-gomplate")) return "gotemplate";
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
childEntries,
|
|
108
|
+
isIdentifier,
|
|
109
|
+
kindOf,
|
|
110
|
+
pathExpression,
|
|
111
|
+
pathFlavour,
|
|
112
|
+
resolvePath,
|
|
113
|
+
summarize
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sources":["../../../src/expressions/lang/environment.ts"],"sourcesContent":["/**\n * Introspection of the document an expression is evaluated against.\n *\n * Deliberately free of Monaco and of any UI dependency: the same functions back\n * editor completion and any caller that needs to render a document's shape.\n */\n\n/** One step of a path. A number indexes a list, a string keys a map. */\nexport type PathSegment = string | number;\n\n/** The JSON shape of a value, as a name a reader recognises. */\nexport type ValueKind = \"string\" | \"number\" | \"boolean\" | \"null\" | \"object\" | \"array\";\n\n/** One child of a container, as completion and shape views need it. */\nexport interface EnvironmentEntry {\n /** The key or index, as typed. */\n key: string;\n segment: PathSegment;\n kind: ValueKind;\n /** A short rendering of the value, for a detail column. */\n summary: string;\n /** Whether the value has children of its own. */\n container: boolean;\n}\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** Whether `key` can be written as a bare `.key` rather than a subscript. */\nexport function isIdentifier(key: string): boolean {\n return IDENTIFIER.test(key);\n}\n\nexport function kindOf(value: unknown): ValueKind {\n if (value === null || value === undefined) return \"null\";\n if (Array.isArray(value)) return \"array\";\n switch (typeof value) {\n case \"string\":\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"object\";\n }\n}\n\nconst SUMMARY_LIMIT = 32;\n\n/** A one-line rendering of a value: the sample a completion detail shows. */\nexport function summarize(value: unknown): string {\n switch (kindOf(value)) {\n case \"null\":\n return \"null\";\n case \"array\":\n return plural((value as unknown[]).length, \"item\");\n case \"object\":\n return plural(Object.keys(value as Record<string, unknown>).length, \"key\");\n case \"string\": {\n const text = value as string;\n return text.length > SUMMARY_LIMIT ? `${JSON.stringify(text.slice(0, SUMMARY_LIMIT))}…` : JSON.stringify(text);\n }\n default:\n return String(value);\n }\n}\n\nfunction plural(count: number, noun: string): string {\n return `${count} ${noun}${count === 1 ? \"\" : \"s\"}`;\n}\n\n/**\n * Walks `segments` from the root.\n *\n * A numeric segment indexes a list and nothing else; a string segment keys a\n * map. Returns undefined as soon as a step does not apply, so a half-typed path\n * simply yields no completions rather than throwing.\n */\nexport function resolvePath(environment: unknown, segments: readonly PathSegment[]): unknown {\n let current = environment;\n for (const segment of segments) {\n if (typeof segment === \"number\") {\n if (!Array.isArray(current)) return undefined;\n current = current[segment];\n continue;\n }\n if (!isRecord(current)) return undefined;\n current = current[segment];\n }\n return current;\n}\n\n/**\n * The children of a container, in document order.\n *\n * A list yields its indices rather than the keys of its first element: no\n * language here lets a field follow a list without an index, so offering\n * `containers.name` would complete an expression that cannot evaluate.\n */\nexport function childEntries(value: unknown): EnvironmentEntry[] {\n if (Array.isArray(value)) {\n return value.map((element, index) => ({\n key: String(index),\n segment: index,\n kind: kindOf(element),\n summary: summarize(element),\n container: isContainer(element),\n }));\n }\n if (!isRecord(value)) return [];\n return Object.entries(value).map(([key, child]) => ({\n key,\n segment: key,\n kind: kindOf(child),\n summary: summarize(child),\n container: isContainer(child),\n }));\n}\n\nfunction isContainer(value: unknown): boolean {\n const kind = kindOf(value);\n return kind === \"object\" || kind === \"array\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Renders a path in one language's syntax.\n *\n * The single place path syntax is spelled out, so completion and click-to-insert\n * cannot drift apart. Returns null when the path has no expression in that\n * language — a go-template reaches a list element or an awkward key through\n * `index`, which is a call rather than a path.\n */\nexport function pathExpression(languageId: string, segments: readonly PathSegment[]): string | null {\n const flavour = pathFlavour(languageId);\n if (!flavour) return null;\n if (flavour === \"gotemplate\") {\n if (segments.some((segment) => typeof segment === \"number\" || !isIdentifier(segment))) {\n return null;\n }\n return segments.length === 0 ? \".\" : segments.map((segment) => `.${String(segment)}`).join(\"\");\n }\n\n const root = flavour === \"jsonpath\" ? \"$\" : \"\";\n let out = root;\n for (const segment of segments) {\n if (typeof segment === \"number\") {\n out += `[${segment}]`;\n } else if (isIdentifier(segment)) {\n out += out === \"\" ? segment : `.${segment}`;\n } else {\n out += `[${JSON.stringify(segment)}]`;\n }\n }\n return out;\n}\n\n/** Which path syntax a language id uses. */\nexport function pathFlavour(languageId: string): \"cel\" | \"gotemplate\" | \"jsonpath\" | null {\n if (languageId === \"cel\") return \"cel\";\n if (languageId === \"jsonpath\") return \"jsonpath\";\n if (languageId === \"gomplate\" || languageId.endsWith(\"-gomplate\")) return \"gotemplate\";\n return null;\n}\n"],"names":[],"mappings":"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"}
|