prh 5.4.4 → 6.0.2
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/CHANGELOG.md +2 -0
- package/LICENSE +21 -0
- package/README.md +16 -1
- package/lib/changeset/changeset.js +33 -34
- package/lib/changeset/changeset.js.map +1 -1
- package/lib/changeset/diff.d.ts +2 -2
- package/lib/changeset/diff.js +37 -48
- package/lib/changeset/diff.js.map +1 -1
- package/lib/changeset/index.js +10 -9
- package/lib/changeset/index.js.map +1 -1
- package/lib/cli.js +58 -58
- package/lib/cli.js.map +1 -1
- package/lib/engine.js +42 -44
- package/lib/engine.js.map +1 -1
- package/lib/index.js +46 -58
- package/lib/index.js.map +1 -1
- package/lib/options.js +4 -4
- package/lib/options.js.map +1 -1
- package/lib/paragraph.js +16 -17
- package/lib/paragraph.js.map +1 -1
- package/lib/raw.js.map +1 -1
- package/lib/rule.js +61 -62
- package/lib/rule.js.map +1 -1
- package/lib/ruleSpec.js +7 -7
- package/lib/ruleSpec.js.map +1 -1
- package/lib/target.js +19 -19
- package/lib/target.js.map +1 -1
- package/lib/targetPattern.js +18 -18
- package/lib/targetPattern.js.map +1 -1
- package/lib/utils/content.js +6 -6
- package/lib/utils/content.js.map +1 -1
- package/lib/utils/regexp.js +50 -42
- package/lib/utils/regexp.js.map +1 -1
- package/package.json +24 -24
- package/prh-rules/media/WEB+DB_PRESS.yml +141 -21
- package/prh-rules/media/techbooster.yml +3 -1
- package/prh-rules/package-lock.json +52 -128
- package/prh-rules/package.json +4 -4
- package/prh-rules/test.js +13 -13
- package/tsconfig.json +6 -6
- package/.gitmodules +0 -3
package/lib/rule.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
exports.Rule = void 0;
|
|
4
|
+
const regexp_1 = require("./utils/regexp");
|
|
5
|
+
const options_1 = require("./options");
|
|
6
|
+
const ruleSpec_1 = require("./ruleSpec");
|
|
7
|
+
const diff_1 = require("./changeset/diff");
|
|
8
|
+
const changeset_1 = require("./changeset");
|
|
9
|
+
class Rule {
|
|
10
|
+
constructor(src) {
|
|
10
11
|
if (!src) {
|
|
11
|
-
throw new Error("src is
|
|
12
|
+
throw new Error("src is required");
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
+
let rawRule;
|
|
14
15
|
if (typeof src === "string") {
|
|
15
16
|
rawRule = {
|
|
16
17
|
expected: src,
|
|
@@ -23,11 +24,13 @@ var Rule = /** @class */ (function () {
|
|
|
23
24
|
if (patterns === "") {
|
|
24
25
|
throw new Error("pattern can't be empty");
|
|
25
26
|
}
|
|
26
|
-
Array.isArray(patterns)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
if (Array.isArray(patterns)) {
|
|
28
|
+
patterns.forEach((pattern) => {
|
|
29
|
+
if (pattern === "") {
|
|
30
|
+
throw new Error("patterns can't be empty");
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
31
34
|
}
|
|
32
35
|
checkEmptyPattern(rawRule.pattern);
|
|
33
36
|
checkEmptyPattern(rawRule.patterns);
|
|
@@ -42,46 +45,45 @@ var Rule = /** @class */ (function () {
|
|
|
42
45
|
}
|
|
43
46
|
this.regexpMustEmpty = rawRule.regexpMustEmpty;
|
|
44
47
|
// for JSON order
|
|
45
|
-
|
|
48
|
+
const options = this.options;
|
|
46
49
|
delete this.options;
|
|
47
50
|
this.options = options;
|
|
48
|
-
this.specs = (rawRule.specs || []).map(
|
|
51
|
+
this.specs = (rawRule.specs || []).map((spec) => new ruleSpec_1.RuleSpec(spec));
|
|
49
52
|
this.raw = rawRule;
|
|
50
53
|
this.check();
|
|
51
54
|
}
|
|
52
55
|
/* @internal */
|
|
53
|
-
|
|
54
|
-
var _this = this;
|
|
56
|
+
_patternToRegExp(pattern) {
|
|
55
57
|
if (pattern === "") {
|
|
56
58
|
throw new Error("pattern can't be empty");
|
|
57
59
|
}
|
|
58
60
|
else if (pattern == null) {
|
|
59
|
-
|
|
61
|
+
let result = (0, regexp_1.spreadAlphaNum)(this.expected);
|
|
60
62
|
if (this.options.wordBoundary) {
|
|
61
|
-
result = regexp_1.addBoundary(result);
|
|
63
|
+
result = (0, regexp_1.addBoundary)(result);
|
|
62
64
|
}
|
|
63
|
-
return regexp_1.addDefaultFlags(result);
|
|
65
|
+
return (0, regexp_1.addDefaultFlags)(result);
|
|
64
66
|
}
|
|
65
67
|
else if (typeof pattern === "string") {
|
|
66
|
-
|
|
68
|
+
let result = (0, regexp_1.parseRegExpString)(pattern);
|
|
67
69
|
if (!result) {
|
|
68
|
-
result = new RegExp(regexp_1.escapeSpecialChars(pattern));
|
|
70
|
+
result = new RegExp((0, regexp_1.escapeSpecialChars)(pattern));
|
|
69
71
|
}
|
|
70
72
|
if (this.options.wordBoundary) {
|
|
71
|
-
result = regexp_1.addBoundary(result);
|
|
73
|
+
result = (0, regexp_1.addBoundary)(result);
|
|
72
74
|
}
|
|
73
|
-
return regexp_1.addDefaultFlags(result);
|
|
75
|
+
return (0, regexp_1.addDefaultFlags)(result);
|
|
74
76
|
}
|
|
75
77
|
else if (pattern instanceof Array) {
|
|
76
|
-
|
|
77
|
-
return regexp_1.addDefaultFlags(result);
|
|
78
|
+
const result = (0, regexp_1.combine)(pattern.map((p) => this._patternToRegExp(p)));
|
|
79
|
+
return (0, regexp_1.addDefaultFlags)(result);
|
|
78
80
|
}
|
|
79
81
|
else {
|
|
80
|
-
throw new Error(
|
|
82
|
+
throw new Error(`unexpected pattern: ${pattern}`);
|
|
81
83
|
}
|
|
82
|
-
}
|
|
84
|
+
}
|
|
83
85
|
/* @internal */
|
|
84
|
-
|
|
86
|
+
_shouldIgnore(ignoreRule) {
|
|
85
87
|
// NOTE 考え方:--rules-yaml で表示されるpattern or expectedで指定する
|
|
86
88
|
// patternは配列で指定できて、そのうちの1つのパターンが指定された時に
|
|
87
89
|
// そのルール全体が無視されるのか該当の1パターンだけ無視されるのか予想できないため
|
|
@@ -92,60 +94,58 @@ var Rule = /** @class */ (function () {
|
|
|
92
94
|
return true;
|
|
93
95
|
}
|
|
94
96
|
return false;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
+
}
|
|
98
|
+
reset() {
|
|
97
99
|
this.pattern.lastIndex = 0;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var result = changeSet.applyChangeSets(spec.from);
|
|
100
|
+
}
|
|
101
|
+
check() {
|
|
102
|
+
this.specs.forEach((spec) => {
|
|
103
|
+
const diffs = this.applyRule(spec.from);
|
|
104
|
+
const changeSet = new changeset_1.ChangeSet({ content: spec.from, diffs });
|
|
105
|
+
const result = changeSet.applyChangeSets(spec.from);
|
|
105
106
|
if (spec.to !== result) {
|
|
106
|
-
throw new Error(
|
|
107
|
+
throw new Error(`${this.expected} spec failed. "${spec.from}", expected "${spec.to}", but got "${result}", ${this.pattern}`);
|
|
107
108
|
}
|
|
108
109
|
});
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
var _this = this;
|
|
110
|
+
}
|
|
111
|
+
applyRule(content) {
|
|
112
112
|
this.reset();
|
|
113
|
-
|
|
113
|
+
const resultList = (0, regexp_1.collectAll)(this.pattern, content);
|
|
114
114
|
return resultList
|
|
115
|
-
.map(
|
|
115
|
+
.map((matches) => {
|
|
116
116
|
// JavaScriptでの正規表現では /(?<!記|大)事/ のような書き方ができない
|
|
117
117
|
// /(記|大)事/ で regexpMustEmpty $1 の場合、第一グループが空じゃないとマッチしない、というルールにして回避
|
|
118
|
-
if (
|
|
119
|
-
|
|
118
|
+
if (this.regexpMustEmpty) {
|
|
119
|
+
const match = /^\$([0-9]+)$/.exec(this.regexpMustEmpty);
|
|
120
120
|
if (match == null) {
|
|
121
|
-
throw new Error(
|
|
121
|
+
throw new Error(`${this.expected} target failed. please use $1 format.`);
|
|
122
122
|
}
|
|
123
|
-
|
|
123
|
+
const index = parseInt(match[1], 10);
|
|
124
124
|
if (matches[index]) {
|
|
125
125
|
return null;
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
// 検出したものと期待するものが一致している場合無視させる
|
|
129
|
-
if (
|
|
129
|
+
if (this.expected === matches[0]) {
|
|
130
130
|
return null;
|
|
131
131
|
}
|
|
132
132
|
return new diff_1.Diff({
|
|
133
|
-
pattern:
|
|
134
|
-
expected:
|
|
133
|
+
pattern: this.pattern,
|
|
134
|
+
expected: this.expected,
|
|
135
135
|
index: matches.index,
|
|
136
136
|
matches: matches,
|
|
137
|
-
rule:
|
|
137
|
+
rule: this,
|
|
138
138
|
});
|
|
139
139
|
})
|
|
140
|
-
.filter(
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
for (
|
|
140
|
+
.filter((v) => !!v); // (Diff | null)[] を Diff[] に変換したい
|
|
141
|
+
}
|
|
142
|
+
toJSON() {
|
|
143
|
+
const alt = {};
|
|
144
|
+
for (const key in this) {
|
|
145
145
|
if (key.indexOf("_") === 0) {
|
|
146
146
|
continue;
|
|
147
147
|
}
|
|
148
|
-
|
|
148
|
+
const value = this[key];
|
|
149
149
|
if (value instanceof RegExp) {
|
|
150
150
|
alt[key] = value.toString();
|
|
151
151
|
continue;
|
|
@@ -153,8 +153,7 @@ var Rule = /** @class */ (function () {
|
|
|
153
153
|
alt[key] = value;
|
|
154
154
|
}
|
|
155
155
|
return alt;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
}());
|
|
156
|
+
}
|
|
157
|
+
}
|
|
159
158
|
exports.Rule = Rule;
|
|
160
159
|
//# sourceMappingURL=rule.js.map
|
package/lib/rule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.js","sourceRoot":"","sources":["rule.ts"],"names":[],"mappings":"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","sourcesContent":["import { spreadAlphaNum, addBoundary, addDefaultFlags, parseRegExpString, escapeSpecialChars, combine, collectAll } from \"./utils/regexp\";\n\nimport { Options } from \"./options\";\nimport { RuleSpec } from \"./ruleSpec\";\n\nimport { Diff } from \"./changeset/diff\";\n\nimport * as raw from \"./raw\";\nimport { ChangeSet } from \"./changeset\";\n\nexport class Rule {\n expected: string;\n pattern: RegExp;\n regexpMustEmpty: string | undefined;\n options: Options;\n specs: RuleSpec[];\n raw: any /* raw.Rule */;\n\n constructor(src: string | raw.Rule) {\n if (!src) {\n throw new Error(\"src is requried\");\n }\n let rawRule: raw.Rule;\n if (typeof src === \"string\") {\n rawRule = {\n expected: src,\n };\n } else {\n rawRule = src;\n }\n function checkEmptyPattern(patterns: string | string[] | null | undefined) {\n if (patterns === \"\") {\n throw new Error(\"pattern can't be empty\");\n }\n Array.isArray(patterns) && patterns.forEach(pattern => {\n if (pattern === \"\") {\n throw new Error(\"patterns can't be empty\");\n }\n });\n }\n checkEmptyPattern(rawRule.pattern);\n checkEmptyPattern(rawRule.patterns);\n\n this.options = new Options(this, rawRule.options);\n\n this.expected = rawRule.expected;\n if (this.expected == null) {\n throw new Error(\"expected is required\");\n }\n\n this.pattern = this._patternToRegExp(rawRule.pattern || rawRule.patterns);\n if (this.pattern == null) {\n throw new Error(\"pattern is required\");\n }\n\n this.regexpMustEmpty = rawRule.regexpMustEmpty;\n\n // for JSON order\n const options = this.options;\n delete this.options;\n this.options = options;\n\n this.specs = (rawRule.specs || []).map(spec => new RuleSpec(spec));\n\n this.raw = rawRule;\n\n this.check();\n }\n\n /* @internal */\n _patternToRegExp(pattern?: string | string[] | null): RegExp {\n if (pattern === \"\") {\n throw new Error(\"pattern can't be empty\");\n } else if (pattern == null) {\n let result = spreadAlphaNum(this.expected);\n if (this.options.wordBoundary) {\n result = addBoundary(result);\n }\n return addDefaultFlags(result);\n } else if (typeof pattern === \"string\") {\n let result = parseRegExpString(pattern);\n if (!result) {\n result = new RegExp(escapeSpecialChars(pattern));\n }\n if (this.options.wordBoundary) {\n result = addBoundary(result);\n }\n return addDefaultFlags(result);\n } else if (pattern instanceof Array) {\n const result = combine(pattern.map(p => this._patternToRegExp(p)));\n return addDefaultFlags(result!);\n } else {\n throw new Error(`unexpected pattern: ${pattern}`);\n }\n }\n\n /* @internal */\n _shouldIgnore(ignoreRule: raw.IgnoreRule) {\n // NOTE 考え方:--rules-yaml で表示されるpattern or expectedで指定する\n // patternは配列で指定できて、そのうちの1つのパターンが指定された時に\n // そのルール全体が無視されるのか該当の1パターンだけ無視されるのか予想できないため\n\n if (ignoreRule.pattern != null && this.pattern.toString() === ignoreRule.pattern) {\n return true;\n }\n if (ignoreRule.expected != null && ignoreRule.expected === this.expected) {\n return true;\n }\n\n return false;\n }\n\n reset() {\n this.pattern.lastIndex = 0;\n }\n\n check() {\n this.specs.forEach(spec => {\n const diffs = this.applyRule(spec.from);\n const changeSet = new ChangeSet({ content: spec.from, diffs });\n const result = changeSet.applyChangeSets(spec.from);\n if (spec.to !== result) {\n throw new Error(`${this.expected} spec failed. \"${spec.from}\", expected \"${spec.to}\", but got \"${result}\", ${this.pattern}`);\n }\n });\n }\n\n applyRule(content: string): Diff[] {\n this.reset();\n const resultList = collectAll(this.pattern, content);\n return resultList\n .map(matches => {\n // JavaScriptでの正規表現では /(?<!記|大)事/ のような書き方ができない\n // /(記|大)事/ で regexpMustEmpty $1 の場合、第一グループが空じゃないとマッチしない、というルールにして回避\n if (this.regexpMustEmpty) {\n const match = /^\\$([0-9]+)$/.exec(this.regexpMustEmpty);\n if (match == null) {\n throw new Error(`${this.expected} target failed. please use $1 format.`);\n }\n const index = parseInt(match[1], 10);\n if (matches[index]) {\n return null;\n }\n }\n // 検出したものと期待するものが一致している場合無視させる\n if (this.expected === matches[0]) {\n return null;\n }\n return new Diff({\n pattern: this.pattern,\n expected: this.expected,\n index: matches.index,\n matches: matches,\n rule: this,\n });\n })\n .filter(v => !!v) as any as Diff[]; // (Diff | null)[] を Diff[] に変換したい\n }\n\n toJSON() {\n const alt: any = {};\n for (const key in this) {\n if (key.indexOf(\"_\") === 0) {\n continue;\n }\n const value = (<any>this)[key];\n if (value instanceof RegExp) {\n alt[key] = value.toString();\n continue;\n }\n alt[key] = value;\n }\n return alt;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["rule.ts"],"names":[],"mappings":"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","sourcesContent":["import { spreadAlphaNum, addBoundary, addDefaultFlags, parseRegExpString, escapeSpecialChars, combine, collectAll } from \"./utils/regexp\";\n\nimport { Options } from \"./options\";\nimport { RuleSpec } from \"./ruleSpec\";\n\nimport { Diff } from \"./changeset/diff\";\n\nimport * as raw from \"./raw\";\nimport { ChangeSet } from \"./changeset\";\n\nexport class Rule {\n expected: string;\n pattern: RegExp;\n regexpMustEmpty: string | undefined;\n options: Options;\n specs: RuleSpec[];\n raw: any /* raw.Rule */;\n\n constructor(src: string | raw.Rule) {\n if (!src) {\n throw new Error(\"src is required\");\n }\n let rawRule: raw.Rule;\n if (typeof src === \"string\") {\n rawRule = {\n expected: src,\n };\n } else {\n rawRule = src;\n }\n function checkEmptyPattern(patterns: string | string[] | null | undefined) {\n if (patterns === \"\") {\n throw new Error(\"pattern can't be empty\");\n }\n if (Array.isArray(patterns)) {\n patterns.forEach((pattern) => {\n if (pattern === \"\") {\n throw new Error(\"patterns can't be empty\");\n }\n });\n }\n }\n checkEmptyPattern(rawRule.pattern);\n checkEmptyPattern(rawRule.patterns);\n\n this.options = new Options(this, rawRule.options);\n\n this.expected = rawRule.expected;\n if (this.expected == null) {\n throw new Error(\"expected is required\");\n }\n\n this.pattern = this._patternToRegExp(rawRule.pattern || rawRule.patterns);\n if (this.pattern == null) {\n throw new Error(\"pattern is required\");\n }\n\n this.regexpMustEmpty = rawRule.regexpMustEmpty;\n\n // for JSON order\n const options = this.options;\n delete (this as any).options;\n this.options = options;\n\n this.specs = (rawRule.specs || []).map((spec) => new RuleSpec(spec));\n\n this.raw = rawRule;\n\n this.check();\n }\n\n /* @internal */\n _patternToRegExp(pattern?: string | string[] | null): RegExp {\n if (pattern === \"\") {\n throw new Error(\"pattern can't be empty\");\n } else if (pattern == null) {\n let result = spreadAlphaNum(this.expected);\n if (this.options.wordBoundary) {\n result = addBoundary(result);\n }\n return addDefaultFlags(result);\n } else if (typeof pattern === \"string\") {\n let result = parseRegExpString(pattern);\n if (!result) {\n result = new RegExp(escapeSpecialChars(pattern));\n }\n if (this.options.wordBoundary) {\n result = addBoundary(result);\n }\n return addDefaultFlags(result);\n } else if (pattern instanceof Array) {\n const result = combine(pattern.map((p) => this._patternToRegExp(p)));\n return addDefaultFlags(result!);\n } else {\n throw new Error(`unexpected pattern: ${pattern}`);\n }\n }\n\n /* @internal */\n _shouldIgnore(ignoreRule: raw.IgnoreRule) {\n // NOTE 考え方:--rules-yaml で表示されるpattern or expectedで指定する\n // patternは配列で指定できて、そのうちの1つのパターンが指定された時に\n // そのルール全体が無視されるのか該当の1パターンだけ無視されるのか予想できないため\n\n if (ignoreRule.pattern != null && this.pattern.toString() === ignoreRule.pattern) {\n return true;\n }\n if (ignoreRule.expected != null && ignoreRule.expected === this.expected) {\n return true;\n }\n\n return false;\n }\n\n reset() {\n this.pattern.lastIndex = 0;\n }\n\n check() {\n this.specs.forEach((spec) => {\n const diffs = this.applyRule(spec.from);\n const changeSet = new ChangeSet({ content: spec.from, diffs });\n const result = changeSet.applyChangeSets(spec.from);\n if (spec.to !== result) {\n throw new Error(\n `${this.expected} spec failed. \"${spec.from}\", expected \"${spec.to}\", but got \"${result}\", ${this.pattern}`,\n );\n }\n });\n }\n\n applyRule(content: string): Diff[] {\n this.reset();\n const resultList = collectAll(this.pattern, content);\n return resultList\n .map((matches) => {\n // JavaScriptでの正規表現では /(?<!記|大)事/ のような書き方ができない\n // /(記|大)事/ で regexpMustEmpty $1 の場合、第一グループが空じゃないとマッチしない、というルールにして回避\n if (this.regexpMustEmpty) {\n const match = /^\\$([0-9]+)$/.exec(this.regexpMustEmpty);\n if (match == null) {\n throw new Error(`${this.expected} target failed. please use $1 format.`);\n }\n const index = parseInt(match[1], 10);\n if (matches[index]) {\n return null;\n }\n }\n // 検出したものと期待するものが一致している場合無視させる\n if (this.expected === matches[0]) {\n return null;\n }\n return new Diff({\n pattern: this.pattern,\n expected: this.expected,\n index: matches.index,\n matches: matches,\n rule: this,\n });\n })\n .filter((v) => !!v) as any as Diff[]; // (Diff | null)[] を Diff[] に変換したい\n }\n\n toJSON() {\n const alt: any = {};\n for (const key in this) {\n if (key.indexOf(\"_\") === 0) {\n continue;\n }\n const value = (<any>this)[key];\n if (value instanceof RegExp) {\n alt[key] = value.toString();\n continue;\n }\n alt[key] = value;\n }\n return alt;\n }\n}\n"]}
|
package/lib/ruleSpec.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
exports.RuleSpec = void 0;
|
|
4
|
+
class RuleSpec {
|
|
5
|
+
constructor(src) {
|
|
5
6
|
if (!src) {
|
|
6
|
-
throw new Error("src is
|
|
7
|
+
throw new Error("src is required");
|
|
7
8
|
}
|
|
8
9
|
if (!src.from) {
|
|
9
|
-
throw new Error("from is
|
|
10
|
+
throw new Error("from is required");
|
|
10
11
|
}
|
|
11
12
|
if (!src.to) {
|
|
12
|
-
throw new Error("to is
|
|
13
|
+
throw new Error("to is required");
|
|
13
14
|
}
|
|
14
15
|
this.from = src.from;
|
|
15
16
|
this.to = src.to;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
}());
|
|
18
|
+
}
|
|
19
19
|
exports.RuleSpec = RuleSpec;
|
|
20
20
|
//# sourceMappingURL=ruleSpec.js.map
|
package/lib/ruleSpec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleSpec.js","sourceRoot":"","sources":["ruleSpec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ruleSpec.js","sourceRoot":"","sources":["ruleSpec.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IAIjB,YAAY,GAAiB;QACzB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IACrB,CAAC;CACJ;AAjBD,4BAiBC","sourcesContent":["import * as raw from \"./raw\";\n\nexport class RuleSpec {\n from: string;\n to: string;\n\n constructor(src: raw.RuleSpec) {\n if (!src) {\n throw new Error(\"src is required\");\n }\n if (!src.from) {\n throw new Error(\"from is required\");\n }\n if (!src.to) {\n throw new Error(\"to is required\");\n }\n this.from = src.from;\n this.to = src.to;\n }\n}\n"]}
|
package/lib/target.js
CHANGED
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
exports.Target = void 0;
|
|
4
|
+
const regexp_1 = require("./utils/regexp");
|
|
5
|
+
const targetPattern_1 = require("./targetPattern");
|
|
6
|
+
class Target {
|
|
7
|
+
constructor(src) {
|
|
7
8
|
if (!src) {
|
|
8
|
-
throw new Error("src is
|
|
9
|
+
throw new Error("src is required");
|
|
9
10
|
}
|
|
10
|
-
this.file = regexp_1.parseRegExpString(src.file) || new RegExp(regexp_1.escapeSpecialChars(src.file));
|
|
11
|
+
this.file = (0, regexp_1.parseRegExpString)(src.file) || new RegExp((0, regexp_1.escapeSpecialChars)(src.file));
|
|
11
12
|
if (src.includes) {
|
|
12
|
-
this.includes = src.includes.map(
|
|
13
|
+
this.includes = src.includes.map((include) => new targetPattern_1.TargetPattern(include));
|
|
13
14
|
}
|
|
14
15
|
else {
|
|
15
16
|
this.includes = [];
|
|
16
17
|
}
|
|
17
18
|
if (src.excludes) {
|
|
18
|
-
this.excludes = src.excludes.map(
|
|
19
|
+
this.excludes = src.excludes.map((exclude) => new targetPattern_1.TargetPattern(exclude));
|
|
19
20
|
}
|
|
20
21
|
else {
|
|
21
22
|
this.excludes = [];
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
+
reset() {
|
|
25
26
|
this.file.lastIndex = 0;
|
|
26
|
-
this.includes.forEach(
|
|
27
|
-
this.excludes.forEach(
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
for (
|
|
27
|
+
this.includes.forEach((include) => include.reset());
|
|
28
|
+
this.excludes.forEach((exclude) => exclude.reset());
|
|
29
|
+
}
|
|
30
|
+
toJSON() {
|
|
31
|
+
const alt = {};
|
|
32
|
+
for (const key in this) {
|
|
32
33
|
if (key.indexOf("_") === 0) {
|
|
33
34
|
continue;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
+
const value = this[key];
|
|
36
37
|
if (value instanceof RegExp) {
|
|
37
38
|
alt[key] = value.toString();
|
|
38
39
|
continue;
|
|
@@ -40,8 +41,7 @@ var Target = /** @class */ (function () {
|
|
|
40
41
|
alt[key] = value;
|
|
41
42
|
}
|
|
42
43
|
return alt;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
}());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
46
|
exports.Target = Target;
|
|
47
47
|
//# sourceMappingURL=target.js.map
|
package/lib/target.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.js","sourceRoot":"","sources":["target.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["target.ts"],"names":[],"mappings":";;;AAAA,2CAAuE;AAGvE,mDAAgD;AAEhD,MAAa,MAAM;IAKf,YAAY,GAAe;QACvB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAA,2BAAkB,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM;QACF,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS;YACb,CAAC;YACD,MAAM,KAAK,GAAS,IAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AA3CD,wBA2CC","sourcesContent":["import { parseRegExpString, escapeSpecialChars } from \"./utils/regexp\";\n\nimport * as raw from \"./raw\";\nimport { TargetPattern } from \"./targetPattern\";\n\nexport class Target {\n file: RegExp;\n includes: TargetPattern[];\n excludes: TargetPattern[];\n\n constructor(src: raw.Target) {\n if (!src) {\n throw new Error(\"src is required\");\n }\n this.file = parseRegExpString(src.file) || new RegExp(escapeSpecialChars(src.file));\n if (src.includes) {\n this.includes = src.includes.map((include) => new TargetPattern(include));\n } else {\n this.includes = [];\n }\n if (src.excludes) {\n this.excludes = src.excludes.map((exclude) => new TargetPattern(exclude));\n } else {\n this.excludes = [];\n }\n }\n\n reset() {\n this.file.lastIndex = 0;\n this.includes.forEach((include) => include.reset());\n this.excludes.forEach((exclude) => exclude.reset());\n }\n\n toJSON() {\n const alt: any = {};\n for (const key in this) {\n if (key.indexOf(\"_\") === 0) {\n continue;\n }\n const value = (<any>this)[key];\n if (value instanceof RegExp) {\n alt[key] = value.toString();\n continue;\n }\n alt[key] = value;\n }\n return alt;\n }\n}\n"]}
|
package/lib/targetPattern.js
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
exports.TargetPattern = void 0;
|
|
4
|
+
const regexp_1 = require("./utils/regexp");
|
|
5
|
+
class TargetPattern {
|
|
6
|
+
constructor(src) {
|
|
6
7
|
if (!src) {
|
|
7
|
-
throw new Error("src is
|
|
8
|
+
throw new Error("src is required");
|
|
8
9
|
}
|
|
9
10
|
if (typeof src === "string") {
|
|
10
|
-
this.pattern = regexp_1.parseRegExpString(src) || new RegExp(regexp_1.escapeSpecialChars(src));
|
|
11
|
-
this.pattern = regexp_1.addDefaultFlags(this.pattern);
|
|
11
|
+
this.pattern = (0, regexp_1.parseRegExpString)(src) || new RegExp((0, regexp_1.escapeSpecialChars)(src));
|
|
12
|
+
this.pattern = (0, regexp_1.addDefaultFlags)(this.pattern);
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
15
|
else {
|
|
15
16
|
if (!src.pattern) {
|
|
16
|
-
throw new Error("pattern is
|
|
17
|
+
throw new Error("pattern is required");
|
|
17
18
|
}
|
|
18
|
-
this.pattern = regexp_1.parseRegExpString(src.pattern) || regexp_1.addDefaultFlags(new RegExp(regexp_1.escapeSpecialChars(src.pattern)));
|
|
19
|
-
this.pattern = regexp_1.addDefaultFlags(this.pattern);
|
|
19
|
+
this.pattern = (0, regexp_1.parseRegExpString)(src.pattern) || (0, regexp_1.addDefaultFlags)(new RegExp((0, regexp_1.escapeSpecialChars)(src.pattern)));
|
|
20
|
+
this.pattern = (0, regexp_1.addDefaultFlags)(this.pattern);
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
+
reset() {
|
|
23
24
|
this.pattern.lastIndex = 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
for (
|
|
25
|
+
}
|
|
26
|
+
toJSON() {
|
|
27
|
+
const alt = {};
|
|
28
|
+
for (const key in this) {
|
|
28
29
|
if (key.indexOf("_") === 0) {
|
|
29
30
|
continue;
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
const value = this[key];
|
|
32
33
|
if (value instanceof RegExp) {
|
|
33
34
|
alt[key] = value.toString();
|
|
34
35
|
continue;
|
|
@@ -36,8 +37,7 @@ var TargetPattern = /** @class */ (function () {
|
|
|
36
37
|
alt[key] = value;
|
|
37
38
|
}
|
|
38
39
|
return alt;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
}());
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
42
|
exports.TargetPattern = TargetPattern;
|
|
43
43
|
//# sourceMappingURL=targetPattern.js.map
|
package/lib/targetPattern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targetPattern.js","sourceRoot":"","sources":["targetPattern.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"targetPattern.js","sourceRoot":"","sources":["targetPattern.ts"],"names":[],"mappings":";;;AAAA,2CAAwF;AAGxF,MAAa,aAAa;IAGtB,YAAY,GAA+B;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAA,2BAAkB,EAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,OAAO,GAAG,IAAA,wBAAe,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO;QACX,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAA,wBAAe,EAAC,IAAI,MAAM,CAAC,IAAA,2BAAkB,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9G,IAAI,CAAC,OAAO,GAAG,IAAA,wBAAe,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACF,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS;YACb,CAAC;YACD,MAAM,KAAK,GAAS,IAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAvCD,sCAuCC","sourcesContent":["import { parseRegExpString, addDefaultFlags, escapeSpecialChars } from \"./utils/regexp\";\nimport * as raw from \"./raw\";\n\nexport class TargetPattern {\n pattern: RegExp;\n\n constructor(src: string | raw.TargetPattern) {\n if (!src) {\n throw new Error(\"src is required\");\n }\n if (typeof src === \"string\") {\n this.pattern = parseRegExpString(src) || new RegExp(escapeSpecialChars(src));\n this.pattern = addDefaultFlags(this.pattern);\n return;\n } else {\n if (!src.pattern) {\n throw new Error(\"pattern is required\");\n }\n this.pattern = parseRegExpString(src.pattern) || addDefaultFlags(new RegExp(escapeSpecialChars(src.pattern)));\n this.pattern = addDefaultFlags(this.pattern);\n }\n }\n\n reset() {\n this.pattern.lastIndex = 0;\n }\n\n toJSON() {\n const alt: any = {};\n for (const key in this) {\n if (key.indexOf(\"_\") === 0) {\n continue;\n }\n const value = (<any>this)[key];\n if (value instanceof RegExp) {\n alt[key] = value.toString();\n continue;\n }\n alt[key] = value;\n }\n return alt;\n }\n}\n"]}
|
package/lib/utils/content.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.indexToLineColumn = indexToLineColumn;
|
|
3
4
|
function indexToLineColumn(index, content) {
|
|
4
5
|
if (index < 0 || content[index] == null) {
|
|
5
|
-
throw new Error(
|
|
6
|
+
throw new Error(`unbound index value: ${index}`);
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
let line = 0;
|
|
9
|
+
let prevLfIndex = 0;
|
|
9
10
|
while (true) {
|
|
10
|
-
|
|
11
|
+
const lfIndex = content.indexOf("\n", prevLfIndex + 1);
|
|
11
12
|
if (lfIndex === -1 || index <= lfIndex) {
|
|
12
13
|
return {
|
|
13
|
-
line
|
|
14
|
+
line,
|
|
14
15
|
column: index - (prevLfIndex === 0 ? 0 : prevLfIndex + 1),
|
|
15
16
|
};
|
|
16
17
|
}
|
|
@@ -18,5 +19,4 @@ function indexToLineColumn(index, content) {
|
|
|
18
19
|
prevLfIndex = lfIndex;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
exports.indexToLineColumn = indexToLineColumn;
|
|
22
22
|
//# sourceMappingURL=content.js.map
|
package/lib/utils/content.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["content.ts"],"names":[],"mappings":";;AAAA,SAAgB,iBAAiB,CAAC,KAAa,EAAE,OAAe;IAC5D,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["content.ts"],"names":[],"mappings":";;AAAA,8CAiBC;AAjBD,SAAgB,iBAAiB,CAAC,KAAa,EAAE,OAAe;IAC5D,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACrC,OAAO;gBACH,IAAI;gBACJ,MAAM,EAAE,KAAK,GAAG,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;aAC5D,CAAC;QACN,CAAC;QACD,IAAI,EAAE,CAAC;QACP,WAAW,GAAG,OAAO,CAAC;IAC1B,CAAC;AACL,CAAC","sourcesContent":["export function indexToLineColumn(index: number, content: string) {\n if (index < 0 || content[index] == null) {\n throw new Error(`unbound index value: ${index}`);\n }\n let line = 0;\n let prevLfIndex = 0;\n while (true) {\n const lfIndex = content.indexOf(\"\\n\", prevLfIndex + 1);\n if (lfIndex === -1 || index <= lfIndex) {\n return {\n line,\n column: index - (prevLfIndex === 0 ? 0 : prevLfIndex + 1),\n };\n }\n line++;\n prevLfIndex = lfIndex;\n }\n}\n"]}
|