silentium-components 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.27](https://github.com/silentium-lab/silentium-components/compare/v0.0.26...v0.0.27) (2025-08-19)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **main:** silentium version ([405a83a](https://github.com/silentium-lab/silentium-components/commit/405a83ac2f6502c07a35c55869f086f9039565dc))
11
+
12
+ ### [0.0.26](https://github.com/silentium-lab/silentium-components/compare/v0.0.25...v0.0.26) (2025-08-18)
13
+
14
+
15
+ ### Features
16
+
17
+ * **main:** first component aded ([04f1f9a](https://github.com/silentium-lab/silentium-components/commit/04f1f9adf8f3c28749bbce4281b49f7c8cc05200))
18
+
5
19
  ### [0.0.25](https://github.com/silentium-lab/silentium-components/compare/v0.0.23...v0.0.25) (2025-08-16)
6
20
 
7
21
 
@@ -357,12 +357,17 @@ const toJson = (dataSrc, errorOwner) => {
357
357
  };
358
358
  };
359
359
 
360
+ const first = (baseSrc) => {
361
+ return silentium.applied(baseSrc, (a) => a[0]);
362
+ };
363
+
360
364
  exports.and = and;
361
365
  exports.branch = branch;
362
366
  exports.concatenated = concatenated;
363
367
  exports.deadline = deadline;
364
368
  exports.deferred = deferred;
365
369
  exports.dirty = dirty;
370
+ exports.first = first;
366
371
  exports.fromJson = fromJson;
367
372
  exports.hashTable = hashTable;
368
373
  exports.loading = loading;
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.cjs","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n"],"names":["of","applied","all","comparing","sharedStateless","filtered","isFilled","record","i","any","chain"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.cjs","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts","../src/lists/First.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n","import { applied, InformationType } from \"silentium\";\n\n/**\n * Represents the first element of an array.\n */\nexport const first = <T extends Array<unknown>>(\n baseSrc: InformationType<T>,\n): InformationType<T[0]> => {\n return applied(baseSrc, (a) => a[0]);\n};\n"],"names":["of","applied","all","comparing","sharedStateless","filtered","isFilled","record","i","any","chain"],"mappings":";;;;AAOa,MAAA,KAAA,GAAQ,CACnB,gBACA,EAAA,UAAA,GAAuB,EACvB,EAAA,WAAA,GAAwB,EACrB,KAAA;AACH,EAAA,MAAM,CAAC,SAAA,EAAW,EAAE,CAAA,GAAIA,YAAM,EAAA;AAE9B,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IAAQ,SAAA;AAAA,IAAW,CAAC,KAC5C,KAAA,IAAA,CAAK,MAAM,IAAK,CAAA,SAAA,CAAU,KAAK,CAAC;AAAA,GAClC;AAEA,EAAM,MAAA,CAAA,GAAiC,CAAC,CAAM,KAAA;AAC5C,IAAAC,aAAA;AAAA,MACE,iBAAA;AAAA,MACA;AAAA,KACA,CAAA,CAAC,CAACC,UAAAA,EAAW,IAAI,CAAM,KAAA;AACvB,MAAA,IAAI,CAACA,UAAW,EAAA;AACd,QAAA;AAAA;AAGF,MAAA,CAAA;AAAA,QACE,MAAO,CAAA,WAAA;AAAA,UACL,MAAA,CAAO,QAAQA,UAAS,CAAA,CAAE,OAAO,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AACjD,YAAI,IAAA,UAAA,CAAW,QAAS,CAAA,GAAG,CAAG,EAAA;AAC5B,cAAO,OAAA,IAAA;AAAA;AAET,YAAI,IAAA,WAAA,CAAY,QAAS,CAAA,GAAG,CAAG,EAAA;AAC7B,cAAO,OAAA,KAAA;AAAA;AAET,YAAO,OAAA,KAAA,KAAW,KAAa,GAAG,CAAA;AAAA,WACnC;AAAA;AACH,OACF;AAAA,KACD,CAAA;AAAA,GACH;AAEA,EAAO,OAAA,CAAC,GAAG,EAAE,CAAA;AACf;;ACpCa,MAAA,OAAA,GAAU,CACrB,kBAAA,EACA,mBAC6B,KAAA;AAC7B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,kBAAA,CAAmB,MAAM;AACvB,MAAA,CAAA,CAAE,IAAI,CAAA;AAAA,KACP,CAAA;AAED,IAAA,mBAAA,CAAoB,MAAM;AACxB,MAAA,CAAA,CAAE,KAAK,CAAA;AAAA,KACR,CAAA;AAAA,GACH;AACF;;ACfa,MAAA,IAAA,GAAO,CAKlB,OAAA,EACA,MACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAAD,aAAA;AAAA,MACE,OAAA;AAAA,MACA;AAAA,KACA,CAAA,CAAC,CAAC,IAAA,EAAM,GAAG,CAAM,KAAA;AACjB,MAAM,MAAA,SAAA,GAAY,GAAI,CAAA,KAAA,CAAM,GAAG,CAAA;AAC/B,MAAA,IAAI,KAAiB,GAAA,IAAA;AACrB,MAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QAAa,KAAA;AAC9B,QAAA,KAAA,GAAS,MAAkC,QAAQ,CAAA;AAAA,OACpD,CAAA;AAED,MAAI,IAAA,KAAA,KAAU,MAAa,IAAA,KAAA,KAAU,IAAM,EAAA;AACzC,QAAA,CAAA,CAAE,KAAU,CAAA;AAAA;AACd,KACD,CAAA;AAAA,GACH;AACF;;ACpBO,MAAM,QAAW,GAAA,CACtB,KACA,EAAA,OAAA,EACA,UACuB,KAAA;AACvB,EAAA,IAAI,SAAqB,GAAA,IAAA;AACzB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,MAAM,CAAC,UAAA,EAAY,IAAI,CAAA,GAAIE,0BAAgB,OAAO,CAAA;AAElD,IAAA,UAAA,CAAW,CAAC,OAAY,KAAA;AACtB,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,YAAA,CAAa,SAAmB,CAAA;AAAA;AAElC,MAAA,IAAI,cAAiB,GAAA,KAAA;AAErB,MAAA,SAAA,GAAY,WAAW,MAAM;AAC3B,QAAA,IAAI,cAAgB,EAAA;AAClB,UAAA;AAAA;AAEF,QAAiB,cAAA,GAAA,IAAA;AACjB,QAAM,KAAA,CAAA,IAAI,KAAM,CAAA,mCAAmC,CAAC,CAAA;AAAA,SACnD,OAAO,CAAA;AAEV,MAAA,MAAM,CAAI,GAAAC,kBAAA,CAAS,UAAY,EAAA,MAAM,CAAC,cAAc,CAAA;AACpD,MAAA,CAAA,CAAE,CAAC,CAAA;AAEH,MAAA,UAAA,CAAW,MAAM;AACf,QAAiB,cAAA,GAAA,IAAA;AAAA,OAClB,CAAA;AAAA,KACF,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,OAAQ,EAAA;AAAA,KACf;AAAA,GACF;AACF;;ACvCa,MAAA,IAAA,GAAO,CAAI,OAAoD,KAAA;AAC1E,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,IAAI,kBAAqB,GAAA,KAAA;AACzB,IAAA,IAAI,SAAsB,GAAA,IAAA;AAE1B,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAqB,kBAAA,GAAA,IAAA;AACrB,MAAA,cAAA,CAAe,MAAM;AACnB,QAAqB,kBAAA,GAAA,KAAA;AACrB,QAAA,IAAI,cAAc,IAAM,EAAA;AACtB,UAAA,CAAA,CAAE,SAAS,CAAA;AACX,UAAY,SAAA,GAAA,IAAA;AAAA;AACd,OACD,CAAA;AAAA,KACH;AAEA,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAY,SAAA,GAAA,CAAA;AACZ,MAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,QAAkB,iBAAA,EAAA;AAAA;AACpB,KACD,CAAA;AAAA,GACH;AACF;;AC3Ba,MAAA,IAAA,GAAO,CAAI,IAA6B,KAAA;AACnD,EAAI,IAAA,KAAA;AAEJ,EAAA,IAAA,CAAK,CAAC,CAAM,KAAA;AACV,IAAQ,KAAA,GAAA,CAAA;AAAA,GACT,CAAA;AAED,EAAO,OAAA;AAAA,IACL,KAAQ,GAAA;AACN,MAAA,IAAI,UAAU,MAAW,EAAA;AACvB,QAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA;AAAA;AAGpC,MAAO,OAAA,KAAA;AAAA;AACT,GACF;AACF,CAAA;;ACXa,MAAA,QAAA,GAAW,CACtB,OAAA,EACA,UACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAM,MAAA,QAAA,GAAW,KAAK,OAAO,CAAA;AAE7B,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,IAAIC,kBAAS,CAAA,QAAA,CAAS,KAAM,EAAC,CAAG,EAAA;AAC9B,QAAE,CAAA,CAAA,QAAA,CAAS,OAAO,CAAA;AAAA;AACpB,KACD,CAAA;AAAA,GACH;AACF;;ACdO,MAAM,MAAS,GAAA,CACpB,SACA,EAAA,IAAA,EACA,KACiC,KAAA;AACjC,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAM,MAAA,QAAA,GAAW,KAAK,IAAI,CAAA;AAC1B,IAAI,IAAA,SAAA;AAEJ,IAAA,IAAI,UAAU,MAAW,EAAA;AACvB,MAAA,SAAA,GAAY,KAAK,KAAK,CAAA;AAAA;AAGxB,IAAA,SAAA,CAAU,CAAC,CAAM,KAAA;AACf,MAAA,IAAI,CAAG,EAAA;AACL,QAAE,CAAA,CAAA,QAAA,CAAS,OAAO,CAAA;AAAA,iBACT,SAAW,EAAA;AACpB,QAAE,CAAA,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA;AACrB,KACD,CAAA;AAAA,GACH;AACF;;ACrBa,MAAA,IAAA,GAAO,CAAI,OAAoD,KAAA;AAC1E,EAAA,IAAI,SAAsB,GAAA,IAAA;AAE1B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAA,IAAI,MAAM,SAAW,EAAA;AACnB,QAAA,CAAA,CAAE,CAAC,CAAA;AACH,QAAY,SAAA,GAAA,CAAA;AAAA;AACd,KACD,CAAA;AAAA,GACH;AACF;;ACZa,MAAA,IAAA,GAAO,CAClB,OAAA,EACA,OACuB,KAAA;AACvB,EAAA,IAAI,MAAS,GAAA,KAAA;AACb,EAAA,MAAM,CAAI,GAAAD,kBAAA,CAAS,OAAS,EAAA,MAAM,CAAC,MAAM,CAAA;AAEzC,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,OAAY,KAAA;AACnB,MAAS,MAAA,GAAA,OAAA;AAAA,KACV,CAAA;AACD,IAAA,CAAA,CAAE,CAAC,CAAA;AAAA,GACL;AACF;;ACXa,MAAA,IAAA,GAAO,CAClB,SAAA,EACA,UACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAM,MAAA,UAAA,GAAa,KAAK,SAAS,CAAA;AAEjC,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,IAAIC,kBAAS,CAAA,UAAA,CAAW,KAAM,EAAC,CAAG,EAAA;AAChC,QAAE,CAAA,CAAA,UAAA,CAAW,OAAO,CAAA;AAAA;AACtB,KACD,CAAA;AAAA,GACH;AACF;;ACda,MAAA,WAAA,GAAc,CACzB,OACuB,KAAA;AACvB,EAAA,IAAI,UAAa,GAAA,KAAA;AACjB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAA,IAAI,eAAe,KAAO,EAAA;AACxB,QAAa,UAAA,GAAA,IAAA;AAAA,OACR,MAAA;AACL,QAAA,CAAA,CAAE,CAAC,CAAA;AAAA;AACL,KACD,CAAA;AAAA,GACH;AACF;;ACda,MAAA,SAAA,GAAY,CACvB,IACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,MAAM,SAAkC,EAAC;AAEzC,IAAA,IAAA,CAAK,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AACrB,MAAA,MAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AACd,MAAA,CAAA,CAAE,MAAW,CAAA;AAAA,KACd,CAAA;AAAA,GACH;AACF;;ACRa,MAAA,MAAA,GAAS,CACpB,SACsD,KAAA;AACtD,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,SAAS,CAAA;AAClC,IAAAJ,aAAA,CAAI,GAAG,MAAO,CAAA,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,CAAC,OAAY,KAAA;AAC5C,MAAA,MAAMK,UAA8B,EAAC;AACrC,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAU,KAAA;AAChC,QAAAA,OAAO,CAAA,IAAA,CAAK,KAAK,CAAC,CAAI,GAAA,KAAA;AAAA,OACvB,CAAA;AACD,MAAA,CAAA,CAAEA,OAAM,CAAA;AAAA,KACT,CAAA;AAAA,GACH;AACF;;ACfO,MAAM,eAAe,CAC1B,OAAA,EACA,WAAuC,GAAAC,WAAA,CAAE,EAAE,CACf,KAAA;AAC5B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAAN,aAAA;AAAA,MACE,WAAA;AAAA,MACA,GAAG;AAAA,KACH,CAAA,CAAC,CAAC,QAAA,EAAa,UAAO,CAAM,KAAA;AAC5B,MAAE,CAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,QAAQ,CAAC,CAAA;AAAA,KACzB,CAAA;AAAA,GACH;AACF;;ACZa,MAAA,aAAA,GACX,CACE,UACA,EAAA,QAAA,EACA,WAAoCM,WAAE,CAAA,EAAE,CAE1C,KAAA,CAAC,CAAM,KAAA;AACL,EAAAN,aAAA;AAAA,IACE,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,IACA,CAAC,CAAC,OAAS,EAAA,KAAA,EAAO,KAAK,CAAM,KAAA;AAC7B,IAAA,CAAA,CAAE,IAAI,MAAO,CAAA,OAAA,EAAS,KAAK,CAAE,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,GACzC,CAAA;AACH;;ACNK,MAAM,MAAS,GAAA,CACpB,MACA,EAAA,SAAA,EACA,UACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,SAAA,CAAU,CAAC,MAAW,KAAA;AACpB,MAAAO,aAAA;AAAA,QACEC,eAAA,CAAM,QAAQ,UAAU,CAAA;AAAA,QACxB,GAAG,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA;AACnB,UAAO,OAAA,MAAA;AAAA,YACL,aAAA;AAAA,cACEF,WAAA,CAAE,EAAE,OAAO,CAAA;AAAA,cACX,MAAA;AAAA,cACA,CAAE,CAAA,YAAA,GAAeA,WAAE,CAAA,CAAA,CAAE,YAAY,CAAI,GAAA;AAAA,aACvC;AAAA,YACC,OAAO,EAAE,QAAa,KAAA,UAAA,GACnB,EAAE,QACF,GAAAA,WAAA,CAAE,EAAE,QAAQ;AAAA,WAClB;AAAA,SACD;AAAA,QACD,CAAuB,CAAA;AAAA,KAC1B,CAAA;AAAA,GACH;AACF;;AChCa,MAAA,cAAA,GACX,CACE,QAAA,EACA,UACA,EAAA,eAAA,EACA,WAAoCA,WAAE,CAAA,EAAE,CAE1C,KAAA,CAAC,CAAM,KAAA;AACL,EAAAN,aAAA;AAAA,IACE,UAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,IACA,CAAC,CAAC,SAAS,KAAO,EAAA,YAAA,EAAc,KAAK,CAAM,KAAA;AAC3C,IAAE,CAAA,CAAA,MAAA,CAAO,KAAK,CAAA,CAAE,OAAQ,CAAA,IAAI,OAAO,OAAS,EAAA,KAAK,CAAG,EAAA,YAAY,CAAC,CAAA;AAAA,GAClE,CAAA;AACH;;AChBW,MAAA,WAAA,GACX,CACE,UACA,EAAA,QAAA,EACA,WAAoCM,WAAE,CAAA,EAAE,CAE1C,KAAA,CAAC,CAAM,KAAA;AACL,EAAAN,aAAA;AAAA,IACE,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,IACA,CAAC,CAAC,OAAS,EAAA,KAAA,EAAO,KAAK,CAAM,KAAA;AAC7B,IAAA,MAAM,SAAS,IAAI,MAAA,CAAO,SAAS,KAAK,CAAA,CAAE,KAAK,KAAK,CAAA;AACpD,IAAE,CAAA,CAAA,MAAA,IAAU,EAAE,CAAA;AAAA,GACf,CAAA;AACH;;ACfK,MAAM,GAAM,GAAA,CACjB,OACA,EAAA,MAAA,EACA,QACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAAA,aAAA;AAAA,MACE,OAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,MACA,CAAC,CAAC,IAAM,EAAA,GAAA,EAAK,KAAK,CAAM,KAAA;AACxB,MAAC,IAAA,CAAiC,GAAG,CAAI,GAAA,KAAA;AACzC,MAAA,CAAA,CAAE,IAAI,CAAA;AAAA,KACP,CAAA;AAAA,GACH;AACF;;AChBa,MAAA,GAAA,GAAM,CACjB,MAAA,EACA,MAC6B,KAAA;AAC7B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAAA,aAAA;AAAA,MACE,MAAA;AAAA,MACA;AAAA,KACA,CAAA,CAAC,CAAC,GAAA,EAAK,GAAG,CAAM,KAAA;AAChB,MAAA,CAAA,CAAE,OAAO,GAAG,CAAA;AAAA,KACb,CAAA;AAAA,GACH;AACF;;ACZa,MAAA,EAAA,GAAK,CAChB,MAAA,EACA,MAC6B,KAAA;AAC7B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAAA,aAAA;AAAA,MACE,MAAA;AAAA,MACA;AAAA,KACA,CAAA,CAAC,CAAC,GAAA,EAAK,GAAG,CAAM,KAAA;AAChB,MAAA,CAAA,CAAE,OAAO,GAAG,CAAA;AAAA,KACb,CAAA;AAAA,GACH;AACF;;ACZa,MAAA,GAAA,GAAM,CACjB,OAC6B,KAAA;AAC7B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAA,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,KACL,CAAA;AAAA,GACH;AACF;;ACRa,MAAA,QAAA,GAAW,CACtB,OAAA,EACA,UACuB,KAAA;AACvB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAChB,MAAI,IAAA;AACF,QAAE,CAAA,CAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAC,CAAA;AAAA,eACX,KAAO,EAAA;AACd,QAAA,UAAA,GAAa,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,KAAK,EAAE,CAAC,CAAA;AAAA;AAC1D,KACD,CAAA;AAAA,GACH;AACF;;ACba,MAAA,MAAA,GAAS,CACpB,OAAA,EACA,UAC4B,KAAA;AAC5B,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAChB,MAAI,IAAA;AACF,QAAE,CAAA,CAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA;AAAA,OAChB,CAAA,MAAA;AACN,QAAa,UAAA,GAAA,IAAI,KAAM,CAAA,2BAA2B,CAAC,CAAA;AAAA;AACrD,KACD,CAAA;AAAA,GACH;AACF;;ACba,MAAA,KAAA,GAAQ,CACnB,OAC0B,KAAA;AAC1B,EAAA,OAAOD,kBAAQ,OAAS,EAAA,CAAC,CAAM,KAAA,CAAA,CAAE,CAAC,CAAC,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -144,5 +144,10 @@ declare const fromJson: <T>(jsonSrc: InformationType<string>, errorOwner?: Owner
144
144
  */
145
145
  declare const toJson: (dataSrc: InformationType, errorOwner?: OwnerType) => InformationType<string>;
146
146
 
147
- export { and, branch, concatenated, deadline, deferred, dirty, fromJson, hashTable, loading, lock, memo, not, onlyChanged, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, shot, tick, toJson };
147
+ /**
148
+ * Represents the first element of an array.
149
+ */
150
+ declare const first: <T extends Array<unknown>>(baseSrc: InformationType<T>) => InformationType<T[0]>;
151
+
152
+ export { and, branch, concatenated, deadline, deferred, dirty, first, fromJson, hashTable, loading, lock, memo, not, onlyChanged, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, shot, tick, toJson };
148
153
  export type { Route };
@@ -355,5 +355,9 @@ const toJson = (dataSrc, errorOwner) => {
355
355
  };
356
356
  };
357
357
 
358
- export { and, branch, concatenated, deadline, deferred, dirty, fromJson, hashTable, loading, lock, memo, not, onlyChanged, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, shot, tick, toJson };
358
+ const first = (baseSrc) => {
359
+ return applied(baseSrc, (a) => a[0]);
360
+ };
361
+
362
+ export { and, branch, concatenated, deadline, deferred, dirty, first, fromJson, hashTable, loading, lock, memo, not, onlyChanged, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, shot, tick, toJson };
359
363
  //# sourceMappingURL=silentium-components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.js","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n"],"names":["comparing","record"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.js","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts","../src/lists/First.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n","import { applied, InformationType } from \"silentium\";\n\n/**\n * Represents the first element of an array.\n */\nexport const first = <T extends Array<unknown>>(\n baseSrc: InformationType<T>,\n): InformationType<T[0]> => {\n return applied(baseSrc, (a) => a[0]);\n};\n"],"names":["comparing","record"],"mappings":"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"}
@@ -1 +1 @@
1
- !function(e,t){"use strict";const l=e=>{let t;return e((e=>{t=e})),{value(){if(void 0===t)throw new Error("no value in sync");return t}}},r=(e,t,r)=>n=>{const a=l(t);let o;void 0!==r&&(o=l(r)),e((e=>{e?n(a.value()):o&&n(o.value())}))},n=(e,l,r=t.i(""))=>n=>{t.all(e,l,r)((([e,t,l])=>{n(new RegExp(e,l).test(t))}))};e.and=(e,l)=>r=>{t.all(e,l)((([e,t])=>{r(e&&t)}))},e.branch=r,e.concatenated=(e,l=t.i(""))=>r=>{t.all(l,...e)((([e,...t])=>{r(t.join(e))}))},e.deadline=(e,l,r)=>{let n=null;return a=>{const[o,i]=t.sharedStateless(l);return r((l=>{n&&clearTimeout(n);let r=!1;n=setTimeout((()=>{r||(r=!0,e(new Error("Timeout reached in Deadline class")))}),l);t.filtered(o,(()=>!r))(a),o((()=>{r=!0}))})),()=>{i.destroy()}}},e.deferred=(e,r)=>n=>{const a=l(e);r((()=>{t.isFilled(a.value())&&n(a.value())}))},e.dirty=(e,l=[],r=[])=>{const[n,a]=t.of(),o=t.applied(n,(e=>JSON.parse(JSON.stringify(e))));return[n=>{t.all(o,e)((([e,t])=>{e&&n(Object.fromEntries(Object.entries(e).filter((([e,n])=>!!l.includes(e)||!r.includes(e)&&n!==t[e]))))}))},a]},e.fromJson=(e,t)=>l=>{e((e=>{try{l(JSON.parse(e))}catch(e){t?.(new Error(`Failed to parse JSON: ${e}`))}}))},e.hashTable=e=>t=>{const l={};e((([e,r])=>{l[e]=r,t(l)}))},e.loading=(e,t)=>l=>{e((()=>{l(!0)})),t((()=>{l(!1)}))},e.lock=(e,l)=>{let r=!1;const n=t.filtered(e,(()=>!r));return e=>{l((e=>{r=e})),n(e)}},e.memo=e=>{let t=null;return l=>{e((e=>{e!==t&&(l(e),t=e)}))}},e.not=e=>t=>{e((e=>{t(!e)}))},e.onlyChanged=e=>{let t=!1;return l=>{e((e=>{!1===t?t=!0:l(e)}))}},e.or=(e,l)=>r=>{t.all(e,l)((([e,t])=>{r(e||t)}))},e.path=(e,l)=>r=>{t.all(e,l)((([e,t])=>{const l=t.split(".");let n=e;l.forEach((e=>{n=n[e]})),void 0!==n&&n!==e&&r(n)}))},e.record=e=>l=>{const r=Object.keys(e);t.all(...Object.values(e))((e=>{const t={};e.forEach(((e,l)=>{t[r[l]]=e})),l(t)}))},e.regexpMatch=(e,l,r=t.i(""))=>n=>{t.all(e,l,r)((([e,t,l])=>{const r=new RegExp(e,l).exec(t);n(r??[])}))},e.regexpMatched=n,e.regexpReplaced=(e,l,r,n=t.i(""))=>a=>{t.all(l,e,r,n)((([e,t,l,r])=>{a(String(t).replace(new RegExp(e,r),l))}))},e.router=(e,l,a)=>o=>{l((l=>{t.any(t.chain(e,a),...l.map((l=>r(n(t.i(l.pattern),e,l.patternFlags?t.i(l.patternFlags):void 0),"function"==typeof l.template?l.template:t.i(l.template)))))(o)}))},e.set=(e,l,r)=>n=>{t.all(e,l,r)((([e,t,l])=>{e[t]=l,n(e)}))},e.shot=(e,r)=>n=>{const a=l(e);r((()=>{t.isFilled(a.value())&&n(a.value())}))},e.tick=e=>t=>{let l=!1,r=null;e((e=>{r=e,l||(l=!0,queueMicrotask((()=>{l=!1,null!==r&&(t(r),r=null)})))}))},e.toJson=(e,t)=>l=>{e((e=>{try{l(JSON.stringify(e))}catch{t?.(new Error("Failed to convert to JSON"))}}))}}({},silentium);
1
+ !function(e,t){"use strict";const l=e=>{let t;return e((e=>{t=e})),{value(){if(void 0===t)throw new Error("no value in sync");return t}}},r=(e,t,r)=>n=>{const a=l(t);let o;void 0!==r&&(o=l(r)),e((e=>{e?n(a.value()):o&&n(o.value())}))},n=(e,l,r=t.i(""))=>n=>{t.all(e,l,r)((([e,t,l])=>{n(new RegExp(e,l).test(t))}))};e.and=(e,l)=>r=>{t.all(e,l)((([e,t])=>{r(e&&t)}))},e.branch=r,e.concatenated=(e,l=t.i(""))=>r=>{t.all(l,...e)((([e,...t])=>{r(t.join(e))}))},e.deadline=(e,l,r)=>{let n=null;return a=>{const[o,i]=t.sharedStateless(l);return r((l=>{n&&clearTimeout(n);let r=!1;n=setTimeout((()=>{r||(r=!0,e(new Error("Timeout reached in Deadline class")))}),l);t.filtered(o,(()=>!r))(a),o((()=>{r=!0}))})),()=>{i.destroy()}}},e.deferred=(e,r)=>n=>{const a=l(e);r((()=>{t.isFilled(a.value())&&n(a.value())}))},e.dirty=(e,l=[],r=[])=>{const[n,a]=t.of(),o=t.applied(n,(e=>JSON.parse(JSON.stringify(e))));return[n=>{t.all(o,e)((([e,t])=>{e&&n(Object.fromEntries(Object.entries(e).filter((([e,n])=>!!l.includes(e)||!r.includes(e)&&n!==t[e]))))}))},a]},e.first=e=>t.applied(e,(e=>e[0])),e.fromJson=(e,t)=>l=>{e((e=>{try{l(JSON.parse(e))}catch(e){t?.(new Error(`Failed to parse JSON: ${e}`))}}))},e.hashTable=e=>t=>{const l={};e((([e,r])=>{l[e]=r,t(l)}))},e.loading=(e,t)=>l=>{e((()=>{l(!0)})),t((()=>{l(!1)}))},e.lock=(e,l)=>{let r=!1;const n=t.filtered(e,(()=>!r));return e=>{l((e=>{r=e})),n(e)}},e.memo=e=>{let t=null;return l=>{e((e=>{e!==t&&(l(e),t=e)}))}},e.not=e=>t=>{e((e=>{t(!e)}))},e.onlyChanged=e=>{let t=!1;return l=>{e((e=>{!1===t?t=!0:l(e)}))}},e.or=(e,l)=>r=>{t.all(e,l)((([e,t])=>{r(e||t)}))},e.path=(e,l)=>r=>{t.all(e,l)((([e,t])=>{const l=t.split(".");let n=e;l.forEach((e=>{n=n[e]})),void 0!==n&&n!==e&&r(n)}))},e.record=e=>l=>{const r=Object.keys(e);t.all(...Object.values(e))((e=>{const t={};e.forEach(((e,l)=>{t[r[l]]=e})),l(t)}))},e.regexpMatch=(e,l,r=t.i(""))=>n=>{t.all(e,l,r)((([e,t,l])=>{const r=new RegExp(e,l).exec(t);n(r??[])}))},e.regexpMatched=n,e.regexpReplaced=(e,l,r,n=t.i(""))=>a=>{t.all(l,e,r,n)((([e,t,l,r])=>{a(String(t).replace(new RegExp(e,r),l))}))},e.router=(e,l,a)=>o=>{l((l=>{t.any(t.chain(e,a),...l.map((l=>r(n(t.i(l.pattern),e,l.patternFlags?t.i(l.patternFlags):void 0),"function"==typeof l.template?l.template:t.i(l.template)))))(o)}))},e.set=(e,l,r)=>n=>{t.all(e,l,r)((([e,t,l])=>{e[t]=l,n(e)}))},e.shot=(e,r)=>n=>{const a=l(e);r((()=>{t.isFilled(a.value())&&n(a.value())}))},e.tick=e=>t=>{let l=!1,r=null;e((e=>{r=e,l||(l=!0,queueMicrotask((()=>{l=!1,null!==r&&(t(r),r=null)})))}))},e.toJson=(e,t)=>l=>{e((e=>{try{l(JSON.stringify(e))}catch{t?.(new Error("Failed to convert to JSON"))}}))}}({},silentium);
@@ -1,2 +1,2 @@
1
- import{of as e,applied as t,all as r,sharedStateless as n,filtered as l,isFilled as o,i as s,any as a,chain as c}from"silentium";const u=(n,l=[],o=[])=>{const[s,a]=e(),c=t(s,(e=>JSON.parse(JSON.stringify(e))));return[e=>{r(c,n)((([t,r])=>{t&&e(Object.fromEntries(Object.entries(t).filter((([e,t])=>!!l.includes(e)||!o.includes(e)&&t!==r[e]))))}))},a]},i=(e,t)=>r=>{e((()=>{r(!0)})),t((()=>{r(!1)}))},p=(e,t)=>n=>{r(e,t)((([e,t])=>{const r=t.split(".");let l=e;r.forEach((e=>{l=l[e]})),void 0!==l&&l!==e&&n(l)}))},v=(e,t,r)=>{let o=null;return s=>{const[a,c]=n(t);return r((t=>{o&&clearTimeout(o);let r=!1;o=setTimeout((()=>{r||(r=!0,e(new Error("Timeout reached in Deadline class")))}),t);l(a,(()=>!r))(s),a((()=>{r=!0}))})),()=>{c.destroy()}}},d=e=>t=>{let r=!1,n=null;e((e=>{n=e,r||(r=!0,queueMicrotask((()=>{r=!1,null!==n&&(t(n),n=null)})))}))},m=e=>{let t;return e((e=>{t=e})),{value(){if(void 0===t)throw new Error("no value in sync");return t}}},f=(e,t)=>r=>{const n=m(e);t((()=>{o(n.value())&&r(n.value())}))},E=(e,t,r)=>n=>{const l=m(t);let o;void 0!==r&&(o=m(r)),e((e=>{e?n(l.value()):o&&n(o.value())}))},O=e=>{let t=null;return r=>{e((e=>{e!==t&&(r(e),t=e)}))}},g=(e,t)=>{let r=!1;const n=l(e,(()=>!r));return e=>{t((e=>{r=e})),n(e)}},w=(e,t)=>r=>{const n=m(e);t((()=>{o(n.value())&&r(n.value())}))},y=e=>{let t=!1;return r=>{e((e=>{!1===t?t=!0:r(e)}))}},S=e=>t=>{const r={};e((([e,n])=>{r[e]=n,t(r)}))},h=e=>t=>{const n=Object.keys(e);r(...Object.values(e))((e=>{const r={};e.forEach(((e,t)=>{r[n[t]]=e})),t(r)}))},J=(e,t=s(""))=>n=>{r(t,...e)((([e,...t])=>{n(t.join(e))}))},N=(e,t,n=s(""))=>l=>{r(e,t,n)((([e,t,r])=>{l(new RegExp(e,r).test(t))}))},j=(e,t,r)=>n=>{t((t=>{a(c(e,r),...t.map((t=>E(N(s(t.pattern),e,t.patternFlags?s(t.patternFlags):void 0),"function"==typeof t.template?t.template:s(t.template)))))(n)}))},x=(e,t,n,l=s(""))=>o=>{r(t,e,n,l)((([e,t,r,n])=>{o(String(t).replace(new RegExp(e,n),r))}))},b=(e,t,n=s(""))=>l=>{r(e,t,n)((([e,t,r])=>{const n=new RegExp(e,r).exec(t);l(n??[])}))},F=(e,t,n)=>l=>{r(e,t,n)((([e,t,r])=>{e[t]=r,l(e)}))},R=(e,t)=>n=>{r(e,t)((([e,t])=>{n(e&&t)}))},T=(e,t)=>n=>{r(e,t)((([e,t])=>{n(e||t)}))},k=e=>t=>{e((e=>{t(!e)}))},q=(e,t)=>r=>{e((e=>{try{r(JSON.parse(e))}catch(e){t?.(new Error(`Failed to parse JSON: ${e}`))}}))},D=(e,t)=>r=>{e((e=>{try{r(JSON.stringify(e))}catch{t?.(new Error("Failed to convert to JSON"))}}))};export{R as and,E as branch,J as concatenated,v as deadline,f as deferred,u as dirty,q as fromJson,S as hashTable,i as loading,g as lock,O as memo,k as not,y as onlyChanged,T as or,p as path,h as record,b as regexpMatch,N as regexpMatched,x as regexpReplaced,j as router,F as set,w as shot,d as tick,D as toJson};
1
+ import{of as e,applied as t,all as r,sharedStateless as n,filtered as l,isFilled as o,i as s,any as a,chain as c}from"silentium";const u=(n,l=[],o=[])=>{const[s,a]=e(),c=t(s,(e=>JSON.parse(JSON.stringify(e))));return[e=>{r(c,n)((([t,r])=>{t&&e(Object.fromEntries(Object.entries(t).filter((([e,t])=>!!l.includes(e)||!o.includes(e)&&t!==r[e]))))}))},a]},i=(e,t)=>r=>{e((()=>{r(!0)})),t((()=>{r(!1)}))},p=(e,t)=>n=>{r(e,t)((([e,t])=>{const r=t.split(".");let l=e;r.forEach((e=>{l=l[e]})),void 0!==l&&l!==e&&n(l)}))},v=(e,t,r)=>{let o=null;return s=>{const[a,c]=n(t);return r((t=>{o&&clearTimeout(o);let r=!1;o=setTimeout((()=>{r||(r=!0,e(new Error("Timeout reached in Deadline class")))}),t);l(a,(()=>!r))(s),a((()=>{r=!0}))})),()=>{c.destroy()}}},d=e=>t=>{let r=!1,n=null;e((e=>{n=e,r||(r=!0,queueMicrotask((()=>{r=!1,null!==n&&(t(n),n=null)})))}))},m=e=>{let t;return e((e=>{t=e})),{value(){if(void 0===t)throw new Error("no value in sync");return t}}},f=(e,t)=>r=>{const n=m(e);t((()=>{o(n.value())&&r(n.value())}))},E=(e,t,r)=>n=>{const l=m(t);let o;void 0!==r&&(o=m(r)),e((e=>{e?n(l.value()):o&&n(o.value())}))},O=e=>{let t=null;return r=>{e((e=>{e!==t&&(r(e),t=e)}))}},g=(e,t)=>{let r=!1;const n=l(e,(()=>!r));return e=>{t((e=>{r=e})),n(e)}},w=(e,t)=>r=>{const n=m(e);t((()=>{o(n.value())&&r(n.value())}))},y=e=>{let t=!1;return r=>{e((e=>{!1===t?t=!0:r(e)}))}},S=e=>t=>{const r={};e((([e,n])=>{r[e]=n,t(r)}))},h=e=>t=>{const n=Object.keys(e);r(...Object.values(e))((e=>{const r={};e.forEach(((e,t)=>{r[n[t]]=e})),t(r)}))},J=(e,t=s(""))=>n=>{r(t,...e)((([e,...t])=>{n(t.join(e))}))},N=(e,t,n=s(""))=>l=>{r(e,t,n)((([e,t,r])=>{l(new RegExp(e,r).test(t))}))},j=(e,t,r)=>n=>{t((t=>{a(c(e,r),...t.map((t=>E(N(s(t.pattern),e,t.patternFlags?s(t.patternFlags):void 0),"function"==typeof t.template?t.template:s(t.template)))))(n)}))},x=(e,t,n,l=s(""))=>o=>{r(t,e,n,l)((([e,t,r,n])=>{o(String(t).replace(new RegExp(e,n),r))}))},b=(e,t,n=s(""))=>l=>{r(e,t,n)((([e,t,r])=>{const n=new RegExp(e,r).exec(t);l(n??[])}))},F=(e,t,n)=>l=>{r(e,t,n)((([e,t,r])=>{e[t]=r,l(e)}))},R=(e,t)=>n=>{r(e,t)((([e,t])=>{n(e&&t)}))},T=(e,t)=>n=>{r(e,t)((([e,t])=>{n(e||t)}))},k=e=>t=>{e((e=>{t(!e)}))},q=(e,t)=>r=>{e((e=>{try{r(JSON.parse(e))}catch(e){t?.(new Error(`Failed to parse JSON: ${e}`))}}))},D=(e,t)=>r=>{e((e=>{try{r(JSON.stringify(e))}catch{t?.(new Error("Failed to convert to JSON"))}}))},M=e=>t(e,(e=>e[0]));export{R as and,E as branch,J as concatenated,v as deadline,f as deferred,u as dirty,M as first,q as fromJson,S as hashTable,i as loading,g as lock,O as memo,k as not,y as onlyChanged,T as or,p as path,h as record,b as regexpMatch,N as regexpMatched,x as regexpReplaced,j as router,F as set,w as shot,d as tick,D as toJson};
2
2
  //# sourceMappingURL=silentium-components.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.min.mjs","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n"],"names":["dirty","baseEntitySource","alwaysKeep","excludeKeys","comparing","co","of","comparingDetached","applied","value","JSON","parse","stringify","o","all","base","Object","fromEntries","entries","filter","key","includes","loading","loadingStartSource","loadingFinishSource","path","baseSrc","keySrc","keyChunks","split","forEach","keyChunk","deadline","error","timeoutSrc","timerHead","baseShared","pool","sharedStateless","timeout","clearTimeout","timeoutReached","setTimeout","Error","filtered","f","destroy","tick","microtaskScheduled","lastValue","v","queueMicrotask","sync","deferred","triggerSrc","baseSync","isFilled","branch","condition","left","right","leftSync","rightSync","memo","lock","lockSrc","locked","i","newLock","shot","targetSrc","targetSync","onlyChanged","firstValue","hashTable","record","recordSrc","keys","values","entry","index","concatenated","sources","joinPartSrc","joinPart","strings","join","regexpMatched","patternSrc","valueSrc","flagsSrc","pattern","flags","RegExp","test","router","urlSrc","routesSrc","defaultSrc","routes","any","chain","map","r","patternFlags","template","regexpReplaced","replaceValueSrc","replaceValue","String","replace","regexpMatch","result","exec","set","and","oneSrc","twoSrc","one","two","or","not","fromJson","jsonSrc","errorOwner","json","toJson","dataSrc","data"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.min.mjs","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts","../src/lists/First.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n","import { applied, InformationType } from \"silentium\";\n\n/**\n * Represents the first element of an array.\n */\nexport const first = <T extends Array<unknown>>(\n baseSrc: InformationType<T>,\n): InformationType<T[0]> => {\n return applied(baseSrc, (a) => a[0]);\n};\n"],"names":["dirty","baseEntitySource","alwaysKeep","excludeKeys","comparing","co","of","comparingDetached","applied","value","JSON","parse","stringify","o","all","base","Object","fromEntries","entries","filter","key","includes","loading","loadingStartSource","loadingFinishSource","path","baseSrc","keySrc","keyChunks","split","forEach","keyChunk","deadline","error","timeoutSrc","timerHead","baseShared","pool","sharedStateless","timeout","clearTimeout","timeoutReached","setTimeout","Error","filtered","f","destroy","tick","microtaskScheduled","lastValue","v","queueMicrotask","sync","deferred","triggerSrc","baseSync","isFilled","branch","condition","left","right","leftSync","rightSync","memo","lock","lockSrc","locked","i","newLock","shot","targetSrc","targetSync","onlyChanged","firstValue","hashTable","record","recordSrc","keys","values","entry","index","concatenated","sources","joinPartSrc","joinPart","strings","join","regexpMatched","patternSrc","valueSrc","flagsSrc","pattern","flags","RegExp","test","router","urlSrc","routesSrc","defaultSrc","routes","any","chain","map","r","patternFlags","template","regexpReplaced","replaceValueSrc","replaceValue","String","replace","regexpMatch","result","exec","set","and","oneSrc","twoSrc","one","two","or","not","fromJson","jsonSrc","errorOwner","json","toJson","dataSrc","data","first","a"],"mappings":"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"}
@@ -355,5 +355,9 @@ const toJson = (dataSrc, errorOwner) => {
355
355
  };
356
356
  };
357
357
 
358
- export { and, branch, concatenated, deadline, deferred, dirty, fromJson, hashTable, loading, lock, memo, not, onlyChanged, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, shot, tick, toJson };
358
+ const first = (baseSrc) => {
359
+ return applied(baseSrc, (a) => a[0]);
360
+ };
361
+
362
+ export { and, branch, concatenated, deadline, deferred, dirty, first, fromJson, hashTable, loading, lock, memo, not, onlyChanged, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, shot, tick, toJson };
359
363
  //# sourceMappingURL=silentium-components.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.mjs","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n"],"names":["comparing","record"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.mjs","sources":["../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Sync.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Shot.ts","../src/behaviors/OnlyChanged.ts","../src/structures/HashTable.ts","../src/structures/Record.ts","../src/strings/Concatenated.ts","../src/system/RegexpMatched.ts","../src/navigation/Router.ts","../src/system/RegexpReplaced.ts","../src/system/RegexpMatch.ts","../src/system/Set.ts","../src/boolean/And.ts","../src/boolean/Or.ts","../src/boolean/Not.ts","../src/formats/FromJson.ts","../src/formats/ToJson.ts","../src/lists/First.ts"],"sourcesContent":["import { all, applied, InformationType, of } 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 const dirty = <T extends object>(\n baseEntitySource: InformationType<T>,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n) => {\n const [comparing, co] = of<T>();\n\n const comparingDetached = applied(comparing, (value) =>\n JSON.parse(JSON.stringify(value)),\n );\n\n const i: InformationType<Partial<T>> = (o) => {\n all(\n comparingDetached,\n baseEntitySource,\n )(([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n o(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (alwaysKeep.includes(key)) {\n return true;\n }\n if (excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n );\n });\n };\n\n return [i, co] as const;\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Representation of loading process\n * first informatin source begins loading\n * second information source stops loading\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: InformationType<unknown>,\n loadingFinishSource: InformationType<unknown>,\n): InformationType<boolean> => {\n return (o) => {\n loadingStartSource(() => {\n o(true);\n });\n\n loadingFinishSource(() => {\n o(false);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <\n R,\n T extends Record<string, unknown> | Array<unknown> = any,\n K extends string = any,\n>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<K>,\n): InformationType<R> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n )(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as Record<string, unknown>)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n o(value as R);\n }\n });\n };\n};\n","import {\n filtered,\n InformationType,\n OwnerType,\n sharedStateless,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: OwnerType<Error>,\n baseSrc: InformationType<T>,\n timeoutSrc: InformationType<number>,\n): InformationType<T> => {\n let timerHead: unknown = null;\n return (o) => {\n const [baseShared, pool] = sharedStateless(baseSrc);\n\n timeoutSrc((timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n error(new Error(\"Timeout reached in Deadline class\"));\n }, timeout);\n\n const f = filtered(baseShared, () => !timeoutReached);\n f(o);\n\n baseShared(() => {\n timeoutReached = true;\n });\n });\n\n return () => {\n pool.destroy();\n };\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Accumulates the last value of the source and returns one result once per tick\n * https://silentium-lab.github.io/silentium-components/#/behaviors/tick\n */\nexport const tick = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n return (o) => {\n let microtaskScheduled = false;\n let lastValue: T | null = null;\n\n const scheduleMicrotask = () => {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n if (lastValue !== null) {\n o(lastValue);\n lastValue = null;\n }\n });\n };\n\n baseSrc((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\nexport const sync = <T>(base: InformationType<T>) => {\n let value: T | undefined;\n\n base((v) => {\n value = v;\n });\n\n return {\n value() {\n if (value === undefined) {\n throw new Error(\"no value in sync\");\n }\n\n return value;\n },\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Defer one source after another, gives values of baseSrc only once when triggerSrc responds\n * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred\n */\nexport const deferred = <T>(\n baseSrc: InformationType<T>,\n triggerSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n const baseSync = sync(baseSrc);\n\n triggerSrc(() => {\n if (isFilled(baseSync.value())) {\n o(baseSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n condition: InformationType<boolean>,\n left: InformationType<Then>,\n right?: InformationType<Else>,\n): InformationType<Then | Else> => {\n return (o) => {\n const leftSync = sync(left);\n let rightSync: { value: () => Else };\n\n if (right !== undefined) {\n rightSync = sync(right);\n }\n\n condition((v) => {\n if (v) {\n o(leftSync.value());\n } else if (rightSync) {\n o(rightSync.value());\n }\n });\n };\n};\n","import { InformationType } 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 const memo = <T>(baseSrc: InformationType<T>): InformationType<T> => {\n let lastValue: T | null = null;\n\n return (o) => {\n baseSrc((v) => {\n if (v !== lastValue) {\n o(v);\n lastValue = v;\n }\n });\n };\n};\n","import { filtered, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: InformationType<T>,\n lockSrc: InformationType<boolean>,\n): InformationType<T> => {\n let locked = false;\n const i = filtered(baseSrc, () => !locked);\n\n return (o) => {\n lockSrc((newLock) => {\n locked = newLock;\n });\n i(o);\n };\n};\n","import { InformationType, isFilled } from \"silentium\";\nimport { sync } from \"./Sync\";\n\n/**\n * Helps to represent only last fresh value of some source, refreshing controls by shotSrc\n * https://silentium-lab.github.io/silentium-components/#/behaviors/shot\n */\nexport const shot = <T>(\n targetSrc: InformationType<T>,\n triggerSrc: InformationType,\n): InformationType<T> => {\n return (o) => {\n const targetSync = sync(targetSrc);\n\n triggerSrc(() => {\n if (isFilled(targetSync.value())) {\n o(targetSync.value());\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * Represents source what was changed at least once\n * https://silentium-lab.github.io/silentium-components/#/behaviors/only-changed\n */\nexport const onlyChanged = <T>(\n baseSrc: InformationType<T>,\n): InformationType<T> => {\n let firstValue = false;\n return (o) => {\n baseSrc((v) => {\n if (firstValue === false) {\n firstValue = true;\n } else {\n o(v);\n }\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = <T>(\n base: InformationType<[string, unknown]>,\n): InformationType<T> => {\n return (o) => {\n const record: Record<string, unknown> = {};\n\n base(([key, value]) => {\n record[key] = value;\n o(record as T);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\ntype UnInformation<T> = T extends InformationType<infer U> ? U : never;\n\n/**\n * Returns record of data from record of sources\n * https://silentium-lab.github.io/silentium-components/#/structures/record\n */\nexport const record = <T extends InformationType>(\n recordSrc: Record<string, T>,\n): InformationType<Record<string, UnInformation<T>>> => {\n return (o) => {\n const keys = Object.keys(recordSrc);\n all(...Object.values(recordSrc))((entries) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n o(record);\n });\n };\n};\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * Join sources of strings to one source\n * https://silentium-lab.github.io/silentium-components/#/string/concatenated\n */\nexport const concatenated = (\n sources: InformationType<string>[],\n joinPartSrc: InformationType<string> = i(\"\"),\n): InformationType<string> => {\n return (o) => {\n all(\n joinPartSrc,\n ...sources,\n )(([joinPart, ...strings]) => {\n o(strings.join(joinPart));\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpMatched =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<boolean> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n o(new RegExp(pattern, flags).test(value));\n });\n };\n","import { any, chain, i, InformationType, OwnerType } from \"silentium\";\nimport { branch } from \"../behaviors\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | InformationType<T>;\n}\n\n/**\n * Router component what will return template if url matches pattern\n * https://silentium-lab.github.io/silentium-components/#/navigation/router\n */\nexport const router = <T = \"string\">(\n urlSrc: InformationType<string>,\n routesSrc: InformationType<Route<T>[]>,\n defaultSrc: InformationType<T>,\n): InformationType<T> => {\n return (o) => {\n routesSrc((routes) => {\n any(\n chain(urlSrc, defaultSrc),\n ...routes.map((r) => {\n return branch(\n regexpMatched(\n i(r.pattern),\n urlSrc,\n r.patternFlags ? i(r.patternFlags) : undefined,\n ),\n (typeof r.template === \"function\"\n ? r.template\n : i(r.template)) as InformationType,\n );\n }),\n )(o as OwnerType<unknown>);\n });\n };\n};\n","import { all, i, InformationType } 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 const regexpReplaced =\n (\n valueSrc: InformationType<string>,\n patternSrc: InformationType<string>,\n replaceValueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )(([pattern, value, replaceValue, flags]) => {\n o(String(value).replace(new RegExp(pattern, flags), replaceValue));\n });\n };\n","import { all, i, InformationType } from \"silentium\";\n\n/**\n * First match of regexp\n * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched\n */\nexport const regexpMatch =\n (\n patternSrc: InformationType<string>,\n valueSrc: InformationType<string>,\n flagsSrc: InformationType<string> = i(\"\"),\n ): InformationType<string[]> =>\n (o) => {\n all(\n patternSrc,\n valueSrc,\n flagsSrc,\n )(([pattern, value, flags]) => {\n const result = new RegExp(pattern, flags).exec(value);\n o(result ?? []);\n });\n };\n","import { all, InformationType } 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 const set = <T extends Record<string, unknown>>(\n baseSrc: InformationType<T>,\n keySrc: InformationType<string>,\n valueSrc: InformationType<unknown>,\n): InformationType<T> => {\n return (o) => {\n all(\n baseSrc,\n keySrc,\n valueSrc,\n )(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n o(base);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one && two);\n });\n };\n};\n","import { all, InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: InformationType<boolean>,\n twoSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n all(\n oneSrc,\n twoSrc,\n )(([one, two]) => {\n o(one || two);\n });\n };\n};\n","import { InformationType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (\n baseSrc: InformationType<boolean>,\n): InformationType<boolean> => {\n return (o) => {\n baseSrc((v) => {\n o(!v);\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Represents object from json\n */\nexport const fromJson = <T>(\n jsonSrc: InformationType<string>,\n errorOwner?: OwnerType,\n): InformationType<T> => {\n return (o) => {\n jsonSrc((json) => {\n try {\n o(JSON.parse(json));\n } catch (error) {\n errorOwner?.(new Error(`Failed to parse JSON: ${error}`));\n }\n });\n };\n};\n","import { InformationType, OwnerType } from \"silentium\";\n\n/**\n * Repreresents json from object\n */\nexport const toJson = (\n dataSrc: InformationType,\n errorOwner?: OwnerType,\n): InformationType<string> => {\n return (o) => {\n dataSrc((data) => {\n try {\n o(JSON.stringify(data));\n } catch {\n errorOwner?.(new Error(\"Failed to convert to JSON\"));\n }\n });\n };\n};\n","import { applied, InformationType } from \"silentium\";\n\n/**\n * Represents the first element of an array.\n */\nexport const first = <T extends Array<unknown>>(\n baseSrc: InformationType<T>,\n): InformationType<T[0]> => {\n return applied(baseSrc, (a) => a[0]);\n};\n"],"names":["comparing","record"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silentium-components",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/silentium-components.js",
@@ -60,6 +60,6 @@
60
60
  }
61
61
  },
62
62
  "dependencies": {
63
- "silentium": "^0.0.61"
63
+ "silentium": "^0.0.63"
64
64
  }
65
65
  }
package/src/index.ts CHANGED
@@ -5,3 +5,4 @@ export * from "./navigation";
5
5
  export * from "./system";
6
6
  export * from "./boolean";
7
7
  export * from "./formats";
8
+ export * from "./lists";
@@ -0,0 +1,10 @@
1
+ import { i } from "silentium";
2
+ import { expect, test, vi } from "vitest";
3
+ import { first } from "./First";
4
+
5
+ test("first", () => {
6
+ const f = first(i([1, 2, 3]));
7
+ const g = vi.fn();
8
+ f(g);
9
+ expect(g).toHaveBeenCalledWith(1);
10
+ });
@@ -0,0 +1,10 @@
1
+ import { applied, InformationType } from "silentium";
2
+
3
+ /**
4
+ * Represents the first element of an array.
5
+ */
6
+ export const first = <T extends Array<unknown>>(
7
+ baseSrc: InformationType<T>,
8
+ ): InformationType<T[0]> => {
9
+ return applied(baseSrc, (a) => a[0]);
10
+ };
@@ -0,0 +1 @@
1
+ export * from "./First";