CHAN.RUN
function trySync<TArgs, T, TErrors>(fn, ...args): SyncResult<T, InferFaultErrors<TErrors>>;Defined in: src/try.ts
Run sync code, return a discriminated result — never throws.
Pass a declared function directly to get typed errors:
const parse = declares([ValidationError], (raw: string) => JSON.parse(raw));
const result = trySync(parse, input);
// result.error is ValidationError, not unknownOr wrap any expression in a lambda:
const result = trySync(() => JSON.parse(raw));
// result.error is unknown| Type Parameter |
|---|
TArgs extends unknown[] |
T |
TErrors extends NamedFaultErrorClass<string>[] |
| Parameter | Type |
|---|---|
fn | DeclaredFn<TArgs, T, TErrors> |
...args | TArgs |
SyncResult<T, InferFaultErrors<TErrors>>
const result = trySync(() => JSON.parse(userInput));
if (!result.ok) {
console.error("Invalid JSON:", result.error);
return fallbackConfig;
}
return result.data;function decodeJwtPayload(token: string): Record<string, unknown> | null {
const result = trySync(() => JSON.parse(atob(token.split(".")[1])));
return result.ok ? result.data : null;
}const ConfigError = defineError("ConfigError");
const loadConfig = declares([ConfigError], (path: string) => {
const raw = fs.readFileSync(path, "utf-8");
const result = trySync(() => JSON.parse(raw));
if (!result.ok) fault(ConfigError, `Invalid config: ${path}`, { cause: result.error });
return result.data as AppConfig;
});
const result = trySync(loadConfig, "./config.json");
// result.error is ConfigError, not unknownfunction getStoredTheme(): Theme | null {
const result = trySync(() => JSON.parse(localStorage.getItem("theme") ?? ""));
return result.ok ? result.data : null;
}function trySync<T>(fn): SyncResult<T>;Defined in: src/try.ts
Run sync code, return a discriminated result — never throws.
Pass a declared function directly to get typed errors:
const parse = declares([ValidationError], (raw: string) => JSON.parse(raw));
const result = trySync(parse, input);
// result.error is ValidationError, not unknownOr wrap any expression in a lambda:
const result = trySync(() => JSON.parse(raw));
// result.error is unknown| Type Parameter |
|---|
T |
| Parameter | Type |
|---|---|
fn | () => T |
SyncResult<T>
const result = trySync(() => JSON.parse(userInput));
if (!result.ok) {
console.error("Invalid JSON:", result.error);
return fallbackConfig;
}
return result.data;function decodeJwtPayload(token: string): Record<string, unknown> | null {
const result = trySync(() => JSON.parse(atob(token.split(".")[1])));
return result.ok ? result.data : null;
}const ConfigError = defineError("ConfigError");
const loadConfig = declares([ConfigError], (path: string) => {
const raw = fs.readFileSync(path, "utf-8");
const result = trySync(() => JSON.parse(raw));
if (!result.ok) fault(ConfigError, `Invalid config: ${path}`, { cause: result.error });
return result.data as AppConfig;
});
const result = trySync(loadConfig, "./config.json");
// result.error is ConfigError, not unknownfunction getStoredTheme(): Theme | null {
const result = trySync(() => JSON.parse(localStorage.getItem("theme") ?? ""));
return result.ok ? result.data : null;
}