{"id":26280719,"url":"https://github.com/commonality/archetypes-rules","last_synced_at":"2025-05-07T05:10:17.614Z","repository":{"id":34802706,"uuid":"178375791","full_name":"commonality/archetypes-rules","owner":"commonality","description":"A JavaScript rule engine that models formal propositional logic. It allows you to separate conditional logic from source code and database triggers in a reusable package, where explicit rules can be independently defined and managed.","archived":false,"fork":false,"pushed_at":"2023-04-30T18:49:15.000Z","size":7951,"stargazers_count":14,"open_issues_count":16,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-15T13:07:50.114Z","etag":null,"topics":["archetype-pattern","boolean-logic","facts","json","node","node-module","nodejs","rpn","rule-context","rule-overrides","rule-sets","rules","rules-engine"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/commonality.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-29T09:34:13.000Z","updated_at":"2025-01-04T19:38:38.000Z","dependencies_parsed_at":"2022-09-14T06:10:39.985Z","dependency_job_id":null,"html_url":"https://github.com/commonality/archetypes-rules","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes-rules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes-rules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes-rules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes-rules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commonality","download_url":"https://codeload.github.com/commonality/archetypes-rules/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252817630,"owners_count":21808706,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archetype-pattern","boolean-logic","facts","json","node","node-module","nodejs","rpn","rule-context","rule-overrides","rule-sets","rules","rules-engine"],"created_at":"2025-03-14T15:17:27.819Z","updated_at":"2025-05-07T05:10:17.595Z","avatar_url":"https://github.com/commonality.png","language":"JavaScript","readme":"# archetypes-rules\n\n![banner](docs/img/logos/logo.png)\n\n[![The MIT License][license-image]][license-url]\n[![NPM version][npm-image]][npm-url] [![FOSSA Status][fossa-image]][fossa-url]\n[![Known Vulnerabilities][vulnerabilities-image]][vulnerabilities-url]\u003cbr\u003e\n[![Dependency Status][daviddm-image]][daviddm-url]\u003cbr\u003e\n[![MacOS and Ubuntu build statuses][travis-image]][travis-url]\n[![Windows build status][appveyor-image]][appveyor-url]\n[![Coveralls test coverage][coveralls-image]][coveralls-url]\n[![Codacy code quality][codacy-image]][codacy-url]\n\n\u003e Move conditional logic out of source code and database triggers and into a\n\u003e reusable package, where explicit rules can be independently defined and\n\u003e managed.\n\n`archetypes-rules` models Boolean logic. Instead of writing conditionals like\n\u003csamp\u003eif / else if / else\u003c/samp\u003e, you can instead create Rules that describe and\nevaluate Facts (aka, RuleContexts).\n\n## Table of Contents\n\n\u003c!-- toc --\u003e\n\n- [1. Overview](#1-overview)\n  - [1.1. `Rules`](#11-rules)\n  - [1.2. `RuleElements`](#12-ruleelements)\n    - [1.2.1. `Propositions`](#121-propositions)\n    - [1.2.2. `Variables`](#122-variables)\n    - [1.2.3. `Operators`](#123-operators)\n  - [1.3. `RuleContexts` (aka \"facts\")](#13-rulecontexts-aka-facts)\n  - [1.4. `Rules` evaluate `RuleContexts`/`Facts`](#14-rules-evaluate-rulecontextsfacts)\n- [2. Installation](#2-installation)\n- [3. Usage](#3-usage)\n  - [3.1. Example 1: Is this customer eligible for a discount?](#31-example-1-is-this-customer-eligible-for-a-discount)\n  - [3.2. Example 2: Group discount for six or more people](#32-example-2-group-discount-for-six-or-more-people)\n  - [3.3. Example 3: Is an airline passenger eligible for an upgrade?](#33-example-3-is-an-airline-passenger-eligible-for-an-upgrade)\n- [4. Maintainers](#4-maintainers)\n- [5. Contributions](#5-contributions)\n- [6. License](#6-license)\n\n\u003c!-- tocstop --\u003e\n\n\u003c!-- tocend --\u003e\n\n## 1. Overview\n\n_Figure 1: Class diagram for the `archetypes.rules` namespace._\n\n![Figure 1: Class diagram for the archetypes.rules namespace][archetypes-rules-overview]\n\n### 1.1. `Rules`\n\nRules are explicit constraints that govern actions. Rules evaluate Facts, or\nRuleContexts.\n\nRules are defined with⏤and stored as⏤JSON.\n\n### 1.2. `RuleElements`\n\nRules contain one or more RuleElements. There are three types of `RuleElements`:\n`Propositions`, `Operators`, and `Variables`.\n\n#### 1.2.1. `Propositions`\n\n**Propositions** are statements that are either, `true`, `false`, or `null`\n(unknown).\n[_Learn more..._](https://github.com/commonality/archetypes-rules/wiki/Propositions)\n\n#### 1.2.2. `Variables`\n\n**Variables** are symbols that represent the value of something.\n[_Learn more..._](https://github.com/commonality/archetypes-rules/wiki/Variables)\n\n#### 1.2.3. `Operators`\n\n**Operators**: Boolean and quantifier operators.\n\n### 1.3. `RuleContexts` (aka \"facts\")\n\n`RuleContexts` are facts, stored as JSON in files, databases, etc.\n\n### 1.4. `Rules` evaluate `RuleContexts`/`Facts`\n\n`Rules` evaluate `RuleContexts`. During evaluation, we determine whether a\n`RuleContext`/`Fact` complies with a `Rule`.\n\nreturning a `Proposition` that tells us whether a given set of facts conform to\nthe defined `Rule`.\n\n`RuleElements` are evaluated using\n[Reverse Polish Notation (RPN)](https://en.wikipedia.org/wiki/Reverse_Polish_notation).\nSee the examples below for details.\n\n\u003csmall\u003e[![Back to Table of contents][octicon-triangle-up]\n[toc]][toc-anchor]\u003c/small\u003e\n\n## 2. Installation\n\n```sh\nnpm install archetypes-rules\n```\n\n\u003csmall\u003e[![Back to Table of contents][octicon-triangle-up]\n[toc]][toc-anchor]\u003c/small\u003e\n\n## 3. Usage\n\n### 3.1. Example 1: Is this customer eligible for a discount\n\nSuppose we have a very simple rule that checks whether a customer is eligible\nfor a discount. In order to be eligible, the customer simply needs to be a Gold\nCard holder.\n\n```javascript\nconst { Rule, RuleContext } = require('archetypes-rules')\n\n// Create the rule\nconst rule = new Rule('eligibleForDiscount')\n\n// Add a Proposition, i.e., a statement that has a value of true or false\nrule.addProposition('customerIsGoldCardHolder', true)\n\n// Create a RuleContext, i.e., a \"Fact\"\nconst ruleContext = RuleContext('eligibleForDiscountContext')\n\n// Provide the truth statement as to whether the actual customer\n// has a Gold Card\nruleContext.addProposition('customerIsGoldCardHolder', true)\n\n// Evaluate\nconst result = rule.evaluate(ruleContext)\n\n// Log the resulting Proposition\n\n// Outputs\n// Proposition statement = customerIsGoldCardHolder, value = true\n```\n\n### 3.2. Example 2: Group discount for six or more people\n\nSay you provide a discount to a group of six or more people:\n\n```javascript\n// Create the rule\nconst rule = Rule('eligible-for-group-discount')\n\n// Declare a \"placeholder\" variable for the actual number of people\n// (This value will be retrieved from the RuleContext)\nrule.addVariable('actual-num-people', null)\n\n// Declare the minimum number of people required for discount\nrule.addVariable('min-num-people', 6)\n\n// Compare the two, i.e.,\n// actual-num-people \u003e= min-num-people\nrule.addOperator(Operator.GREATER_THAN_OR_EQUAL_TO)\n\n// Create a RuleContext, i.e., a \"Fact\"\nconst ruleContext = RuleContext('eligible-for-group-discount-fact')\n\n// How many people are there?\nruleContext.addVariable('actual-num-people', 5)\n\n// Declare the \"placeholder\" minimun number of people required for discount\n// (This value will be retrieved from the Rule)\nruleContext.addVariable('min-num-people', 'NULL_NUMBER_VARIABLE')\n\n// Evaluate\nconst result = rule.evaluate(ruleContext)\n\n// Log the resulting Proposition\n\n// OUTPUT:\n// Proposition statement =\n// (actualNumPeople \u003e= minNumPeople), value = false\n```\n\n### 3.3. Example 3: Is an airline passenger eligible for an upgrade?\n\nIn this example, we’re determining whether a given airline passenger is eligible\nto have their coach seat upgraded to a first-class seat. In order to be\neligible, a passenger must:\n\n- Be in economy class now and either\n  - Hold a Gold member card or\n  - Hold a Silver member card and\n- Their carry-on luggage must be less than or equal to 15.0 pounds.\n\nIn order to determine this, we must compare a passenger’s facts with our rule.\n\n```javascript\nconst { Rule, RuleContext, RuleElement } = require('archetypes-rules')\n\n// Create the rule\nconst rule = Rule('eligible-for-upgrade')\n\n// Populate the rule using method chaining\nrule\n  .addProposition('passenger-is-economy', true)\n  .addProposition('passenger-is-gold-card-holder', true)\n  .addProposition('passenger-is-silver-card-holder', true)\n  .addOperator('OR')\n  .addOperator('AND')\n  .addVariable('passenger-carry-on-baggage-weight', 'NULL_NUMBER_VARIABLE')\n  .addVariable('passenger-carry-on-baggage-allowance', 15.0)\n  .addOperator('LESS_THAN_OR_EQUAL_TO')\n  .addOperator('AND')\n\n// Create the RuleContext\nconst fact = RuleContext('eligibleForUpgradeFact')\n\n// Load it with the facts about the passenger\nfact\n  .addProposition('passengerIsEconomy', true)\n  .addProposition('passengerIsGoldCardHolder', true)\n  .addProposition('passengerIsSilverCardHolder', false)\n  .addVariable('passenger-carry-on-baggage-weight', 10.0)\n  .addVariable('passenger-carry-on-baggage-allowance', 'NULL_NUMBER_VARIABLE')\n\n// Log the resulting Proposition\n\n// =\u003e\n// Proposition statement = (\n//  (passengerIsEconomy AND\n//    (passengerIsGoldCardHolder OR passengerIsSilverCardHolder)\n//  ) AND (\n//    passenger-carry-on-baggage-weight \u003c= passenger-carry-on-baggage-allowance\n//  )\n// ), value = true\n```\n\n\u003csmall\u003e[![Back to Table of contents][octicon-triangle-up]\n[toc]][toc-anchor]\u003c/small\u003e\n\n## 4. Maintainers\n\n[@gregswindle](https://github.com/gregswindle)\n\n\u003e ![Information for Maintainers][octicon-book] The\n\u003e [Maintainer Guide](./docs/maintainer-guide/README.md) describes how we develop\n\u003e and release **archetype-rules** (and has useful information for Maintainers\n\u003e and Trusted Committers).\n\n\u003csmall\u003e[![Back to Table of contents][octicon-triangle-up]\n[toc]][toc-anchor]\u003c/small\u003e\n\n## 5. Contributions\n\n[![GitHub Contributors](https://img.shields.io/github/contributors/commonality/archetypes-rules.svg?style=social)](https://github.com/commonality/archetypes-rules/graphs/contributors)\n[![GitHub](https://img.shields.io/github/stars/commonality/archetypes-rules.svg?style=social)](https://github.com/commonality/archetypes-rules)\n[![GitHub](https://img.shields.io/github/forks/commonality/archetypes-rules.svg?style=social)](https://github.com/commonality/archetypes-rules/network)\n[![Greenkeeper badge](https://badges.greenkeeper.io/commonality/archetypes-rules.svg?style=flat-square)](https://greenkeeper.io/)\n\n![Gratitude][octicon-heart] We gratefully accept Pull Requests. Here's what you\nneed to know to get started.\n\nBefore submitting a Pull Request, please read our:\n\n- [Code of Conduct](code-of-conduct.md)\n- [Contributing Aggreement](CONTRIBUTING.md)\n- [Developer Guide](docs/developer-guide#README.md)\n- [Maintainer/Trusted Committer Guide](docs/maintainer-guide#readme)\n- [Architecture Decision Records](docs/adr#readme)\n\n\u003csmall\u003e[![Back to Table of contents][octicon-triangle-up]\n[toc]][toc-anchor]\u003c/small\u003e\n\n## 6. License\n\n[MIT](LICENSE) © 2019 Greg Swindle\n\n\u003e [![Open Source Licenses][octicon-law] View the latest **detailed legal\n\u003e NOTICE** report\n\u003e ![This link will take you to another Web site][octicon-link-external]][fossa-legal-notice-url].\n\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B804%2Fgithub.com%2Fcommonality%2Farchetypes-rules.svg?type=large)](https://app.fossa.com/projects/custom%2B804%2Fgithub.com%2Fcommonality%2Farchetypes-rules?ref=badge_large)\n\n\u003csmall\u003e[![Back to Table of contents][octicon-triangle-up]\n[toc]][toc-anchor]\u003c/small\u003e\n\n\u003c!-- ⛔️ Do not remove this line or anything under it. ⛔️  --\u003e\n\n\u003c!-- Link and image refs --\u003e\n\n[appveyor-image]:\n  https://img.shields.io/appveyor/ci/gregswindle/archetypes-rules.svg?style=flat-square\u0026logo=appveyor\u0026label=windows%20build\n[appveyor-url]: https://ci.appveyor.com/project/gregswindle/archetypes-rules\n[archetypes-rules-overview]: ./docs/assets/archetypes.rules-overview.png\n[codacy-coverage-image]: https://img.shields.\n[codacy-image]:\n  https://api.codacy.com/project/badge/Grade/bc3fdfbea2d84079b5d785b6de0886ab\n[codacy-url]:\n  https://www.codacy.com/app/commonality/archetypes-rules?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=commonality/archetypes-rules\u0026utm_campaign=Badge_Grade\n[coveralls-image]:\n  https://coveralls.io/repos/github/commonality/archetypes-rules/badge.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/github/commonality/archetypes-rules\n[daviddm-image]:\n  https://david-dm.org/commonality/archetypes-rules.svg?theme=shields.io\u0026style=flat-square\n[daviddm-url]: https://david-dm.org/commonality/archetypes-rules\n[fossa-image]:\n  https://app.fossa.com/api/projects/custom%2B804%2Fgithub.com%2Fcommonality%2Farchetypes-rules.svg?type=shield\n[fossa-legal-notice-url]:\n  https://app.fossa.com/attribution/5895d784-6a99-4c46-961c-6aecd9414623\n[fossa-url]:\n  https://app.fossa.com/projects/custom%2B804%2Fgithub.com%2Fcommonality%2Farchetypes-rules?ref=badge_shield\n[license-image]:\n  https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\n[license-url]: http://opensource.org/licenses/MIT\n[npm-image]: https://img.shields.io/npm/v/archetypes-rules.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/archetypes-rules\n[toc-anchor]: #table-of-contents\n[travis-image]:\n  https://img.shields.io/travis/com/commonality/archetypes-rules.svg?branch=master\u0026style=flat-square\u0026label=macOS%20%7C%20ubuntu%20builds\u0026logo=travis\n[travis-url]: https://travis-ci.com/commonality/archetypes-rules\n[vulnerabilities-image]:\n  https://snyk.io/test/github/commonality/archetypes-rules/badge.svg?style=flat-square\u0026targetFile=package.json\n[vulnerabilities-url]:\n  https://snyk.io/test/github/commonality/archetypes-rules?targetFile=package.json\n\n[daviddm-dev-image]: https://david-dm.org/commonality/archetypes-rules/dev-status.svg?theme=shields.io\u0026style=flat-square\n\n[bundlephobia-min-download-image]: https://flat.badgen.net/bundlephobia/min/archetypes-rules\n\n[install-size-image]: https://flat.badgen.net/packagephobia/install/archetypes-rules\n\n[publish-size-image]: https://flat.badgen.net/packagephobia/publish/archetypes-rules\n\n[downloads-per-month-image]: https://flat.badgen.net/npm/dm/archetypes-rules\n\n\u003c!-- Octicon img references  --\u003e\n\n[octicon-alert]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/alert.svg\n[octicon-arrow-down]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-down.svg\n[octicon-arrow-left]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-left.svg\n[octicon-arrow-right]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-right.svg\n[octicon-arrow-small-down]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-small-down.svg\n[octicon-arrow-small-left]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-small-left.svg\n[octicon-arrow-small-right]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-small-right.svg\n[octicon-arrow-small-up]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-small-up.svg\n[octicon-arrow-up]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/arrow-up.svg\n[octicon-beaker]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/beaker.svg\n[octicon-bell]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/bell.svg\n[octicon-bold]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/bold.svg\n[octicon-book]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/book.svg\n[octicon-bookmark]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/bookmark.svg\n[octicon-briefcase]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/briefcase.svg\n[octicon-broadcast]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/broadcast.svg\n[octicon-browser]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/browser.svg\n[octicon-bug]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/bug.svg\n[octicon-calendar]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/calendar.svg\n[octicon-check]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/check.svg\n[octicon-checklist]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/checklist.svg\n[octicon-chevron-down]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/chevron-down.svg\n[octicon-chevron-left]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/chevron-left.svg\n[octicon-chevron-right]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/chevron-right.svg\n[octicon-chevron-up]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/chevron-up.svg\n[octicon-circle-slash]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/circle-slash.svg\n[octicon-circuit-board]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/circuit-board.svg\n[octicon-clippy]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/clippy.svg\n[octicon-clock]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/clock.svg\n[octicon-cloud-download]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/cloud-download.svg\n[octicon-cloud-upload]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/cloud-upload.svg\n[octicon-code]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/code.svg\n[octicon-comment-discussion]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/comment-discussion.svg\n[octicon-comment]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/comment.svg\n[octicon-credit-card]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/credit-card.svg\n[octicon-dash]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/dash.svg\n[octicon-dashboard]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/dashboard.svg\n[octicon-database]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/database.svg\n[octicon-desktop-download]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/desktop-download.svg\n[octicon-device-camera-video]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/device-camera-video.svg\n[octicon-device-camera]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/device-camera.svg\n[octicon-device-desktop]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/device-desktop.svg\n[octicon-device-mobile]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/device-mobile.svg\n[octicon-diff-added]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/diff-added.svg\n[octicon-diff-ignored]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/diff-ignored.svg\n[octicon-diff-modified]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/diff-modified.svg\n[octicon-diff-removed]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/diff-removed.svg\n[octicon-diff-renamed]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/diff-renamed.svg\n[octicon-diff]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/diff.svg\n[octicon-ellipses]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/ellipses.svg\n[octicon-ellipsis]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/ellipsis.svg\n[octicon-eye]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/eye.svg\n[octicon-file-binary]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-binary.svg\n[octicon-file-code]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-code.svg\n[octicon-file-directory]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-directory.svg\n[octicon-file-media]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-media.svg\n[octicon-file-pdf]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-pdf.svg\n[octicon-file-submodule]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-submodule.svg\n[octicon-file-symlink-directory]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-symlink-directory.svg\n[octicon-file-symlink-file]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-symlink-file.svg\n[octicon-file-text]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-text.svg\n[octicon-file-zip]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file-zip.svg\n[octicon-file]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/file.svg\n[octicon-flame]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/flame.svg\n[octicon-fold]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/fold.svg\n[octicon-gear]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/gear.svg\n[octicon-gift]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/gift.svg\n[octicon-gist-secret]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/gist-secret.svg\n[octicon-gist]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/gist.svg\n[octicon-git-branch]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/git-branch.svg\n[octicon-git-commit]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/git-commit.svg\n[octicon-git-compare]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/git-compare.svg\n[octicon-git-merge]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/git-merge.svg\n[octicon-git-pull-request]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/git-pull-request.svg\n[octicon-globe]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/globe.svg\n[octicon-grabber]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/grabber.svg\n[octicon-graph]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/graph.svg\n[octicon-heart]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/heart.svg\n[octicon-history]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/history.svg\n[octicon-home]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/home.svg\n[octicon-horizontal-rule]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/horizontal-rule.svg\n[octicon-hubot]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/hubot.svg\n[octicon-inbox]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/inbox.svg\n[octicon-info]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/info.svg\n[octicon-issue-closed]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/issue-closed.svg\n[octicon-issue-opened]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/issue-opened.svg\n[octicon-issue-reopened]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/issue-reopened.svg\n[octicon-italic]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/italic.svg\n[octicon-jersey]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/jersey.svg\n[octicon-key]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/key.svg\n[octicon-keyboard]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/keyboard.svg\n[octicon-law]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/law.svg\n[octicon-light-bulb]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/light-bulb.svg\n[octicon-link-external]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/link-external.svg\n[octicon-link]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/link.svg\n[octicon-list-ordered]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/list-ordered.svg\n[octicon-list-unordered]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/list-unordered.svg\n[octicon-location]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/location.svg\n[octicon-lock]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/lock.svg\n[octicon-logo-gist]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/logo-gist.svg\n[octicon-logo-github]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/logo-github.svg\n[octicon-mail-read]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mail-read.svg\n[octicon-mail-reply]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mail-reply.svg\n[octicon-mail]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mail.svg\n[octicon-mark-github]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mark-github.svg\n[octicon-markdown]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/markdown.svg\n[octicon-megaphone]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/megaphone.svg\n[octicon-mention]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mention.svg\n[octicon-milestone]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/milestone.svg\n[octicon-mirror]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mirror.svg\n[octicon-mortar-board]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mortar-board.svg\n[octicon-mute]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/mute.svg\n[octicon-no-newline]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/no-newline.svg\n[octicon-octoface]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/octoface.svg\n[octicon-organization]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/organization.svg\n[octicon-package]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/package.svg\n[octicon-paintcan]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/paintcan.svg\n[octicon-pencil]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/pencil.svg\n[octicon-person]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/person.svg\n[octicon-pin]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/pin.svg\n[octicon-plug]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/plug.svg\n[octicon-plus-small]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/plus-small.svg\n[octicon-plus]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/plus.svg\n[octicon-primitive-dot]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/primitive-dot.svg\n[octicon-primitive-square]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/primitive-square.svg\n[octicon-pulse]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/pulse.svg\n[octicon-question]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/question.svg\n[octicon-quote]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/quote.svg\n[octicon-radio-tower]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/radio-tower.svg\n[octicon-reply]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/reply.svg\n[octicon-repo-clone]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/repo-clone.svg\n[octicon-repo-force-push]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/repo-force-push.svg\n[octicon-repo-forked]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/repo-forked.svg\n[octicon-repo-pull]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/repo-pull.svg\n[octicon-repo-push]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/repo-push.svg\n[octicon-repo]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/repo.svg\n[octicon-rocket]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/rocket.svg\n[octicon-rss]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/rss.svg\n[octicon-ruby]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/ruby.svg\n[octicon-search]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/search.svg\n[octicon-server]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/server.svg\n[octicon-settings]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/settings.svg\n[octicon-shield]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/shield.svg\n[octicon-sign-in]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/sign-in.svg\n[octicon-sign-out]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/sign-out.svg\n[octicon-smiley]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/smiley.svg\n[octicon-squirrel]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/squirrel.svg\n[octicon-star]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/star.svg\n[octicon-stop]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/stop.svg\n[octicon-sync]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/sync.svg\n[octicon-tag]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/tag.svg\n[octicon-tasklist]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/tasklist.svg\n[octicon-telescope]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/telescope.svg\n[octicon-terminal]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/terminal.svg\n[octicon-text-size]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/text-size.svg\n[octicon-three-bars]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/three-bars.svg\n[octicon-thumbsdown]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/thumbsdown.svg\n[octicon-thumbsup]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/thumbsup.svg\n[octicon-tools]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/tools.svg\n[octicon-trashcan]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/trashcan.svg\n[octicon-triangle-down]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/triangle-down.svg\n[octicon-triangle-left]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/triangle-left.svg\n[octicon-triangle-right]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/triangle-right.svg\n[octicon-triangle-up]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/triangle-up.svg\n[octicon-unfold]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/unfold.svg\n[octicon-unmute]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/unmute.svg\n[octicon-unverified]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/unverified.svg\n[octicon-verified]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/verified.svg\n[octicon-versions]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/versions.svg\n[octicon-watch]:\n  https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/watch.svg\n[octicon-x]: https://cdnjs.cloudflare.com/ajax/libs/octicons/8.3.0/svg/x.svg\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommonality%2Farchetypes-rules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommonality%2Farchetypes-rules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommonality%2Farchetypes-rules/lists"}