@w5s/commitlint-config 1.0.2 → 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 +15 -0
- package/lib/gitmoji.d.ts +14 -0
- package/lib/gitmoji.d.ts.map +1 -0
- package/lib/gitmoji.js +27 -0
- package/lib/gitmoji.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -18
- package/lib/index.js.map +1 -1
- package/lib/plugin.d.ts +8 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +42 -0
- package/lib/plugin.js.map +1 -0
- package/package.json +2 -2
- package/src/gitmoji.ts +27 -0
- package/src/index.ts +8 -6
- package/src/plugin.ts +38 -0
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
|
package/lib/gitmoji.d.ts
ADDED
|
@@ -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
|
package/lib/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
19
|
-
var
|
|
20
|
-
var
|
|
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(
|
|
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': [
|
|
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":"
|
|
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"}
|
package/lib/plugin.d.ts
ADDED
|
@@ -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.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Commitlint configuration presets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"commitlint",
|
|
@@ -79,5 +79,5 @@
|
|
|
79
79
|
"publishConfig": {
|
|
80
80
|
"access": "public"
|
|
81
81
|
},
|
|
82
|
-
"gitHead": "
|
|
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 {
|
|
5
|
-
import
|
|
4
|
+
import { Gitmoji } from './gitmoji.js';
|
|
5
|
+
import { gitmojiPlugin } from './plugin.js';
|
|
6
6
|
|
|
7
|
-
const
|
|
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*:|${
|
|
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': [
|
|
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
|
+
};
|