@contractspec/lib.example-shared-ui 1.11.0 → 1.12.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/.turbo/turbo-build.log +86 -11
- package/.turbo/turbo-prebuild.log +1 -0
- package/CHANGELOG.md +14 -0
- package/dist/EvolutionDashboard.d.ts +11 -0
- package/dist/EvolutionDashboard.d.ts.map +1 -0
- package/dist/EvolutionDashboard.js +804 -0
- package/dist/EvolutionSidebar.d.ts +19 -0
- package/dist/EvolutionSidebar.d.ts.map +1 -0
- package/dist/EvolutionSidebar.js +532 -0
- package/dist/LocalDataIndicator.d.ts +2 -0
- package/dist/LocalDataIndicator.d.ts.map +1 -0
- package/dist/LocalDataIndicator.js +63 -0
- package/dist/MarkdownView.d.ts +20 -0
- package/dist/MarkdownView.d.ts.map +1 -0
- package/dist/MarkdownView.js +304 -0
- package/dist/OverlayContextProvider.d.ts +79 -0
- package/dist/OverlayContextProvider.d.ts.map +1 -0
- package/dist/OverlayContextProvider.js +203 -0
- package/dist/PersonalizationInsights.d.ts +14 -0
- package/dist/PersonalizationInsights.d.ts.map +1 -0
- package/dist/PersonalizationInsights.js +456 -0
- package/dist/SaveToStudioButton.d.ts +8 -0
- package/dist/SaveToStudioButton.d.ts.map +1 -0
- package/dist/SaveToStudioButton.js +74 -0
- package/dist/SpecEditorPanel.d.ts +23 -0
- package/dist/SpecEditorPanel.d.ts.map +1 -0
- package/dist/SpecEditorPanel.js +720 -0
- package/dist/TemplateShell.d.ts +13 -0
- package/dist/TemplateShell.d.ts.map +1 -0
- package/dist/TemplateShell.js +190 -0
- package/dist/browser/EvolutionDashboard.js +803 -0
- package/dist/browser/EvolutionSidebar.js +531 -0
- package/dist/browser/LocalDataIndicator.js +62 -0
- package/dist/browser/MarkdownView.js +303 -0
- package/dist/browser/OverlayContextProvider.js +202 -0
- package/dist/browser/PersonalizationInsights.js +455 -0
- package/dist/browser/SaveToStudioButton.js +73 -0
- package/dist/browser/SpecEditorPanel.js +719 -0
- package/dist/browser/TemplateShell.js +189 -0
- package/dist/browser/hooks/index.js +1516 -0
- package/dist/browser/hooks/useBehaviorTracking.js +157 -0
- package/dist/browser/hooks/useEvolution.js +260 -0
- package/dist/browser/hooks/useRegistryTemplates.js +31 -0
- package/dist/browser/hooks/useSpecContent.js +579 -0
- package/dist/browser/hooks/useWorkflowComposer.js +493 -0
- package/dist/browser/index.js +3497 -0
- package/dist/browser/lib/component-registry.js +42 -0
- package/dist/browser/lib/runtime-context.js +15 -0
- package/dist/browser/lib/types.js +0 -0
- package/dist/browser/overlay-types.js +0 -0
- package/dist/browser/utils/fetchPresentationData.js +15 -0
- package/dist/browser/utils/generateSpecFromTemplate.js +423 -0
- package/dist/browser/utils/index.js +437 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +1517 -0
- package/dist/hooks/useBehaviorTracking.d.ts +56 -0
- package/dist/hooks/useBehaviorTracking.d.ts.map +1 -0
- package/dist/hooks/useBehaviorTracking.js +158 -0
- package/dist/hooks/useEvolution.d.ts +111 -0
- package/dist/hooks/useEvolution.d.ts.map +1 -0
- package/dist/hooks/useEvolution.js +261 -0
- package/dist/hooks/useRegistryTemplates.d.ts +10 -0
- package/dist/hooks/useRegistryTemplates.d.ts.map +1 -0
- package/dist/hooks/useRegistryTemplates.js +32 -0
- package/dist/hooks/useSpecContent.d.ts +41 -0
- package/dist/hooks/useSpecContent.d.ts.map +1 -0
- package/dist/hooks/useSpecContent.js +580 -0
- package/dist/hooks/useWorkflowComposer.d.ts +94 -0
- package/dist/hooks/useWorkflowComposer.d.ts.map +1 -0
- package/dist/hooks/useWorkflowComposer.js +494 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3498 -0
- package/dist/lib/component-registry.d.ts +18 -0
- package/dist/lib/component-registry.d.ts.map +1 -0
- package/dist/lib/component-registry.js +43 -0
- package/dist/lib/runtime-context.d.ts +29 -0
- package/dist/lib/runtime-context.d.ts.map +1 -0
- package/dist/lib/runtime-context.js +16 -0
- package/dist/lib/types.d.ts +69 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +1 -0
- package/dist/node/EvolutionDashboard.js +803 -0
- package/dist/node/EvolutionSidebar.js +531 -0
- package/dist/node/LocalDataIndicator.js +62 -0
- package/dist/node/MarkdownView.js +303 -0
- package/dist/node/OverlayContextProvider.js +202 -0
- package/dist/node/PersonalizationInsights.js +455 -0
- package/dist/node/SaveToStudioButton.js +73 -0
- package/dist/node/SpecEditorPanel.js +719 -0
- package/dist/node/TemplateShell.js +189 -0
- package/dist/node/hooks/index.js +1516 -0
- package/dist/node/hooks/useBehaviorTracking.js +157 -0
- package/dist/node/hooks/useEvolution.js +260 -0
- package/dist/node/hooks/useRegistryTemplates.js +31 -0
- package/dist/node/hooks/useSpecContent.js +579 -0
- package/dist/node/hooks/useWorkflowComposer.js +493 -0
- package/dist/node/index.js +3497 -0
- package/dist/node/lib/component-registry.js +42 -0
- package/dist/node/lib/runtime-context.js +15 -0
- package/dist/node/lib/types.js +0 -0
- package/dist/node/overlay-types.js +0 -0
- package/dist/node/utils/fetchPresentationData.js +15 -0
- package/dist/node/utils/generateSpecFromTemplate.js +423 -0
- package/dist/node/utils/index.js +437 -0
- package/dist/overlay-types.d.ts +41 -0
- package/dist/overlay-types.d.ts.map +1 -0
- package/dist/overlay-types.js +1 -0
- package/dist/utils/fetchPresentationData.d.ts +34 -0
- package/dist/utils/fetchPresentationData.d.ts.map +1 -0
- package/dist/utils/fetchPresentationData.js +16 -0
- package/dist/utils/generateSpecFromTemplate.d.ts +7 -0
- package/dist/utils/generateSpecFromTemplate.d.ts.map +1 -0
- package/dist/utils/generateSpecFromTemplate.js +424 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +438 -0
- package/package.json +219 -14
- package/.turbo/turbo-build$colon$bundle.log +0 -9
- package/dist/index.mjs +0 -3121
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
// src/utils/generateSpecFromTemplate.ts
|
|
2
|
+
function generateSpecFromTemplate(template) {
|
|
3
|
+
const templateId = template?.id ?? "unknown";
|
|
4
|
+
if (!template) {
|
|
5
|
+
return generateDefaultSpec(templateId);
|
|
6
|
+
}
|
|
7
|
+
switch (templateId) {
|
|
8
|
+
case "crm-pipeline":
|
|
9
|
+
return generateCrmPipelineSpec(template.schema.contracts);
|
|
10
|
+
case "saas-boilerplate":
|
|
11
|
+
return generateSaasBoilerplateSpec(template.schema.contracts);
|
|
12
|
+
case "agent-console":
|
|
13
|
+
return generateAgentConsoleSpec(template.schema.contracts);
|
|
14
|
+
case "todos-app":
|
|
15
|
+
return generateTodosSpec(template.schema.contracts);
|
|
16
|
+
case "messaging-app":
|
|
17
|
+
return generateMessagingSpec(template.schema.contracts);
|
|
18
|
+
case "recipe-app-i18n":
|
|
19
|
+
return generateRecipeSpec(template.schema.contracts);
|
|
20
|
+
default:
|
|
21
|
+
return generateDefaultSpec(templateId);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function generateCrmPipelineSpec(contracts) {
|
|
25
|
+
return `// CRM Pipeline Specs
|
|
26
|
+
// Contracts: ${contracts.join(", ")}
|
|
27
|
+
|
|
28
|
+
contractSpec("crm.deal.updateStage.v1", {
|
|
29
|
+
goal: "Move a deal to a different pipeline stage",
|
|
30
|
+
transport: { gql: { mutation: "updateDealStage" } },
|
|
31
|
+
io: {
|
|
32
|
+
input: {
|
|
33
|
+
dealId: "string",
|
|
34
|
+
stageId: "string",
|
|
35
|
+
notes: "string?"
|
|
36
|
+
},
|
|
37
|
+
output: {
|
|
38
|
+
deal: {
|
|
39
|
+
id: "string",
|
|
40
|
+
stage: "string",
|
|
41
|
+
probability: "number",
|
|
42
|
+
value: "number"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
events: ["deal.stage.changed"],
|
|
47
|
+
policy: { auth: "user", rbac: "org:sales" }
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
contractSpec("crm.deal.create.v1", {
|
|
51
|
+
goal: "Create a new deal in the pipeline",
|
|
52
|
+
transport: { gql: { mutation: "createDeal" } },
|
|
53
|
+
io: {
|
|
54
|
+
input: {
|
|
55
|
+
title: "string",
|
|
56
|
+
value: "number",
|
|
57
|
+
contactId: "string",
|
|
58
|
+
stageId: "string",
|
|
59
|
+
ownerId: "string?"
|
|
60
|
+
},
|
|
61
|
+
output: {
|
|
62
|
+
deal: {
|
|
63
|
+
id: "string",
|
|
64
|
+
title: "string",
|
|
65
|
+
value: "number",
|
|
66
|
+
stage: "string",
|
|
67
|
+
createdAt: "ISO8601"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
events: ["deal.created"]
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
contractSpec("crm.contact.list.v1", {
|
|
75
|
+
goal: "List contacts with filtering and pagination",
|
|
76
|
+
transport: { gql: { query: "listContacts" } },
|
|
77
|
+
io: {
|
|
78
|
+
input: {
|
|
79
|
+
filter: {
|
|
80
|
+
search: "string?",
|
|
81
|
+
companyId: "string?",
|
|
82
|
+
tags: "string[]?"
|
|
83
|
+
},
|
|
84
|
+
pagination: {
|
|
85
|
+
page: "number",
|
|
86
|
+
limit: "number"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
output: {
|
|
90
|
+
contacts: "array<Contact>",
|
|
91
|
+
total: "number",
|
|
92
|
+
hasMore: "boolean"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});`;
|
|
96
|
+
}
|
|
97
|
+
function generateSaasBoilerplateSpec(contracts) {
|
|
98
|
+
return `// SaaS Boilerplate Specs
|
|
99
|
+
// Contracts: ${contracts.join(", ")}
|
|
100
|
+
|
|
101
|
+
contractSpec("saas.project.create.v1", {
|
|
102
|
+
goal: "Create a new project in an organization",
|
|
103
|
+
transport: { gql: { mutation: "createProject" } },
|
|
104
|
+
io: {
|
|
105
|
+
input: {
|
|
106
|
+
orgId: "string",
|
|
107
|
+
name: "string",
|
|
108
|
+
description: "string?"
|
|
109
|
+
},
|
|
110
|
+
output: {
|
|
111
|
+
project: {
|
|
112
|
+
id: "string",
|
|
113
|
+
name: "string",
|
|
114
|
+
description: "string?",
|
|
115
|
+
createdAt: "ISO8601"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
policy: { auth: "user", rbac: "org:member" }
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
contractSpec("saas.billing.recordUsage.v1", {
|
|
123
|
+
goal: "Record usage for billing purposes",
|
|
124
|
+
transport: { gql: { mutation: "recordUsage" } },
|
|
125
|
+
io: {
|
|
126
|
+
input: {
|
|
127
|
+
orgId: "string",
|
|
128
|
+
metric: "enum<'api_calls'|'storage_gb'|'seats'>",
|
|
129
|
+
quantity: "number",
|
|
130
|
+
timestamp: "ISO8601?"
|
|
131
|
+
},
|
|
132
|
+
output: {
|
|
133
|
+
usage: {
|
|
134
|
+
id: "string",
|
|
135
|
+
metric: "string",
|
|
136
|
+
quantity: "number",
|
|
137
|
+
recordedAt: "ISO8601"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
events: ["billing.usage.recorded"]
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
contractSpec("saas.settings.update.v1", {
|
|
145
|
+
goal: "Update organization or user settings",
|
|
146
|
+
transport: { gql: { mutation: "updateSettings" } },
|
|
147
|
+
io: {
|
|
148
|
+
input: {
|
|
149
|
+
scope: "enum<'org'|'user'>",
|
|
150
|
+
targetId: "string",
|
|
151
|
+
settings: "Record<string, unknown>"
|
|
152
|
+
},
|
|
153
|
+
output: {
|
|
154
|
+
settings: {
|
|
155
|
+
scope: "string",
|
|
156
|
+
values: "Record<string, unknown>",
|
|
157
|
+
updatedAt: "ISO8601"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
events: ["settings.updated"]
|
|
162
|
+
});`;
|
|
163
|
+
}
|
|
164
|
+
function generateAgentConsoleSpec(contracts) {
|
|
165
|
+
return `// Agent Console Specs
|
|
166
|
+
// Contracts: ${contracts.join(", ")}
|
|
167
|
+
|
|
168
|
+
contractSpec("agent.run.execute.v1", {
|
|
169
|
+
goal: "Execute an agent run with specified tools",
|
|
170
|
+
transport: { gql: { mutation: "executeAgentRun" } },
|
|
171
|
+
io: {
|
|
172
|
+
input: {
|
|
173
|
+
agentId: "string",
|
|
174
|
+
input: "string",
|
|
175
|
+
tools: "string[]?",
|
|
176
|
+
maxSteps: "number?"
|
|
177
|
+
},
|
|
178
|
+
output: {
|
|
179
|
+
runId: "string",
|
|
180
|
+
status: "enum<'running'|'completed'|'failed'>",
|
|
181
|
+
steps: "number"
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
events: ["run.started", "run.completed", "run.failed"]
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
contractSpec("agent.tool.create.v1", {
|
|
188
|
+
goal: "Register a new tool in the tool registry",
|
|
189
|
+
transport: { gql: { mutation: "createTool" } },
|
|
190
|
+
io: {
|
|
191
|
+
input: {
|
|
192
|
+
name: "string",
|
|
193
|
+
description: "string",
|
|
194
|
+
category: "enum<'code'|'data'|'api'|'file'|'custom'>",
|
|
195
|
+
schema: "JSONSchema",
|
|
196
|
+
handler: "string"
|
|
197
|
+
},
|
|
198
|
+
output: {
|
|
199
|
+
tool: {
|
|
200
|
+
id: "string",
|
|
201
|
+
name: "string",
|
|
202
|
+
category: "string",
|
|
203
|
+
createdAt: "ISO8601"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
events: ["tool.created"]
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
contractSpec("agent.agent.create.v1", {
|
|
211
|
+
goal: "Create a new AI agent configuration",
|
|
212
|
+
transport: { gql: { mutation: "createAgent" } },
|
|
213
|
+
io: {
|
|
214
|
+
input: {
|
|
215
|
+
name: "string",
|
|
216
|
+
description: "string",
|
|
217
|
+
model: "string",
|
|
218
|
+
systemPrompt: "string?",
|
|
219
|
+
tools: "string[]?"
|
|
220
|
+
},
|
|
221
|
+
output: {
|
|
222
|
+
agent: {
|
|
223
|
+
id: "string",
|
|
224
|
+
name: "string",
|
|
225
|
+
model: "string",
|
|
226
|
+
toolCount: "number",
|
|
227
|
+
createdAt: "ISO8601"
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
events: ["agent.created"]
|
|
232
|
+
});`;
|
|
233
|
+
}
|
|
234
|
+
function generateTodosSpec(contracts) {
|
|
235
|
+
return `// To-dos App Specs
|
|
236
|
+
// Contracts: ${contracts.join(", ")}
|
|
237
|
+
|
|
238
|
+
contractSpec("tasks.board.v1", {
|
|
239
|
+
goal: "Assign and approve craft work",
|
|
240
|
+
transport: { gql: { field: "tasksBoard" } },
|
|
241
|
+
io: {
|
|
242
|
+
input: {
|
|
243
|
+
tenantId: "string",
|
|
244
|
+
assignee: "string?",
|
|
245
|
+
status: "enum<'pending'|'in_progress'|'completed'>?"
|
|
246
|
+
},
|
|
247
|
+
output: {
|
|
248
|
+
tasks: "array<Task>",
|
|
249
|
+
summary: {
|
|
250
|
+
total: "number",
|
|
251
|
+
completed: "number",
|
|
252
|
+
overdue: "number"
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
contractSpec("tasks.create.v1", {
|
|
259
|
+
goal: "Create a new task",
|
|
260
|
+
transport: { gql: { mutation: "createTask" } },
|
|
261
|
+
io: {
|
|
262
|
+
input: {
|
|
263
|
+
title: "string",
|
|
264
|
+
description: "string?",
|
|
265
|
+
assignee: "string?",
|
|
266
|
+
priority: "enum<'low'|'medium'|'high'>",
|
|
267
|
+
dueDate: "ISO8601?"
|
|
268
|
+
},
|
|
269
|
+
output: {
|
|
270
|
+
task: {
|
|
271
|
+
id: "string",
|
|
272
|
+
title: "string",
|
|
273
|
+
status: "string",
|
|
274
|
+
createdAt: "ISO8601"
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
events: ["task.created"]
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
contractSpec("tasks.complete.v1", {
|
|
282
|
+
goal: "Mark a task as completed",
|
|
283
|
+
transport: { gql: { mutation: "completeTask" } },
|
|
284
|
+
io: {
|
|
285
|
+
input: { taskId: "string" },
|
|
286
|
+
output: {
|
|
287
|
+
task: {
|
|
288
|
+
id: "string",
|
|
289
|
+
status: "string",
|
|
290
|
+
completedAt: "ISO8601"
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
events: ["task.completed"]
|
|
295
|
+
});`;
|
|
296
|
+
}
|
|
297
|
+
function generateMessagingSpec(contracts) {
|
|
298
|
+
return `// Messaging App Specs
|
|
299
|
+
// Contracts: ${contracts.join(", ")}
|
|
300
|
+
|
|
301
|
+
contractSpec("messaging.send.v1", {
|
|
302
|
+
goal: "Deliver intent-rich updates",
|
|
303
|
+
io: {
|
|
304
|
+
input: {
|
|
305
|
+
conversationId: "string",
|
|
306
|
+
body: "richtext",
|
|
307
|
+
attachments: "array<Attachment>?"
|
|
308
|
+
},
|
|
309
|
+
output: {
|
|
310
|
+
messageId: "string",
|
|
311
|
+
deliveredAt: "ISO8601"
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
events: ["message.sent", "message.delivered"]
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
contractSpec("messaging.conversation.create.v1", {
|
|
318
|
+
goal: "Start a new conversation",
|
|
319
|
+
transport: { gql: { mutation: "createConversation" } },
|
|
320
|
+
io: {
|
|
321
|
+
input: {
|
|
322
|
+
participants: "string[]",
|
|
323
|
+
title: "string?",
|
|
324
|
+
type: "enum<'direct'|'group'>"
|
|
325
|
+
},
|
|
326
|
+
output: {
|
|
327
|
+
conversation: {
|
|
328
|
+
id: "string",
|
|
329
|
+
title: "string?",
|
|
330
|
+
participantCount: "number",
|
|
331
|
+
createdAt: "ISO8601"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
events: ["conversation.created"]
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
contractSpec("messaging.read.v1", {
|
|
339
|
+
goal: "Mark messages as read",
|
|
340
|
+
transport: { gql: { mutation: "markRead" } },
|
|
341
|
+
io: {
|
|
342
|
+
input: {
|
|
343
|
+
conversationId: "string",
|
|
344
|
+
messageIds: "string[]"
|
|
345
|
+
},
|
|
346
|
+
output: {
|
|
347
|
+
readCount: "number",
|
|
348
|
+
readAt: "ISO8601"
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
events: ["message.read"]
|
|
352
|
+
});`;
|
|
353
|
+
}
|
|
354
|
+
function generateRecipeSpec(contracts) {
|
|
355
|
+
return `// Recipe App (i18n) Specs
|
|
356
|
+
// Contracts: ${contracts.join(", ")}
|
|
357
|
+
|
|
358
|
+
contractSpec("recipes.lookup.v1", {
|
|
359
|
+
goal: "Serve bilingual rituals",
|
|
360
|
+
io: {
|
|
361
|
+
input: {
|
|
362
|
+
locale: "enum<'EN'|'FR'>",
|
|
363
|
+
slug: "string"
|
|
364
|
+
},
|
|
365
|
+
output: {
|
|
366
|
+
title: "string",
|
|
367
|
+
content: "markdown",
|
|
368
|
+
ingredients: "array<Ingredient>",
|
|
369
|
+
instructions: "array<Instruction>"
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
contractSpec("recipes.list.v1", {
|
|
375
|
+
goal: "Browse recipes with filtering",
|
|
376
|
+
transport: { gql: { query: "listRecipes" } },
|
|
377
|
+
io: {
|
|
378
|
+
input: {
|
|
379
|
+
locale: "enum<'EN'|'FR'>",
|
|
380
|
+
category: "string?",
|
|
381
|
+
search: "string?",
|
|
382
|
+
favorites: "boolean?"
|
|
383
|
+
},
|
|
384
|
+
output: {
|
|
385
|
+
recipes: "array<RecipeSummary>",
|
|
386
|
+
categories: "array<Category>",
|
|
387
|
+
total: "number"
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
contractSpec("recipes.favorite.toggle.v1", {
|
|
393
|
+
goal: "Toggle recipe favorite status",
|
|
394
|
+
transport: { gql: { mutation: "toggleFavorite" } },
|
|
395
|
+
io: {
|
|
396
|
+
input: { recipeId: "string" },
|
|
397
|
+
output: {
|
|
398
|
+
isFavorite: "boolean",
|
|
399
|
+
totalFavorites: "number"
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
events: ["recipe.favorited", "recipe.unfavorited"]
|
|
403
|
+
});`;
|
|
404
|
+
}
|
|
405
|
+
function generateDefaultSpec(templateId) {
|
|
406
|
+
return `// ${templateId} Specs
|
|
407
|
+
|
|
408
|
+
contractSpec("${templateId}.main.v1", {
|
|
409
|
+
goal: "Main operation for ${templateId}",
|
|
410
|
+
transport: { gql: { query: "main" } },
|
|
411
|
+
io: {
|
|
412
|
+
input: {
|
|
413
|
+
id: "string"
|
|
414
|
+
},
|
|
415
|
+
output: {
|
|
416
|
+
result: "unknown"
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
});`;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// src/utils/fetchPresentationData.ts
|
|
423
|
+
async function fetchPresentationData(_presentationName, _templateId) {
|
|
424
|
+
throw new Error("fetchPresentationData is deprecated. Use fetchData from TemplateRuntimeContext.");
|
|
425
|
+
}
|
|
426
|
+
function hasPresentationDataFetcher(_presentationName) {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
function getRegisteredPresentationFetchers() {
|
|
430
|
+
return [];
|
|
431
|
+
}
|
|
432
|
+
export {
|
|
433
|
+
hasPresentationDataFetcher,
|
|
434
|
+
getRegisteredPresentationFetchers,
|
|
435
|
+
generateSpecFromTemplate,
|
|
436
|
+
fetchPresentationData
|
|
437
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Overlay Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* These types are used across all template overlays to ensure consistency.
|
|
5
|
+
*/
|
|
6
|
+
export interface OverlayDefinition {
|
|
7
|
+
overlayId: string;
|
|
8
|
+
version: string;
|
|
9
|
+
description: string;
|
|
10
|
+
appliesTo: {
|
|
11
|
+
presentation?: string;
|
|
12
|
+
role?: string;
|
|
13
|
+
feature?: string;
|
|
14
|
+
tier?: string;
|
|
15
|
+
};
|
|
16
|
+
modifications: OverlayModification[];
|
|
17
|
+
}
|
|
18
|
+
export type OverlayModification = {
|
|
19
|
+
type: 'hideField';
|
|
20
|
+
field: string;
|
|
21
|
+
reason?: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'renameLabel';
|
|
24
|
+
field: string;
|
|
25
|
+
newLabel: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'addBadge';
|
|
28
|
+
position: string;
|
|
29
|
+
label: string;
|
|
30
|
+
variant?: string;
|
|
31
|
+
} | {
|
|
32
|
+
type: 'setDefault';
|
|
33
|
+
field: string;
|
|
34
|
+
value: unknown;
|
|
35
|
+
} | {
|
|
36
|
+
type: 'setLimit';
|
|
37
|
+
field: string;
|
|
38
|
+
max: number;
|
|
39
|
+
message?: string;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=overlay-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-types.d.ts","sourceRoot":"","sources":["../src/overlay-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// @bun
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetch Presentation Data Utility
|
|
3
|
+
*
|
|
4
|
+
* Types for presentation data fetching.
|
|
5
|
+
* Actual fetching logic is now handled via TemplateRuntimeContext and dependency injection.
|
|
6
|
+
*/
|
|
7
|
+
import type { TemplateId } from '../lib/types';
|
|
8
|
+
/**
|
|
9
|
+
* Data fetcher result type
|
|
10
|
+
*/
|
|
11
|
+
export interface PresentationDataResult {
|
|
12
|
+
data: unknown;
|
|
13
|
+
metadata?: {
|
|
14
|
+
total?: number;
|
|
15
|
+
timestamp?: Date;
|
|
16
|
+
source?: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use fetchData from TemplateRuntimeContext instead.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use fetchData from TemplateRuntimeContext instead.
|
|
24
|
+
*/
|
|
25
|
+
export declare function fetchPresentationData(_presentationName: string, _templateId: TemplateId): Promise<PresentationDataResult>;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated
|
|
28
|
+
*/
|
|
29
|
+
export declare function hasPresentationDataFetcher(_presentationName: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated
|
|
32
|
+
*/
|
|
33
|
+
export declare function getRegisteredPresentationFetchers(): string[];
|
|
34
|
+
//# sourceMappingURL=fetchPresentationData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchPresentationData.d.ts","sourceRoot":"","sources":["../../src/utils/fetchPresentationData.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,UAAU,GACtB,OAAO,CAAC,sBAAsB,CAAC,CAIjC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAE5D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/utils/fetchPresentationData.ts
|
|
3
|
+
async function fetchPresentationData(_presentationName, _templateId) {
|
|
4
|
+
throw new Error("fetchPresentationData is deprecated. Use fetchData from TemplateRuntimeContext.");
|
|
5
|
+
}
|
|
6
|
+
function hasPresentationDataFetcher(_presentationName) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
function getRegisteredPresentationFetchers() {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
hasPresentationDataFetcher,
|
|
14
|
+
getRegisteredPresentationFetchers,
|
|
15
|
+
fetchPresentationData
|
|
16
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TemplateDefinition } from '../lib/types';
|
|
2
|
+
/**
|
|
3
|
+
* Generate TypeScript spec code from a template's definition.
|
|
4
|
+
* Converts FeatureModuleSpec contracts to TypeScript spec code.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateSpecFromTemplate(template: TemplateDefinition | null): string;
|
|
7
|
+
//# sourceMappingURL=generateSpecFromTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSpecFromTemplate.d.ts","sourceRoot":"","sources":["../../src/utils/generateSpecFromTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAc,MAAM,cAAc,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAClC,MAAM,CAwBR"}
|