Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Declarative dataflow for GraphQL
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A declarative dataflow language and execution engine.
Documentation at: https://bridge.sdk42.com/
The Bridge replaces imperative orchestration code with static .bridge files. Instead of writing complex async/await logic, manual Promise.all wrappers, and custom data mappers, you simply define what data you need and where it comes from.
The Bridge engine parses your wiring diagram, builds a dependency graph, and executes it - automatically handling parallelization, fallbacks, and data reshaping.
You write the topology; the engine handles the execution.
Promise.all, DataLoader plumbing, or batching glue required..bridge files are just text parsed into an execution graph, you don't need to recompile, rebuild, or redeploy your entire Node application to change a data mapping or swap an API provider. You can update and hot-reload your rules on the fly.Because The Bridge strictly controls how data flows from inputs to tools to outputs, it is the perfect engine for architectures that require strict boundaries and clean mappings.
.bridge files..bridge file without ever touching the calling service's code.formatBridgeError(err) renders Rust-style source snippets with filename, line/column, and carets pointing at the failing wire.bridge.batch and Bridge batches loop-scoped calls automatically in both the interpreter and the compiler.Try The Bridge instantly in your browser at https://bridge.sdk42.com/playground/
The playground is fully client-side. Your API keys, schemas, and data are NEVER sent to our servers. All parsing, routing, and HTTP execution happens directly inside your browser.
Want to run it offline or within your own VPN? You can spin up the playground locally by building the ./packages/playground workspace directly from this repository.
The Bridge is a Data Topology Language. You don't write scripts; you wire circuits.
Don't think in scripts. Think in schematics.
The .bridge language is designed to be scannable.
. prefix means a property.= means static constant assignment.<- means dynamic data flow.| Concept | Syntax Example | Description |
|---|---|---|
| Constants | .method = "POST" | Sets a static configuration value. |
| Wires | .body <- i.userData | Pulls data from a source at runtime. |
| Side Effects | force api catch null | Eagerly schedules a handle. Critical by default; catch null makes it fire-and-forget. |
| Pipes | o.name <- uc:i.name | Chains data through a tool right-to-left. |
| Null Coalesce | o.name <- i.name || "N/A" | Alternative used if the current source resolves to null. |
| Error Guard | o.price <- api.price catch 0 | Alternative used if the current source throws an exception. |
| Ternary | o.val <- i.isPro ? a : b | Evaluates condition; strictly pulls only the chosen branch. |
| Node Alias | alias name <- uc:i.name | Evaluates an expression once and caches it as a local graph node. |
| Arrays | o <- items[] as it { } | Iterates over an array, creating a local shadow scope for each element. |
To The Bridge engine, everything external is just a "Tool". A Tool is simply a JavaScript function that takes a JSON object as input, and returns a JSON object (or Promise) as output.
The Bridge ships with a standard library (std) that includes tools for HTTP requests, array manipulation, and basic string formatting.
You can inject your own custom tools into the engine in three lines of code:
const myTools = {
// A simple synchronous tool
calculateTax: (input) => ({ total: input.price * 1.2 }),
// An asynchronous database call
fetchUser: async (input) => await db.users.findById(input.id),
};
// Standalone mode:
const { data } = await executeBridge({
instructions,
operation,
input,
tools: myTools,
});
// Gateway mode:
const schema = bridgeTransform(createSchema({ typeDefs }), instructions, {
tools: myTools,
});
Read the Tools & Extensions Guide
The reason we write tests is to catch bugs so we can fix them — not to document broken behavior and ship it.
We never hide problems or avoid broken scenarios to make tests pass.
It is always better to not ship and have broken tests than to break our users trust.