{"version":3,"file":"spark.cjs","sources":["../packages/spark/add/add.js","../packages/spark/always/always.js","../packages/spark/dec/dec.js","../packages/spark/different/different.js","../packages/spark/equals/equals.js","../packages/spark/gt/gt.js","../packages/spark/gte/gte.js","../packages/spark/inc/inc.js","../packages/spark/len/len.js","../packages/spark/lt/lt.js","../packages/spark/lte/lte.js","../packages/spark/not/not.js","../packages/spark/prop/prop.js","../packages/spark/subtract/subtract.js","../packages/spark/truthy/truthy.js","../packages/spark/registry.js","../packages/spark/spark.js"],"sourcesContent":["/**\n * Adds a value to the current value.\n *\n * @param {number|string} x - Current value.\n * @param {number|string} y - Value to be added.\n * @returns {number}\n */\nexport function add(x, y) {\n  return Number(x) + Number(y);\n}\n","/**\n * Returns the current value without modifications.\n *\n * @param {*} value - Current value.\n * @returns {*} - Same value passed as argument.\n */\nexport const always = (_token, value) => value;\n","/**\n * Decrements the current value by 1.\n *\n * @param {number|string} x - Current value.\n * @returns {number}\n */\nexport function dec(x) {\n  return Number(x) - 1;\n}\n","/**\n * Compares two values and returns `true` if they are different.\n *\n * @param {*} x - Current value.\n * @param {*} y - Comparison value.\n * @returns {boolean} `true` if `x != y`, otherwise `false`.\n */\nexport function different(x, y) {\n  // biome-ignore lint/suspicious/noDoubleEquals: intentional type coercion comparison\n  return x != y;\n}\n","/**\n * Compares two values and returns `true` if they are equal.\n *\n * @param {*} x - Current value.\n * @param {*} y - Comparison value.\n * @returns {boolean} `true` if `x == y`, otherwise `false`.\n */\nexport function equals(x, y) {\n  // biome-ignore lint/suspicious/noDoubleEquals: intentional type coercion comparison\n  return x == y;\n}\n","/**\n * Returns `true` if `x` is greater than `y`.\n *\n * @param {number|string} x\n * @param {number|string} y\n * @returns {boolean}\n */\nexport function gt(x, y) {\n  return Number(x) > Number(y);\n}\n","/**\n * Returns `true` if `x` is greater than or equal to `y`.\n *\n * @param {number|string} x\n * @param {number|string} y\n * @returns {boolean}\n */\nexport function gte(x, y) {\n  return Number(x) >= Number(y);\n}\n","/**\n * Increments the current value by 1.\n *\n * @param {number|string} x - Current value.\n * @returns {number}\n */\nexport function inc(x) {\n  return Number(x) + 1;\n}\n","/**\n * Returns the number of keys in an object.\n *\n * @param {object|string} x\n * @returns {number}\n */\nexport function len(x) {\n  return Object.keys(x ?? {})?.length;\n}\n","/**\n * Returns `true` if `x` is less than `y`.\n *\n * @param {number|string} x\n * @param {number|string} y\n * @returns {boolean}\n */\nexport function lt(x, y) {\n  return Number(x) < Number(y);\n}\n","/**\n * Returns `true` if `x` is less than or equal to `y`.\n *\n * @param {number|string} x\n * @param {number|string} y\n * @returns {boolean}\n */\nexport function lte(x, y) {\n  return Number(x) <= Number(y);\n}\n","/**\n * Inverts the boolean value of `x`.\n *\n * @param {*} x\n * @returns {boolean}\n */\nexport function not(x) {\n  return !x;\n}\n","/**\n * Dynamically accesses a property from an object.\n *\n * @param {object} target - Source object.\n * @param {string} path - Property path, can contain bracket notation.\n * @returns {any} Property value or `undefined`.\n */\nexport function prop(target, path) {\n  try {\n    return new Function(\n      \"target\",\n      `return target${/\\[/.test(path) ? \"\" : \".\"}${path}`,\n    )(target);\n  } catch (_) {\n    return undefined;\n  }\n}\n","/**\n * Subtracts a value from the current value.\n *\n * @param {number|string} x - Current value.\n * @param {number|string} y - Value to be subtracted.\n * @returns {number}\n */\nexport function subtract(x, y) {\n  return Number(x) - Number(y);\n}\n","/**\n * Evaluates whether a value can be considered truthy, following HTML boolean attribute conventions.\n *\n * @param {string|null} value - Raw value from the DOM.\n * @returns {boolean} `false` for `\"false\"`, `\"0\"`, `\"no\"`, or `null`; `true` otherwise.\n *\n * @description\n * This spark interprets the values `\"false\"`, `\"0\"`, `\"no\"`, and `null` as `false`,\n * and any other value as `true`. It's useful for HTML attributes\n * that represent boolean flags, such as `disabled`, `checked`, etc.\n *\n * @example\n * truthy(\"no\");     // false\n * truthy(\"false\");  // false\n * truthy(\"0\");      // false\n * truthy(null);     // false\n * truthy(\"true\");   // true\n * truthy(\"\");       // true\n */\nexport function truthy(value) {\n  if (value === \"no\") return false;\n  if (value === \"false\") return false;\n  if (value === \"0\") return false;\n  if (value === null) return false;\n  return true;\n}\n","import { add } from \"./add\";\nimport { always } from \"./always\";\nimport { dec } from \"./dec\";\nimport { different } from \"./different\";\nimport { equals } from \"./equals\";\nimport { gt } from \"./gt\";\nimport { gte } from \"./gte\";\nimport { inc } from \"./inc\";\nimport { len } from \"./len\";\nimport { lt } from \"./lt\";\nimport { lte } from \"./lte\";\nimport { not } from \"./not\";\nimport { prop } from \"./prop\";\nimport { subtract } from \"./subtract\";\nimport { truthy } from \"./truthy\";\n\n/**\n * Object containing all registered sparks.\n * Each key corresponds to the function name used in the arc.\n */\nexport const registry = {\n  always,\n  add,\n  dec,\n  different,\n  equals,\n  gt,\n  gte,\n  inc,\n  len,\n  lt,\n  lte,\n  not,\n  prop,\n  subtract,\n  truthy,\n};\n","import { registry } from \"./registry\";\n\n/**\n * The `spark` object provides dynamic access to the transformer registry.\n *\n * @description\n * It allows retrieval (`get`) and registration (`set`) of functions that transform\n * values in Echo's dataflow arcs. Each registered function can be referenced\n * by name in declarative protocols like: `source/event:type/sink|add=1|len`.\n *\n * @example\n * spark.get(\"len\")(\"abc\") // 3\n * spark.set(\"double\", x => x * 2)\n */\nconst spark = {\n  /**\n   * Retrieves a registered function by name.\n   *\n   * @param {string} name - Name of the spark.\n   * @returns {Function} The corresponding function or a no-op function.\n   *\n   * @example\n   * spark.get(\"len\")(\"abc\") // 3\n   * spark.get(\"unknown\")(42) // 42 (no-op)\n   */\n  get(name) {\n    return registry[name] ?? ((x) => x);\n  },\n\n  /**\n   * Registers a new spark function.\n   *\n   * @param {string} name - Name of the function.\n   * @param {Function} fn - Function to be registered.\n   * @returns {typeof spark} Returns the API itself for chaining.\n   *\n   * @example\n   * spark.set(\"square\", x => x * x)\n   */\n  set(name, fn) {\n    registry[name] = fn;\n    return spark;\n  },\n};\n\nexport default spark;\n"],"names":["add","x","y","Number","always","_token","value","dec","different","equals","gt","gte","inc","len","Object","keys","length","lt","lte","not","prop","target","path","Function","test","_","subtract","truthy","registry","spark","get","name","set","fn"],"mappings":";AAOO,SAASA,EAAIC,IAAGC,IAAAA;AACrB,SAAOC,OAAOF,EAAAA,IAAKE,OAAOD,EAAAA;AAC5B;;ACHY,MAACE,IAAS,CAACC,IAAQC,OAAUA;ACAlC,SAASC,EAAIN,IAAAA;AAClB,SAAOE,OAAOF,EAAAA,IAAK;AACrB;ACDO,SAASO,EAAUP,IAAGC,IAAAA;AAE3B,SAAOD,MAAKC;AACd;ACHO,SAASO,EAAOR,IAAGC,IAAAA;AAExB,SAAOD,MAAKC;AACd;ACHO,SAASQ,EAAGT,IAAGC,IAAAA;AACpB,SAAOC,OAAOF,MAAKE,OAAOD,EAAAA;AAC5B;ACFO,SAASS,EAAIV,IAAGC,IAAAA;AACrB,SAAOC,OAAOF,EAAAA,KAAME,OAAOD,EAAAA;AAC7B;ACHO,SAASU,EAAIX,IAAAA;AAClB,SAAOE,OAAOF,EAAAA,IAAK;AACrB;ACFO,SAASY,EAAIZ,IAAAA;AAClB,SAAOa,OAAOC,KAAKd,MAAK,CAAA,CAAA,GAAKe;AAC/B;ACDO,SAASC,EAAGhB,IAAGC,IAAAA;AACpB,SAAOC,OAAOF,EAAAA,IAAKE,OAAOD,EAAAA;AAC5B;ACFO,SAASgB,EAAIjB,IAAGC,IAAAA;AACrB,SAAOC,OAAOF,EAAAA,KAAME,OAAOD,EAAAA;AAC7B;ACHO,SAASiB,EAAIlB,IAAAA;AAClB,SAAA,CAAQA;AACV;ACDO,SAASmB,EAAKC,IAAQC,IAAAA;AAC3B;AACE,WAAO,IAAIC,SACT,UACA,gBAAgB,KAAKC,KAAKF,EAAAA,IAAQ,KAAK,GAAA,GAAMA,EAAAA,EAAAA,EAC7CD,EAAAA;AAAAA,EACJ,SAASI,IAAAA;AACP;AAAA,EACF;AACF;ACTO,SAASC,EAASzB,IAAGC,IAAAA;AAC1B,SAAOC,OAAOF,EAAAA,IAAKE,OAAOD,EAAAA;AAC5B;ACUO,SAASyB,EAAOrB,IAAAA;AACrB,SAAc,SAAVA,OACU,YAAVA,OACU,QAAVA,MACU,SAAVA;AAEN;ACLO,MAAMsB,IAAW,EACtBxB,QAAAA,GACAJ,KAAAA,GACAO,KAAAA,GACAC,WAAAA,GACAC,QAAAA,GACAC,IAAAA,GACAC,KAAAA,GACAC,KAAAA,GACAC,KAAAA,GACAI,IAAAA,GACAC,KAAAA,GACAC,KAAAA,GACAC,MAAAA,GACAM,UAAAA,GACAC,QAAAA,EAAAA,GCrBIE,IAAQ,EAWZC,KAAIC,CAAAA,OACKH,EAASG,EAAAA,MAAW9B,CAAAA,OAAMA,KAanC+B,KAAG,CAACD,IAAME,QACRL,EAASG,EAAAA,IAAQE,IACVJ,GAAAA;;"}