@powerhousedao/network-admin 0.0.52 → 0.0.54

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.
Files changed (45) hide show
  1. package/dist/style.css +74 -0
  2. package/dist/subgraphs/builders-addon/index.d.ts +11 -0
  3. package/dist/subgraphs/builders-addon/index.d.ts.map +1 -0
  4. package/dist/subgraphs/builders-addon/index.js +11 -0
  5. package/dist/subgraphs/builders-addon/resolvers.d.ts +3 -0
  6. package/dist/subgraphs/builders-addon/resolvers.d.ts.map +1 -0
  7. package/dist/subgraphs/builders-addon/resolvers.js +280 -0
  8. package/dist/subgraphs/builders-addon/schema.d.ts +3 -0
  9. package/dist/subgraphs/builders-addon/schema.d.ts.map +1 -0
  10. package/dist/subgraphs/builders-addon/schema.js +209 -0
  11. package/dist/subgraphs/index.d.ts +1 -0
  12. package/dist/subgraphs/index.d.ts.map +1 -1
  13. package/dist/subgraphs/index.js +1 -0
  14. package/dist/subgraphs/workstreams/resolvers.d.ts.map +1 -1
  15. package/dist/subgraphs/workstreams/resolvers.js +21 -5
  16. package/dist/subgraphs/workstreams/schema.d.ts.map +1 -1
  17. package/dist/subgraphs/workstreams/schema.js +1 -0
  18. package/package.json +3 -3
  19. package/dist/editors/payment-terms/basic-terms-tab.d.ts +0 -10
  20. package/dist/editors/payment-terms/basic-terms-tab.d.ts.map +0 -1
  21. package/dist/editors/payment-terms/basic-terms-tab.js +0 -89
  22. package/dist/editors/payment-terms/clauses-tab.d.ts +0 -12
  23. package/dist/editors/payment-terms/clauses-tab.d.ts.map +0 -1
  24. package/dist/editors/payment-terms/clauses-tab.js +0 -214
  25. package/dist/editors/payment-terms/components/EditName.d.ts +0 -3
  26. package/dist/editors/payment-terms/components/EditName.d.ts.map +0 -1
  27. package/dist/editors/payment-terms/components/EditName.js +0 -31
  28. package/dist/editors/payment-terms/components/styles.d.ts +0 -2
  29. package/dist/editors/payment-terms/components/styles.d.ts.map +0 -1
  30. package/dist/editors/payment-terms/components/styles.js +0 -741
  31. package/dist/editors/payment-terms/cost-materials-tab.d.ts +0 -10
  32. package/dist/editors/payment-terms/cost-materials-tab.d.ts.map +0 -1
  33. package/dist/editors/payment-terms/cost-materials-tab.js +0 -63
  34. package/dist/editors/payment-terms/escrow-tab.d.ts +0 -10
  35. package/dist/editors/payment-terms/escrow-tab.d.ts.map +0 -1
  36. package/dist/editors/payment-terms/escrow-tab.js +0 -57
  37. package/dist/editors/payment-terms/evaluation-tab.d.ts +0 -10
  38. package/dist/editors/payment-terms/evaluation-tab.d.ts.map +0 -1
  39. package/dist/editors/payment-terms/evaluation-tab.js +0 -72
  40. package/dist/editors/payment-terms/milestones-tab.d.ts +0 -10
  41. package/dist/editors/payment-terms/milestones-tab.d.ts.map +0 -1
  42. package/dist/editors/payment-terms/milestones-tab.js +0 -214
  43. package/dist/editors/payment-terms/retainer-tab.d.ts +0 -10
  44. package/dist/editors/payment-terms/retainer-tab.d.ts.map +0 -1
  45. package/dist/editors/payment-terms/retainer-tab.js +0 -69
package/dist/style.css CHANGED
@@ -1792,9 +1792,15 @@
1792
1792
  .h-10 {
1793
1793
  height: calc(var(--spacing) * 10);
1794
1794
  }
1795
+ .h-\[60px\] {
1796
+ height: 60px;
1797
+ }
1795
1798
  .h-\[100px\] {
1796
1799
  height: 100px;
1797
1800
  }
1801
+ .h-full {
1802
+ height: 100%;
1803
+ }
1798
1804
  .w-0 {
1799
1805
  width: calc(var(--spacing) * 0);
1800
1806
  }
@@ -1816,6 +1822,9 @@
1816
1822
  .w-80 {
1817
1823
  width: calc(var(--spacing) * 80);
1818
1824
  }
1825
+ .w-\[60px\] {
1826
+ width: 60px;
1827
+ }
1819
1828
  .w-\[100px\] {
1820
1829
  width: 100px;
1821
1830
  }
@@ -1828,18 +1837,30 @@
1828
1837
  .w-\[300px\] {
1829
1838
  width: 300px;
1830
1839
  }
1840
+ .w-\[400px\] {
1841
+ width: 400px;
1842
+ }
1831
1843
  .w-full {
1832
1844
  width: 100%;
1833
1845
  }
1834
1846
  .max-w-\[200px\] {
1835
1847
  max-width: 200px;
1836
1848
  }
1849
+ .max-w-\[350px\] {
1850
+ max-width: 350px;
1851
+ }
1852
+ .min-w-0 {
1853
+ min-width: calc(var(--spacing) * 0);
1854
+ }
1837
1855
  .min-w-\[100px\] {
1838
1856
  min-width: 100px;
1839
1857
  }
1840
1858
  .flex-1 {
1841
1859
  flex: 1;
1842
1860
  }
1861
+ .flex-shrink-0 {
1862
+ flex-shrink: 0;
1863
+ }
1843
1864
  .-translate-x-1\/2 {
1844
1865
  --tw-translate-x: calc(calc(1/2 * 100%) * -1);
1845
1866
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1895,6 +1916,9 @@
1895
1916
  .gap-2 {
1896
1917
  gap: calc(var(--spacing) * 2);
1897
1918
  }
1919
+ .gap-3 {
1920
+ gap: calc(var(--spacing) * 3);
1921
+ }
1898
1922
  .gap-4 {
1899
1923
  gap: calc(var(--spacing) * 4);
1900
1924
  }
@@ -1917,6 +1941,9 @@
1917
1941
  text-overflow: ellipsis;
1918
1942
  white-space: nowrap;
1919
1943
  }
1944
+ .overflow-hidden {
1945
+ overflow: hidden;
1946
+ }
1920
1947
  .overflow-y-auto {
1921
1948
  overflow-y: auto;
1922
1949
  }
@@ -2269,6 +2296,7 @@
2269
2296
  "Courier New", monospace;
2270
2297
  --color-red-50: oklch(97.1% 0.013 17.38);
2271
2298
  --color-red-100: hsl(3 82% 96%);
2299
+ --color-red-300: hsl(6 82% 87%);
2272
2300
  --color-red-500: hsl(5 80% 78%);
2273
2301
  --color-red-600: hsl(4 81% 74%);
2274
2302
  --color-orange-500: hsl(33 99% 70%);
@@ -2344,6 +2372,7 @@
2344
2372
  --tracking-wider: 0.05em;
2345
2373
  --leading-relaxed: 1.625;
2346
2374
  --radius-sm: 0.25rem;
2375
+ --radius-md: 0.375rem;
2347
2376
  --radius-lg: 0.5rem;
2348
2377
  --radius-xl: 0.75rem;
2349
2378
  --radius-2xl: 1rem;
@@ -2557,6 +2586,9 @@
2557
2586
  .mt-1 {
2558
2587
  margin-top: calc(var(--spacing) * 1);
2559
2588
  }
2589
+ .mt-2 {
2590
+ margin-top: calc(var(--spacing) * 2);
2591
+ }
2560
2592
  .mt-3 {
2561
2593
  margin-top: calc(var(--spacing) * 3);
2562
2594
  }
@@ -2593,6 +2625,9 @@
2593
2625
  .inline-flex {
2594
2626
  display: inline-flex;
2595
2627
  }
2628
+ .table {
2629
+ display: table;
2630
+ }
2596
2631
  .h-2 {
2597
2632
  height: calc(var(--spacing) * 2);
2598
2633
  }
@@ -2662,6 +2697,9 @@
2662
2697
  .flex-shrink-0 {
2663
2698
  flex-shrink: 0;
2664
2699
  }
2700
+ .border-collapse {
2701
+ border-collapse: collapse;
2702
+ }
2665
2703
  .-translate-y-1\/2 {
2666
2704
  --tw-translate-y: calc(calc(1/2 * 100%) * -1);
2667
2705
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -2678,6 +2716,9 @@
2678
2716
  .grid-cols-1 {
2679
2717
  grid-template-columns: repeat(1, minmax(0, 1fr));
2680
2718
  }
2719
+ .flex-col {
2720
+ flex-direction: column;
2721
+ }
2681
2722
  .flex-wrap {
2682
2723
  flex-wrap: wrap;
2683
2724
  }
@@ -2756,6 +2797,9 @@
2756
2797
  .rounded-lg {
2757
2798
  border-radius: var(--radius-lg);
2758
2799
  }
2800
+ .rounded-md {
2801
+ border-radius: var(--radius-md);
2802
+ }
2759
2803
  .rounded-sm {
2760
2804
  border-radius: var(--radius-sm);
2761
2805
  }
@@ -2797,6 +2841,9 @@
2797
2841
  .border-indigo-100 {
2798
2842
  border-color: var(--color-indigo-100);
2799
2843
  }
2844
+ .border-red-300 {
2845
+ border-color: var(--color-red-300);
2846
+ }
2800
2847
  .border-slate-100 {
2801
2848
  border-color: var(--color-slate-100);
2802
2849
  }
@@ -2872,6 +2919,9 @@
2872
2919
  .bg-purple-500 {
2873
2920
  background-color: var(--color-purple-500);
2874
2921
  }
2922
+ .bg-red-50 {
2923
+ background-color: var(--color-red-50);
2924
+ }
2875
2925
  .bg-red-500 {
2876
2926
  background-color: var(--color-red-500);
2877
2927
  }
@@ -3063,6 +3113,10 @@
3063
3113
  font-size: var(--text-xs);
3064
3114
  line-height: var(--tw-leading, var(--text-xs--line-height));
3065
3115
  }
3116
+ .leading-4 {
3117
+ --tw-leading: calc(var(--spacing) * 4);
3118
+ line-height: calc(var(--spacing) * 4);
3119
+ }
3066
3120
  .leading-relaxed {
3067
3121
  --tw-leading: var(--leading-relaxed);
3068
3122
  line-height: var(--leading-relaxed);
@@ -3130,6 +3184,9 @@
3130
3184
  .text-red-500 {
3131
3185
  color: var(--color-red-500);
3132
3186
  }
3187
+ .text-red-600 {
3188
+ color: var(--color-red-600);
3189
+ }
3133
3190
  .text-sky-700 {
3134
3191
  color: var(--color-sky-700);
3135
3192
  }
@@ -3190,6 +3247,10 @@
3190
3247
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3191
3248
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3192
3249
  }
3250
+ .blur {
3251
+ --tw-blur: blur(8px);
3252
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
3253
+ }
3193
3254
  .backdrop-blur-sm {
3194
3255
  --tw-backdrop-blur: blur(var(--blur-sm));
3195
3256
  -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
@@ -3442,6 +3503,19 @@
3442
3503
  --tw-ring-offset-width: 0px;
3443
3504
  --tw-ring-offset-color: #fff;
3444
3505
  --tw-ring-offset-shadow: 0 0 #0000;
3506
+ --tw-blur: initial;
3507
+ --tw-brightness: initial;
3508
+ --tw-contrast: initial;
3509
+ --tw-grayscale: initial;
3510
+ --tw-hue-rotate: initial;
3511
+ --tw-invert: initial;
3512
+ --tw-opacity: initial;
3513
+ --tw-saturate: initial;
3514
+ --tw-sepia: initial;
3515
+ --tw-drop-shadow: initial;
3516
+ --tw-drop-shadow-color: initial;
3517
+ --tw-drop-shadow-alpha: 100%;
3518
+ --tw-drop-shadow-size: initial;
3445
3519
  --tw-backdrop-blur: initial;
3446
3520
  --tw-backdrop-brightness: initial;
3447
3521
  --tw-backdrop-contrast: initial;
@@ -0,0 +1,11 @@
1
+ import { BaseSubgraph } from "@powerhousedao/reactor-api";
2
+ import type { DocumentNode } from "graphql";
3
+ export declare class BuildersAddonSubgraph extends BaseSubgraph {
4
+ name: string;
5
+ typeDefs: DocumentNode;
6
+ resolvers: Record<string, unknown>;
7
+ additionalContextFields: {};
8
+ onSetup(): Promise<void>;
9
+ onDisconnect(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,IAAI,SAAoB;IACxB,QAAQ,EAAE,YAAY,CAAU;IAChC,SAAS,0BAAsB;IAC/B,uBAAuB,KAAM;IACvB,OAAO;IACP,YAAY;CACnB"}
@@ -0,0 +1,11 @@
1
+ import { BaseSubgraph } from "@powerhousedao/reactor-api";
2
+ import { schema } from "./schema.js";
3
+ import { getResolvers } from "./resolvers.js";
4
+ export class BuildersAddonSubgraph extends BaseSubgraph {
5
+ name = "builders-addon";
6
+ typeDefs = schema;
7
+ resolvers = getResolvers(this);
8
+ additionalContextFields = {};
9
+ async onSetup() { }
10
+ async onDisconnect() { }
11
+ }
@@ -0,0 +1,3 @@
1
+ import { type ISubgraph } from "@powerhousedao/reactor-api";
2
+ export declare const getResolvers: (subgraph: ISubgraph) => Record<string, unknown>;
3
+ //# sourceMappingURL=resolvers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAc5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA4UxE,CAAC"}
@@ -0,0 +1,280 @@
1
+ import {} from "@powerhousedao/reactor-api";
2
+ export const getResolvers = (subgraph) => {
3
+ const reactor = subgraph.reactor;
4
+ const extractPhid = (value) => {
5
+ if (typeof value === "string") {
6
+ return value.trim() || null;
7
+ }
8
+ if (value &&
9
+ typeof value === "object" &&
10
+ "id" in value &&
11
+ typeof value.id === "string") {
12
+ const id = value.id;
13
+ return id.trim() || null;
14
+ }
15
+ return null;
16
+ };
17
+ const getCandidateDrives = async () => {
18
+ try {
19
+ const drives = await reactor.getDrives?.();
20
+ if (Array.isArray(drives) && drives.length > 0)
21
+ return drives;
22
+ }
23
+ catch { }
24
+ return [];
25
+ };
26
+ const applyFilters = (builder, filter) => {
27
+ if (!filter)
28
+ return true;
29
+ if (filter.id && builder.id !== filter.id)
30
+ return false;
31
+ if (filter.code &&
32
+ String(builder.code || "").toLowerCase() !==
33
+ String(filter.code || "").toLowerCase())
34
+ return false;
35
+ if (filter.name &&
36
+ String(builder.name || "").toLowerCase() !==
37
+ String(filter.name || "").toLowerCase())
38
+ return false;
39
+ if (filter.slug &&
40
+ String(builder.slug || "").toLowerCase() !==
41
+ String(filter.slug || "").toLowerCase())
42
+ return false;
43
+ if (filter.type &&
44
+ String(builder.type || "").toLowerCase() !==
45
+ String(filter.type || "").toLowerCase())
46
+ return false;
47
+ if (filter.status &&
48
+ String(builder.status || "").toLowerCase() !==
49
+ String(filter.status || "").toLowerCase())
50
+ return false;
51
+ if (filter.skills && filter.skills.length > 0) {
52
+ const builderSkills = (builder.skils || []).map((s) => String(s).toLowerCase());
53
+ const hasAllSkills = filter.skills.every((skill) => builderSkills.includes(String(skill).toLowerCase()));
54
+ if (!hasAllSkills)
55
+ return false;
56
+ }
57
+ if (filter.scopes && filter.scopes.length > 0) {
58
+ const builderScopes = (builder.scopes || []).map((s) => String(s).toLowerCase());
59
+ const hasAllScopes = filter.scopes.every((scope) => builderScopes.includes(String(scope).toLowerCase()));
60
+ if (!hasAllScopes)
61
+ return false;
62
+ }
63
+ return true;
64
+ };
65
+ return {
66
+ Query: {
67
+ builders: async (parent, args) => {
68
+ const filter = args.filter;
69
+ const drives = await getCandidateDrives();
70
+ // Step 1: Collect all builder profile documents
71
+ const builderDocs = [];
72
+ const sowDocs = [];
73
+ for (const driveId of drives) {
74
+ try {
75
+ const docIds = await reactor.getDocuments(driveId);
76
+ const docs = await Promise.all(docIds.map(async (docId) => {
77
+ try {
78
+ return await reactor.getDocument(docId);
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }));
84
+ for (const doc of docs) {
85
+ if (!doc)
86
+ continue;
87
+ if (doc.header.documentType === "powerhouse/builder-profile") {
88
+ builderDocs.push(doc);
89
+ }
90
+ else if (doc.header.documentType === "powerhouse/scopeofwork") {
91
+ sowDocs.push(doc);
92
+ }
93
+ }
94
+ }
95
+ catch (error) {
96
+ console.warn(`Failed to process drive ${driveId}:`, error);
97
+ }
98
+ }
99
+ // Step 2: Build a map of deliverable OID -> deliverable object for each SOW
100
+ const sowDeliverablesMap = new Map();
101
+ for (const sowDoc of sowDocs) {
102
+ const sowState = sowDoc.state.global;
103
+ if (!sowState || typeof sowState !== "object")
104
+ continue;
105
+ const deliverablesMap = new Map();
106
+ const deliverables = Array.isArray(sowState.deliverables)
107
+ ? sowState.deliverables
108
+ : [];
109
+ for (const deliverable of deliverables) {
110
+ if (!deliverable || typeof deliverable !== "object")
111
+ continue;
112
+ const deliverableId = deliverable.id;
113
+ if (deliverableId && typeof deliverableId === "string") {
114
+ deliverablesMap.set(deliverableId, deliverable);
115
+ }
116
+ }
117
+ sowDeliverablesMap.set(sowDoc.header.id, deliverablesMap);
118
+ }
119
+ // Step 3: Extract projects from SOW documents and group by projectOwner
120
+ const projectsByOwner = new Map();
121
+ for (const sowDoc of sowDocs) {
122
+ const sowState = sowDoc.state.global;
123
+ if (!sowState || typeof sowState !== "object")
124
+ continue;
125
+ if (!Array.isArray(sowState.projects))
126
+ continue;
127
+ const deliverablesMap = sowDeliverablesMap.get(sowDoc.header.id) || new Map();
128
+ for (const project of sowState.projects) {
129
+ if (!project || typeof project !== "object")
130
+ continue;
131
+ const ownerPhid = extractPhid(project.projectOwner);
132
+ if (!ownerPhid)
133
+ continue;
134
+ // Resolve scope deliverables from OIDs to actual deliverable objects
135
+ let resolvedScope = null;
136
+ if (project.scope && typeof project.scope === "object") {
137
+ try {
138
+ const scopeDeliverableOids = Array.isArray(project.scope.deliverables)
139
+ ? project.scope.deliverables
140
+ : [];
141
+ const resolvedDeliverables = scopeDeliverableOids
142
+ .map((oid) => {
143
+ if (!oid || typeof oid !== "string")
144
+ return null;
145
+ const deliverable = deliverablesMap.get(oid);
146
+ if (!deliverable || typeof deliverable !== "object")
147
+ return null;
148
+ // Transform to SOW_Deliverable format with error handling
149
+ try {
150
+ return {
151
+ id: deliverable.id || "",
152
+ icon: deliverable.icon ?? null,
153
+ title: String(deliverable.title || ""),
154
+ code: String(deliverable.code || ""),
155
+ description: String(deliverable.description || ""),
156
+ status: deliverable.status || "DRAFT",
157
+ workProgress: deliverable.workProgress ?? null,
158
+ keyResults: Array.isArray(deliverable.keyResults)
159
+ ? deliverable.keyResults.map((kr) => ({
160
+ id: kr?.id || "",
161
+ title: String(kr?.title || ""),
162
+ link: String(kr?.link || ""),
163
+ }))
164
+ : [],
165
+ budgetAnchor: deliverable.budgetAnchor ?? null,
166
+ };
167
+ }
168
+ catch (error) {
169
+ console.warn(`Failed to transform deliverable ${oid}:`, error);
170
+ return null;
171
+ }
172
+ })
173
+ .filter((d) => d !== null);
174
+ // Build resolved scope with error handling
175
+ resolvedScope = {
176
+ deliverables: resolvedDeliverables,
177
+ status: project.scope.status ||
178
+ project.scope.deliverableSetStatus ||
179
+ "DRAFT",
180
+ progress: project.scope.progress ?? null,
181
+ deliverablesCompleted: project.scope.deliverablesCompleted ?? {
182
+ total: 0,
183
+ completed: 0,
184
+ },
185
+ };
186
+ }
187
+ catch (error) {
188
+ console.warn(`Failed to resolve scope for project ${project.id}:`, error);
189
+ // Fallback to empty scope
190
+ resolvedScope = {
191
+ deliverables: [],
192
+ status: "DRAFT",
193
+ progress: null,
194
+ deliverablesCompleted: { total: 0, completed: 0 },
195
+ };
196
+ }
197
+ }
198
+ // Transform project to BuilderProject format with error handling
199
+ try {
200
+ const builderProject = {
201
+ id: project.id || "",
202
+ code: String(project.code || ""),
203
+ title: String(project.title || ""),
204
+ slug: String(project.slug || ""),
205
+ abstract: project.abstract ?? null,
206
+ imageUrl: project.imageUrl ?? null,
207
+ scope: resolvedScope,
208
+ budgetType: project.budgetType ?? null,
209
+ currency: project.currency ?? null,
210
+ budget: project.budget ?? null,
211
+ expenditure: project.expenditure ?? null,
212
+ };
213
+ if (!projectsByOwner.has(ownerPhid)) {
214
+ projectsByOwner.set(ownerPhid, []);
215
+ }
216
+ projectsByOwner.get(ownerPhid).push(builderProject);
217
+ }
218
+ catch (error) {
219
+ console.warn(`Failed to transform project ${project.id}:`, error);
220
+ // Skip this project if transformation fails
221
+ continue;
222
+ }
223
+ }
224
+ }
225
+ // Step 4: Transform builder documents to BuilderProfileState format
226
+ const builders = builderDocs
227
+ .map((doc) => {
228
+ const state = doc.state.global;
229
+ // Ensure all non-nullable fields are properly handled
230
+ const name = String(state?.name ?? doc.header?.name ?? "");
231
+ const icon = String(state?.icon ?? "");
232
+ const description = String(state?.description ?? state?.slug ?? "");
233
+ const type = state?.type ?? "INDIVIDUAL";
234
+ const skils = Array.isArray(state?.skils) ? state.skils : [];
235
+ const scopes = Array.isArray(state?.scopes) ? state.scopes : [];
236
+ const links = Array.isArray(state?.links) ? state.links : [];
237
+ const contributors = Array.isArray(state?.contributors)
238
+ ? state.contributors
239
+ : [];
240
+ const builder = {
241
+ id: doc.header.id,
242
+ code: state?.code ?? null,
243
+ slug: state?.slug ?? null,
244
+ name,
245
+ icon,
246
+ description,
247
+ lastModified: state?.lastModified ?? null,
248
+ type,
249
+ contributors,
250
+ status: state?.status ?? null,
251
+ skils,
252
+ scopes,
253
+ links,
254
+ projects: projectsByOwner.get(doc.header.id) || [],
255
+ };
256
+ return builder;
257
+ })
258
+ .filter((builder) => applyFilters(builder, filter));
259
+ return builders;
260
+ },
261
+ },
262
+ SOW_Progress: {
263
+ __resolveType(obj) {
264
+ if (obj && typeof obj === "object") {
265
+ if (Object.prototype.hasOwnProperty.call(obj, "total") &&
266
+ Object.prototype.hasOwnProperty.call(obj, "completed")) {
267
+ return "SOW_StoryPoint";
268
+ }
269
+ if (Object.prototype.hasOwnProperty.call(obj, "value")) {
270
+ return "SOW_Percentage";
271
+ }
272
+ if (Object.prototype.hasOwnProperty.call(obj, "done")) {
273
+ return "SOW_Binary";
274
+ }
275
+ }
276
+ return null;
277
+ },
278
+ },
279
+ };
280
+ };
@@ -0,0 +1,3 @@
1
+ import type { DocumentNode } from "graphql";
2
+ export declare const schema: DocumentNode;
3
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,YA+MpB,CAAC"}