@w5s/commitlint-config 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,6 +31,21 @@ In the `package.json` of your project
31
31
  ```
32
32
  <!-- AUTO-GENERATED-CONTENT:END -->
33
33
 
34
+ Extra rules
35
+
36
+ ```jsonc
37
+ {
38
+ "commitlint": {
39
+ "rules": {
40
+ // Rule to validate gitmoji unicode (🐛) or emoji (:bug:)
41
+ "type-gitmoji-style": ["error", "always", "unicode" /* | 'emoji' */],
42
+ // Rule to validate a gitmoji in the list
43
+ "type-valid-gitmoji": ["error", "always"]
44
+ }
45
+ }
46
+ }
47
+ ```
48
+
34
49
  Ensure the `commitlint` is setup on husky commit message hook (default `.husky/commit-msg`)
35
50
 
36
51
  ```console
@@ -0,0 +1,14 @@
1
+ export type Gitmoji = Gitmoji.Unicode | Gitmoji.Emoji;
2
+ export declare namespace Gitmoji {
3
+ type Unicode = string & {
4
+ '@@GitmojiStyle': 'unicode';
5
+ };
6
+ type Emoji = string & {
7
+ '@@GitmojiStyle': 'emoji';
8
+ };
9
+ const reEmoji: RegExp;
10
+ function isUnicode(anyValue: string): anyValue is Unicode;
11
+ function isEmoji(anyValue: string): anyValue is Emoji;
12
+ function isValid(anyValue: string): anyValue is Gitmoji;
13
+ }
14
+ //# sourceMappingURL=gitmoji.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitmoji.d.ts","sourceRoot":"","sources":["../src/gitmoji.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACtD,yBAAiB,OAAO,CAAC;IACvB,KAAY,OAAO,GAAG,MAAM,GAAG;QAAE,gBAAgB,EAAE,SAAS,CAAA;KAAE,CAAC;IAC/D,KAAY,KAAK,GAAG,MAAM,GAAG;QAAE,gBAAgB,EAAE,OAAO,CAAA;KAAE,CAAC;IAEpD,MAAM,OAAO,QAAgB,CAAC;IAOrC,SAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,OAAO,CAE/D;IAED,SAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,KAAK,CAE3D;IAED,SAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,OAAO,CAE7D;CACF"}
package/lib/gitmoji.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Gitmoji = void 0;
7
+ var emoji_regex_1 = __importDefault(require("emoji-regex"));
8
+ var gitmojis_1 = require("gitmojis");
9
+ var Gitmoji;
10
+ (function (Gitmoji) {
11
+ Gitmoji.reEmoji = (0, emoji_regex_1.default)();
12
+ var reGitmoji = new RegExp("^".concat(Gitmoji.reEmoji.source, "$"), Gitmoji.reEmoji.flags);
13
+ var allGitmojiCodes = new Set(gitmojis_1.gitmojis.map(function (gitmoji) { return gitmoji.code; }).concat(gitmojis_1.gitmojis.map(function (gitmoji) { return gitmoji.emoji; })));
14
+ function isUnicode(anyValue) {
15
+ return anyValue.match(reGitmoji) != null;
16
+ }
17
+ Gitmoji.isUnicode = isUnicode;
18
+ function isEmoji(anyValue) {
19
+ return anyValue.match(/^:(\w+):$/) != null;
20
+ }
21
+ Gitmoji.isEmoji = isEmoji;
22
+ function isValid(anyValue) {
23
+ return allGitmojiCodes.has(anyValue);
24
+ }
25
+ Gitmoji.isValid = isValid;
26
+ })(Gitmoji = exports.Gitmoji || (exports.Gitmoji = {}));
27
+ //# sourceMappingURL=gitmoji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitmoji.js","sourceRoot":"","sources":["../src/gitmoji.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAsC;AACtC,qCAAoC;AAGpC,IAAiB,OAAO,CAsBvB;AAtBD,WAAiB,OAAO;IAIT,eAAO,GAAG,IAAA,qBAAW,GAAE,CAAC;IAErC,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,WAAI,QAAA,OAAO,CAAC,MAAM,MAAG,EAAE,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC;IACnE,IAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,mBAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,IAAI,EAAZ,CAAY,CAAC,CAAC,MAAM,CAAC,mBAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,KAAK,EAAb,CAAa,CAAC,CAAC,CACzF,CAAC;IAEF,SAAgB,SAAS,CAAC,QAAgB;QACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC3C,CAAC;IAFe,iBAAS,YAExB,CAAA;IAED,SAAgB,OAAO,CAAC,QAAgB;QACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IAC7C,CAAC;IAFe,eAAO,UAEtB,CAAA;IAED,SAAgB,OAAO,CAAC,QAAgB;QACtC,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAFe,eAAO,UAEtB,CAAA;AACH,CAAC,EAtBgB,OAAO,GAAP,eAAO,KAAP,eAAO,QAsBvB"}
package/lib/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { type LintOptions } from '@commitlint/types';
2
2
  declare const config: {
3
3
  parserPreset: LintOptions;
4
4
  rules: Partial<import("@commitlint/types").RulesConfig<import("@commitlint/types").RuleConfigQuality.Qualified>>;
5
+ plugins: import("@commitlint/types").Plugin[];
5
6
  };
6
7
  export default config;
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA+B9F,QAAA,MAAM,MAAM;;;CAGX,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgC9F,QAAA,MAAM,MAAM;;;;CAIX,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/lib/index.js CHANGED
@@ -1,28 +1,15 @@
1
1
  "use strict";
2
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
- if (ar || !(i in from)) {
5
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
- ar[i] = from[i];
7
- }
8
- }
9
- return to.concat(ar || Array.prototype.slice.call(from));
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  /* eslint-disable import/no-import-module-exports */
16
4
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
17
5
  var types_1 = require("@commitlint/types");
18
- var gitmojis_1 = require("gitmojis");
19
- var emoji_regex_1 = __importDefault(require("emoji-regex"));
20
- var allGitmojiCodes = __spreadArray(__spreadArray([], gitmojis_1.gitmojis.map(function (gitmoji) { return gitmoji.code; }), true), gitmojis_1.gitmojis.map(function (gitmoji) { return gitmoji.emoji; }), true);
21
- var Error = types_1.RuleConfigSeverity.Error, Warning = types_1.RuleConfigSeverity.Warning;
6
+ var gitmoji_js_1 = require("./gitmoji.js");
7
+ var plugin_js_1 = require("./plugin.js");
8
+ var Error = types_1.RuleConfigSeverity.Error, Warning = types_1.RuleConfigSeverity.Warning, Disabled = types_1.RuleConfigSeverity.Disabled;
22
9
  var parserPreset = {
23
10
  parserOpts: {
24
11
  // eslint-disable-next-line unicorn/no-unsafe-regex, prefer-regex-literals
25
- headerPattern: new RegExp("^(:\\w*:|".concat(String((0, emoji_regex_1.default)().source), ") (?:\\((.*)\\):? )?(.*)$")),
12
+ headerPattern: new RegExp("^(:\\w*:|".concat(gitmoji_js_1.Gitmoji.reEmoji.source, ") (?:\\((.*)\\):? )?(.*)$")),
26
13
  headerCorrespondence: ['type', 'scope', 'subject'],
27
14
  },
28
15
  };
@@ -39,11 +26,14 @@ var rules = {
39
26
  'subject-full-stop': [Error, 'never', '.'],
40
27
  'type-case': [Error, 'always', 'lower-case'],
41
28
  'type-empty': [Error, 'never'],
42
- 'type-enum': [Error, 'always', allGitmojiCodes],
29
+ 'type-enum': [Disabled],
30
+ 'type-gitmoji-style': [Error, 'always', 'unicode'],
31
+ 'type-valid-gitmoji': [Error, 'always'],
43
32
  };
44
33
  var config = {
45
34
  parserPreset: parserPreset,
46
35
  rules: rules,
36
+ plugins: [plugin_js_1.gitmojiPlugin],
47
37
  };
48
38
  exports.default = config;
49
39
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oDAAoD;AACpD,4DAA4D;AAC5D,2CAA8F;AAC9F,qCAAoC;AACpC,4DAAsC;AAEtC,IAAM,eAAe,mCAAO,mBAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,IAAI,EAAZ,CAAY,CAAC,SAAK,mBAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,KAAK,EAAb,CAAa,CAAC,OAAC,CAAC;AAC1G,IAAA,KAAK,GAAc,0BAAkB,MAAhC,EAAE,OAAO,GAAK,0BAAkB,QAAvB,CAAwB;AAE9C,IAAM,YAAY,GAAgB;IAChC,UAAU,EAAE;QACV,0EAA0E;QAC1E,aAAa,EAAE,IAAI,MAAM,CAAC,mBAAY,MAAM,CAAC,IAAA,qBAAW,GAAE,CAAC,MAAM,CAAC,8BAA2B,CAAC;QAC9F,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;KACnD;CACF,CAAC;AAEF,IAAM,KAAK,GAAmB;IAC5B,oBAAoB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IACzC,sBAAsB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;IAC9C,sBAAsB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3C,wBAAwB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;IAChD,mBAAmB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC1C,YAAY,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;IAC7C,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IACjC,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC5C,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC;IAC1C,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;IAC5C,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;CAChD,CAAC;AAEF,IAAM,MAAM,GAAG;IACb,YAAY,cAAA;IACZ,KAAK,OAAA;CACN,CAAC;AAEF,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,oDAAoD;AACpD,4DAA4D;AAC5D,2CAA8F;AAC9F,2CAAuC;AACvC,yCAA4C;AAEpC,IAAA,KAAK,GAAwB,0BAAkB,MAA1C,EAAE,OAAO,GAAe,0BAAkB,QAAjC,EAAE,QAAQ,GAAK,0BAAkB,SAAvB,CAAwB;AAExD,IAAM,YAAY,GAAgB;IAChC,UAAU,EAAE;QACV,0EAA0E;QAC1E,aAAa,EAAE,IAAI,MAAM,CAAC,mBAAY,oBAAO,CAAC,OAAO,CAAC,MAAM,8BAA2B,CAAC;QACxF,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;KACnD;CACF,CAAC;AAEF,IAAM,KAAK,GAAmB;IAC5B,oBAAoB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IACzC,sBAAsB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;IAC9C,sBAAsB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3C,wBAAwB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;IAChD,mBAAmB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC1C,YAAY,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;IAC7C,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IACjC,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC5C,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC;IAC1C,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;IAC5C,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,CAAC,QAAQ,CAAC;IACvB,oBAAoB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC;IAClD,oBAAoB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;CACxC,CAAC;AAEF,IAAM,MAAM,GAAG;IACb,YAAY,cAAA;IACZ,KAAK,OAAA;IACL,OAAO,EAAE,CAAC,yBAAa,CAAC;CACzB,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Plugin, Rule } from '@commitlint/types';
2
+ export declare const typeGitmojiStyle: Rule<'unicode' | 'emoji'>;
3
+ export declare const typeValidGitmoji: Rule;
4
+ /**
5
+ * Gitmoji plugins
6
+ */
7
+ export declare const gitmojiPlugin: Plugin;
8
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAuB,MAAM,mBAAmB,CAAC;AAQtE,eAAO,MAAM,gBAAgB,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAWtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,IAM9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAK3B,CAAC"}
package/lib/plugin.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gitmojiPlugin = exports.typeValidGitmoji = exports.typeGitmojiStyle = void 0;
4
+ var gitmoji_1 = require("./gitmoji");
5
+ var $if = function (when) {
6
+ if (when === void 0) { when = 'always'; }
7
+ return function (cond) {
8
+ return when === 'always' ? cond : !cond;
9
+ };
10
+ };
11
+ var typeGitmojiStyle = function (parsed, when, value) {
12
+ if (when === void 0) { when = 'always'; }
13
+ if (value === void 0) { value = 'unicode'; }
14
+ var isUnicode = parsed.type != null && gitmoji_1.Gitmoji.isUnicode(parsed.type);
15
+ var isEmoji = parsed.type != null && gitmoji_1.Gitmoji.isEmoji(parsed.type);
16
+ return value === 'unicode'
17
+ ? $if(when)(isUnicode)
18
+ ? [true]
19
+ : [false, "Type should ".concat(when, " be an unicode character")]
20
+ : $if(when)(isEmoji)
21
+ ? [true]
22
+ : [false, "Type should ".concat(when, " be an valid :emoji:")];
23
+ };
24
+ exports.typeGitmojiStyle = typeGitmojiStyle;
25
+ var typeValidGitmoji = function (parsed, when) {
26
+ if (when === void 0) { when = 'always'; }
27
+ var isValidGitmoji = parsed.type != null && gitmoji_1.Gitmoji.isValid(parsed.type);
28
+ return $if(when)(isValidGitmoji)
29
+ ? [true]
30
+ : [false, "Type should ".concat(when, " be an valid gitmoji (see https://gitmoji.dev)")];
31
+ };
32
+ exports.typeValidGitmoji = typeValidGitmoji;
33
+ /**
34
+ * Gitmoji plugins
35
+ */
36
+ exports.gitmojiPlugin = {
37
+ rules: {
38
+ 'type-gitmoji-style': exports.typeGitmojiStyle,
39
+ 'type-valid-gitmoji': exports.typeValidGitmoji,
40
+ },
41
+ };
42
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;AACA,qCAAoC;AAEpC,IAAM,GAAG,GACP,UAAC,IAAgD;IAAhD,qBAAA,EAAA,eAAgD;IACjD,OAAA,UAAC,IAAa;QACZ,OAAA,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;IAAhC,CAAgC;AADlC,CACkC,CAAC;AAE9B,IAAM,gBAAgB,GAA8B,UAAC,MAAM,EAAE,IAAe,EAAE,KAAiB;IAAlC,qBAAA,EAAA,eAAe;IAAE,sBAAA,EAAA,iBAAiB;IACpG,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,iBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxE,IAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,iBAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpE,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;YACpB,CAAC,CAAC,CAAC,IAAI,CAAC;YACR,CAAC,CAAC,CAAC,KAAK,EAAE,sBAAe,IAAI,6BAA0B,CAAC;QAC1D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACpB,CAAC,CAAC,CAAC,IAAI,CAAC;YACR,CAAC,CAAC,CAAC,KAAK,EAAE,sBAAe,IAAI,yBAAsB,CAAC,CAAC;AACzD,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B;AAEK,IAAM,gBAAgB,GAAS,UAAC,MAAM,EAAE,IAAe;IAAf,qBAAA,EAAA,eAAe;IAC5D,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,iBAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3E,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;QAC9B,CAAC,CAAC,CAAC,IAAI,CAAC;QACR,CAAC,CAAC,CAAC,KAAK,EAAE,sBAAe,IAAI,mDAAgD,CAAC,CAAC;AACnF,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B;AAEF;;GAEG;AACU,QAAA,aAAa,GAAW;IACnC,KAAK,EAAE;QACL,oBAAoB,EAAE,wBAAgB;QACtC,oBAAoB,EAAE,wBAAgB;KACvC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@w5s/commitlint-config",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Commitlint configuration presets",
5
5
  "keywords": [
6
6
  "commitlint",
@@ -67,7 +67,7 @@
67
67
  "gitmojis": "^3.13.0"
68
68
  },
69
69
  "devDependencies": {
70
- "@commitlint/lint": "17.2.0",
70
+ "@commitlint/lint": "17.3.0",
71
71
  "@jest/globals": "29.3.1"
72
72
  },
73
73
  "peerDependencies": {
@@ -79,5 +79,5 @@
79
79
  "publishConfig": {
80
80
  "access": "public"
81
81
  },
82
- "gitHead": "a0e28715a049dcfffbde753363f3133f69549a28"
82
+ "gitHead": "2a262ca6b8389764322e1a855d38a31af795dbe1"
83
83
  }
package/src/gitmoji.ts ADDED
@@ -0,0 +1,27 @@
1
+ import emojiRegexp from 'emoji-regex';
2
+ import { gitmojis } from 'gitmojis';
3
+
4
+ export type Gitmoji = Gitmoji.Unicode | Gitmoji.Emoji;
5
+ export namespace Gitmoji {
6
+ export type Unicode = string & { '@@GitmojiStyle': 'unicode' };
7
+ export type Emoji = string & { '@@GitmojiStyle': 'emoji' };
8
+
9
+ export const reEmoji = emojiRegexp();
10
+
11
+ const reGitmoji = new RegExp(`^${reEmoji.source}$`, reEmoji.flags);
12
+ const allGitmojiCodes = new Set(
13
+ gitmojis.map((gitmoji) => gitmoji.code).concat(gitmojis.map((gitmoji) => gitmoji.emoji))
14
+ );
15
+
16
+ export function isUnicode(anyValue: string): anyValue is Unicode {
17
+ return anyValue.match(reGitmoji) != null;
18
+ }
19
+
20
+ export function isEmoji(anyValue: string): anyValue is Emoji {
21
+ return anyValue.match(/^:(\w+):$/) != null;
22
+ }
23
+
24
+ export function isValid(anyValue: string): anyValue is Gitmoji {
25
+ return allGitmojiCodes.has(anyValue);
26
+ }
27
+ }
package/src/index.ts CHANGED
@@ -1,16 +1,15 @@
1
1
  /* eslint-disable import/no-import-module-exports */
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
3
3
  import { RuleConfigSeverity, type QualifiedRules, type LintOptions } from '@commitlint/types';
4
- import { gitmojis } from 'gitmojis';
5
- import emojiRegexp from 'emoji-regex';
4
+ import { Gitmoji } from './gitmoji.js';
5
+ import { gitmojiPlugin } from './plugin.js';
6
6
 
7
- const allGitmojiCodes = [...gitmojis.map((gitmoji) => gitmoji.code), ...gitmojis.map((gitmoji) => gitmoji.emoji)];
8
- const { Error, Warning } = RuleConfigSeverity;
7
+ const { Error, Warning, Disabled } = RuleConfigSeverity;
9
8
 
10
9
  const parserPreset: LintOptions = {
11
10
  parserOpts: {
12
11
  // eslint-disable-next-line unicorn/no-unsafe-regex, prefer-regex-literals
13
- headerPattern: new RegExp(`^(:\\w*:|${String(emojiRegexp().source)}) (?:\\((.*)\\):? )?(.*)$`), /// ^(:\w*:) (?:\((.*)\) )?(.*)$/,
12
+ headerPattern: new RegExp(`^(:\\w*:|${Gitmoji.reEmoji.source}) (?:\\((.*)\\):? )?(.*)$`), /// ^(:\w*:) (?:\((.*)\) )?(.*)$/,
14
13
  headerCorrespondence: ['type', 'scope', 'subject'],
15
14
  },
16
15
  };
@@ -28,12 +27,15 @@ const rules: QualifiedRules = {
28
27
  'subject-full-stop': [Error, 'never', '.'],
29
28
  'type-case': [Error, 'always', 'lower-case'],
30
29
  'type-empty': [Error, 'never'],
31
- 'type-enum': [Error, 'always', allGitmojiCodes],
30
+ 'type-enum': [Disabled],
31
+ 'type-gitmoji-style': [Error, 'always', 'unicode'],
32
+ 'type-valid-gitmoji': [Error, 'always'],
32
33
  };
33
34
 
34
35
  const config = {
35
36
  parserPreset,
36
37
  rules,
38
+ plugins: [gitmojiPlugin],
37
39
  };
38
40
 
39
41
  export default config;
package/src/plugin.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { Plugin, Rule, RuleConfigCondition } from '@commitlint/types';
2
+ import { Gitmoji } from './gitmoji';
3
+
4
+ const $if =
5
+ (when: RuleConfigCondition | undefined = 'always') =>
6
+ (cond: boolean) =>
7
+ when === 'always' ? cond : !cond;
8
+
9
+ export const typeGitmojiStyle: Rule<'unicode' | 'emoji'> = (parsed, when = 'always', value = 'unicode') => {
10
+ const isUnicode = parsed.type != null && Gitmoji.isUnicode(parsed.type);
11
+ const isEmoji = parsed.type != null && Gitmoji.isEmoji(parsed.type);
12
+
13
+ return value === 'unicode'
14
+ ? $if(when)(isUnicode)
15
+ ? [true]
16
+ : [false, `Type should ${when} be an unicode character`]
17
+ : $if(when)(isEmoji)
18
+ ? [true]
19
+ : [false, `Type should ${when} be an valid :emoji:`];
20
+ };
21
+
22
+ export const typeValidGitmoji: Rule = (parsed, when = 'always') => {
23
+ const isValidGitmoji = parsed.type != null && Gitmoji.isValid(parsed.type);
24
+
25
+ return $if(when)(isValidGitmoji)
26
+ ? [true]
27
+ : [false, `Type should ${when} be an valid gitmoji (see https://gitmoji.dev)`];
28
+ };
29
+
30
+ /**
31
+ * Gitmoji plugins
32
+ */
33
+ export const gitmojiPlugin: Plugin = {
34
+ rules: {
35
+ 'type-gitmoji-style': typeGitmojiStyle,
36
+ 'type-valid-gitmoji': typeValidGitmoji,
37
+ },
38
+ };