{"version":3,"file":"silentium-web-api.cjs","sources":["../src/fetch/FetchedData.ts","../src/fetch/RequestJson.ts","../src/dom/Elements.ts","../src/dom/Element.ts","../src/console/Log.ts","../src/timer/Timer.ts","../src/storage/StorageRecord.ts"],"sourcesContent":["import { Message, MessageType } from \"silentium\";\n\nexport interface FetchRequestType {\n  baseUrl?: string;\n  url: string;\n  method: string;\n  credentials?: RequestCredentials;\n  headers?: Record<string, string>;\n  body?: unknown;\n  query?: Record<string, unknown>;\n}\n\n/**\n * Wrapper around FetchAPI\n * https://kosukhin.github.io/patron-web-api/#/fetch/fetched\n * https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\n */\nexport function FetchedData(\n  $request: MessageType<Partial<FetchRequestType>>,\n  $abort?: MessageType,\n) {\n  return Message<string>(function FetchedDataImpl(resolve, reject) {\n    const abortController = new AbortController();\n    if ($abort) {\n      $abort.then((abort) => {\n        if (abort) {\n          abortController.abort();\n        }\n      });\n    }\n    $request.then((request) => {\n      const { baseUrl, url, method, credentials, headers, body, query } =\n        request;\n      let urlWithQuery: URL;\n      try {\n        urlWithQuery = new URL(String(url), baseUrl);\n      } catch {\n        reject(new Error(\"Invalid URL\"));\n        return;\n      }\n      Object.entries(query ?? {}).forEach(([key, value]) =>\n        urlWithQuery.searchParams.append(key, String(value)),\n      );\n      const options: RequestInit = {\n        method,\n        credentials,\n        headers,\n        body: body as BodyInit,\n        signal: abortController.signal,\n      };\n      fetch(urlWithQuery.toString(), options)\n        .then((response) => response.text())\n        .then(resolve)\n        .catch(reject);\n    });\n  });\n}\n","import { Message, MessageType } from \"silentium\";\nimport { FetchRequestType } from \"./FetchedData\";\n\n/**\n * Represents a request for JSON data.\n */\nexport function RequestJson($request: MessageType<Partial<FetchRequestType>>) {\n  return Message<Partial<FetchRequestType>>(\n    function RequestJsonImpl(resolve, reject) {\n      $request.then((r) => {\n        try {\n          resolve({\n            ...r,\n            headers: {\n              ...(r.headers ?? {}),\n              \"Content-Type\": \"application/json\",\n            },\n            body: JSON.stringify(r.body),\n          });\n        } catch {\n          reject(new Error(\"Failed to parse JSON\"));\n        }\n      });\n    },\n  );\n}\n","import { Actual, MaybeMessage, Message } from \"silentium\";\n\n/**\n * Represents a collection of elements that match a given CSS selector.\n */\nexport function Elements<T extends HTMLElement>(\n  _selector: MaybeMessage<string>,\n) {\n  const $selector = Actual(_selector);\n  return Message<T[]>(function ElementsImpl(r) {\n    $selector.then((selector) => {\n      const element = document.querySelectorAll(selector);\n      if (element.length > 0) {\n        r(Array.from(element) as T[]);\n      } else {\n        const targetNode = document;\n        const config = {\n          childList: true,\n          subtree: true,\n          attributes: true,\n          attributeFilter: [\"class\", \"id\"],\n        };\n\n        const observer = new MutationObserver((mutationsList) => {\n          for (const mutation of mutationsList) {\n            if (mutation.type === \"childList\") {\n              // Check if any added nodes match the selector or contain matching elements\n              const checkNodes = (nodes: NodeList) => {\n                for (const node of Array.from(nodes)) {\n                  if (node.nodeType === Node.ELEMENT_NODE) {\n                    const element = node as Element;\n                    if (element.matches && element.matches(selector)) {\n                      const allElements = document.querySelectorAll(selector);\n                      if (allElements.length > 0) {\n                        r(Array.from(allElements) as T[]);\n                        observer.disconnect();\n                        return true;\n                      }\n                    }\n                    // Check if this node contains matching elements\n                    if (\n                      element.querySelector &&\n                      element.querySelector(selector)\n                    ) {\n                      const allElements = document.querySelectorAll(selector);\n                      if (allElements.length > 0) {\n                        r(Array.from(allElements) as T[]);\n                        observer.disconnect();\n                        return true;\n                      }\n                    }\n                  }\n                }\n                return false;\n              };\n\n              if (checkNodes(mutation.addedNodes)) {\n                break;\n              }\n            } else if (mutation.type === \"attributes\") {\n              // Check if the mutated element now matches the selector\n              const target = mutation.target as Element;\n              if (target.matches && target.matches(selector)) {\n                const allElements = document.querySelectorAll(selector);\n                if (allElements.length > 0) {\n                  r(Array.from(allElements) as T[]);\n                  observer.disconnect();\n                  break;\n                }\n              }\n            }\n          }\n        });\n\n        observer.observe(targetNode, config);\n      }\n    });\n  });\n}\n","import { Actual, MaybeMessage, Message } from \"silentium\";\n\n/**\n * Represents an element that matches a given CSS selector.\n * If the element exists immediately, returns it.\n * If not, waits for it to appear in the DOM.\n */\nexport function Element<T extends HTMLElement>(\n  _selector: MaybeMessage<string>,\n) {\n  const $selector = Actual(_selector);\n  return Message<T>(function ElementImpl(r) {\n    $selector.then((selector) => {\n      const element = document.querySelector(selector) as T | null;\n      if (element) {\n        r(element);\n      } else {\n        const targetNode = document;\n        const config = {\n          childList: true,\n          subtree: true,\n          attributes: true,\n          attributeFilter: [\"class\", \"id\"],\n        };\n\n        const observer = new MutationObserver((mutationsList) => {\n          for (const mutation of mutationsList) {\n            if (mutation.type === \"childList\") {\n              // Check added nodes and their descendants\n              const checkNodes = (nodes: NodeList) => {\n                for (const node of Array.from(nodes)) {\n                  if (node.nodeType === Node.ELEMENT_NODE) {\n                    const element = node as Element;\n                    if (element.matches && element.matches(selector)) {\n                      r(element as T);\n                      observer.disconnect();\n                      return true;\n                    }\n                    // Check descendants\n                    if (\n                      element.querySelector &&\n                      element.querySelector(selector)\n                    ) {\n                      const found = element.querySelector(selector) as T;\n                      r(found);\n                      observer.disconnect();\n                      return true;\n                    }\n                  }\n                }\n                return false;\n              };\n\n              if (checkNodes(mutation.addedNodes)) {\n                break;\n              }\n            } else if (mutation.type === \"attributes\") {\n              // Check if the mutated element now matches the selector\n              const target = mutation.target as Element;\n              if (target.matches && target.matches(selector)) {\n                r(target as T);\n                observer.disconnect();\n                break;\n              }\n            }\n          }\n        });\n\n        observer.observe(targetNode, config);\n      }\n    });\n  });\n}\n","/**\n * Transport for log values to console\n */\nexport function Log(group: string) {\n  return (v: unknown) => {\n    console.log(group, v);\n  };\n}\n","import { Message } from \"silentium\";\n\nexport function Timer(delay: number) {\n  return Message<number>((t) => {\n    setTimeout(() => {\n      t(delay);\n    }, delay);\n  });\n}\n","import { Late, Source, MessageType, Primitive } from \"silentium\";\n\n/**\n * Data representation from Storage API\n */\nexport function StorageRecord<T = string>(\n  $name: MessageType<string>,\n  defaultValue?: unknown,\n  storageType: \"localStorage\" | \"sessionStorage\" = \"localStorage\",\n) {\n  const nameSync = Primitive($name);\n  const resultSrc = Late<T>();\n  return Source<T>(\n    (resolve) => {\n      resultSrc.then(resolve);\n      const storage = window[storageType];\n      $name.then((name) => {\n        window.addEventListener(\"storage\", (e) => {\n          if (e.storageArea === storage) {\n            if (e.key === name) {\n              const newValue = e.newValue\n                ? JSON.parse(e.newValue)\n                : defaultValue;\n              if (newValue !== undefined && newValue !== null) {\n                resultSrc.use(newValue as T);\n              }\n            }\n          }\n        });\n        if (storage[name]) {\n          try {\n            resultSrc.use(JSON.parse(storage[name]));\n          } catch {\n            console.warn(`LocalStorageRecord cant parse value ${name}`);\n          }\n        } else if (defaultValue !== undefined) {\n          resultSrc.use(defaultValue as T);\n        }\n      });\n    },\n    (v) => {\n      const storage = window[storageType];\n      resultSrc.use(v);\n\n      try {\n        storage[nameSync.primitiveWithException()] = JSON.stringify(v);\n      } catch {\n        console.warn(`LocalStorageRecord cant stringify value`);\n      }\n    },\n  );\n}\n"],"names":["Message","Actual","element","Primitive","Late","Source"],"mappings":"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"}