UNPKG

@toreda/strong-types

Version:

Better TypeScript code in fewer lines.

1 lines 2.59 kB
{"version":3,"sources":["../src/rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAGrC;;;;;GAKG;AACH,qBAAa,IAAI;IAChB,SAAgB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;;IAMpC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI;IAQvC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO;IAkBnC,KAAK,IAAI,IAAI;CAGpB","file":"rule.d.ts","sourcesContent":["/**\n *\tMIT License\n *\n *\tCopyright (c) 2019 - 2021 Toreda, Inc.\n *\n *\tPermission is hereby granted, free of charge, to any person obtaining a copy\n *\tof this software and associated documentation files (the \"Software\"), to deal\n *\tin the Software without restriction, including without limitation the rights\n *\tto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *\tcopies of the Software, and to permit persons to whom the Software is\n *\tfurnished to do so, subject to the following conditions:\n\n * \tThe above copyright notice and this permission notice shall be included in all\n * \tcopies or substantial portions of the Software.\n *\n * \tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * \tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * \tSOFTWARE.\n *\n */\n\nimport {RuleNode} from './rule/node';\nimport {RuleNodeType} from './rule/node/type';\n\n/**\n * Single rule applied to a node. Can be modified by other rules, matches,\n * specifiers, and flags such as invert.\n *\n * @category Rules\n */\nexport class Rule {\n\tpublic readonly nodes: RuleNode<unknown>[];\n\n\tconstructor() {\n\t\tthis.nodes = [];\n\t}\n\n\tpublic add<NodeT>(node: RuleNode<NodeT>): void {\n\t\tif (node.type !== RuleNodeType.CMP) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.nodes.push(node as RuleNode<unknown>);\n\t}\n\n\tpublic run(value: unknown | null): boolean {\n\t\tif (!this.nodes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet trueCount = 0;\n\t\tfor (const node of this.nodes) {\n\t\t\tconst result = node.execute(value);\n\t\t\tif (result) {\n\t\t\t\ttrueCount++;\n\t\t\t}\n\t\t}\n\n\t\t// Require at least comparison in set of\n\t\t// OR operators to be true.\n\t\treturn trueCount > 0;\n\t}\n\n\tpublic reset(): void {\n\t\tthis.nodes.length = 0;\n\t}\n}\n"]}