{"version":3,"file":"silentium-components.mjs","sources":["../src/behaviors/Branch.ts","../src/behaviors/BranchLazy.ts","../src/behaviors/Const.ts","../src/behaviors/Deadline.ts","../src/behaviors/Deferred.ts","../src/behaviors/Detached.ts","../src/behaviors/Dirty.ts","../src/behaviors/Getter.ts","../src/behaviors/Loading.ts","../src/behaviors/Lock.ts","../src/behaviors/Memo.ts","../src/behaviors/MergeAccumulation.ts","../src/behaviors/OnlyChanged.ts","../src/behaviors/Part.ts","../src/behaviors/Path.ts","../src/behaviors/Polling.ts","../src/behaviors/RecordTruncated.ts","../src/behaviors/StateRecord.ts","../src/behaviors/Switch.ts","../src/behaviors/Task.ts","../src/behaviors/Tick.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/behaviors/Transformed.ts","../src/behaviors/TransformedList.ts","../src/boolean/And.ts","../src/boolean/Bool.ts","../src/boolean/Not.ts","../src/boolean/Or.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts","../src/lists/First.ts","../src/system/RegexpMatch.ts","../src/system/RegexpMatched.ts","../src/system/RegexpReplaced.ts","../src/system/Set.ts","../src/navigation/Router.ts","../src/strings/Concatenated.ts","../src/strings/Template.ts"],"sourcesContent":["import {\n  Actual,\n  MaybeMessage,\n  Message,\n  MessageType,\n  Primitive,\n} from \"silentium\";\n\n/**\n * Allows switching between left and right messages depending on condition\n * https://silentium.pw/article/branch/view\n */\nexport function Branch<Then, Else>(\n  _condition: MaybeMessage<boolean>,\n  _left: MaybeMessage<Then>,\n  _right?: MaybeMessage<Else>,\n) {\n  const $condition = Actual(_condition);\n  const $left = Actual(_left);\n  const $right = Actual(_right);\n  return Message<Then | Else>(function BranchImpl(r) {\n    const left = Primitive($left);\n    let right: ReturnType<typeof Primitive<Else>>;\n    if (_right !== undefined) {\n      right = Primitive($right as MessageType<Else>);\n    }\n    $condition.then(function branchSub(v) {\n      if (typeof v !== \"boolean\") {\n        throw new Error(\"Branch received not boolean value\");\n      }\n      let result: Then | Else | null = null;\n      if (v === true) {\n        result = left.primitive();\n      } else if (right) {\n        result = right.primitive();\n      }\n      if (result !== null) {\n        r(result);\n      }\n    });\n  });\n}\n","import {\n  ConstructorType,\n  DestroyableType,\n  DestroyContainer,\n  Message,\n  MessageType,\n} from \"silentium\";\n\n/**\n * Depending on the $condition message,\n * creates a new left or right message.\n * When condition changes, old messages are destroyed\n * and new ones are created.\n */\nexport function BranchLazy<Then, Else>(\n  $condition: MessageType<boolean>,\n  $left: ConstructorType<[], MessageType<Then>>,\n  $right?: ConstructorType<[], MessageType<Else>>,\n): MessageType<Then | Else> & DestroyableType {\n  return Message(function BranchLazyImpl(r) {\n    const dc = DestroyContainer();\n    const destructor = () => {\n      dc.destroy();\n    };\n    $condition.then(function branchLazySub(v) {\n      destructor();\n      let instance: MessageType<Then | Else> | undefined;\n      if (v) {\n        instance = $left();\n      } else if ($right) {\n        instance = $right();\n      }\n      if (instance !== undefined) {\n        instance.then(r);\n        dc.add(instance);\n      }\n    });\n    return destructor;\n  });\n}\n","import { Message, MessageType, ResetSilenceCache } from \"silentium\";\n\n/**\n * Constant value that will be\n * returned on each value from\n * the $trigger message\n */\nexport function Constant<T>(\n  permanent: T,\n  $trigger: MessageType,\n): MessageType<T> {\n  return Message<T>(function ConstantImpl(resolve, reject) {\n    $trigger.catch(reject).then(function constantSub() {\n      resolve(permanent);\n      // Do cache reset, it gives ability to send constant of same value many times\n      resolve(ResetSilenceCache as T);\n    });\n  });\n}\n","import {\n  Actual,\n  Filtered,\n  MaybeMessage,\n  Message,\n  MessageType,\n  Shared,\n} from \"silentium\";\n\n/**\n * Will return an error via error transport if\n * time runs out from $timeout; if $base manages to\n * respond before $timeout then the value from base will be returned\n */\nexport function Deadline<T>(\n  $base: MessageType<T>,\n  _timeout: MaybeMessage<number>,\n) {\n  const $timeout = Actual(_timeout);\n  return Message<T>(function DeadlineImpl(resolve, reject) {\n    let timer: ReturnType<typeof setTimeout> | number = 0;\n    const base = Shared($base);\n    $timeout.then(function deadlineTimeoutSub(timeout) {\n      if (timer) {\n        clearTimeout(timer);\n      }\n      let timeoutReached = false;\n\n      timer = setTimeout(() => {\n        if (timeoutReached) {\n          return;\n        }\n        timeoutReached = true;\n        reject(new Error(\"Timeout reached in Deadline\"));\n      }, timeout);\n\n      const f = Filtered(base, () => !timeoutReached);\n      f.then(resolve);\n\n      base.then(function deadlineBaseSub() {\n        timeoutReached = true;\n      });\n    });\n  });\n}\n","import { isFilled, Message, MessageType, Primitive } from \"silentium\";\n\n/**\n * Defer one source after another, gives values Of baseSrc only when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport function Deferred<T>(\n  $base: MessageType<T>,\n  $trigger: MessageType<unknown>,\n) {\n  return Message<T>(function DeferredImpl(r) {\n    const base = Primitive($base);\n    $trigger.then(function deferredTriggerSub() {\n      const value = base.primitive();\n      if (isFilled(value)) {\n        r(value);\n      }\n    });\n  });\n}\n","import { isFilled, Message, MessageType, Primitive } from \"silentium\";\n\n/**\n * Message separate from the base\n * allows to take one value from the base\n * but not react to new values of the base message\n */\nexport function Detached<T>($base: MessageType<T>): MessageType<T> {\n  return Message<T>(function DetachedImpl(r) {\n    const v = Primitive($base).primitive();\n    if (isFilled(v)) {\n      r(v);\n    }\n  });\n}\n","import { All, Applied, Late, MessageType, Source } from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n * https://silentium-lab.github.io/silentium-components/#/behaviors/dirty\n */\nexport function Dirty<T extends Record<string, unknown>>(\n  $base: MessageType<T>,\n  keep: string[] = [],\n  exclude: string[] = [],\n  cloner?: (v: T) => T,\n) {\n  const $comparing = Late<T>({} as T);\n  if (cloner === undefined) {\n    cloner = (value) => JSON.parse(JSON.stringify(value));\n  }\n  return Source<T>(\n    function DirtyImpl(r) {\n      const $comparingClone = Applied($comparing, cloner);\n      All($comparingClone, $base).then(function dirtyAllSub([comparing, base]) {\n        if (!comparing) {\n          return;\n        }\n        r(\n          Object.fromEntries(\n            Object.entries(comparing).filter(([key, value]) => {\n              if (keep.includes(key)) {\n                return true;\n              }\n              if (exclude.includes(key)) {\n                return false;\n              }\n              return value !== (base as Record<string, unknown>)[key];\n            }),\n          ) as T,\n        );\n      });\n    },\n    (v) => {\n      $comparing.use(v);\n    },\n  );\n}\n","import { Actual, All, Applied, MaybeMessage, MessageType } from \"silentium\";\n\nconst NotSet = Symbol(\"not-set\");\n\nexport function Getter<R, T extends object = any, K extends string = any>(\n  _base: MaybeMessage<T>,\n  _method: MaybeMessage<K>,\n  def?: MaybeMessage<R>,\n) {\n  const $base = Actual(_base);\n  const $method = Actual(_method);\n  const $def = Actual((def as any) ?? NotSet);\n  return Applied(\n    All($base, $method, $def),\n    function GetterImpl([base, method, d]) {\n      const value: any = base[method as unknown as keyof typeof base];\n      if (value !== undefined && typeof value === \"function\") {\n        return value.call(base) as R;\n      } else if (d !== NotSet) {\n        return d as R;\n      }\n    },\n  ) as MessageType<R>;\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * Representation Of loading process\n * first message begins loading\n * second message stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport function Loading(\n  $start: MessageType<unknown>,\n  $finish: MessageType<unknown>,\n) {\n  return Message<boolean>(function LoadingImpl(r) {\n    $start.then(function loadingStartSub() {\n      r(true);\n    });\n    $finish.then(function loadingFinishSub() {\n      r(false);\n    });\n  });\n}\n","import { Filtered, Message, MessageType } from \"silentium\";\n\n/**\n * Allows locking messages\n * if a $lock message arrives\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport function Lock<T>($base: MessageType<T>, $lock: MessageType<boolean>) {\n  return Message<T>(function LockImpl(r) {\n    let locked = false;\n    $lock.then(function lockLockSub(newLock) {\n      locked = newLock;\n    });\n    const i = Filtered($base, () => !locked);\n    i.then(function lockBaseSub(v) {\n      r(v);\n    });\n  });\n}\n","import { isFilled, Message, MessageType } from \"silentium\";\n\n/**\n * Didn't respond if new value Of baseSrc equals to old value\n * https://silentium-lab.github.io/silentium-components/#/behaviors/memo\n */\nexport function Memo<T>($base: MessageType<T>) {\n  return Message<T>(function MemoImpl(r) {\n    let last: T | null = null;\n    $base.then(function memoBaseSub(v) {\n      if (v !== last && isFilled(v)) {\n        r(v);\n        last = v;\n      }\n    });\n  });\n}\n","import { Late, MessageType } from \"silentium\";\n\n/**\n * Есть объект и каждое новое его значение нужно мержить с прошлым\n * чтобы накопить общие изменения\n */\nexport function MergeAccumulation<T extends object>(\n  $base: MessageType<T>,\n  $reset?: MessageType<T>,\n): MessageType<T> {\n  const accumulation = Late<T>();\n  const lastAccumulated = {};\n  $base.then(function mergeAccumulationBaseSub(nextValue) {\n    accumulation.use(\n      mergeWith(lastAccumulated, nextValue, (value1: any, value2: any) => {\n        if (Array.isArray(value1)) {\n          return value1.concat(value2);\n        }\n      }),\n    );\n  });\n  if ($reset) {\n    $reset.then(function mergeAccumulationResetSub(resetValue) {\n      accumulation.use(resetValue);\n    });\n  }\n  return accumulation;\n}\n\nfunction mergeWith<TObject, TSource>(\n  target: TObject,\n  source: TSource,\n  customizer: (\n    objValue: any,\n    srcValue: any,\n    key: string,\n    object: any,\n    source: any,\n  ) => any,\n): TObject & TSource {\n  if (source == null) {\n    return target as TObject & TSource;\n  }\n  Object.keys(source).forEach((key) => {\n    const srcValue = (source as any)[key];\n    const objValue = (target as any)[key];\n    const result = customizer(objValue, srcValue, key, target, source);\n\n    if (result !== undefined) {\n      (target as any)[key] = result;\n    } else if (isObject(srcValue) && isObject(objValue)) {\n      mergeWith(objValue, srcValue, customizer);\n    } else {\n      (target as any)[key] = srcValue;\n    }\n  });\n  return target as TObject & TSource;\n}\n\nfunction isObject(value: any): value is \"object\" {\n  return value != null && typeof value === \"object\";\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * @url https://silentium.pw/article/only-changed/view\n */\nexport function OnlyChanged<T>($base: MessageType<T>) {\n  return Message<T>(function OnlyChangedImpl(r) {\n    let first = false;\n    $base.then(function onlyChangedBaseSub(v) {\n      if (first === false) {\n        first = true;\n      } else {\n        r(v);\n      }\n    });\n  });\n}\n","import {\n  Actual,\n  All,\n  isFilled,\n  MaybeMessage,\n  MessageSourceType,\n  Primitive,\n  Shared,\n  Source,\n} from \"silentium\";\n\n/**\n * Return source Of record path\n * @url https://silentium.pw/article/part/view\n */\nexport function Part<\n  R,\n  T extends object | Array<any> = any,\n  K extends string = any,\n>(\n  $base: MessageSourceType<T>,\n  key: MaybeMessage<K>,\n  defaultValue?: R,\n): MessageSourceType<R> {\n  const $baseShared = Shared($base);\n  const $keyedShared = Shared(Actual(key));\n  const keyPrimitive = Primitive($keyedShared);\n  const base = Primitive($baseShared);\n  return Source(\n    function PartImpl(r) {\n      All($baseShared, $keyedShared).then(function partAllSub([base, keyed]) {\n        const keys = keyed.split(\".\");\n        let value: unknown = base;\n        keys.forEach(function partsAllKeysForEach(key: string) {\n          value = (value as Record<string, unknown>)[key];\n        });\n        if (value !== undefined && value !== base) {\n          r(value as R);\n        } else if (defaultValue !== undefined) {\n          r(defaultValue);\n        }\n      });\n    },\n    function PartSourceImpl(value) {\n      if (isFilled(key)) {\n        $base.use({\n          ...base.primitiveWithException(),\n          [keyPrimitive.primitiveWithException()]: value,\n        } as T);\n      }\n    },\n  );\n}\n","import { Actual, All, Applied, MaybeMessage, MessageType } from \"silentium\";\n\nconst NotSet = Symbol(\"not-set\");\n\n/**\n * Return source Of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport function Path<\n  R,\n  T extends object | Array<any> = any,\n  K extends string = any,\n>(_base: MaybeMessage<T>, _keyed: MaybeMessage<K>, def?: MaybeMessage<R>) {\n  const $base = Actual(_base);\n  const $keyed = Actual(_keyed);\n  const $def = Actual((def as any) ?? NotSet);\n  return Applied(All($base, $keyed, $def), ([base, keyed, d]) => {\n    const keys = keyed.split(\".\");\n    let value: unknown = base;\n    keys.forEach((key) => {\n      value = (value as Record<string, unknown>)[key];\n    });\n    if (value !== undefined && value !== base) {\n      return value as R;\n    } else if (d !== NotSet) {\n      return d as R;\n    }\n  }) as MessageType<R>;\n}\n","import {\n  DestroyContainer,\n  Message,\n  MessageType,\n  ResetSilenceCache,\n} from \"silentium\";\n\n/**\n * Active polling of $base message\n * synchronized with $trigger message\n * can return same values\n */\nexport function Polling<T>(\n  $base: MessageType<T>,\n  $trigger: MessageType<unknown>,\n) {\n  return Message<T>(function PollingImpl(resolve, reject) {\n    const dc = DestroyContainer();\n    $trigger\n      .then(function pollingTriggerSub() {\n        dc.destroy();\n        resolve(ResetSilenceCache as T);\n        dc.add($base.then(resolve).catch(reject));\n      })\n      .catch(reject);\n  });\n}\n","import { Actual, Computed, MaybeMessage } from \"silentium\";\n\n/**\n * Helps eliminate unwanted values\n * that shouldn't exist in object fields\n */\nexport function RecordTruncated(\n  _record: MaybeMessage<Record<string, unknown>>,\n  _badValues: MaybeMessage<unknown[]>,\n) {\n  const $record = Actual(_record);\n  const $badValues = Actual(_badValues);\n  const processRecord = (obj: any, badValues: unknown[]) => {\n    if (obj === null || typeof obj !== \"object\" || Array.isArray(obj)) {\n      return obj;\n    }\n\n    const result: Record<string, unknown> = {};\n\n    for (const [key, value] of Object.entries(obj)) {\n      if (badValues.includes(value)) continue;\n\n      const processedValue = processRecord(value, badValues);\n\n      if (\n        processedValue !== undefined &&\n        !(\n          typeof processedValue === \"object\" &&\n          processedValue !== null &&\n          !Array.isArray(processedValue) &&\n          Object.keys(processedValue).length === 0\n        )\n      ) {\n        result[key] = processedValue;\n      }\n    }\n\n    return result;\n  };\n\n  return Computed(processRecord, $record, $badValues);\n}\n","import {\n  Actual,\n  DestroyContainer,\n  MaybeMessage,\n  Message,\n  MessageType,\n  Value,\n} from \"silentium\";\n\nexport function StateRecord(\n  state$: MessageType,\n  values$: MessageType,\n  sequence: MaybeMessage<unknown[]>,\n) {\n  const dc = DestroyContainer();\n  let stateIndex = -1;\n  let latestState: string | null = null;\n  let result: Record<string, unknown> = {};\n  const sequence$ = Value(Actual(sequence));\n  return Message(function StateRecordImpl(resolve, reject) {\n    dc.add(\n      state$\n        .then(function stateRecordStateSub(state) {\n          if (state === sequence$.value?.[stateIndex + 1]) {\n            stateIndex += 1;\n            latestState = state as string;\n          } else {\n            stateIndex = -1;\n            latestState = null;\n            result = {};\n          }\n        })\n        .catch(reject),\n    );\n    dc.add(\n      values$\n        .then(function stateRecordValuesSub(value) {\n          if (latestState !== null) {\n            result[latestState] = value;\n          }\n          if (stateIndex + 1 === sequence$.value?.length) {\n            resolve(result);\n            stateIndex = -1;\n            latestState = null;\n            result = {};\n          }\n        })\n        .catch(reject),\n    );\n    return function StateRecordDestroy() {\n      dc.destroy();\n    };\n  });\n}\n","import {\n  Actual,\n  DestroyContainer,\n  MaybeMessage,\n  Message,\n  MessageType,\n} from \"silentium\";\n\n/**\n * Switch between many messages by known value\n */\nexport function Switch<T, K>(\n  _base: MaybeMessage,\n  options: [K | K[], MessageType<T>][],\n) {\n  const $base = Actual(_base);\n  return Message<T>(function SwitchImpl(resolve, reject) {\n    const dc = DestroyContainer();\n    dc.add(\n      $base\n        .then(function switchBaseSub(v) {\n          const msg = options.find(function switchBaseFind(entry) {\n            return Array.isArray(entry[0])\n              ? entry[0].includes(v as K)\n              : entry[0] === v;\n          });\n          if (msg) {\n            dc.add(msg[1].then(resolve).catch(reject));\n          }\n        })\n        .catch(reject),\n    );\n    return dc.destructor();\n  });\n}\n","import { Actual, ExecutorApplied, MaybeMessage, Message } from \"silentium\";\n\n/**\n * Defer a message to the event loop\n * so that it executes once within\n * a certain timer firing interval\n *\n * @url https://silentium.pw/article/task/view\n */\nexport function Task<T>(baseSrc: MaybeMessage<T>, delay: number = 0) {\n  const $base = Actual(baseSrc);\n  return Message<T>(function TaskImpl(r) {\n    let prevTimer: unknown | null = null;\n    ExecutorApplied($base, (fn) => {\n      return (v) => {\n        if (prevTimer) {\n          clearTimeout(prevTimer as number);\n        }\n        prevTimer = setTimeout(() => {\n          fn(v);\n        }, delay);\n      };\n    }).then(r);\n  });\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * Accumulates the last value Of the source and returns one result once per tick\n *\n * @url https://silentium.pw/article/tick/view\n */\nexport function Tick<T>($base: MessageType<T>) {\n  return Message<T>(function TickImpl(r) {\n    let microtaskScheduled = false;\n    let lastValue: T | null = null;\n    const scheduleMicrotask = () => {\n      microtaskScheduled = true;\n      queueMicrotask(function tickQueueMicrotask() {\n        microtaskScheduled = false;\n        if (lastValue !== null) {\n          r(lastValue);\n          lastValue = null;\n        }\n      });\n    };\n    $base.then(function tickBaseSub(v) {\n      lastValue = v;\n      if (!microtaskScheduled) {\n        scheduleMicrotask();\n      }\n    });\n  });\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * By receiving a message with a key and value, collects a table\n * of all previously received messages in the form of a structure\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport function HashTable<T>($base: MessageType<[string, unknown]>) {\n  return Message<T>(function HashTableImpl(r) {\n    const record: Record<string, unknown> = {};\n    $base.then(function hashTableBaseSub([key, value]) {\n      record[key] = value;\n      r({ ...record } as T);\n    });\n  });\n}\n","import { Actual, All, Message, MessageType } from \"silentium\";\n\ntype UnWrap<T> = T extends MessageType<infer U> ? U : T;\n\n/**\n * Returns record Of data from record Of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport function Record<T>(record: Record<string, T>) {\n  return Message<Record<string, UnWrap<T>>>(function RecordImpl(r) {\n    const keys = Object.keys(record);\n    keys.forEach(function recordKeys(key) {\n      record[key] = Actual(record[key]) as any;\n    });\n    All(...(Object.values(record) as any)).then(function recordAllSub(entries) {\n      const record: Record<string, any> = {};\n      entries.forEach(function recordAllForEach(entry, index) {\n        record[keys[index]] = entry;\n      });\n      r(record);\n    });\n  });\n}\n","import {\n  Actual,\n  ConstructorType,\n  MaybeMessage,\n  Message,\n  Of,\n  Once,\n} from \"silentium\";\n\nimport { Record } from \"../structures\";\n\n/**\n * Modify the object structure\n * with the ability to create new fields based on\n * existing ones in the object\n *\n * @url https://silentium.pw/article/transformed/view\n */\nexport function Transformed<T extends Record<string, any>>(\n  _base: MaybeMessage<T>,\n  transformRules: Record<string, ConstructorType<[MaybeMessage<any>]>>,\n) {\n  const $base = Actual(_base);\n  return Message(function TransformedImpl(resolve) {\n    $base.then(function transformedBaseSub(v) {\n      const existedKeysMap: Record<string, number> = {};\n      const sourceObject = Object.fromEntries(\n        Object.entries(v).map(function transformedBaseEntries(entry) {\n          if (transformRules[entry[0]]) {\n            existedKeysMap[entry[0]] = 1;\n            return [entry[0], transformRules[entry[0]](v)];\n          }\n\n          return [entry[0], Of(entry[1])];\n        }),\n      );\n      Object.keys(transformRules).forEach(function transformedRulesKeys(key) {\n        if (!existedKeysMap[key]) {\n          sourceObject[key] = transformRules[key](v);\n        }\n      });\n      const record = Once(Record(sourceObject));\n      record.then(resolve);\n    });\n  });\n}\n","import { Actual, ConstructorType, Map, MaybeMessage } from \"silentium\";\n\nimport { Transformed } from \"../behaviors/Transformed\";\n\nexport function TransformedList<T extends any[]>(\n  _base: MaybeMessage<T>,\n  transformRules: Record<string, ConstructorType<[MaybeMessage<any>]>>,\n) {\n  return Map(Actual(_base), (v) => Transformed(v, transformRules));\n}\n","import { All, Message, MessageType } from \"silentium\";\n\n/**\n * Logical AND over two messages\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport function And($one: MessageType<boolean>, $two: MessageType<boolean>) {\n  return Message<boolean>(function AndImpl(r) {\n    All($one, $two).then(function andAllSub([one, two]) {\n      r(!!(one && two));\n    });\n  });\n}\n","import { Applied, Message, MessageType } from \"silentium\";\n\n/**\n * Convert Any source to boolean source\n * https://silentium-lab.github.io/silentium-components/#/boolean/bool\n */\nexport function Bool($base: MessageType) {\n  return Message<boolean>(function BoolImpl(r) {\n    Applied($base, Boolean).then(r);\n  });\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * Logical negation of message\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport function Not($base: MessageType<boolean>) {\n  return Message<boolean>(function NotImpl(r) {\n    $base.then(function notBaseSub(v) {\n      r(!v);\n    });\n  });\n}\n","import { All, Message, MessageType } from \"silentium\";\n\n/**\n * Logical OR over two messages\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport function Or($one: MessageType<boolean>, $two: MessageType<boolean>) {\n  return Message<boolean>(function OrImpl(r) {\n    All($one, $two).then(function orAllSub([one, two]) {\n      r(!!(one || two));\n    });\n  });\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport function FromJson<T = Record<string, unknown>>(\n  $json: MessageType<string>,\n) {\n  return Message<T>(function FromJsonImpl(resolve, reject) {\n    $json.then(function fromJsonSub(json) {\n      try {\n        resolve(JSON.parse(json));\n      } catch (e) {\n        reject(new Error(`Failed to parse JSON: ${e}`));\n      }\n    });\n  });\n}\n","import { Message, MessageType } from \"silentium\";\n\n/**\n * Represents json from object\n */\nexport function ToJson($data: MessageType) {\n  return Message<string>(function ToJsonImpl(resolve, reject) {\n    $data.then(function toJsonSub(data: unknown) {\n      try {\n        resolve(JSON.stringify(data));\n      } catch {\n        reject(new Error(\"Failed to convert to JSON\"));\n      }\n    });\n  });\n}\n","import { Applied, Message, MessageType } from \"silentium\";\n\n/**\n * Represents the first element Of an array.\n */\nexport function First<T extends Array<unknown>>($base: MessageType<T>) {\n  return Message<T[0]>(function FirstImpl(r) {\n    Applied($base, (a) => a[0]).then(r);\n  });\n}\n","import { Actual, All, MaybeMessage, Message, Of } from \"silentium\";\n\n/**\n * First match Of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport function RegexpMatch(\n  patternSrc: MaybeMessage<string>,\n  valueSrc: MaybeMessage<string>,\n  flagsSrc: MaybeMessage<string> = Of(\"\"),\n) {\n  const $pattern = Actual(patternSrc);\n  const $value = Actual(valueSrc);\n  const $flags = Actual(flagsSrc);\n  return Message<string[]>(function RegexpMatchImpl(r) {\n    All($pattern, $value, $flags).then(function regexpMatchAllSub([\n      pattern,\n      value,\n      flags,\n    ]) {\n      const result = new RegExp(pattern, flags).exec(value);\n      r(result ?? []);\n    });\n  });\n}\n","import { Actual, All, MaybeMessage, Message, Of } from \"silentium\";\n\n/**\n * Boolean source what checks what string matches pattern\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport function RegexpMatched(\n  patternSrc: MaybeMessage<string>,\n  valueSrc: MaybeMessage<string>,\n  flagsSrc: MaybeMessage<string> = Of(\"\"),\n) {\n  const $pattern = Actual(patternSrc);\n  const $value = Actual(valueSrc);\n  const $flags = Actual(flagsSrc);\n  return Message<boolean>(function RegexpMatchedImpl(r) {\n    All($pattern, $value, $flags).then(function regexpMatchedAllSub([\n      pattern,\n      value,\n      flags,\n    ]) {\n      r(new RegExp(pattern, flags).test(value));\n    });\n  });\n}\n","import { Actual, All, Applied, MaybeMessage } from \"silentium\";\n\n/**\n * Returns string replaced by regular expression pattern\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-replaced\n */\nexport function RegexpReplaced(\n  valueSrc: MaybeMessage<string>,\n  patternSrc: MaybeMessage<string>,\n  replaceValueSrc: MaybeMessage<string>,\n  flagsSrc: MaybeMessage<string> = \"\",\n) {\n  const $value = Actual(valueSrc);\n  const $pattern = Actual(patternSrc);\n  const $replaceValue = Actual(replaceValueSrc);\n  const $flags = Actual(flagsSrc);\n  return Applied(\n    All($pattern, $value, $replaceValue, $flags),\n    ([pattern, value, replaceValue, flags]) => {\n      return String(value).replace(new RegExp(pattern, flags), replaceValue);\n    },\n  );\n}\n","import { Actual, All, Message, MessageType } from \"silentium\";\n\n/**\n * Ability to mutate some object, helpful when integrate to procedure systems\n * https://silentium-lab.github.io/silentium-components/#/system/set\n */\nexport function Set<T extends Record<string, unknown>>(\n  baseSrc: MessageType<T>,\n  keySrc: MessageType<string>,\n  valueSrc: MessageType<unknown>,\n) {\n  const $base = Actual(baseSrc);\n  const $key = Actual(keySrc);\n  const $value = Actual(valueSrc);\n  return Message<T>(function SetImpl(r) {\n    All($base, $key, $value).then(function setAllSub([base, key, value]) {\n      (base as Record<string, unknown>)[key] = value;\n      r(base);\n    });\n  });\n}\n","import {\n  Actual,\n  All,\n  ConstructorType,\n  DestroyableType,\n  DestroyContainer,\n  MaybeMessage,\n  Message,\n  MessageType,\n  Of,\n} from \"silentium\";\n\nimport { RegexpMatched } from \"../system\";\n\nexport interface Route<T> {\n  pattern?: string;\n  patternFlags?: string;\n  condition?: (v: unknown) => boolean;\n  message: ConstructorType<[], MaybeMessage<T>>;\n}\n\nconst isTrue = (v: unknown) => v === true;\n\n/**\n * Router component what will return template if url matches pattern\n *\n * @url https://silentium.pw/article/router/view\n */\nexport function Router<T = string>(\n  _url: MaybeMessage<string>,\n  routes: MaybeMessage<Route<T>[]>,\n  $default: ConstructorType<[], MaybeMessage<T>>,\n): MessageType<T> & DestroyableType {\n  const $routes = Actual(routes);\n  const $url = Actual(_url);\n  return Message<T>(function RouterImpl(r) {\n    const dc = DestroyContainer();\n    const destructor = () => {\n      dc.destroy();\n    };\n    All($routes, $url).then(function routerAllSub([routes, url]) {\n      destructor();\n      const $matches = All(\n        ...routes.map(function routerRoutesMap(r) {\n          return r.pattern\n            ? RegexpMatched(\n                Of(r.pattern),\n                Of(url),\n                r.patternFlags ? Of(r.patternFlags) : undefined,\n              )\n            : r?.condition?.(url);\n        }),\n      );\n      $matches.then(function routerMatchesSub(matches) {\n        const index = matches.findIndex(isTrue);\n        if (index === -1) {\n          const instance = Actual($default());\n          dc.add(instance);\n          instance.then(r);\n        }\n        if (index > -1) {\n          const instance = Actual(routes[index].message());\n          dc.add(instance);\n          instance.then(r);\n        }\n      });\n    });\n    return destructor;\n  });\n}\n","import { All, Message, MessageType, Of } from \"silentium\";\n\n/**\n * Join sources Of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport function Concatenated(\n  sources: MessageType<string>[],\n  joinPartSrc: MessageType<string> = Of(\"\"),\n) {\n  return Message<string>(function ConcatenatedImpl(r) {\n    All(joinPartSrc, ...sources).then(function concatenatedAllSub([\n      joinPart,\n      ...strings\n    ]) {\n      r(strings.join(joinPart));\n    });\n  });\n}\n","import {\n  Actual,\n  All,\n  Applied,\n  ConstructorType,\n  DestroyableType,\n  DestroyContainer,\n  isDestroyable,\n  isMessage,\n  Late,\n  MaybeMessage,\n  Message,\n  MessageType,\n  Of,\n  Rejections,\n} from \"silentium\";\n\nimport { Record } from \"../structures\";\n\n/**\n * Allows creating a string template with\n * variables inserted into it; when variables change,\n * the template value will change\n *\n * @url https://silentium.pw/article/template/view\n */\nexport function Template(\n  src: MaybeMessage<string> | ((t: TemplateImpl) => string) = \"\",\n  $places: MaybeMessage<Record<string, unknown>> = Of({}),\n) {\n  const $src = Late<string>();\n  if (typeof src === \"string\" || isMessage(src)) {\n    $src.chain(Actual(src));\n  }\n\n  const t = new TemplateImpl($src, $places ? Actual($places) : undefined);\n\n  if (typeof src === \"function\") {\n    $src.chain(\n      Message((r) => {\n        r(src(t));\n      }),\n    );\n  }\n\n  return t;\n}\n\nexport class TemplateImpl implements MessageType<string>, DestroyableType {\n  private dc = DestroyContainer();\n  private rejections = Rejections();\n  private vars: Record<string, MessageType> = {\n    $TPL: Of(\"$TPL\"),\n  };\n\n  public constructor(\n    private $src: MessageType<string> = Of(\"\"),\n    private $places: MessageType<Record<string, unknown>> = Of({}),\n    private escapeFn = escaped,\n  ) {}\n\n  public then(transport: ConstructorType<[string]>): this {\n    const $vars = Record(this.vars);\n    Applied(All(this.$src, this.$places, $vars), ([base, rules, vars]) => {\n      try {\n        Object.entries(rules).forEach(([ph, val]) => {\n          base = base.replaceAll(ph, String(val));\n        });\n        Object.entries(vars).forEach(([ph, val]) => {\n          base = base.replaceAll(ph, String(val));\n        });\n      } catch (e) {\n        this.rejections.reject(e);\n      }\n\n      return base;\n    }).then(transport);\n    return this;\n  }\n\n  public template(value: string) {\n    this.$src = Of(value);\n  }\n\n  /**\n   * Register raw unsafe variable\n   */\n  public raw(src: MessageType<unknown>) {\n    const hash =\n      Date.now().toString(36) + Math.random().toString(36).substring(2);\n    const varName = `$var${hash}`;\n    if (isDestroyable(src)) {\n      this.dc.add(src);\n    }\n    this.vars[varName] = src;\n    return varName;\n  }\n\n  /**\n   * Register variable what will be safe in HTML by default\n   * or with your custom escape logic\n   */\n  public escaped(src: MessageType<any>) {\n    if (isDestroyable(src)) {\n      this.dc.add(src);\n    }\n    return this.raw(Applied(src, this.escapeFn));\n  }\n\n  public catch(rejected: ConstructorType<[unknown]>): this {\n    this.rejections.catch(rejected);\n    return this;\n  }\n\n  public destroy(): this {\n    this.dc.destroy();\n    return this;\n  }\n}\n\nconst escapeMap = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#x27;\",\n  \"/\": \"&#x2F;\",\n} as const;\n\n/**\n * String with html escaped\n */\nexport function escaped(base: string) {\n  if (typeof base !== \"string\") {\n    base = String(base);\n  }\n  return base.replace(\n    /[&<>\"'/]/g,\n    (match) => escapeMap[match as keyof typeof escapeMap],\n  );\n}\n"],"names":["NotSet","base","key","record","routes","r"],"mappings":"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"}