@superblocksteam/vite-plugin-file-sync 2.0.18-next.2 → 2.0.18-next.21
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/dist/ai-service/app-interface/source-tracker.d.ts +9 -2
- package/dist/ai-service/app-interface/source-tracker.d.ts.map +1 -1
- package/dist/ai-service/app-interface/source-tracker.js +22 -4
- package/dist/ai-service/app-interface/source-tracker.js.map +1 -1
- package/dist/ai-service/artifacts/bolt.js +4 -4
- package/dist/ai-service/artifacts/bolt.js.map +1 -1
- package/dist/ai-service/context/app-context.d.ts +37 -0
- package/dist/ai-service/context/app-context.d.ts.map +1 -0
- package/dist/ai-service/context/app-context.js +205 -0
- package/dist/ai-service/context/app-context.js.map +1 -0
- package/dist/ai-service/evals/content-matchers/index.d.ts +1 -0
- package/dist/ai-service/evals/content-matchers/index.d.ts.map +1 -1
- package/dist/ai-service/evals/content-matchers/index.js +8 -0
- package/dist/ai-service/evals/content-matchers/index.js.map +1 -1
- package/dist/ai-service/evals/helpers/eval-scoring.d.ts +23 -4
- package/dist/ai-service/evals/helpers/eval-scoring.d.ts.map +1 -1
- package/dist/ai-service/evals/helpers/eval-scoring.js +211 -34
- package/dist/ai-service/evals/helpers/eval-scoring.js.map +1 -1
- package/dist/ai-service/evals/helpers/index.d.ts +20 -1
- package/dist/ai-service/evals/helpers/index.d.ts.map +1 -1
- package/dist/ai-service/evals/helpers/index.js +108 -2
- package/dist/ai-service/evals/helpers/index.js.map +1 -1
- package/dist/ai-service/evals/llm-provider.d.ts +2 -0
- package/dist/ai-service/evals/llm-provider.d.ts.map +1 -0
- package/dist/ai-service/evals/llm-provider.js +9 -0
- package/dist/ai-service/evals/llm-provider.js.map +1 -0
- package/dist/ai-service/index.d.ts +10 -1
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +80 -11
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/from-prompt-context.js +1 -1
- package/dist/ai-service/integrations/from-prompt-context.js.map +1 -1
- package/dist/ai-service/integrations/store.d.ts +3 -5
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +5 -13
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/llm/impl/anthropic.d.ts +3 -0
- package/dist/ai-service/llm/impl/anthropic.d.ts.map +1 -0
- package/dist/ai-service/llm/impl/anthropic.js +42 -0
- package/dist/ai-service/llm/impl/anthropic.js.map +1 -0
- package/dist/ai-service/llm/provider.d.ts +3 -0
- package/dist/ai-service/llm/provider.d.ts.map +1 -0
- package/dist/ai-service/llm/provider.js +30 -0
- package/dist/ai-service/llm/provider.js.map +1 -0
- package/dist/ai-service/llm/types.d.ts +15 -0
- package/dist/ai-service/llm/types.d.ts.map +1 -0
- package/dist/ai-service/llm/types.js +2 -0
- package/dist/ai-service/llm/types.js.map +1 -0
- package/dist/ai-service/llm/utils.d.ts +9 -0
- package/dist/ai-service/llm/utils.d.ts.map +1 -0
- package/dist/ai-service/llm/utils.js +49 -0
- package/dist/ai-service/llm/utils.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/builders/code-generation.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/builders/code-generation.js +95 -38
- package/dist/ai-service/prompt-builder-service/builders/code-generation.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts +13 -0
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js +71 -0
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts +24 -0
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js +117 -0
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts +2 -2
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js +56 -29
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts +3 -1
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js +36 -3
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/IconPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/PagePropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SectionPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Dim.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/EventFlow.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/TextStyleWithVariant.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts +1 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js +1 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-data-filtering.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-routes.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts +2 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js +6 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/types.d.ts +21 -7
- package/dist/ai-service/prompt-builder-service/types.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/types.js +10 -1
- package/dist/ai-service/prompt-builder-service/types.js.map +1 -1
- package/dist/ai-service/result-buffer/bolt.js +2 -2
- package/dist/ai-service/result-buffer/bolt.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +10 -2
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +49 -11
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +226 -231
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.js +56 -3
- package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -1
- package/dist/ai-service/test-utils/anthropic-service-mock.d.ts +1 -1
- package/dist/ai-service/test-utils/anthropic-service-mock.d.ts.map +1 -1
- package/dist/ai-service/test-utils/anthropic-service-mock.js +9 -1
- package/dist/ai-service/test-utils/anthropic-service-mock.js.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js +80 -38
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js +9 -3
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js.map +1 -1
- package/dist/ai-service/transform/shared.d.ts.map +1 -1
- package/dist/ai-service/transform/shared.js +1 -5
- package/dist/ai-service/transform/shared.js.map +1 -1
- package/dist/ai-service/types.d.ts +1 -1
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/components-manager.d.ts.map +1 -1
- package/dist/components-manager.js +9 -15
- package/dist/components-manager.js.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +50 -11
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/lock-service/index.d.ts +1 -0
- package/dist/lock-service/index.d.ts.map +1 -1
- package/dist/lock-service/index.js +27 -11
- package/dist/lock-service/index.js.map +1 -1
- package/dist/server-rpc/index.d.ts +0 -1
- package/dist/server-rpc/index.d.ts.map +1 -1
- package/dist/server-rpc/index.js +0 -4
- package/dist/server-rpc/index.js.map +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +5 -0
- package/dist/socket-manager.js.map +1 -1
- package/dist/virtual-modules.d.ts +5 -0
- package/dist/virtual-modules.d.ts.map +1 -0
- package/dist/virtual-modules.js +5 -0
- package/dist/virtual-modules.js.map +1 -0
- package/package.json +6 -6
- package/dist/ai-service/evals/lib/modal-config.d.ts +0 -8
- package/dist/ai-service/evals/lib/modal-config.d.ts.map +0 -1
- package/dist/ai-service/evals/lib/modal-config.js +0 -23
- package/dist/ai-service/evals/lib/modal-config.js.map +0 -1
- package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.d.ts +0 -3
- package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.d.ts.map +0 -1
- package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.js +0 -24
- package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.js.map +0 -1
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { traverse } from "@babel/core";
|
|
3
|
+
import { parse } from "@babel/parser";
|
|
4
|
+
import { WIDGET_SOURCE_ID_ATTRIBUTE } from "@superblocksteam/library-shared";
|
|
5
|
+
import { getProperties } from "../../../parsing/jsx.js";
|
|
6
|
+
import { getLogger } from "../../../util/logger.js";
|
|
1
7
|
import { Paths } from "../../const.js";
|
|
2
8
|
import { matchMultiplePaths } from "../../transform/shared.js";
|
|
3
9
|
import { LLM_FINISHED, POST_PROCESSING_ERRORED, POST_PROCESSING_FINISHED, } from "../clark-fsm.js";
|
|
4
10
|
import { sendChangeInfoHelper } from "../helpers/change-info.js";
|
|
5
11
|
import { sendUserMessageChannel } from "../helpers/peer.js";
|
|
6
12
|
import { transitionFrom } from "../helpers/transition.js";
|
|
7
|
-
export const doPostProcessing = (clark, { draftInterface, appShell }) => {
|
|
13
|
+
export const doPostProcessing = (clark, { draftInterface, appShell, sourceTrackerInterface }) => {
|
|
8
14
|
const transitionTo = transitionFrom(clark);
|
|
9
15
|
const sendChangeInfo = sendChangeInfoHelper(clark);
|
|
10
16
|
const sendUserMessage = sendUserMessageChannel(clark);
|
|
@@ -73,7 +79,7 @@ export const doPostProcessing = (clark, { draftInterface, appShell }) => {
|
|
|
73
79
|
const scopePaths = matchMultiplePaths(Paths.PageScopes, Paths.AppScope);
|
|
74
80
|
const pageAndComponentPaths = matchMultiplePaths(Paths.PageIndexes, Paths.ComponentsFile, Paths.ComponentsFolder);
|
|
75
81
|
try {
|
|
76
|
-
const { packageJson, scopes, pagesAndComponents } = files.reduce((acc, file) => {
|
|
82
|
+
const { packageJson, scopes, pagesAndComponents, incrementalEdits } = files.reduce((acc, file) => {
|
|
77
83
|
if (file.filePath === Paths.PackageJson) {
|
|
78
84
|
acc.packageJson = file;
|
|
79
85
|
}
|
|
@@ -81,13 +87,19 @@ export const doPostProcessing = (clark, { draftInterface, appShell }) => {
|
|
|
81
87
|
acc.scopes.push(file);
|
|
82
88
|
}
|
|
83
89
|
else if (pageAndComponentPaths(file.filePath).matched) {
|
|
84
|
-
|
|
90
|
+
if (file.type === "component") {
|
|
91
|
+
acc.incrementalEdits.push(file);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
acc.pagesAndComponents.push(file);
|
|
95
|
+
}
|
|
85
96
|
}
|
|
86
97
|
return acc;
|
|
87
98
|
}, {
|
|
88
99
|
packageJson: null,
|
|
89
100
|
scopes: [],
|
|
90
101
|
pagesAndComponents: [],
|
|
102
|
+
incrementalEdits: [],
|
|
91
103
|
});
|
|
92
104
|
if (!clark.context.usedDebugging) {
|
|
93
105
|
void sendUserMessage({
|
|
@@ -116,6 +128,18 @@ export const doPostProcessing = (clark, { draftInterface, appShell }) => {
|
|
|
116
128
|
}
|
|
117
129
|
await createDraftFiles(scopes);
|
|
118
130
|
await createDraftFiles(pagesAndComponents);
|
|
131
|
+
if (incrementalEdits.length > 0) {
|
|
132
|
+
for (const componentEdit of incrementalEdits) {
|
|
133
|
+
await handleComponentEdit(componentEdit, sourceTrackerInterface);
|
|
134
|
+
}
|
|
135
|
+
const changes = await sourceTrackerInterface.getAndFlushChanges();
|
|
136
|
+
const changesFileArtifacts = changes.map((change) => ({
|
|
137
|
+
type: "file",
|
|
138
|
+
filePath: path.relative(appShell.appRootDirPath, change.fileName),
|
|
139
|
+
content: change.source,
|
|
140
|
+
}));
|
|
141
|
+
await createDraftFiles(changesFileArtifacts);
|
|
142
|
+
}
|
|
119
143
|
if (!clark.context.usedDebugging) {
|
|
120
144
|
// ui > control message B: spin
|
|
121
145
|
void sendUserMessage({
|
|
@@ -240,4 +264,33 @@ const commonTopLevelPackageJsonFields = new Set([
|
|
|
240
264
|
"homepage",
|
|
241
265
|
"bugs",
|
|
242
266
|
]);
|
|
267
|
+
const handleComponentEdit = async (componentEdit, sourceTrackerInterface) => {
|
|
268
|
+
const ast = parse(componentEdit.content, {
|
|
269
|
+
sourceType: "module",
|
|
270
|
+
plugins: ["jsx", "typescript"],
|
|
271
|
+
});
|
|
272
|
+
let nodePath = null;
|
|
273
|
+
traverse(ast, {
|
|
274
|
+
JSXElement(path) {
|
|
275
|
+
nodePath = path;
|
|
276
|
+
path.stop();
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
if (!nodePath) {
|
|
280
|
+
getLogger().error(`Failed to generate NodePath for component edit: ${componentEdit.content}`);
|
|
281
|
+
throw new Error("Failed to generate NodePath.");
|
|
282
|
+
}
|
|
283
|
+
const properties = getProperties(nodePath);
|
|
284
|
+
const id = properties[WIDGET_SOURCE_ID_ATTRIBUTE]?.value;
|
|
285
|
+
if (!id) {
|
|
286
|
+
throw new Error(`Generated component does not have a ${WIDGET_SOURCE_ID_ATTRIBUTE} attribute.`);
|
|
287
|
+
}
|
|
288
|
+
delete properties[WIDGET_SOURCE_ID_ATTRIBUTE];
|
|
289
|
+
sourceTrackerInterface.setProperties({
|
|
290
|
+
source: {
|
|
291
|
+
id,
|
|
292
|
+
},
|
|
293
|
+
changes: properties,
|
|
294
|
+
});
|
|
295
|
+
};
|
|
243
296
|
//# sourceMappingURL=post-processing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-processing.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/handlers/post-processing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"post-processing.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/handlers/post-processing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const mockAnthropicFetch: (
|
|
1
|
+
export declare const mockAnthropicFetch: (url: URL | RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
2
2
|
//# sourceMappingURL=anthropic-service-mock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-service-mock.d.ts","sourceRoot":"","sources":["../../../src/ai-service/test-utils/anthropic-service-mock.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,GAC7B,
|
|
1
|
+
{"version":3,"file":"anthropic-service-mock.d.ts","sourceRoot":"","sources":["../../../src/ai-service/test-utils/anthropic-service-mock.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,GAC7B,KAAK,GAAG,GAAG,WAAW,EACtB,OAAO,WAAW,KACjB,OAAO,CAAC,QAAQ,CA2FlB,CAAC"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { getMockContent, getPromptFromRequest, splitGenMockIntoChunks, } from "./mock-utils.js";
|
|
2
|
-
export const mockAnthropicFetch = async (
|
|
2
|
+
export const mockAnthropicFetch = async (url, init) => {
|
|
3
3
|
try {
|
|
4
|
+
// Check if this is a streaming request
|
|
5
|
+
const body = init?.body ? JSON.parse(init.body) : {};
|
|
6
|
+
const isStreaming = body.stream === true;
|
|
7
|
+
// If not streaming, fall back to the original fetch
|
|
8
|
+
if (!isStreaming) {
|
|
9
|
+
return fetch(url, init);
|
|
10
|
+
}
|
|
11
|
+
console.log("Streaming request detected, using mock response");
|
|
4
12
|
const chunks = [
|
|
5
13
|
{
|
|
6
14
|
type: "message_start",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-service-mock.js","sourceRoot":"","sources":["../../../src/ai-service/test-utils/anthropic-service-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,
|
|
1
|
+
{"version":3,"file":"anthropic-service-mock.js","sourceRoot":"","sources":["../../../src/ai-service/test-utils/anthropic-service-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,GAAsB,EACtB,IAAkB,EACC,EAAE;IACrB,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;QAEzC,oDAAoD;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAQ;YAClB;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE;oBACP,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,yBAAyB;oBAChC,WAAW,EAAE,IAAI;oBACjB,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;iBAC7C;aACF;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;aAC1C;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAE/C,8DAA8D;QAC9D,MAAM,aAAa,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAE1D,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CACT,GAAG;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,CAAC;aACT;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE;gBACvD,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;aAC9B;YACD;gBACE,IAAI,EAAE,cAAc;aACrB;SACF,CACF,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;YAChC,KAAK,CAAC,KAAK,CAAC,UAAU;gBACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACnC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;oBACjD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC1B,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,cAAc,EAAE,mBAAmB;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,EAAE;YACtE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: "BUILDING APPLICATION FROM MOCK RESPONSE: I'll create a comprehensive order management app with CRUD operations using the DemoOrders and DemoShipping databases.\n\n<boltArtifact id=\"order-management-app\" title=\"Order Management App\">\n<boltAction type=\"file\" filePath=\"routes.json\">\n{\n \"/\": {\n \"file\": \"Page1/index.tsx\"\n }\n}\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">\nimport {\n createScope,\n SbApi,\n StateVar,\n StateVarPersistence,\n computed,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n OrdersTable: any;\n ProductFilterInput: any;\n CreateOrderModal: any;\n EditOrderModal: any;\n OrderDetailsModal: any;\n CreateOrderButton: any;\n NewOrderProductInput: any;\n NewOrderUserEmailInput: any;\n NewOrderPriceInput: any;\n NewOrderImageInput: any;\n EditOrderProductInput: any;\n EditOrderUserEmailInput: any;\n EditOrderPriceInput: any;\n EditOrderImageInput: any;\n}>(\n ({\n entities: {\n OrdersTable,\n ProductFilterInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n },\n }) => ({\n getMetricsApi: SbApi({}),\n getOrdersApi: SbApi({}),\n getOrderDetailsApi: SbApi({}),\n getShippingInfoApi: SbApi({}),\n createOrderApi: SbApi({}),\n updateOrderApi: SbApi({}),\n deleteOrderApi: SbApi({}),\n \n filteredOrdersVar: StateVar({\n defaultValue: computed(() => {\n const orders = getOrdersApi.response || [];\n const filterText = ProductFilterInput.value?.toLowerCase() || '';\n \n if (!filterText) return orders;\n \n return orders.filter((order: any) =>\n order.product?.toLowerCase().includes(filterText)\n );\n }),\n persistence: StateVarPersistence.TEMPORARY,\n }),\n }),\n {\n name: \"Page1\",\n }\n);\n\nexport const Page1 = Page1Scope.entities;\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">\nimport {\n Page,\n Dim,\n Section,\n Column,\n registerPage,\n Table,\n computed,\n Container,\n Input,\n Button,\n EventFlow,\n Modal,\n Text,\n Theme,\n} from \"@superblocksteam/library\";\nimport MetricCard from \"components/MetricCard/MetricCard\";\nimport AppHeader from \"components/AppHeader/AppHeader\";\nimport KeyValue from \"components/KeyValue\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction PageContent() {\n const {\n OrdersTable,\n ProductFilterInput,\n CreateOrderModal,\n EditOrderModal,\n CreateOrderButton,\n OrderDetailsModal,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n filteredOrdersVar,\n } = Page1;\n\n return (\n <Page\n name=\"Page1\"\n height={Dim.fill()}\n width={Dim.fill()}\n onLoad={EventFlow.runApis([getMetricsApi, getOrdersApi])}\n >\n <Section height={Dim.fill()}>\n <Column width={Dim.fill()} spacing={Dim.px(0)}>\n <AppHeader\n title=\"Order Management\"\n avatarUrl=\"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face\"\n userEmail=\"admin@company.com\"\n height={Dim.fit()}\n />\n \n <Container\n layout=\"vertical\"\n spacing={Dim.px(24)}\n padding={{\n top: Dim.px(24),\n bottom: Dim.px(24),\n left: Dim.px(24),\n right: Dim.px(24),\n }}\n height={Dim.fill()}\n >\n {/* Metrics Cards */}\n <Container layout=\"horizontal\" spacing={Dim.px(16)}>\n <MetricCard\n title=\"Total Orders\"\n value={computed(() => getMetricsApi.response?.totalOrders?.toString() || \"0\")}\n icon=\"receipt_long\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Total Revenue\"\n value={computed(() => `$${getMetricsApi.response?.totalRevenue?.toLocaleString() || \"0\"}`)}\n icon=\"attach_money\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Orders This Month\"\n value={computed(() => getMetricsApi.response?.ordersThisMonth?.toString() || \"0\")}\n icon=\"calendar_today\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Active Shipments\"\n value={computed(() => getMetricsApi.response?.activeShipments?.toString() || \"0\")}\n icon=\"local_shipping\"\n width={Dim.fill()}\n />\n </Container>\n\n {/* Orders Section */}\n <Container layout=\"vertical\" spacing={Dim.px(16)} variant=\"card\">\n <Container layout=\"horizontal\" spacing={Dim.px(12)} verticalAlign=\"bottom\">\n <Input\n bind={ProductFilterInput}\n label=\"Filter by Product\"\n placeholder=\"Search products...\"\n width={Dim.px(300)}\n />\n <Button\n bind={CreateOrderButton}\n label=\"Create Order\"\n variant=\"primary\"\n icon=\"add\"\n onClick={EventFlow.controlModal(CreateOrderModal, { action: \"open\" })}\n />\n </Container>\n\n <Table\n bind={OrdersTable}\n tableData={computed(() => filteredOrdersVar.value)}\n columns={{\n id: {\n label: \"Order ID\",\n columnType: \"text\",\n },\n product: {\n label: \"Product\",\n columnType: \"text\",\n },\n user_email: {\n label: \"Customer Email\",\n columnType: \"email\",\n },\n date_purchased: {\n label: \"Date Purchased\",\n columnType: \"date\",\n inputFormat: \"YYYY-MM-DD\",\n outputFormat: \"MM/DD/YYYY\",\n },\n price: {\n label: \"Price\",\n columnType: \"currency\",\n currency: \"USD\",\n },\n actions: {\n label: \"Actions\",\n columnType: \"button\",\n buttonLabel: \"View Details\",\n onClick: EventFlow.runJS(() => {\n getOrderDetailsApi.run();\n getShippingInfoApi.run();\n }).controlModal(OrderDetailsModal, { action: \"open\" }),\n },\n }}\n onRowClick={EventFlow.runJS(() => {\n EditOrderProductInput.text = OrdersTable.selectedRow?.product || \"\";\n EditOrderUserEmailInput.text = OrdersTable.selectedRow?.user_email || \"\";\n EditOrderPriceInput.text = OrdersTable.selectedRow?.price?.toString() || \"\";\n EditOrderImageInput.text = OrdersTable.selectedRow?.image || \"\";\n }).controlModal(EditOrderModal, { action: \"open\" })}\n height={Dim.px(400)}\n />\n </Container>\n </Container>\n </Column>\n </Section>\n\n {/* Create Order Modal */}\n <Modal bind={CreateOrderModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Text text=\"Create New Order\" textStyle={{ variant: \"heading3\" }} />\n \n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <Input\n bind={NewOrderProductInput}\n label=\"Product Name\"\n placeholder=\"Enter product name\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={NewOrderUserEmailInput}\n label=\"Customer Email\"\n placeholder=\"Enter customer email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={NewOrderPriceInput}\n label=\"Price\"\n placeholder=\"Enter price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={NewOrderImageInput}\n label=\"Product Image URL\"\n placeholder=\"Enter image URL (optional)\"\n width={Dim.fill()}\n />\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n }).controlModal(CreateOrderModal, { action: \"close\" })}\n />\n <Button\n label=\"Create Order\"\n variant=\"primary\"\n onClick={EventFlow.runApis([createOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n })\n .controlModal(CreateOrderModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n </Modal>\n\n {/* Edit Order Modal */}\n <Modal bind={EditOrderModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"space-between\" width={Dim.fill()}>\n <Text \n width={Dim.fit()}\n text={computed(() => `Edit Order #${OrdersTable.selectedRow?.id || \"\"}`)} \n textStyle={{ variant: \"heading3\" }} \n />\n </Container>\n \n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <Input\n bind={EditOrderProductInput}\n label=\"Product Name\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={EditOrderUserEmailInput}\n label=\"Customer Email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={EditOrderPriceInput}\n label=\"Price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={EditOrderImageInput}\n label=\"Product Image URL\"\n width={Dim.fill()}\n />\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(EditOrderModal, { action: \"close\" })}\n />\n <Button\n label=\"Update Order\"\n variant=\"primary\"\n onClick={EventFlow.runApis([updateOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .controlModal(EditOrderModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n </Modal>\n\n {/* Order Details Modal */}\n <Modal bind={OrderDetailsModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Text \n text={computed(() => `Order Details #${OrdersTable.selectedRow?.id || \"\"}`)} \n textStyle={{ variant: \"heading3\" }} \n />\n \n <Container layout=\"horizontal\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Order Information\"\n data={computed(() => getOrderDetailsApi.response || {})}\n />\n </Container>\n \n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Shipping Information\"\n data={computed(() => getShippingInfoApi.response || {})}\n />\n </Container>\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Close\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(OrderDetailsModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n </Modal>\n </Page>\n );\n}\n\nexport default registerPage(PageContent, Page1Scope);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getMetricsApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getMetricsApi\", [\n new JavaScript(\"getMetrics\", {\n fn: () => {\n return {\n totalOrders: 45,\n totalRevenue: 12489.50,\n ordersThisMonth: 8,\n activeShipments: 12,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrdersApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrdersApi\", [\n new JavaScript(\"getOrders\", {\n fn: () => {\n return [\n {\n id: 1,\n product: \"Wireless Headphones\",\n user_email: \"john.doe@example.com\",\n date_purchased: \"2024-01-15\",\n price: 199.99,\n image: \"https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=200&h=200&fit=crop\",\n },\n {\n id: 2,\n product: \"Smart Watch\",\n user_email: \"jane.smith@example.com\",\n date_purchased: \"2024-01-14\",\n price: 299.99,\n image: \"https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=200&h=200&fit=crop\",\n },\n {\n id: 3,\n product: \"Laptop Stand\",\n user_email: \"mike.johnson@example.com\",\n date_purchased: \"2024-01-13\",\n price: 49.99,\n image: \"https://images.unsplash.com/photo-1527864550417-7fd91fc51a46?w=200&h=200&fit=crop\",\n },\n {\n id: 4,\n product: \"Bluetooth Speaker\",\n user_email: \"sarah.wilson@example.com\",\n date_purchased: \"2024-01-12\",\n price: 79.99,\n image: \"https://images.unsplash.com/photo-1608043152269-423dbba4e7e1?w=200&h=200&fit=crop\",\n },\n {\n id: 5,\n product: \"Gaming Mouse\",\n user_email: \"alex.brown@example.com\",\n date_purchased: \"2024-01-11\",\n price: 89.99,\n image: \"https://images.unsplash.com/photo-1527814050087-3793815479db?w=200&h=200&fit=crop\",\n },\n {\n id: 6,\n product: \"USB-C Hub\",\n user_email: \"emily.davis@example.com\",\n date_purchased: \"2024-01-10\",\n price: 39.99,\n image: \"https://images.unsplash.com/photo-1558618047-3c8c76ca7d13?w=200&h=200&fit=crop\",\n },\n {\n id: 7,\n product: \"Phone Case\",\n user_email: \"david.miller@example.com\",\n date_purchased: \"2024-01-09\",\n price: 24.99,\n image: \"https://images.unsplash.com/photo-1601944177325-f8867652837f?w=200&h=200&fit=crop\",\n },\n {\n id: 8,\n product: \"Tablet Stand\",\n user_email: \"lisa.garcia@example.com\",\n date_purchased: \"2024-01-08\",\n price: 34.99,\n image: \"https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=200&h=200&fit=crop\",\n },\n ];\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrderDetailsApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrderDetailsApi\", [\n new JavaScript(\"getOrderDetails\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return {};\n \n // Generate a user_id if not present (for display purposes)\n const userId = order.user_id || Math.floor(Math.random() * 10000) + 1000;\n \n return {\n \"Order ID\": order.id,\n \"Product\": order.product,\n \"Customer Email\": order.user_email,\n \"User ID\": userId,\n \"Date Purchased\": order.date_purchased,\n \"Price\": `$${order.price}`,\n \"Image URL\": order.image || \"N/A\",\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getShippingInfoApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getShippingInfoApi\", [\n new JavaScript(\"getShippingInfo\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return { \"Shipping Status\": \"No shipping info\" };\n \n const orderId = order.id;\n \n // Generate shipping data based on order ID patterns\n const shippingStatuses = [\"Processing\", \"In Transit\", \"Delivered\", \"Out for Delivery\"];\n const locations = [\"Los Angeles, CA\", \"Phoenix, AZ\", \"Denver, CO\", \"Chicago, IL\", \"Miami, FL\"];\n const activities = [\"Order received\", \"Package shipped\", \"In transit\", \"Out for delivery\", \"Delivered\"];\n \n const statusIndex = orderId % shippingStatuses.length;\n const status = shippingStatuses[statusIndex];\n \n // Generate 2-3 shipping activities\n const numActivities = 2 + (orderId % 2);\n const history = [];\n \n for (let i = 0; i < numActivities; i++) {\n const date = new Date();\n date.setDate(date.getDate() - (numActivities - i));\n const timestamp = date.toISOString().replace('T', ' ').substring(0, 19);\n \n history.push({\n TIMESTAMP: timestamp,\n ACTIVITY: activities[i % activities.length],\n LOCATION: locations[i % locations.length],\n });\n }\n \n const result = {\n \"Shipping Status\": status,\n };\n \n history.forEach((item, index) => {\n result[`Activity ${index + 1}`] = `${item.ACTIVITY} - ${item.LOCATION} (${item.TIMESTAMP})`;\n });\n \n return result;\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/createOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"createOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput }) =>\n !NewOrderProductInput.value || \n !NewOrderUserEmailInput.value || \n !NewOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n \n new JavaScript(\"createOrder\", {\n fn: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput, NewOrderImageInput }) => {\n // Generate a new order ID and user ID\n const orderId = Math.floor(Math.random() * 1000) + 100;\n const userId = Math.floor(Math.random() * 10000) + 1;\n const currentDate = new Date().toISOString().split('T')[0];\n \n // Simulate order creation\n console.log(\"Creating order:\", {\n id: orderId,\n user_id: userId,\n product: NewOrderProductInput.value,\n user_email: NewOrderUserEmailInput.value,\n price: NewOrderPriceInput.value,\n date_purchased: currentDate,\n image: NewOrderImageInput.value || \"\",\n });\n \n return {\n success: true,\n message: \"Order created successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/updateOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"updateOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput }) =>\n !EditOrderProductInput.value || \n !EditOrderUserEmailInput.value || \n !EditOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n \n new JavaScript(\"updateOrder\", {\n fn: ({ OrdersTable, EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput, EditOrderImageInput }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for update\");\n }\n \n // Simulate order update\n console.log(\"Updating order:\", {\n id: orderId,\n product: EditOrderProductInput.value,\n user_email: EditOrderUserEmailInput.value,\n price: EditOrderPriceInput.value,\n image: EditOrderImageInput.value || \"\",\n });\n \n return {\n success: true,\n message: \"Order updated successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/deleteOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"deleteOrderApi\", [\n new JavaScript(\"deleteOrder\", {\n fn: ({ OrdersTable }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for deletion\");\n }\n \n // Simulate order deletion\n console.log(\"Deleting order:\", {\n id: orderId,\n product: OrdersTable.selectedRow?.product,\n user_email: OrdersTable.selectedRow?.user_email,\n });\n \n return {\n success: true,\n message: \"Order deleted successfully\",\n deletedOrderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n</boltArtifact>\n\nThe order management app is now complete with all the requested features:\n\n## **Key Features:**\n\n### **Metrics Dashboard**\n- **Total Orders**: Count of all records from DemoOrders\n- **Total Revenue**: Sum of price field from DemoOrders \n- **Orders This Month**: Count of orders from current month\n- **Active Shipments**: Count of records in DemoShipping SHIPPING_STATUS table\n\n### **Orders Management**\n- **Orders Table**: Displays all orders with id, product, user_email, date_purchased, price\n- **Product Filter**: Real-time text filtering on product names\n- **CRUD Operations**:\n - **Create**: Add new orders with product, email, price, and optional image\n - **Update**: Edit existing orders (click row to edit)\n - **Delete**: Remove orders (delete button in edit modal)\n - **View Details**: See full order info plus shipping status (click \"View Details\" button)\n\n### **Shipping Integration**\n- **Order Details Modal**: Shows order information plus shipping status and recent activity from DemoShipping tables\n- **Real-time Data**: Fetches shipping status and history by ORDER_ID\n\n### **User Experience**\n- Clean, professional interface with metric cards\n- Intuitive modals for all CRUD operations\n- Real-time filtering and data updates\n- Proper validation and error handling\n- Responsive design with consistent spacing\n\nThe app automatically loads metrics and orders data on page load, and all operations refresh the data to keep everything in sync.";
|
|
1
|
+
declare const _default: "BUILDING APPLICATION FROM MOCK RESPONSE: I'll create a comprehensive order management app with CRUD operations using the DemoOrders and DemoShipping databases.\n\n<boltArtifact id=\"order-management-app\" title=\"Order Management App\">\n<boltAction type=\"file\" filePath=\"routes.json\">\n{\n \"/\": {\n \"file\": \"Page1/index.tsx\"\n }\n}\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">\nimport {\n createScope,\n SbApi,\n StateVar,\n StateVarPersistence,\n computed,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n OrdersTable: any;\n ProductFilterInput: any;\n CreateOrderModal: any;\n EditOrderModal: any;\n OrderDetailsModal: any;\n CreateOrderButton: any;\n NewOrderProductInput: any;\n NewOrderUserEmailInput: any;\n NewOrderPriceInput: any;\n NewOrderImageInput: any;\n EditOrderProductInput: any;\n EditOrderUserEmailInput: any;\n EditOrderPriceInput: any;\n EditOrderImageInput: any;\n}>(\n ({\n entities: {\n OrdersTable,\n ProductFilterInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n },\n }) => ({\n getMetricsApi: SbApi({}),\n getOrdersApi: SbApi({}),\n getOrderDetailsApi: SbApi({}),\n getShippingInfoApi: SbApi({}),\n createOrderApi: SbApi({}),\n updateOrderApi: SbApi({}),\n deleteOrderApi: SbApi({}),\n\n filteredOrdersVar: StateVar({\n defaultValue: computed(() => {\n const orders = getOrdersApi.response || [];\n const filterText = ProductFilterInput.value?.toLowerCase() || '';\n\n if (!filterText) return orders;\n\n return orders.filter((order: any) =>\n order.product?.toLowerCase().includes(filterText)\n );\n }),\n persistence: StateVarPersistence.TEMPORARY,\n }),\n }),\n {\n name: \"Page1\",\n }\n);\n\nexport const Page1 = Page1Scope.entities;\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">\nimport {\n Page,\n Dim,\n Section,\n Column,\n registerPage,\n Table,\n computed,\n Container,\n Input,\n Button,\n EventFlow,\n Modal,\n Text,\n Theme,\n} from \"@superblocksteam/library\";\nimport MetricCard from \"components/MetricCard/MetricCard\";\nimport AppHeader from \"components/AppHeader/AppHeader\";\nimport KeyValue from \"components/KeyValue\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction PageContent() {\n const {\n OrdersTable,\n ProductFilterInput,\n CreateOrderModal,\n EditOrderModal,\n CreateOrderButton,\n OrderDetailsModal,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n filteredOrdersVar,\n } = Page1;\n\n return (\n <Page\n name=\"Page1\"\n height={Dim.fill()}\n width={Dim.fill()}\n onLoad={EventFlow.runApis([getMetricsApi, getOrdersApi])}\n >\n <Section height={Dim.fill()}>\n <Column width={Dim.fill()} spacing={Dim.px(0)}>\n <AppHeader\n title=\"Order Management\"\n avatarUrl=\"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face\"\n userEmail=\"admin@company.com\"\n height={Dim.fit()}\n />\n\n <Container\n layout=\"vertical\"\n spacing={Dim.px(24)}\n padding={{\n top: Dim.px(24),\n bottom: Dim.px(24),\n left: Dim.px(24),\n right: Dim.px(24),\n }}\n height={Dim.fill()}\n >\n {/* Metrics Cards */}\n <Container layout=\"horizontal\" spacing={Dim.px(16)}>\n <MetricCard\n title=\"Total Orders\"\n value={computed(() => getMetricsApi.response?.totalOrders?.toString() || \"0\")}\n icon=\"receipt_long\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Total Revenue\"\n value={computed(() => `$${getMetricsApi.response?.totalRevenue?.toLocaleString() || \"0\"}`)}\n icon=\"attach_money\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Orders This Month\"\n value={computed(() => getMetricsApi.response?.ordersThisMonth?.toString() || \"0\")}\n icon=\"calendar_today\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Active Shipments\"\n value={computed(() => getMetricsApi.response?.activeShipments?.toString() || \"0\")}\n icon=\"local_shipping\"\n width={Dim.fill()}\n />\n </Container>\n\n {/* Orders Section */}\n <Container layout=\"vertical\" spacing={Dim.px(16)} variant=\"card\">\n <Container layout=\"horizontal\" spacing={Dim.px(12)} verticalAlign=\"bottom\">\n <Input\n bind={ProductFilterInput}\n label=\"Filter by Product\"\n placeholder=\"Search products...\"\n width={Dim.px(300)}\n />\n <Button\n bind={CreateOrderButton}\n label=\"Create Order\"\n variant=\"primary\"\n icon=\"add\"\n onClick={EventFlow.controlModal(CreateOrderModal, { action: \"open\" })}\n />\n </Container>\n\n <Table\n bind={OrdersTable}\n tableData={computed(() => filteredOrdersVar.value)}\n columns={{\n id: {\n label: \"Order ID\",\n columnType: \"text\",\n },\n product: {\n label: \"Product\",\n columnType: \"text\",\n },\n user_email: {\n label: \"Customer Email\",\n columnType: \"email\",\n },\n date_purchased: {\n label: \"Date Purchased\",\n columnType: \"date\",\n inputFormat: \"YYYY-MM-DD\",\n outputFormat: \"MM/DD/YYYY\",\n },\n price: {\n label: \"Price\",\n columnType: \"currency\",\n currency: \"USD\",\n },\n actions: {\n label: \"Actions\",\n columnType: \"button\",\n buttonLabel: \"View Details\",\n onClick: EventFlow.runJS(() => {\n getOrderDetailsApi.run();\n getShippingInfoApi.run();\n }).controlModal(OrderDetailsModal, { action: \"open\" }),\n },\n }}\n onRowClick={EventFlow.runJS(() => {\n EditOrderProductInput.text = OrdersTable.selectedRow?.product || \"\";\n EditOrderUserEmailInput.text = OrdersTable.selectedRow?.user_email || \"\";\n EditOrderPriceInput.text = OrdersTable.selectedRow?.price?.toString() || \"\";\n EditOrderImageInput.text = OrdersTable.selectedRow?.image || \"\";\n }).controlModal(EditOrderModal, { action: \"open\" })}\n height={Dim.px(400)}\n />\n </Container>\n </Container>\n </Column>\n </Section>\n\n {/* Create Order Modal */}\n <Modal bind={CreateOrderModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Text text=\"Create New Order\" textStyle={{ variant: \"heading3\" }} />\n\n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <Input\n bind={NewOrderProductInput}\n label=\"Product Name\"\n placeholder=\"Enter product name\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={NewOrderUserEmailInput}\n label=\"Customer Email\"\n placeholder=\"Enter customer email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={NewOrderPriceInput}\n label=\"Price\"\n placeholder=\"Enter price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={NewOrderImageInput}\n label=\"Product Image URL\"\n placeholder=\"Enter image URL (optional)\"\n width={Dim.fill()}\n />\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n }).controlModal(CreateOrderModal, { action: \"close\" })}\n />\n <Button\n label=\"Create Order\"\n variant=\"primary\"\n onClick={EventFlow.runApis([createOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n })\n .controlModal(CreateOrderModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n </Modal>\n\n {/* Edit Order Modal */}\n <Modal bind={EditOrderModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"space-between\" width={Dim.fill()}>\n <Text\n width={Dim.fit()}\n text={computed(() => `Edit Order #${OrdersTable.selectedRow?.id || \"\"}`)}\n textStyle={{ variant: \"heading3\" }}\n />\n </Container>\n\n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <Input\n bind={EditOrderProductInput}\n label=\"Product Name\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={EditOrderUserEmailInput}\n label=\"Customer Email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={EditOrderPriceInput}\n label=\"Price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n required={true}\n />\n <Input\n bind={EditOrderImageInput}\n label=\"Product Image URL\"\n width={Dim.fill()}\n />\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(EditOrderModal, { action: \"close\" })}\n />\n <Button\n label=\"Update Order\"\n variant=\"primary\"\n onClick={EventFlow.runApis([updateOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .controlModal(EditOrderModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n </Modal>\n\n {/* Order Details Modal */}\n <Modal bind={OrderDetailsModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Text\n text={computed(() => `Order Details #${OrdersTable.selectedRow?.id || \"\"}`)}\n textStyle={{ variant: \"heading3\" }}\n />\n\n <Container layout=\"horizontal\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Order Information\"\n data={computed(() => getOrderDetailsApi.response || {})}\n />\n </Container>\n\n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Shipping Information\"\n data={computed(() => getShippingInfoApi.response || {})}\n />\n </Container>\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Close\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(OrderDetailsModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n </Modal>\n </Page>\n );\n}\n\nexport default registerPage(PageContent, Page1Scope);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getMetricsApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getMetricsApi\", [\n new JavaScript(\"getMetrics\", {\n fn: () => {\n return {\n totalOrders: 45,\n totalRevenue: 12489.50,\n ordersThisMonth: 8,\n activeShipments: 12,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrdersApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrdersApi\", [\n new JavaScript(\"getOrders\", {\n fn: () => {\n return [\n {\n id: 1,\n product: \"Wireless Headphones\",\n user_email: \"john.doe@example.com\",\n date_purchased: \"2024-01-15\",\n price: 199.99,\n image: \"https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=200&h=200&fit=crop\",\n },\n {\n id: 2,\n product: \"Smart Watch\",\n user_email: \"jane.smith@example.com\",\n date_purchased: \"2024-01-14\",\n price: 299.99,\n image: \"https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=200&h=200&fit=crop\",\n },\n {\n id: 3,\n product: \"Laptop Stand\",\n user_email: \"mike.johnson@example.com\",\n date_purchased: \"2024-01-13\",\n price: 49.99,\n image: \"https://images.unsplash.com/photo-1527864550417-7fd91fc51a46?w=200&h=200&fit=crop\",\n },\n {\n id: 4,\n product: \"Bluetooth Speaker\",\n user_email: \"sarah.wilson@example.com\",\n date_purchased: \"2024-01-12\",\n price: 79.99,\n image: \"https://images.unsplash.com/photo-1608043152269-423dbba4e7e1?w=200&h=200&fit=crop\",\n },\n {\n id: 5,\n product: \"Gaming Mouse\",\n user_email: \"alex.brown@example.com\",\n date_purchased: \"2024-01-11\",\n price: 89.99,\n image: \"https://images.unsplash.com/photo-1527814050087-3793815479db?w=200&h=200&fit=crop\",\n },\n {\n id: 6,\n product: \"USB-C Hub\",\n user_email: \"emily.davis@example.com\",\n date_purchased: \"2024-01-10\",\n price: 39.99,\n image: \"https://images.unsplash.com/photo-1558618047-3c8c76ca7d13?w=200&h=200&fit=crop\",\n },\n {\n id: 7,\n product: \"Phone Case\",\n user_email: \"david.miller@example.com\",\n date_purchased: \"2024-01-09\",\n price: 24.99,\n image: \"https://images.unsplash.com/photo-1601944177325-f8867652837f?w=200&h=200&fit=crop\",\n },\n {\n id: 8,\n product: \"Tablet Stand\",\n user_email: \"lisa.garcia@example.com\",\n date_purchased: \"2024-01-08\",\n price: 34.99,\n image: \"https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=200&h=200&fit=crop\",\n },\n ];\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrderDetailsApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrderDetailsApi\", [\n new JavaScript(\"getOrderDetails\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return {};\n\n // Generate a user_id if not present (for display purposes)\n const userId = order.user_id || Math.floor(Math.random() * 10000) + 1000;\n\n return {\n \"Order ID\": order.id,\n \"Product\": order.product,\n \"Customer Email\": order.user_email,\n \"User ID\": userId,\n \"Date Purchased\": order.date_purchased,\n \"Price\": `$${order.price}`,\n \"Image URL\": order.image || \"N/A\",\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getShippingInfoApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getShippingInfoApi\", [\n new JavaScript(\"getShippingInfo\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return { \"Shipping Status\": \"No shipping info\" };\n\n const orderId = order.id;\n\n // Generate shipping data based on order ID patterns\n const shippingStatuses = [\"Processing\", \"In Transit\", \"Delivered\", \"Out for Delivery\"];\n const locations = [\"Los Angeles, CA\", \"Phoenix, AZ\", \"Denver, CO\", \"Chicago, IL\", \"Miami, FL\"];\n const activities = [\"Order received\", \"Package shipped\", \"In transit\", \"Out for delivery\", \"Delivered\"];\n\n const statusIndex = orderId % shippingStatuses.length;\n const status = shippingStatuses[statusIndex];\n\n // Generate 2-3 shipping activities\n const numActivities = 2 + (orderId % 2);\n const history = [];\n\n for (let i = 0; i < numActivities; i++) {\n const date = new Date();\n date.setDate(date.getDate() - (numActivities - i));\n const timestamp = date.toISOString().replace('T', ' ').substring(0, 19);\n\n history.push({\n TIMESTAMP: timestamp,\n ACTIVITY: activities[i % activities.length],\n LOCATION: locations[i % locations.length],\n });\n }\n\n const result = {\n \"Shipping Status\": status,\n };\n\n history.forEach((item, index) => {\n result[`Activity ${index + 1}`] = `${item.ACTIVITY} - ${item.LOCATION} (${item.TIMESTAMP})`;\n });\n\n return result;\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/createOrderApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"createOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput }) =>\n !NewOrderProductInput.value ||\n !NewOrderUserEmailInput.value ||\n !NewOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n\n new JavaScript(\"createOrder\", {\n fn: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput, NewOrderImageInput }) => {\n // Generate a new order ID and user ID\n const orderId = Math.floor(Math.random() * 1000) + 100;\n const userId = Math.floor(Math.random() * 10000) + 1;\n const currentDate = new Date().toISOString().split('T')[0];\n\n // Simulate order creation\n console.log(\"Creating order:\", {\n id: orderId,\n user_id: userId,\n product: NewOrderProductInput.value,\n user_email: NewOrderUserEmailInput.value,\n price: NewOrderPriceInput.value,\n date_purchased: currentDate,\n image: NewOrderImageInput.value || \"\",\n });\n\n return {\n success: true,\n message: \"Order created successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/updateOrderApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"updateOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput }) =>\n !EditOrderProductInput.value ||\n !EditOrderUserEmailInput.value ||\n !EditOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n\n new JavaScript(\"updateOrder\", {\n fn: ({ OrdersTable, EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput, EditOrderImageInput }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for update\");\n }\n\n // Simulate order update\n console.log(\"Updating order:\", {\n id: orderId,\n product: EditOrderProductInput.value,\n user_email: EditOrderUserEmailInput.value,\n price: EditOrderPriceInput.value,\n image: EditOrderImageInput.value || \"\",\n });\n\n return {\n success: true,\n message: \"Order updated successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/deleteOrderApi.ts\">\nimport {\n Api,\n Athena,\n BigQuery,\n DynamoDb,\n JavaScript,\n Python,\n Databricks,\n MicrosoftSql,\n MySql,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Salesforce,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"deleteOrderApi\", [\n new JavaScript(\"deleteOrder\", {\n fn: ({ OrdersTable }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for deletion\");\n }\n\n // Simulate order deletion\n console.log(\"Deleting order:\", {\n id: orderId,\n product: OrdersTable.selectedRow?.product,\n user_email: OrdersTable.selectedRow?.user_email,\n });\n\n return {\n success: true,\n message: \"Order deleted successfully\",\n deletedOrderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n</boltArtifact>\n\nThe order management app is now complete with all the requested features:\n\n## **Key Features:**\n\n### **Metrics Dashboard**\n- **Total Orders**: Count of all records from DemoOrders\n- **Total Revenue**: Sum of price field from DemoOrders\n- **Orders This Month**: Count of orders from current month\n- **Active Shipments**: Count of records in DemoShipping SHIPPING_STATUS table\n\n### **Orders Management**\n- **Orders Table**: Displays all orders with id, product, user_email, date_purchased, price\n- **Product Filter**: Real-time text filtering on product names\n- **CRUD Operations**:\n - **Create**: Add new orders with product, email, price, and optional image\n - **Update**: Edit existing orders (click row to edit)\n - **Delete**: Remove orders (delete button in edit modal)\n - **View Details**: See full order info plus shipping status (click \"View Details\" button)\n\n### **Shipping Integration**\n- **Order Details Modal**: Shows order information plus shipping status and recent activity from DemoShipping tables\n- **Real-time Data**: Fetches shipping status and history by ORDER_ID\n\n### **User Experience**\n- Clean, professional interface with metric cards\n- Intuitive modals for all CRUD operations\n- Real-time filtering and data updates\n- Proper validation and error handling\n- Responsive design with consistent spacing\n\nThe app automatically loads metrics and orders data on page load, and all operations refresh the data to keep everything in sync.";
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=orders-app.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders-app.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/test-utils/app-generation-mocks/orders-app.ts"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"orders-app.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/test-utils/app-generation-mocks/orders-app.ts"],"names":[],"mappings":";AAAA,wBA23BmI"}
|