@conduit-client/utils 5.67.0-dev1

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 (39) hide show
  1. package/README.md +12 -0
  2. package/dist/index.js +649 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/types/__tests__/bfs.spec.d.ts +1 -0
  5. package/dist/types/__tests__/command-decorators.spec.d.ts +1 -0
  6. package/dist/types/__tests__/deep-freeze.spec.d.ts +1 -0
  7. package/dist/types/__tests__/error-handling.spec.d.ts +1 -0
  8. package/dist/types/__tests__/file-parser-logger.spec.d.ts +1 -0
  9. package/dist/types/__tests__/include-exclude.spec.d.ts +1 -0
  10. package/dist/types/__tests__/logger.spec.d.ts +1 -0
  11. package/dist/types/__tests__/promises.spec.d.ts +1 -0
  12. package/dist/types/__tests__/query-params.spec.d.ts +1 -0
  13. package/dist/types/__tests__/result.spec.d.ts +1 -0
  14. package/dist/types/__tests__/set.spec.d.ts +1 -0
  15. package/dist/types/__tests__/string.spec.d.ts +1 -0
  16. package/dist/types/__tests__/subscribable.spec.d.ts +1 -0
  17. package/dist/types/__tests__/utils.spec.d.ts +1 -0
  18. package/dist/types/__tests__/version.spec.d.ts +1 -0
  19. package/dist/types/bfs.d.ts +1 -0
  20. package/dist/types/command-decorators.d.ts +34 -0
  21. package/dist/types/deep-freeze.d.ts +1 -0
  22. package/dist/types/error-handling.d.ts +35 -0
  23. package/dist/types/errors.d.ts +20 -0
  24. package/dist/types/file-parser-logger.d.ts +26 -0
  25. package/dist/types/include-exclude.d.ts +13 -0
  26. package/dist/types/index.d.ts +19 -0
  27. package/dist/types/language.d.ts +27 -0
  28. package/dist/types/logger.d.ts +46 -0
  29. package/dist/types/promises.d.ts +39 -0
  30. package/dist/types/query-params.d.ts +1 -0
  31. package/dist/types/result.d.ts +64 -0
  32. package/dist/types/service.d.ts +22 -0
  33. package/dist/types/set.d.ts +3 -0
  34. package/dist/types/string.d.ts +16 -0
  35. package/dist/types/subscribable.d.ts +30 -0
  36. package/dist/types/utility-types.d.ts +71 -0
  37. package/dist/types/utils.d.ts +42 -0
  38. package/dist/types/version.d.ts +17 -0
  39. package/package.json +34 -0
@@ -0,0 +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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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare function bfs<T, R = T>(start: T[], predicate: (node: T) => boolean, getChildren: (node: T) => T[]): Set<R>;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Function signature for command decorators
3
+ *
4
+ * Uses flexible typing to accommodate different command interfaces and decorator patterns
5
+ *
6
+ * @param command - The command instance to decorate
7
+ * @param options - All options passed to applyDecorators (decorator extracts what it needs)
8
+ * @returns A new command instance with the decoration applied, or the original command if decorator doesn't apply
9
+ */
10
+ export type DecoratorFunction = (command: any, options: any) => any;
11
+ /**
12
+ * Applies an array of decorators to a command in sequence
13
+ *
14
+ * Each decorator receives the command and the full options object, and is responsible
15
+ * for determining if it should apply based on the options. Decorators are applied
16
+ * in the order they appear in the array, allowing bindings to control precedence.
17
+ *
18
+ * @template TCommand - The command type
19
+ * @param baseCommand - The base command to decorate
20
+ * @param decorators - Array of decorator functions to apply in sequence
21
+ * @param options - Configuration options passed to each decorator
22
+ * @returns The decorated command (may be the same instance if no decorators apply)
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * import { createAbortableDecorator } from '@conduit-client/command-fetch-network/v1';
27
+ * import { applyDecorators } from '@conduit-client/utils';
28
+ *
29
+ * const decorators = [createAbortableDecorator];
30
+ * const options = { signal: new AbortController().signal };
31
+ * const decoratedCommand = applyDecorators(baseCommand, decorators, options);
32
+ * ```
33
+ */
34
+ export declare function applyDecorators<TCommand>(baseCommand: TCommand, decorators: DecoratorFunction[], options?: any): TCommand;
@@ -0,0 +1 @@
1
+ export declare function deepFreeze(value: any): void;
@@ -0,0 +1,35 @@
1
+ export declare enum HttpStatusCode {
2
+ Ok = 200,
3
+ Created = 201,
4
+ NoContent = 204,
5
+ NotModified = 304,
6
+ BadRequest = 400,
7
+ Unauthorized = 401,
8
+ Forbidden = 403,
9
+ NotFound = 404,
10
+ ServerError = 500,
11
+ GatewayTimeout = 504
12
+ }
13
+ export declare function getFetchResponseFromAuraError(err: any): FetchResponse<unknown>;
14
+ export declare function coerceResponseToFetchResponse(response: Response): Promise<FetchResponse<unknown>>;
15
+ export interface ConnectInJavaError {
16
+ data: {
17
+ errorCode: string;
18
+ message: string;
19
+ statusCode: number;
20
+ };
21
+ id: string;
22
+ message: string;
23
+ stackTrace: string;
24
+ }
25
+ export interface Headers {
26
+ [name: string]: string;
27
+ }
28
+ export declare class FetchResponse<T> extends Error {
29
+ readonly status: HttpStatusCode;
30
+ readonly body: T;
31
+ readonly headers: Headers;
32
+ readonly ok: boolean;
33
+ readonly statusText: string;
34
+ constructor(status: HttpStatusCode, body: T, headers?: Headers);
35
+ }
@@ -0,0 +1,20 @@
1
+ export type IErrorWithData<Data> = Error & {
2
+ data: Data;
3
+ };
4
+ export type IInternalError<Data = undefined> = IErrorWithData<Data> & {
5
+ type: 'internal';
6
+ };
7
+ export type IUserVisibleError<Data = undefined> = IErrorWithData<Data> & {
8
+ type: 'user-visible';
9
+ };
10
+ export type CommandError = InternalError | UserVisibleError | Error;
11
+ export declare class InternalError<Data = undefined> extends Error implements IInternalError<Data> {
12
+ data: Data;
13
+ type: 'internal';
14
+ constructor(data: Data);
15
+ }
16
+ export declare class UserVisibleError<Data = undefined> extends Error implements IUserVisibleError<Data> {
17
+ data: Data;
18
+ type: 'user-visible';
19
+ constructor(data: Data);
20
+ }
@@ -0,0 +1,26 @@
1
+ import type { NamedLoggerService } from './logger';
2
+ type Position = {
3
+ line: number;
4
+ column: number;
5
+ };
6
+ export declare function lineFormatter(position: Position, message: string, filePath: string): string;
7
+ export interface FileParserLogger {
8
+ filePath: string;
9
+ trace(position: Position, message: string): void;
10
+ debug(position: Position, message: string): void;
11
+ info(position: Position, message: string): void;
12
+ warn(position: Position, message: string): void;
13
+ error(position: Position, message: string): void;
14
+ }
15
+ export declare class DefaultFileParserLogger {
16
+ private services;
17
+ filePath: string;
18
+ constructor(services: NamedLoggerService, filePath: string);
19
+ trace(position: Position, message: string): void;
20
+ debug(position: Position, message: string): void;
21
+ info(position: Position, message: string): void;
22
+ warn(position: Position, message: string): void;
23
+ error(position: Position, message: string): void;
24
+ format(position: Position, message: string): string;
25
+ }
26
+ export {};
@@ -0,0 +1,13 @@
1
+ export type IncludeExcludeMatcher = string | RegExp | ((s: string) => boolean) | Array<IncludeExcludeMatcher>;
2
+ export type IncludeExclude = {
3
+ include?: IncludeExcludeMatcher;
4
+ exclude?: IncludeExcludeMatcher;
5
+ };
6
+ /**
7
+ * Indicates if an IncludeExclude includes a given string.
8
+ *
9
+ * @param incexc IncludeExclude that specifies strings to be included/excluded
10
+ * @param s string to be checked
11
+ * @returns true in incexc includes s; false if not
12
+ */
13
+ export declare function includes(incexc: IncludeExclude, s: string): boolean;
@@ -0,0 +1,19 @@
1
+ export * from './bfs';
2
+ export * from './file-parser-logger';
3
+ export { type IncludeExclude, includes } from './include-exclude';
4
+ export * from './language';
5
+ export * from './logger';
6
+ export * from './result';
7
+ export * from './set';
8
+ export { type NamedService, type ServiceVersion, type ServiceDescriptor } from './service';
9
+ export * from './string';
10
+ export * from './subscribable';
11
+ export * from './promises';
12
+ export * from './utility-types';
13
+ export * from './utils';
14
+ export { satisfies, stringIsVersion, type Version } from './version';
15
+ export * from './error-handling';
16
+ export * from './deep-freeze';
17
+ export * from './query-params';
18
+ export * from './errors';
19
+ export { applyDecorators, type DecoratorFunction } from './command-decorators';
@@ -0,0 +1,27 @@
1
+ declare const create: {
2
+ (o: object | null): any;
3
+ (o: object | null, properties: PropertyDescriptorMap & ThisType<any>): any;
4
+ }, freeze: {
5
+ <T extends Function>(f: T): T;
6
+ <T extends {
7
+ [idx: string]: U | null | undefined | object;
8
+ }, U extends string | bigint | number | boolean | symbol>(o: T): Readonly<T>;
9
+ <T>(o: T): Readonly<T>;
10
+ }, keys: {
11
+ (o: object): string[];
12
+ (o: {}): string[];
13
+ }, entries: {
14
+ <T>(o: {
15
+ [s: string]: T;
16
+ } | ArrayLike<T>): [string, T][];
17
+ (o: {}): [string, any][];
18
+ };
19
+ declare const hasOwnProperty: (v: PropertyKey) => boolean;
20
+ declare const isArray: (arg: any) => arg is any[];
21
+ declare const push: (...items: any[]) => number, indexOf: (searchElement: any, fromIndex?: number) => number, slice: (start?: number, end?: number) => any[];
22
+ declare const stringify: {
23
+ (value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string;
24
+ (value: any, replacer?: (number | string)[] | null, space?: string | number): string;
25
+ }, parse: (text: string, reviver?: (this: any, key: string, value: any) => any) => any;
26
+ declare const WeakSetConstructor: WeakSetConstructor;
27
+ export { create as ObjectCreate, freeze as ObjectFreeze, keys as ObjectKeys, entries as ObjectEntries, hasOwnProperty as ObjectPrototypeHasOwnProperty, isArray as ArrayIsArray, push as ArrayPrototypePush, indexOf as ArrayPrototypeIndexOf, slice as ArrayPrototypeSlice, stringify as JSONStringify, parse as JSONParse, WeakSetConstructor, };
@@ -0,0 +1,46 @@
1
+ import type { NamedService, ServiceDescriptor } from './service';
2
+ /**
3
+ * Service that builds TypeScript source files.
4
+ */
5
+ export type LoggerService = {
6
+ trace(message: string): void;
7
+ debug(message: string): void;
8
+ info(message: string): void;
9
+ warn(message: string): void;
10
+ error(message: string): void;
11
+ };
12
+ export type NamedLoggerService<Name extends string = 'logger'> = NamedService<Name, LoggerService>;
13
+ export type LoggerServiceDescriptor = ServiceDescriptor<LoggerService, 'logger', '1.0'>;
14
+ export declare const LogLevelMap: {
15
+ readonly TRACE: 4;
16
+ readonly DEBUG: 3;
17
+ readonly INFO: 2;
18
+ readonly WARN: 1;
19
+ readonly ERROR: 0;
20
+ };
21
+ export type LogLevel = keyof typeof LogLevelMap;
22
+ export type Printer = (message: string) => void;
23
+ export type Formatter = (level: LogLevel, message: string) => string;
24
+ /**
25
+ * A simple Logger implementation.
26
+ */
27
+ export declare class ConsoleLogger implements LoggerService {
28
+ level: LogLevel;
29
+ private printer;
30
+ private formatter;
31
+ messages: {
32
+ level: LogLevel;
33
+ message: string;
34
+ }[];
35
+ constructor(level?: LogLevel, printer?: Printer, formatter?: Formatter);
36
+ trace(message: string): void;
37
+ debug(message: string): void;
38
+ info(message: string): void;
39
+ warn(message: string): void;
40
+ error(message: string): void;
41
+ log(level: LogLevel, message: string): void;
42
+ }
43
+ /**
44
+ * Constructs a new LoggerService.
45
+ */
46
+ export declare function loggerService(level?: LogLevel, printer?: Printer, formatter?: Formatter): LoggerService;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Returns a PromiseLike object that resolves with the specified result.
3
+ *
4
+ * @param result resolved result
5
+ * @returns
6
+ */
7
+ export declare function resolvedPromiseLike<Result>(result: Result | Promise<Result>): PromiseLike<Result>;
8
+ /**
9
+ * Returns a PromiseLike object that rejects with the specified reason.
10
+ *
11
+ * @param reason rejection value
12
+ * @returns PromiseLike that rejects with reason
13
+ */
14
+ export declare function rejectedPromiseLike<Result>(reason: any): PromiseLike<Result>;
15
+ /**
16
+ * Indicates if an object is PromiseLike.
17
+ *
18
+ * @param x anything
19
+ * @returns true if x is PromiseLike; false if not
20
+ */
21
+ export declare function isPromiseLike<T = any>(x: any): x is PromiseLike<T>;
22
+ /**
23
+ * As Promise.race, but returns sychronously if any of the supplied values resolve/reject
24
+ * synchronously.
25
+ *
26
+ * @param values as Promise.race
27
+ * @returns as Promise.race
28
+ */
29
+ export declare function racesync<T extends readonly unknown[] | []>(values: T): PromiseLike<Awaited<T[number]>>;
30
+ /**
31
+ * Polyfill for Promise.withResolvers().
32
+ *
33
+ * @returns { promise, resolve, reject }
34
+ */
35
+ export declare function withResolvers<T>(): {
36
+ promise: Promise<T>;
37
+ resolve: (_: T) => void;
38
+ reject: (_: any) => void;
39
+ };
@@ -0,0 +1 @@
1
+ export declare function encodeQueryParam(paramName: string, value: unknown, explode: boolean): string[];
@@ -0,0 +1,64 @@
1
+ /**
2
+ * A Result can either be an `Ok` or an `Err` variant.
3
+ * The usage of `this is Ok<T,E>` and `this is Err<T,E>` on the return
4
+ * values of `isOk` and `isErr` act as a type guard on the specific result
5
+ * instance, e.g.
6
+ *
7
+ * function(result: Result<string, unknown>) {
8
+ * result.value // this is a type error because value only exists on `Ok` results, and `Result` can be `Ok` or `Err`.
9
+ * result.error // this is also a type error because `error` only exists on `Err`, and `Result` can be `Ok`
10
+ * if(result.isOk()){
11
+ * result.value // this is not a type error because we checked first, and the result said result is an `Ok`
12
+ * result.error // this is a type error because we know that result is an `Ok`
13
+ * } else {
14
+ * 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`
15
+ * result.value // this is a type error because we know that result is an `Err`
16
+ * }
17
+ * }
18
+ *
19
+ */
20
+ interface IResult<T, E> {
21
+ /**
22
+ * Used to check if a `Result` is an `OK`
23
+ *
24
+ * @returns `true` if the result is an `OK` variant of Result
25
+ */
26
+ isOk(): this is Ok<T, E>;
27
+ /**
28
+ * Used to check if a `Result` is an `Err`
29
+ *
30
+ * @returns `true` if the result is an `Err` variant of Result
31
+ */
32
+ isErr(): this is Err<T, E>;
33
+ }
34
+ export type OkDataTypeOf<T> = T extends IResult<infer D, any> ? D : never;
35
+ export type ErrorTypeOf<T> = T extends IResult<any, infer E> ? E : never;
36
+ export declare class Ok<T, E> implements IResult<T, E> {
37
+ readonly value: T;
38
+ constructor(value: T);
39
+ isOk(): this is Ok<T, E>;
40
+ isErr(): this is Err<T, E>;
41
+ }
42
+ export declare class Err<T, E> implements IResult<T, E> {
43
+ readonly error: E;
44
+ constructor(error: E);
45
+ isOk(): this is Ok<T, E>;
46
+ isErr(): this is Err<T, E>;
47
+ }
48
+ export declare const ok: <T, E = never>(value: T) => Ok<T, E>;
49
+ export declare const err: <T = never, E = unknown>(err: E) => Err<T, E>;
50
+ export type Result<T, E> = Ok<T, E> | Err<T, E>;
51
+ export type Callback<Result> = (result: Result) => void;
52
+ export declare class DataNotFoundError extends Error {
53
+ constructor(message?: string);
54
+ }
55
+ export declare class DataIncompleteError<Data> extends Error {
56
+ partialData?: Data | undefined;
57
+ constructor(message?: string, partialData?: Data | undefined);
58
+ }
59
+ export declare function isDataNotFoundError(error: any): error is DataNotFoundError;
60
+ export declare function isDataIncompleteError(error: any): error is DataNotFoundError;
61
+ export declare function isCacheHitOrError<CacheReturn extends Result<any, any>>(value: CacheReturn): boolean;
62
+ export declare function isCacheMiss<CacheReturn extends Result<any, any>>(value: CacheReturn): boolean;
63
+ export declare function isResult<T, E>(value: unknown): value is Result<T, E>;
64
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { Version } from './version';
2
+ /**
3
+ * A NamedService is anything that has been given a name.
4
+ */
5
+ export type NamedService<Name extends string, Service = unknown> = Record<Name, Service>;
6
+ /**
7
+ * A ServiceDescriptor is an encapsulation of a Service that adds additional
8
+ * metadata about the service, including the type (or canonical name) and version
9
+ * of the service.
10
+ */
11
+ export type ServiceDescriptor<Service, Type extends string = string, Version extends ServiceVersion = ServiceVersion> = {
12
+ readonly type: Type;
13
+ readonly version: Version;
14
+ service: Service;
15
+ };
16
+ /**
17
+ * Services are versioned using semver major/minor/patch version numbers. Each segment
18
+ * of the version must be a non-negative integer, and unlike semver there are no
19
+ * special semantics for major version 0. The patch specifier is not used in
20
+ * compatibility checks and may be omitted.
21
+ */
22
+ export type ServiceVersion = Version;
@@ -0,0 +1,3 @@
1
+ export declare function setOverlaps<T>(setA: Set<T>, setB: Set<T>): boolean;
2
+ export declare function setDifference<T>(setA: Set<T>, setB: Set<T>): Set<T>;
3
+ export declare function addAllToSet<T>(targetSet: Set<T>, sourceSet: Set<T>): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Converts unsafe identifier characters to '_' to use as TypeScript identifiers in codegen. Zero-length
3
+ * strings are returned as-is even though they are not valid TypeScript identifiers. Callers
4
+ * should consider the origin of the string & guard against this possibility.
5
+ *
6
+ * Regex from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers
7
+ *
8
+ * For example:
9
+ * - '123foo' -> '_23foo' (can't start with number)
10
+ * - 'foo.bar' -> 'foo_bar' (can't have periods)
11
+ * - 'foo$bar' -> 'foo$bar' (can have $)
12
+ *
13
+ * @param s the string to convert
14
+ * @returns a TypeScript safe identifier with '_'
15
+ */
16
+ export declare const toTypeScriptSafeIdentifier: (s: string) => string;
@@ -0,0 +1,30 @@
1
+ import { SyncOrAsync, type Callback } from '.';
2
+ import type { Result } from './result';
3
+ /**
4
+ * Data that can be subscribed to for changes with a callback.
5
+ */
6
+ export type Subscribable<CallbackData, RefreshResult> = {
7
+ subscribe(callback: Callback<CallbackData>): Unsubscribe;
8
+ refresh(): SyncOrAsync<RefreshResult>;
9
+ };
10
+ export type RefreshResult<E> = Result<void, E>;
11
+ export declare function isSubscribable(obj: unknown): obj is Subscribable<any, any>;
12
+ export declare function isSubscribableResult<T, E>(x: unknown): x is SubscribableResult<T, E>;
13
+ export declare function buildSubscribableResult(result: Result<any, any>, subscribe: (callback: Callback<Result<any, any>>) => Unsubscribe, refresh: () => SyncOrAsync<RefreshResult<any>>): SubscribableResult<any, any>;
14
+ /**
15
+ * Unsubscribe function returned from a subscribe call.
16
+ */
17
+ export type Unsubscribe = () => void;
18
+ /**
19
+ * Base subscribable type for SubscribableResult to reduce duplication.
20
+ */
21
+ type SubscribableBase<T, E> = Subscribable<Result<T, E>, RefreshResult<E>>;
22
+ /**
23
+ * A subscribable result is a Result that allows a consumer to subscribe to changes in the Result. Both success and error cases are subscribable.
24
+ */
25
+ export type SubscribableResult<T, E> = Result<SubscribableBase<T, E> & {
26
+ data: T;
27
+ }, SubscribableBase<T, E> & {
28
+ failure: E;
29
+ }>;
30
+ export {};