silentium-components 0.0.13 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/commitizen.cjs +7 -7
  3. package/dist/silentium-components.cjs +135 -2
  4. package/dist/silentium-components.cjs.map +1 -1
  5. package/dist/silentium-components.d.ts +57 -2
  6. package/dist/silentium-components.js +127 -4
  7. package/dist/silentium-components.js.map +1 -1
  8. package/dist/silentium-components.min.js +1 -1
  9. package/dist/silentium-components.min.mjs +1 -1
  10. package/dist/silentium-components.min.mjs.map +1 -1
  11. package/dist/silentium-components.mjs +127 -4
  12. package/dist/silentium-components.mjs.map +1 -1
  13. package/package.json +1 -1
  14. package/src/behaviors/Branch.branchesDontAffectResult.test.ts +23 -0
  15. package/src/behaviors/Branch.test.ts +20 -0
  16. package/src/behaviors/Branch.ts +35 -0
  17. package/src/behaviors/Deferred.test.ts +28 -0
  18. package/src/behaviors/Deferred.ts +27 -0
  19. package/src/behaviors/Fork.ts +3 -2
  20. package/src/behaviors/Lock.test.ts +26 -0
  21. package/src/behaviors/Lock.ts +36 -0
  22. package/src/behaviors/Memo.test.ts +24 -0
  23. package/src/behaviors/Memo.ts +22 -0
  24. package/src/behaviors/Moment.test.ts +24 -0
  25. package/src/behaviors/Moment.ts +17 -0
  26. package/src/behaviors/Path.ts +7 -4
  27. package/src/behaviors/index.ts +5 -0
  28. package/src/boolean/And.test.ts +22 -0
  29. package/src/boolean/And.ts +16 -0
  30. package/src/boolean/Bool.ts +7 -0
  31. package/src/boolean/Not.test.ts +12 -0
  32. package/src/boolean/Not.ts +15 -0
  33. package/src/boolean/Or.test.ts +22 -0
  34. package/src/boolean/Or.ts +16 -0
  35. package/src/boolean/index.ts +3 -0
  36. package/src/index.ts +1 -0
  37. package/src/structures/Record.concatenated.test.ts +40 -0
  38. package/src/system/RegexpMatch._group.test.ts +11 -0
  39. package/src/system/RegexpMatch.test.ts +11 -0
  40. package/src/system/RegexpMatch.ts +19 -0
  41. package/src/system/Set.test.ts +22 -0
  42. package/src/system/Set.ts +20 -0
  43. package/src/system/index.ts +2 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,39 @@
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.17](https://github.com/silentium-lab/silentium-components/compare/v0.0.16...v0.0.17) (2025-05-19)
6
+
7
+ ### [0.0.16](https://github.com/silentium-lab/silentium-components/compare/v0.0.15...v0.0.16) (2025-05-19)
8
+
9
+
10
+ ### Features
11
+
12
+ * **36-issue:** lock component created ([4cb378b](https://github.com/silentium-lab/silentium-components/commit/4cb378b4ca9ae9a4f7d228a56e7ed04c36251466))
13
+ * **39-issue:** moment component created ([57f5be1](https://github.com/silentium-lab/silentium-components/commit/57f5be1e9ee7d1a1d90db1e80999097f4883a152))
14
+ * **main:** fix export of memo component ([0871eb7](https://github.com/silentium-lab/silentium-components/commit/0871eb7f444152feb561e59a4037241dfcab3f1a))
15
+
16
+ ### [0.0.15](https://github.com/silentium-lab/silentium-components/compare/v0.0.14...v0.0.15) (2025-05-17)
17
+
18
+
19
+ ### Features
20
+
21
+ * **30-issue:** done deferred component ([df72fa1](https://github.com/silentium-lab/silentium-components/commit/df72fa19c66e9d369eff95d6914a8dba721697c3))
22
+ * **32-issue:** branch component ([8f55bd5](https://github.com/silentium-lab/silentium-components/commit/8f55bd5def2726cce099e8824cf7faecc503f426))
23
+ * **34-issue:** memo component ([caea021](https://github.com/silentium-lab/silentium-components/commit/caea02105b7c9518bd0fcd39db4ab4cdd60de6fa))
24
+ * **main:** changes around branch and fork logic ([7291e6d](https://github.com/silentium-lab/silentium-components/commit/7291e6da91f484f1f1dc31544e6664d232f261c8))
25
+ * **main:** export set comopnent ([4a221d0](https://github.com/silentium-lab/silentium-components/commit/4a221d0c1090756ee3596dc1025f6e45c5f3da1b))
26
+
27
+ ### [0.0.14](https://github.com/silentium-lab/silentium-components/compare/v0.0.13...v0.0.14) (2025-05-12)
28
+
29
+
30
+ ### Features
31
+
32
+ * **28-issue:** set component created ([0b5d04c](https://github.com/silentium-lab/silentium-components/commit/0b5d04c52e5be844529baf51dc96bd037799351c))
33
+ * **main:** boolean export added ([278d8f2](https://github.com/silentium-lab/silentium-components/commit/278d8f2ecaee9fab81a8090b47fa5483b33fc204))
34
+ * **main:** not component done ([b53a434](https://github.com/silentium-lab/silentium-components/commit/b53a434171f8b6b0f4ab5d03e97c72edd8ae60c1))
35
+ * **main:** regexp match ([e4974be](https://github.com/silentium-lab/silentium-components/commit/e4974be38b29a14b85a0220527347ec1ddbf2ab8))
36
+ * **main:** work on or and and sources ([58d15d1](https://github.com/silentium-lab/silentium-components/commit/58d15d1236d74313c3fc128b2537125623d786c2))
37
+
5
38
  ### [0.0.13](https://github.com/silentium-lab/silentium-components/compare/v0.0.12...v0.0.13) (2025-05-09)
6
39
 
7
40
 
package/commitizen.cjs CHANGED
@@ -9,31 +9,31 @@ module.exports = {
9
9
  types: [
10
10
  {
11
11
  value: "feat",
12
- name: "feat: Добавление нового функционала",
12
+ name: "feat: Adding new functionality",
13
13
  },
14
14
  {
15
15
  value: "refactor",
16
- name: "refactor: Правки кода без исправления ошибок или добавления новых функций",
16
+ name: "refactor: Code edits without fixing bugs or adding new features",
17
17
  },
18
18
  {
19
19
  value: "fix",
20
- name: "fix: Исправление ошибок",
20
+ name: "fix: Bug fixes",
21
21
  },
22
22
  {
23
23
  value: "build",
24
- name: "build: Сборка проекта или изменения внешних зависимостей",
24
+ name: "build: Building a project or changing external dependencies",
25
25
  },
26
26
  {
27
27
  value: "docs",
28
- name: "docs: Обновление документации",
28
+ name: "docs: Documentation Update",
29
29
  },
30
30
  {
31
31
  value: "docs",
32
- name: "docs: Правки по документации проекта или отдельных частей проекта",
32
+ name: "docs: Edits to the project documentation or individual parts of the project",
33
33
  },
34
34
  {
35
35
  value: "test",
36
- name: "test: Добавление тестов",
36
+ name: "test: Adding tests",
37
37
  },
38
38
  ],
39
39
  scopes: [
@@ -170,10 +170,10 @@ const fork = (conditionSrc, predicate, thenSrc, elseSrc) => {
170
170
  silentium.removePatronFromPools(elsePatron);
171
171
  }
172
172
  if (predicate(v)) {
173
- thenPatron = silentium.patron(result);
173
+ thenPatron = silentium.patronOnce(result);
174
174
  silentium.value(thenSrc, thenPatron);
175
175
  } else if (elseSrc) {
176
- elsePatron = silentium.patron(result);
176
+ elsePatron = silentium.patronOnce(result);
177
177
  silentium.value(elseSrc, elsePatron);
178
178
  }
179
179
  })
@@ -181,6 +181,81 @@ const fork = (conditionSrc, predicate, thenSrc, elseSrc) => {
181
181
  return resultResettable;
182
182
  };
183
183
 
184
+ const deferred = (baseSrc, triggerSrc) => {
185
+ const result = silentium.sourceResettable(silentium.sourceOf(), baseSrc);
186
+ silentium.value(
187
+ triggerSrc,
188
+ silentium.patron(() => {
189
+ silentium.value(baseSrc, result);
190
+ })
191
+ );
192
+ return result.value;
193
+ };
194
+
195
+ const branch = (conditionSrc, thenSrc, elseSrc) => {
196
+ const result = silentium.sourceOf();
197
+ silentium.value(
198
+ conditionSrc,
199
+ silentium.patron((v) => {
200
+ if (v === true) {
201
+ silentium.value(
202
+ thenSrc,
203
+ silentium.patronOnce((v2) => {
204
+ result.give(v2);
205
+ })
206
+ );
207
+ } else if (elseSrc !== void 0) {
208
+ silentium.value(
209
+ elseSrc,
210
+ silentium.patronOnce((v2) => {
211
+ result.give(v2);
212
+ })
213
+ );
214
+ }
215
+ })
216
+ );
217
+ return result.value;
218
+ };
219
+
220
+ const memo = (baseSrc) => {
221
+ const result = silentium.sourceOf();
222
+ let lastValue = null;
223
+ silentium.value(
224
+ baseSrc,
225
+ silentium.patron((v) => {
226
+ if (v !== lastValue) {
227
+ result.give(v);
228
+ lastValue = v;
229
+ }
230
+ })
231
+ );
232
+ return result.value;
233
+ };
234
+
235
+ const lock = (baseSrc, lockSrc) => {
236
+ const result = silentium.sourceOf();
237
+ const resultResettable = silentium.sourceResettable(result, lockSrc);
238
+ let locked = false;
239
+ silentium.subSource(result, baseSrc);
240
+ silentium.value(baseSrc, silentium.patron(silentium.guestDisposable(result.give, () => locked)));
241
+ silentium.value(
242
+ lockSrc,
243
+ silentium.patronOnce(() => {
244
+ locked = true;
245
+ silentium.destroy([result]);
246
+ })
247
+ );
248
+ return resultResettable.value;
249
+ };
250
+
251
+ const moment = (baseSrc, defaultValue) => {
252
+ const guest = silentium.guestSync(defaultValue);
253
+ silentium.value(baseSrc, guest);
254
+ return (g) => {
255
+ silentium.give(guest.value(), g);
256
+ };
257
+ };
258
+
184
259
  const hashTable = (baseSource) => {
185
260
  const result = silentium.sourceOf({});
186
261
  silentium.subSource(result, baseSource);
@@ -260,17 +335,75 @@ const regexpReplaced = (valueSrc, patternSrc, replaceValueSrc, flagsSrc = "") =>
260
335
  silentium.give(String(value).replace(new RegExp(pattern, flags), replaceValue), g);
261
336
  });
262
337
 
338
+ const regexpMatch = (patternSrc, valueSrc, flagsSrc = "") => silentium.sourceCombined(
339
+ patternSrc,
340
+ valueSrc,
341
+ flagsSrc
342
+ )((g, pattern, value, flags) => {
343
+ const result = new RegExp(pattern, flags).exec(value);
344
+ silentium.give(result ?? [], g);
345
+ });
346
+
347
+ const set = (baseSrc, keySrc, valueSrc) => {
348
+ silentium.value(
349
+ silentium.sourceAll([baseSrc, keySrc, valueSrc]),
350
+ silentium.patron(([base, key, value2]) => {
351
+ base[key] = value2;
352
+ })
353
+ );
354
+ return baseSrc;
355
+ };
356
+
357
+ const and = (oneSrc, twoSrc) => {
358
+ return silentium.sourceCombined(
359
+ oneSrc,
360
+ twoSrc
361
+ )((guest, one, two) => {
362
+ silentium.give(one && two, guest);
363
+ });
364
+ };
365
+
366
+ const or = (oneSrc, twoSrc) => {
367
+ return silentium.sourceCombined(
368
+ oneSrc,
369
+ twoSrc
370
+ )((guest, one, two) => {
371
+ silentium.give(one || two, guest);
372
+ });
373
+ };
374
+
375
+ const not = (baseSrc) => {
376
+ return (g) => {
377
+ silentium.value(
378
+ baseSrc,
379
+ silentium.guestCast(g, (base) => {
380
+ silentium.give(!base, g);
381
+ })
382
+ );
383
+ };
384
+ };
385
+
386
+ exports.and = and;
387
+ exports.branch = branch;
263
388
  exports.concatenated = concatenated;
264
389
  exports.deadline = deadline;
390
+ exports.deferred = deferred;
265
391
  exports.dirty = dirty;
266
392
  exports.fork = fork;
267
393
  exports.groupActiveClass = groupActiveClass;
268
394
  exports.hashTable = hashTable;
269
395
  exports.loading = loading;
396
+ exports.lock = lock;
397
+ exports.memo = memo;
398
+ exports.moment = moment;
399
+ exports.not = not;
400
+ exports.or = or;
270
401
  exports.path = path;
271
402
  exports.record = record;
403
+ exports.regexpMatch = regexpMatch;
272
404
  exports.regexpMatched = regexpMatched;
273
405
  exports.regexpReplaced = regexpReplaced;
274
406
  exports.router = router;
407
+ exports.set = set;
275
408
  exports.tick = tick;
276
409
  //# sourceMappingURL=silentium-components.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.cjs","sources":["../src/controls/GroupActiveClass.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Fork.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"],"sourcesContent":["import { patron, sourceAll, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n */\nexport const groupActiveClass = (\n activeClassSrc: SourceType<string>,\n activeElementSrc: SourceType<HTMLElement>,\n groupElementsSrc: SourceType<HTMLElement[]>,\n) => {\n value(\n sourceAll([activeClassSrc, activeElementSrc, groupElementsSrc]),\n patron(([activeClass, activeElement, groupElements]) => {\n groupElements.forEach((el) => {\n if (el.classList) {\n el.classList.remove(activeClass);\n }\n });\n activeElement.classList.add(activeClass);\n }),\n );\n\n return groupElementsSrc;\n};\n","import {\n give,\n guestCast,\n GuestType,\n patronOnce,\n sourceAll,\n SourceChangeableType,\n sourceOf,\n SourceType,\n value,\n} 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: SourceType<T>,\n becomePatronAuto = false,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n): SourceChangeableType<Partial<T>> => {\n const comparingSrc = sourceOf();\n const all = sourceAll([comparingSrc, baseEntitySource]);\n\n const result = {\n give(value: T) {\n give(JSON.parse(JSON.stringify(value)), comparingSrc);\n return result;\n },\n value(guest: GuestType<Partial<T>>) {\n value(\n all,\n guestCast(guest, ([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n give(\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 guest,\n );\n }),\n );\n return result;\n },\n };\n\n if (becomePatronAuto) {\n value(baseEntitySource, patronOnce(result));\n }\n\n return result;\n};\n","import { patron, sourceOf, SourceType, subSourceMany, value } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: SourceType<unknown>,\n loadingFinishSource: SourceType<unknown>,\n) => {\n const loadingSrc = sourceOf<boolean>();\n subSourceMany(loadingSrc, [loadingStartSource, loadingFinishSource]);\n\n value(\n loadingStartSource,\n patron(() => {\n loadingSrc.give(true);\n }),\n );\n value(\n loadingFinishSource,\n patron(() => {\n loadingSrc.give(false);\n }),\n );\n\n return loadingSrc.value;\n};\n","import {\n give,\n patron,\n sourceAll,\n sourceOf,\n SourceType,\n subSourceMany,\n value,\n} from \"silentium\";\n\n/**\n * Return source of record path\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const path = <T extends Record<string, unknown>, K extends string>(\n baseSrc: SourceType<T>,\n keySrc: SourceType<K>,\n) => {\n const pathSrc = sourceOf<T[K]>();\n subSourceMany(pathSrc, [baseSrc, keySrc]);\n\n value(\n sourceAll([baseSrc, keySrc]),\n patron(([base, key]) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as T)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n give(value as T[K], pathSrc);\n }\n }),\n );\n\n return pathSrc.value;\n};\n","import {\n give,\n guestCast,\n GuestType,\n patronOnce,\n sourceFiltered,\n SourceType,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: GuestType<Error>,\n baseSrc: SourceType<T>,\n timeoutSrc: SourceType<number>,\n) => {\n let timerHead: unknown = null;\n return (g: GuestType<T>) => {\n value(\n timeoutSrc,\n guestCast(g, (timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n give(new Error(\"Timeout reached in Deadline class\"), error);\n }, timeout);\n\n value(\n sourceFiltered(baseSrc, () => !timeoutReached),\n g,\n );\n\n value(\n baseSrc,\n patronOnce(() => {\n timeoutReached = true;\n }),\n );\n }),\n );\n };\n};\n","import {\n give,\n patron,\n sourceOf,\n SourceType,\n subSource,\n value,\n} 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: SourceType<T>) => {\n const result = sourceOf<T>();\n subSource(result, baseSrc);\n\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 give(lastValue, result);\n lastValue = null;\n }\n });\n };\n\n value(\n baseSrc,\n patron((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n }),\n );\n\n return result;\n};\n","import {\n sourceOf,\n SourceType,\n sourceResettable,\n value,\n patron,\n removePatronFromPools,\n GuestObjectType,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/dirty\n */\nexport const fork = <T, Then, Else>(\n conditionSrc: SourceType<T>,\n predicate: (v: T) => boolean,\n thenSrc: SourceType<Then>,\n elseSrc?: SourceType<Else>,\n): SourceType<Then | Else> => {\n const result = sourceOf<Then | Else>();\n const reset = sourceOf();\n const resultResettable = sourceResettable(result, reset);\n let thenPatron: GuestObjectType<Then> | undefined;\n let elsePatron: GuestObjectType<Else> | undefined;\n\n value(\n conditionSrc,\n patron((v) => {\n reset.give(1);\n if (thenPatron) {\n removePatronFromPools(thenPatron);\n }\n if (elsePatron) {\n removePatronFromPools(elsePatron);\n }\n if (predicate(v)) {\n thenPatron = patron(result);\n value(thenSrc, thenPatron);\n } else if (elseSrc) {\n elsePatron = patron(result);\n value(elseSrc, elsePatron);\n }\n }),\n );\n\n return resultResettable;\n};\n","import { patron, sourceOf, SourceType, subSource, value } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = (baseSource: SourceType<[string, unknown]>) => {\n const result = sourceOf<Record<string, unknown>>({});\n subSource(result, baseSource);\n\n value(\n baseSource,\n patron(([key, value]) => {\n result.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n\n return result.value;\n};\n","import { give, GuestType, sourceCombined, SourceType } from \"silentium\";\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 = (recordSrc: Record<string, SourceType>) => {\n const keys = Object.keys(recordSrc);\n return sourceCombined(...Object.values(recordSrc))(\n (g: GuestType<Record<string, any>>, ...entries: any[]) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n give(record, g);\n },\n );\n};\n","import { give, GuestType, sourceCombined, SourceType } 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: SourceType<string>[],\n joinPartSrc: SourceType<string> = \"\",\n): SourceType<string> => {\n const result = sourceCombined(\n joinPartSrc,\n ...sources,\n )((g: GuestType<string>, joinPart, ...strings) => {\n give(strings.join(joinPart), g);\n });\n\n return result;\n};\n","import { give, GuestType, sourceCombined, SourceType } 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 patternSrc: SourceType<string>,\n valueSrc: SourceType<string>,\n flagsSrc: SourceType<string> = \"\",\n): SourceType<boolean> =>\n sourceCombined(\n patternSrc,\n valueSrc,\n flagsSrc,\n )((g: GuestType<boolean>, pattern, value, flags) => {\n give(new RegExp(pattern, flags).test(value), g);\n });\n","import {\n patron,\n sourceAny,\n sourceChain,\n sourceFiltered,\n sourceOf,\n SourceType,\n value,\n} from \"silentium\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | SourceType<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: SourceType<string>,\n routesSrc: SourceType<Route<T>[]>,\n defaultSrc: SourceType<T>,\n) => {\n const resultSrc = sourceOf<T>();\n\n value(\n routesSrc,\n patron((routes) => {\n value(\n sourceAny([\n sourceChain(urlSrc, defaultSrc as T),\n ...routes.map((r) =>\n sourceChain(\n sourceFiltered(\n regexpMatched(r.pattern, urlSrc, r.patternFlags),\n Boolean,\n ),\n r.template,\n ),\n ),\n ]),\n patron(resultSrc),\n );\n }),\n );\n\n return resultSrc.value;\n};\n","import { give, GuestType, sourceCombined, SourceType } 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 valueSrc: SourceType<string>,\n patternSrc: SourceType<string>,\n replaceValueSrc: SourceType<string>,\n flagsSrc: SourceType<string> = \"\",\n): SourceType<string> =>\n sourceCombined(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )((g: GuestType<string>, pattern, value, replaceValue, flags) => {\n give(String(value).replace(new RegExp(pattern, flags), replaceValue), g);\n });\n"],"names":["value","sourceAll","patron","sourceOf","give","guestCast","patronOnce","subSourceMany","sourceFiltered","subSource","sourceResettable","removePatronFromPools","sourceCombined","record","sourceAny","sourceChain"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.cjs","sources":["../src/controls/GroupActiveClass.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Path.ts","../src/behaviors/Deadline.ts","../src/behaviors/Tick.ts","../src/behaviors/Fork.ts","../src/behaviors/Deferred.ts","../src/behaviors/Branch.ts","../src/behaviors/Memo.ts","../src/behaviors/Lock.ts","../src/behaviors/Moment.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"],"sourcesContent":["import { patron, sourceAll, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n */\nexport const groupActiveClass = (\n activeClassSrc: SourceType<string>,\n activeElementSrc: SourceType<HTMLElement>,\n groupElementsSrc: SourceType<HTMLElement[]>,\n) => {\n value(\n sourceAll([activeClassSrc, activeElementSrc, groupElementsSrc]),\n patron(([activeClass, activeElement, groupElements]) => {\n groupElements.forEach((el) => {\n if (el.classList) {\n el.classList.remove(activeClass);\n }\n });\n activeElement.classList.add(activeClass);\n }),\n );\n\n return groupElementsSrc;\n};\n","import {\n give,\n guestCast,\n GuestType,\n patronOnce,\n sourceAll,\n SourceChangeableType,\n sourceOf,\n SourceType,\n value,\n} 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: SourceType<T>,\n becomePatronAuto = false,\n alwaysKeep: string[] = [],\n excludeKeys: string[] = [],\n): SourceChangeableType<Partial<T>> => {\n const comparingSrc = sourceOf();\n const all = sourceAll([comparingSrc, baseEntitySource]);\n\n const result = {\n give(value: T) {\n give(JSON.parse(JSON.stringify(value)), comparingSrc);\n return result;\n },\n value(guest: GuestType<Partial<T>>) {\n value(\n all,\n guestCast(guest, ([comparing, base]) => {\n if (!comparing) {\n return;\n }\n\n give(\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 guest,\n );\n }),\n );\n return result;\n },\n };\n\n if (becomePatronAuto) {\n value(baseEntitySource, patronOnce(result));\n }\n\n return result;\n};\n","import { patron, sourceOf, SourceType, subSourceMany, value } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport const loading = (\n loadingStartSource: SourceType<unknown>,\n loadingFinishSource: SourceType<unknown>,\n) => {\n const loadingSrc = sourceOf<boolean>();\n subSourceMany(loadingSrc, [loadingStartSource, loadingFinishSource]);\n\n value(\n loadingStartSource,\n patron(() => {\n loadingSrc.give(true);\n }),\n );\n value(\n loadingFinishSource,\n patron(() => {\n loadingSrc.give(false);\n }),\n );\n\n return loadingSrc.value;\n};\n","import {\n give,\n patron,\n sourceAll,\n sourceOf,\n SourceType,\n subSourceMany,\n value,\n} 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 T extends Record<string, unknown> | Array<unknown>,\n K extends string,\n>(\n baseSrc: SourceType<T>,\n keySrc: SourceType<K>,\n) => {\n const pathSrc = sourceOf<unknown>();\n subSourceMany(pathSrc, [baseSrc, keySrc]);\n\n value(\n sourceAll([baseSrc, keySrc]),\n patron(([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 give(value, pathSrc);\n }\n }),\n );\n\n return pathSrc.value;\n};\n","import {\n give,\n guestCast,\n GuestType,\n patronOnce,\n sourceFiltered,\n SourceType,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/path\n */\nexport const deadline = <T>(\n error: GuestType<Error>,\n baseSrc: SourceType<T>,\n timeoutSrc: SourceType<number>,\n) => {\n let timerHead: unknown = null;\n return (g: GuestType<T>) => {\n value(\n timeoutSrc,\n guestCast(g, (timeout) => {\n if (timerHead) {\n clearTimeout(timerHead as number);\n }\n\n let timeoutReached = false;\n\n timerHead = setTimeout(() => {\n if (timeoutReached) {\n return;\n }\n timeoutReached = true;\n give(new Error(\"Timeout reached in Deadline class\"), error);\n }, timeout);\n\n value(\n sourceFiltered(baseSrc, () => !timeoutReached),\n g,\n );\n\n value(\n baseSrc,\n patronOnce(() => {\n timeoutReached = true;\n }),\n );\n }),\n );\n };\n};\n","import {\n give,\n patron,\n sourceOf,\n SourceType,\n subSource,\n value,\n} 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: SourceType<T>) => {\n const result = sourceOf<T>();\n subSource(result, baseSrc);\n\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 give(lastValue, result);\n lastValue = null;\n }\n });\n };\n\n value(\n baseSrc,\n patron((v) => {\n lastValue = v;\n if (!microtaskScheduled) {\n scheduleMicrotask();\n }\n }),\n );\n\n return result;\n};\n","import {\n sourceOf,\n SourceType,\n sourceResettable,\n value,\n patron,\n removePatronFromPools,\n GuestObjectType,\n patronOnce,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/dirty\n */\nexport const fork = <T, Then, Else>(\n conditionSrc: SourceType<T>,\n predicate: (v: T) => boolean,\n thenSrc: SourceType<Then>,\n elseSrc?: SourceType<Else>,\n): SourceType<Then | Else> => {\n const result = sourceOf<Then | Else>();\n const reset = sourceOf();\n const resultResettable = sourceResettable(result, reset);\n let thenPatron: GuestObjectType<Then> | undefined;\n let elsePatron: GuestObjectType<Else> | undefined;\n\n value(\n conditionSrc,\n patron((v) => {\n reset.give(1);\n if (thenPatron) {\n removePatronFromPools(thenPatron);\n }\n if (elsePatron) {\n removePatronFromPools(elsePatron);\n }\n if (predicate(v)) {\n thenPatron = patronOnce(result);\n value(thenSrc, thenPatron);\n } else if (elseSrc) {\n elsePatron = patronOnce(result);\n value(elseSrc, elsePatron);\n }\n }),\n );\n\n return resultResettable;\n};\n","import {\n patron,\n sourceOf,\n sourceResettable,\n SourceType,\n value,\n} from \"silentium\";\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: SourceType<T>,\n triggerSrc: SourceType<unknown>,\n) => {\n const result = sourceResettable<T>(sourceOf(), baseSrc as SourceType);\n\n value(\n triggerSrc,\n patron(() => {\n value(baseSrc, result);\n }),\n );\n\n return result.value;\n};\n","import { patron, patronOnce, sourceOf, SourceType, value } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/branch\n */\nexport const branch = <Then, Else>(\n conditionSrc: SourceType<boolean>,\n thenSrc: SourceType<Then>,\n elseSrc?: SourceType<Else>,\n): SourceType<Then | Else> => {\n const result = sourceOf<Then | Else>();\n\n value(\n conditionSrc,\n patron((v) => {\n if (v === true) {\n value(\n thenSrc,\n patronOnce((v) => {\n result.give(v);\n }),\n );\n } else if (elseSrc !== undefined) {\n value(\n elseSrc,\n patronOnce((v) => {\n result.give(v);\n }),\n );\n }\n }),\n );\n\n return result.value;\n};\n","import { patron, sourceOf, SourceType, value } 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: SourceType<T>) => {\n const result = sourceOf<T>();\n let lastValue: T | null = null;\n\n value(\n baseSrc,\n patron((v) => {\n if (v !== lastValue) {\n result.give(v);\n lastValue = v;\n }\n }),\n );\n\n return result.value;\n};\n","import {\n destroy,\n guestDisposable,\n patron,\n patronOnce,\n sourceOf,\n sourceResettable,\n SourceType,\n subSource,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/lock\n */\nexport const lock = <T>(\n baseSrc: SourceType<T>,\n lockSrc: SourceType<unknown>,\n) => {\n const result = sourceOf();\n const resultResettable = sourceResettable(result, lockSrc);\n let locked = false;\n subSource(result, baseSrc);\n\n value(baseSrc, patron(guestDisposable(result.give, () => locked)));\n\n value(\n lockSrc,\n patronOnce(() => {\n locked = true;\n destroy([result]);\n }),\n );\n\n return resultResettable.value;\n};\n","import { give, guestSync, GuestType, SourceType, value } from \"silentium\";\n\n/**\n * Get's value from source in moment of component call and than return this value every time\n * https://silentium-lab.github.io/silentium-components/#/behaviors/moment\n */\nexport const moment = <T>(\n baseSrc: SourceType<T>,\n defaultValue?: T,\n): SourceType<T> => {\n const guest = guestSync(defaultValue);\n value(baseSrc, guest);\n\n return (g: GuestType<T>) => {\n give(guest.value(), g);\n };\n};\n","import { patron, sourceOf, SourceType, subSource, value } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport const hashTable = (baseSource: SourceType<[string, unknown]>) => {\n const result = sourceOf<Record<string, unknown>>({});\n subSource(result, baseSource);\n\n value(\n baseSource,\n patron(([key, value]) => {\n result.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n\n return result.value;\n};\n","import { give, GuestType, sourceCombined, SourceType } from \"silentium\";\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 = (recordSrc: Record<string, SourceType>) => {\n const keys = Object.keys(recordSrc);\n return sourceCombined(...Object.values(recordSrc))(\n (g: GuestType<Record<string, any>>, ...entries: any[]) => {\n const record: Record<string, any> = {};\n entries.forEach((entry, index) => {\n record[keys[index]] = entry;\n });\n give(record, g);\n },\n );\n};\n","import { give, GuestType, sourceCombined, SourceType } 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: SourceType<string>[],\n joinPartSrc: SourceType<string> = \"\",\n): SourceType<string> => {\n const result = sourceCombined(\n joinPartSrc,\n ...sources,\n )((g: GuestType<string>, joinPart, ...strings) => {\n give(strings.join(joinPart), g);\n });\n\n return result;\n};\n","import { give, GuestType, sourceCombined, SourceType } 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 patternSrc: SourceType<string>,\n valueSrc: SourceType<string>,\n flagsSrc: SourceType<string> = \"\",\n): SourceType<boolean> =>\n sourceCombined(\n patternSrc,\n valueSrc,\n flagsSrc,\n )((g: GuestType<boolean>, pattern, value, flags) => {\n give(new RegExp(pattern, flags).test(value), g);\n });\n","import {\n patron,\n sourceAny,\n sourceChain,\n sourceFiltered,\n sourceOf,\n SourceType,\n value,\n} from \"silentium\";\nimport { regexpMatched } from \"../system/RegexpMatched\";\n\nexport interface Route<T> {\n pattern: string;\n patternFlags?: string;\n template: T | SourceType<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: SourceType<string>,\n routesSrc: SourceType<Route<T>[]>,\n defaultSrc: SourceType<T>,\n) => {\n const resultSrc = sourceOf<T>();\n\n value(\n routesSrc,\n patron((routes) => {\n value(\n sourceAny([\n sourceChain(urlSrc, defaultSrc as T),\n ...routes.map((r) =>\n sourceChain(\n sourceFiltered(\n regexpMatched(r.pattern, urlSrc, r.patternFlags),\n Boolean,\n ),\n r.template,\n ),\n ),\n ]),\n patron(resultSrc),\n );\n }),\n );\n\n return resultSrc.value;\n};\n","import { give, GuestType, sourceCombined, SourceType } 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 valueSrc: SourceType<string>,\n patternSrc: SourceType<string>,\n replaceValueSrc: SourceType<string>,\n flagsSrc: SourceType<string> = \"\",\n): SourceType<string> =>\n sourceCombined(\n patternSrc,\n valueSrc,\n replaceValueSrc,\n flagsSrc,\n )((g: GuestType<string>, pattern, value, replaceValue, flags) => {\n give(String(value).replace(new RegExp(pattern, flags), replaceValue), g);\n });\n","import { give, GuestType, sourceCombined, SourceType } 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 patternSrc: SourceType<string>,\n valueSrc: SourceType<string>,\n flagsSrc: SourceType<string> = \"\",\n): SourceType<string[]> =>\n sourceCombined(\n patternSrc,\n valueSrc,\n flagsSrc,\n )((g: GuestType<string[]>, pattern, value, flags) => {\n const result = new RegExp(pattern, flags).exec(value);\n give(result ?? [], g);\n });\n","import { patron, sourceAll, SourceType, value } 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: SourceType<T>,\n keySrc: SourceType<string>,\n valueSrc: SourceType<unknown>,\n) => {\n value(\n sourceAll([baseSrc, keySrc, valueSrc]),\n patron(([base, key, value]) => {\n (base as Record<string, unknown>)[key] = value;\n }),\n );\n\n return baseSrc;\n};\n","import { give, GuestType, sourceCombined, SourceType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/and\n */\nexport const and = (\n oneSrc: SourceType<boolean>,\n twoSrc: SourceType<boolean>,\n) => {\n return sourceCombined(\n oneSrc,\n twoSrc,\n )((guest: GuestType<boolean>, one, two) => {\n give(one && two, guest);\n });\n};\n","import { give, GuestType, sourceCombined, SourceType } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/or\n */\nexport const or = (\n oneSrc: SourceType<boolean>,\n twoSrc: SourceType<boolean>,\n) => {\n return sourceCombined(\n oneSrc,\n twoSrc,\n )((guest: GuestType<boolean>, one, two) => {\n give(one || two, guest);\n });\n};\n","import { give, guestCast, GuestType, SourceType, value } from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/boolean/not\n */\nexport const not = (baseSrc: SourceType<boolean>) => {\n return (g: GuestType<boolean>) => {\n value(\n baseSrc,\n guestCast(g, (base) => {\n give(!base, g);\n }),\n );\n };\n};\n"],"names":["value","sourceAll","patron","sourceOf","give","guestCast","patronOnce","subSourceMany","sourceFiltered","subSource","sourceResettable","removePatronFromPools","v","guestDisposable","destroy","guestSync","sourceCombined","record","sourceAny","sourceChain"],"mappings":"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"}
@@ -24,7 +24,7 @@ declare const loading: (loadingStartSource: SourceType<unknown>, loadingFinishSo
24
24
  * Return source of record path
25
25
  * https://silentium-lab.github.io/silentium-components/#/behaviors/path
26
26
  */
27
- declare const path: <T extends Record<string, unknown>, K extends string>(baseSrc: SourceType<T>, keySrc: SourceType<K>) => silentium.SourceExecutorType<T[K]>;
27
+ declare const path: <T extends Record<string, unknown> | Array<unknown>, K extends string>(baseSrc: SourceType<T>, keySrc: SourceType<K>) => silentium.SourceExecutorType<unknown>;
28
28
 
29
29
  /**
30
30
  * https://silentium-lab.github.io/silentium-components/#/behaviors/path
@@ -42,6 +42,34 @@ declare const tick: <T>(baseSrc: SourceType<T>) => silentium.SourceChangeableTyp
42
42
  */
43
43
  declare const fork: <T, Then, Else>(conditionSrc: SourceType<T>, predicate: (v: T) => boolean, thenSrc: SourceType<Then>, elseSrc?: SourceType<Else>) => SourceType<Then | Else>;
44
44
 
45
+ /**
46
+ * Defer one source after another, gives values of baseSrc only once when triggerSrc responds
47
+ * https://silentium-lab.github.io/silentium-components/#/behaviors/deferred
48
+ */
49
+ declare const deferred: <T>(baseSrc: SourceType<T>, triggerSrc: SourceType<unknown>) => silentium.SourceExecutorType<T>;
50
+
51
+ /**
52
+ * https://silentium-lab.github.io/silentium-components/#/behaviors/branch
53
+ */
54
+ declare const branch: <Then, Else>(conditionSrc: SourceType<boolean>, thenSrc: SourceType<Then>, elseSrc?: SourceType<Else>) => SourceType<Then | Else>;
55
+
56
+ /**
57
+ * Didn't respond if new value of baseSrc equals to old value
58
+ * https://silentium-lab.github.io/silentium-components/#/behaviors/memo
59
+ */
60
+ declare const memo: <T>(baseSrc: SourceType<T>) => silentium.SourceExecutorType<T>;
61
+
62
+ /**
63
+ * https://silentium-lab.github.io/silentium-components/#/behaviors/lock
64
+ */
65
+ declare const lock: <T>(baseSrc: SourceType<T>, lockSrc: SourceType<unknown>) => silentium.SourceExecutorType<unknown>;
66
+
67
+ /**
68
+ * Get's value from source in moment of component call and than return this value every time
69
+ * https://silentium-lab.github.io/silentium-components/#/behaviors/moment
70
+ */
71
+ declare const moment: <T>(baseSrc: SourceType<T>, defaultValue?: T) => SourceType<T>;
72
+
45
73
  /**
46
74
  * https://silentium-lab.github.io/silentium-components/#/structures/hash-table
47
75
  */
@@ -82,5 +110,32 @@ declare const regexpMatched: (patternSrc: SourceType<string>, valueSrc: SourceTy
82
110
  */
83
111
  declare const regexpReplaced: (valueSrc: SourceType<string>, patternSrc: SourceType<string>, replaceValueSrc: SourceType<string>, flagsSrc?: SourceType<string>) => SourceType<string>;
84
112
 
85
- export { concatenated, deadline, dirty, fork, groupActiveClass, hashTable, loading, path, record, regexpMatched, regexpReplaced, router, tick };
113
+ /**
114
+ * First match of regexp
115
+ * https://silentium-lab.github.io/silentium-components/#/system/regexp-matched
116
+ */
117
+ declare const regexpMatch: (patternSrc: SourceType<string>, valueSrc: SourceType<string>, flagsSrc?: SourceType<string>) => SourceType<string[]>;
118
+
119
+ /**
120
+ * Ability to mutate some object, helpful when integrate to procedure systems
121
+ * https://silentium-lab.github.io/silentium-components/#/system/set
122
+ */
123
+ declare const set: <T extends Record<string, unknown>>(baseSrc: SourceType<T>, keySrc: SourceType<string>, valueSrc: SourceType<unknown>) => SourceType<T>;
124
+
125
+ /**
126
+ * https://silentium-lab.github.io/silentium-components/#/boolean/and
127
+ */
128
+ declare const and: (oneSrc: SourceType<boolean>, twoSrc: SourceType<boolean>) => SourceType<boolean>;
129
+
130
+ /**
131
+ * https://silentium-lab.github.io/silentium-components/#/boolean/or
132
+ */
133
+ declare const or: (oneSrc: SourceType<boolean>, twoSrc: SourceType<boolean>) => SourceType<boolean>;
134
+
135
+ /**
136
+ * https://silentium-lab.github.io/silentium-components/#/boolean/not
137
+ */
138
+ declare const not: (baseSrc: SourceType<boolean>) => (g: GuestType<boolean>) => void;
139
+
140
+ export { and, branch, concatenated, deadline, deferred, dirty, fork, groupActiveClass, hashTable, loading, lock, memo, moment, not, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, tick };
86
141
  export type { Route };
@@ -1,4 +1,4 @@
1
- import { value, sourceAll, patron, sourceOf, patronOnce, guestCast, give, subSourceMany, sourceFiltered, subSource, sourceResettable, removePatronFromPools, sourceCombined, sourceAny, sourceChain } from 'silentium';
1
+ import { value, sourceAll, patron, sourceOf, patronOnce, guestCast, give, subSourceMany, sourceFiltered, subSource, sourceResettable, removePatronFromPools, guestDisposable, destroy, guestSync, sourceCombined, sourceAny, sourceChain } from 'silentium';
2
2
 
3
3
  const groupActiveClass = (activeClassSrc, activeElementSrc, groupElementsSrc) => {
4
4
  value(
@@ -168,10 +168,10 @@ const fork = (conditionSrc, predicate, thenSrc, elseSrc) => {
168
168
  removePatronFromPools(elsePatron);
169
169
  }
170
170
  if (predicate(v)) {
171
- thenPatron = patron(result);
171
+ thenPatron = patronOnce(result);
172
172
  value(thenSrc, thenPatron);
173
173
  } else if (elseSrc) {
174
- elsePatron = patron(result);
174
+ elsePatron = patronOnce(result);
175
175
  value(elseSrc, elsePatron);
176
176
  }
177
177
  })
@@ -179,6 +179,81 @@ const fork = (conditionSrc, predicate, thenSrc, elseSrc) => {
179
179
  return resultResettable;
180
180
  };
181
181
 
182
+ const deferred = (baseSrc, triggerSrc) => {
183
+ const result = sourceResettable(sourceOf(), baseSrc);
184
+ value(
185
+ triggerSrc,
186
+ patron(() => {
187
+ value(baseSrc, result);
188
+ })
189
+ );
190
+ return result.value;
191
+ };
192
+
193
+ const branch = (conditionSrc, thenSrc, elseSrc) => {
194
+ const result = sourceOf();
195
+ value(
196
+ conditionSrc,
197
+ patron((v) => {
198
+ if (v === true) {
199
+ value(
200
+ thenSrc,
201
+ patronOnce((v2) => {
202
+ result.give(v2);
203
+ })
204
+ );
205
+ } else if (elseSrc !== void 0) {
206
+ value(
207
+ elseSrc,
208
+ patronOnce((v2) => {
209
+ result.give(v2);
210
+ })
211
+ );
212
+ }
213
+ })
214
+ );
215
+ return result.value;
216
+ };
217
+
218
+ const memo = (baseSrc) => {
219
+ const result = sourceOf();
220
+ let lastValue = null;
221
+ value(
222
+ baseSrc,
223
+ patron((v) => {
224
+ if (v !== lastValue) {
225
+ result.give(v);
226
+ lastValue = v;
227
+ }
228
+ })
229
+ );
230
+ return result.value;
231
+ };
232
+
233
+ const lock = (baseSrc, lockSrc) => {
234
+ const result = sourceOf();
235
+ const resultResettable = sourceResettable(result, lockSrc);
236
+ let locked = false;
237
+ subSource(result, baseSrc);
238
+ value(baseSrc, patron(guestDisposable(result.give, () => locked)));
239
+ value(
240
+ lockSrc,
241
+ patronOnce(() => {
242
+ locked = true;
243
+ destroy([result]);
244
+ })
245
+ );
246
+ return resultResettable.value;
247
+ };
248
+
249
+ const moment = (baseSrc, defaultValue) => {
250
+ const guest = guestSync(defaultValue);
251
+ value(baseSrc, guest);
252
+ return (g) => {
253
+ give(guest.value(), g);
254
+ };
255
+ };
256
+
182
257
  const hashTable = (baseSource) => {
183
258
  const result = sourceOf({});
184
259
  subSource(result, baseSource);
@@ -258,5 +333,53 @@ const regexpReplaced = (valueSrc, patternSrc, replaceValueSrc, flagsSrc = "") =>
258
333
  give(String(value).replace(new RegExp(pattern, flags), replaceValue), g);
259
334
  });
260
335
 
261
- export { concatenated, deadline, dirty, fork, groupActiveClass, hashTable, loading, path, record, regexpMatched, regexpReplaced, router, tick };
336
+ const regexpMatch = (patternSrc, valueSrc, flagsSrc = "") => sourceCombined(
337
+ patternSrc,
338
+ valueSrc,
339
+ flagsSrc
340
+ )((g, pattern, value, flags) => {
341
+ const result = new RegExp(pattern, flags).exec(value);
342
+ give(result ?? [], g);
343
+ });
344
+
345
+ const set = (baseSrc, keySrc, valueSrc) => {
346
+ value(
347
+ sourceAll([baseSrc, keySrc, valueSrc]),
348
+ patron(([base, key, value2]) => {
349
+ base[key] = value2;
350
+ })
351
+ );
352
+ return baseSrc;
353
+ };
354
+
355
+ const and = (oneSrc, twoSrc) => {
356
+ return sourceCombined(
357
+ oneSrc,
358
+ twoSrc
359
+ )((guest, one, two) => {
360
+ give(one && two, guest);
361
+ });
362
+ };
363
+
364
+ const or = (oneSrc, twoSrc) => {
365
+ return sourceCombined(
366
+ oneSrc,
367
+ twoSrc
368
+ )((guest, one, two) => {
369
+ give(one || two, guest);
370
+ });
371
+ };
372
+
373
+ const not = (baseSrc) => {
374
+ return (g) => {
375
+ value(
376
+ baseSrc,
377
+ guestCast(g, (base) => {
378
+ give(!base, g);
379
+ })
380
+ );
381
+ };
382
+ };
383
+
384
+ export { and, branch, concatenated, deadline, deferred, dirty, fork, groupActiveClass, hashTable, loading, lock, memo, moment, not, or, path, record, regexpMatch, regexpMatched, regexpReplaced, router, set, tick };
262
385
  //# sourceMappingURL=silentium-components.js.map