{"id":26280720,"url":"https://github.com/commonality/archetypes","last_synced_at":"2025-08-05T09:26:50.991Z","repository":{"id":57183293,"uuid":"102066187","full_name":"commonality/archetypes","owner":"commonality","description":"䷴ Universal, rule-based business collaboration APIs for e-commerce and customer relationship management (CRM).","archived":false,"fork":false,"pushed_at":"2020-04-30T23:33:54.000Z","size":1006,"stargazers_count":25,"open_issues_count":6,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-13T21:31:53.931Z","etag":null,"topics":["archetype-pattern","archetype-patterns","business","business-archetypes","crm","customer-relationship-management","inventory","mda","money","order","party","party-relationship","product","rule","rule-engine","rules","swagger-codegen","swagger-ui"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/commonality.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-01T02:41:32.000Z","updated_at":"2025-07-13T09:21:12.000Z","dependencies_parsed_at":"2022-09-14T06:10:39.804Z","dependency_job_id":null,"html_url":"https://github.com/commonality/archetypes","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/commonality/archetypes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commonality","download_url":"https://codeload.github.com/commonality/archetypes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commonality%2Farchetypes/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268870103,"owners_count":24320962,"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","status":"online","status_checked_at":"2025-08-05T02:00:12.334Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","archetype-patterns","business","business-archetypes","crm","customer-relationship-management","inventory","mda","money","order","party","party-relationship","product","rule","rule-engine","rules","swagger-codegen","swagger-ui"],"created_at":"2025-03-14T15:17:27.837Z","updated_at":"2025-08-05T09:26:50.944Z","avatar_url":"https://github.com/commonality.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `archetypes` ⍟ [![NPM version][npm-badge-image]][npm-url]\n\n![Business archetypes logo][business-archetypes-logo-image]\n\n[![License][license-image]][license-url]\n[![Dependencies' licenses][fossa-badge-image]][fossa-url]\n[![NSP Status][nsp-badge-image]][nsp-url]\n[![Synk Vulnerabilities][snyk-vulnerabilities-badge-image]][snyk-vulnerabilities-url]\u003cbr\u003e\n[![StackShare][stack-share-badge-image]][stack-share-url]\n[![Dependency Status][david-dm-badge-image]][daviddm-url]\n[![devDependencies Status][david-dm-dev-badge-image]][daviddm-dev-url] \u003cbr\u003e\n[![Build Status][travis-badge-image]][travis-url] [![Coverage percentage][coveralls-badge-image]][coveralls-url]\n[![Codacy quality][codacy-badge-image]][codacy-url]\n[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors)\n\n\u003e ![quote][octicon-quote] A business archetype is a primordial thing that occurs consistently and universally in business domains and business software systems.\n\u003e\n\u003e (Arlow \u0026 Neustadt, [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url], 2006, p. 5)\n\n`commonality/archetypes` provides universal, rule-based business collaboration APIs for e-commerce and customer relationship management (CRM). `commonality/archetypes` specifies semantically-rich models of universally recurring business entities, events, and relationships with OpenAPI 2.0.\n\n## What are `archetypes`?\n\n**`archetypes` model how `Parties`\u0026mdash;`People` and `Companies`\u0026mdash;exchange `Products` and `Services` with `Payments` (normally `Money` or other `Locale`-based `Currencies` like gift-cards). The exchanges are recorded from beginning to end as `Orders` and managed as Customer Relationships (CRM) between buyers and sellers (with `PartyRelationships`). When necessary, `Rules` constrain and determine the types of relationships allowed; how products can be packaged; and whether discounts can be applied.**\n\nThese **business `archetypes`** are expressed as **models** in open, vendor-neutral **OpenAPI/Swagger** specifications, which provide:\n\n1. **A common vocabulary and operating framework** for how `Parties`\u0026mdash;`People` and `Companies`\u0026mdash;exchange goods and services for `Money` (with `Locale`-based `Currencies`), as well as managing these relationships as `Customers` (CRM).\n2. **Executable documentation** that articulates these models and how they interact.\n3. **Open-source tools that automatically generate microservice \"stubs\" and client SDKs**.\n\n## Table of contents\n\n\u003c!-- toc --\u003e\n\n- [1. Security](#1-security)\n- [2. Installation](#2-installation)\n  * [2.1. Generating servers and clients](#21-generating-servers-and-clients)\n  * [2.2. Editing OpenAPI specs](#22-editing-openapi-specs)\n- [3. Usage: API HTTP responses](#3-usage-api-http-responses)\n  * [3.1. `curl`](#31-curl)\n  * [3.2. Swagger-UI](#32-swagger-ui)\n- [4. `Party` API :package:](#4-party-api-package)\n  * [4.1. Standards compliance](#41-standards-compliance)\n  * [4.2. Resources](#42-resources)\n  * [4.3. OpenAPI 2.0 Specs](#43-openapi-20-specs)\n  * [4.4. API and SDK documentation](#44-api-and-sdk-documentation)\n  * [4.5. Usage example](#45-usage-example)\n- [5. `Quantity` API :package:](#5-quantity-api-package)\n  * [5.1. Standards compliance](#51-standards-compliance)\n  * [5.2. OpenAPI 2.0 Specs](#52-openapi-20-specs)\n  * [5.3. API and SDK documentation](#53-api-and-sdk-documentation)\n  * [5.4. Usage example](#54-usage-example)\n- [6. `Money` API :package:](#6-money-api-package)\n  * [6.1. Standards compliance](#61-standards-compliance)\n  * [6.2. OpenAPI 2.0 Specs](#62-openapi-20-specs)\n  * [6.3. API documentation](#63-api-documentation)\n  * [6.4. Usage examples](#64-usage-examples)\n- [7. `PartyRelationship` API](#7-partyrelationship-api)\n  * [Roadmap](#roadmap)\n- [8. `Rule` API](#8-rule-api)\n  * [Roadmap](#roadmap-1)\n- [9. Customer relationship management (CRM) API](#9-customer-relationship-management-crm-api)\n  * [Roadmap](#roadmap-2)\n- [10. `Product` API](#10-product-api)\n  * [Roadmap](#roadmap-3)\n- [11. `Inventory` API](#11-inventory-api)\n  * [Roadmap](#roadmap-4)\n- [12. `Order` API](#12-order-api)\n  * [Roadmap](#roadmap-5)\n- [13. Product development and delivery](#13-product-development-and-delivery)\n  * [13.1. Built With](#131-built-with)\n  * [13.2. Prerequisite](#132-prerequisite)\n  * [13.3. Set up a development environment](#133-set-up-a-development-environment)\n  * [13.4. `npm-scripts`](#134-npm-scripts)\n- [14. DevSecOps](#14-devsecops)\n  * [14.1. Builds](#141-builds)\n  * [14.2. Tests and quality gates](#142-tests-and-quality-gates)\n    + [14.2.1. Swagger validation](#1421-swagger-validation)\n    + [14.2.2. Linting](#1422-linting)\n    + [14.3.3. Spec (unit test) execution and code coverage](#1433-spec-unit-test-execution-and-code-coverage)\n  * [14.3.4. Deploy/Publish](#1434-deploypublish)\n    + [14.3.4.1. Prerequisites](#14341-prerequisites)\n    + [14.3.4.2. Publish on `npm`](#14342-publish-on-npm)\n- [15. Style guides](#15-style-guides)\n  * [15.1. JavaScript source code](#151-javascript-source-code)\n  * [15.2. Color palette](#152-color-palette)\n- [16. Semantic version and `CHANGELOG`](#16-semantic-version-and-changelog)\n- [17. Contributing to `commonality/archetypes`](#17-contributing-to-commonalityarchetypes)\n  * [17.1. Contribution workflows summarized](#171-contribution-workflows-summarized)\n  * [17.2. Contributors](#172-contributors)\n- [18. Licenses](#18-licenses)\n\n\u003c!-- tocstop --\u003e\n\n## 1. Security\n\n`commonality/archetypes` provide model-driven OpenAPI specifications for pervasive business patterns. Some of these models contain sensitive personal or company data that require access control and privacy safeguards.\n\nNone of `commonality/archetypes'` specifications come with OpenAPI `securityDefinitions`. Before exposing any data, please apply the [principle of least privilege][least-privilege-url] with your own `securityDefinitions` as appropriate. _You must secure_ how sensitive data are stored and shared.\n\n## 2. Installation\n\nOpen a Terminal and run this command:\n\n```bash\nnpm install --save archetypes\n```\n\nIf your team prefers Yarn:\n\n```bash\nyarn add archetypes\n```\n\n### 2.1. Generating servers and clients\n\n\u003e ![quote][octicon-quote] [`swagger-api/swagger-codegen`][swagger-codegen-url] contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.\n\u003e\n\u003e Cheng, W., \u0026 Tam, T. (2011, August 15). swagger-api/swagger-codegen. Retrieved August 27, 2017, from https://github.com/swagger-api/swagger-codegen\n\n[Swagger Codegen][swagger-codegen-url] will generate servers and clients in many different languages and frameworks.\n\nFollow the [Installation][swagger-codegen-installation-url] and [Getting Starting][swagger-codegen-getting-started-url] instructions to generate and build servers and clients from workstations, CI-services, or Docker containers.\n\n### 2.2. Editing OpenAPI specs\n\n1. Go to https://editor.swagger.io/.\n1. Copy the `/archetypes/v1/{archetype}/{archetype}.yaml` specification of interest.\n1. Paste the `*.yaml` source into the editor pane.\n1. Select \"Generate Server\" or \"Generate Client\" and choose an option.\n1. If successful, you will prompted to download the ZIPped source code.\n\n## 3. Usage: API HTTP responses\n\n### 3.1. `curl`\n\nThe simplest way to test against mock objects at `http://api.swindle.net/archetypes/v1/parties` with `curl` in a Terminal.\n\n```bash\n$ curl \\\n  -X GET \"http://api.swindle.net/archetypes/v1/parties/2e908e75-69a9-47e2-83ae-0c3cc52da84c\" \\\n  -H \"accept: application/json\"\n```\n\n### 3.2. Swagger-UI\n\nGo to the [api.swindle.net Swagger-UI](http://api.swindle.net/swagger-ui/#/)'s \"**About**\" section and \"**Explore**\" the available Swagger Specs.\n\nThe following sections summarize all twelve business archetype patterns as they are released.\n\n## 4. `Party` API :package:\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Party`](./docs/api/archetypes/v1/party/js/README.md) archetype represents an identifiable, addressable entity that may have a legal status and that normally has autonomous control over (at least some of) its actions.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Party archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 122). Boston: Addison-Wesley.\n\n### 4.1. Standards compliance\n\n| Standard                                                                             | Contents                                               |\n| ------------------------------------------------------------------------------------ | ------------------------------------------------------ |\n| [OMG Party Management Facility Specification](http://www.omg.org/spec/PARTY/1.0/PDF) | A standard that supports party management.             |\n| [ISO 3166](https://www.iso.org/iso-3166-country-codes.html)                          | Two- and three-letter country codes and country names. |\n| [ISO/IEC 5218:2004](https://www.iso.org/standard/36266.html)                         | Codes for the representation of human sexes.           |\n| [ITU-T Recommendations](http://www.itu.int/rec/T-REC-E.164/en)                       | Telecommunication numbering plan.                      |\n\n### 4.2. Resources\n\n| Proposal                                    | Contents                                                                                            |\n| ------------------------------------------- | --------------------------------------------------------------------------------------------------- |\n| [63 Genders](https://apath.org/63-genders/) | A proposal for describing Gender as a combination of Physical, Personality and Preferential groups. |\n\n### 4.3. OpenAPI 2.0 Specs\n\n[![Party's Swagger validity][swagger-validity-party-badge-image]][swagger-validity-party-url] [`YAML`](http://api.swindle.net/archetypes/v1/schemas/parties/parties.yaml) (Content-Type: `application/x-yaml`)\n\n\u003c!-- AUTO-GENERATED-CONTENT:START (DIRTREE:dir=./schemas/v1/parties\u0026depth=1) --\u003e\n```\nparties/\n├── nominative.yaml\n├── parties.yaml\n└── unique-identifier.yaml\n```\n\u003c!-- AUTO-GENERATED-CONTENT:START (DIRTREE:dir=./schemas/v1/parties\u0026depth=1) --\u003e\u003c!-- AUTO-GENERATED-CONTENT:END --\u003e\n\n### 4.4. API and SDK documentation\n\n| Business archetype                                     | Definition                                                                                                                                  |\n| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`Organizations`][api-sdk-doc-party-organizations-url] | Administrative and functional structures                                                                                                    |\n| [`Parties`][api-sdk-doc-party-parties-url]             | Identifiable, addressable entity that may have a legal status and that normally has autonomous control over (at least some of) its actions. |\n| [`People`][api-sdk-doc-party-people-url]               | Human beings.                                                                                                                               |\n| [`Preferences`][api-sdk-doc-party-preferences-url]     | Choices of (or liking for) something, often from a set of possible or offered options.                                                      |\n\n### 4.5. Usage example\n\n**Retrieve a `Party` by identifier** with JavaScript:\n\n```js\nconst Party = require(\"party\");\n\nconst api = new Party.PartiesApi();\n\n// {String} The universally unique identifier associated with a Party.\nconst partyIdentifier = \"2e908e75-69a9-47e2-83ae-0c3cc52da84c\";\n\nconst callback = (error, data, response) =\u003e {\n  if (error) {\n    console.error(error);\n  } else {\n    console.log(\n      \"API called successfully. Returned data: \" + JSON.stringify(data, null, 2)\n    );\n  }\n  console.log(response);\n};\napi.getByPartyIdentifier(partyIdentifier, callback);\n```\n\n## 5. `Quantity` API :package:\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Quantity`](./docs/api/archetypes/v1/quantity/js/README.md) archetype represents an amount of something measured according to some standard of measurement.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Quantity archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 400). Boston: Addison-Wesley.\n\n### 5.1. Standards compliance\n\n\u003ctable\u003e   \u003cthead\u003e     \u003ctr\u003e\u003cth\u003eStandard\u003c/th\u003e\u003cth\u003eContents\u003c/th\u003e\u003c/tr\u003e   \u003c/thead\u003e   \u003ctfoot\u003e   \u003c/tfoot\u003e   \u003ctbody\u003e     \u003ctr\u003e       \u003ctd\u003e\u003ca href=\\\"http://www.bipm.org/en/measurement-units/\\\"\u003eSI\u003c/a\u003e       \u003ctd\u003eInternational System of Units\u0026mdash;Bureau International des Poids et Mesures (BIPM).     \u003c/tr\u003e   \u003c/tbody\u003e \u003c/table\u003e\n\n### 5.2. OpenAPI 2.0 Specs\n\n[![Quantity's Swagger validity][swagger-validity-quantity-badge-image]][swagger-validity-quantity-url] [`YAML`](http://api.swindle.net/archetypes/v1/schemas/quantities/quantities.yaml) (Content-Type: `application/x-yaml`)\n\n\u003c!-- AUTO-GENERATED-CONTENT:START (DIRTREE:dir=./schemas/v1/quantities\u0026depth=1) --\u003e\n```\nquantities/\n├── metric.yaml\n├── quantities.yaml\n├── quantity.yaml\n├── rounding-strategy.yaml\n├── si-system-of-units.yaml\n└── system-of-units.yaml\n```\n\u003c!-- AUTO-GENERATED-CONTENT:START (DIRTREE:dir=./schemas/v1/quantities\u0026depth=1) --\u003e\u003c!-- AUTO-GENERATED-CONTENT:END --\u003e\n\n### 5.3. API and SDK documentation\n\n[`JavaScript` client SDK (Node.js)](./docs/api/archetypes/v1/quantity/js/README.md) client SDK.\n\n### 5.4. Usage example\n\n**Retrieve an `SiBaseUnit` by identifier** with JavaScript:\n\n```js\nconst Quantity = require(\"quantity\");\n\nconst api = new Quantity.SIInternationalSystemOfUnitsApi();\n\n// {String} The name of the unit/metric.\nconst name = \"meter\";\n\nconst callback = (error, data, response) =\u003e {\n  if (error) {\n    console.error(error);\n  } else {\n    console.log(\n      \"API called successfully. Returned data: \" + JSON.stringify(data, null, 2)\n    );\n  }\n  console.log(response);\n};\n\napi.getBaseUnitByName(name, callback);\n```\n\n## 6. `Money` API :package:\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Money`](./docs/api/archetypes/v1/money/js/README.md) archetype represents an `amount` of a specific `Currency` that is `acceptedIn` one or more `Locales`.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Money archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 413). Boston: Addison-Wesley.\n\n### 6.1. Standards compliance\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\u003cth\u003eStandard\u003c/th\u003e\u003cth\u003eContents\u003c/th\u003e\u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctfoot\u003e\n  \u003c/tfoot\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ca href=\"http://www.omg.org/spec/CURR/1.0/PDF\"\u003eOMG Currency Specification v1.0\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eA standard to support international currency.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.iso.org/iso-4217-currency-codes.html\"\u003eISO 4217\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eThree- and two-letter currency codes, currency numbers, and currency names.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.iso.org/iso-3166-country-codes.html\"\u003eISO 3166\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eTwo-letter country codes and country names.\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 6.2. OpenAPI 2.0 Specs\n\n[![Quantity's Swagger validity][swagger-validity-money-badge-image]][swagger-validity-money-url] [`YAML`](http://api.swindle.net/archetypes/v1/schemas/money/money.spec.yaml) (Content-Type: `application/x-yaml`)\n\n\u003c!-- AUTO-GENERATED-CONTENT:START (DIRTREE:dir=./schemas/v1/money\u0026depth=1) --\u003e\n```\nmoney/\n├── currency.definition.yaml\n├── money.definition.yaml\n├── money.yaml\n├── payment-card.definition.yaml\n├── payment-method.definition.yaml\n├── payment.definition.yaml\n└── README.md\n```\n\u003c!-- AUTO-GENERATED-CONTENT:END --\u003e\n\n### 6.3. API documentation\n\n[`JavaScript` client SDK (Node.js)](./docs/api/archetypes/v1/money/js/README.md)\n\n### 6.4. Usage examples\n\n**Get all ISO 4217 `Currencies`** with JavaScript (Node.js):\n\n```js\nconst Money = require(\"money\");\n\nconst moneyApi = new Money.CurrencyApi();\n\nconst callback = (error, data, response) =\u003e {\n  if (error) {\n    console.error(error);\n  } else {\n    console.log(\n      \"API called successfully. Returned data: \" + JSON.stringify(data, null, 2)\n    );\n  }\n  console.log(response);\n};\n\nmoneyApi.getCurrencies(callback);\n```\n\n**Retrieve a `Currency` by its ISO 4217 alphabetic code** with JavaScript:\n\n```js\nconst Money = require(\"money\");\n\nconst moneyApi = new Money.CurrencyApi();\n\n// String | An alphabetic code that represents the currency.\nconst alphabeticCode = \"USD\";\n\nconst callback = (error, data, response) =\u003e {\n  if (error) {\n    console.error(error);\n  } else {\n    console.log(\n      \"API called successfully. Returned data: \" + JSON.stringify(data, null, 2)\n    );\n  }\n  console.log(response);\n};\n\nmoneyApi.getCurrencyByAlphabeticCode(alphabeticCode, callback);\n```\n\n## 7. `PartyRelationship` API\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`PartyRelationship`](./docs/api/archetypes/v1/party-relationship/js/README.md) captures the fact that there is a semantic relationship between two `Parties` in which each `Party` plays a specific role.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Archetype glossary. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 160). Boston: Addison-Wesley.\n\n### Roadmap\n\n[![icon-road-milestone-image] MVP3: PartyRelationships and Rules](https://github.com/commonality/archetypes/milestone/3)\n\n\u003c!--\n      ### 7.1. OpenAPI 2.0 Specs\n\n      [![Quantity's Swagger validity][swagger-validity-quantity-badge-image]][swagger-validity-quantity-url]\n\n      * [`JSON`](http://api.swindle.net/archetypes/v1/schemas/party-relationship/party-relationship.swagger.json)\n      * [`YAML`](http://api.swindle.net/archetypes/v1/schemas/party-relationship/party-relationship.yaml) (Content-Type: `application/x-yaml`)\n\n      ### 7.2. API documentation\n\n      * [`JavaScript`](./docs/api/archetypes/v1/party-relationship/js/README.md)\n      * [`Ruby`](./docs/api/archetypes/v1/party/party-relationship/README.md)\n\n\n      ### 7.3. Usage example\n\n      **Retrieve an `` by identifier** with JavaScript:\n\n      ```js\n\n      ```\n--\u003e\n\n## 8. `Rule` API\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Rule`](./docs/api/archetypes/v1/rule/js/README.md) archetype represents a constraint on the operation of the software systems of the business\u0026mdash;its semantics are defined by a sequence of `RuleElements`.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Archetype glossary. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 449). Boston: Addison-Wesley.\n\n### Roadmap\n\n[![icon-road-milestone-image] MVP3: PartyRelationships and Rules](https://github.com/commonality/archetypes/milestone/3)\n\n\u003c!--\n      ### 8.1. OpenAPI 2.0 Specs\n\n      [![Rule's Swagger validity][swagger-validity-rules-badge-image]][swagger-validity-rules-url]\n\n      * [`JSON`](http://api.swindle.net/archetypes/v1/schemas/rules/rules.swagger.json)\n      * [`YAML`](http://api.swindle.net/archetypes/v1/schemas/rules/rules.yaml) (Content-Type: `application/x-yaml`)\n\n      ### 8.2. API documentation\n\n      * [`JavaScript`](./docs/api/archetypes/v1/rules/js/README.md)\n      * [`Ruby`](./docs/api/archetypes/v1/rules/README.md)\n\n\n      ### 8.3. Usage example\n\n      **Retrieve an `` by identifier** with JavaScript:\n\n      ```js\n\n      ```\n--\u003e\n\n## 9. Customer relationship management (CRM) API\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] [Customer relationship management (CRM)](./docs/api/archetypes/v1/crm/README.md) is about actively managing the relationships between your business and your customers, in order to understand and increase customer value, motivation, and loyalty.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Customer relationship management archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 187). Boston: Addison-Wesley.\n\n### Roadmap\n\n[![icon-road-milestone-image] MVP4: Customer relationship management (CRM)](https://github.com/commonality/archetypes/milestone/4)\n\n\u003c!--\n      ### 9.1. OpenAPI 2.0 Specs\n\n      [![Customer relationship management (CRM) Swagger validity][swagger-validity-crm-badge-image]][swagger-validity-crm-url]\n\n      * [`JSON`](http://api.swindle.net/archetypes/v1/schemas/crm/crm.swagger.json)\n      * [`YAML`](http://api.swindle.net/archetypes/v1/schemas/crm/crm.yaml) (Content-Type: `application/x-yaml`)\n\n      ### 9.2. API documentation\n\n      * [`JavaScript`](./docs/api/archetypes/v1/crm/js/README.md)\n      * [`Ruby`](./docs/api/archetypes/v1/crm/README.md)\n\n\n      ### 9.3. Usage example\n\n      **Retrieve an `` by identifier** with JavaScript:\n\n      ```js\n\n      ```\n--\u003e\n\n## 10. `Product` API\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Product`](./docs/api/archetypes/v1/product/js/README.md) archetype pattern represents a generalized model for products.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Product archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 207). Boston: Addison-Wesley.\n\n### Roadmap\n\n[![icon-road-milestone-image] MVP5: Product](https://github.com/commonality/archetypes/milestone/5)\n\n\u003c!--\n      ### 10.1. OpenAPI 2.0 Specs\n\n      [![Product's Swagger validity][swagger-validity-product-badge-image]][swagger-validity-product-url]\n\n      * [`JSON`](http://api.swindle.net/archetypes/v1/schemas/product/product.swagger.json)\n      * [`YAML`](http://api.swindle.net/archetypes/v1/schemas/product/product.yaml) (Content-Type: `application/x-yaml`)\n\n      ### 10.2. API documentation\n\n      * [`JavaScript`](./docs/api/archetypes/v1/product/js/README.md)\n      * [`Ruby`](./docs/api/archetypes/v1/product/README.md)\n\n\n      ### 10.3. Usage example\n\n      **Retrieve an `` by identifier** with JavaScript:\n\n      ```js\n\n      ```\n--\u003e\n\n## 11. `Inventory` API\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Inventory`](./docs/api/archetypes/v1/inventory/js/README.md) archetype represents a collection of `InventoryEntries` held in stock by a business.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Inventory archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 271). Boston: Addison-Wesley.\n\n### Roadmap\n\n[![icon-road-milestone-image] MVP6: Inventory](https://github.com/commonality/archetypes/milestone/6)\n\n\u003c!--\n      ### 11.1. OpenAPI 2.0 Specs\n\n      [![Inventory's Swagger validity][swagger-validity-inventory-badge-image]][swagger-validity-inventory-url]\n\n      * [`JSON`](http://api.swindle.net/archetypes/v1/schemas/inventory/inventory.swagger.json)\n      * [`YAML`](http://api.swindle.net/archetypes/v1/schemas/inventory/inventory.yaml) (Content-Type: `application/x-yaml`)\n\n      ### 11.2. API documentation\n\n      * [`JavaScript`](./docs/api/archetypes/v1/inventory/js/README.md)\n      * [`Ruby`](./docs/api/archetypes/v1/inventory/README.md)\n\n\n      ### 11.3. Usage example\n\n      **Retrieve an `` by identifier** with JavaScript:\n\n      ```js\n\n      ```\n--\u003e\n\n## 12. `Order` API\n\n![REST API][rest-api-image]\n\n\u003e ![quote][octicon-quote] The [`Order`](./docs/api/archetypes/v1/order/js/README.md) archetype represents a request by a buyer for a seller to supply some goods or services.\n\u003e\n\u003e Arlow, J., \u0026 Neustadt, I. (2006). Inventory archetype pattern. In [_Enterprise patterns and MDA: building better software with archetype patterns and UML_][mda-book-url] (p. 271). Boston: Addison-Wesley.\n\n### Roadmap\n\n[![icon-road-milestone-image] MVP7: Inventory](https://github.com/commonality/archetypes/milestone/7)\n\n## 13. Product development and delivery\n\n![Packaging][icon-package-image]\n\n\u003e [![PRs Welcome][prs-welcome-badge-image]][prs-welcome-url] We welcome contributors and pull requests!\n\u003e\n\u003e Interested in development contributions? Great! Check out our guidelines for [Contributing to `archetypes`][contributing-url] for details.\n\n### 13.1. Built With\n\n[![StackShare][stack-share-badge-image]][stack-share-news-feed-url]\n\n`archetypes` requires the following [tech-stack][stack-share-news-feed-url] to either run, build, test, or deploy:\n\n\u003c!-- AUTO-GENERATED-CONTENT:START (DEPENDENCYTABLE:dev=true) --\u003e\n| **Dependency** | **Description** | **Version** | **License** | **Type** |\n| -------------- | --------------- | ----------- | ----------- | -------- |\n | [@babel/core@^7.1.6](https://babeljs.io/) | Babel compiler core. | 7.1.6 | MIT | dev | \n | [all-contributors-cli@^5.4.1](https://github.com/jfmengels/all-contributors-cli#readme) | Tool to easily add recognition for new contributors | 5.4.1 | MIT | dev | \n | [audit@0.0.6](https://github.com/Weltschmerz/Audit#readme) | Generate performance statistics for async or sync functions | 0.0.6 | UNLICENSED | dev | \n | [babel-jest@^23.6.0](https://github.com/facebook/jest#readme) | Jest plugin to use babel for transformation. | 23.6.0 | MIT | dev | \n | [babel-preset-env@^1.7.0](https://babeljs.io/) | A Babel preset for each environment. | 1.7.0 | MIT | dev | \n | [babelify@^10.0.0](https://github.com/babel/babelify) | Babel browserify transform | 10.0.0 | MIT | dev | \n | [commitplease@^3.2.0](https://github.com/jzaefferer/commitplease#readme) | Validates strings as commit messages | 3.2.0 | MIT | dev | \n | [coveralls@^3.0.2](https://github.com/nickmerwin/node-coveralls#readme) | takes json-cov output into stdin and POSTs to coveralls.io | 3.0.2 | BSD-2-Clause | dev | \n | [eslint@^5.9.0](https://eslint.org) | An AST-based pattern checker for JavaScript. | 5.9.0 | MIT | dev | \n | [eslint-config-standard@^12.0.0](https://github.com/standard/eslint-config-standard) | JavaScript Standard Style - ESLint Shareable Config | 12.0.0 | MIT | dev | \n | [eslint-config-xo-space@^0.20.0](https://github.com/xojs/eslint-config-xo-space#readme) | ESLint shareable config for XO with 2-space indent | 0.20.0 | MIT | dev | \n | [eslint-plugin-import@^2.14.0](https://github.com/benmosher/eslint-plugin-import) | Import with sanity. | 2.14.0 | MIT | dev | \n | [eslint-plugin-jest@^22.1.0](https://github.com/jest-community/eslint-plugin-jest#readme) | Eslint rules for Jest | 22.1.0 | MIT | dev | \n | [eslint-plugin-jsdoc@^3.9.1](https://github.com/gajus/eslint-plugin-jsdoc#readme) | JSDoc linting rules for ESLint. | 3.9.1 | BSD-3-Clause | dev | \n | [eslint-plugin-no-unsafe-innerhtml@^1.0.16](https://github.com/mozfreddyb/eslint-plugin-no-unsafe-innerhtml/) | custom ESLint rule to disallows unsafe innerHTML, outerHTML and insertAdjacentHTML | 1.0.16 | MPL-2.0 | dev | \n | [eslint-plugin-no-unsanitized@^3.0.2](https://github.com/mozilla/eslint-plugin-no-unsanitized/) | ESLint rule to disallow unsanitized code | 3.0.2 | MPL-2.0 | dev | \n | [eslint-plugin-node@^8.0.0](https://github.com/mysticatea/eslint-plugin-node#readme) | Additional ESLint's rules for Node.js | 8.0.0 | MIT | dev | \n | [eslint-plugin-promise@^4.0.1](https://github.com/xjamundx/eslint-plugin-promise#readme) | Enforce best practices for JavaScript promises | 4.0.1 | ISC | dev | \n | [eslint-plugin-scanjs-rules@^0.2.1](https://github.com/mozfreddyb/eslint-plugin-scanjs-rules/) | ESLint plugin that contains ScanJS rules | 0.2.1 | MPL-2.0 | dev | \n | [eslint-plugin-security@^1.4.0](https://github.com/nodesecurity/eslint-plugin-security#readme) | Security rules for eslint | 1.4.0 | Apache-2.0 | dev | \n | [eslint-plugin-standard@^4.0.0](https://github.com/standard/eslint-plugin-standard#readme) | ESlint Plugin for the Standard Linter | 4.0.0 | MIT | dev | \n | [eslint-plugin-xss@^0.1.9](https://github.com/Rantanen/eslint-plugin-xss#readme) | Validates XSS related issues of mixing HTML and non-HTML content in variables. | 0.1.9 | ISC | dev | \n | [jest@^23.6.0](https://jestjs.io/) | Delightful JavaScript Testing. | 23.6.0 | MIT | dev | \n | [jest-cli@^23.6.0](https://jestjs.io/) | Delightful JavaScript Testing. | 23.6.0 | MIT | dev | \n | [jest-config@^23.6.0](https://github.com/facebook/jest#readme) |  | 23.6.0 | MIT | dev | \n | [markdown-magic@^0.1.25](https://github.com/DavidWells/markdown-magic#readme) | Automatically update markdown files with content from external sources | 0.1.25 | MIT | dev | \n | [markdown-magic-dependency-table@^1.3.2](https://github.com/camacho/markdown-magic-dependency-table#readme) | Generate table of information about dependencies automatically in markdown | 1.3.2 | MIT | dev | \n | [markdown-magic-directory-tree@^1.2.3](https://github.com/camacho/markdown-magic-directory-tree#readme) | Print an archy tree for markdown file | 1.2.3 | MIT | dev | \n | [markdown-magic-github-contributors@0.0.3](https://npmjs.org/package/markdown-magic-github-contributors) | Add github contributors to markdown file | 0.0.3 | MIT | dev | \n | [markdown-magic-package-scripts@^1.2.1](https://github.com/camacho/markdown-magic-package-scripts#readme) | Print list of scripts in package.json with descriptions | 1.2.1 | MIT | dev | \n | [markdown-magic-subpackage-list@^1.1.1](https://github.com/camacho/markdown-magic-subpackage-list#readme) | Print a list of subpackages for markdown file | 1.1.1 | MIT | dev | \n | [markdown-toc@^1.2.0](https://github.com/jonschlinkert/markdown-toc) | Generate a markdown TOC (table of contents) with Remarkable. | 1.2.0 | MIT | dev | \n | [prettier@^1.15.2](https://prettier.io) | Prettier is an opinionated code formatter | 1.15.2 | MIT | dev | \n | [semantic-release@^15.12....](https://github.com/semantic-release/semantic-release#readme) | Automated semver compliant package publishing | 15.12.2 | MIT | dev | \n | [snyk@^1.110....](https://github.com/snyk/snyk#readme) | snyk library and cli utility | 1.110.2 | Apache-2.0 | dev | \n | [sonar-scanner@^3.1.0](https://github.com/bcaudan/node-sonar-scanner) | Wrap sonar-scanner as a node module | 3.1.0 | MIT | dev | \n | [standard-version@^4.4.0](https://github.com/conventional-changelog/standard-version#readme) | replacement for `npm version` with automatic CHANGELOG generation | 4.4.0 | ISC | dev | \n | [swagger-parser@^6.0.2](https://apidevtools.org/swagger-parser/) | Swagger 2.0 and OpenAPI 3.0 parser and validator for Node and browsers | 6.0.2 | MIT | dev | \n | [synk@0.0.2](https://github.com/nicksweet/synk#readme) | schronize a remote directory with a local one, then run a series of preset commands on the server | 0.0.2 | UNLICENSED | dev | \n | [travis-deploy-once@^5.0.9](https://github.com/semantic-release/travis-deploy-once#readme) | Run a deployment script only once in the Travis test matrix | 5.0.9 | MIT | dev | \n\u003c!-- AUTO-GENERATED-CONTENT:END --\u003e\n\n**_Keep track of `archetypes'` tech-stack with these news and RSS feeds._**\n\n\u003e - [![StackShare news feed][stack-share-news-feed-image] **StackShare News Feed:** Read the latest news about the tools and dependencies `commonality/archetypes`][stack-share-news-feed-url].\n\u003e - [![StackShare RSS feed][stack-share-rss-feed-image] **StackShare RSS Feed:** Subscribe to news about `archetypes's` tools and dependencies][stack-share-rss-feed-url].\n\n### 13.2. Prerequisite\n\n[**`Node.js`**][nodejs-url]: `commonality/archetypes` product development and delivery require `Node.js` (version 6.x or greater) and its package manager, `npm`. for build, test, and release tasks.\n\n### 13.3. Set up a development environment\n\nHere's a brief intro about what a developer must do in order to start developing the project further:\n\n```shell\n$ git clone https://github.com/commonality/archetypes.git\n$ cd archetypes/\n$ npm install\n```\n\n### 13.4. `npm-scripts`\n\nSoftware modules often have funky, irrelative names, which is why we **prefix _custom_ tasks** by their responsibility and purpose.\n\n| Prefix      | Definition                                                                            |\n| ----------- | ------------------------------------------------------------------------------------- |\n| `build*`    | Source code distribution tasks.                                                       |\n| `docs*`     | API documentation and automation tasks.                                               |\n| `lint*`     | Code style, standards, and vulnerabilty assessments (as well as fixes, if available). |\n| `release`   | Bump the product's semver, update docs, commit, and publish to the `npm` registry.    |\n| `security*` | Security vulnerabilty checks.                                                         |\n\nThe following CLI [`npm-scripts`][npm-scripts-docs-url] are available to you (assuming you're human, gentle reader) and CI-services.\n\n\u003c!-- AUTO-GENERATED-CONTENT:START (SCRIPTS) --\u003e\n| Script | Description |\n|--------|-------------|\n| `build:bundle:all` | `npm run build:bundle:money \u0026\u0026 npm run build:bundle:parties \u0026\u0026 npm run build:bundle:quantities` |\n| `build:bundle:money` | `swagger bundle --dereference --outfile ./schemas/v1/money/money.bundle.json ./schemas/v1/money/money.spec.yaml` |\n| `build:bundle:parties` | `swagger bundle --dereference --outfile ./schemas/v1/parties/parties.bundle.json ./schemas/v1/parties/parties.yaml` |\n| `build:bundle:quantities` | `swagger bundle --dereference --outfile ./schemas/v1/quantities/quantities.bundle.json ./schemas/v1/quantities/quantities.yaml` |\n| `docs` | `node generate-docs.js \u0026\u0026 npm run docs:toc` |\n| `docs:contributors` | `all-contributors` |\n| `docs:contributors:add` | `all-contributors add` |\n| `docs:contributors:generate` | `all-contributors generate` |\n| `docs:toc` | `./node_modules/.bin/markdown-toc -i README.md` |\n| `lint` | `npm run lint:js \u0026\u0026 npm run lint:swagger:all` |\n| `lint:js` | `eslint . --fix` |\n| `lint:md` | `prettier --write README.md` |\n| `lint:sonar` | `node_modules/sonar-scanner/bin/sonar-scanner` |\n| `lint:swagger:all` | `npm run lint:swagger:parties` |\n| `lint:swagger:money` | `swagger validate schemas/v1/money/money.spec.yaml --debug` |\n| `lint:swagger:parties` | `swagger validate schemas/v1/parties/parties.yaml --debug` |\n| `lint:swagger:quantities` | `swagger validate schemas/v1/quantities/quantities.yaml --debug` |\n| `postbump` | `echo $npm_package_version` |\n| `prepublishOnly` | `npm run docs` |\n| `preversion` | `npm run docs` |\n| `security` | `npm run security:nsp:scan \u0026\u0026 npm run security:snyk:all` |\n| `security:audit` | `npm run security:audit:scan` |\n| `security:audit:scan` | `npm audit` |\n| `security:snyk` | `snyk` |\n| `security:snyk:all` | `npm run security:snyk:auth \u0026\u0026 npm run security:snyk:monitor \u0026\u0026 npm run security:snyk:scan` |\n| `security:snyk:auth` | `snyk auth $SNYK_TOKEN` |\n| `security:snyk:monitor` | `snyk monitor --org=commonality` |\n| `security:snyk:scan` | `snyk test` |\n| `standard-version` | `standard-version` |\n| `test` | `jest --config=jest.config.json` |\n| `posttest` | `npm run security \u0026\u0026 npm run docs` |\n\u003c!-- AUTO-GENERATED-CONTENT:START (SCRIPTS) --\u003e\n\u003c!-- AUTO-GENERATED-CONTENT:END --\u003e\n\n## 14. DevSecOps\n\n`commonality/archetypes` triggers Travis CI builds to execute the `ESLint`, the `Jest` test runner, and `Node Security Platform (NSP)` analysis. Code coverage reports are then sent to Coveralls and SonarCloud.\n\n### 14.1. Builds\n\n\u003e ![Travis CI][icon-travis-image]\n\u003e\n\u003e `commonality/archetypes` uses [Travis CI][travis-url] for continuous integration.\n\nFor details, please review the [`.travis.yml` build file](./.travis.yml).\n\n### 14.2. Tests and quality gates\n\nThis repository enforces Swagger quality; Javascript quality; and Javascript unit tests and code coverage.\n\n#### 14.2.1. Swagger validation\n\n\u003e ![Swagger][icon-swagger-image]\n\u003e\n\u003e `commonality/archetypes` validates Swagger docs with [`swagger-cli`][swagger-cli-url].\n\n[`swagger-cli`][swagger-cli-url] validation runs before every test execution:\n\n```bash\n# These two npm-scripts run lint automatically:\n$ npm run pretest\n\n$ npm test\n\n# Only lint the Party OpenAPI specification:\n$ npm run lint:swagger:party\n\n# You can also validate your Swagger docs independently with:\n$ npm run lint:swagger:all\n\n```\n\n[`swagger-api/validator-badge`](https://github.com/swagger-api/validator-badge)s display whether there are syntactic issues with you Swagger/OpenAPI 2.0 document.\n\n#### 14.2.2. Linting\n\n\u003e ![ESLint][icon-eslint-image]\n\u003e\n\u003e `commonality/archetypes` lints with `ESLint` and displays real-time results with README badges.\n\n```bash\n# Code quality analysis runs before every test execution:\n$ npm test\n\n# Only validate JavaScript and OpenAPI specs\n$ npm run lint\n\n# Only run ESLint:\n$ npm run lint:js\n```\n\n#### 14.3.3. Spec (unit test) execution and code coverage\n\n\u003e ![Jest][icon-jest-image]\n\u003e\n\u003e `commonality/archetypes` uses `jest` for BDD spec execution and code coverage analysis. The results are displayed real-time with README badges.\n\nGenerate detailed code coverage reports at `coverage/lcov-report/index.html` and `lcov.info` and `clover.xml` files (which you can send to CI test coverage services like Coveralls and [OneSonarQube][one-sonar-url] or [SonarCloud][sonarcloud-url]):\n\n```bash\n$ npm test\n```\n\n### 14.3.4. Deploy/Publish\n\n\u003e **[![Conventional Commits][conventional-commits-badge-image]][conventional-commits-url] with [Angular commit conventions][angularjs-commit-message-guidelines-url]**\n\u003e\n\u003e Contributors must follow the [Angular commit conventions][angularjs-commit-message-guidelines-url] in order to support automated `CHANGELOG`, `package.json`, Git release `tags`, and semantic version updates.\n\n#### 14.3.4.1. Prerequisites\n\nOnce a PR has been approved (and passes all checks), topic branches are are merged into `master` on GitHub.\n\n1. On the GitHub PR page, select _Squash and Merge_.\n2. Add a `\u003ctitle\u003e`, `\u003cbody\u003e`, and `\u003cfooter\u003e` that comply with the [Conventional Commits Specfication][conventional-commits-url].\n\n#### 14.3.4.2. Publish on `npm`\n\nWhen you're ready to release (i.e., publish to `npm` or a local Node package registry), open a Terminal and follow these steps:\n\n1. Checkout and pull the latest from `master`:\n\n```shell\n$ git checkout master; git pull origin master\n```\n\n2. Create and document a new semantic version:\n\n```shell\n# The npm-script \"release\" executes standard-version\n$ npm release\n```\n\n`npm release` executes an npm-script that will:\n\n1. Bump the version in `package.json`\n2. Update `CHANGELOG.md` (with [`conventional-changelog`][conventional-changelog-url])\n3. Commit `package.json` and `CHANGELOG.md`\n4. Tag a new release\n\n5. Push all changes, the new version `tag` to `master`, and publish on `npm`:\n\n```shell\n$ git push --follow-tags origin master; npm publish\n```\n\n\u003e ![Read more...][icon-user-manual-image] For `standard-version` configuration details, [read \"Cut a Release\" on the `conventional-changelog/standard-version's README` page][standard-version-cut-a-release-url].\n\n## 15. Style guides\n\n### 15.1. JavaScript source code\n\n\u003e [![JavaScript Style Guide][standardjs-badge-image]][standardjs-url]\n\u003e\n\u003e Whenever you run `npm test`, `ESLint` will automatically reformat your JavaScript to ensure that all souce code conforms to the [JavaScript Standard Style][standardjs-url].\n\nOpen a Terminal and run any of these commands to ensure your JavaScript source code meets the [JavaScript Standard Style][standardjs-url]:\n\n- **Only lint JavaScript source code** (with `ESLint`):\n\n```shell\n# Runs eslint . --fix\n$ npm run lint:js\n```\n\n- **Lint source _and_ validate OpenAPI specs:**\n\n```shell\n# Lint source and validate OpenAPI specs:\n$ npm run pretest\n```\n\n- **Or run _all_ quality gates** (including source code linting):\n\n```shell\n# Or run lint and all other quality gates:\n$ npm test\n```\n\n### 15.2. Color palette\n\nThe `archetypes` documentation uses this color palette:\n\n[![Color palette][archetypes-color-palette-image]][coolor-palette-url]\n\nThe colors are (from left to right):\n\n- `#CFDBD5`: Light Grey\n- `#E8EDDF`: Platinum\n- `#F5CB5C`: Stil de Grain Yellow\n- `#242423`: Raisin Black\n- `#333533`: Jet\n\nView the palette as [PDF][archetypes-color-palette-pdf-url], [PNG][archetypes-color-palette-png-url], [SCSS][archetypes-color-palette-scss-url], or on [coolors.com][coolor-palette-url].\n\n## 16. Semantic version and `CHANGELOG`\n\nThe latest version of `commonality/archetypes` is `0.0.0`. View the [`CHANGELOG`][changelog-url] for details.\n\n## 17. Contributing to `commonality/archetypes`\n\n**[![PRs Welcome][prs-welcome-badge-image]][prs-welcome-url] We welcome contributors and pull requests!**\n\nContributions are community-driven stories with a beginning, a middle, and an end, all told through issues, comments, and pull requests. If you're interested in collaborating, please review the:\n\n- [Code of Conduct][code-of-conduct-url]\n- [Contributing][contributing-url] to `commonality/archetypes`\n\n### 17.1. Contribution workflows summarized\n\nWe use the [Git feature-branch-workflow][git-workflow-feature-branch-tutorial-url] to accept modifications, where contributors:\n\n1. Create an issue related to the problem you want to fix (good for traceability and cross-reference)\n1. Label the issue as\n   - `Type: Defect` or\n   - `Type: Feature`\n1. Fork the repository\n1. Create a branch (optionally with the reference to the issue in the name)\n1. Work it\n1. Commit incrementally with readable and detailed commit messages\n1. Submit a pull-request against the `master` branch of this repository.\n\nWe'll take care of tagging your issue with the appropriated labels and answer within a week (hopefully less!) to the problem you encounter.\n\n### 17.2. Contributors\n\nThanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore --\u003e\n| [\u003cimg src=\"https://avatars3.githubusercontent.com/u/2849690?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGreg Swindle\u003c/b\u003e\u003c/sub\u003e](http://swindle.net/)\u003cbr /\u003e[💻](https://github.com/commonality/archetypes/commits?author=gregswindle \"Code\") [🎨](#design-gregswindle \"Design\") [📖](https://github.com/commonality/archetypes/commits?author=gregswindle \"Documentation\") [💡](#example-gregswindle \"Examples\") [⚠️](https://github.com/commonality/archetypes/commits?author=gregswindle \"Tests\") | [\u003cimg src=\"https://avatars3.githubusercontent.com/in/505?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003egreenkeeper[bot]\u003c/b\u003e\u003c/sub\u003e](https://github.com/apps/greenkeeper)\u003cbr /\u003e[⚠️](https://github.com/commonality/archetypes/commits?author=greenkeeper[bot] \"Tests\") |\n| :---: | :---: |\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!\n\n## 18. Licenses\n\n[Apache-2.0][license-url] © [Greg Swindle](https://githbub.com/commonality).\n\n**Third-party licenses:** Please see the [NOTICE](https://app.fossa.io/attribution/996c102c-ccb4-403f-8b02-abdadbbdaaa8) document for 3rd-Party Software information, or select the FOSSA badge below.\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fcommonality%2Farchetypes.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fcommonality%2Farchetypes?ref=badge_large)\n\n---\n\n[![Code Style Guide for JavaScript][standardjs-badge-image]][standardjs-url]\n[![Conventional Commits][conventional-commits-badge-image]][conventional-commits-url]\n[![Greenkeeper badge][greenkeeper-badge-image]][greenkeeper-url]\n[![Readme Score][readme-score-badge-image]][readme-score-url]\n[![StackShare][stack-share-badge-image]][stack-share-url]\n\nGraphic art by [icons8][icons8-license-url].\n\n---\n\n\u003c!-- ⛔️ 📝 NOTE: PLEASE ALPHABETIZE LINK REFERENCES. 📝 ⛔️ --\u003e\n\n[angularjs-commit-message-guidelines-url]: https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit\n[api-sdk-doc-party-organizations-url]: https://github.com/commonality/archetypes/wiki/Party-SDK#organizations-api\n[api-sdk-doc-party-parties-url]: https://github.com/commonality/archetypes/wiki/Party-SDK#parties-api\n[api-sdk-doc-party-people-url]: https://github.com/commonality/archetypes/wiki/Party-SDK#people-api\n[api-sdk-doc-party-preferences-url]: https://github.com/commonality/archetypes/wiki/Party-SDK#preferences-api\n[archetypes-color-palette-image]: ./docs/style-guide/archetypes-color-palette.png\n[archetypes-color-palette-pdf-url]: ./docs/style-guide/archetypes-color-palette.pdf\n[archetypes-color-palette-png-url]: ./docs/style-guide/archetypes-color-palette.png\n[archetypes-color-palette-scss-url]: ./docs/style-guide/archetypes-color-palette.scss\n[business-archetypes-logo-image]: ./docs/img/logo-commonalaxy.png\n[changelog-url]: ./CHANGELOG.md\n[cla-url]: https://www.clahub.com/agreements/commonality/archetypes\n[codacy-badge-image]: https://img.shields.io/codacy/grade/de7b30825ac649de8b7255e4303fb069.svg?style=flat-square\n[codacy-url]: https://www.codacy.com/app/commonality/archetypes?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=commonality/archetypes\u0026utm_campaign=Badge_Grade\n[code-of-conduct-url]: ./.github/CODE_OF_CONDUCT.md\n[complexity-report-url]: ./docs/COMPLEXITY.md\n[contributing-url]: ./.github/CONTRIBUTING.md\n[conventional-changelog-url]: https://github.com/conventional-changelog/conventional-changelog\n[conventional-commits-badge-image]: https://img.shields.io/badge/conventional%20commits-1.0.0-yellow.svg?style=flat-square\n[conventional-commits-url]: https://conventionalcommits.org/\n[coolor-palette-url]: https://coolors.co/cfdbd5-e8eddf-f5cb5c-242423-333533\n[coveralls-badge-image]: https://img.shields.io/coveralls/repos/commonality/archetypes/badge.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/commonality/archetypes\n[david-dm-badge-image]: https://img.shields.io/david/dev/commonality/archetypes.svg?style=flat-square\n[david-dm-dev-badge-image]: https://img.shields.io/david/commonality/archetypes.svg?style=flat-square\n[daviddm-dev-url]: https://david-dm.org/commonality/archetypes?type=dev\n[daviddm-url]: https://david-dm.org/commonality/archetypes\n[fossa-badge-image]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fcommonality%2Farchetypes.svg?type=shield\n[fossa-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fcommonality%2Farchetypes?ref=badge_shield\n[gh-standardjs-url]: https://github.com/feross/standard\n[git-workflow-feature-branch-tutorial-url]: https://www.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow\n[go-api-url]: ./docs/api/archetypes/v1/party/golang/README.md\n[greenkeeper-badge-image]: https://badges.greenkeeper.io/commonality/archetypes.svg?style=flat-square\n[greenkeeper-url]: https://greenkeeper.io/\n[icon-eslint-image]: ./docs/img/tech-stack/icon-eslint-50.jpeg\n[icon-jest-image]: ./docs/img/tech-stack/icon-jest-50.jpeg\n[icon-nodejs-image]: ./docs/img/tech-stack/icon-nodejs-50.png\n[icon-npm-image]: ./docs/img/tech-stack/icon-npm-50.png\n[icon-package-image]: ./docs/img/icons8/icon-package-filled.png\n[icon-road-milestone-image]: ./docs/img/icons8/img-goal-filled-50.png\n[icon-share-stack-image]: ./docs/img/tech-stack/icon-swagger-50.png\n[icon-standardjs-image]: ./docs/img/tech-stack/icon-standardjs-50.png\n[icon-swagger-image]: ./docs/img/tech-stack/icon-swagger-50.png\n[icon-travis-image]: ./docs/img/icons8/travis-ci-50.png\n[icon-user-manual-image]: ./docs/img/icons8/icon-user-manual-grey-50.png\n[icon-yeoman-image]: ./docs/img/tech-stack/icon-yeoman-50.png\n[icons8-license-url]: https://icons8.com/license/\n[issues-new-url]: https://github.com/commonality/archetypes/issues/new\n[issues-url]: https://github.com/commonality/archetypes/issues\n[js-api-url]: ./docs/api/archetypes/v1/party/js/README.md\n[least-privilege-url]: https://en.wikipedia.org/wiki/Principle_of_least_privilege\n[license-image]: https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square\n[license-url]: LICENSE\n[markdown-toc-url]: https://github.com/jonschlinkert/markdown-toc\n[mda-book-url]: https://www.amazon.com/Enterprise-Patterns-MDA-Building-Archetype/dp/032111230X\n[nodejs-url]: https://nodejs.org/\n[npm-badge-image]: https://img.shields.io/npm/v/archetypes.svg?style=flat-square\n[npm-scripts-docs-url]: https://docs.npmjs.com/misc/scripts\n[npm-url]: https://npmjs.org/package/archetypes\n[nsp-badge-image]: https://nodesecurity.io/orgs/commonality/projects/3706b82c-bf9a-44f0-9d77-c489b6c11dff/badge?style=flat-square\n[nsp-sign-up-url]: https://nodesecurity.io/signup\n[nsp-url]: https://nodesecurity.io/orgs/commonality/projects/3706b82c-bf9a-44f0-9d77-c489b6c11dff\n[party-swagger-json-url]: http://api.swindle.net/archetypes/v1/schemas/parties/parties.yaml\n[party-swagger-yaml-url]: http://api.swindle.net/archetypes/v1/schemas/parties/parties.yaml\n[pr-url]: /commonality/archetypes/pulls\n[product-development-guidelines-url]: ./.github/PRODUCT_DEVELOPEMENT_GUIDELINES.md\n[prs-welcome-badge-image]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\n[prs-welcome-url]: http://makeapullrequest.com\n[rb-api-url]: ./docs/api/archetypes/v1/party/ruby/README.md\n[readme-score-badge-image]: http://readme-score-api.herokuapp.com/score.svg?style=flat-square\u0026url=https://github.com/commonality/archetypes\n[readme-score-url]: http://clayallsopp.github.io/readme-score?url=https://github.com/commonality/archetypes\n[rest-api-image]: ./docs/img/icons8/icon-rest-api.png\n[snyk-vulnerabilities-badge-image]: https://snyk.io/test/github/commonality/archetypes/badge.svg?style=flat-square\n[snyk-vulnerabilities-url]: https://snyk.io/test/github/commonality/archetypes\n[sonarcloud-url]: https://sonarcloud.io\n[stack-share-badge-image]: https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat-square\n[stack-share-news-feed-image]: ./docs/img/tech-stack/icon-news-feed-50.png\n[stack-share-news-feed-url]: https://stackshare.io/news/filter/75847/1724/save\n[stack-share-rss-feed-image]: ./docs/img/tech-stack/icon-rss-feed-50.png\n[stack-share-rss-feed-url]: https://stackshare.io/news/75847/1724/feed\n[stack-share-url]: https://stackshare.io/commonality/archetypes\n[standard-version-cut-a-release-url]: https://github.com/conventional-changelog/standard-version#cut-a-release\n[standardjs-badge-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg?style=flat-square\n[standardjs-url]: https://standardjs.com/\n[swagger-api-docs-url]: ./docs/SWAGGER.md\n[swagger-cli-url]: https://github.com/BigstickCarpet/swagger-cli\n[swagger-codegen-getting-started-url]: https://github.com/swagger-api/swagger-codegen#getting-started\n[swagger-codegen-installation-url]: https://github.com/swagger-api/swagger-codegen#compatibility\n[swagger-codegen-url]: https://github.com/swagger-api/swagger-codegen\n[swagger-io-url]: http://swagger.io\n[swagger-markdown-url]: https://github.com/syroegkin/swagger-markdown\n[swagger-validity-money-badge-image]: https://img.shields.io/swagger/valid/2.0/http/api.swindle.net/archetypes/v1/schemas/money/money.spec.yaml.svg?style=flat-square\n[swagger-validity-money-url]: https://online.swagger.io/validator/debug?url=http://api.swindle.net/archetypes/v1/schemas/money/money.spec.yaml\n[swagger-validity-party-badge-image]: https://img.shields.io/swagger/valid/2.0/http/api.swindle.net/archetypes/v1/schemas/parties/parties.yaml.svg?style=flat-square\n[swagger-validity-party-url]: https://online.swagger.io/validator/debug?url=http://api.swindle.net/archetypes/v1/schemas/parties/parties.yaml\n[swagger-validity-quantity-badge-image]: https://img.shields.io/swagger/valid/2.0/http/api.swindle.net/archetypes/v1/schemas/quantities/quantities.yaml.svg?style=flat-square\n[swagger-validity-quantity-url]: https://online.swagger.io/validator/debug?url=http://api.swindle.net/archetypes/v1/schemas/quantities/quantities.yaml\n[travis-badge-image]: https://img.shields.io/travis/commonality/archetypes.svg?branch=master\u0026style=flat-square\n[travis-url]: https://travis-ci.org/commonality/archetypes\n\n\u003c!-- ⛔️ Octicon img references ⛔️  --\u003e\n\n[octicon-alert]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/alert.svg\n[octicon-arrow-down]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-down.svg\n[octicon-arrow-left]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-left.svg\n[octicon-arrow-right]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-right.svg\n[octicon-arrow-small-down]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-small-down.svg\n[octicon-arrow-small-left]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-small-left.svg\n[octicon-arrow-small-right]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-small-right.svg\n[octicon-arrow-small-up]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-small-up.svg\n[octicon-arrow-up]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/arrow-up.svg\n[octicon-beaker]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/beaker.svg\n[octicon-bell]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/bell.svg\n[octicon-bold]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/bold.svg\n[octicon-book]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/book.svg\n[octicon-bookmark]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/bookmark.svg\n[octicon-briefcase]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/briefcase.svg\n[octicon-broadcast]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/broadcast.svg\n[octicon-browser]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/browser.svg\n[octicon-bug]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/bug.svg\n[octicon-calendar]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/calendar.svg\n[octicon-check]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/check.svg\n[octicon-checklist]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/checklist.svg\n[octicon-chevron-down]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/chevron-down.svg\n[octicon-chevron-left]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/chevron-left.svg\n[octicon-chevron-right]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/chevron-right.svg\n[octicon-chevron-up]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/chevron-up.svg\n[octicon-circle-slash]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/circle-slash.svg\n[octicon-circuit-board]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/circuit-board.svg\n[octicon-clippy]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/clippy.svg\n[octicon-clock]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/clock.svg\n[octicon-cloud-download]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/cloud-download.svg\n[octicon-cloud-upload]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/cloud-upload.svg\n[octicon-code]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/code.svg\n[octicon-comment-discussion]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/comment-discussion.svg\n[octicon-comment]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/comment.svg\n[octicon-credit-card]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/credit-card.svg\n[octicon-dash]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/dash.svg\n[octicon-dashboard]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/dashboard.svg\n[octicon-database]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/database.svg\n[octicon-desktop-download]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/desktop-download.svg\n[octicon-device-camera-video]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/device-camera-video.svg\n[octicon-device-camera]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/device-camera.svg\n[octicon-device-desktop]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/device-desktop.svg\n[octicon-device-mobile]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/device-mobile.svg\n[octicon-diff-added]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/diff-added.svg\n[octicon-diff-ignored]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/diff-ignored.svg\n[octicon-diff-modified]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/diff-modified.svg\n[octicon-diff-removed]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/diff-removed.svg\n[octicon-diff-renamed]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/diff-renamed.svg\n[octicon-diff]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/diff.svg\n[octicon-ellipses]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/ellipses.svg\n[octicon-ellipsis]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/ellipsis.svg\n[octicon-eye]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/eye.svg\n[octicon-file-binary]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-binary.svg\n[octicon-file-code]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-code.svg\n[octicon-file-directory]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-directory.svg\n[octicon-file-media]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-media.svg\n[octicon-file-pdf]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-pdf.svg\n[octicon-file-submodule]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-submodule.svg\n[octicon-file-symlink-directory]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-symlink-directory.svg\n[octicon-file-symlink-file]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-symlink-file.svg\n[octicon-file-text]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-text.svg\n[octicon-file-zip]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file-zip.svg\n[octicon-file]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/file.svg\n[octicon-flame]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/flame.svg\n[octicon-fold]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/fold.svg\n[octicon-gear]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/gear.svg\n[octicon-gift]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/gift.svg\n[octicon-gist-secret]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/gist-secret.svg\n[octicon-gist]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/gist.svg\n[octicon-git-branch]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/git-branch.svg\n[octicon-git-commit]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/git-commit.svg\n[octicon-git-compare]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/git-compare.svg\n[octicon-git-merge]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/git-merge.svg\n[octicon-git-pull-request]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/git-pull-request.svg\n[octicon-globe]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/globe.svg\n[octicon-grabber]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/grabber.svg\n[octicon-graph]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/graph.svg\n[octicon-heart]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/heart.svg\n[octicon-history]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/history.svg\n[octicon-home]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/home.svg\n[octicon-horizontal-rule]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/horizontal-rule.svg\n[octicon-hubot]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/hubot.svg\n[octicon-inbox]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/inbox.svg\n[octicon-info]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/info.svg\n[octicon-issue-closed]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/issue-closed.svg\n[octicon-issue-opened]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/issue-opened.svg\n[octicon-issue-reopened]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/issue-reopened.svg\n[octicon-italic]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/italic.svg\n[octicon-jersey]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/jersey.svg\n[octicon-key]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/key.svg\n[octicon-keyboard]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/keyboard.svg\n[octicon-law]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/law.svg\n[octicon-light-bulb]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/light-bulb.svg\n[octicon-link-external]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/link-external.svg\n[octicon-link]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/link.svg\n[octicon-list-ordered]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/list-ordered.svg\n[octicon-list-unordered]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/list-unordered.svg\n[octicon-location]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/location.svg\n[octicon-lock]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/lock.svg\n[octicon-logo-gist]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/logo-gist.svg\n[octicon-logo-github]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/logo-github.svg\n[octicon-mail-read]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mail-read.svg\n[octicon-mail-reply]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mail-reply.svg\n[octicon-mail]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mail.svg\n[octicon-mark-github]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mark-github.svg\n[octicon-markdown]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/markdown.svg\n[octicon-megaphone]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/megaphone.svg\n[octicon-mention]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mention.svg\n[octicon-milestone]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/milestone.svg\n[octicon-mirror]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mirror.svg\n[octicon-mortar-board]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mortar-board.svg\n[octicon-mute]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/mute.svg\n[octicon-no-newline]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/no-newline.svg\n[octicon-octoface]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/octoface.svg\n[octicon-organization]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/organization.svg\n[octicon-package]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/package.svg\n[octicon-paintcan]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/paintcan.svg\n[octicon-pencil]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/pencil.svg\n[octicon-person]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/person.svg\n[octicon-pin]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/pin.svg\n[octicon-plug]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/plug.svg\n[octicon-plus-small]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/plus-small.svg\n[octicon-plus]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/plus.svg\n[octicon-primitive-dot]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/primitive-dot.svg\n[octicon-primitive-square]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/primitive-square.svg\n[octicon-pulse]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/pulse.svg\n[octicon-question]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/question.svg\n[octicon-quote]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/quote.svg\n[octicon-radio-tower]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/radio-tower.svg\n[octicon-reply]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/reply.svg\n[octicon-repo-clone]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/repo-clone.svg\n[octicon-repo-force-push]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/repo-force-push.svg\n[octicon-repo-forked]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/repo-forked.svg\n[octicon-repo-pull]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/repo-pull.svg\n[octicon-repo-push]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/repo-push.svg\n[octicon-repo]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/repo.svg\n[octicon-rocket]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/rocket.svg\n[octicon-rss]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/rss.svg\n[octicon-ruby]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/ruby.svg\n[octicon-search]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/search.svg\n[octicon-server]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/server.svg\n[octicon-settings]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/settings.svg\n[octicon-shield]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/shield.svg\n[octicon-sign-in]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/sign-in.svg\n[octicon-sign-out]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/sign-out.svg\n[octicon-smiley]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/smiley.svg\n[octicon-squirrel]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/squirrel.svg\n[octicon-star]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/star.svg\n[octicon-stop]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/stop.svg\n[octicon-sync]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/sync.svg\n[octicon-tag]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/tag.svg\n[octicon-tasklist]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/tasklist.svg\n[octicon-telescope]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/telescope.svg\n[octicon-terminal]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/terminal.svg\n[octicon-text-size]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/text-size.svg\n[octicon-three-bars]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/three-bars.svg\n[octicon-thumbsdown]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/thumbsdown.svg\n[octicon-thumbsup]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/thumbsup.svg\n[octicon-tools]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/tools.svg\n[octicon-trashcan]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/trashcan.svg\n[octicon-triangle-down]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/triangle-down.svg\n[octicon-triangle-left]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/triangle-left.svg\n[octicon-triangle-right]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/triangle-right.svg\n[octicon-triangle-up]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/triangle-up.svg\n[octicon-unfold]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/unfold.svg\n[octicon-unmute]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/unmute.svg\n[octicon-unverified]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/unverified.svg\n[octicon-verified]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/verified.svg\n[octicon-versions]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/versions.svg\n[octicon-watch]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/watch.svg\n[octicon-x]: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/svg/x.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommonality%2Farchetypes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommonality%2Farchetypes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommonality%2Farchetypes/lists"}