@walkeros/explorer 2.0.1 → 2.1.1
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/AGENT.md +14 -0
- package/STYLE.md +246 -136
- package/dist/chunk-4AJX6MFW.mjs +573 -0
- package/dist/chunk-4AJX6MFW.mjs.map +1 -0
- package/dist/components/atoms/button-link.stories.d.ts +1 -3
- package/dist/components/atoms/button-link.stories.d.ts.map +1 -1
- package/dist/components/atoms/button-link.stories.js +1 -15
- package/dist/components/atoms/button-link.stories.js.map +1 -1
- package/dist/components/atoms/code.d.ts +32 -1
- package/dist/components/atoms/code.d.ts.map +1 -1
- package/dist/components/atoms/code.js +103 -14
- package/dist/components/atoms/code.js.map +1 -1
- package/dist/components/atoms/code.stories.d.ts +0 -7
- package/dist/components/atoms/code.stories.d.ts.map +1 -1
- package/dist/components/atoms/code.stories.js +0 -34
- package/dist/components/atoms/code.stories.js.map +1 -1
- package/dist/components/molecules/code-box.d.ts +7 -1
- package/dist/components/molecules/code-box.d.ts.map +1 -1
- package/dist/components/molecules/code-box.js +74 -6
- package/dist/components/molecules/code-box.js.map +1 -1
- package/dist/components/molecules/code-box.stories.d.ts +56 -7
- package/dist/components/molecules/code-box.stories.d.ts.map +1 -1
- package/dist/components/molecules/code-box.stories.js +178 -41
- package/dist/components/molecules/code-box.stories.js.map +1 -1
- package/dist/components/molecules/code-snippet.stories.d.ts +7 -4
- package/dist/components/molecules/code-snippet.stories.d.ts.map +1 -1
- package/dist/components/molecules/code-snippet.stories.js +28 -9
- package/dist/components/molecules/code-snippet.stories.js.map +1 -1
- package/dist/components/molecules/flow-map/FlowMap.stories.d.ts +0 -32
- package/dist/components/molecules/flow-map/FlowMap.stories.d.ts.map +1 -1
- package/dist/components/molecules/flow-map/FlowMap.stories.js +0 -330
- package/dist/components/molecules/flow-map/FlowMap.stories.js.map +1 -1
- package/dist/components/molecules/flow-map/FlowMap.transformers.stories.d.ts +0 -16
- package/dist/components/molecules/flow-map/FlowMap.transformers.stories.d.ts.map +1 -1
- package/dist/components/molecules/flow-map/FlowMap.transformers.stories.js +0 -78
- package/dist/components/molecules/flow-map/FlowMap.transformers.stories.js.map +1 -1
- package/dist/components/molecules/flow-selector.js +1 -1
- package/dist/components/molecules/flow-selector.js.map +1 -1
- package/dist/components/molecules/flow-selector.stories.js +4 -4
- package/dist/components/molecules/flow-selector.stories.js.map +1 -1
- package/dist/components/molecules/preview.d.ts.map +1 -1
- package/dist/components/molecules/preview.js +32 -22
- package/dist/components/molecules/preview.js.map +1 -1
- package/dist/components/molecules/split-button.stories.js +6 -6
- package/dist/components/molecules/split-button.stories.js.map +1 -1
- package/dist/index.d.cts +200 -34
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1388 -337
- package/dist/index.mjs.map +1 -1
- package/dist/{monaco-types-OLSF6MIE.mjs → monaco-types-KN2DINPW.mjs} +2 -2
- package/dist/styles.css +77 -91
- package/dist/themes/lighthouse.d.ts.map +1 -1
- package/dist/themes/lighthouse.js +1 -0
- package/dist/themes/lighthouse.js.map +1 -1
- package/dist/themes/palenight.d.ts.map +1 -1
- package/dist/themes/palenight.js +1 -0
- package/dist/themes/palenight.js.map +1 -1
- package/dist/types/intellisense.d.ts +31 -0
- package/dist/types/intellisense.d.ts.map +1 -0
- package/dist/types/intellisense.js +2 -0
- package/dist/types/intellisense.js.map +1 -0
- package/dist/utils/format-code.d.ts.map +1 -1
- package/dist/utils/format-code.js +11 -2
- package/dist/utils/format-code.js.map +1 -1
- package/dist/utils/monaco-decorators.d.ts.map +1 -1
- package/dist/utils/monaco-decorators.js +2 -0
- package/dist/utils/monaco-decorators.js.map +1 -1
- package/dist/utils/monaco-intellisense-flow-extractor.d.ts +13 -0
- package/dist/utils/monaco-intellisense-flow-extractor.d.ts.map +1 -0
- package/dist/utils/monaco-intellisense-flow-extractor.js +161 -0
- package/dist/utils/monaco-intellisense-flow-extractor.js.map +1 -0
- package/dist/utils/monaco-json-schema.d.ts +24 -0
- package/dist/utils/monaco-json-schema.d.ts.map +1 -0
- package/dist/utils/monaco-json-schema.js +65 -0
- package/dist/utils/monaco-json-schema.js.map +1 -0
- package/dist/utils/monaco-schema-contract.d.ts +8 -0
- package/dist/utils/monaco-schema-contract.d.ts.map +1 -0
- package/dist/utils/monaco-schema-contract.js +73 -0
- package/dist/utils/monaco-schema-contract.js.map +1 -0
- package/dist/utils/monaco-schema-enrichment.d.ts +26 -0
- package/dist/utils/monaco-schema-enrichment.d.ts.map +1 -0
- package/dist/utils/monaco-schema-enrichment.js +31 -0
- package/dist/utils/monaco-schema-enrichment.js.map +1 -0
- package/dist/utils/monaco-schema-flow-setup.d.ts +10 -0
- package/dist/utils/monaco-schema-flow-setup.d.ts.map +1 -0
- package/dist/utils/monaco-schema-flow-setup.js +201 -0
- package/dist/utils/monaco-schema-flow-setup.js.map +1 -0
- package/dist/utils/monaco-schema-variables.d.ts +4 -0
- package/dist/utils/monaco-schema-variables.d.ts.map +1 -0
- package/dist/utils/monaco-schema-variables.js +26 -0
- package/dist/utils/monaco-schema-variables.js.map +1 -0
- package/dist/utils/monaco-walkeros-completions.d.ts +15 -0
- package/dist/utils/monaco-walkeros-completions.d.ts.map +1 -0
- package/dist/utils/monaco-walkeros-completions.js +65 -0
- package/dist/utils/monaco-walkeros-completions.js.map +1 -0
- package/dist/utils/monaco-walkeros-decorations.d.ts +29 -0
- package/dist/utils/monaco-walkeros-decorations.d.ts.map +1 -0
- package/dist/utils/monaco-walkeros-decorations.js +87 -0
- package/dist/utils/monaco-walkeros-decorations.js.map +1 -0
- package/dist/utils/monaco-walkeros-markers.d.ts +13 -0
- package/dist/utils/monaco-walkeros-markers.d.ts.map +1 -0
- package/dist/utils/monaco-walkeros-markers.js +69 -0
- package/dist/utils/monaco-walkeros-markers.js.map +1 -0
- package/dist/utils/monaco-walkeros-providers.d.ts +19 -0
- package/dist/utils/monaco-walkeros-providers.d.ts.map +1 -0
- package/dist/utils/monaco-walkeros-providers.js +229 -0
- package/dist/utils/monaco-walkeros-providers.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-YKT4D7MG.mjs +0 -3087
- package/dist/chunk-YKT4D7MG.mjs.map +0 -1
- package/dist/components/molecules/flow-deploy-panel.d.ts +0 -31
- package/dist/components/molecules/flow-deploy-panel.d.ts.map +0 -1
- package/dist/components/molecules/flow-deploy-panel.js +0 -72
- package/dist/components/molecules/flow-deploy-panel.js.map +0 -1
- package/dist/components/molecules/flow-deploy-panel.stories.d.ts +0 -40
- package/dist/components/molecules/flow-deploy-panel.stories.d.ts.map +0 -1
- package/dist/components/molecules/flow-deploy-panel.stories.js +0 -145
- package/dist/components/molecules/flow-deploy-panel.stories.js.map +0 -1
- /package/dist/{monaco-types-OLSF6MIE.mjs.map → monaco-types-KN2DINPW.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -5,13 +5,14 @@ import {
|
|
|
5
5
|
loadPackageTypes,
|
|
6
6
|
loadTypeLibraryFromURL,
|
|
7
7
|
registerWalkerOSTypes
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4AJX6MFW.mjs";
|
|
9
9
|
|
|
10
10
|
// src/components/demos/MappingDemo.tsx
|
|
11
|
-
import { useState as useState6, useCallback as useCallback5, useEffect as
|
|
11
|
+
import { useState as useState6, useCallback as useCallback5, useEffect as useEffect5 } from "react";
|
|
12
12
|
|
|
13
13
|
// src/components/molecules/code-box.tsx
|
|
14
|
-
import { useState as useState4, useCallback as useCallback3 } from "react";
|
|
14
|
+
import { useState as useState4, useCallback as useCallback3, useRef as useRef4, useEffect as useEffect3 } from "react";
|
|
15
|
+
import * as monacoNs from "monaco-editor";
|
|
15
16
|
|
|
16
17
|
// src/components/atoms/box.tsx
|
|
17
18
|
import { useState } from "react";
|
|
@@ -302,6 +303,7 @@ var palenightTheme = {
|
|
|
302
303
|
"editorStickyScroll.border": "#676E9540",
|
|
303
304
|
"editorStickyScrollHover.background": "#292d3e",
|
|
304
305
|
"editorStickyScroll.shadow": "#00000000",
|
|
306
|
+
"editorStickyScrollGutter.background": "#292d3e",
|
|
305
307
|
// Hover Widgets - Tooltips and hover information
|
|
306
308
|
"editorHoverWidget.background": "#1e1e2e",
|
|
307
309
|
"editorHoverWidget.border": "#676E95",
|
|
@@ -515,6 +517,7 @@ var lighthouseTheme = {
|
|
|
515
517
|
"editorStickyScroll.border": "#E1E4E8",
|
|
516
518
|
"editorStickyScrollHover.background": "#ffffff",
|
|
517
519
|
"editorStickyScroll.shadow": "#00000000",
|
|
520
|
+
"editorStickyScrollGutter.background": "#ffffff",
|
|
518
521
|
// Hover Widgets - Tooltips and hover information
|
|
519
522
|
"editorHoverWidget.background": "#F6F8FA",
|
|
520
523
|
"editorHoverWidget.border": "#E1E4E8",
|
|
@@ -577,10 +580,14 @@ var DATA_ELB_PATTERNS = [
|
|
|
577
580
|
// data-elb (not followed by hyphen)
|
|
578
581
|
/\bdata-elbaction\b/g,
|
|
579
582
|
// data-elbaction
|
|
583
|
+
/\bdata-elbactions\b/g,
|
|
584
|
+
// data-elbactions
|
|
580
585
|
/\bdata-elbglobals\b/g,
|
|
581
586
|
// data-elbglobals
|
|
582
587
|
/\bdata-elbcontext\b/g,
|
|
583
588
|
// data-elbcontext
|
|
589
|
+
/\bdata-elblink\b/g,
|
|
590
|
+
// data-elblink
|
|
584
591
|
/\bdata-elb-[\w-]+\b/g
|
|
585
592
|
// data-elb-* (property attributes)
|
|
586
593
|
];
|
|
@@ -640,6 +647,348 @@ function registerDataElbStyles() {
|
|
|
640
647
|
document.head.appendChild(style);
|
|
641
648
|
}
|
|
642
649
|
|
|
650
|
+
// src/utils/monaco-walkeros-decorations.ts
|
|
651
|
+
var REFERENCE_PATTERNS = [
|
|
652
|
+
{ type: "variable", regex: /\$var\.(\w*)/g, className: "elb-ref-variable" },
|
|
653
|
+
{
|
|
654
|
+
type: "definition",
|
|
655
|
+
regex: /\$def\.(\w*)/g,
|
|
656
|
+
className: "elb-ref-definition"
|
|
657
|
+
},
|
|
658
|
+
{ type: "secret", regex: /\$secret\.(\w*)/g, className: "elb-ref-secret" },
|
|
659
|
+
{ type: "env", regex: /\$env\.(\w*)/g, className: "elb-ref-env" },
|
|
660
|
+
{ type: "code", regex: /\$code:/g, className: "elb-ref-code" }
|
|
661
|
+
];
|
|
662
|
+
function findWalkerOSReferences(text) {
|
|
663
|
+
const references = [];
|
|
664
|
+
for (const pattern of REFERENCE_PATTERNS) {
|
|
665
|
+
const regex2 = new RegExp(pattern.regex.source, pattern.regex.flags);
|
|
666
|
+
let match;
|
|
667
|
+
while ((match = regex2.exec(text)) !== null) {
|
|
668
|
+
references.push({
|
|
669
|
+
type: pattern.type,
|
|
670
|
+
name: pattern.type === "code" ? "" : match[1] || "",
|
|
671
|
+
startIndex: match.index,
|
|
672
|
+
endIndex: match.index + match[0].length
|
|
673
|
+
});
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
return references;
|
|
677
|
+
}
|
|
678
|
+
function applyWalkerOSDecorations(editorInstance) {
|
|
679
|
+
let decorationIds = [];
|
|
680
|
+
function update() {
|
|
681
|
+
const model = editorInstance.getModel();
|
|
682
|
+
if (!model) return;
|
|
683
|
+
const text = model.getValue();
|
|
684
|
+
const references = findWalkerOSReferences(text);
|
|
685
|
+
const decorations = references.map(
|
|
686
|
+
(ref) => {
|
|
687
|
+
const startPos = model.getPositionAt(ref.startIndex);
|
|
688
|
+
const endPos = model.getPositionAt(ref.endIndex);
|
|
689
|
+
const pattern = REFERENCE_PATTERNS.find((p) => p.type === ref.type);
|
|
690
|
+
return {
|
|
691
|
+
range: {
|
|
692
|
+
startLineNumber: startPos.lineNumber,
|
|
693
|
+
startColumn: startPos.column,
|
|
694
|
+
endLineNumber: endPos.lineNumber,
|
|
695
|
+
endColumn: endPos.column
|
|
696
|
+
},
|
|
697
|
+
options: { inlineClassName: pattern.className }
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
);
|
|
701
|
+
decorationIds = editorInstance.deltaDecorations(decorationIds, decorations);
|
|
702
|
+
}
|
|
703
|
+
update();
|
|
704
|
+
const disposable = editorInstance.onDidChangeModelContent(() => update());
|
|
705
|
+
return () => {
|
|
706
|
+
disposable.dispose();
|
|
707
|
+
editorInstance.deltaDecorations(decorationIds, []);
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
function registerWalkerOSDecorationStyles() {
|
|
711
|
+
if (typeof document === "undefined") return;
|
|
712
|
+
if (document.getElementById("walkeros-ref-styles")) return;
|
|
713
|
+
const style = document.createElement("style");
|
|
714
|
+
style.id = "walkeros-ref-styles";
|
|
715
|
+
style.textContent = `
|
|
716
|
+
.monaco-editor .elb-ref-variable { color: #89ddff !important; font-style: italic; }
|
|
717
|
+
.monaco-editor .elb-ref-definition { color: #c3e88d !important; font-style: italic; }
|
|
718
|
+
.monaco-editor .elb-ref-secret { color: #ffcb6b !important; font-style: italic; }
|
|
719
|
+
.monaco-editor .elb-ref-env { color: #ffcb6b !important; font-style: italic; }
|
|
720
|
+
.monaco-editor .elb-ref-code { color: #c084fc !important; }
|
|
721
|
+
`;
|
|
722
|
+
document.head.appendChild(style);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// src/utils/monaco-walkeros-completions.ts
|
|
726
|
+
function getVariableCompletions(variables) {
|
|
727
|
+
if (!variables || Object.keys(variables).length === 0) return [];
|
|
728
|
+
return Object.entries(variables).map(([name, value]) => ({
|
|
729
|
+
label: `$var.${name}`,
|
|
730
|
+
insertText: `$var.${name}`,
|
|
731
|
+
detail: `= ${JSON.stringify(value)}`,
|
|
732
|
+
documentation: `Variable reference. Resolves to \`${JSON.stringify(value)}\` at runtime.`,
|
|
733
|
+
kind: "variable",
|
|
734
|
+
sortText: "0_var_" + name
|
|
735
|
+
}));
|
|
736
|
+
}
|
|
737
|
+
function getDefinitionCompletions(definitions) {
|
|
738
|
+
if (!definitions || Object.keys(definitions).length === 0) return [];
|
|
739
|
+
return Object.keys(definitions).map((name) => ({
|
|
740
|
+
label: `$def.${name}`,
|
|
741
|
+
insertText: `$def.${name}`,
|
|
742
|
+
detail: "(definition)",
|
|
743
|
+
documentation: `Definition reference. Injects the reusable config fragment "${name}" at runtime.`,
|
|
744
|
+
kind: "reference",
|
|
745
|
+
sortText: "0_def_" + name
|
|
746
|
+
}));
|
|
747
|
+
}
|
|
748
|
+
function getSecretCompletions(secrets) {
|
|
749
|
+
if (!secrets || secrets.length === 0) return [];
|
|
750
|
+
return secrets.map((name) => ({
|
|
751
|
+
label: `$secret.${name}`,
|
|
752
|
+
insertText: `$secret.${name}`,
|
|
753
|
+
detail: "(secret)",
|
|
754
|
+
documentation: "Secret reference. Value is securely injected at runtime. Never stored in config.",
|
|
755
|
+
kind: "secret",
|
|
756
|
+
sortText: "0_secret_" + name
|
|
757
|
+
}));
|
|
758
|
+
}
|
|
759
|
+
function getPackageCompletions(packages, platform) {
|
|
760
|
+
if (!packages || packages.length === 0) return [];
|
|
761
|
+
const filtered = platform ? packages.filter((p) => p.platform === platform) : packages;
|
|
762
|
+
return filtered.map((pkg) => ({
|
|
763
|
+
label: pkg.package,
|
|
764
|
+
insertText: pkg.package,
|
|
765
|
+
detail: `${pkg.type} (${pkg.platform})`,
|
|
766
|
+
documentation: `walkerOS ${pkg.type}: ${pkg.shortName}`,
|
|
767
|
+
kind: "module",
|
|
768
|
+
sortText: "1_pkg_" + pkg.shortName
|
|
769
|
+
}));
|
|
770
|
+
}
|
|
771
|
+
function getStepNameCompletions(stepNames, context) {
|
|
772
|
+
if (!stepNames) return [];
|
|
773
|
+
const names = stepNames.transformers || [];
|
|
774
|
+
return names.map((name) => ({
|
|
775
|
+
label: name,
|
|
776
|
+
insertText: name,
|
|
777
|
+
detail: `transformer (${context} chain)`,
|
|
778
|
+
documentation: `Reference to transformer step "${name}" in this flow config.`,
|
|
779
|
+
kind: "reference",
|
|
780
|
+
sortText: "0_step_" + name
|
|
781
|
+
}));
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// src/utils/monaco-walkeros-providers.ts
|
|
785
|
+
var contextRegistry = /* @__PURE__ */ new Map();
|
|
786
|
+
var disposables = [];
|
|
787
|
+
var registered = false;
|
|
788
|
+
function setIntelliSenseContext(modelPath, context) {
|
|
789
|
+
contextRegistry.set(modelPath, context);
|
|
790
|
+
}
|
|
791
|
+
function removeIntelliSenseContext(modelPath) {
|
|
792
|
+
contextRegistry.delete(modelPath);
|
|
793
|
+
}
|
|
794
|
+
function registerWalkerOSProviders(monaco) {
|
|
795
|
+
if (registered) return;
|
|
796
|
+
registered = true;
|
|
797
|
+
disposables.push(
|
|
798
|
+
monaco.languages.registerCompletionItemProvider("json", {
|
|
799
|
+
triggerCharacters: ['"', ".", "$"],
|
|
800
|
+
provideCompletionItems(model, position) {
|
|
801
|
+
const modelPath = model.uri.toString();
|
|
802
|
+
const context = contextRegistry.get(modelPath);
|
|
803
|
+
if (!context) return { suggestions: [] };
|
|
804
|
+
const lineContent = model.getLineContent(position.lineNumber);
|
|
805
|
+
const textBeforeCursor = lineContent.substring(0, position.column - 1);
|
|
806
|
+
const entries = [];
|
|
807
|
+
if (textBeforeCursor.includes("$var.") || textBeforeCursor.endsWith('"$var')) {
|
|
808
|
+
entries.push(...getVariableCompletions(context.variables));
|
|
809
|
+
} else if (textBeforeCursor.includes("$def.") || textBeforeCursor.endsWith('"$def')) {
|
|
810
|
+
entries.push(...getDefinitionCompletions(context.definitions));
|
|
811
|
+
} else if (textBeforeCursor.includes("$secret.") || textBeforeCursor.endsWith('"$secret')) {
|
|
812
|
+
entries.push(...getSecretCompletions(context.secrets));
|
|
813
|
+
} else if (isInsideKey(model, position, "package")) {
|
|
814
|
+
entries.push(
|
|
815
|
+
...getPackageCompletions(context.packages, context.platform)
|
|
816
|
+
);
|
|
817
|
+
} else if (isInsideKey(model, position, "next") || isInsideKey(model, position, "before")) {
|
|
818
|
+
const key = isInsideKey(model, position, "next") ? "next" : "before";
|
|
819
|
+
entries.push(...getStepNameCompletions(context.stepNames, key));
|
|
820
|
+
} else if (textBeforeCursor.endsWith('"$') || textBeforeCursor.endsWith('"')) {
|
|
821
|
+
entries.push(...getVariableCompletions(context.variables));
|
|
822
|
+
entries.push(...getDefinitionCompletions(context.definitions));
|
|
823
|
+
entries.push(...getSecretCompletions(context.secrets));
|
|
824
|
+
}
|
|
825
|
+
const refStartMatch = textBeforeCursor.match(
|
|
826
|
+
/\$(?:var|def|secret|env|code)[.:]?\w*$/
|
|
827
|
+
);
|
|
828
|
+
const word = model.getWordUntilPosition(position);
|
|
829
|
+
const startCol = refStartMatch ? position.column - refStartMatch[0].length : word.startColumn;
|
|
830
|
+
const range = {
|
|
831
|
+
startLineNumber: position.lineNumber,
|
|
832
|
+
endLineNumber: position.lineNumber,
|
|
833
|
+
startColumn: startCol,
|
|
834
|
+
endColumn: position.column
|
|
835
|
+
};
|
|
836
|
+
return {
|
|
837
|
+
suggestions: entries.map((entry) => ({
|
|
838
|
+
label: entry.label,
|
|
839
|
+
insertText: entry.insertText,
|
|
840
|
+
detail: entry.detail,
|
|
841
|
+
documentation: entry.documentation,
|
|
842
|
+
kind: mapCompletionKind(monaco, entry.kind),
|
|
843
|
+
sortText: entry.sortText,
|
|
844
|
+
range
|
|
845
|
+
}))
|
|
846
|
+
};
|
|
847
|
+
}
|
|
848
|
+
})
|
|
849
|
+
);
|
|
850
|
+
disposables.push(
|
|
851
|
+
monaco.languages.registerHoverProvider("json", {
|
|
852
|
+
provideHover(model, position) {
|
|
853
|
+
const modelPath = model.uri.toString();
|
|
854
|
+
const context = contextRegistry.get(modelPath);
|
|
855
|
+
if (!context) return null;
|
|
856
|
+
const lineContent = model.getLineContent(position.lineNumber);
|
|
857
|
+
const col = position.column - 1;
|
|
858
|
+
function matchAtCursor(pattern) {
|
|
859
|
+
const regex2 = new RegExp(pattern.source, "g");
|
|
860
|
+
let m;
|
|
861
|
+
while ((m = regex2.exec(lineContent)) !== null) {
|
|
862
|
+
if (col >= m.index && col <= m.index + m[0].length) return m;
|
|
863
|
+
}
|
|
864
|
+
return null;
|
|
865
|
+
}
|
|
866
|
+
const varMatch = matchAtCursor(/\$var\.(\w+)/);
|
|
867
|
+
if (varMatch && context.variables) {
|
|
868
|
+
const name = varMatch[1];
|
|
869
|
+
if (name in context.variables) {
|
|
870
|
+
const value = context.variables[name];
|
|
871
|
+
return {
|
|
872
|
+
range: {
|
|
873
|
+
startLineNumber: position.lineNumber,
|
|
874
|
+
startColumn: varMatch.index + 1,
|
|
875
|
+
endLineNumber: position.lineNumber,
|
|
876
|
+
endColumn: varMatch.index + varMatch[0].length + 1
|
|
877
|
+
},
|
|
878
|
+
contents: [
|
|
879
|
+
{
|
|
880
|
+
value: `**Variable:** \`$var.${name}\`
|
|
881
|
+
|
|
882
|
+
**Value:** \`${JSON.stringify(value)}\`
|
|
883
|
+
|
|
884
|
+
*Resolved at runtime via variable interpolation*`
|
|
885
|
+
}
|
|
886
|
+
]
|
|
887
|
+
};
|
|
888
|
+
}
|
|
889
|
+
return {
|
|
890
|
+
contents: [
|
|
891
|
+
{
|
|
892
|
+
value: `**Unknown variable** \`$var.${name}\`
|
|
893
|
+
|
|
894
|
+
Defined variables: ${Object.keys(context.variables).join(", ") || "none"}`
|
|
895
|
+
}
|
|
896
|
+
]
|
|
897
|
+
};
|
|
898
|
+
}
|
|
899
|
+
const defMatch = matchAtCursor(/\$def\.(\w+)/);
|
|
900
|
+
if (defMatch && context.definitions) {
|
|
901
|
+
const name = defMatch[1];
|
|
902
|
+
if (name in context.definitions) {
|
|
903
|
+
return {
|
|
904
|
+
range: {
|
|
905
|
+
startLineNumber: position.lineNumber,
|
|
906
|
+
startColumn: defMatch.index + 1,
|
|
907
|
+
endLineNumber: position.lineNumber,
|
|
908
|
+
endColumn: defMatch.index + defMatch[0].length + 1
|
|
909
|
+
},
|
|
910
|
+
contents: [
|
|
911
|
+
{
|
|
912
|
+
value: `**Definition:** \`$def.${name}\`
|
|
913
|
+
|
|
914
|
+
*Injects reusable config fragment at runtime*`
|
|
915
|
+
}
|
|
916
|
+
]
|
|
917
|
+
};
|
|
918
|
+
}
|
|
919
|
+
return {
|
|
920
|
+
contents: [
|
|
921
|
+
{
|
|
922
|
+
value: `**Unknown definition** \`$def.${name}\`
|
|
923
|
+
|
|
924
|
+
Defined: ${Object.keys(context.definitions).join(", ") || "none"}`
|
|
925
|
+
}
|
|
926
|
+
]
|
|
927
|
+
};
|
|
928
|
+
}
|
|
929
|
+
const secretMatch = matchAtCursor(/\$secret\.(\w+)/);
|
|
930
|
+
if (secretMatch) {
|
|
931
|
+
const name = secretMatch[1];
|
|
932
|
+
if (context.secrets?.includes(name)) {
|
|
933
|
+
return {
|
|
934
|
+
range: {
|
|
935
|
+
startLineNumber: position.lineNumber,
|
|
936
|
+
startColumn: secretMatch.index + 1,
|
|
937
|
+
endLineNumber: position.lineNumber,
|
|
938
|
+
endColumn: secretMatch.index + secretMatch[0].length + 1
|
|
939
|
+
},
|
|
940
|
+
contents: [
|
|
941
|
+
{
|
|
942
|
+
value: `**Secret:** \`$secret.${name}\`
|
|
943
|
+
|
|
944
|
+
*Securely injected at runtime. Value not stored in config.*`
|
|
945
|
+
}
|
|
946
|
+
]
|
|
947
|
+
};
|
|
948
|
+
}
|
|
949
|
+
return {
|
|
950
|
+
contents: [
|
|
951
|
+
{
|
|
952
|
+
value: `**Unknown secret** \`$secret.${name}\`
|
|
953
|
+
|
|
954
|
+
Available secrets: ${context.secrets?.join(", ") || "none"}`
|
|
955
|
+
}
|
|
956
|
+
]
|
|
957
|
+
};
|
|
958
|
+
}
|
|
959
|
+
return null;
|
|
960
|
+
}
|
|
961
|
+
})
|
|
962
|
+
);
|
|
963
|
+
}
|
|
964
|
+
function disposeWalkerOSProviders() {
|
|
965
|
+
for (const d of disposables) d.dispose();
|
|
966
|
+
disposables.length = 0;
|
|
967
|
+
registered = false;
|
|
968
|
+
contextRegistry.clear();
|
|
969
|
+
}
|
|
970
|
+
function mapCompletionKind(monaco, kind) {
|
|
971
|
+
switch (kind) {
|
|
972
|
+
case "variable":
|
|
973
|
+
return monaco.languages.CompletionItemKind.Variable;
|
|
974
|
+
case "reference":
|
|
975
|
+
return monaco.languages.CompletionItemKind.Reference;
|
|
976
|
+
case "secret":
|
|
977
|
+
return monaco.languages.CompletionItemKind.Constant;
|
|
978
|
+
case "module":
|
|
979
|
+
return monaco.languages.CompletionItemKind.Module;
|
|
980
|
+
case "property":
|
|
981
|
+
return monaco.languages.CompletionItemKind.Property;
|
|
982
|
+
default:
|
|
983
|
+
return monaco.languages.CompletionItemKind.Text;
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
function isInsideKey(model, position, key) {
|
|
987
|
+
const lineContent = model.getLineContent(position.lineNumber);
|
|
988
|
+
const pattern = new RegExp(`"${key}"\\s*:\\s*"`);
|
|
989
|
+
return pattern.test(lineContent);
|
|
990
|
+
}
|
|
991
|
+
|
|
643
992
|
// src/utils/monaco-formatters.ts
|
|
644
993
|
import * as prettier from "prettier/standalone";
|
|
645
994
|
import prettierBabel from "prettier/plugins/babel";
|
|
@@ -764,6 +1113,35 @@ function registerFormatters(monacoInstance) {
|
|
|
764
1113
|
});
|
|
765
1114
|
}
|
|
766
1115
|
|
|
1116
|
+
// src/utils/monaco-json-schema.ts
|
|
1117
|
+
import { json } from "monaco-editor";
|
|
1118
|
+
var schemaRegistry = /* @__PURE__ */ new Map();
|
|
1119
|
+
var idCounter = 0;
|
|
1120
|
+
function generateModelPath() {
|
|
1121
|
+
return `inmemory://walkeros/json-${++idCounter}.json`;
|
|
1122
|
+
}
|
|
1123
|
+
function registerJsonSchema(modelPath, schema) {
|
|
1124
|
+
schemaRegistry.set(modelPath, {
|
|
1125
|
+
uri: `schema://walkeros/${modelPath}`,
|
|
1126
|
+
fileMatch: [modelPath],
|
|
1127
|
+
schema
|
|
1128
|
+
});
|
|
1129
|
+
applySchemas();
|
|
1130
|
+
}
|
|
1131
|
+
function unregisterJsonSchema(modelPath) {
|
|
1132
|
+
schemaRegistry.delete(modelPath);
|
|
1133
|
+
applySchemas();
|
|
1134
|
+
}
|
|
1135
|
+
function applySchemas() {
|
|
1136
|
+
json.jsonDefaults.setDiagnosticsOptions({
|
|
1137
|
+
validate: true,
|
|
1138
|
+
schemaValidation: "error",
|
|
1139
|
+
schemaRequest: "ignore",
|
|
1140
|
+
enableSchemaRequest: false,
|
|
1141
|
+
schemas: Array.from(schemaRegistry.values())
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
|
|
767
1145
|
// src/hooks/useMonacoHeight.ts
|
|
768
1146
|
import { useState as useState2, useRef as useRef2, useCallback } from "react";
|
|
769
1147
|
function useMonacoHeight({
|
|
@@ -804,19 +1182,19 @@ function useMonacoHeight({
|
|
|
804
1182
|
}
|
|
805
1183
|
}, [enabled, minHeight, maxHeight, onHeightChange]);
|
|
806
1184
|
const setEditor = useCallback(
|
|
807
|
-
(
|
|
1185
|
+
(editor2) => {
|
|
808
1186
|
if (updateTimeoutRef.current) {
|
|
809
1187
|
clearTimeout(updateTimeoutRef.current);
|
|
810
1188
|
updateTimeoutRef.current = null;
|
|
811
1189
|
}
|
|
812
|
-
editorRef.current =
|
|
813
|
-
if (!enabled || !
|
|
1190
|
+
editorRef.current = editor2;
|
|
1191
|
+
if (!enabled || !editor2) {
|
|
814
1192
|
setHeight(defaultHeight);
|
|
815
1193
|
previousHeightRef.current = defaultHeight;
|
|
816
1194
|
return;
|
|
817
1195
|
}
|
|
818
1196
|
setTimeout(() => updateHeight(), 50);
|
|
819
|
-
const disposable =
|
|
1197
|
+
const disposable = editor2.onDidContentSizeChange(() => {
|
|
820
1198
|
if (updateTimeoutRef.current) {
|
|
821
1199
|
clearTimeout(updateTimeoutRef.current);
|
|
822
1200
|
}
|
|
@@ -825,7 +1203,7 @@ function useMonacoHeight({
|
|
|
825
1203
|
updateTimeoutRef.current = null;
|
|
826
1204
|
}, 150);
|
|
827
1205
|
});
|
|
828
|
-
|
|
1206
|
+
editor2.__heightDisposable = disposable;
|
|
829
1207
|
},
|
|
830
1208
|
[enabled, defaultHeight, updateHeight]
|
|
831
1209
|
);
|
|
@@ -840,6 +1218,7 @@ function Code({
|
|
|
840
1218
|
onChange,
|
|
841
1219
|
disabled = false,
|
|
842
1220
|
lineNumbers = false,
|
|
1221
|
+
minimap = false,
|
|
843
1222
|
folding = false,
|
|
844
1223
|
wordWrap = false,
|
|
845
1224
|
className,
|
|
@@ -849,11 +1228,15 @@ function Code({
|
|
|
849
1228
|
fontSize = 13,
|
|
850
1229
|
packages,
|
|
851
1230
|
sticky = true,
|
|
852
|
-
ide = false
|
|
1231
|
+
ide = false,
|
|
1232
|
+
jsonSchema,
|
|
1233
|
+
intellisenseContext,
|
|
1234
|
+
validate,
|
|
1235
|
+
onMarkerCounts
|
|
853
1236
|
}) {
|
|
854
1237
|
const [isMounted, setIsMounted] = useState3(false);
|
|
855
1238
|
const [monacoTheme, setMonacoTheme] = useState3("vs-light");
|
|
856
|
-
const decorationsCleanupRef = useRef3(
|
|
1239
|
+
const decorationsCleanupRef = useRef3([]);
|
|
857
1240
|
const monacoRef = useRef3(null);
|
|
858
1241
|
const editorRef = useRef3(null);
|
|
859
1242
|
const containerRef = useRef3(null);
|
|
@@ -928,12 +1311,12 @@ function Code({
|
|
|
928
1311
|
};
|
|
929
1312
|
}, [isMounted, getDataTheme]);
|
|
930
1313
|
useEffect2(() => {
|
|
931
|
-
const
|
|
1314
|
+
const editor2 = editorRef.current;
|
|
932
1315
|
const container = containerRef.current;
|
|
933
|
-
if (!
|
|
1316
|
+
if (!editor2 || !container) return;
|
|
934
1317
|
const resizeObserver = new ResizeObserver(() => {
|
|
935
1318
|
requestAnimationFrame(() => {
|
|
936
|
-
|
|
1319
|
+
editor2.layout();
|
|
937
1320
|
});
|
|
938
1321
|
});
|
|
939
1322
|
resizeObserver.observe(container);
|
|
@@ -941,6 +1324,35 @@ function Code({
|
|
|
941
1324
|
resizeObserver.disconnect();
|
|
942
1325
|
};
|
|
943
1326
|
}, []);
|
|
1327
|
+
const modelPathRef = useRef3(null);
|
|
1328
|
+
const intellisenseContextRef = useRef3(intellisenseContext);
|
|
1329
|
+
intellisenseContextRef.current = intellisenseContext;
|
|
1330
|
+
const validateRef = useRef3(validate);
|
|
1331
|
+
validateRef.current = validate;
|
|
1332
|
+
const onMarkerCountsRef = useRef3(onMarkerCounts);
|
|
1333
|
+
onMarkerCountsRef.current = onMarkerCounts;
|
|
1334
|
+
if ((jsonSchema || intellisenseContext) && !modelPathRef.current) {
|
|
1335
|
+
modelPathRef.current = generateModelPath();
|
|
1336
|
+
}
|
|
1337
|
+
useEffect2(() => {
|
|
1338
|
+
if (!jsonSchema || !modelPathRef.current) return;
|
|
1339
|
+
registerJsonSchema(modelPathRef.current, jsonSchema);
|
|
1340
|
+
return () => {
|
|
1341
|
+
if (modelPathRef.current) {
|
|
1342
|
+
unregisterJsonSchema(modelPathRef.current);
|
|
1343
|
+
}
|
|
1344
|
+
};
|
|
1345
|
+
}, [jsonSchema]);
|
|
1346
|
+
useEffect2(() => {
|
|
1347
|
+
if (intellisenseContext && modelPathRef.current) {
|
|
1348
|
+
setIntelliSenseContext(modelPathRef.current, intellisenseContext);
|
|
1349
|
+
return () => {
|
|
1350
|
+
if (modelPathRef.current) {
|
|
1351
|
+
removeIntelliSenseContext(modelPathRef.current);
|
|
1352
|
+
}
|
|
1353
|
+
};
|
|
1354
|
+
}
|
|
1355
|
+
}, [intellisenseContext]);
|
|
944
1356
|
const handleChange = (value) => {
|
|
945
1357
|
if (onChange && value !== void 0) {
|
|
946
1358
|
onChange(value);
|
|
@@ -948,15 +1360,11 @@ function Code({
|
|
|
948
1360
|
};
|
|
949
1361
|
const handleBeforeMount = async (monaco) => {
|
|
950
1362
|
monacoRef.current = monaco;
|
|
951
|
-
if (beforeMount) {
|
|
952
|
-
beforeMount(monaco);
|
|
953
|
-
return;
|
|
954
|
-
}
|
|
955
1363
|
registerAllThemes(monaco);
|
|
956
1364
|
registerFormatters(monaco);
|
|
957
1365
|
if (packages && packages.length > 0) {
|
|
958
1366
|
registerWalkerOSTypes(monaco);
|
|
959
|
-
const { loadPackageTypes: loadPackageTypes2 } = await import("./monaco-types-
|
|
1367
|
+
const { loadPackageTypes: loadPackageTypes2 } = await import("./monaco-types-KN2DINPW.mjs");
|
|
960
1368
|
for (const pkg of packages) {
|
|
961
1369
|
if (pkg !== "@walkeros/core") {
|
|
962
1370
|
await loadPackageTypes2(monaco, { package: pkg }).catch(() => {
|
|
@@ -968,6 +1376,12 @@ function Code({
|
|
|
968
1376
|
const isDark = dataTheme === "dark" || dataTheme === null && window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
969
1377
|
const themeName = isDark ? "elbTheme-dark" : "elbTheme-light";
|
|
970
1378
|
monaco.editor.setTheme(themeName);
|
|
1379
|
+
if (language === "json") {
|
|
1380
|
+
registerWalkerOSProviders(monaco);
|
|
1381
|
+
}
|
|
1382
|
+
if (beforeMount) {
|
|
1383
|
+
beforeMount(monaco);
|
|
1384
|
+
}
|
|
971
1385
|
};
|
|
972
1386
|
const MonacoEditor = Editor;
|
|
973
1387
|
const handleEditorMount = (monacoEditor) => {
|
|
@@ -976,11 +1390,54 @@ function Code({
|
|
|
976
1390
|
registerEditor(monacoEditor);
|
|
977
1391
|
}
|
|
978
1392
|
if (language === "html" && monacoRef.current) {
|
|
979
|
-
decorationsCleanupRef.current
|
|
980
|
-
monacoEditor,
|
|
981
|
-
|
|
1393
|
+
decorationsCleanupRef.current.push(
|
|
1394
|
+
applyDataElbDecorations(monacoEditor, monacoRef.current)
|
|
1395
|
+
);
|
|
1396
|
+
}
|
|
1397
|
+
if (language === "json") {
|
|
1398
|
+
registerWalkerOSDecorationStyles();
|
|
1399
|
+
decorationsCleanupRef.current.push(
|
|
1400
|
+
applyWalkerOSDecorations(monacoEditor)
|
|
982
1401
|
);
|
|
983
1402
|
}
|
|
1403
|
+
if (validateRef.current && monacoRef.current) {
|
|
1404
|
+
const monacoInstance = monacoRef.current;
|
|
1405
|
+
let validateTimer;
|
|
1406
|
+
const runValidation = () => {
|
|
1407
|
+
const model = monacoEditor.getModel();
|
|
1408
|
+
if (!model) return;
|
|
1409
|
+
const text = model.getValue();
|
|
1410
|
+
const fn = validateRef.current;
|
|
1411
|
+
if (!fn) return;
|
|
1412
|
+
const result = fn(text);
|
|
1413
|
+
const allIssues = [...result.errors, ...result.warnings];
|
|
1414
|
+
monacoInstance.editor.setModelMarkers(
|
|
1415
|
+
model,
|
|
1416
|
+
"validate",
|
|
1417
|
+
allIssues.map((issue) => ({
|
|
1418
|
+
severity: issue.severity === "error" ? 8 : 4,
|
|
1419
|
+
message: issue.message,
|
|
1420
|
+
startLineNumber: issue.line,
|
|
1421
|
+
startColumn: issue.column,
|
|
1422
|
+
endLineNumber: issue.endLine ?? issue.line,
|
|
1423
|
+
endColumn: issue.endColumn ?? issue.column + 1
|
|
1424
|
+
}))
|
|
1425
|
+
);
|
|
1426
|
+
onMarkerCountsRef.current?.({
|
|
1427
|
+
errors: result.errors.length,
|
|
1428
|
+
warnings: result.warnings.length
|
|
1429
|
+
});
|
|
1430
|
+
};
|
|
1431
|
+
runValidation();
|
|
1432
|
+
const validateDisposable = monacoEditor.onDidChangeModelContent(() => {
|
|
1433
|
+
clearTimeout(validateTimer);
|
|
1434
|
+
validateTimer = setTimeout(runValidation, 300);
|
|
1435
|
+
});
|
|
1436
|
+
decorationsCleanupRef.current.push(() => {
|
|
1437
|
+
clearTimeout(validateTimer);
|
|
1438
|
+
validateDisposable.dispose();
|
|
1439
|
+
});
|
|
1440
|
+
}
|
|
984
1441
|
requestAnimationFrame(() => {
|
|
985
1442
|
monacoEditor.layout();
|
|
986
1443
|
});
|
|
@@ -990,9 +1447,10 @@ function Code({
|
|
|
990
1447
|
};
|
|
991
1448
|
useEffect2(() => {
|
|
992
1449
|
return () => {
|
|
993
|
-
|
|
994
|
-
|
|
1450
|
+
for (const cleanup of decorationsCleanupRef.current) {
|
|
1451
|
+
cleanup();
|
|
995
1452
|
}
|
|
1453
|
+
decorationsCleanupRef.current = [];
|
|
996
1454
|
};
|
|
997
1455
|
}, []);
|
|
998
1456
|
const monacoHeight = autoHeight || gridContext?.enabled ? `${calculatedHeight}px` : "100%";
|
|
@@ -1008,10 +1466,11 @@ function Code({
|
|
|
1008
1466
|
beforeMount: handleBeforeMount,
|
|
1009
1467
|
onMount: handleEditorMount,
|
|
1010
1468
|
theme: monacoTheme,
|
|
1469
|
+
path: modelPathRef.current || void 0,
|
|
1011
1470
|
options: {
|
|
1012
1471
|
readOnly: disabled || !onChange,
|
|
1013
1472
|
readOnlyMessage: { value: "" },
|
|
1014
|
-
minimap: { enabled:
|
|
1473
|
+
minimap: { enabled: minimap },
|
|
1015
1474
|
fontSize,
|
|
1016
1475
|
lineHeight: Math.round(fontSize * 1.5),
|
|
1017
1476
|
padding: 0,
|
|
@@ -1030,8 +1489,8 @@ function Code({
|
|
|
1030
1489
|
fixedOverflowWidgets: true,
|
|
1031
1490
|
overviewRulerLanes: 0,
|
|
1032
1491
|
renderLineHighlight: "none",
|
|
1033
|
-
renderValidationDecorations: ide ? "editable" : "off",
|
|
1034
|
-
hover: { enabled: ide },
|
|
1492
|
+
renderValidationDecorations: ide || jsonSchema ? "editable" : "off",
|
|
1493
|
+
hover: { enabled: ide || !!jsonSchema || !!intellisenseContext },
|
|
1035
1494
|
"semanticHighlighting.enabled": ide,
|
|
1036
1495
|
showDeprecated: ide,
|
|
1037
1496
|
showUnused: ide,
|
|
@@ -1065,8 +1524,7 @@ function Code({
|
|
|
1065
1524
|
// Don't select line when clicking line numbers
|
|
1066
1525
|
wordBasedSuggestions: "off",
|
|
1067
1526
|
// Reduce auto-completion interference
|
|
1068
|
-
quickSuggestions: false,
|
|
1069
|
-
// Disable quick suggestions popup
|
|
1527
|
+
quickSuggestions: jsonSchema || intellisenseContext ? { strings: true, other: true, comments: false } : false,
|
|
1070
1528
|
stickyScroll: { enabled: sticky }
|
|
1071
1529
|
}
|
|
1072
1530
|
}
|
|
@@ -1074,7 +1532,7 @@ function Code({
|
|
|
1074
1532
|
}
|
|
1075
1533
|
|
|
1076
1534
|
// src/components/molecules/code-box.tsx
|
|
1077
|
-
import {
|
|
1535
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1078
1536
|
function CodeBox({
|
|
1079
1537
|
// Code props (single code mode)
|
|
1080
1538
|
code,
|
|
@@ -1094,8 +1552,11 @@ function CodeBox({
|
|
|
1094
1552
|
// Visual
|
|
1095
1553
|
showTrafficLights = false,
|
|
1096
1554
|
// Actions
|
|
1097
|
-
showCopy =
|
|
1555
|
+
showCopy = true,
|
|
1098
1556
|
showFormat = false,
|
|
1557
|
+
showSettings = false,
|
|
1558
|
+
// Validation
|
|
1559
|
+
onValidationIssues,
|
|
1099
1560
|
// Layout
|
|
1100
1561
|
footer,
|
|
1101
1562
|
height,
|
|
@@ -1103,7 +1564,29 @@ function CodeBox({
|
|
|
1103
1564
|
className,
|
|
1104
1565
|
...codeProps
|
|
1105
1566
|
}) {
|
|
1567
|
+
const { onMount: userOnMount, ...restCodeProps } = codeProps;
|
|
1106
1568
|
const [copied, setCopied] = useState4(false);
|
|
1569
|
+
const [showSettingsPanel, setShowSettingsPanel] = useState4(false);
|
|
1570
|
+
const [settings, setSettings] = useState4({
|
|
1571
|
+
lineNumbers: false,
|
|
1572
|
+
minimap: false,
|
|
1573
|
+
wordWrap: false,
|
|
1574
|
+
sticky: true
|
|
1575
|
+
});
|
|
1576
|
+
const settingsRef = useRef4(null);
|
|
1577
|
+
const [markerCounts, setMarkerCounts] = useState4({ errors: 0, warnings: 0 });
|
|
1578
|
+
const editorInstanceRef = useRef4(null);
|
|
1579
|
+
const lastJumpIndexRef = useRef4({ errors: -1, warnings: -1 });
|
|
1580
|
+
useEffect3(() => {
|
|
1581
|
+
if (!showSettingsPanel) return;
|
|
1582
|
+
const handleClickOutside = (e) => {
|
|
1583
|
+
if (settingsRef.current && !settingsRef.current.contains(e.target)) {
|
|
1584
|
+
setShowSettingsPanel(false);
|
|
1585
|
+
}
|
|
1586
|
+
};
|
|
1587
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
1588
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1589
|
+
}, [showSettingsPanel]);
|
|
1107
1590
|
const [currentTabId, setCurrentTabId] = useState4(
|
|
1108
1591
|
controlledActiveTab ?? defaultTab ?? tabs?.[0]?.id ?? ""
|
|
1109
1592
|
);
|
|
@@ -1136,7 +1619,103 @@ function CodeBox({
|
|
|
1136
1619
|
} catch (e) {
|
|
1137
1620
|
}
|
|
1138
1621
|
};
|
|
1139
|
-
const
|
|
1622
|
+
const handleEditorMount = useCallback3(
|
|
1623
|
+
(monacoEditor) => {
|
|
1624
|
+
editorInstanceRef.current = monacoEditor;
|
|
1625
|
+
userOnMount?.(monacoEditor);
|
|
1626
|
+
},
|
|
1627
|
+
[userOnMount]
|
|
1628
|
+
);
|
|
1629
|
+
const handleMarkerCounts = useCallback3(
|
|
1630
|
+
(counts) => {
|
|
1631
|
+
setMarkerCounts(counts);
|
|
1632
|
+
lastJumpIndexRef.current = { errors: -1, warnings: -1 };
|
|
1633
|
+
onValidationIssues?.(counts);
|
|
1634
|
+
},
|
|
1635
|
+
[onValidationIssues]
|
|
1636
|
+
);
|
|
1637
|
+
const jumpToMarker = useCallback3((severity) => {
|
|
1638
|
+
const ed = editorInstanceRef.current;
|
|
1639
|
+
if (!ed) return;
|
|
1640
|
+
const model = ed.getModel();
|
|
1641
|
+
if (!model) return;
|
|
1642
|
+
const severityValue = severity === "error" ? 8 : 4;
|
|
1643
|
+
const markers = monacoNs.editor.getModelMarkers({ resource: model.uri }).filter((m) => m.severity === severityValue).sort(
|
|
1644
|
+
(a, b) => a.startLineNumber - b.startLineNumber || a.startColumn - b.startColumn
|
|
1645
|
+
);
|
|
1646
|
+
if (markers.length === 0) return;
|
|
1647
|
+
const key = severity === "error" ? "errors" : "warnings";
|
|
1648
|
+
const nextIndex = (lastJumpIndexRef.current[key] + 1) % markers.length;
|
|
1649
|
+
lastJumpIndexRef.current[key] = nextIndex;
|
|
1650
|
+
const marker = markers[nextIndex];
|
|
1651
|
+
ed.revealLineInCenter(marker.startLineNumber);
|
|
1652
|
+
ed.setPosition({
|
|
1653
|
+
lineNumber: marker.startLineNumber,
|
|
1654
|
+
column: marker.startColumn
|
|
1655
|
+
});
|
|
1656
|
+
ed.focus();
|
|
1657
|
+
}, []);
|
|
1658
|
+
const settingsProps = {
|
|
1659
|
+
lineNumbers: settings.lineNumbers,
|
|
1660
|
+
minimap: settings.minimap,
|
|
1661
|
+
wordWrap: settings.wordWrap,
|
|
1662
|
+
sticky: settings.sticky
|
|
1663
|
+
};
|
|
1664
|
+
const actions = /* @__PURE__ */ jsxs3("div", { style: { display: "flex", gap: "4px", alignItems: "center" }, children: [
|
|
1665
|
+
markerCounts.errors > 0 && /* @__PURE__ */ jsxs3(
|
|
1666
|
+
"button",
|
|
1667
|
+
{
|
|
1668
|
+
className: "elb-codebox-marker-badge elb-codebox-marker-badge--error",
|
|
1669
|
+
onClick: () => jumpToMarker("error"),
|
|
1670
|
+
title: `${markerCounts.errors} error${markerCounts.errors !== 1 ? "s" : ""} \u2014 click to jump`,
|
|
1671
|
+
children: [
|
|
1672
|
+
/* @__PURE__ */ jsxs3(
|
|
1673
|
+
"svg",
|
|
1674
|
+
{
|
|
1675
|
+
width: "14",
|
|
1676
|
+
height: "14",
|
|
1677
|
+
viewBox: "0 0 24 24",
|
|
1678
|
+
fill: "none",
|
|
1679
|
+
stroke: "currentColor",
|
|
1680
|
+
strokeWidth: "2",
|
|
1681
|
+
children: [
|
|
1682
|
+
/* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1683
|
+
/* @__PURE__ */ jsx4("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
|
|
1684
|
+
/* @__PURE__ */ jsx4("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
|
|
1685
|
+
]
|
|
1686
|
+
}
|
|
1687
|
+
),
|
|
1688
|
+
/* @__PURE__ */ jsx4("span", { children: markerCounts.errors })
|
|
1689
|
+
]
|
|
1690
|
+
}
|
|
1691
|
+
),
|
|
1692
|
+
markerCounts.warnings > 0 && /* @__PURE__ */ jsxs3(
|
|
1693
|
+
"button",
|
|
1694
|
+
{
|
|
1695
|
+
className: "elb-codebox-marker-badge elb-codebox-marker-badge--warning",
|
|
1696
|
+
onClick: () => jumpToMarker("warning"),
|
|
1697
|
+
title: `${markerCounts.warnings} warning${markerCounts.warnings !== 1 ? "s" : ""} \u2014 click to jump`,
|
|
1698
|
+
children: [
|
|
1699
|
+
/* @__PURE__ */ jsxs3(
|
|
1700
|
+
"svg",
|
|
1701
|
+
{
|
|
1702
|
+
width: "14",
|
|
1703
|
+
height: "14",
|
|
1704
|
+
viewBox: "0 0 24 24",
|
|
1705
|
+
fill: "none",
|
|
1706
|
+
stroke: "currentColor",
|
|
1707
|
+
strokeWidth: "2",
|
|
1708
|
+
children: [
|
|
1709
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 3L2 21h20L12 3z" }),
|
|
1710
|
+
/* @__PURE__ */ jsx4("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
|
|
1711
|
+
/* @__PURE__ */ jsx4("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
|
|
1712
|
+
]
|
|
1713
|
+
}
|
|
1714
|
+
),
|
|
1715
|
+
/* @__PURE__ */ jsx4("span", { children: markerCounts.warnings })
|
|
1716
|
+
]
|
|
1717
|
+
}
|
|
1718
|
+
),
|
|
1140
1719
|
showFormat && !disabled && currentLanguage === "json" && /* @__PURE__ */ jsx4(
|
|
1141
1720
|
"button",
|
|
1142
1721
|
{
|
|
@@ -1155,8 +1734,10 @@ function CodeBox({
|
|
|
1155
1734
|
strokeLinecap: "round",
|
|
1156
1735
|
strokeLinejoin: "round",
|
|
1157
1736
|
children: [
|
|
1158
|
-
/* @__PURE__ */ jsx4("
|
|
1159
|
-
/* @__PURE__ */ jsx4("
|
|
1737
|
+
/* @__PURE__ */ jsx4("line", { x1: "3", y1: "5", x2: "16", y2: "5" }),
|
|
1738
|
+
/* @__PURE__ */ jsx4("line", { x1: "7", y1: "10", x2: "20", y2: "10" }),
|
|
1739
|
+
/* @__PURE__ */ jsx4("line", { x1: "7", y1: "15", x2: "18", y2: "15" }),
|
|
1740
|
+
/* @__PURE__ */ jsx4("line", { x1: "3", y1: "20", x2: "12", y2: "20" })
|
|
1160
1741
|
]
|
|
1161
1742
|
}
|
|
1162
1743
|
)
|
|
@@ -1199,7 +1780,80 @@ function CodeBox({
|
|
|
1199
1780
|
}
|
|
1200
1781
|
)
|
|
1201
1782
|
}
|
|
1202
|
-
)
|
|
1783
|
+
),
|
|
1784
|
+
showSettings && /* @__PURE__ */ jsxs3("div", { ref: settingsRef, style: { position: "relative" }, children: [
|
|
1785
|
+
/* @__PURE__ */ jsx4(
|
|
1786
|
+
"button",
|
|
1787
|
+
{
|
|
1788
|
+
className: `elb-explorer-btn${showSettingsPanel ? " active" : ""}`,
|
|
1789
|
+
onClick: () => setShowSettingsPanel(!showSettingsPanel),
|
|
1790
|
+
title: "Editor settings",
|
|
1791
|
+
children: /* @__PURE__ */ jsxs3(
|
|
1792
|
+
"svg",
|
|
1793
|
+
{
|
|
1794
|
+
width: "14",
|
|
1795
|
+
height: "14",
|
|
1796
|
+
viewBox: "0 0 24 24",
|
|
1797
|
+
fill: "none",
|
|
1798
|
+
stroke: "currentColor",
|
|
1799
|
+
strokeWidth: "2",
|
|
1800
|
+
strokeLinecap: "round",
|
|
1801
|
+
strokeLinejoin: "round",
|
|
1802
|
+
children: [
|
|
1803
|
+
/* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "3" }),
|
|
1804
|
+
/* @__PURE__ */ jsx4("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" })
|
|
1805
|
+
]
|
|
1806
|
+
}
|
|
1807
|
+
)
|
|
1808
|
+
}
|
|
1809
|
+
),
|
|
1810
|
+
showSettingsPanel && /* @__PURE__ */ jsxs3("div", { className: "elb-codebox-settings", children: [
|
|
1811
|
+
/* @__PURE__ */ jsxs3("label", { className: "elb-codebox-settings-option", children: [
|
|
1812
|
+
/* @__PURE__ */ jsx4(
|
|
1813
|
+
"input",
|
|
1814
|
+
{
|
|
1815
|
+
type: "checkbox",
|
|
1816
|
+
checked: settings.lineNumbers,
|
|
1817
|
+
onChange: () => setSettings((s) => ({ ...s, lineNumbers: !s.lineNumbers }))
|
|
1818
|
+
}
|
|
1819
|
+
),
|
|
1820
|
+
"Line numbers"
|
|
1821
|
+
] }),
|
|
1822
|
+
/* @__PURE__ */ jsxs3("label", { className: "elb-codebox-settings-option", children: [
|
|
1823
|
+
/* @__PURE__ */ jsx4(
|
|
1824
|
+
"input",
|
|
1825
|
+
{
|
|
1826
|
+
type: "checkbox",
|
|
1827
|
+
checked: settings.minimap,
|
|
1828
|
+
onChange: () => setSettings((s) => ({ ...s, minimap: !s.minimap }))
|
|
1829
|
+
}
|
|
1830
|
+
),
|
|
1831
|
+
"Minimap"
|
|
1832
|
+
] }),
|
|
1833
|
+
/* @__PURE__ */ jsxs3("label", { className: "elb-codebox-settings-option", children: [
|
|
1834
|
+
/* @__PURE__ */ jsx4(
|
|
1835
|
+
"input",
|
|
1836
|
+
{
|
|
1837
|
+
type: "checkbox",
|
|
1838
|
+
checked: settings.wordWrap,
|
|
1839
|
+
onChange: () => setSettings((s) => ({ ...s, wordWrap: !s.wordWrap }))
|
|
1840
|
+
}
|
|
1841
|
+
),
|
|
1842
|
+
"Word wrap"
|
|
1843
|
+
] }),
|
|
1844
|
+
/* @__PURE__ */ jsxs3("label", { className: "elb-codebox-settings-option", children: [
|
|
1845
|
+
/* @__PURE__ */ jsx4(
|
|
1846
|
+
"input",
|
|
1847
|
+
{
|
|
1848
|
+
type: "checkbox",
|
|
1849
|
+
checked: settings.sticky,
|
|
1850
|
+
onChange: () => setSettings((s) => ({ ...s, sticky: !s.sticky }))
|
|
1851
|
+
}
|
|
1852
|
+
),
|
|
1853
|
+
"Sticky scroll"
|
|
1854
|
+
] })
|
|
1855
|
+
] })
|
|
1856
|
+
] })
|
|
1203
1857
|
] });
|
|
1204
1858
|
const autoHeightClass = autoHeight ? "elb-box--auto-height" : "";
|
|
1205
1859
|
const boxClassName = `${autoHeightClass} ${className || ""}`.trim();
|
|
@@ -1214,7 +1868,10 @@ function CodeBox({
|
|
|
1214
1868
|
onChange,
|
|
1215
1869
|
disabled,
|
|
1216
1870
|
autoHeight,
|
|
1217
|
-
|
|
1871
|
+
onMount: handleEditorMount,
|
|
1872
|
+
onMarkerCounts: handleMarkerCounts,
|
|
1873
|
+
...restCodeProps,
|
|
1874
|
+
...settingsProps
|
|
1218
1875
|
}
|
|
1219
1876
|
)
|
|
1220
1877
|
}));
|
|
@@ -1241,7 +1898,10 @@ function CodeBox({
|
|
|
1241
1898
|
onChange,
|
|
1242
1899
|
disabled,
|
|
1243
1900
|
autoHeight,
|
|
1244
|
-
|
|
1901
|
+
onMount: handleEditorMount,
|
|
1902
|
+
onMarkerCounts: handleMarkerCounts,
|
|
1903
|
+
...restCodeProps,
|
|
1904
|
+
...settingsProps
|
|
1245
1905
|
}
|
|
1246
1906
|
)
|
|
1247
1907
|
}
|
|
@@ -1250,9 +1910,9 @@ function CodeBox({
|
|
|
1250
1910
|
|
|
1251
1911
|
// src/components/atoms/grid.tsx
|
|
1252
1912
|
import {
|
|
1253
|
-
useRef as
|
|
1913
|
+
useRef as useRef5,
|
|
1254
1914
|
useState as useState5,
|
|
1255
|
-
useEffect as
|
|
1915
|
+
useEffect as useEffect4,
|
|
1256
1916
|
useCallback as useCallback4,
|
|
1257
1917
|
useMemo
|
|
1258
1918
|
} from "react";
|
|
@@ -1267,11 +1927,11 @@ function Grid({
|
|
|
1267
1927
|
showScrollButtons = true,
|
|
1268
1928
|
className = ""
|
|
1269
1929
|
}) {
|
|
1270
|
-
const gridRef =
|
|
1930
|
+
const gridRef = useRef5(null);
|
|
1271
1931
|
const [canScrollLeft, setCanScrollLeft] = useState5(false);
|
|
1272
1932
|
const [canScrollRight, setCanScrollRight] = useState5(false);
|
|
1273
1933
|
const [boxHeights, setBoxHeights] = useState5(/* @__PURE__ */ new Map());
|
|
1274
|
-
const boxIdCounter =
|
|
1934
|
+
const boxIdCounter = useRef5(0);
|
|
1275
1935
|
const getBoxId = useCallback4(() => boxIdCounter.current++, []);
|
|
1276
1936
|
const registerBox = useCallback4((id, height) => {
|
|
1277
1937
|
setBoxHeights((prev) => {
|
|
@@ -1344,7 +2004,7 @@ function Grid({
|
|
|
1344
2004
|
const scrollAmount = gridRef.current.clientWidth * 0.8;
|
|
1345
2005
|
gridRef.current.scrollBy({ left: scrollAmount, behavior: "smooth" });
|
|
1346
2006
|
};
|
|
1347
|
-
|
|
2007
|
+
useEffect4(() => {
|
|
1348
2008
|
const el = gridRef.current;
|
|
1349
2009
|
if (!el || !showScrollButtons) return;
|
|
1350
2010
|
updateScrollState();
|
|
@@ -1407,7 +2067,7 @@ function MappingDemo({
|
|
|
1407
2067
|
);
|
|
1408
2068
|
}
|
|
1409
2069
|
}, [input, config, fn]);
|
|
1410
|
-
|
|
2070
|
+
useEffect5(() => {
|
|
1411
2071
|
const timeoutId = setTimeout(updateOutput, 500);
|
|
1412
2072
|
return () => clearTimeout(timeoutId);
|
|
1413
2073
|
}, [updateOutput]);
|
|
@@ -1448,7 +2108,7 @@ function MappingDemo({
|
|
|
1448
2108
|
}
|
|
1449
2109
|
|
|
1450
2110
|
// src/components/demos/MappingCode.tsx
|
|
1451
|
-
import { useState as useState7, useCallback as useCallback6, useEffect as
|
|
2111
|
+
import { useState as useState7, useCallback as useCallback6, useEffect as useEffect6 } from "react";
|
|
1452
2112
|
import { getMappingEvent, getMappingValue, createEvent } from "@walkeros/core";
|
|
1453
2113
|
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1454
2114
|
function MappingCode({
|
|
@@ -1481,7 +2141,7 @@ function MappingCode({
|
|
|
1481
2141
|
);
|
|
1482
2142
|
}
|
|
1483
2143
|
}, [input, config]);
|
|
1484
|
-
|
|
2144
|
+
useEffect6(() => {
|
|
1485
2145
|
const timeoutId = setTimeout(executeCode, 500);
|
|
1486
2146
|
return () => clearTimeout(timeoutId);
|
|
1487
2147
|
}, [executeCode]);
|
|
@@ -1500,7 +2160,7 @@ function MappingCode({
|
|
|
1500
2160
|
}
|
|
1501
2161
|
|
|
1502
2162
|
// src/components/demos/DestinationDemo.tsx
|
|
1503
|
-
import { useState as useState8, useCallback as useCallback7, useEffect as
|
|
2163
|
+
import { useState as useState8, useCallback as useCallback7, useEffect as useEffect7 } from "react";
|
|
1504
2164
|
import {
|
|
1505
2165
|
createEvent as createEvent2,
|
|
1506
2166
|
tryCatchAsync,
|
|
@@ -1629,7 +2289,7 @@ function DestinationDemo({
|
|
|
1629
2289
|
(error) => setOutput(`Error: ${error}`)
|
|
1630
2290
|
)();
|
|
1631
2291
|
}, [eventInput, mappingInput, destination, settings, generic, fn]);
|
|
1632
|
-
|
|
2292
|
+
useEffect7(() => {
|
|
1633
2293
|
const timeoutId = setTimeout(executeDestination, 500);
|
|
1634
2294
|
return () => clearTimeout(timeoutId);
|
|
1635
2295
|
}, [executeDestination]);
|
|
@@ -1670,7 +2330,7 @@ function DestinationDemo({
|
|
|
1670
2330
|
}
|
|
1671
2331
|
|
|
1672
2332
|
// src/components/demos/DestinationInitDemo.tsx
|
|
1673
|
-
import { useState as useState9, useCallback as useCallback8, useEffect as
|
|
2333
|
+
import { useState as useState9, useCallback as useCallback8, useEffect as useEffect8 } from "react";
|
|
1674
2334
|
import { tryCatchAsync as tryCatchAsync2 } from "@walkeros/core";
|
|
1675
2335
|
import { startFlow as startFlow2 } from "@walkeros/collector";
|
|
1676
2336
|
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
@@ -1711,7 +2371,7 @@ function DestinationInitDemo({
|
|
|
1711
2371
|
(error) => setOutput(`Error: ${error}`)
|
|
1712
2372
|
)();
|
|
1713
2373
|
}, [settingsInput, destination]);
|
|
1714
|
-
|
|
2374
|
+
useEffect8(() => {
|
|
1715
2375
|
const timeoutId = setTimeout(executeInit, 500);
|
|
1716
2376
|
return () => clearTimeout(timeoutId);
|
|
1717
2377
|
}, [executeInit]);
|
|
@@ -1743,15 +2403,15 @@ function DestinationInitDemo({
|
|
|
1743
2403
|
// src/components/demos/PromotionPlayground.tsx
|
|
1744
2404
|
import {
|
|
1745
2405
|
useState as useState12,
|
|
1746
|
-
useEffect as
|
|
1747
|
-
useRef as
|
|
2406
|
+
useEffect as useEffect10,
|
|
2407
|
+
useRef as useRef7,
|
|
1748
2408
|
useCallback as useCallback10,
|
|
1749
2409
|
useMemo as useMemo3
|
|
1750
2410
|
} from "react";
|
|
1751
2411
|
import { startFlow as startFlow3 } from "@walkeros/collector";
|
|
1752
2412
|
|
|
1753
2413
|
// src/components/molecules/preview.tsx
|
|
1754
|
-
import { useState as useState10, useEffect as
|
|
2414
|
+
import { useState as useState10, useEffect as useEffect9, useRef as useRef6, useCallback as useCallback9 } from "react";
|
|
1755
2415
|
import {
|
|
1756
2416
|
sourceBrowser
|
|
1757
2417
|
} from "@walkeros/web-source-browser";
|
|
@@ -1790,11 +2450,11 @@ function Preview({
|
|
|
1790
2450
|
label = "Preview"
|
|
1791
2451
|
}) {
|
|
1792
2452
|
const [highlights, setHighlights] = useState10(/* @__PURE__ */ new Set());
|
|
1793
|
-
const iframeRef =
|
|
1794
|
-
const updateTimeoutRef =
|
|
1795
|
-
const elbRef =
|
|
1796
|
-
const sourceRef =
|
|
1797
|
-
|
|
2453
|
+
const iframeRef = useRef6(null);
|
|
2454
|
+
const updateTimeoutRef = useRef6(void 0);
|
|
2455
|
+
const elbRef = useRef6(elb);
|
|
2456
|
+
const sourceRef = useRef6(null);
|
|
2457
|
+
useEffect9(() => {
|
|
1798
2458
|
elbRef.current = elb;
|
|
1799
2459
|
}, [elb]);
|
|
1800
2460
|
const toggleHighlight = (type) => {
|
|
@@ -1822,7 +2482,7 @@ function Preview({
|
|
|
1822
2482
|
},
|
|
1823
2483
|
[]
|
|
1824
2484
|
);
|
|
1825
|
-
|
|
2485
|
+
useEffect9(() => {
|
|
1826
2486
|
if (updateTimeoutRef.current) {
|
|
1827
2487
|
clearTimeout(updateTimeoutRef.current);
|
|
1828
2488
|
}
|
|
@@ -1907,7 +2567,9 @@ function Preview({
|
|
|
1907
2567
|
setTimeout(async () => {
|
|
1908
2568
|
if (sourceRef.current) {
|
|
1909
2569
|
try {
|
|
1910
|
-
await sourceRef.current.destroy?.(
|
|
2570
|
+
await sourceRef.current.instance.destroy?.(
|
|
2571
|
+
sourceRef.current.destroyContext
|
|
2572
|
+
);
|
|
1911
2573
|
} catch {
|
|
1912
2574
|
}
|
|
1913
2575
|
}
|
|
@@ -1932,34 +2594,44 @@ function Preview({
|
|
|
1932
2594
|
ok: true,
|
|
1933
2595
|
destination: {}
|
|
1934
2596
|
});
|
|
1935
|
-
const
|
|
2597
|
+
const config = {
|
|
2598
|
+
settings: {
|
|
2599
|
+
pageview: false,
|
|
2600
|
+
prefix: "data-elb",
|
|
2601
|
+
elb: "elb",
|
|
2602
|
+
elbLayer: "elbLayer",
|
|
2603
|
+
// Use body as scope - trigger.ts compares `scope !== document` against
|
|
2604
|
+
// main page's document, so iframe.contentDocument fails the Element cast
|
|
2605
|
+
scope: iframe.contentDocument.body
|
|
2606
|
+
}
|
|
2607
|
+
};
|
|
2608
|
+
const env = {
|
|
2609
|
+
elb: elbRef.current,
|
|
2610
|
+
push: noopPush,
|
|
2611
|
+
command: async () => ({ ok: true, destination: {} }),
|
|
2612
|
+
logger: noopLogger,
|
|
2613
|
+
window: iframe.contentWindow,
|
|
2614
|
+
document: iframe.contentDocument
|
|
2615
|
+
};
|
|
2616
|
+
const instance = await sourceBrowser({
|
|
1936
2617
|
id: "preview",
|
|
1937
2618
|
collector: {},
|
|
1938
2619
|
// Not used when elb is provided directly
|
|
1939
2620
|
logger: noopLogger,
|
|
1940
2621
|
setIngest: async () => {
|
|
1941
2622
|
},
|
|
1942
|
-
config
|
|
1943
|
-
|
|
1944
|
-
pageview: false,
|
|
1945
|
-
prefix: "data-elb",
|
|
1946
|
-
elb: "elb",
|
|
1947
|
-
elbLayer: "elbLayer",
|
|
1948
|
-
// Use body as scope - trigger.ts compares `scope !== document` against
|
|
1949
|
-
// main page's document, so iframe.contentDocument fails the Element cast
|
|
1950
|
-
scope: iframe.contentDocument.body
|
|
1951
|
-
}
|
|
1952
|
-
},
|
|
1953
|
-
env: {
|
|
1954
|
-
elb: elbRef.current,
|
|
1955
|
-
push: noopPush,
|
|
1956
|
-
command: async () => ({ ok: true, destination: {} }),
|
|
1957
|
-
logger: noopLogger,
|
|
1958
|
-
window: iframe.contentWindow,
|
|
1959
|
-
document: iframe.contentDocument
|
|
1960
|
-
}
|
|
2623
|
+
config,
|
|
2624
|
+
env
|
|
1961
2625
|
});
|
|
1962
|
-
sourceRef.current =
|
|
2626
|
+
sourceRef.current = {
|
|
2627
|
+
instance,
|
|
2628
|
+
destroyContext: {
|
|
2629
|
+
id: "preview",
|
|
2630
|
+
config,
|
|
2631
|
+
env,
|
|
2632
|
+
logger: noopLogger
|
|
2633
|
+
}
|
|
2634
|
+
};
|
|
1963
2635
|
} catch {
|
|
1964
2636
|
}
|
|
1965
2637
|
}, 50);
|
|
@@ -1970,7 +2642,7 @@ function Preview({
|
|
|
1970
2642
|
clearTimeout(updateTimeoutRef.current);
|
|
1971
2643
|
}
|
|
1972
2644
|
if (sourceRef.current) {
|
|
1973
|
-
sourceRef.current.destroy?.();
|
|
2645
|
+
sourceRef.current.instance.destroy?.(sourceRef.current.destroyContext);
|
|
1974
2646
|
}
|
|
1975
2647
|
};
|
|
1976
2648
|
}, [html, css, highlights, autoMarkProperties, elb]);
|
|
@@ -2428,11 +3100,11 @@ function PromotionPlayground({
|
|
|
2428
3100
|
const [outputString, setOutputString] = useState12(
|
|
2429
3101
|
"// Click elements in the preview to see function call"
|
|
2430
3102
|
);
|
|
2431
|
-
const collectorRef =
|
|
2432
|
-
const elbRef =
|
|
2433
|
-
const lastEventRef =
|
|
3103
|
+
const collectorRef = useRef7(null);
|
|
3104
|
+
const elbRef = useRef7(null);
|
|
3105
|
+
const lastEventRef = useRef7(null);
|
|
2434
3106
|
const [isReady, setIsReady] = useState12(false);
|
|
2435
|
-
|
|
3107
|
+
useEffect10(() => {
|
|
2436
3108
|
let mounted = true;
|
|
2437
3109
|
const init = async () => {
|
|
2438
3110
|
try {
|
|
@@ -2558,7 +3230,7 @@ function PromotionPlayground({
|
|
|
2558
3230
|
}
|
|
2559
3231
|
|
|
2560
3232
|
// src/components/organisms/live-code.tsx
|
|
2561
|
-
import { useState as useState13, useEffect as
|
|
3233
|
+
import { useState as useState13, useEffect as useEffect11, useCallback as useCallback11 } from "react";
|
|
2562
3234
|
import { debounce, isString, tryCatchAsync as tryCatchAsync3 } from "@walkeros/core";
|
|
2563
3235
|
|
|
2564
3236
|
// src/utils/format-code.ts
|
|
@@ -2572,15 +3244,21 @@ async function formatCode(code, language) {
|
|
|
2572
3244
|
let formatted;
|
|
2573
3245
|
switch (language) {
|
|
2574
3246
|
case "javascript":
|
|
2575
|
-
case "js":
|
|
2576
|
-
|
|
3247
|
+
case "js": {
|
|
3248
|
+
const isBareObject = code.trimStart().startsWith("{") && code.includes("\n");
|
|
3249
|
+
const input = isBareObject ? `(${code})` : code;
|
|
3250
|
+
formatted = await prettier2.format(input, {
|
|
2577
3251
|
parser: "babel",
|
|
2578
3252
|
plugins: [prettierBabel2, prettierEstree2],
|
|
2579
3253
|
semi: true,
|
|
2580
3254
|
singleQuote: true,
|
|
2581
3255
|
trailingComma: "all"
|
|
2582
3256
|
});
|
|
3257
|
+
if (isBareObject) {
|
|
3258
|
+
formatted = formatted.replace(/^\(/, "").replace(/\);?\s*$/, "");
|
|
3259
|
+
}
|
|
2583
3260
|
break;
|
|
3261
|
+
}
|
|
2584
3262
|
case "typescript":
|
|
2585
3263
|
case "ts":
|
|
2586
3264
|
case "tsx":
|
|
@@ -2648,13 +3326,13 @@ function LiveCode({
|
|
|
2648
3326
|
const [input, setInput] = useState13(formatValue(initInput));
|
|
2649
3327
|
const [config, setConfig] = useState13(formatValue(initConfig));
|
|
2650
3328
|
const [output, setOutput] = useState13([formatValue(initOutput)]);
|
|
2651
|
-
|
|
3329
|
+
useEffect11(() => {
|
|
2652
3330
|
if (format3 && initInput) {
|
|
2653
3331
|
const rawInput = formatValue(initInput);
|
|
2654
3332
|
formatCode(rawInput, language).then(setInput);
|
|
2655
3333
|
}
|
|
2656
3334
|
}, [initInput, language, format3]);
|
|
2657
|
-
|
|
3335
|
+
useEffect11(() => {
|
|
2658
3336
|
if (format3 && initConfig) {
|
|
2659
3337
|
const rawConfig = formatValue(initConfig);
|
|
2660
3338
|
formatCode(rawConfig, language).then(setConfig);
|
|
@@ -2681,7 +3359,7 @@ function LiveCode({
|
|
|
2681
3359
|
),
|
|
2682
3360
|
[fn, log]
|
|
2683
3361
|
);
|
|
2684
|
-
|
|
3362
|
+
useEffect11(() => {
|
|
2685
3363
|
updateOutput(input, config, options || {});
|
|
2686
3364
|
}, [input, config, options, updateOutput]);
|
|
2687
3365
|
return /* @__PURE__ */ jsxs10(Grid, { columns: 3, className, rowHeight, children: [
|
|
@@ -2720,7 +3398,7 @@ function LiveCode({
|
|
|
2720
3398
|
}
|
|
2721
3399
|
|
|
2722
3400
|
// src/components/organisms/collector-box.tsx
|
|
2723
|
-
import { useState as useState14, useEffect as
|
|
3401
|
+
import { useState as useState14, useEffect as useEffect12 } from "react";
|
|
2724
3402
|
import { startFlow as startFlow4 } from "@walkeros/collector";
|
|
2725
3403
|
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
2726
3404
|
function CollectorBox({
|
|
@@ -2733,7 +3411,7 @@ function CollectorBox({
|
|
|
2733
3411
|
const [output, setOutput] = useState14(
|
|
2734
3412
|
"// Click elements in the preview to see function call"
|
|
2735
3413
|
);
|
|
2736
|
-
|
|
3414
|
+
useEffect12(() => {
|
|
2737
3415
|
(async () => {
|
|
2738
3416
|
try {
|
|
2739
3417
|
const eventObj = JSON.parse(event);
|
|
@@ -2777,10 +3455,10 @@ function CollectorBox({
|
|
|
2777
3455
|
import { useState as useState36, useMemo as useMemo6, useCallback as useCallback18 } from "react";
|
|
2778
3456
|
|
|
2779
3457
|
// src/components/organisms/config-editor/config-editor-tabs.tsx
|
|
2780
|
-
import { useEffect as
|
|
3458
|
+
import { useEffect as useEffect25, useState as useState35, useMemo as useMemo5 } from "react";
|
|
2781
3459
|
|
|
2782
3460
|
// src/hooks/useMappingState.ts
|
|
2783
|
-
import { useState as useState15, useCallback as useCallback12, useRef as
|
|
3461
|
+
import { useState as useState15, useCallback as useCallback12, useRef as useRef8 } from "react";
|
|
2784
3462
|
|
|
2785
3463
|
// src/utils/mapping-path.ts
|
|
2786
3464
|
function getValueAtPath(obj, path) {
|
|
@@ -2865,7 +3543,7 @@ function getParentPath(path) {
|
|
|
2865
3543
|
// src/hooks/useMappingState.ts
|
|
2866
3544
|
function useMappingState(initialMapping, onChange) {
|
|
2867
3545
|
const [config, setConfig] = useState15(initialMapping);
|
|
2868
|
-
const isCallingOnChange =
|
|
3546
|
+
const isCallingOnChange = useRef8(false);
|
|
2869
3547
|
const updateConfig = useCallback12(
|
|
2870
3548
|
(newConfig) => {
|
|
2871
3549
|
setConfig(newConfig);
|
|
@@ -3235,14 +3913,14 @@ function detectNodeType(value, path, structure, schemas) {
|
|
|
3235
3913
|
const schema = propertyDef && schemas ? resolveSchema(path.slice(propertyDefIndex), propertyDef, schemas) : void 0;
|
|
3236
3914
|
if (schema) {
|
|
3237
3915
|
const primitiveType = typeof value;
|
|
3238
|
-
const
|
|
3916
|
+
const isPrimitive2 = primitiveType === "string" || primitiveType === "number" || primitiveType === "boolean" || value === void 0 || value === null;
|
|
3239
3917
|
if (schema.type === "boolean" && (primitiveType === "boolean" || value === void 0 || value === null)) {
|
|
3240
3918
|
return "boolean";
|
|
3241
3919
|
}
|
|
3242
|
-
if (schema.enum && Array.isArray(schema.enum) && schema.enum.length > 0 &&
|
|
3920
|
+
if (schema.enum && Array.isArray(schema.enum) && schema.enum.length > 0 && isPrimitive2) {
|
|
3243
3921
|
return "enum";
|
|
3244
3922
|
}
|
|
3245
|
-
if ((schema.type === "string" || schema.type === "number") &&
|
|
3923
|
+
if ((schema.type === "string" || schema.type === "number") && isPrimitive2) {
|
|
3246
3924
|
return "primitive";
|
|
3247
3925
|
}
|
|
3248
3926
|
if (schema.type === "array") {
|
|
@@ -3648,7 +4326,7 @@ function useTreeState(initialExpanded = [[]]) {
|
|
|
3648
4326
|
}
|
|
3649
4327
|
|
|
3650
4328
|
// src/components/atoms/mapping-breadcrumb.tsx
|
|
3651
|
-
import { Fragment
|
|
4329
|
+
import { Fragment, jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3652
4330
|
function MappingBreadcrumb({
|
|
3653
4331
|
segments,
|
|
3654
4332
|
onNavigate,
|
|
@@ -3667,7 +4345,7 @@ function MappingBreadcrumb({
|
|
|
3667
4345
|
"li",
|
|
3668
4346
|
{
|
|
3669
4347
|
className: "elb-mapping-breadcrumb-item",
|
|
3670
|
-
children: isClickable ? /* @__PURE__ */ jsxs11(
|
|
4348
|
+
children: isClickable ? /* @__PURE__ */ jsxs11(Fragment, { children: [
|
|
3671
4349
|
/* @__PURE__ */ jsx18(
|
|
3672
4350
|
"button",
|
|
3673
4351
|
{
|
|
@@ -3696,7 +4374,7 @@ function MappingBreadcrumb({
|
|
|
3696
4374
|
}
|
|
3697
4375
|
|
|
3698
4376
|
// src/components/atoms/mapping-confirm-button.tsx
|
|
3699
|
-
import { useState as useState18, useEffect as
|
|
4377
|
+
import { useState as useState18, useEffect as useEffect13, useRef as useRef9 } from "react";
|
|
3700
4378
|
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
3701
4379
|
var TrashIcon = () => /* @__PURE__ */ jsx19(
|
|
3702
4380
|
"svg",
|
|
@@ -3723,8 +4401,8 @@ function MappingConfirmButton({
|
|
|
3723
4401
|
className = ""
|
|
3724
4402
|
}) {
|
|
3725
4403
|
const [isConfirming, setIsConfirming] = useState18(false);
|
|
3726
|
-
const buttonRef =
|
|
3727
|
-
|
|
4404
|
+
const buttonRef = useRef9(null);
|
|
4405
|
+
useEffect13(() => {
|
|
3728
4406
|
if (!isConfirming) return;
|
|
3729
4407
|
const handleClickOutside = (e) => {
|
|
3730
4408
|
if (buttonRef.current && !buttonRef.current.contains(e.target)) {
|
|
@@ -3869,7 +4547,7 @@ function MappingNavigationHeader({
|
|
|
3869
4547
|
}
|
|
3870
4548
|
|
|
3871
4549
|
// src/components/molecules/config-tree-sidebar.tsx
|
|
3872
|
-
import { useState as useState19, useRef as
|
|
4550
|
+
import { useState as useState19, useRef as useRef10, useEffect as useEffect14 } from "react";
|
|
3873
4551
|
|
|
3874
4552
|
// src/components/atoms/mapping-input.tsx
|
|
3875
4553
|
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
@@ -3992,14 +4670,14 @@ function ConfigTreeNodeComponent({
|
|
|
3992
4670
|
const [isAddingAction, setIsAddingAction] = useState19(false);
|
|
3993
4671
|
const [newActionName, setNewActionName] = useState19("");
|
|
3994
4672
|
const [actionExists, setActionExists] = useState19(false);
|
|
3995
|
-
const inputRef =
|
|
4673
|
+
const inputRef = useRef10(null);
|
|
3996
4674
|
const isEntityNode = node.type === "entity" && node.path.length === 2 && node.path[0] === "mapping";
|
|
3997
|
-
|
|
4675
|
+
useEffect14(() => {
|
|
3998
4676
|
if (isAddingAction && inputRef.current) {
|
|
3999
4677
|
inputRef.current.focus();
|
|
4000
4678
|
}
|
|
4001
4679
|
}, [isAddingAction]);
|
|
4002
|
-
|
|
4680
|
+
useEffect14(() => {
|
|
4003
4681
|
if (isEntityNode && newActionName) {
|
|
4004
4682
|
const exists = node.children?.some((child) => child.label === newActionName) ?? false;
|
|
4005
4683
|
setActionExists(exists);
|
|
@@ -4166,13 +4844,13 @@ function ConfigTreeSidebar({
|
|
|
4166
4844
|
const [isAddingEntity, setIsAddingEntity] = useState19(false);
|
|
4167
4845
|
const [newEntityName, setNewEntityName] = useState19("");
|
|
4168
4846
|
const [entityExists, setEntityExists] = useState19(false);
|
|
4169
|
-
const entityInputRef =
|
|
4170
|
-
|
|
4847
|
+
const entityInputRef = useRef10(null);
|
|
4848
|
+
useEffect14(() => {
|
|
4171
4849
|
if (isAddingEntity && entityInputRef.current) {
|
|
4172
4850
|
entityInputRef.current.focus();
|
|
4173
4851
|
}
|
|
4174
4852
|
}, [isAddingEntity]);
|
|
4175
|
-
|
|
4853
|
+
useEffect14(() => {
|
|
4176
4854
|
if (newEntityName) {
|
|
4177
4855
|
const mappingNode = tree.find((node) => node.key === "mapping");
|
|
4178
4856
|
const exists = mappingNode?.children?.some((child) => child.label === newEntityName) ?? false;
|
|
@@ -4313,7 +4991,7 @@ function ConfigTreeSidebar({
|
|
|
4313
4991
|
}
|
|
4314
4992
|
|
|
4315
4993
|
// src/components/molecules/mapping-entity-pane.tsx
|
|
4316
|
-
import { useState as useState20, useEffect as
|
|
4994
|
+
import { useState as useState20, useEffect as useEffect15 } from "react";
|
|
4317
4995
|
|
|
4318
4996
|
// src/components/atoms/pane-header.tsx
|
|
4319
4997
|
import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
@@ -4419,7 +5097,7 @@ function MappingEntityPane({
|
|
|
4419
5097
|
const entity = path[0];
|
|
4420
5098
|
const entityConfig = mappingState.actions.getValue([entity]);
|
|
4421
5099
|
const actions = entityConfig && typeof entityConfig === "object" ? Object.keys(entityConfig).sort() : [];
|
|
4422
|
-
|
|
5100
|
+
useEffect15(() => {
|
|
4423
5101
|
if (newActionName) {
|
|
4424
5102
|
const exists = actions.includes(newActionName);
|
|
4425
5103
|
setActionExists(exists);
|
|
@@ -5411,7 +6089,7 @@ function MappingKeyPaneView({
|
|
|
5411
6089
|
}
|
|
5412
6090
|
|
|
5413
6091
|
// src/components/molecules/mapping-function-pane-base.tsx
|
|
5414
|
-
import { useState as useState22, useEffect as
|
|
6092
|
+
import { useState as useState22, useEffect as useEffect16 } from "react";
|
|
5415
6093
|
|
|
5416
6094
|
// src/utils/code-normalizer.ts
|
|
5417
6095
|
function normalizeCode(code) {
|
|
@@ -5434,7 +6112,7 @@ function MappingFunctionPaneBase({
|
|
|
5434
6112
|
const value = mappingState.actions.getValue(path);
|
|
5435
6113
|
const initialCode = typeof value === "string" ? value : defaultCode;
|
|
5436
6114
|
const [code, setCode] = useState22(initialCode);
|
|
5437
|
-
|
|
6115
|
+
useEffect16(() => {
|
|
5438
6116
|
const currentValue = mappingState.actions.getValue(path);
|
|
5439
6117
|
const newCode = typeof currentValue === "string" ? currentValue : defaultCode;
|
|
5440
6118
|
setCode(newCode);
|
|
@@ -5513,7 +6191,7 @@ function MappingFunctionPaneBase({
|
|
|
5513
6191
|
}
|
|
5514
6192
|
|
|
5515
6193
|
// src/components/molecules/mapping-condition-pane-view.tsx
|
|
5516
|
-
import { Fragment as
|
|
6194
|
+
import { Fragment as Fragment2, jsx as jsx35 } from "react/jsx-runtime";
|
|
5517
6195
|
var DEFAULT_CONDITION = `(
|
|
5518
6196
|
value: WalkerOS.DeepPartialEvent | unknown,
|
|
5519
6197
|
mapping: Mapping.Value,
|
|
@@ -5558,15 +6236,15 @@ var HELP_SECTIONS = [
|
|
|
5558
6236
|
examples: [
|
|
5559
6237
|
{
|
|
5560
6238
|
label: "Only for high-value orders:",
|
|
5561
|
-
code: /* @__PURE__ */ jsx35(
|
|
6239
|
+
code: /* @__PURE__ */ jsx35(Fragment2, { children: "(value) => value.data?.total > 100" })
|
|
5562
6240
|
},
|
|
5563
6241
|
{
|
|
5564
6242
|
label: "Only for specific user segment:",
|
|
5565
|
-
code: /* @__PURE__ */ jsx35(
|
|
6243
|
+
code: /* @__PURE__ */ jsx35(Fragment2, { children: "(value) => value.user?.segment === 'premium'" })
|
|
5566
6244
|
},
|
|
5567
6245
|
{
|
|
5568
6246
|
label: "Only during business hours:",
|
|
5569
|
-
code: /* @__PURE__ */ jsx35(
|
|
6247
|
+
code: /* @__PURE__ */ jsx35(Fragment2, { children: "() => new Date().getHours() >= 9 && new Date().getHours() < 17" })
|
|
5570
6248
|
}
|
|
5571
6249
|
]
|
|
5572
6250
|
}
|
|
@@ -5586,7 +6264,7 @@ function MappingConditionPaneView(props) {
|
|
|
5586
6264
|
}
|
|
5587
6265
|
|
|
5588
6266
|
// src/components/molecules/mapping-fn-pane-view.tsx
|
|
5589
|
-
import { Fragment as
|
|
6267
|
+
import { Fragment as Fragment3, jsx as jsx36, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
5590
6268
|
var DEFAULT_FN = `(
|
|
5591
6269
|
value: WalkerOS.DeepPartialEvent | unknown,
|
|
5592
6270
|
mapping: Mapping.Value,
|
|
@@ -5637,11 +6315,11 @@ var HELP_SECTIONS2 = [
|
|
|
5637
6315
|
examples: [
|
|
5638
6316
|
{
|
|
5639
6317
|
label: "Extract nested property:",
|
|
5640
|
-
code: /* @__PURE__ */ jsx36(
|
|
6318
|
+
code: /* @__PURE__ */ jsx36(Fragment3, { children: "(value) => value.data?.product?.id" })
|
|
5641
6319
|
},
|
|
5642
6320
|
{
|
|
5643
6321
|
label: "Format currency:",
|
|
5644
|
-
code: /* @__PURE__ */ jsxs26(
|
|
6322
|
+
code: /* @__PURE__ */ jsxs26(Fragment3, { children: [
|
|
5645
6323
|
"(value) => {",
|
|
5646
6324
|
"\n",
|
|
5647
6325
|
" ",
|
|
@@ -5655,11 +6333,11 @@ var HELP_SECTIONS2 = [
|
|
|
5655
6333
|
},
|
|
5656
6334
|
{
|
|
5657
6335
|
label: "Combine multiple fields:",
|
|
5658
|
-
code: /* @__PURE__ */ jsx36(
|
|
6336
|
+
code: /* @__PURE__ */ jsx36(Fragment3, { children: "(value) => `${value.data?.firstName} ${value.data?.lastName}`" })
|
|
5659
6337
|
},
|
|
5660
6338
|
{
|
|
5661
6339
|
label: "Conditional transformation with consent:",
|
|
5662
|
-
code: /* @__PURE__ */ jsxs26(
|
|
6340
|
+
code: /* @__PURE__ */ jsxs26(Fragment3, { children: [
|
|
5663
6341
|
"(value, mapping, options) => {",
|
|
5664
6342
|
"\n",
|
|
5665
6343
|
" ",
|
|
@@ -5679,7 +6357,7 @@ var HELP_SECTIONS2 = [
|
|
|
5679
6357
|
},
|
|
5680
6358
|
{
|
|
5681
6359
|
label: "Use collector for context:",
|
|
5682
|
-
code: /* @__PURE__ */ jsxs26(
|
|
6360
|
+
code: /* @__PURE__ */ jsxs26(Fragment3, { children: [
|
|
5683
6361
|
"(value, mapping, options) => {",
|
|
5684
6362
|
"\n",
|
|
5685
6363
|
" ",
|
|
@@ -5718,7 +6396,7 @@ function MappingFnPaneView(props) {
|
|
|
5718
6396
|
}
|
|
5719
6397
|
|
|
5720
6398
|
// src/components/molecules/mapping-validate-pane-view.tsx
|
|
5721
|
-
import { Fragment as
|
|
6399
|
+
import { Fragment as Fragment4, jsx as jsx37, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
5722
6400
|
var DEFAULT_VALIDATE = `(
|
|
5723
6401
|
value: unknown
|
|
5724
6402
|
): boolean | Promise<boolean> => {
|
|
@@ -5758,19 +6436,19 @@ var HELP_SECTIONS3 = [
|
|
|
5758
6436
|
examples: [
|
|
5759
6437
|
{
|
|
5760
6438
|
label: "Exclude empty values:",
|
|
5761
|
-
code: /* @__PURE__ */ jsx37(
|
|
6439
|
+
code: /* @__PURE__ */ jsx37(Fragment4, { children: "(value) => value !== undefined && value !== null && value !== ''" })
|
|
5762
6440
|
},
|
|
5763
6441
|
{
|
|
5764
6442
|
label: "Only include valid email addresses:",
|
|
5765
|
-
code: /* @__PURE__ */ jsx37(
|
|
6443
|
+
code: /* @__PURE__ */ jsx37(Fragment4, { children: "(value) => typeof value === 'string' && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)" })
|
|
5766
6444
|
},
|
|
5767
6445
|
{
|
|
5768
6446
|
label: "Only include positive numbers:",
|
|
5769
|
-
code: /* @__PURE__ */ jsx37(
|
|
6447
|
+
code: /* @__PURE__ */ jsx37(Fragment4, { children: "(value) => typeof value === 'number' && value > 0" })
|
|
5770
6448
|
},
|
|
5771
6449
|
{
|
|
5772
6450
|
label: "Validate URL format:",
|
|
5773
|
-
code: /* @__PURE__ */ jsxs27(
|
|
6451
|
+
code: /* @__PURE__ */ jsxs27(Fragment4, { children: [
|
|
5774
6452
|
"(value) => {",
|
|
5775
6453
|
"\n",
|
|
5776
6454
|
" ",
|
|
@@ -5796,7 +6474,7 @@ var HELP_SECTIONS3 = [
|
|
|
5796
6474
|
},
|
|
5797
6475
|
{
|
|
5798
6476
|
label: "Exclude specific values:",
|
|
5799
|
-
code: /* @__PURE__ */ jsx37(
|
|
6477
|
+
code: /* @__PURE__ */ jsx37(Fragment4, { children: "(value) => !['test', 'localhost', 'example.com'].includes(value)" })
|
|
5800
6478
|
}
|
|
5801
6479
|
]
|
|
5802
6480
|
}
|
|
@@ -5909,7 +6587,7 @@ function validateValue(value, schema) {
|
|
|
5909
6587
|
}
|
|
5910
6588
|
|
|
5911
6589
|
// src/components/molecules/mapping-name-pane-view.tsx
|
|
5912
|
-
import { Fragment as
|
|
6590
|
+
import { Fragment as Fragment5, jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
5913
6591
|
function MappingNamePaneView({
|
|
5914
6592
|
path,
|
|
5915
6593
|
mappingState,
|
|
@@ -5953,7 +6631,7 @@ function MappingNamePaneView({
|
|
|
5953
6631
|
),
|
|
5954
6632
|
/* @__PURE__ */ jsxs28("div", { className: "elb-mapping-pane-hint", children: [
|
|
5955
6633
|
uiSchema?.["ui:help"] || "This string will be sent to the destination instead of the default entity-action name. Leave empty to use default.",
|
|
5956
|
-
hasError && validationResult.error && /* @__PURE__ */ jsxs28(
|
|
6634
|
+
hasError && validationResult.error && /* @__PURE__ */ jsxs28(Fragment5, { children: [
|
|
5957
6635
|
/* @__PURE__ */ jsx38("br", {}),
|
|
5958
6636
|
/* @__PURE__ */ jsxs28("span", { style: { color: "var(--color-button-danger)" }, children: [
|
|
5959
6637
|
"\u26A0 ",
|
|
@@ -5989,7 +6667,7 @@ function MappingNamePaneView({
|
|
|
5989
6667
|
}
|
|
5990
6668
|
|
|
5991
6669
|
// src/components/molecules/mapping-batch-pane-view.tsx
|
|
5992
|
-
import { Fragment as
|
|
6670
|
+
import { Fragment as Fragment6, jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
5993
6671
|
function MappingBatchPaneView({
|
|
5994
6672
|
path,
|
|
5995
6673
|
mappingState,
|
|
@@ -6038,7 +6716,7 @@ function MappingBatchPaneView({
|
|
|
6038
6716
|
),
|
|
6039
6717
|
/* @__PURE__ */ jsxs29("div", { className: "elb-mapping-pane-hint", children: [
|
|
6040
6718
|
uiSchema?.["ui:help"] || "Events will be collected and sent in batches. Use time (ms) for timed batches or count for event-based batches. Leave empty to disable batching.",
|
|
6041
|
-
hasError && validationResult.error && /* @__PURE__ */ jsxs29(
|
|
6719
|
+
hasError && validationResult.error && /* @__PURE__ */ jsxs29(Fragment6, { children: [
|
|
6042
6720
|
/* @__PURE__ */ jsx39("br", {}),
|
|
6043
6721
|
/* @__PURE__ */ jsxs29("span", { style: { color: "var(--color-button-danger)" }, children: [
|
|
6044
6722
|
"\u26A0 ",
|
|
@@ -6664,7 +7342,7 @@ function MappingBooleanWidget(props) {
|
|
|
6664
7342
|
}
|
|
6665
7343
|
|
|
6666
7344
|
// src/components/atoms/mapping-consent.tsx
|
|
6667
|
-
import { useState as useState26, useEffect as
|
|
7345
|
+
import { useState as useState26, useEffect as useEffect17 } from "react";
|
|
6668
7346
|
|
|
6669
7347
|
// src/components/atoms/mapping-collapsible.tsx
|
|
6670
7348
|
import { useState as useState25 } from "react";
|
|
@@ -6986,7 +7664,7 @@ function MappingConsentWidget(props) {
|
|
|
6986
7664
|
const title = schema?.title || "Consent";
|
|
6987
7665
|
const description = schema?.description;
|
|
6988
7666
|
const [isExpanded, setIsExpanded] = useState26(hasConsent);
|
|
6989
|
-
|
|
7667
|
+
useEffect17(() => {
|
|
6990
7668
|
setIsExpanded(hasConsent);
|
|
6991
7669
|
}, [hasConsent]);
|
|
6992
7670
|
const handleAddConsent = () => {
|
|
@@ -7068,10 +7746,10 @@ function MappingConsentWidget(props) {
|
|
|
7068
7746
|
}
|
|
7069
7747
|
|
|
7070
7748
|
// src/components/atoms/mapping-value.tsx
|
|
7071
|
-
import React15, { useState as useState27, useEffect as
|
|
7749
|
+
import React15, { useState as useState27, useEffect as useEffect18 } from "react";
|
|
7072
7750
|
|
|
7073
7751
|
// src/components/atoms/field-header.tsx
|
|
7074
|
-
import { Fragment as
|
|
7752
|
+
import { Fragment as Fragment7, jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
7075
7753
|
function FieldHeader({
|
|
7076
7754
|
title,
|
|
7077
7755
|
description,
|
|
@@ -7090,7 +7768,7 @@ function FieldHeader({
|
|
|
7090
7768
|
action
|
|
7091
7769
|
] });
|
|
7092
7770
|
}
|
|
7093
|
-
return /* @__PURE__ */ jsxs41(
|
|
7771
|
+
return /* @__PURE__ */ jsxs41(Fragment7, { children: [
|
|
7094
7772
|
/* @__PURE__ */ jsxs41("label", { className: "elb-rjsf-label", children: [
|
|
7095
7773
|
title,
|
|
7096
7774
|
required && /* @__PURE__ */ jsx51("span", { className: "elb-rjsf-required", children: " *" })
|
|
@@ -7148,7 +7826,7 @@ function MappingValueWidget(props) {
|
|
|
7148
7826
|
const [selectedType, setSelectedType] = useState27(getCurrentType);
|
|
7149
7827
|
const userSelectedTypeRef = React15.useRef(false);
|
|
7150
7828
|
const prevValueRef = React15.useRef(value);
|
|
7151
|
-
|
|
7829
|
+
useEffect18(() => {
|
|
7152
7830
|
const prevType = typeof prevValueRef.current;
|
|
7153
7831
|
const currentType = typeof value;
|
|
7154
7832
|
const isMajorTypeChange = prevType !== currentType || value === void 0 && prevValueRef.current !== void 0 || value !== void 0 && prevValueRef.current === void 0;
|
|
@@ -7995,7 +8673,7 @@ function MappingValidateField(props) {
|
|
|
7995
8673
|
}
|
|
7996
8674
|
|
|
7997
8675
|
// src/components/atoms/mapping-data.tsx
|
|
7998
|
-
import { useState as useState29, useEffect as
|
|
8676
|
+
import { useState as useState29, useEffect as useEffect19, useRef as useRef11, useCallback as useCallback15 } from "react";
|
|
7999
8677
|
|
|
8000
8678
|
// src/schemas/value-config-schema.ts
|
|
8001
8679
|
var valueConfigSchema = {
|
|
@@ -8237,8 +8915,8 @@ function MappingDataWidget(props) {
|
|
|
8237
8915
|
const description = schema?.description;
|
|
8238
8916
|
const [showForm, setShowForm] = useState29(hasData);
|
|
8239
8917
|
const [isExpanded, setIsExpanded] = useState29(hasData);
|
|
8240
|
-
const prevValueRef =
|
|
8241
|
-
|
|
8918
|
+
const prevValueRef = useRef11(value);
|
|
8919
|
+
useEffect19(() => {
|
|
8242
8920
|
const newHasData = value && typeof value === "object" && Object.keys(value).length > 0;
|
|
8243
8921
|
setShowForm(!!newHasData);
|
|
8244
8922
|
setIsExpanded(!!newHasData);
|
|
@@ -8321,7 +8999,7 @@ function MappingDataField(props) {
|
|
|
8321
8999
|
}
|
|
8322
9000
|
|
|
8323
9001
|
// src/components/atoms/mapping-settings.tsx
|
|
8324
|
-
import { useState as useState30, useEffect as
|
|
9002
|
+
import { useState as useState30, useEffect as useEffect20, useRef as useRef12, useCallback as useCallback16 } from "react";
|
|
8325
9003
|
import { jsx as jsx67, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
8326
9004
|
function MappingSettingsWidget(props) {
|
|
8327
9005
|
const {
|
|
@@ -8343,8 +9021,8 @@ function MappingSettingsWidget(props) {
|
|
|
8343
9021
|
const hasSchema = destinationSchema && destinationSchema.properties && Object.keys(destinationSchema.properties).length > 0;
|
|
8344
9022
|
const [showForm, setShowForm] = useState30(hasSettings);
|
|
8345
9023
|
const [isExpanded, setIsExpanded] = useState30(hasSettings);
|
|
8346
|
-
const prevValueRef =
|
|
8347
|
-
|
|
9024
|
+
const prevValueRef = useRef12(value);
|
|
9025
|
+
useEffect20(() => {
|
|
8348
9026
|
const newHasSettings = value && typeof value === "object" && Object.keys(value).length > 0;
|
|
8349
9027
|
setShowForm(!!newHasSettings);
|
|
8350
9028
|
setIsExpanded(!!newHasSettings);
|
|
@@ -8502,7 +9180,7 @@ function MappingObjectExplorerField(props) {
|
|
|
8502
9180
|
}
|
|
8503
9181
|
|
|
8504
9182
|
// src/components/molecules/mapping-map-field.tsx
|
|
8505
|
-
import { useState as useState31, useEffect as
|
|
9183
|
+
import { useState as useState31, useEffect as useEffect21, useRef as useRef13 } from "react";
|
|
8506
9184
|
|
|
8507
9185
|
// src/components/atoms/mapping-map-entry.tsx
|
|
8508
9186
|
import { jsx as jsx70, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
@@ -8632,15 +9310,15 @@ function MappingMapField(props) {
|
|
|
8632
9310
|
);
|
|
8633
9311
|
const hasEntries = entries.length > 0;
|
|
8634
9312
|
const [isExpanded, setIsExpanded] = useState31(hasEntries);
|
|
8635
|
-
const prevFormDataRef =
|
|
8636
|
-
|
|
9313
|
+
const prevFormDataRef = useRef13(formData);
|
|
9314
|
+
useEffect21(() => {
|
|
8637
9315
|
if (prevFormDataRef.current === formData) {
|
|
8638
9316
|
return;
|
|
8639
9317
|
}
|
|
8640
9318
|
prevFormDataRef.current = formData;
|
|
8641
9319
|
setEntries(objectToEntries(formData));
|
|
8642
9320
|
}, [formData]);
|
|
8643
|
-
|
|
9321
|
+
useEffect21(() => {
|
|
8644
9322
|
setIsExpanded(hasEntries);
|
|
8645
9323
|
}, [hasEntries]);
|
|
8646
9324
|
const duplicateKeys = /* @__PURE__ */ new Set();
|
|
@@ -8727,7 +9405,7 @@ function MappingMapField(props) {
|
|
|
8727
9405
|
}
|
|
8728
9406
|
|
|
8729
9407
|
// src/components/molecules/mapping-set-field.tsx
|
|
8730
|
-
import { useState as useState32, useEffect as
|
|
9408
|
+
import { useState as useState32, useEffect as useEffect22, useRef as useRef14 } from "react";
|
|
8731
9409
|
|
|
8732
9410
|
// src/components/atoms/mapping-set-entry.tsx
|
|
8733
9411
|
import { jsx as jsx72, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
@@ -8861,8 +9539,8 @@ function MappingSetField(props) {
|
|
|
8861
9539
|
);
|
|
8862
9540
|
const hasEntries = entries.length > 0;
|
|
8863
9541
|
const [isExpanded, setIsExpanded] = useState32(hasEntries);
|
|
8864
|
-
const prevFormDataRef =
|
|
8865
|
-
|
|
9542
|
+
const prevFormDataRef = useRef14(formData);
|
|
9543
|
+
useEffect22(() => {
|
|
8866
9544
|
if (prevFormDataRef.current === formData) {
|
|
8867
9545
|
return;
|
|
8868
9546
|
}
|
|
@@ -8885,7 +9563,7 @@ function MappingSetField(props) {
|
|
|
8885
9563
|
});
|
|
8886
9564
|
setEntries(newEntries);
|
|
8887
9565
|
}, [formData]);
|
|
8888
|
-
|
|
9566
|
+
useEffect22(() => {
|
|
8889
9567
|
setIsExpanded(hasEntries);
|
|
8890
9568
|
}, [hasEntries]);
|
|
8891
9569
|
const handleEntriesChange = (newEntries) => {
|
|
@@ -9008,7 +9686,7 @@ function MappingSetField(props) {
|
|
|
9008
9686
|
}
|
|
9009
9687
|
|
|
9010
9688
|
// src/components/molecules/mapping-loop-field.tsx
|
|
9011
|
-
import { useState as useState33, useEffect as
|
|
9689
|
+
import { useState as useState33, useEffect as useEffect23, useRef as useRef15 } from "react";
|
|
9012
9690
|
import { jsx as jsx74, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
9013
9691
|
function MappingLoopField(props) {
|
|
9014
9692
|
const { formData, onChange, schema, disabled, readonly } = props;
|
|
@@ -9033,8 +9711,8 @@ function MappingLoopField(props) {
|
|
|
9033
9711
|
);
|
|
9034
9712
|
const [transform, setTransform] = useState33(() => parseFormData(formData)[1]);
|
|
9035
9713
|
const [isExpanded, setIsExpanded] = useState33(false);
|
|
9036
|
-
const prevFormDataRef =
|
|
9037
|
-
|
|
9714
|
+
const prevFormDataRef = useRef15(formData);
|
|
9715
|
+
useEffect23(() => {
|
|
9038
9716
|
if (prevFormDataRef.current === formData) {
|
|
9039
9717
|
return;
|
|
9040
9718
|
}
|
|
@@ -9408,7 +10086,7 @@ function MappingMapPaneViewRJSF({
|
|
|
9408
10086
|
}
|
|
9409
10087
|
|
|
9410
10088
|
// src/components/atoms/mapping-enum-select.tsx
|
|
9411
|
-
import { useState as useState34, useRef as
|
|
10089
|
+
import { useState as useState34, useRef as useRef16, useEffect as useEffect24 } from "react";
|
|
9412
10090
|
import { jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
9413
10091
|
function MappingEnumSelect({
|
|
9414
10092
|
value,
|
|
@@ -9422,19 +10100,19 @@ function MappingEnumSelect({
|
|
|
9422
10100
|
const [highlightedIndex, setHighlightedIndex] = useState34(0);
|
|
9423
10101
|
const [inputValue, setInputValue] = useState34(String(value || ""));
|
|
9424
10102
|
const [hasTyped, setHasTyped] = useState34(false);
|
|
9425
|
-
const containerRef =
|
|
9426
|
-
const inputRef =
|
|
9427
|
-
const dropdownRef =
|
|
9428
|
-
|
|
10103
|
+
const containerRef = useRef16(null);
|
|
10104
|
+
const inputRef = useRef16(null);
|
|
10105
|
+
const dropdownRef = useRef16(null);
|
|
10106
|
+
useEffect24(() => {
|
|
9429
10107
|
setInputValue(String(value || ""));
|
|
9430
10108
|
setHasTyped(false);
|
|
9431
10109
|
}, [value]);
|
|
9432
|
-
|
|
10110
|
+
useEffect24(() => {
|
|
9433
10111
|
if (isOpen) {
|
|
9434
10112
|
setHighlightedIndex(0);
|
|
9435
10113
|
}
|
|
9436
10114
|
}, [isOpen]);
|
|
9437
|
-
|
|
10115
|
+
useEffect24(() => {
|
|
9438
10116
|
const handleClickOutside = (event) => {
|
|
9439
10117
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
9440
10118
|
setIsOpen(false);
|
|
@@ -9448,7 +10126,7 @@ function MappingEnumSelect({
|
|
|
9448
10126
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
9449
10127
|
}
|
|
9450
10128
|
}, [isOpen, hasTyped, inputValue, onChange, type]);
|
|
9451
|
-
|
|
10129
|
+
useEffect24(() => {
|
|
9452
10130
|
if (isOpen && dropdownRef.current && dropdownRef.current.children[highlightedIndex]) {
|
|
9453
10131
|
const highlighted = dropdownRef.current.children[highlightedIndex];
|
|
9454
10132
|
if (highlighted) {
|
|
@@ -9654,7 +10332,7 @@ function MappingBooleanPaneView({
|
|
|
9654
10332
|
}
|
|
9655
10333
|
|
|
9656
10334
|
// src/components/molecules/mapping-primitive-pane-view.tsx
|
|
9657
|
-
import { Fragment as
|
|
10335
|
+
import { Fragment as Fragment8, jsx as jsx81, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
9658
10336
|
function MappingPrimitivePaneView({
|
|
9659
10337
|
path,
|
|
9660
10338
|
mappingState,
|
|
@@ -9708,11 +10386,11 @@ function MappingPrimitivePaneView({
|
|
|
9708
10386
|
/* @__PURE__ */ jsxs61("div", { className: "elb-mapping-pane-hint", children: [
|
|
9709
10387
|
"Current type: ",
|
|
9710
10388
|
/* @__PURE__ */ jsx81("strong", { children: typeof value }),
|
|
9711
|
-
uiSchema?.["ui:help"] && /* @__PURE__ */ jsxs61(
|
|
10389
|
+
uiSchema?.["ui:help"] && /* @__PURE__ */ jsxs61(Fragment8, { children: [
|
|
9712
10390
|
/* @__PURE__ */ jsx81("br", {}),
|
|
9713
10391
|
uiSchema["ui:help"]
|
|
9714
10392
|
] }),
|
|
9715
|
-
hasError && validationResult.error && /* @__PURE__ */ jsxs61(
|
|
10393
|
+
hasError && validationResult.error && /* @__PURE__ */ jsxs61(Fragment8, { children: [
|
|
9716
10394
|
/* @__PURE__ */ jsx81("br", {}),
|
|
9717
10395
|
/* @__PURE__ */ jsxs61("span", { style: { color: "var(--color-button-danger)" }, children: [
|
|
9718
10396
|
"\u26A0 ",
|
|
@@ -10393,7 +11071,7 @@ function buildValueChildren(value, basePath, schemas, structure) {
|
|
|
10393
11071
|
}
|
|
10394
11072
|
|
|
10395
11073
|
// src/components/organisms/config-editor/config-editor-tabs.tsx
|
|
10396
|
-
import { Fragment as
|
|
11074
|
+
import { Fragment as Fragment9, jsx as jsx85, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
10397
11075
|
function ConfigEditorTabs({
|
|
10398
11076
|
config,
|
|
10399
11077
|
onChange,
|
|
@@ -10452,7 +11130,7 @@ function ConfigEditorTabs({
|
|
|
10452
11130
|
} catch (e) {
|
|
10453
11131
|
}
|
|
10454
11132
|
};
|
|
10455
|
-
|
|
11133
|
+
useEffect25(() => {
|
|
10456
11134
|
if (navigation.navigationHistory.length === 0) {
|
|
10457
11135
|
navigation.switchToTab("");
|
|
10458
11136
|
if (initialNavigationState && initialNavigationState.currentPath.length > 0) {
|
|
@@ -10463,7 +11141,7 @@ function ConfigEditorTabs({
|
|
|
10463
11141
|
}
|
|
10464
11142
|
}
|
|
10465
11143
|
}, []);
|
|
10466
|
-
|
|
11144
|
+
useEffect25(() => {
|
|
10467
11145
|
if (onNavigationStateChange && activeTab) {
|
|
10468
11146
|
onNavigationStateChange({
|
|
10469
11147
|
currentPath: activeTab.path,
|
|
@@ -10474,7 +11152,7 @@ function ConfigEditorTabs({
|
|
|
10474
11152
|
});
|
|
10475
11153
|
}
|
|
10476
11154
|
}, [activeTab, treeState.expandedPaths, onNavigationStateChange]);
|
|
10477
|
-
|
|
11155
|
+
useEffect25(() => {
|
|
10478
11156
|
if (activeTab && activeTab.path.length > 0) {
|
|
10479
11157
|
for (let i = 1; i <= activeTab.path.length; i++) {
|
|
10480
11158
|
const pathToExpand = activeTab.path.slice(0, i);
|
|
@@ -10492,7 +11170,7 @@ function ConfigEditorTabs({
|
|
|
10492
11170
|
className: `elb-mapping-editor-tabs elb-mapping-editor-tabs--responsive ${className}`,
|
|
10493
11171
|
"data-layout": "responsive",
|
|
10494
11172
|
children: [
|
|
10495
|
-
showTree && /* @__PURE__ */ jsxs65(
|
|
11173
|
+
showTree && /* @__PURE__ */ jsxs65(Fragment9, { children: [
|
|
10496
11174
|
/* @__PURE__ */ jsx85(
|
|
10497
11175
|
"div",
|
|
10498
11176
|
{
|
|
@@ -10694,7 +11372,7 @@ function ConfigEditor(props) {
|
|
|
10694
11372
|
}
|
|
10695
11373
|
|
|
10696
11374
|
// node_modules/@iconify/react/dist/iconify.js
|
|
10697
|
-
import { createElement, forwardRef, useState as useState37, useEffect as
|
|
11375
|
+
import { createElement, forwardRef, useState as useState37, useEffect as useEffect26 } from "react";
|
|
10698
11376
|
function getIconsTree(data, names) {
|
|
10699
11377
|
const icons = data.icons;
|
|
10700
11378
|
const aliases = data.aliases || /* @__PURE__ */ Object.create(null);
|
|
@@ -11292,9 +11970,9 @@ function updateCallbacks(storage2) {
|
|
|
11292
11970
|
});
|
|
11293
11971
|
}
|
|
11294
11972
|
}
|
|
11295
|
-
var
|
|
11973
|
+
var idCounter2 = 0;
|
|
11296
11974
|
function storeCallback(callback, icons, pendingSources) {
|
|
11297
|
-
const id =
|
|
11975
|
+
const id = idCounter2++;
|
|
11298
11976
|
const abort = removeCallback.bind(null, pendingSources, id);
|
|
11299
11977
|
if (!icons.pending.length) return abort;
|
|
11300
11978
|
const item = {
|
|
@@ -12058,11 +12736,11 @@ function IconComponent(props) {
|
|
|
12058
12736
|
}
|
|
12059
12737
|
}
|
|
12060
12738
|
}
|
|
12061
|
-
|
|
12739
|
+
useEffect26(() => {
|
|
12062
12740
|
setMounted(true);
|
|
12063
12741
|
return cleanup;
|
|
12064
12742
|
}, []);
|
|
12065
|
-
|
|
12743
|
+
useEffect26(() => {
|
|
12066
12744
|
if (mounted) {
|
|
12067
12745
|
updateState();
|
|
12068
12746
|
}
|
|
@@ -15168,7 +15846,7 @@ function FlowSectionBox({ section }) {
|
|
|
15168
15846
|
}
|
|
15169
15847
|
|
|
15170
15848
|
// src/components/molecules/code-snippet.tsx
|
|
15171
|
-
import { useState as useState38, useEffect as
|
|
15849
|
+
import { useState as useState38, useEffect as useEffect27 } from "react";
|
|
15172
15850
|
import { jsx as jsx89 } from "react/jsx-runtime";
|
|
15173
15851
|
function CodeSnippet(props) {
|
|
15174
15852
|
const {
|
|
@@ -15184,7 +15862,7 @@ function CodeSnippet(props) {
|
|
|
15184
15862
|
} = props;
|
|
15185
15863
|
const snippetClassName = `elb-code-snippet ${className || ""}`.trim();
|
|
15186
15864
|
const [formattedCode, setFormattedCode] = useState38(code);
|
|
15187
|
-
|
|
15865
|
+
useEffect27(() => {
|
|
15188
15866
|
if (format3 && code) {
|
|
15189
15867
|
formatCode(code, language).then(setFormattedCode);
|
|
15190
15868
|
} else {
|
|
@@ -15208,9 +15886,9 @@ function CodeSnippet(props) {
|
|
|
15208
15886
|
}
|
|
15209
15887
|
|
|
15210
15888
|
// src/components/molecules/flow-map/FlowMap.tsx
|
|
15211
|
-
import React23, { useEffect as
|
|
15889
|
+
import React23, { useEffect as useEffect28, useRef as useRef17 } from "react";
|
|
15212
15890
|
import rough from "roughjs";
|
|
15213
|
-
import { Fragment as
|
|
15891
|
+
import { Fragment as Fragment10, jsx as jsx90, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
15214
15892
|
function RoughRect({
|
|
15215
15893
|
x,
|
|
15216
15894
|
y,
|
|
@@ -15219,8 +15897,8 @@ function RoughRect({
|
|
|
15219
15897
|
fill,
|
|
15220
15898
|
stroke
|
|
15221
15899
|
}) {
|
|
15222
|
-
const ref =
|
|
15223
|
-
|
|
15900
|
+
const ref = useRef17(null);
|
|
15901
|
+
useEffect28(() => {
|
|
15224
15902
|
if (!ref.current) return;
|
|
15225
15903
|
const svg = ref.current.ownerSVGElement;
|
|
15226
15904
|
if (!svg) return;
|
|
@@ -15259,8 +15937,8 @@ function RoughCircle({
|
|
|
15259
15937
|
fill,
|
|
15260
15938
|
stroke
|
|
15261
15939
|
}) {
|
|
15262
|
-
const ref =
|
|
15263
|
-
|
|
15940
|
+
const ref = useRef17(null);
|
|
15941
|
+
useEffect28(() => {
|
|
15264
15942
|
if (!ref.current) return;
|
|
15265
15943
|
const svg = ref.current.ownerSVGElement;
|
|
15266
15944
|
if (!svg) return;
|
|
@@ -15317,8 +15995,8 @@ function RoughArrow({
|
|
|
15317
15995
|
arrowSize = 8,
|
|
15318
15996
|
centerY
|
|
15319
15997
|
}) {
|
|
15320
|
-
const ref =
|
|
15321
|
-
|
|
15998
|
+
const ref = useRef17(null);
|
|
15999
|
+
useEffect28(() => {
|
|
15322
16000
|
if (!ref.current) return;
|
|
15323
16001
|
const svg = ref.current.ownerSVGElement;
|
|
15324
16002
|
if (!svg) return;
|
|
@@ -15654,7 +16332,7 @@ function FlowMap({
|
|
|
15654
16332
|
return aIdx - bIdx;
|
|
15655
16333
|
}
|
|
15656
16334
|
);
|
|
15657
|
-
const containerRef =
|
|
16335
|
+
const containerRef = useRef17(null);
|
|
15658
16336
|
const hasDescription = stageBefore?.description || sourceEntries.some(([, s]) => s.description) || preTransformerList.some((p) => p.config.description) || collector?.description || postTransformerList.some((p) => p.config.description) || destinationEntries.some(([, d]) => d.description) || stageAfter?.description || destinationEntries.some(([, d]) => d.after?.description);
|
|
15659
16337
|
const hasLink = stageBefore?.link !== false || sourceEntries.some(([, s]) => s.link !== false) || preTransformerList.some((p) => p.config.link !== false) || collector?.link !== false || postTransformerList.some((p) => p.config.link !== false) || destinationEntries.some(([, d]) => d.link !== false) || stageAfter?.link !== false || destinationEntries.some(([, d]) => d.after?.link !== false);
|
|
15660
16338
|
const stageMarkerPositions = [
|
|
@@ -15995,7 +16673,7 @@ function FlowMap({
|
|
|
15995
16673
|
}
|
|
15996
16674
|
return collectorPos;
|
|
15997
16675
|
};
|
|
15998
|
-
return /* @__PURE__ */ jsxs67(
|
|
16676
|
+
return /* @__PURE__ */ jsxs67(Fragment10, { children: [
|
|
15999
16677
|
!stageBefore && sourceEntries.length === 1 && /* @__PURE__ */ jsx90(
|
|
16000
16678
|
RoughArrow,
|
|
16001
16679
|
{
|
|
@@ -16174,7 +16852,7 @@ function FlowMap({
|
|
|
16174
16852
|
const fromY = collectorCenterY;
|
|
16175
16853
|
const toY = firstPostPos.y + boxHeight / 2;
|
|
16176
16854
|
const offset = withReturn ? ARROW_OFFSET : 0;
|
|
16177
|
-
return /* @__PURE__ */ jsxs67(
|
|
16855
|
+
return /* @__PURE__ */ jsxs67(Fragment10, { children: [
|
|
16178
16856
|
/* @__PURE__ */ jsx90(
|
|
16179
16857
|
RoughArrow,
|
|
16180
16858
|
{
|
|
@@ -16241,7 +16919,7 @@ function FlowMap({
|
|
|
16241
16919
|
const stageHighlight = config?.highlight !== false;
|
|
16242
16920
|
const labelY = text ? pos.y + pos.height * 0.28 : pos.y + pos.height / 2;
|
|
16243
16921
|
const linkUrl = link === false ? null : typeof link === "string" ? link : defaultLink;
|
|
16244
|
-
const stageContent = /* @__PURE__ */ jsxs67(
|
|
16922
|
+
const stageContent = /* @__PURE__ */ jsxs67(Fragment10, { children: [
|
|
16245
16923
|
/* @__PURE__ */ jsx90(
|
|
16246
16924
|
RoughRect,
|
|
16247
16925
|
{
|
|
@@ -16795,7 +17473,7 @@ function Spinner({ size = "md", className = "" }) {
|
|
|
16795
17473
|
}
|
|
16796
17474
|
|
|
16797
17475
|
// src/components/atoms/submit-button.tsx
|
|
16798
|
-
import { Fragment as
|
|
17476
|
+
import { Fragment as Fragment11, jsx as jsx97, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
16799
17477
|
function SubmitButton({
|
|
16800
17478
|
children,
|
|
16801
17479
|
loadingText,
|
|
@@ -16815,7 +17493,7 @@ function SubmitButton({
|
|
|
16815
17493
|
disabled: isDisabled,
|
|
16816
17494
|
onClick,
|
|
16817
17495
|
className: `elb-submit-button elb-submit-button--${variant} ${fullWidth ? "elb-submit-button--full-width" : ""} ${loading ? "elb-submit-button--loading" : ""} ${className}`.trim(),
|
|
16818
|
-
children: loading ? /* @__PURE__ */ jsxs72(
|
|
17496
|
+
children: loading ? /* @__PURE__ */ jsxs72(Fragment11, { children: [
|
|
16819
17497
|
/* @__PURE__ */ jsx97(Spinner, { size: "sm", className: "elb-submit-button__spinner" }),
|
|
16820
17498
|
/* @__PURE__ */ jsx97("span", { children: loadingText ?? children })
|
|
16821
17499
|
] }) : children
|
|
@@ -16880,8 +17558,8 @@ function ConfigFormCard({
|
|
|
16880
17558
|
}
|
|
16881
17559
|
|
|
16882
17560
|
// src/components/molecules/split-button.tsx
|
|
16883
|
-
import { useState as useState40, useRef as
|
|
16884
|
-
import { Fragment as
|
|
17561
|
+
import { useState as useState40, useRef as useRef18, useEffect as useEffect29, useCallback as useCallback19 } from "react";
|
|
17562
|
+
import { Fragment as Fragment12, jsx as jsx100, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
16885
17563
|
function SplitButton({
|
|
16886
17564
|
children,
|
|
16887
17565
|
onClick,
|
|
@@ -16893,7 +17571,7 @@ function SplitButton({
|
|
|
16893
17571
|
className = ""
|
|
16894
17572
|
}) {
|
|
16895
17573
|
const [open, setOpen] = useState40(false);
|
|
16896
|
-
const ref =
|
|
17574
|
+
const ref = useRef18(null);
|
|
16897
17575
|
const isDisabled = disabled || loading;
|
|
16898
17576
|
const handleClickOutside = useCallback19((e) => {
|
|
16899
17577
|
if (ref.current && !ref.current.contains(e.target)) {
|
|
@@ -16903,7 +17581,7 @@ function SplitButton({
|
|
|
16903
17581
|
const handleKeyDown = useCallback19((e) => {
|
|
16904
17582
|
if (e.key === "Escape") setOpen(false);
|
|
16905
17583
|
}, []);
|
|
16906
|
-
|
|
17584
|
+
useEffect29(() => {
|
|
16907
17585
|
if (open) {
|
|
16908
17586
|
document.addEventListener("mousedown", handleClickOutside);
|
|
16909
17587
|
document.addEventListener("keydown", handleKeyDown);
|
|
@@ -16929,7 +17607,7 @@ function SplitButton({
|
|
|
16929
17607
|
children: loading ? loadingText ?? children : children
|
|
16930
17608
|
}
|
|
16931
17609
|
),
|
|
16932
|
-
actions.length > 0 && /* @__PURE__ */ jsxs75(
|
|
17610
|
+
actions.length > 0 && /* @__PURE__ */ jsxs75(Fragment12, { children: [
|
|
16933
17611
|
/* @__PURE__ */ jsx100(
|
|
16934
17612
|
"button",
|
|
16935
17613
|
{
|
|
@@ -16985,9 +17663,9 @@ import { jsx as jsx101, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
|
16985
17663
|
var STATUS_DOT = {
|
|
16986
17664
|
active: "elb-flow-selector__dot--active",
|
|
16987
17665
|
published: "elb-flow-selector__dot--active",
|
|
16988
|
-
bundling: "elb-flow-selector__dot--deploying",
|
|
16989
17666
|
deploying: "elb-flow-selector__dot--deploying",
|
|
16990
|
-
failed: "elb-flow-selector__dot--failed"
|
|
17667
|
+
failed: "elb-flow-selector__dot--failed",
|
|
17668
|
+
stopped: "elb-flow-selector__dot--failed"
|
|
16991
17669
|
};
|
|
16992
17670
|
function FlowSelector({
|
|
16993
17671
|
flows,
|
|
@@ -17018,117 +17696,6 @@ function FlowSelector({
|
|
|
17018
17696
|
}) });
|
|
17019
17697
|
}
|
|
17020
17698
|
|
|
17021
|
-
// src/components/molecules/flow-deploy-panel.tsx
|
|
17022
|
-
import { Fragment as Fragment14, jsx as jsx102, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
17023
|
-
function statusLabel(status) {
|
|
17024
|
-
switch (status) {
|
|
17025
|
-
case "active":
|
|
17026
|
-
return "Active";
|
|
17027
|
-
case "published":
|
|
17028
|
-
return "Published";
|
|
17029
|
-
case "bundling":
|
|
17030
|
-
case "deploying":
|
|
17031
|
-
return "Deploying...";
|
|
17032
|
-
case "failed":
|
|
17033
|
-
return "Failed";
|
|
17034
|
-
default:
|
|
17035
|
-
return status;
|
|
17036
|
-
}
|
|
17037
|
-
}
|
|
17038
|
-
function statusDotClass(status) {
|
|
17039
|
-
switch (status) {
|
|
17040
|
-
case "active":
|
|
17041
|
-
case "published":
|
|
17042
|
-
return "elb-flow-deploy-panel__dot--active";
|
|
17043
|
-
case "bundling":
|
|
17044
|
-
case "deploying":
|
|
17045
|
-
return "elb-flow-deploy-panel__dot--deploying";
|
|
17046
|
-
case "failed":
|
|
17047
|
-
return "elb-flow-deploy-panel__dot--failed";
|
|
17048
|
-
default:
|
|
17049
|
-
return "";
|
|
17050
|
-
}
|
|
17051
|
-
}
|
|
17052
|
-
function primaryLabel(deployment, flowName, multipleFlows) {
|
|
17053
|
-
const name = multipleFlows ? ` "${flowName}"` : "";
|
|
17054
|
-
if (!deployment) return `Deploy${name}`;
|
|
17055
|
-
switch (deployment.status) {
|
|
17056
|
-
case "failed":
|
|
17057
|
-
return `Retry${name}`;
|
|
17058
|
-
case "active":
|
|
17059
|
-
case "published":
|
|
17060
|
-
return `Redeploy${name}`;
|
|
17061
|
-
default:
|
|
17062
|
-
return `Deploy${name}`;
|
|
17063
|
-
}
|
|
17064
|
-
}
|
|
17065
|
-
function FlowDeployPanel({
|
|
17066
|
-
flowName,
|
|
17067
|
-
platform,
|
|
17068
|
-
deployment,
|
|
17069
|
-
deploying = false,
|
|
17070
|
-
error,
|
|
17071
|
-
hasUnsavedChanges = false,
|
|
17072
|
-
multipleFlows = false,
|
|
17073
|
-
onDeploy,
|
|
17074
|
-
onDeleteDeployment,
|
|
17075
|
-
onDownloadFlow,
|
|
17076
|
-
onBundle,
|
|
17077
|
-
className = ""
|
|
17078
|
-
}) {
|
|
17079
|
-
const isDeploying = deploying || deployment?.status === "bundling" || deployment?.status === "deploying";
|
|
17080
|
-
const bundleExt = platform === "server" ? ".mjs" : ".js";
|
|
17081
|
-
const actions = [
|
|
17082
|
-
{
|
|
17083
|
-
key: "download",
|
|
17084
|
-
label: "Download Flow (.json)",
|
|
17085
|
-
onClick: onDownloadFlow
|
|
17086
|
-
},
|
|
17087
|
-
{ key: "bundle", label: `Bundle (${bundleExt})`, onClick: onBundle }
|
|
17088
|
-
];
|
|
17089
|
-
return /* @__PURE__ */ jsxs77("div", { className: `elb-flow-deploy-panel ${className}`, children: [
|
|
17090
|
-
/* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__status", children: deployment ? /* @__PURE__ */ jsxs77(Fragment14, { children: [
|
|
17091
|
-
/* @__PURE__ */ jsx102(
|
|
17092
|
-
"span",
|
|
17093
|
-
{
|
|
17094
|
-
className: `elb-flow-deploy-panel__dot ${statusDotClass(deployment.status)}`
|
|
17095
|
-
}
|
|
17096
|
-
),
|
|
17097
|
-
/* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__status-text", children: statusLabel(deployment.status) }),
|
|
17098
|
-
deployment.createdAt && /* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__time", children: new Date(deployment.createdAt).toLocaleString() })
|
|
17099
|
-
] }) : /* @__PURE__ */ jsxs77(Fragment14, { children: [
|
|
17100
|
-
/* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__dot" }),
|
|
17101
|
-
/* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__status-text", children: "Not deployed" })
|
|
17102
|
-
] }) }),
|
|
17103
|
-
hasUnsavedChanges && deployment && (deployment.status === "active" || deployment.status === "published") && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__warning", children: "Config changed since last deploy" }),
|
|
17104
|
-
deployment?.publicUrl && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__endpoint", children: /* @__PURE__ */ jsx102("code", { className: "elb-flow-deploy-panel__url", children: deployment.publicUrl }) }),
|
|
17105
|
-
deployment?.containerUrl && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__endpoint", children: /* @__PURE__ */ jsx102("code", { className: "elb-flow-deploy-panel__url", children: deployment.containerUrl }) }),
|
|
17106
|
-
(error || deployment?.errorMessage) && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__error", children: error || deployment?.errorMessage }),
|
|
17107
|
-
/* @__PURE__ */ jsxs77("div", { className: "elb-flow-deploy-panel__actions", children: [
|
|
17108
|
-
/* @__PURE__ */ jsx102(
|
|
17109
|
-
SplitButton,
|
|
17110
|
-
{
|
|
17111
|
-
onClick: onDeploy,
|
|
17112
|
-
actions,
|
|
17113
|
-
loading: isDeploying,
|
|
17114
|
-
loadingText: "Deploying...",
|
|
17115
|
-
disabled: isDeploying,
|
|
17116
|
-
children: primaryLabel(deployment, flowName, multipleFlows)
|
|
17117
|
-
}
|
|
17118
|
-
),
|
|
17119
|
-
deployment && deployment.status !== "bundling" && deployment.status !== "deploying" && /* @__PURE__ */ jsx102(
|
|
17120
|
-
"button",
|
|
17121
|
-
{
|
|
17122
|
-
type: "button",
|
|
17123
|
-
className: "elb-flow-deploy-panel__delete",
|
|
17124
|
-
onClick: onDeleteDeployment,
|
|
17125
|
-
children: "Delete deployment"
|
|
17126
|
-
}
|
|
17127
|
-
)
|
|
17128
|
-
] })
|
|
17129
|
-
] });
|
|
17130
|
-
}
|
|
17131
|
-
|
|
17132
17699
|
// src/schemas/config-structures/destination-config.ts
|
|
17133
17700
|
var DESTINATION_CONFIG_STRUCTURE = {
|
|
17134
17701
|
type: "object",
|
|
@@ -17215,13 +17782,13 @@ var DESTINATION_CONFIG_STRUCTURE = {
|
|
|
17215
17782
|
};
|
|
17216
17783
|
|
|
17217
17784
|
// src/components/atoms/footer.tsx
|
|
17218
|
-
import { jsx as
|
|
17785
|
+
import { jsx as jsx102 } from "react/jsx-runtime";
|
|
17219
17786
|
function Footer({ children, className = "" }) {
|
|
17220
|
-
return /* @__PURE__ */
|
|
17787
|
+
return /* @__PURE__ */ jsx102("div", { className: `elb-explorer-footer ${className}`, children });
|
|
17221
17788
|
}
|
|
17222
17789
|
|
|
17223
17790
|
// src/components/atoms/button-link.tsx
|
|
17224
|
-
import { jsx as
|
|
17791
|
+
import { jsx as jsx103 } from "react/jsx-runtime";
|
|
17225
17792
|
function ButtonLink({
|
|
17226
17793
|
variant = "default",
|
|
17227
17794
|
size = "md",
|
|
@@ -17234,9 +17801,9 @@ function ButtonLink({
|
|
|
17234
17801
|
const baseClass = "elb-button-link";
|
|
17235
17802
|
const classes = `${baseClass} ${baseClass}-${variant} ${baseClass}-${size} ${className}`.trim();
|
|
17236
17803
|
if (href && !disabled) {
|
|
17237
|
-
return /* @__PURE__ */
|
|
17804
|
+
return /* @__PURE__ */ jsx103("a", { href, className: classes, children });
|
|
17238
17805
|
}
|
|
17239
|
-
return /* @__PURE__ */
|
|
17806
|
+
return /* @__PURE__ */ jsx103(
|
|
17240
17807
|
"button",
|
|
17241
17808
|
{
|
|
17242
17809
|
type: "button",
|
|
@@ -17249,24 +17816,24 @@ function ButtonLink({
|
|
|
17249
17816
|
}
|
|
17250
17817
|
|
|
17251
17818
|
// src/components/atoms/panel-hints.tsx
|
|
17252
|
-
import { jsx as
|
|
17819
|
+
import { jsx as jsx104, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
17253
17820
|
function PanelHints({
|
|
17254
17821
|
title = "Common patterns",
|
|
17255
17822
|
hints,
|
|
17256
17823
|
className = ""
|
|
17257
17824
|
}) {
|
|
17258
|
-
return /* @__PURE__ */
|
|
17259
|
-
title && /* @__PURE__ */
|
|
17260
|
-
/* @__PURE__ */
|
|
17261
|
-
/* @__PURE__ */
|
|
17262
|
-
/* @__PURE__ */
|
|
17825
|
+
return /* @__PURE__ */ jsxs77("div", { className: `elb-panel-hints ${className}`, children: [
|
|
17826
|
+
title && /* @__PURE__ */ jsx104("div", { className: "elb-panel-hints-title", children: title }),
|
|
17827
|
+
/* @__PURE__ */ jsx104("ul", { className: "elb-panel-hints-list", children: hints.map((hint, index) => /* @__PURE__ */ jsxs77("li", { className: "elb-panel-hints-item", children: [
|
|
17828
|
+
/* @__PURE__ */ jsx104("code", { className: "elb-panel-hints-code", children: hint.code }),
|
|
17829
|
+
/* @__PURE__ */ jsx104("span", { className: "elb-panel-hints-desc", children: hint.description })
|
|
17263
17830
|
] }, index)) })
|
|
17264
17831
|
] });
|
|
17265
17832
|
}
|
|
17266
17833
|
|
|
17267
17834
|
// src/components/atoms/form-input.tsx
|
|
17268
17835
|
import { useId as useId2 } from "react";
|
|
17269
|
-
import { jsx as
|
|
17836
|
+
import { jsx as jsx105 } from "react/jsx-runtime";
|
|
17270
17837
|
function FormInput({
|
|
17271
17838
|
value,
|
|
17272
17839
|
onChange,
|
|
@@ -17285,7 +17852,7 @@ function FormInput({
|
|
|
17285
17852
|
const inputId = id ?? generatedId;
|
|
17286
17853
|
const hasError = Boolean(error);
|
|
17287
17854
|
const errorMessage = typeof error === "string" ? error : void 0;
|
|
17288
|
-
return /* @__PURE__ */
|
|
17855
|
+
return /* @__PURE__ */ jsx105(
|
|
17289
17856
|
FormField,
|
|
17290
17857
|
{
|
|
17291
17858
|
label,
|
|
@@ -17293,7 +17860,7 @@ function FormInput({
|
|
|
17293
17860
|
error: errorMessage,
|
|
17294
17861
|
required,
|
|
17295
17862
|
className,
|
|
17296
|
-
children: /* @__PURE__ */
|
|
17863
|
+
children: /* @__PURE__ */ jsx105(
|
|
17297
17864
|
"input",
|
|
17298
17865
|
{
|
|
17299
17866
|
id: inputId,
|
|
@@ -17352,7 +17919,7 @@ function MDXProvider(properties) {
|
|
|
17352
17919
|
|
|
17353
17920
|
// src/components/atoms/mdx-code.tsx
|
|
17354
17921
|
import { Children } from "react";
|
|
17355
|
-
import { jsx as
|
|
17922
|
+
import { jsx as jsx106 } from "react/jsx-runtime";
|
|
17356
17923
|
var MDXCode = ({
|
|
17357
17924
|
className,
|
|
17358
17925
|
children
|
|
@@ -17366,7 +17933,7 @@ var MDXCode = ({
|
|
|
17366
17933
|
return false;
|
|
17367
17934
|
});
|
|
17368
17935
|
if (!hasClassName || !hasNewlines) {
|
|
17369
|
-
return /* @__PURE__ */
|
|
17936
|
+
return /* @__PURE__ */ jsx106("code", { className: "elb-code-inline", children });
|
|
17370
17937
|
}
|
|
17371
17938
|
const mdxLanguage = className.replace(/^language-/, "");
|
|
17372
17939
|
const languageMap = {
|
|
@@ -17381,7 +17948,7 @@ var MDXCode = ({
|
|
|
17381
17948
|
};
|
|
17382
17949
|
const monacoLanguage = languageMap[mdxLanguage] || mdxLanguage;
|
|
17383
17950
|
const code = childrenArray.map((child) => typeof child === "string" ? child : "").join("").trim();
|
|
17384
|
-
return /* @__PURE__ */
|
|
17951
|
+
return /* @__PURE__ */ jsx106(
|
|
17385
17952
|
CodeBox,
|
|
17386
17953
|
{
|
|
17387
17954
|
code,
|
|
@@ -17395,7 +17962,7 @@ var MDXCode = ({
|
|
|
17395
17962
|
};
|
|
17396
17963
|
|
|
17397
17964
|
// src/providers/MDXProvider.tsx
|
|
17398
|
-
import { jsx as
|
|
17965
|
+
import { jsx as jsx107 } from "react/jsx-runtime";
|
|
17399
17966
|
var MDXProvider2 = ({ children }) => {
|
|
17400
17967
|
const components = {
|
|
17401
17968
|
// Markdown element mappings
|
|
@@ -17407,14 +17974,14 @@ var MDXProvider2 = ({ children }) => {
|
|
|
17407
17974
|
DestinationInitDemo,
|
|
17408
17975
|
DestinationDemo
|
|
17409
17976
|
};
|
|
17410
|
-
return /* @__PURE__ */
|
|
17977
|
+
return /* @__PURE__ */ jsx107(MDXProvider, { components, children });
|
|
17411
17978
|
};
|
|
17412
17979
|
|
|
17413
17980
|
// src/hooks/useDropdown.ts
|
|
17414
|
-
import { useState as useState41, useRef as
|
|
17981
|
+
import { useState as useState41, useRef as useRef19, useEffect as useEffect30, useCallback as useCallback20 } from "react";
|
|
17415
17982
|
function useDropdown() {
|
|
17416
17983
|
const [isOpen, setIsOpen] = useState41(false);
|
|
17417
|
-
const containerRef =
|
|
17984
|
+
const containerRef = useRef19(null);
|
|
17418
17985
|
const toggle = useCallback20(() => {
|
|
17419
17986
|
setIsOpen((prev) => !prev);
|
|
17420
17987
|
}, []);
|
|
@@ -17424,7 +17991,7 @@ function useDropdown() {
|
|
|
17424
17991
|
const close = useCallback20(() => {
|
|
17425
17992
|
setIsOpen(false);
|
|
17426
17993
|
}, []);
|
|
17427
|
-
|
|
17994
|
+
useEffect30(() => {
|
|
17428
17995
|
if (!isOpen) return;
|
|
17429
17996
|
function handleClickOutside(event) {
|
|
17430
17997
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
@@ -17434,7 +18001,7 @@ function useDropdown() {
|
|
|
17434
18001
|
document.addEventListener("mousedown", handleClickOutside);
|
|
17435
18002
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
17436
18003
|
}, [isOpen]);
|
|
17437
|
-
|
|
18004
|
+
useEffect30(() => {
|
|
17438
18005
|
if (!isOpen) return;
|
|
17439
18006
|
function handleEscape(event) {
|
|
17440
18007
|
if (event.key === "Escape") {
|
|
@@ -17452,6 +18019,474 @@ function useDropdown() {
|
|
|
17452
18019
|
containerRef
|
|
17453
18020
|
};
|
|
17454
18021
|
}
|
|
18022
|
+
|
|
18023
|
+
// src/utils/monaco-schema-enrichment.ts
|
|
18024
|
+
function enrichSchema(baseSchema, enrichments) {
|
|
18025
|
+
const schema = JSON.parse(JSON.stringify(baseSchema));
|
|
18026
|
+
for (const [path, extensions] of Object.entries(enrichments)) {
|
|
18027
|
+
const target = path === "" ? schema : getNestedObject(schema, path);
|
|
18028
|
+
if (target && typeof target === "object") {
|
|
18029
|
+
Object.assign(target, extensions);
|
|
18030
|
+
}
|
|
18031
|
+
}
|
|
18032
|
+
return schema;
|
|
18033
|
+
}
|
|
18034
|
+
function getNestedObject(obj, path) {
|
|
18035
|
+
const keys = path.split(".");
|
|
18036
|
+
let current = obj;
|
|
18037
|
+
for (const key of keys) {
|
|
18038
|
+
if (current && typeof current === "object" && key in current) {
|
|
18039
|
+
current = current[key];
|
|
18040
|
+
} else {
|
|
18041
|
+
return void 0;
|
|
18042
|
+
}
|
|
18043
|
+
}
|
|
18044
|
+
return current;
|
|
18045
|
+
}
|
|
18046
|
+
|
|
18047
|
+
// src/utils/monaco-schema-flow-setup.ts
|
|
18048
|
+
function enrichFlowSetupSchema(baseSchema) {
|
|
18049
|
+
const schema = JSON.parse(JSON.stringify(baseSchema));
|
|
18050
|
+
if (!schema.anyOf?.[0]?.properties) return schema;
|
|
18051
|
+
const root = schema.anyOf[0];
|
|
18052
|
+
const props = root.properties;
|
|
18053
|
+
const flowConfig = props.flows?.additionalProperties?.properties;
|
|
18054
|
+
if (props.version) {
|
|
18055
|
+
props.version.markdownDescription = 'Schema version number. Must be `1` for the current format.\n\n```json\n"version": 1\n```';
|
|
18056
|
+
}
|
|
18057
|
+
if (props.$schema) {
|
|
18058
|
+
props.$schema.markdownDescription = 'JSON Schema URI for IDE validation.\n\n```json\n"$schema": "https://walkeros.io/schema/flow/v1.json"\n```';
|
|
18059
|
+
}
|
|
18060
|
+
if (props.include) {
|
|
18061
|
+
props.include.markdownDescription = 'Folders to include in the bundle output.\n\n```json\n"include": ["./src", "./lib"]\n```';
|
|
18062
|
+
}
|
|
18063
|
+
if (props.variables) {
|
|
18064
|
+
props.variables.markdownDescription = 'Shared variables for `$var.name` interpolation across all flows.\n\n```json\n"variables": {\n "measurementId": "G-XXXXXXXXXX",\n "debug": false\n}\n```\n\nReference in any config value: `"$var.measurementId"`';
|
|
18065
|
+
props.variables.defaultSnippets = [
|
|
18066
|
+
{
|
|
18067
|
+
label: "Add variable",
|
|
18068
|
+
description: "New key-value variable",
|
|
18069
|
+
body: { "${1:name}": "${2:value}" }
|
|
18070
|
+
}
|
|
18071
|
+
];
|
|
18072
|
+
}
|
|
18073
|
+
if (props.definitions) {
|
|
18074
|
+
props.definitions.markdownDescription = 'Reusable configuration fragments for `$def.name` references.\n\n```json\n"definitions": {\n "gaConfig": {\n "measurementId": "$var.trackingId"\n }\n}\n```\n\nReference in any config: `"$def.gaConfig"`';
|
|
18075
|
+
props.definitions.defaultSnippets = [
|
|
18076
|
+
{
|
|
18077
|
+
label: "Add definition",
|
|
18078
|
+
description: "New reusable config fragment",
|
|
18079
|
+
body: { "${1:name}": { "${2:key}": "${3:value}" } }
|
|
18080
|
+
}
|
|
18081
|
+
];
|
|
18082
|
+
}
|
|
18083
|
+
if (props.flows) {
|
|
18084
|
+
props.flows.markdownDescription = 'Flow configurations keyed by name. Each flow defines a complete event pipeline.\n\n```json\n"flows": {\n "myFlow": {\n "web": {},\n "sources": { ... },\n "destinations": { ... }\n }\n}\n```';
|
|
18085
|
+
props.flows.defaultSnippets = [
|
|
18086
|
+
{
|
|
18087
|
+
label: "Web flow (basic)",
|
|
18088
|
+
description: "Minimal web flow with browser source",
|
|
18089
|
+
body: {
|
|
18090
|
+
"${1:myFlow}": {
|
|
18091
|
+
web: {},
|
|
18092
|
+
sources: {
|
|
18093
|
+
browser: { package: "@walkeros/web-source-browser" }
|
|
18094
|
+
},
|
|
18095
|
+
destinations: {}
|
|
18096
|
+
}
|
|
18097
|
+
}
|
|
18098
|
+
},
|
|
18099
|
+
{
|
|
18100
|
+
label: "Server flow (basic)",
|
|
18101
|
+
description: "Minimal server flow with Express source",
|
|
18102
|
+
body: {
|
|
18103
|
+
"${1:myFlow}": {
|
|
18104
|
+
server: {},
|
|
18105
|
+
sources: {
|
|
18106
|
+
express: { package: "@walkeros/server-source-express" }
|
|
18107
|
+
},
|
|
18108
|
+
destinations: {}
|
|
18109
|
+
}
|
|
18110
|
+
}
|
|
18111
|
+
},
|
|
18112
|
+
{
|
|
18113
|
+
label: "Web + GA4 flow",
|
|
18114
|
+
description: "Web flow with browser source and GA4 destination",
|
|
18115
|
+
body: {
|
|
18116
|
+
"${1:myFlow}": {
|
|
18117
|
+
web: {},
|
|
18118
|
+
sources: {
|
|
18119
|
+
browser: { package: "@walkeros/web-source-browser" }
|
|
18120
|
+
},
|
|
18121
|
+
destinations: {
|
|
18122
|
+
ga4: {
|
|
18123
|
+
package: "@walkeros/web-destination-ga4",
|
|
18124
|
+
config: {
|
|
18125
|
+
measurementId: "$var.${2:measurementId}"
|
|
18126
|
+
}
|
|
18127
|
+
}
|
|
18128
|
+
}
|
|
18129
|
+
}
|
|
18130
|
+
}
|
|
18131
|
+
}
|
|
18132
|
+
];
|
|
18133
|
+
}
|
|
18134
|
+
if (flowConfig) {
|
|
18135
|
+
if (flowConfig.sources) {
|
|
18136
|
+
flowConfig.sources.markdownDescription = 'Source configurations for data capture, keyed by step name.\n\n```json\n"sources": {\n "browser": { "package": "@walkeros/web-source-browser" }\n}\n```';
|
|
18137
|
+
flowConfig.sources.defaultSnippets = [
|
|
18138
|
+
{
|
|
18139
|
+
label: "Add web source",
|
|
18140
|
+
description: "Browser source for web tracking",
|
|
18141
|
+
body: {
|
|
18142
|
+
"${1:browser}": {
|
|
18143
|
+
package: "@walkeros/web-source-browser"
|
|
18144
|
+
}
|
|
18145
|
+
}
|
|
18146
|
+
},
|
|
18147
|
+
{
|
|
18148
|
+
label: "Add server source",
|
|
18149
|
+
description: "Express source for server tracking",
|
|
18150
|
+
body: {
|
|
18151
|
+
"${1:express}": {
|
|
18152
|
+
package: "@walkeros/server-source-express"
|
|
18153
|
+
}
|
|
18154
|
+
}
|
|
18155
|
+
}
|
|
18156
|
+
];
|
|
18157
|
+
}
|
|
18158
|
+
if (flowConfig.destinations) {
|
|
18159
|
+
flowConfig.destinations.markdownDescription = 'Destination configurations for data output, keyed by step name.\n\n```json\n"destinations": {\n "ga4": {\n "package": "@walkeros/web-destination-ga4",\n "config": { "measurementId": "$var.trackingId" }\n }\n}\n```';
|
|
18160
|
+
flowConfig.destinations.defaultSnippets = [
|
|
18161
|
+
{
|
|
18162
|
+
label: "Add GA4 destination",
|
|
18163
|
+
description: "Google Analytics 4 destination",
|
|
18164
|
+
body: {
|
|
18165
|
+
"${1:ga4}": {
|
|
18166
|
+
package: "@walkeros/web-destination-ga4",
|
|
18167
|
+
config: {
|
|
18168
|
+
measurementId: "$var.${2:measurementId}"
|
|
18169
|
+
}
|
|
18170
|
+
}
|
|
18171
|
+
}
|
|
18172
|
+
},
|
|
18173
|
+
{
|
|
18174
|
+
label: "Add custom destination",
|
|
18175
|
+
description: "Custom destination with inline code",
|
|
18176
|
+
body: {
|
|
18177
|
+
"${1:custom}": {
|
|
18178
|
+
code: {
|
|
18179
|
+
push: "$code:(event) => { ${2:// handle event} }"
|
|
18180
|
+
}
|
|
18181
|
+
}
|
|
18182
|
+
}
|
|
18183
|
+
}
|
|
18184
|
+
];
|
|
18185
|
+
}
|
|
18186
|
+
if (flowConfig.transformers) {
|
|
18187
|
+
flowConfig.transformers.markdownDescription = 'Transformer configurations for event transformation, keyed by step name.\n\n```json\n"transformers": {\n "validator": {\n "code": { "push": "$code:(event) => event" }\n }\n}\n```';
|
|
18188
|
+
flowConfig.transformers.defaultSnippets = [
|
|
18189
|
+
{
|
|
18190
|
+
label: "Add transformer",
|
|
18191
|
+
description: "Inline transformer with code",
|
|
18192
|
+
body: {
|
|
18193
|
+
"${1:transformer}": {
|
|
18194
|
+
code: {
|
|
18195
|
+
push: "$code:(event) => { ${2:return event;} }"
|
|
18196
|
+
}
|
|
18197
|
+
}
|
|
18198
|
+
}
|
|
18199
|
+
}
|
|
18200
|
+
];
|
|
18201
|
+
}
|
|
18202
|
+
if (flowConfig.web) {
|
|
18203
|
+
flowConfig.web.markdownDescription = 'Web platform configuration (browser-based). Mutually exclusive with `server`.\n\n```json\n"web": {\n "windowCollector": "collector",\n "windowElb": "elb"\n}\n```';
|
|
18204
|
+
}
|
|
18205
|
+
if (flowConfig.server) {
|
|
18206
|
+
flowConfig.server.markdownDescription = 'Server platform configuration (Node.js). Mutually exclusive with `web`.\n\n```json\n"server": {}\n```';
|
|
18207
|
+
}
|
|
18208
|
+
}
|
|
18209
|
+
return schema;
|
|
18210
|
+
}
|
|
18211
|
+
|
|
18212
|
+
// src/utils/monaco-schema-contract.ts
|
|
18213
|
+
function getEnrichedContractSchema() {
|
|
18214
|
+
return {
|
|
18215
|
+
type: "object",
|
|
18216
|
+
markdownDescription: 'walkerOS Data Contract. Defines entity\u2192action schemas for event validation.\n\n```json\n{\n "$tagging": 1,\n "page": {\n "view": {\n "type": "object",\n "properties": {\n "title": { "type": "string" }\n }\n }\n }\n}\n```',
|
|
18217
|
+
properties: {
|
|
18218
|
+
$tagging: {
|
|
18219
|
+
type: "number",
|
|
18220
|
+
markdownDescription: 'Contract version number. Increment when making breaking changes.\n\n```json\n"$tagging": 1\n```'
|
|
18221
|
+
}
|
|
18222
|
+
},
|
|
18223
|
+
additionalProperties: {
|
|
18224
|
+
type: "object",
|
|
18225
|
+
markdownDescription: "Entity name. Contains action\u2192schema mappings.",
|
|
18226
|
+
additionalProperties: {
|
|
18227
|
+
type: "object",
|
|
18228
|
+
markdownDescription: 'Action schema (JSON Schema). Defines valid event data for this entity+action.\n\n```json\n{\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "price": { "type": "number" }\n },\n "required": ["name"]\n}\n```',
|
|
18229
|
+
defaultSnippets: [
|
|
18230
|
+
{
|
|
18231
|
+
label: "Object schema",
|
|
18232
|
+
description: "Schema with typed properties",
|
|
18233
|
+
body: {
|
|
18234
|
+
type: "object",
|
|
18235
|
+
properties: {
|
|
18236
|
+
"${1:name}": { type: "${2:string}" }
|
|
18237
|
+
}
|
|
18238
|
+
}
|
|
18239
|
+
}
|
|
18240
|
+
]
|
|
18241
|
+
},
|
|
18242
|
+
defaultSnippets: [
|
|
18243
|
+
{
|
|
18244
|
+
label: "Add action",
|
|
18245
|
+
description: "Action with event data schema",
|
|
18246
|
+
body: {
|
|
18247
|
+
"${1:action}": {
|
|
18248
|
+
type: "object",
|
|
18249
|
+
properties: {
|
|
18250
|
+
"${2:property}": { type: "${3:string}" }
|
|
18251
|
+
}
|
|
18252
|
+
}
|
|
18253
|
+
}
|
|
18254
|
+
}
|
|
18255
|
+
]
|
|
18256
|
+
},
|
|
18257
|
+
defaultSnippets: [
|
|
18258
|
+
{
|
|
18259
|
+
label: "Entity with action",
|
|
18260
|
+
description: "New entity with one action and properties",
|
|
18261
|
+
body: {
|
|
18262
|
+
"${1:entity}": {
|
|
18263
|
+
"${2:action}": {
|
|
18264
|
+
type: "object",
|
|
18265
|
+
properties: {
|
|
18266
|
+
"${3:property}": { type: "${4:string}" }
|
|
18267
|
+
}
|
|
18268
|
+
}
|
|
18269
|
+
}
|
|
18270
|
+
}
|
|
18271
|
+
}
|
|
18272
|
+
]
|
|
18273
|
+
};
|
|
18274
|
+
}
|
|
18275
|
+
|
|
18276
|
+
// src/utils/monaco-schema-variables.ts
|
|
18277
|
+
function getVariablesSchema() {
|
|
18278
|
+
return {
|
|
18279
|
+
type: "object",
|
|
18280
|
+
markdownDescription: 'Flow variables for `$var.name` interpolation. Values must be string, number, or boolean.\n\n```json\n{\n "measurementId": "G-XXXXXXXXXX",\n "debug": false,\n "batchSize": 10\n}\n```\n\nReference in any config value: `"$var.measurementId"`',
|
|
18281
|
+
additionalProperties: {
|
|
18282
|
+
oneOf: [{ type: "string" }, { type: "number" }, { type: "boolean" }]
|
|
18283
|
+
},
|
|
18284
|
+
defaultSnippets: [
|
|
18285
|
+
{
|
|
18286
|
+
label: "Add string variable",
|
|
18287
|
+
body: { "${1:name}": "${2:value}" }
|
|
18288
|
+
},
|
|
18289
|
+
{
|
|
18290
|
+
label: "Add boolean variable",
|
|
18291
|
+
body: { "${1:name}": "${2|true,false|}" }
|
|
18292
|
+
},
|
|
18293
|
+
{
|
|
18294
|
+
label: "Add number variable",
|
|
18295
|
+
body: { "${1:name}": 0 }
|
|
18296
|
+
}
|
|
18297
|
+
]
|
|
18298
|
+
};
|
|
18299
|
+
}
|
|
18300
|
+
|
|
18301
|
+
// src/utils/monaco-walkeros-markers.ts
|
|
18302
|
+
function validateWalkerOSReferences(text, context) {
|
|
18303
|
+
const issues = [];
|
|
18304
|
+
if (context.variables) {
|
|
18305
|
+
const varRegex = /\$var\.(\w+)/g;
|
|
18306
|
+
let match;
|
|
18307
|
+
while ((match = varRegex.exec(text)) !== null) {
|
|
18308
|
+
if (!(match[1] in context.variables)) {
|
|
18309
|
+
issues.push({
|
|
18310
|
+
message: `Unknown variable "$var.${match[1]}". Defined variables: ${Object.keys(context.variables).join(", ") || "none"}`,
|
|
18311
|
+
severity: "warning",
|
|
18312
|
+
startIndex: match.index,
|
|
18313
|
+
endIndex: match.index + match[0].length
|
|
18314
|
+
});
|
|
18315
|
+
}
|
|
18316
|
+
}
|
|
18317
|
+
}
|
|
18318
|
+
if (context.definitions) {
|
|
18319
|
+
const defRegex = /\$def\.(\w+)/g;
|
|
18320
|
+
let match;
|
|
18321
|
+
while ((match = defRegex.exec(text)) !== null) {
|
|
18322
|
+
if (!(match[1] in context.definitions)) {
|
|
18323
|
+
issues.push({
|
|
18324
|
+
message: `Unknown definition "$def.${match[1]}". Defined: ${Object.keys(context.definitions).join(", ") || "none"}`,
|
|
18325
|
+
severity: "warning",
|
|
18326
|
+
startIndex: match.index,
|
|
18327
|
+
endIndex: match.index + match[0].length
|
|
18328
|
+
});
|
|
18329
|
+
}
|
|
18330
|
+
}
|
|
18331
|
+
}
|
|
18332
|
+
if (context.secrets) {
|
|
18333
|
+
const secretRegex = /\$secret\.(\w+)/g;
|
|
18334
|
+
let match;
|
|
18335
|
+
while ((match = secretRegex.exec(text)) !== null) {
|
|
18336
|
+
if (!context.secrets.includes(match[1])) {
|
|
18337
|
+
issues.push({
|
|
18338
|
+
message: `Unknown secret "$secret.${match[1]}". Available: ${context.secrets.join(", ") || "none"}`,
|
|
18339
|
+
severity: "warning",
|
|
18340
|
+
startIndex: match.index,
|
|
18341
|
+
endIndex: match.index + match[0].length
|
|
18342
|
+
});
|
|
18343
|
+
}
|
|
18344
|
+
}
|
|
18345
|
+
}
|
|
18346
|
+
if (context.stepNames?.transformers) {
|
|
18347
|
+
const nextRegex = /"(?:next|before)"\s*:\s*"(\w+)"/g;
|
|
18348
|
+
let match;
|
|
18349
|
+
while ((match = nextRegex.exec(text)) !== null) {
|
|
18350
|
+
if (!context.stepNames.transformers.includes(match[1])) {
|
|
18351
|
+
issues.push({
|
|
18352
|
+
message: `Unknown transformer "${match[1]}". Available: ${context.stepNames.transformers.join(", ") || "none"}`,
|
|
18353
|
+
severity: "warning",
|
|
18354
|
+
startIndex: match.index,
|
|
18355
|
+
endIndex: match.index + match[0].length
|
|
18356
|
+
});
|
|
18357
|
+
}
|
|
18358
|
+
}
|
|
18359
|
+
}
|
|
18360
|
+
return issues;
|
|
18361
|
+
}
|
|
18362
|
+
|
|
18363
|
+
// src/utils/monaco-intellisense-flow-extractor.ts
|
|
18364
|
+
function extractFlowIntelliSenseContext(json2) {
|
|
18365
|
+
let parsed;
|
|
18366
|
+
try {
|
|
18367
|
+
parsed = JSON.parse(json2);
|
|
18368
|
+
} catch {
|
|
18369
|
+
return {};
|
|
18370
|
+
}
|
|
18371
|
+
if (!isFlowSetup(parsed)) return {};
|
|
18372
|
+
const variables = {};
|
|
18373
|
+
const definitions = {};
|
|
18374
|
+
const sources = [];
|
|
18375
|
+
const destinations = [];
|
|
18376
|
+
const transformers = [];
|
|
18377
|
+
const packages = [];
|
|
18378
|
+
const contractEntities = [];
|
|
18379
|
+
let platform;
|
|
18380
|
+
mergeVars(variables, parsed.variables);
|
|
18381
|
+
mergeDefs(definitions, parsed.definitions);
|
|
18382
|
+
extractContract(contractEntities, parsed.contract);
|
|
18383
|
+
for (const config of Object.values(parsed.flows)) {
|
|
18384
|
+
if (!isObject(config)) continue;
|
|
18385
|
+
if (!platform) {
|
|
18386
|
+
if ("web" in config) platform = "web";
|
|
18387
|
+
else if ("server" in config) platform = "server";
|
|
18388
|
+
}
|
|
18389
|
+
mergeVars(variables, config.variables);
|
|
18390
|
+
mergeDefs(definitions, config.definitions);
|
|
18391
|
+
extractContract(contractEntities, config.contract);
|
|
18392
|
+
if (isObject(config.sources)) {
|
|
18393
|
+
for (const [name, ref] of Object.entries(config.sources)) {
|
|
18394
|
+
sources.push(name);
|
|
18395
|
+
if (isObject(ref)) {
|
|
18396
|
+
mergeVars(variables, ref.variables);
|
|
18397
|
+
mergeDefs(definitions, ref.definitions);
|
|
18398
|
+
if (typeof ref.package === "string") {
|
|
18399
|
+
packages.push({
|
|
18400
|
+
package: ref.package,
|
|
18401
|
+
shortName: name,
|
|
18402
|
+
type: "source",
|
|
18403
|
+
platform: platform || "web"
|
|
18404
|
+
});
|
|
18405
|
+
}
|
|
18406
|
+
}
|
|
18407
|
+
}
|
|
18408
|
+
}
|
|
18409
|
+
if (isObject(config.destinations)) {
|
|
18410
|
+
for (const [name, ref] of Object.entries(config.destinations)) {
|
|
18411
|
+
destinations.push(name);
|
|
18412
|
+
if (isObject(ref)) {
|
|
18413
|
+
mergeVars(variables, ref.variables);
|
|
18414
|
+
mergeDefs(definitions, ref.definitions);
|
|
18415
|
+
if (typeof ref.package === "string") {
|
|
18416
|
+
packages.push({
|
|
18417
|
+
package: ref.package,
|
|
18418
|
+
shortName: name,
|
|
18419
|
+
type: "destination",
|
|
18420
|
+
platform: platform || "web"
|
|
18421
|
+
});
|
|
18422
|
+
}
|
|
18423
|
+
}
|
|
18424
|
+
}
|
|
18425
|
+
}
|
|
18426
|
+
if (isObject(config.transformers)) {
|
|
18427
|
+
for (const [name, ref] of Object.entries(config.transformers)) {
|
|
18428
|
+
transformers.push(name);
|
|
18429
|
+
if (isObject(ref)) {
|
|
18430
|
+
mergeVars(variables, ref.variables);
|
|
18431
|
+
mergeDefs(definitions, ref.definitions);
|
|
18432
|
+
if (typeof ref.package === "string") {
|
|
18433
|
+
packages.push({
|
|
18434
|
+
package: ref.package,
|
|
18435
|
+
shortName: name,
|
|
18436
|
+
type: "transformer",
|
|
18437
|
+
platform: platform || "web"
|
|
18438
|
+
});
|
|
18439
|
+
}
|
|
18440
|
+
}
|
|
18441
|
+
}
|
|
18442
|
+
}
|
|
18443
|
+
}
|
|
18444
|
+
const result = {
|
|
18445
|
+
variables,
|
|
18446
|
+
definitions,
|
|
18447
|
+
stepNames: { sources, destinations, transformers }
|
|
18448
|
+
};
|
|
18449
|
+
if (platform) result.platform = platform;
|
|
18450
|
+
if (packages.length > 0) result.packages = packages;
|
|
18451
|
+
if (contractEntities.length > 0) result.contract = contractEntities;
|
|
18452
|
+
return result;
|
|
18453
|
+
}
|
|
18454
|
+
function isObject(v) {
|
|
18455
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
18456
|
+
}
|
|
18457
|
+
function isFlowSetup(v) {
|
|
18458
|
+
return isObject(v) && "version" in v && "flows" in v && isObject(v.flows);
|
|
18459
|
+
}
|
|
18460
|
+
function isPrimitive(v) {
|
|
18461
|
+
return typeof v === "string" || typeof v === "number" || typeof v === "boolean";
|
|
18462
|
+
}
|
|
18463
|
+
function mergeVars(target, source) {
|
|
18464
|
+
if (!isObject(source)) return;
|
|
18465
|
+
for (const [k, v] of Object.entries(source)) {
|
|
18466
|
+
if (isPrimitive(v)) target[k] = v;
|
|
18467
|
+
}
|
|
18468
|
+
}
|
|
18469
|
+
function mergeDefs(target, source) {
|
|
18470
|
+
if (!isObject(source)) return;
|
|
18471
|
+
for (const [k, v] of Object.entries(source)) {
|
|
18472
|
+
target[k] = v;
|
|
18473
|
+
}
|
|
18474
|
+
}
|
|
18475
|
+
function extractContract(target, contract) {
|
|
18476
|
+
if (!isObject(contract)) return;
|
|
18477
|
+
for (const [key, value] of Object.entries(contract)) {
|
|
18478
|
+
if (key.startsWith("$") || !isObject(value)) continue;
|
|
18479
|
+
const existing = target.find((e) => e.entity === key);
|
|
18480
|
+
const actions = Object.keys(value);
|
|
18481
|
+
if (existing) {
|
|
18482
|
+
for (const a of actions) {
|
|
18483
|
+
if (!existing.actions.includes(a)) existing.actions.push(a);
|
|
18484
|
+
}
|
|
18485
|
+
} else {
|
|
18486
|
+
target.push({ entity: key, actions });
|
|
18487
|
+
}
|
|
18488
|
+
}
|
|
18489
|
+
}
|
|
17455
18490
|
export {
|
|
17456
18491
|
Alert,
|
|
17457
18492
|
ArchitectureFlow,
|
|
@@ -17474,7 +18509,6 @@ export {
|
|
|
17474
18509
|
Dropdown,
|
|
17475
18510
|
DropdownDivider,
|
|
17476
18511
|
DropdownItem,
|
|
17477
|
-
FlowDeployPanel,
|
|
17478
18512
|
FlowMap,
|
|
17479
18513
|
FlowSelector,
|
|
17480
18514
|
Footer,
|
|
@@ -17497,9 +18531,11 @@ export {
|
|
|
17497
18531
|
Preview,
|
|
17498
18532
|
PromotionPlayground,
|
|
17499
18533
|
PropertyTable,
|
|
18534
|
+
REFERENCE_PATTERNS,
|
|
17500
18535
|
Spinner,
|
|
17501
18536
|
SplitButton,
|
|
17502
18537
|
SubmitButton,
|
|
18538
|
+
applyWalkerOSDecorations,
|
|
17503
18539
|
captureDestinationPush,
|
|
17504
18540
|
cn,
|
|
17505
18541
|
createCaptureFn,
|
|
@@ -17507,16 +18543,31 @@ export {
|
|
|
17507
18543
|
createGtagDestination,
|
|
17508
18544
|
createPlausibleDestination,
|
|
17509
18545
|
createRawCapture,
|
|
18546
|
+
disposeWalkerOSProviders,
|
|
18547
|
+
enrichFlowSetupSchema,
|
|
18548
|
+
enrichSchema,
|
|
18549
|
+
extractFlowIntelliSenseContext,
|
|
18550
|
+
findWalkerOSReferences,
|
|
17510
18551
|
formatCapturedCalls,
|
|
18552
|
+
generateModelPath,
|
|
18553
|
+
getEnrichedContractSchema,
|
|
18554
|
+
getVariablesSchema,
|
|
17511
18555
|
initializeMonacoTypes,
|
|
17512
18556
|
lighthouseTheme,
|
|
17513
18557
|
loadPackageTypes,
|
|
17514
18558
|
loadTypeLibraryFromURL,
|
|
17515
18559
|
palenightTheme,
|
|
17516
18560
|
registerAllThemes,
|
|
18561
|
+
registerJsonSchema,
|
|
17517
18562
|
registerLighthouseTheme,
|
|
17518
18563
|
registerPalenightTheme,
|
|
18564
|
+
registerWalkerOSDecorationStyles,
|
|
18565
|
+
registerWalkerOSProviders,
|
|
17519
18566
|
registerWalkerOSTypes,
|
|
17520
|
-
|
|
18567
|
+
removeIntelliSenseContext,
|
|
18568
|
+
setIntelliSenseContext,
|
|
18569
|
+
unregisterJsonSchema,
|
|
18570
|
+
useDropdown,
|
|
18571
|
+
validateWalkerOSReferences
|
|
17521
18572
|
};
|
|
17522
18573
|
//# sourceMappingURL=index.mjs.map
|