@conduit-client/utils 2.0.1 → 2.1.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.
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/types/errors.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -580,6 +580,15 @@ class UserVisibleError extends Error {
|
|
|
580
580
|
this.type = "user-visible";
|
|
581
581
|
}
|
|
582
582
|
}
|
|
583
|
+
function isUserVisibleError(error) {
|
|
584
|
+
return error instanceof Error && "type" in error && error.type === "user-visible";
|
|
585
|
+
}
|
|
586
|
+
function logError(error) {
|
|
587
|
+
if (isUserVisibleError(error)) {
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
console.error("OneStore Command threw an error that we did not expect", error);
|
|
591
|
+
}
|
|
583
592
|
function applyDecorators(baseCommand, decorators, options) {
|
|
584
593
|
if (!decorators || decorators.length === 0) {
|
|
585
594
|
return baseCommand;
|
|
@@ -630,7 +639,9 @@ export {
|
|
|
630
639
|
isResult,
|
|
631
640
|
isSubscribable,
|
|
632
641
|
isSubscribableResult,
|
|
642
|
+
isUserVisibleError,
|
|
633
643
|
lineFormatter,
|
|
644
|
+
logError,
|
|
634
645
|
loggerService,
|
|
635
646
|
ok,
|
|
636
647
|
racesync,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/bfs.ts","../src/file-parser-logger.ts","../src/include-exclude.ts","../src/language.ts","../src/logger.ts","../src/result.ts","../src/set.ts","../src/string.ts","../src/subscribable.ts","../src/promises.ts","../src/utils.ts","../src/version.ts","../src/error-handling.ts","../src/deep-freeze.ts","../src/query-params.ts","../src/errors.ts","../src/command-decorators.ts"],"sourcesContent":["export function bfs<T, R = T>(\n start: T[],\n predicate: (node: T) => boolean,\n getChildren: (node: T) => T[]\n): Set<R> {\n const queue: T[] = [...start];\n const visited = new Set([...start]);\n const matches = new Set<R>();\n\n while (queue.length) {\n const curr = queue.shift()!;\n if (predicate(curr)) {\n // The cast here is useful when predicate does type narrowing\n matches.add(curr as unknown as R);\n }\n\n const children = getChildren(curr);\n for (const child of children) {\n if (!visited.has(child)) {\n visited.add(child);\n queue.push(child);\n }\n }\n }\n\n return matches;\n}\n","import type { NamedLoggerService } from './logger';\n\ntype Position = { line: number; column: number };\n\nexport function lineFormatter(position: Position, message: string, filePath: string): string {\n return `${message} (${filePath}:${position.line}:${position.column})`;\n}\n\nexport interface FileParserLogger {\n filePath: string;\n trace(position: Position, message: string): void;\n debug(position: Position, message: string): void;\n info(position: Position, message: string): void;\n warn(position: Position, message: string): void;\n error(position: Position, message: string): void;\n}\n\nexport class DefaultFileParserLogger {\n constructor(\n private services: NamedLoggerService,\n public filePath: string\n ) {}\n\n trace(position: Position, message: string): void {\n this.services.logger.trace(this.format(position, message));\n }\n debug(position: Position, message: string): void {\n this.services.logger.debug(this.format(position, message));\n }\n info(position: Position, message: string): void {\n this.services.logger.info(this.format(position, message));\n }\n warn(position: Position, message: string): void {\n this.services.logger.warn(this.format(position, message));\n }\n error(position: Position, message: string): void {\n this.services.logger.error(this.format(position, message));\n }\n\n format(position: Position, message: string): string {\n return lineFormatter(position, message, this.filePath);\n }\n}\n","export type IncludeExcludeMatcher =\n // exact match\n | string\n\n // RegExp to match against\n | RegExp\n\n // predicate function\n | ((s: string) => boolean)\n\n // array of any of the above\n | Array<IncludeExcludeMatcher>;\n\nexport type IncludeExclude = {\n include?: IncludeExcludeMatcher;\n exclude?: IncludeExcludeMatcher;\n};\n\nfunction matches(test: IncludeExcludeMatcher | undefined, s: string): boolean {\n if (test === undefined) {\n return false;\n } else if (typeof test === 'string') {\n return s === test;\n } else if (test instanceof RegExp) {\n return test.test(s);\n } else if (typeof test === 'function') {\n return test(s);\n }\n\n return test.some((m) => matches(m, s));\n}\n\n/**\n * Indicates if an IncludeExclude includes a given string.\n *\n * @param incexc IncludeExclude that specifies strings to be included/excluded\n * @param s string to be checked\n * @returns true in incexc includes s; false if not\n */\nexport function includes(incexc: IncludeExclude, s: string): boolean {\n // specifically excluded\n if (matches(incexc.exclude, s)) {\n return false;\n }\n\n // specifically included\n if (matches(incexc.include, s)) {\n return true;\n }\n\n // include was specified & did not match s, assume excluded\n if (incexc.include) {\n return false;\n }\n\n // include not specified & not specifically excluded, assume included\n return true;\n}\n","const { create, freeze, keys, entries } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\nconst { isArray } = Array;\nconst { push, indexOf, slice } = Array.prototype;\n\nconst { stringify, parse } = JSON;\n\nconst WeakSetConstructor = WeakSet;\n\nexport {\n // Object\n create as ObjectCreate,\n freeze as ObjectFreeze,\n keys as ObjectKeys,\n entries as ObjectEntries,\n // Object.prototype\n hasOwnProperty as ObjectPrototypeHasOwnProperty,\n // Array\n isArray as ArrayIsArray,\n // Array.prototype\n push as ArrayPrototypePush,\n indexOf as ArrayPrototypeIndexOf,\n slice as ArrayPrototypeSlice,\n // JSON\n stringify as JSONStringify,\n parse as JSONParse,\n // WeakSet\n WeakSetConstructor,\n};\n","import type { NamedService, ServiceDescriptor } from './service';\n\n/**\n * Service that builds TypeScript source files.\n */\nexport type LoggerService = {\n trace(message: string): void;\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n};\n\nexport type NamedLoggerService<Name extends string = 'logger'> = NamedService<Name, LoggerService>;\n\nexport type LoggerServiceDescriptor = ServiceDescriptor<LoggerService, 'logger', '1.0'>;\n\nexport const LogLevelMap = {\n TRACE: 4,\n DEBUG: 3,\n INFO: 2,\n WARN: 1,\n ERROR: 0,\n} as const;\n\nexport type LogLevel = keyof typeof LogLevelMap;\nexport type Printer = (message: string) => void;\nexport type Formatter = (level: LogLevel, message: string) => string;\n\n/**\n * A simple Logger implementation.\n */\nexport class ConsoleLogger implements LoggerService {\n messages: { level: LogLevel; message: string }[] = [];\n\n constructor(\n public level: LogLevel = 'WARN',\n // eslint-disable-next-line no-console\n private printer: Printer = console.log,\n private formatter: Formatter = (level, message) => `${level}: ${message}`\n ) {}\n trace(message: string): void {\n this.log('TRACE', message);\n }\n debug(message: string): void {\n this.log('DEBUG', message);\n }\n info(message: string): void {\n this.log('INFO', message);\n }\n warn(message: string): void {\n this.log('WARN', message);\n }\n error(message: string): void {\n this.log('ERROR', message);\n }\n\n log(level: LogLevel, message: string): void {\n if (LogLevelMap[level] > LogLevelMap[this.level]) {\n return;\n }\n\n this.printer(this.formatter(level, message));\n }\n}\n\n/**\n * Constructs a new LoggerService.\n */\nexport function loggerService(\n level?: LogLevel,\n printer?: Printer,\n formatter?: Formatter\n): LoggerService {\n return new ConsoleLogger(level, printer, formatter);\n}\n","/**\n * A Result can either be an `Ok` or an `Err` variant.\n * The usage of `this is Ok<T,E>` and `this is Err<T,E>` on the return\n * values of `isOk` and `isErr` act as a type guard on the specific result\n * instance, e.g.\n *\n * function(result: Result<string, unknown>) {\n * result.value // this is a type error because value only exists on `Ok` results, and `Result` can be `Ok` or `Err`.\n * result.error // this is also a type error because `error` only exists on `Err`, and `Result` can be `Ok`\n * if(result.isOk()){\n * result.value // this is not a type error because we checked first, and the result said result is an `Ok`\n * result.error // this is a type error because we know that result is an `Ok`\n * } else {\n * result.error // this is also okay because type script knows that result is not an `Ok` in this `else`, so it must be an `Err`\n * result.value // this is a type error because we know that result is an `Err`\n * }\n * }\n *\n */\ninterface IResult<T, E> {\n /**\n * Used to check if a `Result` is an `OK`\n *\n * @returns `true` if the result is an `OK` variant of Result\n */\n isOk(): this is Ok<T, E>;\n\n /**\n * Used to check if a `Result` is an `Err`\n *\n * @returns `true` if the result is an `Err` variant of Result\n */\n isErr(): this is Err<T, E>;\n}\n\nexport type OkDataTypeOf<T> = T extends IResult<infer D, any> ? D : never;\nexport type ErrorTypeOf<T> = T extends IResult<any, infer E> ? E : never;\n\nexport class Ok<T, E> implements IResult<T, E> {\n constructor(readonly value: T) {}\n\n isOk(): this is Ok<T, E> {\n return true;\n }\n\n isErr(): this is Err<T, E> {\n return !this.isOk();\n }\n}\n\nexport class Err<T, E> implements IResult<T, E> {\n constructor(readonly error: E) {}\n\n isOk(): this is Ok<T, E> {\n return false;\n }\n\n isErr(): this is Err<T, E> {\n return !this.isOk();\n }\n}\n\nexport const ok = <T, E = never>(value: T): Ok<T, E> => new Ok(value);\nexport const err = <T = never, E = unknown>(err: E): Err<T, E> => new Err(err);\n\nexport type Result<T, E> = Ok<T, E> | Err<T, E>;\n\nexport type Callback<Result> = (result: Result) => void;\n\n// an error to indicate that the data inside a Result construct\n// is missing or incomplete\nexport class DataNotFoundError extends Error {\n constructor(message?: string) {\n super(message);\n this.name = 'DataNotFoundError';\n }\n}\n\nexport class DataIncompleteError<Data> extends Error {\n constructor(\n message?: string,\n public partialData?: Data\n ) {\n super(message);\n this.name = 'DataIncompleteError';\n }\n}\n\nexport function isDataNotFoundError(error: any): error is DataNotFoundError {\n return error instanceof DataNotFoundError || error.name === 'DataNotFoundError';\n}\n\nexport function isDataIncompleteError(error: any): error is DataNotFoundError {\n return error instanceof DataIncompleteError || error.name === 'DataIncompleteError';\n}\n\nexport function isCacheHitOrError<CacheReturn extends Result<any, any>>(\n value: CacheReturn\n): boolean {\n if (value.isErr() && (isDataIncompleteError(value.error) || isDataNotFoundError(value.error))) {\n return false;\n }\n\n return true;\n}\n\nexport function isCacheMiss<CacheReturn extends Result<any, any>>(value: CacheReturn) {\n return !isCacheHitOrError(value);\n}\n\nexport function isResult<T, E>(value: unknown): value is Result<T, E> {\n // More robust check that doesn't rely on instanceof which can fail across module boundaries\n return (\n value != null &&\n typeof value === 'object' &&\n 'isOk' in value &&\n 'isErr' in value &&\n typeof value.isOk === 'function' &&\n typeof value.isErr === 'function' &&\n ((value.isOk() === true && value.isErr() === false && 'value' in value) ||\n (value.isOk() === false && value.isErr() === true && 'error' in value))\n );\n}\n","export function setOverlaps<T>(setA: Set<T>, setB: Set<T>): boolean {\n for (const element of setA) {\n if (setB.has(element)) {\n return true;\n }\n }\n return false;\n}\n\nexport function setDifference<T>(setA: Set<T>, setB: Set<T>): Set<T> {\n const differenceSet = new Set<T>();\n\n for (const element of setA) {\n if (!setB.has(element)) {\n differenceSet.add(element);\n }\n }\n\n return differenceSet;\n}\n\nexport function addAllToSet<T>(targetSet: Set<T>, sourceSet: Set<T>): void {\n for (const element of sourceSet) {\n targetSet.add(element);\n }\n}\n","/**\n * Converts unsafe identifier characters to '_' to use as TypeScript identifiers in codegen. Zero-length\n * strings are returned as-is even though they are not valid TypeScript identifiers. Callers\n * should consider the origin of the string & guard against this possibility.\n *\n * Regex from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n *\n * For example:\n * - '123foo' -> '_23foo' (can't start with number)\n * - 'foo.bar' -> 'foo_bar' (can't have periods)\n * - 'foo$bar' -> 'foo$bar' (can have $)\n *\n * @param s the string to convert\n * @returns a TypeScript safe identifier with '_'\n */\nexport const toTypeScriptSafeIdentifier = (s: string): string =>\n s.length >= 1\n ? s[0].replace(/[^$_\\p{ID_Start}]/u, '_') +\n s.slice(1).replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_')\n : '';\n","import { isResult, SyncOrAsync, type Callback } from '.';\nimport type { Result } from './result';\nimport { ok, err } from './result';\n\n/**\n * Data that can be subscribed to for changes with a callback.\n */\nexport type Subscribable<CallbackData, RefreshResult> = {\n subscribe(callback: Callback<CallbackData>): Unsubscribe;\n refresh(): SyncOrAsync<RefreshResult>;\n};\n\nexport type RefreshResult<E> = Result<void, E>;\n\nexport function isSubscribable(obj: unknown): obj is Subscribable<any, any> {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'subscribe' in obj &&\n typeof obj.subscribe === 'function' &&\n 'refresh' in obj &&\n typeof obj.refresh === 'function'\n );\n}\n\nexport function isSubscribableResult<T, E>(x: unknown): x is SubscribableResult<T, E> {\n if (!isResult(x)) {\n return false;\n }\n\n return isSubscribable(x.isOk() ? x.value : x.error);\n}\n\nexport function buildSubscribableResult(\n result: Result<any, any>,\n subscribe: (callback: Callback<Result<any, any>>) => Unsubscribe,\n refresh: () => SyncOrAsync<RefreshResult<any>>\n): SubscribableResult<any, any> {\n if (result.isOk()) {\n return ok({ data: result.value, subscribe, refresh });\n } else {\n return err({ failure: result.error, subscribe, refresh });\n }\n}\n\n/**\n * Unsubscribe function returned from a subscribe call.\n */\nexport type Unsubscribe = () => void;\n\n/**\n * Base subscribable type for SubscribableResult to reduce duplication.\n */\ntype SubscribableBase<T, E> = Subscribable<Result<T, E>, RefreshResult<E>>;\n\n/**\n * A subscribable result is a Result that allows a consumer to subscribe to changes in the Result. Both success and error cases are subscribable.\n */\nexport type SubscribableResult<T, E> = Result<\n SubscribableBase<T, E> & { data: T },\n SubscribableBase<T, E> & { failure: E }\n>;\n","/**\n * Returns a PromiseLike object that resolves with the specified result.\n *\n * @param result resolved result\n * @returns\n */\nexport function resolvedPromiseLike<Result>(result: Result | Promise<Result>): PromiseLike<Result> {\n // Don't nest anything promise like\n if (isPromiseLike(result)) {\n return (result as any).then((nextResult: Awaited<Result>) => nextResult);\n }\n\n return {\n then: <TResult1, TResult2>(\n onFulfilled?: ((result: Result) => TResult1 | Promise<TResult1>) | null | undefined,\n _onRejected?: ((reason: any) => TResult2 | Promise<TResult2>) | null | undefined\n ): PromiseLike<TResult1 | TResult2> => {\n try {\n return resolvedPromiseLike<TResult1>(onFulfilled!(result));\n } catch (e) {\n // We could run this check prior to calling onFulfilled above, but\n // this function has an extremely high call volume with the most likely scenario being that\n // onFulfilled is defined, so it is more efficient to check here.\n if (onFulfilled === undefined) {\n // assume TResult1 == Result and just pass result down the chain\n return resolvedPromiseLike(result) as unknown as PromiseLike<TResult1>;\n }\n return rejectedPromiseLike<TResult1>(e);\n }\n },\n };\n}\n\n/**\n * Returns a PromiseLike object that rejects with the specified reason.\n *\n * @param reason rejection value\n * @returns PromiseLike that rejects with reason\n */\nexport function rejectedPromiseLike<Result>(reason: any): PromiseLike<Result> {\n if (isPromiseLike(reason)) {\n return (reason as any).then((nextResult: Awaited<Result>) => nextResult);\n }\n\n return {\n then: <TResult1, TResult2>(\n _onFulfilled?: ((result: Result) => TResult1 | Promise<TResult1>) | null | undefined,\n onRejected?: ((reason: any) => TResult2 | Promise<TResult2>) | null | undefined\n ): PromiseLike<TResult1 | TResult2> => {\n if (typeof onRejected === 'function') {\n try {\n return resolvedPromiseLike<TResult2>(onRejected(reason));\n } catch (e) {\n return rejectedPromiseLike<TResult2>(e);\n }\n }\n\n // assume TResult2 == Result and just pass rejection down the chain\n return rejectedPromiseLike(reason) as unknown as PromiseLike<TResult2>;\n },\n };\n}\n\n/**\n * Indicates if an object is PromiseLike.\n *\n * @param x anything\n * @returns true if x is PromiseLike; false if not\n */\nexport function isPromiseLike<T = any>(x: any): x is PromiseLike<T> {\n return typeof x?.then === 'function';\n}\n\n/**\n * As Promise.race, but returns sychronously if any of the supplied values resolve/reject\n * synchronously.\n *\n * @param values as Promise.race\n * @returns as Promise.race\n */\nexport function racesync<T extends readonly unknown[] | []>(\n values: T\n): PromiseLike<Awaited<T[number]>> {\n for (const value of values) {\n let settled: PromiseLike<Awaited<T[number]>> | undefined = undefined;\n\n if (isPromiseLike(value)) {\n value.then(\n (_: any) => {\n settled = value;\n },\n (_: any) => {\n settled = value;\n }\n );\n } else {\n settled = resolvedPromiseLike(value as any);\n }\n\n if (settled !== undefined) {\n return settled;\n }\n }\n\n return Promise.race(values);\n}\n\n/**\n * Polyfill for Promise.withResolvers().\n *\n * @returns { promise, resolve, reject }\n */\nexport function withResolvers<T>() {\n let resolve: (_: T) => void, reject: (_: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve: resolve!, reject: reject! };\n}\n","import { ArrayIsArray, JSONStringify, JSONParse, ObjectKeys } from './language';\nimport { Err, Result, err, ok } from './result';\n\n/**\n * Recursively compares two values and indicates if they are equal.\n *\n * @param x first value\n * @param y second value\n * @returns true if x and y are recursively equal to each other; false if not\n */\nexport function deepEquals<T>(x: T, y: T): boolean {\n if (x === undefined) {\n return y === undefined;\n } else if (x === null) {\n return y === null;\n } else if (y === null) {\n return x === null;\n } else if (ArrayIsArray(x)) {\n if (!ArrayIsArray(y) || x.length !== y.length) {\n return false;\n }\n\n for (let i = 0; i < x.length; ++i) {\n if (!deepEquals(x[i], y[i])) {\n return false;\n }\n }\n\n return true;\n } else if (typeof x === 'object') {\n if (typeof y !== 'object') {\n return false;\n }\n\n const xkeys = Object.keys(x);\n const ykeys = Object.keys(y);\n if (xkeys.length !== ykeys.length) {\n return false;\n }\n\n for (let i = 0; i < xkeys.length; ++i) {\n const key = xkeys[i];\n if (!deepEquals((x as any)[key], (y as any)[key])) {\n return false;\n }\n }\n\n return true;\n }\n return x === y;\n}\n\n/**\n * A deterministic JSON stringify implementation. Heavily adapted from https://github.com/epoberezkin/fast-json-stable-stringify.\n * This is needed because insertion order for JSON.stringify(object) affects output:\n * JSON.stringify({a: 1, b: 2})\n * \"{\"a\":1,\"b\":2}\"\n * JSON.stringify({b: 2, a: 1})\n * \"{\"b\":2,\"a\":1}\"\n * @param data Data to be JSON-stringified.\n * @returns JSON.stringified value with consistent ordering of keys.\n */\nexport function stableJSONStringify(node: any): string | undefined {\n // This is for Date values.\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n // eslint-disable-next-line no-param-reassign\n node = node.toJSON();\n }\n if (node === undefined) {\n return;\n }\n if (typeof node === 'number') {\n return isFinite(node) ? '' + node : 'null';\n }\n if (typeof node !== 'object') {\n return JSONStringify(node);\n }\n\n let i;\n let out;\n if (ArrayIsArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) {\n out += ',';\n }\n out += stableJSONStringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) {\n return 'null';\n }\n\n const objKeys = ObjectKeys(node).sort();\n out = '';\n for (i = 0; i < objKeys.length; i++) {\n const key = objKeys[i];\n const value = stableJSONStringify(node[key]);\n\n if (!value) {\n continue;\n }\n if (out) {\n out += ',';\n }\n out += JSONStringify(key) + ':' + value;\n }\n return '{' + out + '}';\n}\n\n/**\n * Converts an arbitrary value to an Error.\n *\n * @param x anything\n * @returns Error corresponding to x\n */\nexport function toError(x: any): Error {\n if (x instanceof Error) {\n return x;\n }\n\n return new Error(typeof x === 'string' ? x : JSON.stringify(x));\n}\n\n/**\n * Deep copies a JSON object. Only works for non-complex values.\n * No Date or Functions etc.\n */\nexport function deepCopy<T>(x: T): T | undefined {\n const stringified = JSONStringify(x);\n return stringified ? JSONParse(stringified) : undefined;\n}\n\n/**\n * Transforms a ReadableStream in to an AsyncIterable\n *\n * Allows consumption of a ReadableStream using for-await-of syntax.\n * Ensures proper cleanup and error handling for all stream control paths.\n *\n * @param stream the ReadableStream to be transformed\n * @returns Result<AsyncIterable<T>, Error> built from the provided ReadableStream\n */\nexport function readableStreamToAsyncIterable<T>(\n stream: ReadableStream<T>\n): Result<AsyncIterable<T>, Error> {\n if (stream.locked) {\n return err(new Error('ReadableStream is already locked'));\n }\n\n // If the stream already supports async iteration, just return it\n if (Symbol.asyncIterator in stream) {\n return ok(stream as AsyncIterable<T>);\n }\n\n const reader = stream.getReader();\n\n return ok({\n [Symbol.asyncIterator]: () => ({\n next: async () => {\n try {\n const result = await reader.read();\n if (result.done) {\n try {\n reader.releaseLock();\n } catch {}\n return { done: true, value: undefined };\n }\n return {\n done: false,\n value: result.value,\n };\n } catch (e) {\n try {\n reader.releaseLock();\n } catch {}\n throw e;\n }\n },\n\n return: async (value?: T) => {\n try {\n await reader.cancel();\n } catch {}\n try {\n reader.releaseLock();\n } catch {}\n return { done: true, value };\n },\n\n throw: async (exception?: any) => {\n try {\n await reader.cancel();\n } catch {}\n try {\n reader.releaseLock();\n } catch {}\n throw exception;\n },\n }),\n });\n}\n","export type Version = `${number}.${number}` | `${number}.${number}.${number}`;\n\n/**\n * Indicates if a given instance of a service satisfies a request. Note that this function\n * assumes the version numbers are valid strings.\n *\n * @param provided ServiceVersion of the service instance to be provided\n * @param requested ServiceVersion requested\n * @returns true if the service instance to be provided satisfies the request\n */\nexport function satisfies(provided: Version, requested: Version): boolean {\n const providedN = provided.split('.').map((s) => parseInt(s));\n const requestedN = requested.split('.').map((s) => parseInt(s));\n\n return providedN[0] === requestedN[0] && providedN[1] >= requestedN[1];\n}\n\n/**\n * Indicates if a string is valid as a version.\n *\n * @param s arbitrary string\n * @returns true if s is a valid version string\n */\nexport function stringIsVersion(s: string): s is Version {\n const versionParts = s.split('.');\n return (\n (versionParts.length === 2 || versionParts.length === 3) &&\n versionParts.every((part) => part.match(/^\\d+$/))\n );\n}\n","export enum HttpStatusCode {\n Ok = 200,\n Created = 201,\n NoContent = 204,\n NotModified = 304,\n BadRequest = 400,\n Unauthorized = 401,\n Forbidden = 403,\n NotFound = 404,\n ServerError = 500,\n GatewayTimeout = 504,\n}\n\n// Logic from https://github.com/salesforce-experience-platform-emu/lds-lightning-platform/blob/main/packages/lds-network-aura/src/middlewares/utils.ts#L197\nexport function getFetchResponseFromAuraError(err: any): FetchResponse<unknown> {\n // Handle ConnectInJava exception shapes\n if (err.data !== undefined && err.data.statusCode !== undefined) {\n let data: Record<string, any> = {};\n data = err.data as ConnectInJavaError;\n if (err.id !== undefined) {\n data.id = err.id;\n }\n return new FetchResponse(data.statusCode, data);\n }\n\n // Handle all the other kind of errors\n return new FetchResponse(HttpStatusCode.ServerError, {\n error: err.message,\n });\n}\n\n// Backwards-compatible fetch error coerce\n// Adapted from https://github.com/salesforce-experience-platform-emu/luvio/blob/main/packages/@conduit-client/network-adapter-fetch/src/fetchNetworkAdapter.ts#L67\nexport async function coerceResponseToFetchResponse(\n response: Response\n): Promise<FetchResponse<unknown>> {\n const { status } = response;\n // coerce headers\n const responseHeaders = {} as any;\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n // parse body\n let responseBody = null;\n if (status !== 204) {\n const contentType = responseHeaders['content-type'];\n responseBody =\n contentType && contentType.startsWith('application/json')\n ? await response.json()\n : await response.text();\n }\n\n return new FetchResponse(status, responseBody, responseHeaders);\n}\n\nexport interface ConnectInJavaError {\n data: {\n errorCode: string;\n message: string;\n statusCode: number;\n };\n id: string;\n message: string;\n stackTrace: string;\n}\n\nfunction getStatusText(status: HttpStatusCode): string {\n switch (status) {\n case HttpStatusCode.Ok:\n return 'OK';\n case HttpStatusCode.Created:\n return 'Created';\n case HttpStatusCode.NotModified:\n return 'Not Modified';\n case HttpStatusCode.BadRequest:\n return 'Bad Request';\n case HttpStatusCode.NotFound:\n return 'Not Found';\n case HttpStatusCode.ServerError:\n return 'Server Error';\n default:\n return `Unexpected HTTP Status Code: ${status}`;\n }\n}\n\nexport interface Headers {\n [name: string]: string;\n}\n\nexport class FetchResponse<T> extends Error {\n readonly status: HttpStatusCode;\n readonly body: T;\n readonly headers: Headers;\n readonly ok: boolean;\n readonly statusText: string;\n\n constructor(status: HttpStatusCode, body: T, headers?: Headers) {\n super();\n this.status = status;\n this.body = body;\n this.headers = headers || {};\n this.ok = status >= 200 && this.status <= 299;\n this.statusText = getStatusText(status);\n }\n}\n","import { ArrayIsArray, ObjectKeys, ObjectFreeze, WeakSetConstructor } from './language';\n\nconst deeplyFrozen = new WeakSetConstructor();\n\nexport function deepFreeze(value: any) {\n // No need to freeze primitives or already frozen stuff\n if (typeof value !== 'object' || value === null || deeplyFrozen.has(value)) {\n return;\n }\n deeplyFrozen.add(value);\n if (ArrayIsArray(value)) {\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepFreeze(value[i]);\n }\n } else {\n const keys = ObjectKeys(value);\n\n for (let i = 0, len = keys.length; i < len; i += 1) {\n deepFreeze(value[keys[i]]);\n }\n }\n ObjectFreeze(value);\n}\n","import { ArrayIsArray, ObjectEntries } from './language';\n\nfunction isScalar(value: unknown): value is string | number | boolean | null | undefined {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null ||\n value === undefined\n );\n}\n\nfunction isScalarObject(\n value: object\n): value is Record<string, string | number | boolean | null | undefined> {\n return Object.values(value).every((value) => isScalar(value));\n}\n\nfunction isScalarArray(value: any[]): value is (string | number | boolean | null | undefined)[] {\n return value.every((item) => isScalar(item));\n}\n\nexport function encodeQueryParam(paramName: string, value: unknown, explode: boolean): string[] {\n switch (typeof value) {\n case 'string':\n return [`${paramName}=${encodeURIComponent(value)}`];\n case 'number':\n case 'boolean':\n return [`${paramName}=${value}`];\n case 'object':\n if (value === null) {\n return [];\n }\n if (ArrayIsArray(value)) {\n if (!isScalarArray(value)) {\n throw new Error(`Unsupported non-scalar array type for ${paramName}`);\n }\n if (explode) {\n return value.map(\n (item) => `${paramName}=${item ? encodeURIComponent(item) : item}`\n );\n }\n return [\n `${paramName}=${value.map((item) => (item ? encodeURIComponent(item) : item)).join(',')}`,\n ];\n }\n\n if (!isScalarObject(value)) {\n throw new Error(`Unsupported non-scalar object type for ${paramName}`);\n }\n\n if (explode) {\n return ObjectEntries(value).map(\n ([key, value]) => `${key}=${value ? encodeURIComponent(value) : value}`\n );\n }\n return [\n `${paramName}=${ObjectEntries(value)\n .flat()\n .map((item) => (item ? encodeURIComponent(item) : item))\n .join(',')}`,\n ];\n default:\n return [];\n }\n}\n","export type IErrorWithData<Data> = Error & {\n data: Data;\n};\n\nexport type IInternalError<Data = undefined> = IErrorWithData<Data> & {\n type: 'internal';\n};\nexport type IUserVisibleError<Data = undefined> = IErrorWithData<Data> & {\n type: 'user-visible';\n};\n\nexport type CommandError = InternalError | UserVisibleError | Error;\n\nexport class InternalError<Data = undefined> extends Error implements IInternalError<Data> {\n type: 'internal' = 'internal';\n\n constructor(public data: Data) {\n super();\n }\n}\n\nexport class UserVisibleError<Data = undefined> extends Error implements IUserVisibleError<Data> {\n type: 'user-visible' = 'user-visible';\n\n constructor(public data: Data) {\n super();\n }\n}\n","/**\n * Function signature for command decorators\n *\n * Uses flexible typing to accommodate different command interfaces and decorator patterns\n *\n * @param command - The command instance to decorate\n * @param options - All options passed to applyDecorators (decorator extracts what it needs)\n * @returns A new command instance with the decoration applied, or the original command if decorator doesn't apply\n */\nexport type DecoratorFunction = (command: any, options: any) => any;\n\n/**\n * Applies an array of decorators to a command in sequence\n *\n * Each decorator receives the command and the full options object, and is responsible\n * for determining if it should apply based on the options. Decorators are applied\n * in the order they appear in the array, allowing bindings to control precedence.\n *\n * @template TCommand - The command type\n * @param baseCommand - The base command to decorate\n * @param decorators - Array of decorator functions to apply in sequence\n * @param options - Configuration options passed to each decorator\n * @returns The decorated command (may be the same instance if no decorators apply)\n *\n * @example\n * ```typescript\n * import { createAbortableDecorator } from '@conduit-client/command-fetch-network/v1';\n * import { applyDecorators } from '@conduit-client/utils';\n *\n * const decorators = [createAbortableDecorator];\n * const options = { signal: new AbortController().signal };\n * const decoratedCommand = applyDecorators(baseCommand, decorators, options);\n * ```\n */\nexport function applyDecorators<TCommand>(\n baseCommand: TCommand,\n decorators: DecoratorFunction[],\n options?: any\n): TCommand {\n if (!decorators || decorators.length === 0) {\n return baseCommand;\n }\n\n // Apply decorators in sequence - each decorator decides if it should apply\n return decorators.reduce((command, decorator) => decorator(command, options), baseCommand);\n}\n"],"names":["matches","level","err","ArrayIsArray","JSONStringify","ObjectKeys","JSONParse","HttpStatusCode","keys","ObjectFreeze","value","ObjectEntries"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/bfs.ts","../src/file-parser-logger.ts","../src/include-exclude.ts","../src/language.ts","../src/logger.ts","../src/result.ts","../src/set.ts","../src/string.ts","../src/subscribable.ts","../src/promises.ts","../src/utils.ts","../src/version.ts","../src/error-handling.ts","../src/deep-freeze.ts","../src/query-params.ts","../src/errors.ts","../src/command-decorators.ts"],"sourcesContent":["export function bfs<T, R = T>(\n start: T[],\n predicate: (node: T) => boolean,\n getChildren: (node: T) => T[]\n): Set<R> {\n const queue: T[] = [...start];\n const visited = new Set([...start]);\n const matches = new Set<R>();\n\n while (queue.length) {\n const curr = queue.shift()!;\n if (predicate(curr)) {\n // The cast here is useful when predicate does type narrowing\n matches.add(curr as unknown as R);\n }\n\n const children = getChildren(curr);\n for (const child of children) {\n if (!visited.has(child)) {\n visited.add(child);\n queue.push(child);\n }\n }\n }\n\n return matches;\n}\n","import type { NamedLoggerService } from './logger';\n\ntype Position = { line: number; column: number };\n\nexport function lineFormatter(position: Position, message: string, filePath: string): string {\n return `${message} (${filePath}:${position.line}:${position.column})`;\n}\n\nexport interface FileParserLogger {\n filePath: string;\n trace(position: Position, message: string): void;\n debug(position: Position, message: string): void;\n info(position: Position, message: string): void;\n warn(position: Position, message: string): void;\n error(position: Position, message: string): void;\n}\n\nexport class DefaultFileParserLogger {\n constructor(\n private services: NamedLoggerService,\n public filePath: string\n ) {}\n\n trace(position: Position, message: string): void {\n this.services.logger.trace(this.format(position, message));\n }\n debug(position: Position, message: string): void {\n this.services.logger.debug(this.format(position, message));\n }\n info(position: Position, message: string): void {\n this.services.logger.info(this.format(position, message));\n }\n warn(position: Position, message: string): void {\n this.services.logger.warn(this.format(position, message));\n }\n error(position: Position, message: string): void {\n this.services.logger.error(this.format(position, message));\n }\n\n format(position: Position, message: string): string {\n return lineFormatter(position, message, this.filePath);\n }\n}\n","export type IncludeExcludeMatcher =\n // exact match\n | string\n\n // RegExp to match against\n | RegExp\n\n // predicate function\n | ((s: string) => boolean)\n\n // array of any of the above\n | Array<IncludeExcludeMatcher>;\n\nexport type IncludeExclude = {\n include?: IncludeExcludeMatcher;\n exclude?: IncludeExcludeMatcher;\n};\n\nfunction matches(test: IncludeExcludeMatcher | undefined, s: string): boolean {\n if (test === undefined) {\n return false;\n } else if (typeof test === 'string') {\n return s === test;\n } else if (test instanceof RegExp) {\n return test.test(s);\n } else if (typeof test === 'function') {\n return test(s);\n }\n\n return test.some((m) => matches(m, s));\n}\n\n/**\n * Indicates if an IncludeExclude includes a given string.\n *\n * @param incexc IncludeExclude that specifies strings to be included/excluded\n * @param s string to be checked\n * @returns true in incexc includes s; false if not\n */\nexport function includes(incexc: IncludeExclude, s: string): boolean {\n // specifically excluded\n if (matches(incexc.exclude, s)) {\n return false;\n }\n\n // specifically included\n if (matches(incexc.include, s)) {\n return true;\n }\n\n // include was specified & did not match s, assume excluded\n if (incexc.include) {\n return false;\n }\n\n // include not specified & not specifically excluded, assume included\n return true;\n}\n","const { create, freeze, keys, entries } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\nconst { isArray } = Array;\nconst { push, indexOf, slice } = Array.prototype;\n\nconst { stringify, parse } = JSON;\n\nconst WeakSetConstructor = WeakSet;\n\nexport {\n // Object\n create as ObjectCreate,\n freeze as ObjectFreeze,\n keys as ObjectKeys,\n entries as ObjectEntries,\n // Object.prototype\n hasOwnProperty as ObjectPrototypeHasOwnProperty,\n // Array\n isArray as ArrayIsArray,\n // Array.prototype\n push as ArrayPrototypePush,\n indexOf as ArrayPrototypeIndexOf,\n slice as ArrayPrototypeSlice,\n // JSON\n stringify as JSONStringify,\n parse as JSONParse,\n // WeakSet\n WeakSetConstructor,\n};\n","import type { NamedService, ServiceDescriptor } from './service';\n\n/**\n * Service that builds TypeScript source files.\n */\nexport type LoggerService = {\n trace(message: string): void;\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n};\n\nexport type NamedLoggerService<Name extends string = 'logger'> = NamedService<Name, LoggerService>;\n\nexport type LoggerServiceDescriptor = ServiceDescriptor<LoggerService, 'logger', '1.0'>;\n\nexport const LogLevelMap = {\n TRACE: 4,\n DEBUG: 3,\n INFO: 2,\n WARN: 1,\n ERROR: 0,\n} as const;\n\nexport type LogLevel = keyof typeof LogLevelMap;\nexport type Printer = (message: string) => void;\nexport type Formatter = (level: LogLevel, message: string) => string;\n\n/**\n * A simple Logger implementation.\n */\nexport class ConsoleLogger implements LoggerService {\n messages: { level: LogLevel; message: string }[] = [];\n\n constructor(\n public level: LogLevel = 'WARN',\n // eslint-disable-next-line no-console\n private printer: Printer = console.log,\n private formatter: Formatter = (level, message) => `${level}: ${message}`\n ) {}\n trace(message: string): void {\n this.log('TRACE', message);\n }\n debug(message: string): void {\n this.log('DEBUG', message);\n }\n info(message: string): void {\n this.log('INFO', message);\n }\n warn(message: string): void {\n this.log('WARN', message);\n }\n error(message: string): void {\n this.log('ERROR', message);\n }\n\n log(level: LogLevel, message: string): void {\n if (LogLevelMap[level] > LogLevelMap[this.level]) {\n return;\n }\n\n this.printer(this.formatter(level, message));\n }\n}\n\n/**\n * Constructs a new LoggerService.\n */\nexport function loggerService(\n level?: LogLevel,\n printer?: Printer,\n formatter?: Formatter\n): LoggerService {\n return new ConsoleLogger(level, printer, formatter);\n}\n","/**\n * A Result can either be an `Ok` or an `Err` variant.\n * The usage of `this is Ok<T,E>` and `this is Err<T,E>` on the return\n * values of `isOk` and `isErr` act as a type guard on the specific result\n * instance, e.g.\n *\n * function(result: Result<string, unknown>) {\n * result.value // this is a type error because value only exists on `Ok` results, and `Result` can be `Ok` or `Err`.\n * result.error // this is also a type error because `error` only exists on `Err`, and `Result` can be `Ok`\n * if(result.isOk()){\n * result.value // this is not a type error because we checked first, and the result said result is an `Ok`\n * result.error // this is a type error because we know that result is an `Ok`\n * } else {\n * result.error // this is also okay because type script knows that result is not an `Ok` in this `else`, so it must be an `Err`\n * result.value // this is a type error because we know that result is an `Err`\n * }\n * }\n *\n */\ninterface IResult<T, E> {\n /**\n * Used to check if a `Result` is an `OK`\n *\n * @returns `true` if the result is an `OK` variant of Result\n */\n isOk(): this is Ok<T, E>;\n\n /**\n * Used to check if a `Result` is an `Err`\n *\n * @returns `true` if the result is an `Err` variant of Result\n */\n isErr(): this is Err<T, E>;\n}\n\nexport type OkDataTypeOf<T> = T extends IResult<infer D, any> ? D : never;\nexport type ErrorTypeOf<T> = T extends IResult<any, infer E> ? E : never;\n\nexport class Ok<T, E> implements IResult<T, E> {\n constructor(readonly value: T) {}\n\n isOk(): this is Ok<T, E> {\n return true;\n }\n\n isErr(): this is Err<T, E> {\n return !this.isOk();\n }\n}\n\nexport class Err<T, E> implements IResult<T, E> {\n constructor(readonly error: E) {}\n\n isOk(): this is Ok<T, E> {\n return false;\n }\n\n isErr(): this is Err<T, E> {\n return !this.isOk();\n }\n}\n\nexport const ok = <T, E = never>(value: T): Ok<T, E> => new Ok(value);\nexport const err = <T = never, E = unknown>(err: E): Err<T, E> => new Err(err);\n\nexport type Result<T, E> = Ok<T, E> | Err<T, E>;\n\nexport type Callback<Result> = (result: Result) => void;\n\n// an error to indicate that the data inside a Result construct\n// is missing or incomplete\nexport class DataNotFoundError extends Error {\n constructor(message?: string) {\n super(message);\n this.name = 'DataNotFoundError';\n }\n}\n\nexport class DataIncompleteError<Data> extends Error {\n constructor(\n message?: string,\n public partialData?: Data\n ) {\n super(message);\n this.name = 'DataIncompleteError';\n }\n}\n\nexport function isDataNotFoundError(error: any): error is DataNotFoundError {\n return error instanceof DataNotFoundError || error.name === 'DataNotFoundError';\n}\n\nexport function isDataIncompleteError(error: any): error is DataNotFoundError {\n return error instanceof DataIncompleteError || error.name === 'DataIncompleteError';\n}\n\nexport function isCacheHitOrError<CacheReturn extends Result<any, any>>(\n value: CacheReturn\n): boolean {\n if (value.isErr() && (isDataIncompleteError(value.error) || isDataNotFoundError(value.error))) {\n return false;\n }\n\n return true;\n}\n\nexport function isCacheMiss<CacheReturn extends Result<any, any>>(value: CacheReturn) {\n return !isCacheHitOrError(value);\n}\n\nexport function isResult<T, E>(value: unknown): value is Result<T, E> {\n // More robust check that doesn't rely on instanceof which can fail across module boundaries\n return (\n value != null &&\n typeof value === 'object' &&\n 'isOk' in value &&\n 'isErr' in value &&\n typeof value.isOk === 'function' &&\n typeof value.isErr === 'function' &&\n ((value.isOk() === true && value.isErr() === false && 'value' in value) ||\n (value.isOk() === false && value.isErr() === true && 'error' in value))\n );\n}\n","export function setOverlaps<T>(setA: Set<T>, setB: Set<T>): boolean {\n for (const element of setA) {\n if (setB.has(element)) {\n return true;\n }\n }\n return false;\n}\n\nexport function setDifference<T>(setA: Set<T>, setB: Set<T>): Set<T> {\n const differenceSet = new Set<T>();\n\n for (const element of setA) {\n if (!setB.has(element)) {\n differenceSet.add(element);\n }\n }\n\n return differenceSet;\n}\n\nexport function addAllToSet<T>(targetSet: Set<T>, sourceSet: Set<T>): void {\n for (const element of sourceSet) {\n targetSet.add(element);\n }\n}\n","/**\n * Converts unsafe identifier characters to '_' to use as TypeScript identifiers in codegen. Zero-length\n * strings are returned as-is even though they are not valid TypeScript identifiers. Callers\n * should consider the origin of the string & guard against this possibility.\n *\n * Regex from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n *\n * For example:\n * - '123foo' -> '_23foo' (can't start with number)\n * - 'foo.bar' -> 'foo_bar' (can't have periods)\n * - 'foo$bar' -> 'foo$bar' (can have $)\n *\n * @param s the string to convert\n * @returns a TypeScript safe identifier with '_'\n */\nexport const toTypeScriptSafeIdentifier = (s: string): string =>\n s.length >= 1\n ? s[0].replace(/[^$_\\p{ID_Start}]/u, '_') +\n s.slice(1).replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_')\n : '';\n","import { isResult, SyncOrAsync, type Callback } from '.';\nimport type { Result } from './result';\nimport { ok, err } from './result';\n\n/**\n * Data that can be subscribed to for changes with a callback.\n */\nexport type Subscribable<CallbackData, RefreshResult> = {\n subscribe(callback: Callback<CallbackData>): Unsubscribe;\n refresh(): SyncOrAsync<RefreshResult>;\n};\n\nexport type RefreshResult<E> = Result<void, E>;\n\nexport function isSubscribable(obj: unknown): obj is Subscribable<any, any> {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'subscribe' in obj &&\n typeof obj.subscribe === 'function' &&\n 'refresh' in obj &&\n typeof obj.refresh === 'function'\n );\n}\n\nexport function isSubscribableResult<T, E>(x: unknown): x is SubscribableResult<T, E> {\n if (!isResult(x)) {\n return false;\n }\n\n return isSubscribable(x.isOk() ? x.value : x.error);\n}\n\nexport function buildSubscribableResult(\n result: Result<any, any>,\n subscribe: (callback: Callback<Result<any, any>>) => Unsubscribe,\n refresh: () => SyncOrAsync<RefreshResult<any>>\n): SubscribableResult<any, any> {\n if (result.isOk()) {\n return ok({ data: result.value, subscribe, refresh });\n } else {\n return err({ failure: result.error, subscribe, refresh });\n }\n}\n\n/**\n * Unsubscribe function returned from a subscribe call.\n */\nexport type Unsubscribe = () => void;\n\n/**\n * Base subscribable type for SubscribableResult to reduce duplication.\n */\ntype SubscribableBase<T, E> = Subscribable<Result<T, E>, RefreshResult<E>>;\n\n/**\n * A subscribable result is a Result that allows a consumer to subscribe to changes in the Result. Both success and error cases are subscribable.\n */\nexport type SubscribableResult<T, E> = Result<\n SubscribableBase<T, E> & { data: T },\n SubscribableBase<T, E> & { failure: E }\n>;\n","/**\n * Returns a PromiseLike object that resolves with the specified result.\n *\n * @param result resolved result\n * @returns\n */\nexport function resolvedPromiseLike<Result>(result: Result | Promise<Result>): PromiseLike<Result> {\n // Don't nest anything promise like\n if (isPromiseLike(result)) {\n return (result as any).then((nextResult: Awaited<Result>) => nextResult);\n }\n\n return {\n then: <TResult1, TResult2>(\n onFulfilled?: ((result: Result) => TResult1 | Promise<TResult1>) | null | undefined,\n _onRejected?: ((reason: any) => TResult2 | Promise<TResult2>) | null | undefined\n ): PromiseLike<TResult1 | TResult2> => {\n try {\n return resolvedPromiseLike<TResult1>(onFulfilled!(result));\n } catch (e) {\n // We could run this check prior to calling onFulfilled above, but\n // this function has an extremely high call volume with the most likely scenario being that\n // onFulfilled is defined, so it is more efficient to check here.\n if (onFulfilled === undefined) {\n // assume TResult1 == Result and just pass result down the chain\n return resolvedPromiseLike(result) as unknown as PromiseLike<TResult1>;\n }\n return rejectedPromiseLike<TResult1>(e);\n }\n },\n };\n}\n\n/**\n * Returns a PromiseLike object that rejects with the specified reason.\n *\n * @param reason rejection value\n * @returns PromiseLike that rejects with reason\n */\nexport function rejectedPromiseLike<Result>(reason: any): PromiseLike<Result> {\n if (isPromiseLike(reason)) {\n return (reason as any).then((nextResult: Awaited<Result>) => nextResult);\n }\n\n return {\n then: <TResult1, TResult2>(\n _onFulfilled?: ((result: Result) => TResult1 | Promise<TResult1>) | null | undefined,\n onRejected?: ((reason: any) => TResult2 | Promise<TResult2>) | null | undefined\n ): PromiseLike<TResult1 | TResult2> => {\n if (typeof onRejected === 'function') {\n try {\n return resolvedPromiseLike<TResult2>(onRejected(reason));\n } catch (e) {\n return rejectedPromiseLike<TResult2>(e);\n }\n }\n\n // assume TResult2 == Result and just pass rejection down the chain\n return rejectedPromiseLike(reason) as unknown as PromiseLike<TResult2>;\n },\n };\n}\n\n/**\n * Indicates if an object is PromiseLike.\n *\n * @param x anything\n * @returns true if x is PromiseLike; false if not\n */\nexport function isPromiseLike<T = any>(x: any): x is PromiseLike<T> {\n return typeof x?.then === 'function';\n}\n\n/**\n * As Promise.race, but returns sychronously if any of the supplied values resolve/reject\n * synchronously.\n *\n * @param values as Promise.race\n * @returns as Promise.race\n */\nexport function racesync<T extends readonly unknown[] | []>(\n values: T\n): PromiseLike<Awaited<T[number]>> {\n for (const value of values) {\n let settled: PromiseLike<Awaited<T[number]>> | undefined = undefined;\n\n if (isPromiseLike(value)) {\n value.then(\n (_: any) => {\n settled = value;\n },\n (_: any) => {\n settled = value;\n }\n );\n } else {\n settled = resolvedPromiseLike(value as any);\n }\n\n if (settled !== undefined) {\n return settled;\n }\n }\n\n return Promise.race(values);\n}\n\n/**\n * Polyfill for Promise.withResolvers().\n *\n * @returns { promise, resolve, reject }\n */\nexport function withResolvers<T>() {\n let resolve: (_: T) => void, reject: (_: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve: resolve!, reject: reject! };\n}\n","import { ArrayIsArray, JSONStringify, JSONParse, ObjectKeys } from './language';\nimport { Err, Result, err, ok } from './result';\n\n/**\n * Recursively compares two values and indicates if they are equal.\n *\n * @param x first value\n * @param y second value\n * @returns true if x and y are recursively equal to each other; false if not\n */\nexport function deepEquals<T>(x: T, y: T): boolean {\n if (x === undefined) {\n return y === undefined;\n } else if (x === null) {\n return y === null;\n } else if (y === null) {\n return x === null;\n } else if (ArrayIsArray(x)) {\n if (!ArrayIsArray(y) || x.length !== y.length) {\n return false;\n }\n\n for (let i = 0; i < x.length; ++i) {\n if (!deepEquals(x[i], y[i])) {\n return false;\n }\n }\n\n return true;\n } else if (typeof x === 'object') {\n if (typeof y !== 'object') {\n return false;\n }\n\n const xkeys = Object.keys(x);\n const ykeys = Object.keys(y);\n if (xkeys.length !== ykeys.length) {\n return false;\n }\n\n for (let i = 0; i < xkeys.length; ++i) {\n const key = xkeys[i];\n if (!deepEquals((x as any)[key], (y as any)[key])) {\n return false;\n }\n }\n\n return true;\n }\n return x === y;\n}\n\n/**\n * A deterministic JSON stringify implementation. Heavily adapted from https://github.com/epoberezkin/fast-json-stable-stringify.\n * This is needed because insertion order for JSON.stringify(object) affects output:\n * JSON.stringify({a: 1, b: 2})\n * \"{\"a\":1,\"b\":2}\"\n * JSON.stringify({b: 2, a: 1})\n * \"{\"b\":2,\"a\":1}\"\n * @param data Data to be JSON-stringified.\n * @returns JSON.stringified value with consistent ordering of keys.\n */\nexport function stableJSONStringify(node: any): string | undefined {\n // This is for Date values.\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n // eslint-disable-next-line no-param-reassign\n node = node.toJSON();\n }\n if (node === undefined) {\n return;\n }\n if (typeof node === 'number') {\n return isFinite(node) ? '' + node : 'null';\n }\n if (typeof node !== 'object') {\n return JSONStringify(node);\n }\n\n let i;\n let out;\n if (ArrayIsArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) {\n out += ',';\n }\n out += stableJSONStringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) {\n return 'null';\n }\n\n const objKeys = ObjectKeys(node).sort();\n out = '';\n for (i = 0; i < objKeys.length; i++) {\n const key = objKeys[i];\n const value = stableJSONStringify(node[key]);\n\n if (!value) {\n continue;\n }\n if (out) {\n out += ',';\n }\n out += JSONStringify(key) + ':' + value;\n }\n return '{' + out + '}';\n}\n\n/**\n * Converts an arbitrary value to an Error.\n *\n * @param x anything\n * @returns Error corresponding to x\n */\nexport function toError(x: any): Error {\n if (x instanceof Error) {\n return x;\n }\n\n return new Error(typeof x === 'string' ? x : JSON.stringify(x));\n}\n\n/**\n * Deep copies a JSON object. Only works for non-complex values.\n * No Date or Functions etc.\n */\nexport function deepCopy<T>(x: T): T | undefined {\n const stringified = JSONStringify(x);\n return stringified ? JSONParse(stringified) : undefined;\n}\n\n/**\n * Transforms a ReadableStream in to an AsyncIterable\n *\n * Allows consumption of a ReadableStream using for-await-of syntax.\n * Ensures proper cleanup and error handling for all stream control paths.\n *\n * @param stream the ReadableStream to be transformed\n * @returns Result<AsyncIterable<T>, Error> built from the provided ReadableStream\n */\nexport function readableStreamToAsyncIterable<T>(\n stream: ReadableStream<T>\n): Result<AsyncIterable<T>, Error> {\n if (stream.locked) {\n return err(new Error('ReadableStream is already locked'));\n }\n\n // If the stream already supports async iteration, just return it\n if (Symbol.asyncIterator in stream) {\n return ok(stream as AsyncIterable<T>);\n }\n\n const reader = stream.getReader();\n\n return ok({\n [Symbol.asyncIterator]: () => ({\n next: async () => {\n try {\n const result = await reader.read();\n if (result.done) {\n try {\n reader.releaseLock();\n } catch {}\n return { done: true, value: undefined };\n }\n return {\n done: false,\n value: result.value,\n };\n } catch (e) {\n try {\n reader.releaseLock();\n } catch {}\n throw e;\n }\n },\n\n return: async (value?: T) => {\n try {\n await reader.cancel();\n } catch {}\n try {\n reader.releaseLock();\n } catch {}\n return { done: true, value };\n },\n\n throw: async (exception?: any) => {\n try {\n await reader.cancel();\n } catch {}\n try {\n reader.releaseLock();\n } catch {}\n throw exception;\n },\n }),\n });\n}\n","export type Version = `${number}.${number}` | `${number}.${number}.${number}`;\n\n/**\n * Indicates if a given instance of a service satisfies a request. Note that this function\n * assumes the version numbers are valid strings.\n *\n * @param provided ServiceVersion of the service instance to be provided\n * @param requested ServiceVersion requested\n * @returns true if the service instance to be provided satisfies the request\n */\nexport function satisfies(provided: Version, requested: Version): boolean {\n const providedN = provided.split('.').map((s) => parseInt(s));\n const requestedN = requested.split('.').map((s) => parseInt(s));\n\n return providedN[0] === requestedN[0] && providedN[1] >= requestedN[1];\n}\n\n/**\n * Indicates if a string is valid as a version.\n *\n * @param s arbitrary string\n * @returns true if s is a valid version string\n */\nexport function stringIsVersion(s: string): s is Version {\n const versionParts = s.split('.');\n return (\n (versionParts.length === 2 || versionParts.length === 3) &&\n versionParts.every((part) => part.match(/^\\d+$/))\n );\n}\n","export enum HttpStatusCode {\n Ok = 200,\n Created = 201,\n NoContent = 204,\n NotModified = 304,\n BadRequest = 400,\n Unauthorized = 401,\n Forbidden = 403,\n NotFound = 404,\n ServerError = 500,\n GatewayTimeout = 504,\n}\n\n// Logic from https://github.com/salesforce-experience-platform-emu/lds-lightning-platform/blob/main/packages/lds-network-aura/src/middlewares/utils.ts#L197\nexport function getFetchResponseFromAuraError(err: any): FetchResponse<unknown> {\n // Handle ConnectInJava exception shapes\n if (err.data !== undefined && err.data.statusCode !== undefined) {\n let data: Record<string, any> = {};\n data = err.data as ConnectInJavaError;\n if (err.id !== undefined) {\n data.id = err.id;\n }\n return new FetchResponse(data.statusCode, data);\n }\n\n // Handle all the other kind of errors\n return new FetchResponse(HttpStatusCode.ServerError, {\n error: err.message,\n });\n}\n\n// Backwards-compatible fetch error coerce\n// Adapted from https://github.com/salesforce-experience-platform-emu/luvio/blob/main/packages/@conduit-client/network-adapter-fetch/src/fetchNetworkAdapter.ts#L67\nexport async function coerceResponseToFetchResponse(\n response: Response\n): Promise<FetchResponse<unknown>> {\n const { status } = response;\n // coerce headers\n const responseHeaders = {} as any;\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n // parse body\n let responseBody = null;\n if (status !== 204) {\n const contentType = responseHeaders['content-type'];\n responseBody =\n contentType && contentType.startsWith('application/json')\n ? await response.json()\n : await response.text();\n }\n\n return new FetchResponse(status, responseBody, responseHeaders);\n}\n\nexport interface ConnectInJavaError {\n data: {\n errorCode: string;\n message: string;\n statusCode: number;\n };\n id: string;\n message: string;\n stackTrace: string;\n}\n\nfunction getStatusText(status: HttpStatusCode): string {\n switch (status) {\n case HttpStatusCode.Ok:\n return 'OK';\n case HttpStatusCode.Created:\n return 'Created';\n case HttpStatusCode.NotModified:\n return 'Not Modified';\n case HttpStatusCode.BadRequest:\n return 'Bad Request';\n case HttpStatusCode.NotFound:\n return 'Not Found';\n case HttpStatusCode.ServerError:\n return 'Server Error';\n default:\n return `Unexpected HTTP Status Code: ${status}`;\n }\n}\n\nexport interface Headers {\n [name: string]: string;\n}\n\nexport class FetchResponse<T> extends Error {\n readonly status: HttpStatusCode;\n readonly body: T;\n readonly headers: Headers;\n readonly ok: boolean;\n readonly statusText: string;\n\n constructor(status: HttpStatusCode, body: T, headers?: Headers) {\n super();\n this.status = status;\n this.body = body;\n this.headers = headers || {};\n this.ok = status >= 200 && this.status <= 299;\n this.statusText = getStatusText(status);\n }\n}\n","import { ArrayIsArray, ObjectKeys, ObjectFreeze, WeakSetConstructor } from './language';\n\nconst deeplyFrozen = new WeakSetConstructor();\n\nexport function deepFreeze(value: any) {\n // No need to freeze primitives or already frozen stuff\n if (typeof value !== 'object' || value === null || deeplyFrozen.has(value)) {\n return;\n }\n deeplyFrozen.add(value);\n if (ArrayIsArray(value)) {\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepFreeze(value[i]);\n }\n } else {\n const keys = ObjectKeys(value);\n\n for (let i = 0, len = keys.length; i < len; i += 1) {\n deepFreeze(value[keys[i]]);\n }\n }\n ObjectFreeze(value);\n}\n","import { ArrayIsArray, ObjectEntries } from './language';\n\nfunction isScalar(value: unknown): value is string | number | boolean | null | undefined {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null ||\n value === undefined\n );\n}\n\nfunction isScalarObject(\n value: object\n): value is Record<string, string | number | boolean | null | undefined> {\n return Object.values(value).every((value) => isScalar(value));\n}\n\nfunction isScalarArray(value: any[]): value is (string | number | boolean | null | undefined)[] {\n return value.every((item) => isScalar(item));\n}\n\nexport function encodeQueryParam(paramName: string, value: unknown, explode: boolean): string[] {\n switch (typeof value) {\n case 'string':\n return [`${paramName}=${encodeURIComponent(value)}`];\n case 'number':\n case 'boolean':\n return [`${paramName}=${value}`];\n case 'object':\n if (value === null) {\n return [];\n }\n if (ArrayIsArray(value)) {\n if (!isScalarArray(value)) {\n throw new Error(`Unsupported non-scalar array type for ${paramName}`);\n }\n if (explode) {\n return value.map(\n (item) => `${paramName}=${item ? encodeURIComponent(item) : item}`\n );\n }\n return [\n `${paramName}=${value.map((item) => (item ? encodeURIComponent(item) : item)).join(',')}`,\n ];\n }\n\n if (!isScalarObject(value)) {\n throw new Error(`Unsupported non-scalar object type for ${paramName}`);\n }\n\n if (explode) {\n return ObjectEntries(value).map(\n ([key, value]) => `${key}=${value ? encodeURIComponent(value) : value}`\n );\n }\n return [\n `${paramName}=${ObjectEntries(value)\n .flat()\n .map((item) => (item ? encodeURIComponent(item) : item))\n .join(',')}`,\n ];\n default:\n return [];\n }\n}\n","export type IErrorWithData<Data> = Error & {\n data: Data;\n};\n\nexport type IInternalError<Data = undefined> = IErrorWithData<Data> & {\n type: 'internal';\n};\nexport type IUserVisibleError<Data = undefined> = IErrorWithData<Data> & {\n type: 'user-visible';\n};\n\nexport type CommandError = InternalError | UserVisibleError | Error;\n\nexport class InternalError<Data = undefined> extends Error implements IInternalError<Data> {\n type: 'internal' = 'internal';\n\n constructor(public data: Data) {\n super();\n }\n}\n\nexport class UserVisibleError<Data = undefined> extends Error implements IUserVisibleError<Data> {\n type: 'user-visible' = 'user-visible';\n\n constructor(public data: Data) {\n super();\n }\n}\n\nexport function isUserVisibleError<Data = undefined>(\n error: unknown\n): error is IUserVisibleError<Data> {\n return error instanceof Error && 'type' in error && error.type === 'user-visible';\n}\n\nexport function logError(error: unknown): void {\n if (isUserVisibleError(error)) {\n return;\n }\n\n console.error('OneStore Command threw an error that we did not expect', error);\n}\n","/**\n * Function signature for command decorators\n *\n * Uses flexible typing to accommodate different command interfaces and decorator patterns\n *\n * @param command - The command instance to decorate\n * @param options - All options passed to applyDecorators (decorator extracts what it needs)\n * @returns A new command instance with the decoration applied, or the original command if decorator doesn't apply\n */\nexport type DecoratorFunction = (command: any, options: any) => any;\n\n/**\n * Applies an array of decorators to a command in sequence\n *\n * Each decorator receives the command and the full options object, and is responsible\n * for determining if it should apply based on the options. Decorators are applied\n * in the order they appear in the array, allowing bindings to control precedence.\n *\n * @template TCommand - The command type\n * @param baseCommand - The base command to decorate\n * @param decorators - Array of decorator functions to apply in sequence\n * @param options - Configuration options passed to each decorator\n * @returns The decorated command (may be the same instance if no decorators apply)\n *\n * @example\n * ```typescript\n * import { createAbortableDecorator } from '@conduit-client/command-fetch-network/v1';\n * import { applyDecorators } from '@conduit-client/utils';\n *\n * const decorators = [createAbortableDecorator];\n * const options = { signal: new AbortController().signal };\n * const decoratedCommand = applyDecorators(baseCommand, decorators, options);\n * ```\n */\nexport function applyDecorators<TCommand>(\n baseCommand: TCommand,\n decorators: DecoratorFunction[],\n options?: any\n): TCommand {\n if (!decorators || decorators.length === 0) {\n return baseCommand;\n }\n\n // Apply decorators in sequence - each decorator decides if it should apply\n return decorators.reduce((command, decorator) => decorator(command, options), baseCommand);\n}\n"],"names":["matches","level","err","ArrayIsArray","JSONStringify","ObjectKeys","JSONParse","HttpStatusCode","keys","ObjectFreeze","value","ObjectEntries"],"mappings":"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"}
|
package/dist/types/errors.d.ts
CHANGED
|
@@ -18,3 +18,5 @@ export declare class UserVisibleError<Data = undefined> extends Error implements
|
|
|
18
18
|
type: 'user-visible';
|
|
19
19
|
constructor(data: Data);
|
|
20
20
|
}
|
|
21
|
+
export declare function isUserVisibleError<Data = undefined>(error: unknown): error is IUserVisibleError<Data>;
|
|
22
|
+
export declare function logError(error: unknown): void;
|