@case-framework/survey-core 0.1.0 → 0.3.0

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 ADDED
@@ -0,0 +1,181 @@
1
+ # @case-framework/survey-core
2
+
3
+ Headless TypeScript core for defining, editing, running, and exporting surveys in the CASE ecosystem.
4
+
5
+ ## Intention
6
+
7
+ `@case-framework/survey-core` is the domain/runtime layer behind CASE surveys. It is designed to:
8
+
9
+ - Provide a framework-agnostic survey model.
10
+ - Support custom item types through a plugin registry.
11
+ - Evaluate display logic, validations, and template expressions at runtime.
12
+ - Produce normalized responses and export-ready data (including CSV).
13
+
14
+ ## Scope
15
+
16
+ This package includes:
17
+
18
+ - Survey model and serialization (`Survey`).
19
+ - Item contracts and registry utilities (`SurveyItemCore`, `createItemCore`, `createFullRegistry`).
20
+ - Runtime engine (`SurveyEngineCore`) for render order, conditions, template values, events, and responses.
21
+ - Expression model + evaluator (`Expression`, `FunctionExpression`, `ExpressionEvaluator`, etc.).
22
+ - Response models (`SurveyResponse`, `SurveyItemResponse`, `ResponseItem`).
23
+ - Response export tooling (`SurveyResponseExporter`, CSV helpers, codebook generation).
24
+ - Editor state/manipulation APIs via the `@case-framework/survey-core/editor` entrypoint.
25
+
26
+ This package does not include:
27
+
28
+ - UI rendering components.
29
+ - Network or persistence layers.
30
+ - App-level state management.
31
+
32
+ For UI integration, use `@case-framework/survey-ui` on top of this core package.
33
+
34
+ ## Installation
35
+
36
+ ```bash
37
+ pnpm add @case-framework/survey-core
38
+ ```
39
+
40
+ ## Entrypoints
41
+
42
+ - `@case-framework/survey-core`: runtime/model/expressions/exporter APIs.
43
+ - `@case-framework/survey-core/editor`: editing APIs (`SurveyEditor`, undo/redo, copy/paste helpers).
44
+
45
+ ## Usage
46
+
47
+ ### 1. Define a custom item type and registry
48
+
49
+ ```ts
50
+ import {
51
+ SurveyItemCore,
52
+ ValueRefTypeLookup,
53
+ ValueType,
54
+ ItemTypeRegistry,
55
+ } from '@case-framework/survey-core';
56
+
57
+ type SingleChoiceConfig = {
58
+ id: string;
59
+ options: Array<{ id: string; key: string; type: string }>;
60
+ };
61
+
62
+ class SingleChoiceQuestionItemCore extends SurveyItemCore<'singleChoiceQuestion', SingleChoiceConfig> {
63
+ readonly type = 'singleChoiceQuestion';
64
+
65
+ parseConfig(rawConfig: unknown): SingleChoiceConfig {
66
+ const cfg = (rawConfig ?? {}) as Partial<SingleChoiceConfig>;
67
+ return {
68
+ id: cfg.id ?? this.id,
69
+ options: cfg.options ?? [],
70
+ };
71
+ }
72
+
73
+ isInteractive(): boolean {
74
+ return true;
75
+ }
76
+
77
+ getAvailableResponseValueSlots(): ValueRefTypeLookup {
78
+ return {
79
+ [`${this.id}...get...${this.config.id}`]: ValueType.reference,
80
+ [`${this.id}...isDefined...${this.config.id}`]: ValueType.boolean,
81
+ };
82
+ }
83
+ }
84
+
85
+ const pluginRegistry: ItemTypeRegistry = {
86
+ singleChoiceQuestion: SingleChoiceQuestionItemCore,
87
+ };
88
+ ```
89
+
90
+ ### 2. Load a survey and run it with the engine
91
+
92
+ ```ts
93
+ import {
94
+ Survey,
95
+ SurveyEngineCore,
96
+ ResponseItem,
97
+ ValueType,
98
+ ReservedSurveyItemTypes,
99
+ } from '@case-framework/survey-core';
100
+
101
+ const survey = Survey.fromJson(
102
+ {
103
+ $schema:
104
+ 'https://github.com/case-framework/case-survey-toolkit/packages/survey-core/schemas/survey-schema.json',
105
+ surveyItems: [
106
+ {
107
+ id: 'root',
108
+ key: 'root',
109
+ itemType: ReservedSurveyItemTypes.Group,
110
+ config: { isRoot: true, items: ['q1'] },
111
+ },
112
+ {
113
+ id: 'q1',
114
+ key: 'q1',
115
+ itemType: 'singleChoiceQuestion',
116
+ config: {
117
+ id: 'q1',
118
+ options: [
119
+ { id: 'yes', key: 'yes', type: 'option' },
120
+ { id: 'no', key: 'no', type: 'option' },
121
+ ],
122
+ },
123
+ },
124
+ ],
125
+ },
126
+ pluginRegistry
127
+ );
128
+
129
+ const engine = new SurveyEngineCore(survey, { locale: 'en' });
130
+
131
+ // Set one item response (slot id == config.id in this example).
132
+ engine.setResponse(
133
+ 'q1',
134
+ new ResponseItem([['q1', { type: ValueType.reference, value: 'yes' }]])
135
+ );
136
+
137
+ const pages = engine.getSurveyPages('large');
138
+ const responses = engine.getResponses();
139
+ const events = engine.getEvents();
140
+ ```
141
+
142
+ ### 3. Export responses to CSV
143
+
144
+ ```ts
145
+ import {
146
+ SurveyResponse,
147
+ SurveyResponseExporter,
148
+ } from '@case-framework/survey-core';
149
+
150
+ const response = new SurveyResponse('response-1', 'v1');
151
+ response.responses = new Map(responses.map((r) => [r.itemId, r]));
152
+ response.submittedAt = Math.floor(Date.now() / 1000);
153
+
154
+ const exporter = new SurveyResponseExporter([
155
+ {
156
+ versionId: 'v1',
157
+ surveyKey: survey.surveyKey ?? 'survey',
158
+ survey,
159
+ },
160
+ ]);
161
+
162
+ const csv = exporter.exportResponsesToCsv([response]);
163
+ ```
164
+
165
+ ### 4. Edit surveys with the editor entrypoint
166
+
167
+ ```ts
168
+ import { SurveyEditor, CommitSource } from '@case-framework/survey-core/editor';
169
+
170
+ const editor = new SurveyEditor(survey, { pluginRegistry });
171
+
172
+ const newItem = survey.createItemFromRaw({
173
+ id: 'q2',
174
+ key: 'q2',
175
+ itemType: 'singleChoiceQuestion',
176
+ config: { id: 'q2', options: [] },
177
+ });
178
+
179
+ editor.addItem({ parentId: survey.rootItem!.id }, newItem);
180
+ editor.commit({ label: 'Add q2', source: CommitSource.USER });
181
+ ```
@@ -1,5 +1,83 @@
1
- import { S as RawSurveyItem, a as JsonComponentContent, i as RawSurvey, n as ItemTypeRegistry, t as Survey, u as SurveyItemTranslations, w as SurveyItemCore } from "./survey-TUPUXiXl.mjs";
1
+ import { C as SurveyCardContent, L as RawSurveyItem, S as NavigationContent, T as SurveyItemTranslations, W as TemplateValueDefinition, b as JsonComponentContent, j as Content, p as ItemTypeRegistry, t as Survey, y as RawSurvey, z as SurveyItemCore } from "./survey-wnGyIY66.mjs";
2
2
 
3
+ //#region src/editor/ai-context.d.ts
4
+ type SurveyAIContextScope = "tiny" | "focused" | "full";
5
+ type SurveyAIContextPurpose = "generic" | "key-suggestion" | "label-suggestion" | "item-generation" | "translation" | "condition-management";
6
+ interface SurveyAIOutlineNode {
7
+ itemId: string;
8
+ parentId?: string;
9
+ depth: number;
10
+ itemType: string;
11
+ key: string;
12
+ fullKey: string;
13
+ itemLabel?: string;
14
+ childCount: number;
15
+ }
16
+ interface SurveyAIFocus {
17
+ focusItemId: string;
18
+ parentItemId?: string;
19
+ pathItemIds: string[];
20
+ siblingItemIds: string[];
21
+ childItemIds: string[];
22
+ }
23
+ interface SurveyAITranslationSnippet {
24
+ locale: string;
25
+ contentKey: string;
26
+ text: string;
27
+ }
28
+ interface SurveyAIItemContextNode {
29
+ itemId: string;
30
+ itemType: string;
31
+ itemKey: string;
32
+ fullKey: string;
33
+ itemLabel?: string;
34
+ siblingKeys: string[];
35
+ translations: SurveyAITranslationSnippet[];
36
+ descendants: SurveyAIItemContextNode[];
37
+ }
38
+ interface SurveyAIKeyIndexEntry {
39
+ itemId: string;
40
+ itemType: string;
41
+ key: string;
42
+ fullKey: string;
43
+ itemLabel?: string;
44
+ path: string[];
45
+ }
46
+ interface SurveyAIContextIndexes {
47
+ keyIndex: SurveyAIKeyIndexEntry[];
48
+ responseSlots?: string[];
49
+ }
50
+ interface SurveyAIContextPack {
51
+ purpose: SurveyAIContextPurpose;
52
+ scope: SurveyAIContextScope;
53
+ surveyKey?: string;
54
+ locales: string[];
55
+ itemCount: number;
56
+ outline: SurveyAIOutlineNode[];
57
+ focus?: SurveyAIFocus;
58
+ focusItem?: SurveyAIItemContextNode;
59
+ indexes?: SurveyAIContextIndexes;
60
+ flags: {
61
+ outlineTruncated: boolean;
62
+ rawSurveyIncluded: boolean;
63
+ focusItemTreeTruncated: boolean;
64
+ };
65
+ rawSurvey?: RawSurvey;
66
+ }
67
+ interface BuildSurveyAIContextPackOptions {
68
+ purpose?: SurveyAIContextPurpose;
69
+ scope?: SurveyAIContextScope;
70
+ focusItemId?: string;
71
+ includeRawSurvey?: boolean;
72
+ outlineLimit?: number;
73
+ includeIndexes?: boolean;
74
+ includeFocusItemTree?: boolean;
75
+ focusItemTreeLimit?: number;
76
+ translationSnippetsPerItemLimit?: number;
77
+ translationSnippetTextLimit?: number;
78
+ }
79
+ declare function buildSurveyAIContextPack(survey: Survey, options?: BuildSurveyAIContextPackOptions): SurveyAIContextPack;
80
+ //#endregion
3
81
  //#region src/editor/types.d.ts
4
82
  interface Target {
5
83
  parentId: string;
@@ -189,6 +267,7 @@ declare class SurveyEditor {
189
267
  private _hasUncommittedChanges;
190
268
  private _pluginRegistry?;
191
269
  constructor(survey: Survey, config?: SurveyEditorConfig, meta?: CommitMeta);
270
+ /** Returns an immutable copy of the current survey state. */
192
271
  get survey(): Survey;
193
272
  get hasUncommittedChanges(): boolean;
194
273
  get undoRedo(): SurveyEditorUndoRedo;
@@ -225,21 +304,106 @@ declare class SurveyEditor {
225
304
  addItem(target: Target, item: SurveyItemCore, content?: SurveyItemTranslations): void;
226
305
  removeItem(itemId: string, nested?: boolean): boolean;
227
306
  moveItem(itemId: string, newTarget: Target): boolean;
307
+ /**
308
+ * Get a deep copy of an item's raw data.
309
+ * The returned object is independent of the survey—mutating it will not affect the survey.
310
+ * Use this when you need to edit an item in a form or pass it to updateItem after modifications.
311
+ *
312
+ * @param itemId - The ID of the item to copy
313
+ * @returns A deep copy of the item's RawSurveyItem data
314
+ * @throws Error if the item is not found
315
+ */
316
+ getItemDataCopy(itemId: string): RawSurveyItem;
317
+ /**
318
+ * Update an item's data in the survey.
319
+ * Can update common attributes (displayConditions, disabledConditions, validations, etc.)
320
+ * as well as type-specific config.
321
+ *
322
+ * Use getItemDataCopy to obtain an editable copy, modify it, then pass it here.
323
+ * Alternatively, pass a Partial to merge specific fields (top-level keys only;
324
+ * e.g. config replaces the entire config object).
325
+ *
326
+ * @param itemId - The ID of the item to update (must match data.id if provided)
327
+ * @param rawItemData - Full RawSurveyItem or Partial to merge. The id cannot be changed.
328
+ */
329
+ updateItem(itemId: string, rawItemData: RawSurveyItem | Partial<RawSurveyItem>): void;
228
330
  updateItemTranslations(itemId: string, updatedContent?: SurveyItemTranslations): boolean;
331
+ /**
332
+ * Update survey-level translations that are not tied to specific items.
333
+ * Use these for survey card, navigation, validation messages, etc.
334
+ */
335
+ updateSurveyTranslations(updates: {
336
+ surveyCard?: {
337
+ locale: string;
338
+ content?: SurveyCardContent;
339
+ };
340
+ navigation?: {
341
+ locale: string;
342
+ content?: NavigationContent;
343
+ };
344
+ validationMessages?: {
345
+ locale: string;
346
+ content?: {
347
+ invalidResponse?: Content;
348
+ };
349
+ };
350
+ }): void;
351
+ /**
352
+ * Get maxItemsPerPage immutably (returns a copy).
353
+ */
354
+ getMaxItemsPerPage(): {
355
+ large: number;
356
+ small: number;
357
+ } | undefined;
358
+ /**
359
+ * Update maxItemsPerPage.
360
+ */
361
+ updateMaxItemsPerPage(value: {
362
+ large: number;
363
+ small: number;
364
+ } | undefined): void;
365
+ /**
366
+ * Get metadata immutably (returns a copy).
367
+ */
368
+ getMetadata(): {
369
+ [key: string]: string;
370
+ } | undefined;
371
+ /**
372
+ * Update metadata.
373
+ */
374
+ updateMetadata(metadata: {
375
+ [key: string]: string;
376
+ } | undefined): void;
377
+ /**
378
+ * Get a template value immutably (returns a deep copy).
379
+ */
380
+ getTemplateValue(key: string): TemplateValueDefinition | undefined;
381
+ /**
382
+ * Get all template values immutably (returns a new Map with deep-copied values).
383
+ */
384
+ getTemplateValues(): Map<string, TemplateValueDefinition>;
385
+ /**
386
+ * Add or replace a template value.
387
+ */
388
+ setTemplateValue(key: string, templateValue: TemplateValueDefinition): void;
389
+ /**
390
+ * Remove a template value.
391
+ */
392
+ removeTemplateValue(key: string): void;
229
393
  /**
230
394
  * Copy a survey item and all its data to clipboard format
231
- * @param itemKey - The full key of the item to copy
395
+ * @param itemId - The ID of the item to copy
232
396
  * @returns Clipboard data that can be serialized to JSON for clipboard
233
397
  */
234
- copyItem(itemKey: string): SurveyItemClipboardData;
398
+ copyItem(itemId: string): SurveyItemClipboardData;
235
399
  /**
236
400
  * Paste a survey item from clipboard data to a target location
237
401
  * @param clipboardData - The clipboard data containing the item to paste
238
402
  * @param target - Target location where to paste the item
239
- * @returns The full key of the pasted item
403
+ * @returns The ID of the pasted item
240
404
  */
241
405
  pasteItem(clipboardData: SurveyItemClipboardData, target: Target): string;
242
406
  }
243
407
  //#endregion
244
- export { CommitMeta, CommitSource, ItemCopyPaste, SerializedSurveyEditor, SerializedTranslations, SurveyEditor, SurveyEditorConfig, SurveyEditorUndoRedo, SurveyItemClipboardData, Target, UndoRedoConfig };
408
+ export { BuildSurveyAIContextPackOptions, CommitMeta, CommitSource, ItemCopyPaste, SerializedSurveyEditor, SerializedTranslations, SurveyAIContextIndexes, SurveyAIContextPack, SurveyAIContextPurpose, SurveyAIContextScope, SurveyAIFocus, SurveyAIItemContextNode, SurveyAIKeyIndexEntry, SurveyAIOutlineNode, SurveyAITranslationSnippet, SurveyEditor, SurveyEditorConfig, SurveyEditorUndoRedo, SurveyItemClipboardData, Target, UndoRedoConfig, buildSurveyAIContextPack };
245
409
  //# sourceMappingURL=editor.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.mts","names":[],"sources":["../src/editor/types.ts","../src/editor/item-copy-paste.ts","../src/editor/undo-redo.ts","../src/editor/survey-editor.ts"],"mappings":"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"}
1
+ {"version":3,"file":"editor.d.mts","names":[],"sources":["../src/editor/ai-context.ts","../src/editor/types.ts","../src/editor/item-copy-paste.ts","../src/editor/undo-redo.ts","../src/editor/survey-editor.ts"],"mappings":"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"}