| /** | |
| * Stores a `Chunk` inside transactional state. | |
| * | |
| * A `TxChunk<A>` keeps its current `Chunk<A>` in a `TxRef`, so reads and | |
| * updates can be committed atomically with other transactional operations. This | |
| * module offers a transactional version of common chunk workflows, including | |
| * creating collections, reading or replacing the current chunk, adding or | |
| * removing values, checking size, slicing, mapping, filtering, and combining | |
| * chunks. | |
| * | |
| * @since 4.0.0 | |
| */ | |
| import * as Chunk from "./Chunk.js"; | |
| import * as Effect from "./Effect.js"; | |
| import { format } from "./Formatter.js"; | |
| import { dual } from "./Function.js"; | |
| import { NodeInspectSymbol, toJson } from "./Inspectable.js"; | |
| import { pipeArguments } from "./Pipeable.js"; | |
| import * as TxRef from "./TxRef.js"; | |
| const TypeId = "~effect/transactions/TxChunk"; | |
| const TxChunkProto = { | |
| [NodeInspectSymbol]() { | |
| return this.toJSON(); | |
| }, | |
| toString() { | |
| return `TxChunk(${format(toJson(this.ref))})`; | |
| }, | |
| toJSON() { | |
| return { | |
| _id: "TxChunk", | |
| ref: toJson(this.ref) | |
| }; | |
| }, | |
| pipe() { | |
| return pipeArguments(this, arguments); | |
| } | |
| }; | |
| /** | |
| * Creates a new `TxChunk` with the specified initial chunk. | |
| * | |
| * **Details** | |
| * | |
| * This function returns a new TxChunk reference containing the provided initial chunk. No existing | |
| * TxChunk instances are modified. | |
| * | |
| * **Example** (Creating a TxChunk from a chunk) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * // Create a TxChunk with initial values | |
| * const initialChunk = Chunk.fromIterable([1, 2, 3]) | |
| * const txChunk = yield* TxChunk.make(initialChunk) | |
| * | |
| * // Read the value - automatically transactional | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3] | |
| * }) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export const make = initial => Effect.map(TxRef.make(initial), ref => makeUnsafe(ref)); | |
| /** | |
| * Creates a new empty `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function returns a new TxChunk reference that is initially empty. No existing TxChunk | |
| * instances are modified. | |
| * | |
| * **Example** (Creating an empty TxChunk) | |
| * | |
| * ```ts | |
| * import { Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * // Create an empty TxChunk | |
| * const txChunk = yield* TxChunk.empty<number>() | |
| * | |
| * // Check if it's empty - automatically transactional | |
| * const isEmpty = yield* TxChunk.isEmpty(txChunk) | |
| * console.log(isEmpty) // true | |
| * | |
| * // Add elements - automatically transactional | |
| * yield* TxChunk.append(txChunk, 42) | |
| * | |
| * const isStillEmpty = yield* TxChunk.isEmpty(txChunk) | |
| * console.log(isStillEmpty) // false | |
| * }) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export const empty = () => Effect.map(TxRef.make(Chunk.empty()), ref => makeUnsafe(ref)); | |
| /** | |
| * Creates a new `TxChunk` from an iterable. | |
| * | |
| * **Details** | |
| * | |
| * This function returns a new TxChunk reference containing elements from the provided iterable. No | |
| * existing TxChunk instances are modified. | |
| * | |
| * **Example** (Creating from an iterable) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * // Create TxChunk from array | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4, 5]) | |
| * | |
| * // Read the contents - automatically transactional | |
| * const chunk = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(chunk)) // [1, 2, 3, 4, 5] | |
| * | |
| * // Multi-step atomic modification - use explicit transaction | |
| * yield* Effect.tx( | |
| * Effect.gen(function*() { | |
| * yield* TxChunk.append(txChunk, 6) | |
| * yield* TxChunk.prepend(txChunk, 0) | |
| * }) | |
| * ) | |
| * | |
| * const updated = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(updated)) // [0, 1, 2, 3, 4, 5, 6] | |
| * }) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export const fromIterable = iterable => Effect.map(TxRef.make(Chunk.fromIterable(iterable)), ref => makeUnsafe(ref)); | |
| /** | |
| * Creates a new `TxChunk` with the specified TxRef. | |
| * | |
| * **Details** | |
| * | |
| * This function returns a new TxChunk reference wrapping the provided TxRef. No existing TxChunk | |
| * instances are modified. | |
| * | |
| * **Example** (Wrapping an existing TxRef) | |
| * | |
| * ```ts | |
| * import { Chunk, TxChunk, TxRef } from "effect" | |
| * | |
| * // Create a TxChunk from an existing TxRef (advanced usage) | |
| * const ref = TxRef.makeUnsafe(Chunk.fromIterable([1, 2, 3])) | |
| * const txChunk = TxChunk.makeUnsafe(ref) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export const makeUnsafe = ref => { | |
| const txChunk = Object.create(TxChunkProto); | |
| txChunk[TypeId] = TypeId; | |
| txChunk.ref = ref; | |
| return txChunk; | |
| }; | |
| /** | |
| * Modifies the value of the `TxChunk` using the provided function. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by updating its internal state. It does not return a | |
| * new TxChunk reference. | |
| * | |
| * **Example** (Modifying while returning a value) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Modify and return both old size and new chunk | |
| * const oldSize = yield* TxChunk.modify(txChunk, (chunk) => [ | |
| * Chunk.size(chunk), // return value (old size) | |
| * Chunk.append(chunk, 4) // new value | |
| * ]) | |
| * | |
| * console.log(oldSize) // 3 | |
| * | |
| * const newChunk = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(newChunk)) // [1, 2, 3, 4] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const modify = /*#__PURE__*/dual(2, (self, f) => TxRef.modify(self.ref, f)); | |
| /** | |
| * Updates the value of the `TxChunk` using the provided function. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by updating its internal state. It does not return a | |
| * new TxChunk reference. | |
| * | |
| * **Example** (Updating the stored chunk) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Update the chunk by reversing it atomically | |
| * yield* TxChunk.update(txChunk, (chunk) => Chunk.reverse(chunk)) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [3, 2, 1] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const update = /*#__PURE__*/dual(2, (self, f) => TxRef.update(self.ref, f)); | |
| /** | |
| * Reads the current chunk from the `TxChunk`. | |
| * | |
| * **Example** (Reading the current chunk) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Read the current value within a transaction | |
| * const chunk = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(chunk)) // [1, 2, 3] | |
| * | |
| * // The value is tracked for conflict detection | |
| * const size = Chunk.size(chunk) | |
| * console.log(size) // 3 | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const get = self => TxRef.get(self.ref); | |
| /** | |
| * Sets the value of the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by replacing its internal state with the provided | |
| * chunk. It does not return a new TxChunk reference. | |
| * | |
| * **Example** (Replacing the stored chunk) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Replace the entire chunk content | |
| * const newChunk = Chunk.fromIterable([10, 20, 30, 40]) | |
| * yield* TxChunk.set(txChunk, newChunk) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [10, 20, 30, 40] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const set = /*#__PURE__*/dual(2, (self, chunk) => TxRef.set(self.ref, chunk)); | |
| /** | |
| * Appends an element to the end of the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by adding the element to the end. It does not return a | |
| * new TxChunk reference. | |
| * | |
| * **Example** (Appending an element) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Add element to the end atomically | |
| * yield* TxChunk.append(txChunk, 4) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3, 4] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const append = /*#__PURE__*/dual(2, (self, element) => update(self, current => Chunk.append(current, element))); | |
| /** | |
| * Prepends an element to the beginning of the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by adding the element to the beginning. It does not | |
| * return a new TxChunk reference. | |
| * | |
| * **Example** (Prepending an element) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([2, 3, 4]) | |
| * | |
| * // Add element to the beginning atomically | |
| * yield* TxChunk.prepend(txChunk, 1) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3, 4] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const prepend = /*#__PURE__*/dual(2, (self, element) => update(self, current => Chunk.prepend(current, element))); | |
| /** | |
| * Gets the size of the `TxChunk`. | |
| * | |
| * **Example** (Getting the size) | |
| * | |
| * ```ts | |
| * import { Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4, 5]) | |
| * | |
| * // Get the current size - automatically transactional | |
| * const currentSize = yield* TxChunk.size(txChunk) | |
| * console.log(currentSize) // 5 | |
| * | |
| * // Size is tracked for conflict detection | |
| * yield* TxChunk.append(txChunk, 6) | |
| * const newSize = yield* TxChunk.size(txChunk) | |
| * console.log(newSize) // 6 | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const size = self => modify(self, current => [Chunk.size(current), current]); | |
| /** | |
| * Checks whether the `TxChunk` is empty. | |
| * | |
| * **Example** (Checking for an empty chunk) | |
| * | |
| * ```ts | |
| * import { Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const emptyChunk = yield* TxChunk.empty<number>() | |
| * const nonEmptyChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Check if chunks are empty - automatically transactional | |
| * const isEmpty1 = yield* TxChunk.isEmpty(emptyChunk) | |
| * const isEmpty2 = yield* TxChunk.isEmpty(nonEmptyChunk) | |
| * | |
| * console.log(isEmpty1) // true | |
| * console.log(isEmpty2) // false | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const isEmpty = self => modify(self, current => [Chunk.isEmpty(current), current]); | |
| /** | |
| * Checks whether the `TxChunk` is non-empty. | |
| * | |
| * **Example** (Checking for a non-empty chunk) | |
| * | |
| * ```ts | |
| * import { Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const emptyChunk = yield* TxChunk.empty<number>() | |
| * const nonEmptyChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Check if chunks are non-empty - automatically transactional | |
| * const isNonEmpty1 = yield* TxChunk.isNonEmpty(emptyChunk) | |
| * const isNonEmpty2 = yield* TxChunk.isNonEmpty(nonEmptyChunk) | |
| * | |
| * console.log(isNonEmpty1) // false | |
| * console.log(isNonEmpty2) // true | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const isNonEmpty = self => modify(self, current => [Chunk.isNonEmpty(current), current]); | |
| /** | |
| * Takes the first `n` elements from the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by keeping only the first n elements. It does not | |
| * return a new TxChunk reference. | |
| * | |
| * **Example** (Taking leading elements) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4, 5]) | |
| * | |
| * // Take only the first 3 elements - automatically transactional | |
| * yield* TxChunk.take(txChunk, 3) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const take = /*#__PURE__*/dual(2, (self, n) => update(self, current => Chunk.take(current, n))); | |
| /** | |
| * Drops the first `n` elements from the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by removing the first n elements. It does not return a | |
| * new TxChunk reference. | |
| * | |
| * **Example** (Dropping leading elements) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4, 5]) | |
| * | |
| * // Drop the first 2 elements - automatically transactional | |
| * yield* TxChunk.drop(txChunk, 2) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [3, 4, 5] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const drop = /*#__PURE__*/dual(2, (self, n) => update(self, current => Chunk.drop(current, n))); | |
| /** | |
| * Takes a slice of the `TxChunk` from `start` to `end` (exclusive). | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by keeping only the elements in the specified range. It | |
| * does not return a new TxChunk reference. | |
| * | |
| * **Example** (Taking a slice) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4, 5, 6, 7]) | |
| * | |
| * // Take elements from index 2 to 5 (exclusive) - automatically transactional | |
| * yield* TxChunk.slice(txChunk, 2, 5) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [3, 4, 5] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const slice = /*#__PURE__*/dual(3, (self, start, end) => update(self, current => Chunk.take(Chunk.drop(current, start), end - start))); | |
| /** | |
| * Maps each element of the `TxChunk` using a function that returns the same | |
| * element type. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original `TxChunk` by transforming each element in place. It does not | |
| * return a new `TxChunk` reference. | |
| * | |
| * **Example** (Mapping elements) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4]) | |
| * | |
| * // Transform each element atomically (must maintain same type) | |
| * yield* TxChunk.map(txChunk, (n) => n * 2) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [2, 4, 6, 8] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const map = /*#__PURE__*/dual(2, (self, f) => update(self, current => Chunk.map(current, f))); | |
| /** | |
| * Filters the `TxChunk` keeping only elements that satisfy the predicate. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by removing elements that don't match the predicate. It | |
| * does not return a new TxChunk reference. | |
| * | |
| * **Example** (Filtering elements) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3, 4, 5, 6]) | |
| * | |
| * // Keep only even numbers atomically | |
| * yield* TxChunk.filter(txChunk, (n) => n % 2 === 0) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [2, 4, 6] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const filter = /*#__PURE__*/dual(2, (self, predicate) => update(self, current => Chunk.filter(current, predicate))); | |
| /** | |
| * Concatenates another chunk to the end of the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by appending all elements from the other chunk. It does | |
| * not return a new TxChunk reference. | |
| * | |
| * **Example** (Appending another chunk) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * const otherChunk = Chunk.fromIterable([4, 5, 6]) | |
| * | |
| * // Append all elements from another chunk atomically | |
| * yield* TxChunk.appendAll(txChunk, otherChunk) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3, 4, 5, 6] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const appendAll = /*#__PURE__*/dual(2, (self, other) => update(self, current => Chunk.appendAll(current, other))); | |
| /** | |
| * Concatenates another chunk to the beginning of the `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by prepending all elements from the other chunk. It | |
| * does not return a new TxChunk reference. | |
| * | |
| * **Example** (Prepending another chunk) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk = yield* TxChunk.fromIterable([4, 5, 6]) | |
| * const otherChunk = Chunk.fromIterable([1, 2, 3]) | |
| * | |
| * // Prepend all elements from another chunk atomically | |
| * yield* TxChunk.prependAll(txChunk, otherChunk) | |
| * | |
| * const result = yield* TxChunk.get(txChunk) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3, 4, 5, 6] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const prependAll = /*#__PURE__*/dual(2, (self, other) => update(self, current => Chunk.prependAll(current, other))); | |
| /** | |
| * Concatenates another `TxChunk` to the end of this `TxChunk`. | |
| * | |
| * **Details** | |
| * | |
| * This function mutates the original TxChunk by appending all elements from the other TxChunk. It | |
| * does not return a new TxChunk reference. | |
| * | |
| * **Example** (Concatenating TxChunks) | |
| * | |
| * ```ts | |
| * import { Chunk, Effect, TxChunk } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const txChunk1 = yield* TxChunk.fromIterable([1, 2, 3]) | |
| * const txChunk2 = yield* TxChunk.fromIterable([4, 5, 6]) | |
| * | |
| * // Concatenate atomically within a transaction | |
| * yield* TxChunk.concat(txChunk1, txChunk2) | |
| * | |
| * const result = yield* TxChunk.get(txChunk1) | |
| * console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3, 4, 5, 6] | |
| * | |
| * // Original txChunk2 is unchanged | |
| * const original = yield* TxChunk.get(txChunk2) | |
| * console.log(Chunk.toReadonlyArray(original)) // [4, 5, 6] | |
| * }) | |
| * ``` | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export const concat = /*#__PURE__*/dual(2, (self, other) => Effect.gen(function* () { | |
| const otherChunk = yield* get(other); | |
| yield* appendAll(self, otherChunk); | |
| }).pipe(Effect.tx)); | |
| //# sourceMappingURL=TxChunk.js.map |
Xet Storage Details
- Size:
- 19.1 kB
- Xet hash:
- 8d72fdd6112861c42a2e6c28ecaa91ac8b377591404fcce4a7c3fbaed6795faa
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.