bc-atlas 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,56 @@
1
+ direction: right
2
+ title: "Request processing flow" {
3
+ shape: text
4
+ near: top-center
5
+ style.font-size: 28
6
+ }
7
+
8
+ g0: "Data mutations" {
9
+ style.stroke-dash: 3
10
+ n5: "table 50100\nWarehouse Request" {
11
+ shape: rectangle
12
+ tooltip: "Inventory.al:8"
13
+ style.fill: "#DCEBFF"
14
+ style.stroke: "#2362A2"
15
+ }
16
+ }
17
+
18
+ g1: "Workflow" {
19
+ style.stroke-dash: 3
20
+ n0: "procedure\nNotifyRequestProcessed" {
21
+ shape: rectangle
22
+ tooltip: "Automation.al:8"
23
+ style.fill: "#F3F6FA"
24
+ style.stroke: "#55708F"
25
+ }
26
+ n4: "event\nOnRequestProcessed" {
27
+ shape: rectangle
28
+ tooltip: "Inventory.al:35"
29
+ style.fill: "#F5E5FF"
30
+ style.stroke: "#77449A"
31
+ }
32
+ n2: "procedure\nProcess\nentry" {
33
+ shape: rectangle
34
+ tooltip: "Inventory.al:23"
35
+ style.fill: "#F3F6FA"
36
+ style.stroke: "#55708F"
37
+ }
38
+ n1: "procedure\nSendNotification" {
39
+ shape: rectangle
40
+ tooltip: "Automation.al:13"
41
+ style.fill: "#F3F6FA"
42
+ style.stroke: "#55708F"
43
+ }
44
+ n3: "procedure\nValidateRequest" {
45
+ shape: rectangle
46
+ tooltip: "Inventory.al:30"
47
+ style.fill: "#F3F6FA"
48
+ style.stroke: "#55708F"
49
+ }
50
+ }
51
+
52
+ g1.n2 -> g1.n3: "calls #1 [definite]" {style.stroke: "#4C78A8"}
53
+ g1.n2 -> g0.n5: "Modify #2 [definite]" {style.stroke: "#D55E00"}
54
+ g1.n2 -> g1.n4: "calls #3 [definite]" {style.stroke: "#4C78A8"}
55
+ g1.n4 -> g1.n0: "dispatches event [inferred]" {style.stroke: "#A21CAF"; style.stroke-dash: 3}
56
+ g1.n0 -> g1.n1: "calls #1 [definite]" {style.stroke: "#4C78A8"}
@@ -0,0 +1,194 @@
1
+ <?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="v0.7.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 2230 819"><svg class="d2-3261078443 d2-svg" width="2230" height="819" viewBox="-23 -142 2230 819"><rect x="-23.000000" y="-142.000000" width="2230.000000" height="819.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
2
+ .d2-3261078443 .text {
3
+ font-family: "d2-3261078443-font-regular";
4
+ }
5
+ @font-face {
6
+ font-family: d2-3261078443-font-regular;
7
+ src: url("data:application/font-woff;base64,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");
8
+ }
9
+ .appendix-icon {
10
+ filter: drop-shadow(0px 0px 32px rgba(31, 36, 58, 0.1));
11
+ }
12
+ .d2-3261078443 .text-bold {
13
+ font-family: "d2-3261078443-font-bold";
14
+ }
15
+ @font-face {
16
+ font-family: d2-3261078443-font-bold;
17
+ src: url("data:application/font-woff;base64,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");
18
+ }
19
+ .d2-3261078443 .text-italic {
20
+ font-family: "d2-3261078443-font-italic";
21
+ }
22
+ @font-face {
23
+ font-family: d2-3261078443-font-italic;
24
+ src: url("data:application/font-woff;base64,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");
25
+ }]]></style><style type="text/css"><![CDATA[.shape {
26
+ shape-rendering: geometricPrecision;
27
+ stroke-linejoin: round;
28
+ }
29
+ .connection {
30
+ stroke-linecap: round;
31
+ stroke-linejoin: round;
32
+ }
33
+ .blend {
34
+ mix-blend-mode: multiply;
35
+ opacity: 0.5;
36
+ }
37
+
38
+ .d2-3261078443 .fill-N1{fill:#0A0F25;}
39
+ .d2-3261078443 .fill-N2{fill:#676C7E;}
40
+ .d2-3261078443 .fill-N3{fill:#9499AB;}
41
+ .d2-3261078443 .fill-N4{fill:#CFD2DD;}
42
+ .d2-3261078443 .fill-N5{fill:#DEE1EB;}
43
+ .d2-3261078443 .fill-N6{fill:#EEF1F8;}
44
+ .d2-3261078443 .fill-N7{fill:#FFFFFF;}
45
+ .d2-3261078443 .fill-B1{fill:#0D32B2;}
46
+ .d2-3261078443 .fill-B2{fill:#0D32B2;}
47
+ .d2-3261078443 .fill-B3{fill:#E3E9FD;}
48
+ .d2-3261078443 .fill-B4{fill:#E3E9FD;}
49
+ .d2-3261078443 .fill-B5{fill:#EDF0FD;}
50
+ .d2-3261078443 .fill-B6{fill:#F7F8FE;}
51
+ .d2-3261078443 .fill-AA2{fill:#4A6FF3;}
52
+ .d2-3261078443 .fill-AA4{fill:#EDF0FD;}
53
+ .d2-3261078443 .fill-AA5{fill:#F7F8FE;}
54
+ .d2-3261078443 .fill-AB4{fill:#EDF0FD;}
55
+ .d2-3261078443 .fill-AB5{fill:#F7F8FE;}
56
+ .d2-3261078443 .stroke-N1{stroke:#0A0F25;}
57
+ .d2-3261078443 .stroke-N2{stroke:#676C7E;}
58
+ .d2-3261078443 .stroke-N3{stroke:#9499AB;}
59
+ .d2-3261078443 .stroke-N4{stroke:#CFD2DD;}
60
+ .d2-3261078443 .stroke-N5{stroke:#DEE1EB;}
61
+ .d2-3261078443 .stroke-N6{stroke:#EEF1F8;}
62
+ .d2-3261078443 .stroke-N7{stroke:#FFFFFF;}
63
+ .d2-3261078443 .stroke-B1{stroke:#0D32B2;}
64
+ .d2-3261078443 .stroke-B2{stroke:#0D32B2;}
65
+ .d2-3261078443 .stroke-B3{stroke:#E3E9FD;}
66
+ .d2-3261078443 .stroke-B4{stroke:#E3E9FD;}
67
+ .d2-3261078443 .stroke-B5{stroke:#EDF0FD;}
68
+ .d2-3261078443 .stroke-B6{stroke:#F7F8FE;}
69
+ .d2-3261078443 .stroke-AA2{stroke:#4A6FF3;}
70
+ .d2-3261078443 .stroke-AA4{stroke:#EDF0FD;}
71
+ .d2-3261078443 .stroke-AA5{stroke:#F7F8FE;}
72
+ .d2-3261078443 .stroke-AB4{stroke:#EDF0FD;}
73
+ .d2-3261078443 .stroke-AB5{stroke:#F7F8FE;}
74
+ .d2-3261078443 .background-color-N1{background-color:#0A0F25;}
75
+ .d2-3261078443 .background-color-N2{background-color:#676C7E;}
76
+ .d2-3261078443 .background-color-N3{background-color:#9499AB;}
77
+ .d2-3261078443 .background-color-N4{background-color:#CFD2DD;}
78
+ .d2-3261078443 .background-color-N5{background-color:#DEE1EB;}
79
+ .d2-3261078443 .background-color-N6{background-color:#EEF1F8;}
80
+ .d2-3261078443 .background-color-N7{background-color:#FFFFFF;}
81
+ .d2-3261078443 .background-color-B1{background-color:#0D32B2;}
82
+ .d2-3261078443 .background-color-B2{background-color:#0D32B2;}
83
+ .d2-3261078443 .background-color-B3{background-color:#E3E9FD;}
84
+ .d2-3261078443 .background-color-B4{background-color:#E3E9FD;}
85
+ .d2-3261078443 .background-color-B5{background-color:#EDF0FD;}
86
+ .d2-3261078443 .background-color-B6{background-color:#F7F8FE;}
87
+ .d2-3261078443 .background-color-AA2{background-color:#4A6FF3;}
88
+ .d2-3261078443 .background-color-AA4{background-color:#EDF0FD;}
89
+ .d2-3261078443 .background-color-AA5{background-color:#F7F8FE;}
90
+ .d2-3261078443 .background-color-AB4{background-color:#EDF0FD;}
91
+ .d2-3261078443 .background-color-AB5{background-color:#F7F8FE;}
92
+ .d2-3261078443 .color-N1{color:#0A0F25;}
93
+ .d2-3261078443 .color-N2{color:#676C7E;}
94
+ .d2-3261078443 .color-N3{color:#9499AB;}
95
+ .d2-3261078443 .color-N4{color:#CFD2DD;}
96
+ .d2-3261078443 .color-N5{color:#DEE1EB;}
97
+ .d2-3261078443 .color-N6{color:#EEF1F8;}
98
+ .d2-3261078443 .color-N7{color:#FFFFFF;}
99
+ .d2-3261078443 .color-B1{color:#0D32B2;}
100
+ .d2-3261078443 .color-B2{color:#0D32B2;}
101
+ .d2-3261078443 .color-B3{color:#E3E9FD;}
102
+ .d2-3261078443 .color-B4{color:#E3E9FD;}
103
+ .d2-3261078443 .color-B5{color:#EDF0FD;}
104
+ .d2-3261078443 .color-B6{color:#F7F8FE;}
105
+ .d2-3261078443 .color-AA2{color:#4A6FF3;}
106
+ .d2-3261078443 .color-AA4{color:#EDF0FD;}
107
+ .d2-3261078443 .color-AA5{color:#F7F8FE;}
108
+ .d2-3261078443 .color-AB4{color:#EDF0FD;}
109
+ .d2-3261078443 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3261078443);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-3261078443);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3261078443);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3261078443);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3261078443);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3261078443);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3261078443);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3261078443);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="dGl0bGU="><g class="shape" ></g><text x="1091.500000" y="-13.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">Request processing flow</text></g><g class="ZzA="><g class="shape" ><rect x="648.000000" y="56.000000" width="245.000000" height="142.000000" stroke="#0D32B2" fill="#E3E9FD" class=" stroke-B2 fill-B4" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" /></g><text x="770.500000" y="43.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">Data mutations</text></g><g class="ZzE="><g class="shape" ><rect x="78.000000" y="284.000000" width="2028.000000" height="292.000000" stroke="#0D32B2" fill="#E3E9FD" class=" stroke-B2 fill-B4" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" /></g><text x="1092.000000" y="271.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">Workflow</text></g><g class="ZzAubjU="><g class="shape" ><rect x="678.000000" y="86.000000" width="185.000000" height="82.000000" stroke="#2362A2" fill="#DCEBFF" style="stroke-width:2;" /></g><text x="770.500000" y="124.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px"><tspan x="770.500000" dy="0.000000">table 50100</tspan><tspan x="770.500000" dy="18.500000">Warehouse Request</tspan></text><title>Inventory.al:8</title></g><g class="ZzEubjA="><g class="shape" ><rect x="1366.000000" y="322.000000" width="218.000000" height="82.000000" stroke="#55708F" fill="#F3F6FA" style="stroke-width:2;" /></g><text x="1475.000000" y="360.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px"><tspan x="1475.000000" dy="0.000000">procedure</tspan><tspan x="1475.000000" dy="18.500000">NotifyRequestProcessed</tspan></text><title>Automation.al:8</title></g><g class="ZzEubjQ="><g class="shape" ><rect x="673.000000" y="322.000000" width="195.000000" height="82.000000" stroke="#77449A" fill="#F5E5FF" style="stroke-width:2;" /></g><text x="770.500000" y="360.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px"><tspan x="770.500000" dy="0.000000">event</tspan><tspan x="770.500000" dy="18.500000">OnRequestProcessed</tspan></text><title>Inventory.al:35</title></g><g class="ZzEubjI="><g class="shape" ><rect x="108.000000" y="314.000000" width="118.000000" height="98.000000" stroke="#55708F" fill="#F3F6FA" style="stroke-width:2;" /></g><text x="167.000000" y="352.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px"><tspan x="167.000000" dy="0.000000">procedure</tspan><tspan x="167.000000" dy="17.666667">Process</tspan><tspan x="167.000000" dy="17.666667">entry</tspan></text><title>Inventory.al:23</title></g><g class="ZzEubjE="><g class="shape" ><rect x="1911.000000" y="322.000000" width="165.000000" height="82.000000" stroke="#55708F" fill="#F3F6FA" style="stroke-width:2;" /></g><text x="1993.500000" y="360.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px"><tspan x="1993.500000" dy="0.000000">procedure</tspan><tspan x="1993.500000" dy="18.500000">SendNotification</tspan></text><title>Automation.al:13</title></g><g class="ZzEubjM="><g class="shape" ><rect x="689.000000" y="464.000000" width="163.000000" height="82.000000" stroke="#55708F" fill="#F3F6FA" style="stroke-width:2;" /></g><text x="770.500000" y="502.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px"><tspan x="770.500000" dy="0.000000">procedure</tspan><tspan x="770.500000" dy="18.500000">ValidateRequest</tspan></text><title>Inventory.al:30</title></g><g class="ZzEuKG4yIC0mZ3Q7IG4zKVswXQ=="><marker id="mk-d2-3261078443-1164920081" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#4C78A8" class="connection" stroke-width="2" /> </marker><path d="M 228.196944 400.643473 C 361.700012 483.916992 590.299988 505.000000 685.500000 505.000000" stroke="#4C78A8" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3261078443-1164920081)" mask="url(#d2-3261078443)" /><text x="446.000000" y="497.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">calls #1 [definite]</text></g><g class="KGcxLm4yIC0mZ3Q7IGcwLm41KVswXQ=="><marker id="mk-d2-3261078443-802794299" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#D55E00" class="connection" stroke-width="2" /> </marker><path d="M 228.453887 349.755013 C 361.700012 320.635986 594.500000 284.250000 707.671573 171.078427" stroke="#D55E00" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3261078443-802794299)" mask="url(#d2-3261078443)" /><text x="490.500000" y="306.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">Modify #2 [definite]</text></g><g class="ZzEuKG4yIC0mZ3Q7IG40KVswXQ=="><path d="M 228.500000 363.000000 C 361.700012 363.000000 587.099976 363.000000 669.500000 363.000000" stroke="#4C78A8" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3261078443-1164920081)" mask="url(#d2-3261078443)" /><text x="450.000000" y="369.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">calls #3 [definite]</text></g><g class="ZzEuKG40IC0mZ3Q7IG4wKVswXQ=="><marker id="mk-d2-3261078443-1522260044" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#A21CAF" class="connection" stroke-width="2" /> </marker><path d="M 869.500000 363.000000 C 953.900024 363.000000 1209.500000 363.000000 1361.500000 363.000000" stroke="#A21CAF" fill="none" class="connection" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-3261078443-1522260044)" mask="url(#d2-3261078443)" /><text x="1116.500000" y="369.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">dispatches event [inferred]</text></g><g class="ZzEuKG4wIC0mZ3Q7IG4xKVswXQ=="><path d="M 1586.500000 363.000000 C 1714.500000 363.000000 1779.699951 363.000000 1906.500000 363.000000" stroke="#4C78A8" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3261078443-1164920081)" mask="url(#d2-3261078443)" /><text x="1748.000000" y="369.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">calls #1 [definite]</text></g><g transform="translate(847 70)" class="appendix-icon"><title>Inventory.al:8</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
110
+ <g clip-path="url(#clip0_3427_35082111-d2-3261078443-M4YC43RV)">
111
+ <path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
112
+ <path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
113
+ <path d="M16 19.998V15.998" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
114
+ <path d="M16 12H16.0098" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
115
+ </g>
116
+ <defs>
117
+ <clipPath id="clip0_3427_35082111-d2-3261078443-M4YC43RV">
118
+ <rect width="32" height="32" fill="white"/>
119
+ </clipPath>
120
+ </defs>
121
+ </svg>
122
+ </g><g transform="translate(1568 306)" class="appendix-icon"><title>Automation.al:8</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
123
+ <g clip-path="url(#clip0_3427_35082111-d2-3261078443-M4YS43RQ)">
124
+ <path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
125
+ <path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
126
+ <path d="M16 19.998V15.998" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
127
+ <path d="M16 12H16.0098" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
128
+ </g>
129
+ <defs>
130
+ <clipPath id="clip0_3427_35082111-d2-3261078443-M4YS43RQ">
131
+ <rect width="32" height="32" fill="white"/>
132
+ </clipPath>
133
+ </defs>
134
+ </svg>
135
+ </g><g transform="translate(852 306)" class="appendix-icon"><title>Inventory.al:35</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
136
+ <g clip-path="url(#clip0_3427_35082111-d2-3261078443-M4YS43RU)">
137
+ <path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
138
+ <path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
139
+ <path d="M16 19.998V15.998" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
140
+ <path d="M16 12H16.0098" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
141
+ </g>
142
+ <defs>
143
+ <clipPath id="clip0_3427_35082111-d2-3261078443-M4YS43RU">
144
+ <rect width="32" height="32" fill="white"/>
145
+ </clipPath>
146
+ </defs>
147
+ </svg>
148
+ </g><g transform="translate(210 298)" class="appendix-icon"><title>Inventory.al:23</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
149
+ <g clip-path="url(#clip0_3427_35082111-d2-3261078443-M4YS43RS)">
150
+ <path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
151
+ <path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
152
+ <path d="M16 19.998V15.998" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
153
+ <path d="M16 12H16.0098" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
154
+ </g>
155
+ <defs>
156
+ <clipPath id="clip0_3427_35082111-d2-3261078443-M4YS43RS">
157
+ <rect width="32" height="32" fill="white"/>
158
+ </clipPath>
159
+ </defs>
160
+ </svg>
161
+ </g><g transform="translate(2060 306)" class="appendix-icon"><title>Automation.al:13</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
162
+ <g clip-path="url(#clip0_3427_35082111-d2-3261078443-M4YS43RR)">
163
+ <path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
164
+ <path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
165
+ <path d="M16 19.998V15.998" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
166
+ <path d="M16 12H16.0098" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
167
+ </g>
168
+ <defs>
169
+ <clipPath id="clip0_3427_35082111-d2-3261078443-M4YS43RR">
170
+ <rect width="32" height="32" fill="white"/>
171
+ </clipPath>
172
+ </defs>
173
+ </svg>
174
+ </g><g transform="translate(836 448)" class="appendix-icon"><title>Inventory.al:30</title><svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
175
+ <g clip-path="url(#clip0_3427_35082111-d2-3261078443-M4YS43RT)">
176
+ <path d="M16 31.1109C24.3456 31.1109 31.1111 24.3454 31.1111 15.9998C31.1111 7.65415 24.3456 0.888672 16 0.888672C7.65436 0.888672 0.888885 7.65415 0.888885 15.9998C0.888885 24.3454 7.65436 31.1109 16 31.1109Z" fill="white" stroke="#DEE1EB"/>
177
+ <path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
178
+ <path d="M16 19.998V15.998" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
179
+ <path d="M16 12H16.0098" stroke="#2E3346" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
180
+ </g>
181
+ <defs>
182
+ <clipPath id="clip0_3427_35082111-d2-3261078443-M4YS43RT">
183
+ <rect width="32" height="32" fill="white"/>
184
+ </clipPath>
185
+ </defs>
186
+ </svg>
187
+ </g><mask id="d2-3261078443" maskUnits="userSpaceOnUse" x="-23" y="-142" width="2230" height="819">
188
+ <rect x="-23" y="-142" width="2230" height="819" fill="white"></rect>
189
+ <rect x="388.000000" y="481.000000" width="116" height="21" fill="black"></rect>
190
+ <rect x="426.000000" y="290.000000" width="129" height="21" fill="black"></rect>
191
+ <rect x="392.000000" y="353.000000" width="116" height="21" fill="black"></rect>
192
+ <rect x="1027.000000" y="353.000000" width="179" height="21" fill="black"></rect>
193
+ <rect x="1690.000000" y="353.000000" width="116" height="21" fill="black"></rect>
194
+ </mask></svg></svg>
@@ -0,0 +1,24 @@
1
+ namespace BCA.Example.Automation;
2
+
3
+ using BCA.Example.Inventory;
4
+
5
+ codeunit 50120 "Warehouse Notifications"
6
+ {
7
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Warehouse Processor", 'OnRequestProcessed', '', false, false)]
8
+ local procedure NotifyRequestProcessed()
9
+ begin
10
+ SendNotification();
11
+ end;
12
+
13
+ local procedure SendNotification()
14
+ begin
15
+ end;
16
+ }
17
+
18
+ permissionset 50121 "WAREHOUSE PROCESS"
19
+ {
20
+ Assignable = true;
21
+ Permissions =
22
+ tabledata "Warehouse Request" = RIMD,
23
+ codeunit "Warehouse Processor" = X;
24
+ }
@@ -0,0 +1,46 @@
1
+ namespace BCA.Example.Inventory;
2
+
3
+ interface "Handles Warehouse Activity"
4
+ {
5
+ procedure Process();
6
+ }
7
+
8
+ table 50100 "Warehouse Request"
9
+ {
10
+ fields
11
+ {
12
+ field(1; "Entry No."; Integer) { }
13
+ field(2; Description; Text[100]) { }
14
+ field(3; Processed; Boolean) { }
15
+ }
16
+ }
17
+
18
+ codeunit 50101 "Warehouse Processor" implements "Handles Warehouse Activity"
19
+ {
20
+ var
21
+ Request: Record "Warehouse Request";
22
+
23
+ procedure Process()
24
+ begin
25
+ ValidateRequest();
26
+ Request.Modify();
27
+ OnRequestProcessed();
28
+ end;
29
+
30
+ local procedure ValidateRequest()
31
+ begin
32
+ end;
33
+
34
+ [IntegrationEvent(false, false)]
35
+ procedure OnRequestProcessed()
36
+ begin
37
+ end;
38
+ }
39
+
40
+ enum 50102 "Warehouse Handler" implements "Handles Warehouse Activity"
41
+ {
42
+ value(0; Default)
43
+ {
44
+ Implementation = "Handles Warehouse Activity" = "Warehouse Processor";
45
+ }
46
+ }
@@ -0,0 +1,29 @@
1
+ namespace BCA.Example.UI;
2
+
3
+ using BCA.Example.Inventory;
4
+
5
+ page 50110 "Warehouse Requests"
6
+ {
7
+ PageType = List;
8
+ SourceTable = "Warehouse Request";
9
+
10
+ actions
11
+ {
12
+ area(Processing)
13
+ {
14
+ action(ProcessRequest)
15
+ {
16
+ trigger OnAction()
17
+ var
18
+ Processor: Codeunit "Warehouse Processor";
19
+ begin
20
+ Processor.Process();
21
+ end;
22
+ }
23
+ }
24
+ }
25
+ }
26
+
27
+ pageextension 50111 "Warehouse Request Ext." extends "Warehouse Requests"
28
+ {
29
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "8ca2f385-ffba-4be3-94ad-84feaae0c397",
3
+ "name": "BC Atlas Warehouse Example",
4
+ "publisher": "BC Atlas contributors",
5
+ "version": "1.0.0.0",
6
+ "runtime": "13.0",
7
+ "dependencies": []
8
+ }
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "bc-atlas",
3
+ "version": "0.5.0",
4
+ "description": "BC Atlas generates D2 architecture diagrams and executable user documentation for Microsoft Dynamics 365 Business Central.",
5
+ "homepage": "https://github.com/SchulzOli/ALD2Tree#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/SchulzOli/ALD2Tree/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/SchulzOli/ALD2Tree.git"
12
+ },
13
+ "type": "module",
14
+ "bin": {
15
+ "bca": "./src/cli.js"
16
+ },
17
+ "files": [
18
+ "src/",
19
+ "scripts/",
20
+ "vendor/",
21
+ "examples/",
22
+ "docs/al-ui-test-documentation.md",
23
+ "docs/cli-reference.md",
24
+ ".bca.example.json",
25
+ "LICENSE",
26
+ "README.md",
27
+ "THIRD_PARTY_NOTICES.md"
28
+ ],
29
+ "scripts": {
30
+ "start": "node ./src/cli.js",
31
+ "test": "node --test",
32
+ "check": "node --check src/cli.js && node --check src/analyzer.js && node --check src/config.js && node --check src/d2.js && node --check src/insights.js && node --check src/resolver.js && node --check src/svg.js && node --check src/views.js && node --check src/workflow.js && node --check src/docs/cli.js && node --check src/docs/markdown.js && node --check src/docs/al-ui-source.js && node --check scripts/generate-examples.js",
33
+ "examples": "node ./scripts/generate-examples.js",
34
+ "prepack": "npm run check && npm test",
35
+ "update:grammar": "node ./scripts/update-grammar.js"
36
+ },
37
+ "keywords": [
38
+ "al",
39
+ "business-central",
40
+ "d2",
41
+ "architecture",
42
+ "dependency-graph",
43
+ "documentation",
44
+ "dynamics-365",
45
+ "static-analysis",
46
+ "tree-sitter"
47
+ ],
48
+ "license": "MIT",
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "engines": {
53
+ "node": ">=20"
54
+ },
55
+ "dependencies": {
56
+ "@terrastruct/d2": "^0.1.33",
57
+ "web-tree-sitter": "^0.25.10"
58
+ }
59
+ }
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { spawn } from "node:child_process";
4
+ import fs from "node:fs/promises";
5
+ import path from "node:path";
6
+ import process from "node:process";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
10
+ const input = path.join(root, "examples", "warehouse-app");
11
+ const output = path.join(root, "examples", "output");
12
+ const cli = path.join(root, "src", "cli.js");
13
+
14
+ const diagrams = [
15
+ ["project", ["--view", "project", "--title", "Warehouse architecture"]],
16
+ [
17
+ "workflow",
18
+ [
19
+ "--view",
20
+ "workflow",
21
+ "--entry",
22
+ "procedure:Warehouse Processor.Process",
23
+ "--title",
24
+ "Request processing flow"
25
+ ]
26
+ ],
27
+ ["ui", ["--view", "ui", "--focus", "Warehouse", "--title", "Warehouse UI composition"]]
28
+ ];
29
+
30
+ function run(arguments_) {
31
+ return new Promise((resolve, reject) => {
32
+ const child = spawn(process.execPath, [cli, ...arguments_], {
33
+ cwd: root,
34
+ stdio: "inherit"
35
+ });
36
+ child.on("error", reject);
37
+ child.on("exit", (code) => {
38
+ if (code === 0) resolve();
39
+ else reject(new Error(`BC Atlas exited with code ${code}`));
40
+ });
41
+ });
42
+ }
43
+
44
+ await fs.mkdir(output, { recursive: true });
45
+ for (const [name, options] of diagrams) {
46
+ await run(["graph", input, ...options, "--output", path.join(output, `${name}.d2`)]);
47
+ await run([
48
+ "graph",
49
+ input,
50
+ ...options,
51
+ "--format",
52
+ "svg",
53
+ "--output",
54
+ path.join(output, `${name}.svg`)
55
+ ]);
56
+ }
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from "node:fs/promises";
4
+
5
+ const tag = process.argv[2] ?? "v3.0.1";
6
+ if (!/^v\d+\.\d+\.\d+$/u.test(tag)) {
7
+ console.error("Usage: npm run update:grammar -- vX.Y.Z");
8
+ process.exit(2);
9
+ }
10
+
11
+ const url =
12
+ `https://raw.githubusercontent.com/SShadowS/tree-sitter-al/${tag}/tree-sitter-al.wasm`;
13
+ const destination = new URL("../vendor/tree-sitter-al.wasm", import.meta.url);
14
+ const response = await fetch(url);
15
+ if (!response.ok) {
16
+ throw new Error(`Unable to download ${url}: HTTP ${response.status}`);
17
+ }
18
+
19
+ const bytes = new Uint8Array(await response.arrayBuffer());
20
+ await fs.mkdir(new URL("../vendor/", import.meta.url), { recursive: true });
21
+ await fs.writeFile(destination, bytes);
22
+ console.log(`Updated vendor/tree-sitter-al.wasm from ${tag} (${bytes.length} bytes)`);