@stackables/bridge-core 1.0.1 → 1.0.3

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 (55) hide show
  1. package/build/{bridge-core/src/ExecutionTree.d.ts → ExecutionTree.d.ts} +59 -2
  2. package/build/ExecutionTree.d.ts.map +1 -0
  3. package/build/{bridge-core/src/ExecutionTree.js → ExecutionTree.js} +492 -145
  4. package/build/execute-bridge.d.ts.map +1 -0
  5. package/build/index.d.ts.map +1 -0
  6. package/build/merge-documents.d.ts.map +1 -0
  7. package/build/tools/index.d.ts.map +1 -0
  8. package/build/tools/internal.d.ts.map +1 -0
  9. package/build/{bridge-core/src/types.d.ts → types.d.ts} +1 -1
  10. package/build/types.d.ts.map +1 -0
  11. package/build/utils.d.ts.map +1 -0
  12. package/build/version-check.d.ts.map +1 -0
  13. package/package.json +3 -3
  14. package/build/bridge-core/src/ExecutionTree.d.ts.map +0 -1
  15. package/build/bridge-core/src/execute-bridge.d.ts.map +0 -1
  16. package/build/bridge-core/src/index.d.ts.map +0 -1
  17. package/build/bridge-core/src/merge-documents.d.ts.map +0 -1
  18. package/build/bridge-core/src/tools/index.d.ts.map +0 -1
  19. package/build/bridge-core/src/tools/internal.d.ts.map +0 -1
  20. package/build/bridge-core/src/types.d.ts.map +0 -1
  21. package/build/bridge-core/src/utils.d.ts.map +0 -1
  22. package/build/bridge-core/src/version-check.d.ts.map +0 -1
  23. package/build/bridge-stdlib/src/index.d.ts +0 -34
  24. package/build/bridge-stdlib/src/index.d.ts.map +0 -1
  25. package/build/bridge-stdlib/src/index.js +0 -40
  26. package/build/bridge-stdlib/src/tools/arrays.d.ts +0 -28
  27. package/build/bridge-stdlib/src/tools/arrays.d.ts.map +0 -1
  28. package/build/bridge-stdlib/src/tools/arrays.js +0 -50
  29. package/build/bridge-stdlib/src/tools/audit.d.ts +0 -36
  30. package/build/bridge-stdlib/src/tools/audit.d.ts.map +0 -1
  31. package/build/bridge-stdlib/src/tools/audit.js +0 -39
  32. package/build/bridge-stdlib/src/tools/http-call.d.ts +0 -35
  33. package/build/bridge-stdlib/src/tools/http-call.d.ts.map +0 -1
  34. package/build/bridge-stdlib/src/tools/http-call.js +0 -118
  35. package/build/bridge-stdlib/src/tools/strings.d.ts +0 -13
  36. package/build/bridge-stdlib/src/tools/strings.d.ts.map +0 -1
  37. package/build/bridge-stdlib/src/tools/strings.js +0 -12
  38. package/build/bridge-types/src/index.d.ts +0 -63
  39. package/build/bridge-types/src/index.d.ts.map +0 -1
  40. package/build/bridge-types/src/index.js +0 -8
  41. /package/build/{bridge-core/src/execute-bridge.d.ts → execute-bridge.d.ts} +0 -0
  42. /package/build/{bridge-core/src/execute-bridge.js → execute-bridge.js} +0 -0
  43. /package/build/{bridge-core/src/index.d.ts → index.d.ts} +0 -0
  44. /package/build/{bridge-core/src/index.js → index.js} +0 -0
  45. /package/build/{bridge-core/src/merge-documents.d.ts → merge-documents.d.ts} +0 -0
  46. /package/build/{bridge-core/src/merge-documents.js → merge-documents.js} +0 -0
  47. /package/build/{bridge-core/src/tools → tools}/index.d.ts +0 -0
  48. /package/build/{bridge-core/src/tools → tools}/index.js +0 -0
  49. /package/build/{bridge-core/src/tools → tools}/internal.d.ts +0 -0
  50. /package/build/{bridge-core/src/tools → tools}/internal.js +0 -0
  51. /package/build/{bridge-core/src/types.js → types.js} +0 -0
  52. /package/build/{bridge-core/src/utils.d.ts → utils.d.ts} +0 -0
  53. /package/build/{bridge-core/src/utils.js → utils.js} +0 -0
  54. /package/build/{bridge-core/src/version-check.d.ts → version-check.d.ts} +0 -0
  55. /package/build/{bridge-core/src/version-check.js → version-check.js} +0 -0
@@ -1,4 +1,4 @@
1
- import type { Bridge, BridgeDocument, ToolMap } from "./types.ts";
1
+ import type { Bridge, BridgeDocument, ToolMap, Wire } from "./types.ts";
2
2
  /** Fatal panic error — bypasses all error boundaries (`?.` and `catch`). */
3
3
  export declare class BridgePanicError extends Error {
4
4
  constructor(message: string);
@@ -32,6 +32,13 @@ type Trunk = {
32
32
  field: string;
33
33
  instance?: number;
34
34
  };
35
+ /**
36
+ * A value that may already be resolved (synchronous) or still pending (asynchronous).
37
+ * Using this instead of always returning `Promise<T>` lets callers skip
38
+ * microtask scheduling when the value is immediately available.
39
+ * See docs/performance.md (#10).
40
+ */
41
+ type MaybePromise<T> = T | Promise<T>;
35
42
  /** Trace verbosity level.
36
43
  * - `"off"` (default) — no collection, zero overhead
37
44
  * - `"basic"` — tool, fn, timing, errors; no input/output
@@ -101,6 +108,8 @@ export declare class ExecutionTree {
101
108
  private toolFns?;
102
109
  /** Shadow-tree nesting depth (0 for root). */
103
110
  private depth;
111
+ /** Pre-computed `trunkKey({ ...this.trunk, element: true })`. See docs/performance.md (#4). */
112
+ private elementTrunkKey;
104
113
  constructor(trunk: Trunk, document: BridgeDocument, toolFns?: ToolMap, context?: Record<string, any> | undefined, parent?: ExecutionTree | undefined);
105
114
  /** Derive tool name from a trunk */
106
115
  private getToolName;
@@ -115,7 +124,20 @@ export declare class ExecutionTree {
115
124
  private resolveToolSource;
116
125
  /** Call a tool dependency (cached per request) */
117
126
  private resolveToolDep;
118
- schedule(target: Trunk, pullChain?: Set<string>): any;
127
+ schedule(target: Trunk, pullChain?: Set<string>): MaybePromise<any>;
128
+ /**
129
+ * Assemble input from resolved wire values and either invoke a direct tool
130
+ * function or return the data for pass-through targets (local/define/logic).
131
+ * Returns synchronously when the tool function (if any) returns sync.
132
+ * See docs/performance.md (#12).
133
+ */
134
+ private scheduleFinish;
135
+ /**
136
+ * Full async schedule path for targets backed by a ToolDef.
137
+ * Resolves tool wires, bridge wires, and invokes the tool function
138
+ * with error recovery support.
139
+ */
140
+ private scheduleToolDef;
119
141
  /**
120
142
  * Invoke a tool function, recording both an OpenTelemetry span and (when
121
143
  * tracing is enabled) a ToolTrace entry. All three tool-call sites in the
@@ -125,6 +147,16 @@ export declare class ExecutionTree {
125
147
  shadow(): ExecutionTree;
126
148
  /** Returns collected traces (empty array when tracing is disabled). */
127
149
  getTraces(): ToolTrace[];
150
+ /**
151
+ * Traverse `ref.path` on an already-resolved value, respecting null guards.
152
+ * Extracted from `pullSingle` so the sync and async paths can share logic.
153
+ */
154
+ private applyPath;
155
+ /**
156
+ * Pull a single value. Returns synchronously when already in state;
157
+ * returns a Promise only when the value is a pending tool call.
158
+ * See docs/performance.md (#10).
159
+ */
128
160
  private pullSingle;
129
161
  push(args: Record<string, any>): void;
130
162
  /** Store the aggregated promise for critical forced handles so
@@ -163,7 +195,16 @@ export declare class ExecutionTree {
163
195
  * After layers 1–2b, the overdefinition boundary (`!= null`) decides whether
164
196
  * to return or continue to the next wire.
165
197
  */
198
+ /**
199
+ * Resolve wires, returning synchronously when the hot path allows it.
200
+ *
201
+ * Fast path: single `from` wire with no fallback/catch modifiers, which is
202
+ * the common case for element field wires like `.id <- it.id`. Delegates to
203
+ * `resolveWiresAsync` for anything more complex.
204
+ * See docs/performance.md (#10).
205
+ */
166
206
  private resolveWires;
207
+ private resolveWiresAsync;
167
208
  /**
168
209
  * Resolve an output field by path for use outside of a GraphQL resolver.
169
210
  *
@@ -179,6 +220,22 @@ export declare class ExecutionTree {
179
220
  * in a shadow tree (mirrors `response()` array handling).
180
221
  */
181
222
  pullOutputField(path: string[], array?: boolean): Promise<unknown>;
223
+ /**
224
+ * Resolve pre-grouped wires on this shadow tree without re-filtering.
225
+ * Called by the parent's `materializeShadows` to skip per-element wire
226
+ * filtering. Returns synchronously when the wire resolves sync (hot path).
227
+ * See docs/performance.md (#8, #10).
228
+ */
229
+ resolvePreGrouped(wires: Wire[]): MaybePromise<unknown>;
230
+ /**
231
+ * Materialise all output wires into a plain JS object.
232
+ *
233
+ * Used by the GraphQL adapter when a bridge field returns a scalar type
234
+ * (e.g. `JSON`, `JSONObject`). In that case GraphQL won't call sub-field
235
+ * resolvers, so we need to eagerly resolve every output wire and assemble
236
+ * the result ourselves — the same logic `run()` uses for object output.
237
+ */
238
+ collectOutput(): Promise<unknown>;
182
239
  /**
183
240
  * Execute the bridge end-to-end without GraphQL.
184
241
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionTree.d.ts","sourceRoot":"","sources":["../src/ExecutionTree.ts"],"names":[],"mappings":"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"}