@dxos/cli-util 0.8.4-main.9735255 → 0.8.4-main.c85a9c8dae

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.
@@ -412,8 +412,8 @@ var waitForSync = Effect3.fn(function* (space) {
412
412
  yield* Console.log("Sync complete");
413
413
  });
414
414
  var flushAndSync = Effect3.fn(function* (opts) {
415
- yield* Database.Service.flush(opts);
416
- const spaceId = yield* Database.Service.spaceId;
415
+ yield* Database.flush(opts);
416
+ const spaceId = yield* Database.spaceId;
417
417
  const space = yield* getSpace(spaceId);
418
418
  yield* waitForSync(space);
419
419
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/form-builder.ts", "../../../src/util/options.ts", "../../../src/util/platform.ts", "../../../src/util/printer.ts", "../../../src/util/runtime.ts", "../../../src/util/space.ts", "../../../src/util/space-format.ts", "../../../src/util/timeout.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Doc from '@effect/printer/Doc';\nimport * as Ansi from '@effect/printer-ansi/Ansi';\nimport * as Option from 'effect/Option';\nimport * as Pipeable from 'effect/Pipeable';\n\nexport type FormBuilderOptions = {\n title?: string;\n prefix?: string;\n};\n\nexport interface FormBuilder extends Pipeable.Pipeable {\n readonly entries: ReadonlyArray<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>;\n readonly title?: string;\n readonly prefix: string;\n}\n\nclass FormBuilderImpl implements FormBuilder {\n readonly entries: Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }> = [];\n readonly title?: string;\n readonly prefix: string;\n\n constructor(options: FormBuilderOptions = {}) {\n this.title = options.title;\n this.prefix = options.prefix ?? '- ';\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Creates a new FormBuilder instance.\n */\nexport const make = (props?: FormBuilderOptions): FormBuilder => new FormBuilderImpl(props);\n\n// Helper to calculate dimensions for formatting\nconst calculateDimensions = (entries: ReadonlyArray<{ key: string }>, prefix: string) => {\n const maxKeyLen = Math.max(0, ...entries.map((entry) => entry.key.length));\n const targetWidth = prefix.length + maxKeyLen + 2;\n return { maxKeyLen, targetWidth };\n};\n\n// Helper to build a formatted key line\nconst buildKeyLine = (prefix: string, key: string, targetWidth: number) => {\n // Use fill to pad the key to targetWidth.\n // Note: We don't add indentation here; indentation is handled by the parent container or nestImpl.\n return Doc.annotate(Doc.fill(targetWidth)(Doc.text(prefix + key + ': ')), Ansi.blackBright);\n};\n\n// Implementation helper\nconst setImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (value !== undefined) {\n let valueDoc: Doc.Doc<any>;\n if (typeof value === 'object' && value !== null) {\n // Assume it's a Doc.Doc\n valueDoc = value as unknown as Doc.Doc<any>;\n } else {\n valueDoc = Doc.text(String(value));\n }\n\n if (color) {\n const ansi = typeof color === 'function' ? color(value as T) : color;\n valueDoc = Doc.annotate(valueDoc, ansi);\n }\n\n (builder as FormBuilderImpl).entries.push({\n key,\n value: valueDoc,\n isNested: false,\n });\n }\n return builder;\n};\n\n/**\n * Adds a key-value pair to the form.\n */\nexport function set<T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function set<T>(\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function set<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | T,\n valueOrColor?: T | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: set(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as T;\n return setImpl(builder, key, value, color);\n } else {\n // Curried: set(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as T;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => setImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestImpl = (parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder => {\n // Build nested entries without title, directly under the parent field name\n\n // Create a temporary builder without title to ignore it.\n const nestedBuilder: FormBuilder = {\n ...builder,\n title: undefined,\n entries: builder.entries,\n };\n\n // Build content.\n let valueDoc = build(nestedBuilder);\n\n // Indent the content by 2 spaces.\n // This ensures that when this doc is embedded in the parent, it is visually nested.\n valueDoc = Doc.indent(valueDoc, 2);\n\n (parent.entries as Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>).push({\n key,\n value: valueDoc,\n isNested: true,\n });\n return parent;\n};\n\n/**\n * Nests another form builder under a key.\n */\nexport function nest(parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder;\nexport function nest(key: string, builder: FormBuilder): (parent: FormBuilder) => FormBuilder;\nexport function nest(\n parentOrKey: FormBuilder | string,\n keyOrBuilder?: string | FormBuilder,\n builder?: FormBuilder,\n): FormBuilder | ((parent: FormBuilder) => FormBuilder) {\n if (parentOrKey instanceof FormBuilderImpl) {\n // Direct: nest(parent, key, builder)\n const parent = parentOrKey;\n const key = keyOrBuilder as string;\n return nestImpl(parent, key, builder!);\n } else {\n // Curried: nest(key, builder)\n const key = parentOrKey as string;\n const builder = keyOrBuilder as FormBuilder;\n return (parent: FormBuilder) => nestImpl(parent, key, builder);\n }\n}\n\n// Implementation helper\nconst optionImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (Option.isSome(value)) {\n return setImpl(builder, key, value.value, color);\n }\n return builder;\n};\n\n/**\n * Adds an optional value if it exists.\n */\nexport function option<T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function option<T>(\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function option<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<T>,\n valueOrColor?: Option.Option<T> | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: option(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as Option.Option<T>;\n return optionImpl(builder, key, value, color);\n } else {\n // Curried: option(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<T>;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => optionImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestedOptionImpl = (builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder => {\n if (Option.isSome(value)) {\n return nestImpl(builder, key, value.value);\n }\n return builder;\n};\n\n/**\n * Nests an optional form builder if it exists.\n */\nexport function nestedOption(builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder;\nexport function nestedOption(key: string, value: Option.Option<FormBuilder>): (builder: FormBuilder) => FormBuilder;\nexport function nestedOption(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<FormBuilder>,\n value?: Option.Option<FormBuilder>,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: nestedOption(builder, key, value)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n return nestedOptionImpl(builder, key, value!);\n } else {\n // Curried: nestedOption(key, value)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<FormBuilder>;\n return (builder: FormBuilder) => nestedOptionImpl(builder, key, value);\n }\n}\n\n// Implementation helper\nconst whenImpl = (builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder => {\n if (condition) {\n for (const op of ops) {\n op(builder);\n }\n }\n return builder;\n};\n\n/**\n * Conditionally executes operations.\n */\nexport function when(builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder;\nexport function when(\n condition: any,\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): (builder: FormBuilder) => FormBuilder;\nexport function when(\n builderOrCondition: FormBuilder | any,\n conditionOrOp?: any | ((b: FormBuilder) => FormBuilder),\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrCondition instanceof FormBuilderImpl) {\n // Direct: when(builder, condition, ...ops)\n const builder = builderOrCondition;\n const condition = conditionOrOp;\n return whenImpl(builder, condition, ...ops);\n } else {\n // Curried: when(condition, ...ops)\n const condition = builderOrCondition;\n const allOps = [conditionOrOp, ...ops].filter(\n (op): op is (b: FormBuilder) => FormBuilder => typeof op === 'function',\n );\n return (builder: FormBuilder) => whenImpl(builder, condition, ...allOps);\n }\n}\n\n// Implementation helper\nconst eachImpl = <T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder => {\n items.forEach((item) => fn(item)(builder));\n return builder;\n};\n\n/**\n * Iterates over an array of items.\n */\nexport function each<T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder;\nexport function each<T>(\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): (builder: FormBuilder) => FormBuilder;\nexport function each<T>(\n builderOrItems: FormBuilder | T[],\n itemsOrFn?: T[] | ((item: T) => (b: FormBuilder) => FormBuilder),\n fn?: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrItems instanceof FormBuilderImpl) {\n // Direct: each(builder, items, fn)\n const builder = builderOrItems;\n const items = itemsOrFn as T[];\n return eachImpl(builder, items, fn!);\n } else {\n // Curried: each(items, fn)\n const items = builderOrItems as T[];\n const fn = itemsOrFn as (item: T) => (b: FormBuilder) => FormBuilder;\n return (builder: FormBuilder) => eachImpl(builder, items, fn);\n }\n}\n\n/**\n * Builds the final document.\n */\nexport const build = (builder: FormBuilder): Doc.Doc<any> => {\n const { targetWidth } = calculateDimensions(builder.entries, builder.prefix);\n const entryLines: Doc.Doc<any>[] = [];\n\n builder.entries.forEach(({ key, value, isNested }) => {\n const keyLine = buildKeyLine(builder.prefix, key, targetWidth);\n if (isNested) {\n // Nested content should start on a new line.\n // value is already indented by nestImpl, so we just cat with hardLine.\n entryLines.push(Doc.hcat([keyLine, Doc.hardLine, value]));\n } else {\n // Single-line value, combine key and value.\n // If the value itself is multiline (e.g. from Doc.string with newlines, though Doc handles that specifically),\n // we might want layout flexibility.\n // For now, standard behavior:\n entryLines.push(Doc.hcat([keyLine, value]));\n }\n });\n\n const entriesDoc = Doc.vsep(entryLines);\n\n if (builder.title) {\n const titleDoc = Doc.hcat([Doc.annotate(Doc.text(builder.title), Ansi.combine(Ansi.bold, Ansi.cyan))]);\n // Join title and entries with a single line break, no extra spacing\n return Doc.cat(titleDoc, Doc.cat(Doc.line, entriesDoc));\n }\n\n return entriesDoc;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Options from '@effect/cli/Options';\n\nimport { Key } from '@dxos/echo';\n\n//\n// Common options.\n// NOTE: Sub-commands should Function.pipe(Options.optional) if required.\n//\n\nexport const Common = {\n functionId: Options.text('function-id').pipe(Options.withDescription('EDGE Function ID.')),\n spaceId: Options.text('space-id').pipe(Options.withSchema(Key.SpaceId), Options.withDescription('Space ID.')),\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { spawn } from 'node:child_process';\n\nimport * as Effect from 'effect/Effect';\n\n/**\n * Copy text to the system clipboard.\n * Supports macOS (pbcopy), Windows (clip), and Linux (xclip/xsel).\n */\nexport const copyToClipboard = (text: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'pbcopy';\n args = [];\n } else if (platform === 'win32') {\n command = 'clip';\n args = [];\n } else {\n // Linux - try xclip or xsel\n command = 'xclip';\n args = ['-selection', 'clipboard'];\n }\n\n const proc = spawn(command, args);\n proc.stdin?.write(text);\n proc.stdin?.end();\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n // Try xsel as fallback on Linux\n if (platform === 'linux') {\n const proc2 = spawn('xsel', ['--clipboard', '--input']);\n proc2.stdin?.write(text);\n proc2.stdin?.end();\n proc2.on('close', (code2) => {\n if (code2 === 0) {\n resolve();\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n });\n proc2.on('error', reject);\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n }\n });\n\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to copy to clipboard: ${error}`),\n });\n\n/**\n * Open a URL in the system's default browser.\n * Supports macOS (open), Windows (start), and Linux (xdg-open).\n */\nexport const openBrowser = (url: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'start';\n args = [url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n const proc = spawn(command, args);\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error('Failed to open browser'));\n }\n });\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to open browser: ${error}`),\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Doc from '@effect/printer/Doc';\nimport * as AnsiDoc from '@effect/printer-ansi/AnsiDoc';\n\n/**\n * Pretty print document.\n */\nexport const print = (doc: Doc.Doc<any>) => AnsiDoc.render(doc, { style: 'pretty' });\n\n/**\n * Pretty prints a list of documents with ANSI colors.\n */\nexport const printList = (items: Array<Doc.Doc<any>>) =>\n AnsiDoc.render(Doc.vsep(items.map((item) => Doc.cat(item, Doc.hardLine))), { style: 'pretty' });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ClientService } from '@dxos/client';\nimport { type Type } from '@dxos/echo';\n\n/** @deprecated Migrate to providing types via plugin capabilities. */\nexport const withTypes: (...types: Type.Entity.Any[]) => Effect.Effect<void, never, ClientService> = (...types) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.addTypes(types));\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { ClientService } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { Database, type Key } from '@dxos/echo';\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\nimport { QueueService } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { isBun } from '@dxos/util';\n\nexport const getSpace = (spaceId: Key.SpaceId): Effect.Effect<Space, SpaceNotFoundError, ClientService> =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n return yield* Option.fromNullable(client.spaces.get(spaceId));\n }).pipe(Effect.catchTag('NoSuchElementException', () => Effect.fail(new SpaceNotFoundError(spaceId))));\n\nexport const spaceIdWithDefault = (spaceId: Option.Option<Key.SpaceId>) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.spaces.waitUntilReady());\n return Option.getOrElse(spaceId, () => client.spaces.default.id);\n });\n\n// TODO(wittjosiah): Factor out.\nexport const spaceLayer = (\n spaceId$: Option.Option<Key.SpaceId>,\n fallbackToDefaultSpace = false,\n): Layer.Layer<Database.Service | QueueService, never, ClientService> => {\n const getSpace = Effect.fn(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.spaces.waitUntilReady());\n\n const spaceId = Match.value(fallbackToDefaultSpace).pipe(\n Match.when(true, () =>\n spaceId$.pipe(\n Option.getOrElse(() => client.spaces.default.id),\n Option.some,\n ),\n ),\n Match.when(false, () => spaceId$),\n Match.exhaustive,\n );\n\n const space = spaceId.pipe(\n Option.flatMap((id) => Option.fromNullable(client.spaces.get(id))),\n Option.getOrUndefined,\n );\n\n if (space) {\n yield* Effect.promise(() => space.waitUntilReady());\n }\n return space;\n });\n\n const db = Layer.scoped(\n Database.Service,\n Effect.acquireRelease(\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n get db(): Database.Database {\n throw new Error('Space not found');\n },\n };\n }\n return { db: space.db };\n }),\n ({ db }) => Effect.promise(() => db.flush({ indexes: true })),\n ),\n );\n\n const queue = Layer.effect(\n QueueService,\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n queues: {\n get: (_dxn) => {\n throw new Error('Queues not available');\n },\n create: () => {\n throw new Error('Queues not available');\n },\n },\n queue: undefined,\n };\n }\n return {\n queues: space.queues,\n queue: undefined,\n };\n }),\n );\n\n return Layer.merge(db, queue);\n};\n\n// TODO(dmaretskyi): There a race condition with edge connection not showing up.\nexport const waitForSync = Effect.fn(function* (space: Space) {\n // TODO(wittjosiah): Find a better way to do this.\n if (!isBun()) {\n // Skipping sync to edge when not in bun env as this indicates running a test.\n return;\n }\n\n // TODO(wittjosiah): This should probably be prompted for.\n if (space.internal.data.edgeReplication !== EdgeReplicationSetting.ENABLED) {\n yield* Console.log('Edge replication is disabled, enabling...');\n yield* Effect.promise(() => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED));\n }\n\n yield* Effect.promise(() =>\n space.internal.syncToEdge({\n onProgress: (state) => log.info('syncing', { state: state ?? 'no connection to edge' }),\n }),\n );\n yield* Console.log('Sync complete');\n});\n\nexport const flushAndSync = Effect.fn(function* (opts?: Database.FlushOptions) {\n yield* Database.Service.flush(opts);\n const spaceId = yield* Database.Service.spaceId;\n const space = yield* getSpace(spaceId);\n yield* waitForSync(space);\n});\n\n// TODO(burdon): Reconcile with @dxos/protocols\nexport class SpaceNotFoundError extends BaseError.extend('SpaceNotFoundError', 'Space not found') {\n constructor(spaceId: string, options?: Omit<BaseErrorOptions, 'context'>) {\n super({ context: { spaceId }, ...options });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { type Space, SpaceState, type SpaceSyncState } from '@dxos/client/echo';\n\nimport * as FormBuilder from './form-builder';\n\n// TODO(wittjosiah): Use @effect/printer.\nexport const formatSpace = Effect.fn(function* (space: Space, options = { verbose: false, truncateKeys: false }) {\n yield* Effect.tryPromise(() => space.waitUntilReady());\n\n // TODO(burdon): Factor out.\n // TODO(burdon): Agent needs to restart before `ready` is available.\n const { open, ready } = space.internal.data.metrics ?? {};\n const startup = open && ready && ready.getTime() - open.getTime();\n\n // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).\n // const host = client.services.services.DevtoolsHost!;\n const pipeline = space.internal.data.pipeline;\n const epoch = pipeline?.currentEpoch?.subject.assertion.number;\n\n const syncState = aggregateSyncState(yield* Effect.tryPromise(() => space.internal.db.coreDatabase.getSyncState()));\n\n return {\n id: space.id,\n state: SpaceState[space.state.get()],\n name: space.state.get() === SpaceState.SPACE_READY ? space.properties.name : 'loading...',\n\n members: space.members.get().length,\n objects: space.internal.db.coreDatabase.getAllObjectIds().length,\n\n key: options.truncateKeys ? space.key.truncate() : space.key.toHex(),\n epoch,\n startup,\n automergeRoot: space.internal.data.pipeline?.spaceRootUrl,\n // appliedEpoch,\n syncState: `${syncState.count} ${getSyncIndicator(syncState.up, syncState.down)} (${syncState.peers} peers)`,\n };\n});\n\nconst aggregateSyncState = (syncState: SpaceSyncState) => {\n const peers = Object.keys(syncState.peers ?? {}).length;\n const missingOnLocal = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnLocal), 0);\n const missingOnRemote = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnRemote), 0);\n const differentDocuments = Math.max(\n ...Object.values(syncState.peers ?? {}).map((peer) => peer.differentDocuments),\n 0,\n );\n\n return {\n count: missingOnLocal + missingOnRemote + differentDocuments,\n peers,\n up: missingOnRemote > 0 || differentDocuments > 0,\n down: missingOnLocal > 0 || differentDocuments > 0,\n };\n};\n\nconst getSyncIndicator = (up: boolean, down: boolean) => {\n if (up) {\n if (down) {\n return '⇅';\n } else {\n return '↑';\n }\n } else {\n if (down) {\n return '↓';\n } else {\n return '✓';\n }\n }\n};\n\nexport type FormattedSpace = {\n id: string;\n state: string;\n name: string | undefined;\n members: number;\n objects: number;\n key: string;\n epoch: any;\n startup: number | undefined;\n automergeRoot: string | undefined;\n syncState: string;\n};\n\n/**\n * Pretty prints a space with ANSI colors.\n */\nexport const printSpace = (spaceData: FormattedSpace) =>\n FormBuilder.make({ title: spaceData.name ?? spaceData.id }).pipe(\n FormBuilder.set('id', spaceData.id),\n FormBuilder.set('state', spaceData.state),\n FormBuilder.set('key', spaceData.key),\n FormBuilder.set('members', spaceData.members),\n FormBuilder.set('objects', spaceData.objects),\n FormBuilder.set('epoch', spaceData.epoch ?? '<none>'),\n FormBuilder.set('startup', spaceData.startup ? `${spaceData.startup}ms` : '<none>'),\n FormBuilder.set('syncState', spaceData.syncState),\n FormBuilder.set('automergeRoot', spaceData.automergeRoot ?? '<none>'),\n FormBuilder.build,\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Cause from 'effect/Cause';\nimport * as Config from 'effect/Config';\nimport type * as ConfigError from 'effect/ConfigError';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nexport const withTimeout: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, Cause.TimeoutException | ConfigError.ConfigError | E, R> = Effect.fnUntraced(function* (effect) {\n const timeout = yield* Config.integer('TIMEOUT').pipe(Config.option);\n const duration = timeout.pipe(\n Option.map(Duration.millis),\n Option.getOrElse(() => Duration.infinity),\n );\n return yield* effect.pipe(Effect.timeout(duration));\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Doc from '@effect/printer/Doc';\nimport * as Ansi from '@effect/printer-ansi/Ansi';\nimport * as Option from 'effect/Option';\nimport * as Pipeable from 'effect/Pipeable';\n\nexport type FormBuilderOptions = {\n title?: string;\n prefix?: string;\n};\n\nexport interface FormBuilder extends Pipeable.Pipeable {\n readonly entries: ReadonlyArray<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>;\n readonly title?: string;\n readonly prefix: string;\n}\n\nclass FormBuilderImpl implements FormBuilder {\n readonly entries: Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }> = [];\n readonly title?: string;\n readonly prefix: string;\n\n constructor(options: FormBuilderOptions = {}) {\n this.title = options.title;\n this.prefix = options.prefix ?? '- ';\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Creates a new FormBuilder instance.\n */\nexport const make = (props?: FormBuilderOptions): FormBuilder => new FormBuilderImpl(props);\n\n// Helper to calculate dimensions for formatting\nconst calculateDimensions = (entries: ReadonlyArray<{ key: string }>, prefix: string) => {\n const maxKeyLen = Math.max(0, ...entries.map((entry) => entry.key.length));\n const targetWidth = prefix.length + maxKeyLen + 2;\n return { maxKeyLen, targetWidth };\n};\n\n// Helper to build a formatted key line\nconst buildKeyLine = (prefix: string, key: string, targetWidth: number) => {\n // Use fill to pad the key to targetWidth.\n // Note: We don't add indentation here; indentation is handled by the parent container or nestImpl.\n return Doc.annotate(Doc.fill(targetWidth)(Doc.text(prefix + key + ': ')), Ansi.blackBright);\n};\n\n// Implementation helper\nconst setImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (value !== undefined) {\n let valueDoc: Doc.Doc<any>;\n if (typeof value === 'object' && value !== null) {\n // Assume it's a Doc.Doc\n valueDoc = value as unknown as Doc.Doc<any>;\n } else {\n valueDoc = Doc.text(String(value));\n }\n\n if (color) {\n const ansi = typeof color === 'function' ? color(value as T) : color;\n valueDoc = Doc.annotate(valueDoc, ansi);\n }\n\n (builder as FormBuilderImpl).entries.push({\n key,\n value: valueDoc,\n isNested: false,\n });\n }\n return builder;\n};\n\n/**\n * Adds a key-value pair to the form.\n */\nexport function set<T>(\n builder: FormBuilder,\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function set<T>(\n key: string,\n value: T,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function set<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | T,\n valueOrColor?: T | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: set(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as T;\n return setImpl(builder, key, value, color);\n } else {\n // Curried: set(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as T;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => setImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestImpl = (parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder => {\n // Build nested entries without title, directly under the parent field name\n\n // Create a temporary builder without title to ignore it.\n const nestedBuilder: FormBuilder = {\n ...builder,\n title: undefined,\n entries: builder.entries,\n };\n\n // Build content.\n let valueDoc = build(nestedBuilder);\n\n // Indent the content by 2 spaces.\n // This ensures that when this doc is embedded in the parent, it is visually nested.\n valueDoc = Doc.indent(valueDoc, 2);\n\n (parent.entries as Array<{ key: string; value: Doc.Doc<any>; isNested?: boolean }>).push({\n key,\n value: valueDoc,\n isNested: true,\n });\n return parent;\n};\n\n/**\n * Nests another form builder under a key.\n */\nexport function nest(parent: FormBuilder, key: string, builder: FormBuilder): FormBuilder;\nexport function nest(key: string, builder: FormBuilder): (parent: FormBuilder) => FormBuilder;\nexport function nest(\n parentOrKey: FormBuilder | string,\n keyOrBuilder?: string | FormBuilder,\n builder?: FormBuilder,\n): FormBuilder | ((parent: FormBuilder) => FormBuilder) {\n if (parentOrKey instanceof FormBuilderImpl) {\n // Direct: nest(parent, key, builder)\n const parent = parentOrKey;\n const key = keyOrBuilder as string;\n return nestImpl(parent, key, builder!);\n } else {\n // Curried: nest(key, builder)\n const key = parentOrKey as string;\n const builder = keyOrBuilder as FormBuilder;\n return (parent: FormBuilder) => nestImpl(parent, key, builder);\n }\n}\n\n// Implementation helper\nconst optionImpl = <T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder => {\n if (Option.isSome(value)) {\n return setImpl(builder, key, value.value, color);\n }\n return builder;\n};\n\n/**\n * Adds an optional value if it exists.\n */\nexport function option<T>(\n builder: FormBuilder,\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder;\nexport function option<T>(\n key: string,\n value: Option.Option<T>,\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): (builder: FormBuilder) => FormBuilder;\nexport function option<T>(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<T>,\n valueOrColor?: Option.Option<T> | Ansi.Ansi | ((value: T) => Ansi.Ansi),\n color?: Ansi.Ansi | ((value: T) => Ansi.Ansi),\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: option(builder, key, value, color?)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n const value = valueOrColor as Option.Option<T>;\n return optionImpl(builder, key, value, color);\n } else {\n // Curried: option(key, value, color?)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<T>;\n const color = valueOrColor as Ansi.Ansi | ((value: T) => Ansi.Ansi) | undefined;\n return (builder: FormBuilder) => optionImpl(builder, key, value, color);\n }\n}\n\n// Implementation helper\nconst nestedOptionImpl = (builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder => {\n if (Option.isSome(value)) {\n return nestImpl(builder, key, value.value);\n }\n return builder;\n};\n\n/**\n * Nests an optional form builder if it exists.\n */\nexport function nestedOption(builder: FormBuilder, key: string, value: Option.Option<FormBuilder>): FormBuilder;\nexport function nestedOption(key: string, value: Option.Option<FormBuilder>): (builder: FormBuilder) => FormBuilder;\nexport function nestedOption(\n builderOrKey: FormBuilder | string,\n keyOrValue?: string | Option.Option<FormBuilder>,\n value?: Option.Option<FormBuilder>,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrKey instanceof FormBuilderImpl) {\n // Direct: nestedOption(builder, key, value)\n const builder = builderOrKey;\n const key = keyOrValue as string;\n return nestedOptionImpl(builder, key, value!);\n } else {\n // Curried: nestedOption(key, value)\n const key = builderOrKey as string;\n const value = keyOrValue as Option.Option<FormBuilder>;\n return (builder: FormBuilder) => nestedOptionImpl(builder, key, value);\n }\n}\n\n// Implementation helper\nconst whenImpl = (builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder => {\n if (condition) {\n for (const op of ops) {\n op(builder);\n }\n }\n return builder;\n};\n\n/**\n * Conditionally executes operations.\n */\nexport function when(builder: FormBuilder, condition: any, ...ops: ((b: FormBuilder) => FormBuilder)[]): FormBuilder;\nexport function when(\n condition: any,\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): (builder: FormBuilder) => FormBuilder;\nexport function when(\n builderOrCondition: FormBuilder | any,\n conditionOrOp?: any | ((b: FormBuilder) => FormBuilder),\n ...ops: ((b: FormBuilder) => FormBuilder)[]\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrCondition instanceof FormBuilderImpl) {\n // Direct: when(builder, condition, ...ops)\n const builder = builderOrCondition;\n const condition = conditionOrOp;\n return whenImpl(builder, condition, ...ops);\n } else {\n // Curried: when(condition, ...ops)\n const condition = builderOrCondition;\n const allOps = [conditionOrOp, ...ops].filter(\n (op): op is (b: FormBuilder) => FormBuilder => typeof op === 'function',\n );\n return (builder: FormBuilder) => whenImpl(builder, condition, ...allOps);\n }\n}\n\n// Implementation helper\nconst eachImpl = <T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder => {\n items.forEach((item) => fn(item)(builder));\n return builder;\n};\n\n/**\n * Iterates over an array of items.\n */\nexport function each<T>(\n builder: FormBuilder,\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder;\nexport function each<T>(\n items: T[],\n fn: (item: T) => (b: FormBuilder) => FormBuilder,\n): (builder: FormBuilder) => FormBuilder;\nexport function each<T>(\n builderOrItems: FormBuilder | T[],\n itemsOrFn?: T[] | ((item: T) => (b: FormBuilder) => FormBuilder),\n fn?: (item: T) => (b: FormBuilder) => FormBuilder,\n): FormBuilder | ((builder: FormBuilder) => FormBuilder) {\n if (builderOrItems instanceof FormBuilderImpl) {\n // Direct: each(builder, items, fn)\n const builder = builderOrItems;\n const items = itemsOrFn as T[];\n return eachImpl(builder, items, fn!);\n } else {\n // Curried: each(items, fn)\n const items = builderOrItems as T[];\n const fn = itemsOrFn as (item: T) => (b: FormBuilder) => FormBuilder;\n return (builder: FormBuilder) => eachImpl(builder, items, fn);\n }\n}\n\n/**\n * Builds the final document.\n */\nexport const build = (builder: FormBuilder): Doc.Doc<any> => {\n const { targetWidth } = calculateDimensions(builder.entries, builder.prefix);\n const entryLines: Doc.Doc<any>[] = [];\n\n builder.entries.forEach(({ key, value, isNested }) => {\n const keyLine = buildKeyLine(builder.prefix, key, targetWidth);\n if (isNested) {\n // Nested content should start on a new line.\n // value is already indented by nestImpl, so we just cat with hardLine.\n entryLines.push(Doc.hcat([keyLine, Doc.hardLine, value]));\n } else {\n // Single-line value, combine key and value.\n // If the value itself is multiline (e.g. from Doc.string with newlines, though Doc handles that specifically),\n // we might want layout flexibility.\n // For now, standard behavior:\n entryLines.push(Doc.hcat([keyLine, value]));\n }\n });\n\n const entriesDoc = Doc.vsep(entryLines);\n\n if (builder.title) {\n const titleDoc = Doc.hcat([Doc.annotate(Doc.text(builder.title), Ansi.combine(Ansi.bold, Ansi.cyan))]);\n // Join title and entries with a single line break, no extra spacing\n return Doc.cat(titleDoc, Doc.cat(Doc.line, entriesDoc));\n }\n\n return entriesDoc;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Options from '@effect/cli/Options';\n\nimport { Key } from '@dxos/echo';\n\n//\n// Common options.\n// NOTE: Sub-commands should Function.pipe(Options.optional) if required.\n//\n\nexport const Common = {\n functionId: Options.text('function-id').pipe(Options.withDescription('EDGE Function ID.')),\n spaceId: Options.text('space-id').pipe(Options.withSchema(Key.SpaceId), Options.withDescription('Space ID.')),\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { spawn } from 'node:child_process';\n\nimport * as Effect from 'effect/Effect';\n\n/**\n * Copy text to the system clipboard.\n * Supports macOS (pbcopy), Windows (clip), and Linux (xclip/xsel).\n */\nexport const copyToClipboard = (text: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'pbcopy';\n args = [];\n } else if (platform === 'win32') {\n command = 'clip';\n args = [];\n } else {\n // Linux - try xclip or xsel\n command = 'xclip';\n args = ['-selection', 'clipboard'];\n }\n\n const proc = spawn(command, args);\n proc.stdin?.write(text);\n proc.stdin?.end();\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n // Try xsel as fallback on Linux\n if (platform === 'linux') {\n const proc2 = spawn('xsel', ['--clipboard', '--input']);\n proc2.stdin?.write(text);\n proc2.stdin?.end();\n proc2.on('close', (code2) => {\n if (code2 === 0) {\n resolve();\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n });\n proc2.on('error', reject);\n } else {\n reject(new Error('Failed to copy to clipboard'));\n }\n }\n });\n\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to copy to clipboard: ${error}`),\n });\n\n/**\n * Open a URL in the system's default browser.\n * Supports macOS (open), Windows (start), and Linux (xdg-open).\n */\nexport const openBrowser = (url: string): Effect.Effect<void, Error> =>\n Effect.tryPromise({\n try: () => {\n return new Promise<void>((resolve, reject) => {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'start';\n args = [url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n const proc = spawn(command, args);\n proc.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error('Failed to open browser'));\n }\n });\n proc.on('error', reject);\n });\n },\n catch: (error) => new Error(`Failed to open browser: ${error}`),\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Doc from '@effect/printer/Doc';\nimport * as AnsiDoc from '@effect/printer-ansi/AnsiDoc';\n\n/**\n * Pretty print document.\n */\nexport const print = (doc: Doc.Doc<any>) => AnsiDoc.render(doc, { style: 'pretty' });\n\n/**\n * Pretty prints a list of documents with ANSI colors.\n */\nexport const printList = (items: Array<Doc.Doc<any>>) =>\n AnsiDoc.render(Doc.vsep(items.map((item) => Doc.cat(item, Doc.hardLine))), { style: 'pretty' });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ClientService } from '@dxos/client';\nimport { type Type } from '@dxos/echo';\n\n/** @deprecated Migrate to providing types via plugin capabilities. */\nexport const withTypes: (...types: Type.AnyEntity[]) => Effect.Effect<void, never, ClientService> = (...types) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.addTypes(types));\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { ClientService } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { Database, type Key } from '@dxos/echo';\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\nimport { QueueService } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { isBun } from '@dxos/util';\n\nexport const getSpace = (spaceId: Key.SpaceId): Effect.Effect<Space, SpaceNotFoundError, ClientService> =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n return yield* Option.fromNullable(client.spaces.get(spaceId));\n }).pipe(Effect.catchTag('NoSuchElementException', () => Effect.fail(new SpaceNotFoundError(spaceId))));\n\nexport const spaceIdWithDefault = (spaceId: Option.Option<Key.SpaceId>) =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.spaces.waitUntilReady());\n return Option.getOrElse(spaceId, () => client.spaces.default.id);\n });\n\n// TODO(wittjosiah): Factor out.\nexport const spaceLayer = (\n spaceId$: Option.Option<Key.SpaceId>,\n fallbackToDefaultSpace = false,\n): Layer.Layer<Database.Service | QueueService, never, ClientService> => {\n const getSpace = Effect.fn(function* () {\n const client = yield* ClientService;\n yield* Effect.promise(() => client.spaces.waitUntilReady());\n\n const spaceId = Match.value(fallbackToDefaultSpace).pipe(\n Match.when(true, () =>\n spaceId$.pipe(\n Option.getOrElse(() => client.spaces.default.id),\n Option.some,\n ),\n ),\n Match.when(false, () => spaceId$),\n Match.exhaustive,\n );\n\n const space = spaceId.pipe(\n Option.flatMap((id) => Option.fromNullable(client.spaces.get(id))),\n Option.getOrUndefined,\n );\n\n if (space) {\n yield* Effect.promise(() => space.waitUntilReady());\n }\n return space;\n });\n\n const db = Layer.scoped(\n Database.Service,\n Effect.acquireRelease(\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n get db(): Database.Database {\n throw new Error('Space not found');\n },\n };\n }\n return { db: space.db };\n }),\n ({ db }) => Effect.promise(() => db.flush({ indexes: true })),\n ),\n );\n\n const queue = Layer.effect(\n QueueService,\n Effect.gen(function* () {\n const space = yield* getSpace();\n if (!space) {\n return {\n queues: {\n get: (_dxn) => {\n throw new Error('Queues not available');\n },\n create: () => {\n throw new Error('Queues not available');\n },\n },\n queue: undefined,\n };\n }\n return {\n queues: space.queues,\n queue: undefined,\n };\n }),\n );\n\n return Layer.merge(db, queue);\n};\n\n// TODO(dmaretskyi): There a race condition with edge connection not showing up.\nexport const waitForSync = Effect.fn(function* (space: Space) {\n // TODO(wittjosiah): Find a better way to do this.\n if (!isBun()) {\n // Skipping sync to edge when not in bun env as this indicates running a test.\n return;\n }\n\n // TODO(wittjosiah): This should probably be prompted for.\n if (space.internal.data.edgeReplication !== EdgeReplicationSetting.ENABLED) {\n yield* Console.log('Edge replication is disabled, enabling...');\n yield* Effect.promise(() => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED));\n }\n\n yield* Effect.promise(() =>\n space.internal.syncToEdge({\n onProgress: (state) => log.info('syncing', { state: state ?? 'no connection to edge' }),\n }),\n );\n yield* Console.log('Sync complete');\n});\n\nexport const flushAndSync = Effect.fn(function* (opts?: Database.FlushOptions) {\n yield* Database.flush(opts);\n const spaceId = yield* Database.spaceId;\n const space = yield* getSpace(spaceId);\n yield* waitForSync(space);\n});\n\n// TODO(burdon): Reconcile with @dxos/protocols\nexport class SpaceNotFoundError extends BaseError.extend('SpaceNotFoundError', 'Space not found') {\n constructor(spaceId: string, options?: Omit<BaseErrorOptions, 'context'>) {\n super({ context: { spaceId }, ...options });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { type Space, SpaceState, type SpaceSyncState } from '@dxos/client/echo';\n\nimport * as FormBuilder from './form-builder';\n\n// TODO(wittjosiah): Use @effect/printer.\nexport const formatSpace = Effect.fn(function* (space: Space, options = { verbose: false, truncateKeys: false }) {\n yield* Effect.tryPromise(() => space.waitUntilReady());\n\n // TODO(burdon): Factor out.\n // TODO(burdon): Agent needs to restart before `ready` is available.\n const { open, ready } = space.internal.data.metrics ?? {};\n const startup = open && ready && ready.getTime() - open.getTime();\n\n // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).\n // const host = client.services.services.DevtoolsHost!;\n const pipeline = space.internal.data.pipeline;\n const epoch = pipeline?.currentEpoch?.subject.assertion.number;\n\n const syncState = aggregateSyncState(yield* Effect.tryPromise(() => space.internal.db.coreDatabase.getSyncState()));\n\n return {\n id: space.id,\n state: SpaceState[space.state.get()],\n name: space.state.get() === SpaceState.SPACE_READY ? space.properties.name : 'loading...',\n\n members: space.members.get().length,\n objects: space.internal.db.coreDatabase.getAllObjectIds().length,\n\n key: options.truncateKeys ? space.key.truncate() : space.key.toHex(),\n epoch,\n startup,\n automergeRoot: space.internal.data.pipeline?.spaceRootUrl,\n // appliedEpoch,\n syncState: `${syncState.count} ${getSyncIndicator(syncState.up, syncState.down)} (${syncState.peers} peers)`,\n };\n});\n\nconst aggregateSyncState = (syncState: SpaceSyncState) => {\n const peers = Object.keys(syncState.peers ?? {}).length;\n const missingOnLocal = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnLocal), 0);\n const missingOnRemote = Math.max(...Object.values(syncState.peers ?? {}).map((peer) => peer.missingOnRemote), 0);\n const differentDocuments = Math.max(\n ...Object.values(syncState.peers ?? {}).map((peer) => peer.differentDocuments),\n 0,\n );\n\n return {\n count: missingOnLocal + missingOnRemote + differentDocuments,\n peers,\n up: missingOnRemote > 0 || differentDocuments > 0,\n down: missingOnLocal > 0 || differentDocuments > 0,\n };\n};\n\nconst getSyncIndicator = (up: boolean, down: boolean) => {\n if (up) {\n if (down) {\n return '⇅';\n } else {\n return '↑';\n }\n } else {\n if (down) {\n return '↓';\n } else {\n return '✓';\n }\n }\n};\n\nexport type FormattedSpace = {\n id: string;\n state: string;\n name: string | undefined;\n members: number;\n objects: number;\n key: string;\n epoch: any;\n startup: number | undefined;\n automergeRoot: string | undefined;\n syncState: string;\n};\n\n/**\n * Pretty prints a space with ANSI colors.\n */\nexport const printSpace = (spaceData: FormattedSpace) =>\n FormBuilder.make({ title: spaceData.name ?? spaceData.id }).pipe(\n FormBuilder.set('id', spaceData.id),\n FormBuilder.set('state', spaceData.state),\n FormBuilder.set('key', spaceData.key),\n FormBuilder.set('members', spaceData.members),\n FormBuilder.set('objects', spaceData.objects),\n FormBuilder.set('epoch', spaceData.epoch ?? '<none>'),\n FormBuilder.set('startup', spaceData.startup ? `${spaceData.startup}ms` : '<none>'),\n FormBuilder.set('syncState', spaceData.syncState),\n FormBuilder.set('automergeRoot', spaceData.automergeRoot ?? '<none>'),\n FormBuilder.build,\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Cause from 'effect/Cause';\nimport * as Config from 'effect/Config';\nimport type * as ConfigError from 'effect/ConfigError';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nexport const withTimeout: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, Cause.TimeoutException | ConfigError.ConfigError | E, R> = Effect.fnUntraced(function* (effect) {\n const timeout = yield* Config.integer('TIMEOUT').pipe(Config.option);\n const duration = timeout.pipe(\n Option.map(Duration.millis),\n Option.getOrElse(() => Duration.infinity),\n );\n return yield* effect.pipe(Effect.timeout(duration));\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["Doc", "Ansi", "Option", "Pipeable", "FormBuilderImpl", "entries", "title", "prefix", "options", "pipe", "pipeArguments", "arguments", "make", "props", "calculateDimensions", "maxKeyLen", "Math", "max", "map", "entry", "key", "length", "targetWidth", "buildKeyLine", "annotate", "fill", "text", "blackBright", "setImpl", "builder", "value", "color", "undefined", "valueDoc", "String", "ansi", "push", "isNested", "set", "builderOrKey", "keyOrValue", "valueOrColor", "nestImpl", "parent", "nestedBuilder", "build", "indent", "nest", "parentOrKey", "keyOrBuilder", "optionImpl", "isSome", "option", "nestedOptionImpl", "nestedOption", "whenImpl", "condition", "ops", "op", "when", "builderOrCondition", "conditionOrOp", "allOps", "filter", "eachImpl", "items", "fn", "forEach", "item", "each", "builderOrItems", "itemsOrFn", "entryLines", "keyLine", "hcat", "hardLine", "entriesDoc", "vsep", "titleDoc", "combine", "bold", "cyan", "cat", "line", "Options", "Key", "Common", "functionId", "text", "pipe", "withDescription", "spaceId", "withSchema", "Key", "SpaceId", "spawn", "Effect", "copyToClipboard", "text", "tryPromise", "try", "Promise", "resolve", "reject", "platform", "process", "command", "args", "proc", "spawn", "stdin", "write", "end", "on", "code", "proc2", "code2", "Error", "catch", "error", "openBrowser", "url", "Doc", "AnsiDoc", "print", "doc", "render", "style", "printList", "items", "vsep", "map", "item", "cat", "hardLine", "Effect", "ClientService", "withTypes", "types", "gen", "client", "ClientService", "promise", "addTypes", "Console", "Effect", "Layer", "Match", "Option", "ClientService", "Database", "BaseError", "QueueService", "log", "EdgeReplicationSetting", "isBun", "getSpace", "spaceId", "gen", "client", "fromNullable", "spaces", "get", "pipe", "catchTag", "fail", "SpaceNotFoundError", "spaceIdWithDefault", "promise", "waitUntilReady", "getOrElse", "default", "id", "spaceLayer", "spaceId$", "fallbackToDefaultSpace", "fn", "value", "when", "some", "exhaustive", "space", "flatMap", "getOrUndefined", "db", "scoped", "Service", "acquireRelease", "Error", "flush", "indexes", "queue", "effect", "queues", "_dxn", "create", "undefined", "merge", "waitForSync", "internal", "data", "edgeReplication", "ENABLED", "setEdgeReplicationPreference", "syncToEdge", "onProgress", "state", "info", "flushAndSync", "opts", "extend", "options", "context", "Effect", "SpaceState", "formatSpace", "fn", "space", "options", "verbose", "truncateKeys", "tryPromise", "waitUntilReady", "open", "ready", "internal", "data", "metrics", "startup", "getTime", "pipeline", "epoch", "currentEpoch", "subject", "assertion", "number", "syncState", "aggregateSyncState", "db", "coreDatabase", "getSyncState", "id", "state", "SpaceState", "get", "name", "SPACE_READY", "properties", "members", "length", "objects", "getAllObjectIds", "key", "truncate", "toHex", "automergeRoot", "spaceRootUrl", "count", "getSyncIndicator", "up", "down", "peers", "Object", "keys", "missingOnLocal", "Math", "max", "values", "map", "peer", "missingOnRemote", "differentDocuments", "printSpace", "spaceData", "make", "title", "pipe", "set", "build", "Config", "Duration", "Effect", "Option", "withTimeout", "fnUntraced", "effect", "timeout", "integer", "pipe", "option", "duration", "map", "millis", "getOrElse", "infinity"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/services/command-config.ts":{"bytes":2575,"imports":[{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"format":"esm"},"src/services/index.ts":{"bytes":480,"imports":[{"path":"src/services/command-config.ts","kind":"import-statement","original":"./command-config"}],"format":"esm"},"src/util/form-builder.ts":{"bytes":31794,"imports":[{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/Ansi","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"effect/Pipeable","kind":"import-statement","external":true}],"format":"esm"},"src/util/options.ts":{"bytes":1890,"imports":[{"path":"@effect/cli/Options","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"format":"esm"},"src/util/platform.ts":{"bytes":10276,"imports":[{"path":"node:child_process","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true}],"format":"esm"},"src/util/printer.ts":{"bytes":1949,"imports":[{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/AnsiDoc","kind":"import-statement","external":true}],"format":"esm"},"src/util/runtime.ts":{"bytes":1700,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true}],"format":"esm"},"src/util/space.ts":{"bytes":16061,"imports":[{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/metadata","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/util/space-format.ts":{"bytes":12792,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"src/util/form-builder.ts","kind":"import-statement","original":"./form-builder"}],"format":"esm"},"src/util/timeout.ts":{"bytes":2533,"imports":[{"path":"effect/Config","kind":"import-statement","external":true},{"path":"effect/Duration","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true}],"format":"esm"},"src/util/index.ts":{"bytes":1158,"imports":[{"path":"src/util/form-builder.ts","kind":"import-statement","original":"./form-builder"},{"path":"src/util/options.ts","kind":"import-statement","original":"./options"},{"path":"src/util/platform.ts","kind":"import-statement","original":"./platform"},{"path":"src/util/printer.ts","kind":"import-statement","original":"./printer"},{"path":"src/util/runtime.ts","kind":"import-statement","original":"./runtime"},{"path":"src/util/space.ts","kind":"import-statement","original":"./space"},{"path":"src/util/space-format.ts","kind":"import-statement","original":"./space-format"},{"path":"src/util/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/index.ts":{"bytes":533,"imports":[{"path":"src/services/index.ts","kind":"import-statement","original":"./services"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/testing/test-console.ts":{"bytes":7760,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"format":"esm"},"src/testing/test-layer.ts":{"bytes":2026,"imports":[{"path":"effect/Function","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"src/services/index.ts","kind":"import-statement","original":"../services"},{"path":"src/testing/test-console.ts","kind":"import-statement","original":"./test-console"}],"format":"esm"},"src/testing/index.ts":{"bytes":567,"imports":[{"path":"src/testing/test-console.ts","kind":"import-statement","original":"./test-console"},{"path":"src/testing/test-layer.ts","kind":"import-statement","original":"./test-layer"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":40219},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-6TKUDRM6.mjs","kind":"import-statement"},{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/Ansi","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"effect/Pipeable","kind":"import-statement","external":true},{"path":"@effect/cli/Options","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/AnsiDoc","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/metadata","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"effect/Config","kind":"import-statement","external":true},{"path":"effect/Duration","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true}],"exports":["CommandConfig","Common","FormBuilder","SpaceNotFoundError","copyToClipboard","flushAndSync","formatSpace","getSpace","openBrowser","print","printList","printSpace","spaceIdWithDefault","spaceLayer","waitForSync","withTimeout","withTypes"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/util/form-builder.ts":{"bytesInOutput":5622},"src/util/index.ts":{"bytesInOutput":0},"src/util/options.ts":{"bytesInOutput":306},"src/util/platform.ts":{"bytesInOutput":2302},"src/util/printer.ts":{"bytesInOutput":296},"src/util/runtime.ts":{"bytesInOutput":244},"src/util/space.ts":{"bytesInOutput":3780},"src/util/space-format.ts":{"bytesInOutput":2551},"src/util/timeout.ts":{"bytesInOutput":471}},"bytes":16259},"dist/lib/node-esm/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5107},"dist/lib/node-esm/testing/index.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-6TKUDRM6.mjs","kind":"import-statement"},{"path":"node:util","kind":"import-statement","external":true},{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true}],"exports":["TestConsole","TestLayer"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/test-console.ts":{"bytesInOutput":1754},"src/testing/index.ts":{"bytesInOutput":0},"src/testing/test-layer.ts":{"bytesInOutput":332}},"bytes":2371},"dist/lib/node-esm/chunk-6TKUDRM6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1399},"dist/lib/node-esm/chunk-6TKUDRM6.mjs":{"imports":[{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"exports":["CommandConfig","__export"],"inputs":{"src/services/command-config.ts":{"bytesInOutput":506}},"bytes":885}}}
1
+ {"inputs":{"src/services/command-config.ts":{"bytes":2575,"imports":[{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"format":"esm"},"src/services/index.ts":{"bytes":480,"imports":[{"path":"src/services/command-config.ts","kind":"import-statement","original":"./command-config"}],"format":"esm"},"src/util/form-builder.ts":{"bytes":31794,"imports":[{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/Ansi","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"effect/Pipeable","kind":"import-statement","external":true}],"format":"esm"},"src/util/options.ts":{"bytes":1890,"imports":[{"path":"@effect/cli/Options","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"format":"esm"},"src/util/platform.ts":{"bytes":10276,"imports":[{"path":"node:child_process","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true}],"format":"esm"},"src/util/printer.ts":{"bytes":1949,"imports":[{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/AnsiDoc","kind":"import-statement","external":true}],"format":"esm"},"src/util/runtime.ts":{"bytes":1696,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true}],"format":"esm"},"src/util/space.ts":{"bytes":15993,"imports":[{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/metadata","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/util/space-format.ts":{"bytes":12792,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"src/util/form-builder.ts","kind":"import-statement","original":"./form-builder"}],"format":"esm"},"src/util/timeout.ts":{"bytes":2533,"imports":[{"path":"effect/Config","kind":"import-statement","external":true},{"path":"effect/Duration","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true}],"format":"esm"},"src/util/index.ts":{"bytes":1158,"imports":[{"path":"src/util/form-builder.ts","kind":"import-statement","original":"./form-builder"},{"path":"src/util/options.ts","kind":"import-statement","original":"./options"},{"path":"src/util/platform.ts","kind":"import-statement","original":"./platform"},{"path":"src/util/printer.ts","kind":"import-statement","original":"./printer"},{"path":"src/util/runtime.ts","kind":"import-statement","original":"./runtime"},{"path":"src/util/space.ts","kind":"import-statement","original":"./space"},{"path":"src/util/space-format.ts","kind":"import-statement","original":"./space-format"},{"path":"src/util/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/index.ts":{"bytes":533,"imports":[{"path":"src/services/index.ts","kind":"import-statement","original":"./services"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/testing/test-console.ts":{"bytes":7760,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"format":"esm"},"src/testing/test-layer.ts":{"bytes":2026,"imports":[{"path":"effect/Function","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"src/services/index.ts","kind":"import-statement","original":"../services"},{"path":"src/testing/test-console.ts","kind":"import-statement","original":"./test-console"}],"format":"esm"},"src/testing/index.ts":{"bytes":567,"imports":[{"path":"src/testing/test-console.ts","kind":"import-statement","original":"./test-console"},{"path":"src/testing/test-layer.ts","kind":"import-statement","original":"./test-layer"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":40188},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-6TKUDRM6.mjs","kind":"import-statement"},{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/Ansi","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"effect/Pipeable","kind":"import-statement","external":true},{"path":"@effect/cli/Options","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@effect/printer/Doc","kind":"import-statement","external":true},{"path":"@effect/printer-ansi/AnsiDoc","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/metadata","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"effect/Config","kind":"import-statement","external":true},{"path":"effect/Duration","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true}],"exports":["CommandConfig","Common","FormBuilder","SpaceNotFoundError","copyToClipboard","flushAndSync","formatSpace","getSpace","openBrowser","print","printList","printSpace","spaceIdWithDefault","spaceLayer","waitForSync","withTimeout","withTypes"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/util/form-builder.ts":{"bytesInOutput":5622},"src/util/index.ts":{"bytesInOutput":0},"src/util/options.ts":{"bytesInOutput":306},"src/util/platform.ts":{"bytesInOutput":2302},"src/util/printer.ts":{"bytesInOutput":296},"src/util/runtime.ts":{"bytesInOutput":244},"src/util/space.ts":{"bytesInOutput":3764},"src/util/space-format.ts":{"bytesInOutput":2551},"src/util/timeout.ts":{"bytesInOutput":471}},"bytes":16243},"dist/lib/node-esm/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5107},"dist/lib/node-esm/testing/index.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-6TKUDRM6.mjs","kind":"import-statement"},{"path":"node:util","kind":"import-statement","external":true},{"path":"effect/Console","kind":"import-statement","external":true},{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true}],"exports":["TestConsole","TestLayer"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/test-console.ts":{"bytesInOutput":1754},"src/testing/index.ts":{"bytesInOutput":0},"src/testing/test-layer.ts":{"bytesInOutput":332}},"bytes":2371},"dist/lib/node-esm/chunk-6TKUDRM6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1399},"dist/lib/node-esm/chunk-6TKUDRM6.mjs":{"imports":[{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"exports":["CommandConfig","__export"],"inputs":{"src/services/command-config.ts":{"bytesInOutput":506}},"bytes":885}}}
@@ -2,5 +2,5 @@ import * as Effect from 'effect/Effect';
2
2
  import { ClientService } from '@dxos/client';
3
3
  import { type Type } from '@dxos/echo';
4
4
  /** @deprecated Migrate to providing types via plugin capabilities. */
5
- export declare const withTypes: (...types: Type.Entity.Any[]) => Effect.Effect<void, never, ClientService>;
5
+ export declare const withTypes: (...types: Type.AnyEntity[]) => Effect.Effect<void, never, ClientService>;
6
6
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/util/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAI7F,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/util/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAI5F,CAAC"}