@endge/core 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/core.cjs +334 -269
  2. package/dist/core.js +18526 -16777
  3. package/dist/domain/entities/reflect/RConfiguration.d.ts +11 -0
  4. package/dist/domain/entities/runtime/hosts/ComponentSFCRuntimeHost.d.ts +3 -0
  5. package/dist/domain/types/component/sfc/dependencies.types.d.ts +14 -2
  6. package/dist/domain/types/component/sfc/intrinsic-events.types.d.ts +2 -0
  7. package/dist/domain/types/component/sfc/ir.types.d.ts +20 -6
  8. package/dist/domain/types/component/sfc/ports.types.d.ts +3 -1
  9. package/dist/domain/types/component/sfc/tag-attribute-contract.types.d.ts +11 -0
  10. package/dist/domain/types/component/sfc/tag-input-contract.types.d.ts +17 -0
  11. package/dist/domain/types/configuration/configuration.type.d.ts +40 -1
  12. package/dist/domain/types/document/document.types.d.ts +4 -2
  13. package/dist/domain/types/document/domain-export.type.d.ts +2 -0
  14. package/dist/domain/types/document/domain-provider.type.d.ts +1 -1
  15. package/dist/domain/types/document/workspace.types.d.ts +2 -1
  16. package/dist/domain/types/program/program.types.d.ts +9 -2
  17. package/dist/domain/types/runtime/context-persistence.types.d.ts +26 -0
  18. package/dist/domain/types/source/configuration-source.types.d.ts +47 -0
  19. package/dist/domain/types/source/query-source.types.d.ts +36 -9
  20. package/dist/domain/types/source/source-engine.types.d.ts +8 -2
  21. package/dist/domain/types/ui/tooltip-markdown.types.d.ts +32 -0
  22. package/dist/main.d.ts +9 -0
  23. package/dist/model/config/kernel.config.d.ts +5 -0
  24. package/dist/model/config/tooltip.config.d.ts +3 -0
  25. package/dist/model/kernel/endge.d.ts +2 -0
  26. package/dist/model/modules/context/endge-configuration-schema.d.ts +24 -0
  27. package/dist/model/modules/context/endge-configuration.d.ts +2 -0
  28. package/dist/model/modules/context/endge-context.d.ts +22 -1
  29. package/dist/model/modules/context/endge-workspace.d.ts +11 -1
  30. package/dist/model/modules/domain/endge-domain.d.ts +16 -0
  31. package/dist/model/modules/program/endge-source.d.ts +1 -1
  32. package/dist/model/modules/runtime/core/endge-runtime.d.ts +3 -2
  33. package/dist/model/modules/ui/endge-ui.d.ts +0 -11
  34. package/dist/model/services/configuration/configuration-value.d.ts +20 -0
  35. package/dist/model/services/configuration/endge-configuration.d.ts +3 -1
  36. package/dist/model/services/query/QueryExecutor.d.ts +3 -0
  37. package/dist/model/services/source-engine/compilers/configuration-source-compile.d.ts +4 -0
  38. package/dist/model/services/source-engine/configuration-source-patch.d.ts +16 -0
  39. package/dist/model/services/source-engine/strategies/ConfigurationSourceEngineStrategy.d.ts +7 -0
  40. package/dist/model/services/source-engine/strategies/ConfigurationSourceLanguageStrategy.d.ts +12 -0
  41. package/dist/model/services/source-engine/strategies/QuerySourceLanguageStrategy.d.ts +1 -1
  42. package/dist/model/services/source-engine/templates/configuration.default.source.d.ts +2 -0
  43. package/dist/model/services/source-engine/templates/query.default.source.d.ts +2 -0
  44. package/dist/model/services/source-engine/type-source-references.d.ts +3 -0
  45. package/dist/model/services/source-engine/type-source-serialize.d.ts +2 -1
  46. package/dist/model/services/tooltip/endge-tooltip-markdown.d.ts +5 -0
  47. package/dist/test/model/services/compiler/component-sfc/component-sfc-tooltip.test.d.ts +1 -0
  48. package/dist/test/model/services/source-engine/configuration-source.test.d.ts +1 -0
  49. package/dist/test/tooltip/endge-tooltip-markdown.test.d.ts +1 -0
  50. package/dist/tools/component-sfc-edit-trigger.d.ts +9 -1
  51. package/package.json +4 -4
@@ -0,0 +1,11 @@
1
+ import { DuplicateOptions, REntity } from './REntity';
2
+ /** Workspace-owned source document that declares one settings category. */
3
+ export declare class RConfiguration extends REntity {
4
+ readonly type: "configuration";
5
+ description: string | null;
6
+ source: string;
7
+ sourceVersion: number;
8
+ static fromPlain(json: any, storageMeta?: any): RConfiguration;
9
+ toPlain(): Record<string, unknown>;
10
+ duplicate(options: DuplicateOptions): RConfiguration;
11
+ }
@@ -125,6 +125,9 @@ export declare class ComponentSFCRuntimeHost extends RuntimeHostBase<'component-
125
125
  private _createRuntimeBoundaryNodes;
126
126
  private _createTableColumnBoundaryNode;
127
127
  private _bindRaphInputSource;
128
+ /** Context dependencies are Raph-backed and do not depend on the component props input kind. */
129
+ private _bindRaphContextSources;
130
+ private _observeContextPath;
128
131
  private _bindRaphBoundaryInputSource;
129
132
  private _isCoveredByPatchableBoundary;
130
133
  private _findRuntimeNodeByMeta;
@@ -1,10 +1,10 @@
1
1
  import { RComponentSFC_IR_Read } from './ir.types';
2
2
  /** Источник runtime-зависимости SFC v1. */
3
- export type RComponentSFC_RuntimeDependencySource = 'props';
3
+ export type RComponentSFC_RuntimeDependencySource = 'props' | 'context';
4
4
  /** Runtime-зависимость SFC template от входного prop. */
5
5
  export interface RComponentSFC_RuntimeDependency {
6
6
  /** Источник зависимости. В v1 поддерживаем только props. */
7
- source: RComponentSFC_RuntimeDependencySource;
7
+ source: 'props';
8
8
  /** Имя входного prop, например `flight`. */
9
9
  prop: string;
10
10
  /** Путь внутри prop, например `['status']` для `flight.status`. */
@@ -14,6 +14,14 @@ export interface RComponentSFC_RuntimeDependency {
14
14
  /** Нормализованный read из IR. */
15
15
  read: RComponentSFC_IR_Read;
16
16
  }
17
+ /** Runtime-зависимость SFC template от глобального Endge context. */
18
+ export interface RComponentSFC_RuntimeContextDependency {
19
+ source: 'context';
20
+ /** Путь после `$context`, например `['input', 'keyboard', 'modifiers', 'shift']`. */
21
+ path: string[];
22
+ raw: string;
23
+ read: RComponentSFC_IR_Read;
24
+ }
17
25
  /** Тип patchable runtime boundary внутри SFC IR. */
18
26
  export type RComponentSFC_RuntimeBoundaryKind = 'table';
19
27
  /** Runtime-зависимость колонки таблицы от полей текущей строки. */
@@ -39,6 +47,8 @@ export interface RComponentSFC_RuntimeBoundaryDependency {
39
47
  sourcePath: string[];
40
48
  /** Поле ключа строки из `row-key`. */
41
49
  rowKey: string | null;
50
+ /** Context paths used inside this boundary; they invalidate the whole boundary. */
51
+ contextReads: string[][];
42
52
  /** Колонки таблицы, которые можно обновлять точечно. */
43
53
  columns: RComponentSFC_RuntimeTableColumnDependency[];
44
54
  }
@@ -57,6 +67,8 @@ export interface RComponentSFC_RuntimeVocabDependency {
57
67
  export interface RComponentSFC_RuntimeDependencies {
58
68
  /** Зависимости от props, которые можно связать с внешним input source. */
59
69
  props: RComponentSFC_RuntimeDependency[];
70
+ /** Context dependencies outside patchable boundaries. */
71
+ context: RComponentSFC_RuntimeContextDependency[];
60
72
  /** Patchable boundaries, для которых runtime строит отдельные Raph-ноды. */
61
73
  boundaries: RComponentSFC_RuntimeBoundaryDependency[];
62
74
  /** Vocab aliases, которые должен предоставить ближайший Composition scope. */
@@ -8,6 +8,8 @@ export interface ComponentSFCEventModifiersState {
8
8
  }
9
9
  export interface ComponentSFCInteractionEventPayload {
10
10
  type: string;
11
+ /** UTC-время нормализации исходного occurrence, одинаковое для всех его локальных reactions. */
12
+ occurredAt: string;
11
13
  modifiers: ComponentSFCEventModifiersState;
12
14
  held: {
13
15
  key: string[];
@@ -86,12 +86,15 @@ export interface ComponentSFCInteractionTriggerHeldKeys {
86
86
  /** Запрещает другие удерживаемые обычные клавиши. */
87
87
  exact?: boolean;
88
88
  }
89
- export interface ComponentSFCInteractionTrigger {
89
+ /** Условие на текущее состояние клавиатуры без привязки к конкретному событию. */
90
+ export interface ComponentSFCInteractionKeyboardCondition {
91
+ modifiers?: ComponentSFCInteractionTriggerModifiers;
92
+ held?: ComponentSFCInteractionTriggerHeldKeys;
93
+ }
94
+ export interface ComponentSFCInteractionTrigger extends ComponentSFCInteractionKeyboardCondition {
90
95
  event: string;
91
96
  key?: string[];
92
97
  code?: string[];
93
- held?: ComponentSFCInteractionTriggerHeldKeys;
94
- modifiers?: ComponentSFCInteractionTriggerModifiers;
95
98
  repeat?: boolean;
96
99
  composing?: boolean;
97
100
  button?: number;
@@ -150,7 +153,7 @@ export interface ComponentSFCEditedEventPayload<T = unknown> {
150
153
  /** IR узел template после нормализации в Endge primitives. */
151
154
  export type RComponentSFC_IR_Node = RComponentSFC_IR_ElementNode | RComponentSFC_IR_TextNode | RComponentSFC_IR_ExpressionNode;
152
155
  /** Поддерживаемые v1 primitives нового SFC template. */
153
- export type RComponentSFC_IR_Tag = 'Text' | 'DateTime' | 'Number' | 'Icon' | 'Badge' | 'Dot' | 'Box' | 'Flex' | 'Grid' | 'Divider' | 'Input' | 'Textarea' | 'Checkbox' | 'Select' | 'Component' | 'Table' | 'Column' | 'Cell' | 'ColumnMenu' | 'RowMenu' | 'MenuItem' | 'MenuSeparator' | 'Editable' | 'Variant';
156
+ export type RComponentSFC_IR_Tag = 'Text' | 'DateTime' | 'Number' | 'Icon' | 'Badge' | 'Dot' | 'Box' | 'Flex' | 'Grid' | 'Divider' | 'Input' | 'Textarea' | 'Checkbox' | 'Select' | 'Tooltip' | 'TooltipTrigger' | 'TooltipContent' | 'Component' | 'Table' | 'Column' | 'Cell' | 'ColumnMenu' | 'RowMenu' | 'MenuItem' | 'MenuSeparator' | 'Editable' | 'Variant';
154
157
  /** IR element-узел, который renderer-слои могут читать без знания исходного синтаксиса. */
155
158
  export interface RComponentSFC_IR_ElementNode {
156
159
  /** Стабильный id узла внутри IR. */
@@ -241,9 +244,20 @@ export interface RComponentSFC_IR_InteractionRule {
241
244
  reactions: ComponentSFCEventAction[];
242
245
  sourceRange?: RComponentSFC_SourceRange;
243
246
  }
247
+ /** One referenced TriggerSet paired with reactions that stay stable across context layers. */
248
+ export interface RComponentSFC_IR_InteractionTriggerSet {
249
+ triggers: RComponentSFC_IR_Value;
250
+ /** Event names supported by the source tag's compiled event surface. */
251
+ events: string[];
252
+ modifiers: RComponentSFC_IR_EventModifier[];
253
+ reactions: ComponentSFCEventAction[];
254
+ sourceRange?: RComponentSFC_SourceRange;
255
+ }
244
256
  /** One `:on` annotation. Rules inside the group use first-match-wins semantics. */
245
257
  export interface RComponentSFC_IR_InteractionGroup {
246
258
  rules: RComponentSFC_IR_InteractionRule[];
259
+ /** Optional context-backed TriggerSet form `{ triggers, reaction }`. */
260
+ triggerSet?: RComponentSFC_IR_InteractionTriggerSet;
247
261
  sourceRange?: RComponentSFC_SourceRange;
248
262
  }
249
263
  /** IR текстовый узел. */
@@ -301,8 +315,8 @@ export interface RComponentSFC_IR_VocabRead {
301
315
  }
302
316
  /** Реактивное чтение, найденное внутри выражения. */
303
317
  export interface RComponentSFC_IR_Read {
304
- /** Источник чтения: props, Raph/store или локальный binding. */
305
- source: 'props' | 'raph' | 'local';
318
+ /** Источник чтения: props, Raph/store, context или локальный binding. */
319
+ source: 'props' | 'raph' | 'context' | 'local';
306
320
  /** Нормализованный путь чтения. */
307
321
  path: string[];
308
322
  /** Исходный текст чтения. */
@@ -112,10 +112,12 @@ export interface ComponentSFCEventSource {
112
112
  ref: string;
113
113
  event: string;
114
114
  }
115
- /** Renderer-neutral value mapped from an Event payload into Action input. */
115
+ /** Renderer-neutral safe expression mapped into an Event reaction input. */
116
116
  export type ComponentSFCEventInputValue = {
117
117
  kind: 'event';
118
118
  path: string | null;
119
+ } | {
120
+ kind: 'now';
119
121
  } | {
120
122
  kind: 'scope';
121
123
  path: string;
@@ -33,6 +33,8 @@ export declare const ENDGE_SFC_GRID_ALIGNMENTS: readonly ["start", "center", "en
33
33
  export declare const ENDGE_SFC_FLEX_DIRECTIONS: readonly ["row", "column"];
34
34
  export declare const ENDGE_SFC_DIVIDER_ORIENTATIONS: readonly ["horizontal", "vertical"];
35
35
  export declare const ENDGE_SFC_INPUT_TYPES: readonly ["String", "Number", "Date", "Time", "DateTime"];
36
+ export declare const ENDGE_SFC_TOOLTIP_SIDES: readonly ["top", "right", "bottom", "left"];
37
+ export declare const ENDGE_SFC_TOOLTIP_ALIGNS: readonly ["start", "center", "end"];
36
38
  /** Конечные значения встроенных SFC tags. Свободные string/number props сюда не входят. */
37
39
  export declare const ENDGE_SFC_TAG_ATTRIBUTE_CONTRACTS: {
38
40
  readonly Table: readonly [{
@@ -127,6 +129,15 @@ export declare const ENDGE_SFC_TAG_ATTRIBUTE_CONTRACTS: {
127
129
  readonly defaultValue: "String";
128
130
  readonly description: "Семантический тип значения Input.";
129
131
  }];
132
+ readonly Tooltip: readonly [{
133
+ readonly name: "side";
134
+ readonly values: readonly ["top", "right", "bottom", "left"];
135
+ readonly description: "Предпочтительная сторона; adapter может перевернуть её при collision с viewport.";
136
+ }, {
137
+ readonly name: "align";
138
+ readonly values: readonly ["start", "center", "end"];
139
+ readonly description: "Выравнивание tooltip относительно trigger.";
140
+ }];
130
141
  };
131
142
  /** Возвращает строгие контракты атрибутов одного встроенного SFC tag. */
132
143
  export declare function getComponentSFCTagAttributeContracts(tag: string): readonly ComponentSFCTagAttributeContract[];
@@ -173,6 +173,23 @@ export declare const ENDGE_SFC_TAG_INPUT_CONTRACTS: {
173
173
  readonly type: "boolean";
174
174
  readonly optional: true;
175
175
  }];
176
+ readonly Tooltip: readonly [{
177
+ readonly name: "text";
178
+ readonly type: "string";
179
+ readonly optional: true;
180
+ }, {
181
+ readonly name: "markdown";
182
+ readonly type: "string";
183
+ readonly optional: true;
184
+ }, {
185
+ readonly name: "openDelay";
186
+ readonly type: "number";
187
+ readonly optional: true;
188
+ }, {
189
+ readonly name: "closeDelay";
190
+ readonly type: "number";
191
+ readonly optional: true;
192
+ }];
176
193
  };
177
194
  /** Возвращает публичные data-входы встроенного SFC tag. */
178
195
  export declare function getComponentSFCTagInputContract(tag: RComponentSFC_IR_Tag): readonly ComponentSFCTagInputContract[];
@@ -1,6 +1,9 @@
1
- import { ComponentSFCInteractionTrigger } from '../component/sfc/ir.types';
1
+ import { ComponentSFCInteractionKeyboardCondition, ComponentSFCInteractionTrigger } from '../component/sfc/ir.types';
2
2
  import { DiagnosticsSeverityNumber, DiagnosticsSignal, EndgeDiagnosticsOutputConfiguration, EndgeDiagnosticsConfiguration, EndgeDiagnosticsRoute } from '../diagnostics/diagnostics.types';
3
3
  import { EndgeExecutionContext } from '../runtime/execution-context.types';
4
+ import { EndgeJSONValue } from '../source/configuration-source.types';
5
+ export type EndgeConfigurationValues = Record<string, Record<string, EndgeJSONValue>>;
6
+ export type EndgeConfigurationValuePatch = Record<string, Record<string, EndgeValueOverride<EndgeJSONValue>>>;
4
7
  export interface EndgeLocaleDefinition {
5
8
  code: string;
6
9
  displayName: string;
@@ -11,6 +14,10 @@ export interface EndgeThemeDefinition {
11
14
  identity: string;
12
15
  displayName: string;
13
16
  }
17
+ export interface EndgeTimezoneDefinition {
18
+ identity: string;
19
+ displayName: string;
20
+ }
14
21
  export interface EndgeVariableDefinition {
15
22
  name: string;
16
23
  defaultValue: string;
@@ -20,6 +27,17 @@ export interface EndgeSFCEditingConfiguration {
20
27
  cancelOn: ComponentSFCInteractionTrigger[];
21
28
  commitOn: ComponentSFCInteractionTrigger[];
22
29
  }
30
+ export type EndgeTooltipSide = 'top' | 'right' | 'bottom' | 'left';
31
+ export type EndgeTooltipAlign = 'start' | 'center' | 'end';
32
+ /** Effective behavioral defaults of the single Shell-owned tooltip overlay. */
33
+ export interface EndgeTooltipConfiguration {
34
+ side: EndgeTooltipSide;
35
+ align: EndgeTooltipAlign;
36
+ openDelay: number;
37
+ closeDelay: number;
38
+ /** Optional keyboard state required while the pointer or focus activates a tooltip. */
39
+ keyboard?: ComponentSFCInteractionKeyboardCondition;
40
+ }
23
41
  /** Полная конфигурация, с которой компилируется один Endge context. */
24
42
  export interface EndgeConfiguration {
25
43
  vars: EndgeVariableDefinition[];
@@ -28,14 +46,22 @@ export interface EndgeConfiguration {
28
46
  fallbackLocale: string;
29
47
  themes: EndgeThemeDefinition[];
30
48
  defaultTheme: string;
49
+ timezones: EndgeTimezoneDefinition[];
50
+ defaultTimezone: string;
31
51
  defaultAuthProfileIdentity: string | null;
32
52
  sfcAdapterIds: string[];
33
53
  defaultSfcAdapterId: string;
34
54
  /** Effective triggers, которые наследуют editable-узлы без локальных атрибутов. */
35
55
  sfcEditing: EndgeSFCEditingConfiguration;
56
+ /** Effective tooltip behavior. Visual styling is owned by CSS and adapter hooks. */
57
+ tooltips: EndgeTooltipConfiguration;
36
58
  /** Настройки telemetry, output adapters, routing и snapshots. */
37
59
  diagnostics: EndgeDiagnosticsConfiguration;
60
+ /** Persisted/effective values grouped by Configuration document identity. */
61
+ values: EndgeConfigurationValues;
38
62
  }
63
+ /** Deep-readonly, SFC-visible effective configuration projection. */
64
+ export type EndgePublicConfigurationSnapshot = Readonly<Omit<EndgeConfiguration, 'vars' | 'diagnostics' | 'values'> & Record<string, unknown>>;
39
65
  export type EndgeValueOverride<T> = {
40
66
  op: 'set';
41
67
  value: T;
@@ -47,6 +73,14 @@ export interface EndgeSFCEditingConfigurationPatch {
47
73
  cancelOn?: EndgeValueOverride<ComponentSFCInteractionTrigger[]>;
48
74
  commitOn?: EndgeValueOverride<ComponentSFCInteractionTrigger[]>;
49
75
  }
76
+ /** Field-level tooltip overrides for one configuration cascade layer. */
77
+ export interface EndgeTooltipConfigurationPatch {
78
+ side?: EndgeValueOverride<EndgeTooltipSide>;
79
+ align?: EndgeValueOverride<EndgeTooltipAlign>;
80
+ openDelay?: EndgeValueOverride<number>;
81
+ closeDelay?: EndgeValueOverride<number>;
82
+ keyboard?: EndgeValueOverride<ComponentSFCInteractionKeyboardCondition>;
83
+ }
50
84
  export type EndgeCollectionPatchEntry<T> = {
51
85
  key: string;
52
86
  op: 'upsert';
@@ -66,12 +100,17 @@ export interface EndgeConfigurationPatch {
66
100
  fallbackLocale?: EndgeValueOverride<string>;
67
101
  themes?: EndgeCollectionPatch<EndgeThemeDefinition>;
68
102
  defaultTheme?: EndgeValueOverride<string>;
103
+ timezones?: EndgeCollectionPatch<EndgeTimezoneDefinition>;
104
+ defaultTimezone?: EndgeValueOverride<string>;
69
105
  defaultAuthProfileIdentity?: EndgeValueOverride<string>;
70
106
  sfcAdapterIds?: EndgeCollectionPatch<string>;
71
107
  defaultSfcAdapterId?: EndgeValueOverride<string>;
72
108
  sfcEditing?: EndgeSFCEditingConfigurationPatch;
109
+ tooltips?: EndgeTooltipConfigurationPatch;
73
110
  /** Локальный contribution diagnostics для текущего configuration layer. */
74
111
  diagnostics?: EndgeDiagnosticsConfigurationPatch;
112
+ /** Field-level overrides of source-backed Configuration values. */
113
+ values?: EndgeConfigurationValuePatch;
75
114
  }
76
115
  /** Patch локальной collection policy модуля диагностики. */
77
116
  export interface EndgeDiagnosticsCollectionPatch {
@@ -24,6 +24,7 @@ import { RStream } from '../../entities/reflect/RStream';
24
24
  import { RUpdate } from '../../entities/reflect/RUpdate';
25
25
  import { RMock } from '../../entities/reflect/RMock';
26
26
  import { RComputation } from '../../entities/reflect/RComputation';
27
+ import { RConfiguration } from '../../entities/reflect/RConfiguration';
27
28
  /**
28
29
  * Разновидности типов компонентов
29
30
  */
@@ -75,6 +76,7 @@ export declare enum DomainSectionType {
75
76
  Tenant = "tenant",
76
77
  Policy = "policy",
77
78
  Style = "style",
79
+ Configuration = "configuration",
78
80
  PageTemplate = "page-template",
79
81
  Page = "page",
80
82
  Navigation = "navigation",
@@ -86,7 +88,7 @@ export declare enum DomainSectionType {
86
88
  /**
87
89
  * Все возможные типы документов
88
90
  */
89
- export type DomainDocumentType = 'primitive' | 'type' | 'action' | 'converter' | 'computation' | 'data-view' | 'composition' | 'store' | 'stream' | 'update' | 'mock' | 'integration' | 'page-template' | 'page' | 'navigation' | 'environment' | 'policy' | 'style' | 'vocabs' | 'i18n-bundles' | 'auth-profile' | 'tenant' | 'project' | 'workspace' | Exclude<ComponentType, ComponentType.Component | ComponentType.Html> | QueryType | ParameterType | FilterType;
91
+ export type DomainDocumentType = 'primitive' | 'type' | 'action' | 'converter' | 'computation' | 'data-view' | 'composition' | 'store' | 'stream' | 'update' | 'mock' | 'integration' | 'page-template' | 'page' | 'navigation' | 'environment' | 'policy' | 'style' | 'configuration' | 'vocabs' | 'i18n-bundles' | 'auth-profile' | 'tenant' | 'project' | 'workspace' | Exclude<ComponentType, ComponentType.Component | ComponentType.Html> | QueryType | ParameterType | FilterType;
90
92
  /**
91
93
  * Описывает любой документ
92
94
  */
@@ -98,4 +100,4 @@ export interface Document {
98
100
  /**
99
101
  * Описывает любой документ рефлекцию
100
102
  */
101
- export type RDocument = RComponent | RComponentSFC | RQuery | RDataView | RComposition | RStore | RStream | RUpdate | RMock | RAction | RConverter | RComputation | RIntegration | RParameter | RFilter | RPolicy | RStyle | RType | RVocabs | RI18nBundle | RAuthProfile | RWorkspace | RTenant | RPageTemplate | RPage | RNavigation;
103
+ export type RDocument = RComponent | RComponentSFC | RQuery | RDataView | RComposition | RStore | RStream | RUpdate | RMock | RAction | RConverter | RComputation | RIntegration | RParameter | RFilter | RPolicy | RStyle | RConfiguration | RType | RVocabs | RI18nBundle | RAuthProfile | RWorkspace | RTenant | RPageTemplate | RPage | RNavigation;
@@ -26,6 +26,7 @@ export interface EndgeDomainPlain {
26
26
  tenants: unknown[];
27
27
  policies: unknown[];
28
28
  styles: unknown[];
29
+ configurations: unknown[];
29
30
  vocabs: unknown[];
30
31
  authProfiles: unknown[];
31
32
  i18nBundles: unknown[];
@@ -57,6 +58,7 @@ export interface EndgePortableDocuments {
57
58
  'auth-profiles': unknown[];
58
59
  navigations: unknown[];
59
60
  styles: unknown[];
61
+ configurations: unknown[];
60
62
  }
61
63
  export interface EndgeInstalledIntegrationExport {
62
64
  identity: string;
@@ -1,6 +1,6 @@
1
1
  import { EndgeLiveDomainSnapshot, EndgeLiveDomainDocument, EndgeWorkspaceServerState } from './domain-snapshot.type';
2
2
  /** Канонические коллекции persisted-домена нового backend. */
3
- export type EndgeDomainCollection = 'projects' | 'tenants' | 'environments' | 'folders' | 'types' | 'queries' | 'data-views' | 'compositions' | 'stores' | 'streams' | 'updates' | 'mocks' | 'components' | 'actions' | 'filters' | 'converters' | 'computations' | 'vocabs' | 'i18n-bundles' | 'auth-profiles' | 'navigations' | 'styles';
3
+ export type EndgeDomainCollection = 'projects' | 'tenants' | 'environments' | 'folders' | 'types' | 'queries' | 'data-views' | 'compositions' | 'stores' | 'streams' | 'updates' | 'mocks' | 'components' | 'actions' | 'filters' | 'converters' | 'computations' | 'vocabs' | 'i18n-bundles' | 'auth-profiles' | 'navigations' | 'styles' | 'configurations';
4
4
  /** Возможности выбранного источника домена. */
5
5
  export interface EndgeDomainProviderCapabilities {
6
6
  snapshot: true;
@@ -1,9 +1,10 @@
1
- import { EndgeConfiguration, EndgeLocaleDefinition, EndgeThemeDefinition, EndgeVariableDefinition } from '../configuration/configuration.type';
1
+ import { EndgeConfiguration, EndgeLocaleDefinition, EndgeThemeDefinition, EndgeTimezoneDefinition, EndgeVariableDefinition } from '../configuration/configuration.type';
2
2
  import { EntityManagement } from './entity-management.type';
3
3
  export type EndgeWorkspaceLocale = EndgeLocaleDefinition;
4
4
  export type EndgeDataMode = 'live' | 'mock';
5
5
  export type EndgeWorkspaceLocaleLabelMode = keyof Pick<EndgeWorkspaceLocale, 'displayName' | 'shortLabel'>;
6
6
  export type EndgeWorkspaceTheme = EndgeThemeDefinition;
7
+ export type EndgeWorkspaceTimezone = EndgeTimezoneDefinition;
7
8
  export type EndgeWorkspaceVar = EndgeVariableDefinition;
8
9
  export interface WorkspaceIntegrationReference {
9
10
  integrationId: string | number;
@@ -10,9 +10,10 @@ import { ProgramMetadata } from './program-metadata.types';
10
10
  import { ComputationProgramPayload } from '../computation/computation-program.types';
11
11
  import { EndgeStyleSheetArtifact } from '../style/style.types';
12
12
  import { ActionImplementation, ActionTargetSelector } from '../runtime/action.types';
13
+ export type { ConfigurationProgramPayload } from '../source/configuration-source.types';
13
14
  export type ProgramArtifactKey = string;
14
15
  /** Тип доменной сущности, для которой compiler может построить program artifact. */
15
- export type ProgramEntityType = 'type' | 'component-sfc' | 'computation' | 'action' | 'query' | 'data-view' | 'store' | 'stream' | 'update' | 'filter' | 'composition' | 'style';
16
+ export type ProgramEntityType = 'type' | 'component-sfc' | 'computation' | 'action' | 'query' | 'data-view' | 'store' | 'stream' | 'update' | 'filter' | 'composition' | 'style' | 'configuration';
16
17
  /** Итоговый статус artifact после компиляции и валидации. */
17
18
  export type ProgramArtifactStatus = 'valid' | 'warning' | 'error';
18
19
  /** Возможность, которую artifact предоставляет runtime/render слоям. */
@@ -136,7 +137,11 @@ export interface QueryProgramPayload {
136
137
  endpoint: QueryProgramRequestValue<string>;
137
138
  /** Тело запроса, GraphQL document или custom query expression. */
138
139
  query: QueryProgramRequestValue<string>;
139
- /** Заголовки REST query. */
140
+ /** GraphQL operation name, если artifact использует query-gql transport. */
141
+ operationName?: string;
142
+ /** Политика GraphQL errors в HTTP 2xx response. */
143
+ errorPolicy?: 'throw' | 'ignore';
144
+ /** HTTP headers Query transport. */
140
145
  headers?: QueryProgramRequestValue<Record<string, string>>;
141
146
  /** Auth config, подготовленный для runtime query layer. */
142
147
  auth?: QueryProgramRequestValue<unknown>;
@@ -148,6 +153,8 @@ export interface QueryProgramPayload {
148
153
  props: QueryProgramProp[];
149
154
  /** Безопасный request.body IR. При null отправляется пустой object payload. */
150
155
  requestBody: SourceExpressionIR | null;
156
+ /** Безопасный GraphQL variables IR. */
157
+ requestVariables?: SourceExpressionIR | null;
151
158
  /** Включены ли mock data для query. */
152
159
  mockDataEnabled?: boolean;
153
160
  /** Mock payload query. */
@@ -1,3 +1,4 @@
1
+ import { EndgePublicConfigurationSnapshot } from '../configuration/configuration.type';
1
2
  export type EndgePersistenceDriver = 'local' | 'disabled';
2
3
  export interface EndgePersistenceOptions {
3
4
  driver?: EndgePersistenceDriver;
@@ -13,6 +14,31 @@ export interface EndgeContextSnapshot {
13
14
  user: string | null;
14
15
  locale: string | null;
15
16
  theme: string | null;
17
+ timezone: string | null;
18
+ }
19
+ /** Volatile keyboard state supplied by the active UI adapter. */
20
+ export interface EndgeKeyboardContextSnapshot {
21
+ platform: 'macos' | 'windows' | 'linux' | 'unknown';
22
+ modifiers: {
23
+ ctrl: boolean;
24
+ shift: boolean;
25
+ alt: boolean;
26
+ meta: boolean;
27
+ mod: boolean;
28
+ altGraph: boolean;
29
+ };
30
+ held: {
31
+ key: string[];
32
+ code: string[];
33
+ };
34
+ }
35
+ /** Full read-only SFC context. Volatile input state is deliberately not serializable. */
36
+ export interface EndgeRuntimeContextSnapshot extends EndgeContextSnapshot {
37
+ /** Static effective configuration of the current build; never persisted or Raph-backed. */
38
+ config: EndgePublicConfigurationSnapshot;
39
+ input: {
40
+ keyboard: EndgeKeyboardContextSnapshot;
41
+ };
16
42
  }
17
43
  export interface EndgePersistenceScope {
18
44
  workspaceId: string;
@@ -0,0 +1,47 @@
1
+ import { ProgramDiagnostic } from '../program/program.types';
2
+ import { TypeSourceExpression } from './type-source.types';
3
+ /** JSON-serializable persisted configuration value. */
4
+ export type EndgeJSONValue = null | boolean | number | string | EndgeJSONValue[] | {
5
+ [key: string]: EndgeJSONValue;
6
+ };
7
+ /** One source-backed user setting. */
8
+ export interface ConfigurationSourceValueDefinition {
9
+ key: string;
10
+ type: TypeSourceExpression;
11
+ defaultValue: EndgeJSONValue;
12
+ defaultWasInferred: boolean;
13
+ label: string;
14
+ description?: string;
15
+ min?: number;
16
+ max?: number;
17
+ step?: number;
18
+ }
19
+ /** Canonical Configuration Source v1 document. */
20
+ export interface ConfigurationSourceDocument {
21
+ values: ConfigurationSourceValueDefinition[];
22
+ }
23
+ /** Early/compiler-facing Configuration artifact. */
24
+ export interface ConfigurationProgramPayload {
25
+ type: 'configuration';
26
+ identity: string;
27
+ displayName: string;
28
+ sourceVersion: 1;
29
+ values: ConfigurationSourceValueDefinition[];
30
+ }
31
+ export interface ConfigurationSourceCompileResult {
32
+ ast: unknown | null;
33
+ document: ConfigurationSourceDocument | null;
34
+ /** Best-effort AST projection for visual repair when semantic diagnostics block compilation. */
35
+ draftDocument?: ConfigurationSourceDocument | null;
36
+ diagnostics: Omit<ProgramDiagnostic, 'entityRef'>[];
37
+ }
38
+ export interface EndgeConfigurationSchemaEntry {
39
+ id: string | number;
40
+ identity: string;
41
+ displayName: string;
42
+ description?: string | null;
43
+ sourceVersion: number;
44
+ document: ConfigurationSourceDocument | null;
45
+ diagnostics: Omit<ProgramDiagnostic, 'entityRef'>[];
46
+ status: 'valid' | 'warning' | 'error';
47
+ }
@@ -3,12 +3,14 @@ import { ProgramDiagnostic, QueryProgramPayload } from '../program/program.types
3
3
  import { DataViewRef } from './data-view-source.types';
4
4
  import { ProgramMetadataMap } from '../program/program-metadata.types';
5
5
  import { QueryProgramProp, SourceExpressionIR, SourceFieldDefinition } from './source-expression.types';
6
- /** Поддерживаемые kind query source v1. */
7
- export type QuerySourceKind = 'rest';
6
+ /** Поддерживаемые transport-kind Query source. */
7
+ export type QuerySourceKind = 'rest' | 'graphql';
8
+ /** Политика GraphQL errors в HTTP 2xx response. */
9
+ export type QueryGraphQLErrorPolicy = 'throw' | 'ignore';
8
10
  /** Static request value or a safe expression evaluated from Query props at runtime. */
9
11
  export type QuerySourceRequestValue<T> = T | SourceExpressionIR;
10
12
  /** Source-описание HTTP request части REST-запроса. */
11
- export interface QuerySourceRequest {
13
+ export interface QuerySourceRestRequest {
12
14
  /** Endpoint или Endge var-token вида {API_URL}. */
13
15
  endpoint: QuerySourceRequestValue<string>;
14
16
  /** REST path. В legacy RQuery это поле хранится как query. */
@@ -26,6 +28,25 @@ export interface QuerySourceRequest {
26
28
  /** Безопасный body expression для query source v2. */
27
29
  body?: SourceExpressionIR | null;
28
30
  }
31
+ /** Source-описание GraphQL operation и variables. */
32
+ export interface QuerySourceGraphQLRequest {
33
+ /** GraphQL endpoint или Endge var-token вида {API_URL}. */
34
+ endpoint: QuerySourceRequestValue<string>;
35
+ /** Статический GraphQL document из gql template. */
36
+ document: string;
37
+ /** Operation name для document с несколькими operations. */
38
+ operationName?: string;
39
+ /** Безопасное variables expression, построенное через variables(...). */
40
+ variables?: SourceExpressionIR | null;
41
+ /** Дополнительные HTTP headers. */
42
+ headers: QuerySourceRequestValue<Record<string, string>>;
43
+ /** Auth config. */
44
+ auth: QuerySourceRequestValue<RQueryAuth>;
45
+ /** Request timeout. */
46
+ timeoutMs?: QuerySourceRequestValue<number>;
47
+ /** Обработка GraphQL errors в HTTP 2xx response. */
48
+ errorPolicy: QueryGraphQLErrorPolicy;
49
+ }
29
50
  /** Source-описание mock-режима запроса. */
30
51
  export interface QuerySourceMock {
31
52
  /** Включены ли mock data. */
@@ -48,12 +69,7 @@ export interface QuerySourceOutput {
48
69
  contract?: SourceFieldDefinition | null;
49
70
  }
50
71
  export type QuerySourceOutputs = QuerySourceOutput[];
51
- /** Canonical authoring-модель source-only Query v2. */
52
- export interface QuerySourceDocument {
53
- /** Тип source query. */
54
- kind: QuerySourceKind;
55
- /** Request config. */
56
- request: QuerySourceRequest;
72
+ interface QuerySourceDocumentBase {
57
73
  /** Единственный runtime input contract Query. */
58
74
  props: QueryProgramProp[];
59
75
  /** Ordered output graph: response/output sources and transformations. */
@@ -61,6 +77,16 @@ export interface QuerySourceDocument {
61
77
  /** Mock config. */
62
78
  mock: QuerySourceMock;
63
79
  }
80
+ export interface QuerySourceRestDocument extends QuerySourceDocumentBase {
81
+ kind: 'rest';
82
+ request: QuerySourceRestRequest;
83
+ }
84
+ export interface QuerySourceGraphQLDocument extends QuerySourceDocumentBase {
85
+ kind: 'graphql';
86
+ request: QuerySourceGraphQLRequest;
87
+ }
88
+ /** Canonical authoring-модель source-only Query v2. */
89
+ export type QuerySourceDocument = QuerySourceRestDocument | QuerySourceGraphQLDocument;
64
90
  /** Публичные editor-slots, которые query source patcher умеет менять точечно. */
65
91
  export type QuerySourcePatchPath = 'kind' | 'request.endpoint' | 'request.path' | 'request.method' | 'request.headers' | 'request.auth' | 'request.timeoutMs' | 'request.formUrlencoded' | 'request.body' | 'props' | 'outputs' | 'mock.enabled' | 'mock.data';
66
92
  /** Операция AST-патчинга query source. */
@@ -87,3 +113,4 @@ export interface QuerySourceCompileResult {
87
113
  /** Diagnostics source compiler-а. */
88
114
  diagnostics: Omit<ProgramDiagnostic, 'entityRef'>[];
89
115
  }
116
+ export {};
@@ -1,6 +1,7 @@
1
1
  import { I18nCatalogProvenance, I18nRuntimeCatalog } from '../i18n.types';
2
+ import { TypeSourceDefinition } from './type-source.types';
2
3
  /** Канонический тип source-документа, для которого выбирается source strategy. */
3
- export type SourceKind = 'query' | 'data-view' | 'filter' | 'composition' | 'store' | 'stream' | 'update' | 'computation' | 'style' | 'type';
4
+ export type SourceKind = 'query' | 'data-view' | 'filter' | 'composition' | 'store' | 'stream' | 'update' | 'computation' | 'style' | 'type' | 'configuration';
4
5
  /** Тип нейтральной source completion без привязки к Monaco или другому editor API. */
5
6
  export type SourceLanguageCompletionKind = 'keyword' | 'function' | 'property' | 'value' | 'snippet';
6
7
  /** Позиция курсора внутри source-документа. */
@@ -21,6 +22,11 @@ export interface SourceLanguageContext {
21
22
  identity: string;
22
23
  displayName?: string;
23
24
  category?: 'primitive' | 'reference' | 'user';
25
+ definition?: TypeSourceDefinition | null;
26
+ entityReference?: {
27
+ target: string;
28
+ storage: 'id' | 'identity';
29
+ };
24
30
  }>;
25
31
  /** Identity of the document that owns current source diagnostics. */
26
32
  ownerIdentity?: string;
@@ -197,7 +203,7 @@ export interface SourceLanguageStrategy {
197
203
  /** Описывает подсветку, brackets и editor triggers в adapter-neutral формате. */
198
204
  syntax: SourceLanguageSyntaxDefinition;
199
205
  /** Возвращает базовый source для новой сущности. */
200
- createDefaultSource: () => string;
206
+ createDefaultSource: (variant?: string) => string;
201
207
  /** Нормализует поддержанный syntax, сохраняя остальной авторский source. */
202
208
  normalize?: (source: string) => string;
203
209
  /** Валидирует source без знания о конкретном editor adapter. */
@@ -0,0 +1,32 @@
1
+ export type EndgeTooltipMarkdownInline = {
2
+ kind: 'text';
3
+ value: string;
4
+ } | {
5
+ kind: 'strong';
6
+ children: EndgeTooltipMarkdownInline[];
7
+ } | {
8
+ kind: 'emphasis';
9
+ children: EndgeTooltipMarkdownInline[];
10
+ } | {
11
+ kind: 'code';
12
+ value: string;
13
+ } | {
14
+ kind: 'link';
15
+ href: string;
16
+ children: EndgeTooltipMarkdownInline[];
17
+ };
18
+ export type EndgeTooltipMarkdownBlock = {
19
+ kind: 'heading';
20
+ level: 1 | 2 | 3;
21
+ children: EndgeTooltipMarkdownInline[];
22
+ } | {
23
+ kind: 'paragraph';
24
+ children: EndgeTooltipMarkdownInline[];
25
+ } | {
26
+ kind: 'list';
27
+ ordered: boolean;
28
+ items: EndgeTooltipMarkdownInline[][];
29
+ } | {
30
+ kind: 'code-block';
31
+ value: string;
32
+ };