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/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";;AAAA,2BAA6B;AAC7B,uBAAyB;AACzB,8BAAgC;AAChC,2BAA6B;AAE7B,uBAAwD;AACxD,2CAAoD;AAEpD,yCAA2C;AAC3C,IAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAiBvC,IAAM,IAAI,GAAG,WAAW;KACnB,MAAM,CAAqB,gBAAgB,CAAC;KAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;KACrC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;KACtD,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;KACtD,MAAM,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;KAClD,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC5C,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;KACtD,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACrC,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAC9C,MAAM,CAAC,UAAC,IAAI,EAAE,IAAI;IAEf,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;QAClC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,gBAAc,OAAO,CAAC,GAAG,EAAE,YAAS,CAAC,CAAC;SACtD;QACD,IAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;SACV;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,OAAO;SACV;KACJ;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC7D;IAED,IAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,QAAQ;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,gBAAc,QAAQ,QAAK,CAAC,CAAC;SAC7C;QACD,IAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,IAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,IAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAEhC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAEtB;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACrB,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,KAAK,MAAM,EAAE;gBACpB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,cAAY,QAAU,CAAC,CAAC;aACxC;SAEJ;aAAM;YACH,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACxB,IAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjF,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3B,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,OAAO;iBACV;gBACD,IAAM,UAAU,GAAG,2BAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAI,SAAS,CAAC,QAAQ,UAAI,UAAU,CAAC,IAAI,GAAG,CAAC,WAAI,UAAU,CAAC,MAAM,GAAG,CAAC,YAAM,MAAM,gBAAM,KAAO,CAAC,CAAC;YAChH,CAAC,CAAC,CAAC;SACN;IACL,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1C,MAAM,IAAI,KAAK,CAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAsB,CAAC,CAAC;KACrE;IAED,SAAS,oBAAoB,CAAC,SAAiB;QAC3C,IAAI,SAAmB,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC7B,SAAS,GAAO,IAAI,CAAC,KAAK,QAAC,CAAC;SAC/B;aAAM;YACH,IAAM,SAAS,GAAG,kBAAe,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,+BAA6B,SAAW,CAAC,CAAC;aAC7D;YAED,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,cAAW,CAAC,GAAG,CAAC,WAAK,IAAM,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;SACN;QAED,OAAO,oBAAiB,eAAI,SAAS,EAAE;IAC3C,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,IAAI;KACC,UAAU,CAAS,MAAM,CAAC;KAC1B,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,UAAC,KAAK,EAAE,KAAK;IACjB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEP,WAAW;KACN,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;KACxB,KAAK,CAAC,YAAY,CAAC,CAAC;AAEzB,SAAS,YAAY,CAAC,GAAQ;IAC1B,IAAI,GAAG,YAAY,KAAK,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC5B;SAAM;QACH,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACtB;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as yaml from \"js-yaml\";\nimport * as diff from \"diff\";\n\nimport { fromYAMLFilePaths, getRuleFilePath } from \"./\";\nimport { indexToLineColumn } from \"./utils/content\";\n\nimport * as commandpost from \"commandpost\";\nconst pkg = require(\"../package.json\");\n\ninterface RootOpts {\n rulesJson: boolean;\n rulesYaml: boolean;\n replace: boolean;\n verify: boolean;\n stdout: boolean;\n diff: boolean;\n verbose: boolean;\n rules: string[];\n}\n\ninterface RootArgs {\n files: string[];\n}\n\nconst root = commandpost\n .create<RootOpts, RootArgs>(\"prh [files...]\")\n .version(pkg.version, \"-v, --version\")\n .option(\"--rules-json\", \"emit rule set in json format\")\n .option(\"--rules-yaml\", \"emit rule set in yaml format\")\n .option(\"--rules <path>\", \"path to rule yaml file\")\n .option(\"--verify\", \"checking file validity\")\n .option(\"--stdout\", \"print replaced content to stdout\")\n .option(\"--diff\", \"show unified diff\")\n .option(\"--verbose\", \"makes output more verbose\")\n .option(\"-r, --replace\", \"replace input files\")\n .action((opts, args) => {\n\n if (opts.rulesJson || opts.rulesYaml) {\n if (opts.verbose) {\n console.warn(`processing ${process.cwd()} dir...`);\n }\n const engine = getEngineByTargetDir(process.cwd());\n if (opts.rulesJson) {\n console.log(JSON.stringify(engine, null, 2));\n return;\n } else if (opts.rulesYaml) {\n console.log(yaml.dump(JSON.parse(JSON.stringify(engine, null, 2))));\n return;\n }\n }\n\n if (args.files.length === 0) {\n throw new Error(\"files is required more than 1 argument\");\n }\n\n const invalidFiles: string[] = [];\n args.files.forEach(filePath => {\n if (opts.verbose) {\n console.warn(`processing ${filePath}...`);\n }\n const content = fs.readFileSync(filePath, { encoding: \"utf8\" });\n const engine = getEngineByTargetDir(path.dirname(filePath));\n const changeSet = engine.makeChangeSet(filePath);\n if (changeSet.diffs.length !== 0) {\n invalidFiles.push(filePath);\n }\n\n if (opts.stdout) {\n const result = changeSet.applyChangeSets(content);\n process.stdout.write(result);\n\n } else if (opts.diff) {\n const result = changeSet.applyChangeSets(content);\n const patch = diff.createPatch(filePath, content, result, \"before\", \"replaced\");\n console.log(patch);\n\n } else if (opts.replace) {\n const result = changeSet.applyChangeSets(content);\n if (content !== result) {\n fs.writeFileSync(filePath, result);\n console.warn(`replaced ${filePath}`);\n }\n\n } else {\n changeSet.diffs.forEach(diff => {\n const before = changeSet.content.substr(diff.index, diff.tailIndex - diff.index);\n const after = diff.newText;\n if (after == null) {\n return;\n }\n const lineColumn = indexToLineColumn(diff.index, changeSet.content);\n console.log(`${changeSet.filePath}(${lineColumn.line + 1},${lineColumn.column + 1}): ${before} → ${after}`);\n });\n }\n });\n if (opts.verify && invalidFiles.length !== 0) {\n throw new Error(`${invalidFiles.join(\" ,\")} failed proofreading`);\n }\n\n function getEngineByTargetDir(targetDir: string) {\n let rulePaths: string[];\n if (opts.rules && opts.rules[0]) {\n rulePaths = [...opts.rules];\n } else {\n const foundPath = getRuleFilePath(targetDir);\n if (!foundPath) {\n throw new Error(`can't find rule file from ${targetDir}`);\n }\n\n rulePaths = [foundPath];\n }\n\n if (opts.verbose) {\n rulePaths.forEach((path, i) => {\n console.warn(` apply ${i + 1}: ${path}`);\n });\n }\n\n return fromYAMLFilePaths(...rulePaths);\n }\n });\n\nroot\n .subCommand<{}, {}>(\"init\")\n .description(\"generate prh.yml\")\n .action((_opts, _args) => {\n fs.createReadStream(path.resolve(__dirname, \"../misc/prh.yml\")).pipe(fs.createWriteStream(\"prh.yml\"));\n console.log(\"create prh.yml\");\n console.log(\"see prh/rules collection https://github.com/prh/rules\");\n });\n\ncommandpost\n .exec(root, process.argv)\n .catch(errorHandler);\n\nfunction errorHandler(err: any) {\n if (err instanceof Error) {\n console.error(err.stack);\n } else {\n console.error(err);\n }\n return Promise.resolve(null).then(() => {\n process.exit(1);\n });\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as yaml from \"js-yaml\";\nimport * as diff from \"diff\";\n\nimport { fromYAMLFilePaths, getRuleFilePath } from \"./\";\nimport { indexToLineColumn } from \"./utils/content\";\n\nimport { Command } from \"commander\";\nconst pkg = require(\"../package.json\");\n\ninterface Options {\n rulesJson: boolean;\n rulesYaml: boolean;\n replace: boolean;\n verify: boolean;\n stdout: boolean;\n diff: boolean;\n verbose: boolean;\n rules?: string[];\n}\n\nconst program = new Command();\n\nprogram\n .name(\"prh\")\n .version(pkg.version, \"-v, --version\")\n .argument(\"[files...]\")\n .option(\"--rules-json\", \"emit rule set in json format\")\n .option(\"--rules-yaml\", \"emit rule set in yaml format\")\n .option(\"--rules <path>\", \"path to rule yaml file\", (value: string, previous: string[]) => previous.concat([value]), [] as string[])\n .option(\"--verify\", \"checking file validity\")\n .option(\"--stdout\", \"print replaced content to stdout\")\n .option(\"--diff\", \"show unified diff\")\n .option(\"--verbose\", \"makes output more verbose\")\n .option(\"-r, --replace\", \"replace input files\")\n .action((files: string[], opts: Options) => {\n if (opts.rulesJson || opts.rulesYaml) {\n if (opts.verbose) {\n console.warn(`processing ${process.cwd()} dir...`);\n }\n const engine = getEngineByTargetDir(process.cwd(), opts);\n if (opts.rulesJson) {\n console.log(JSON.stringify(engine, null, 2));\n return;\n } else if (opts.rulesYaml) {\n console.log(yaml.dump(JSON.parse(JSON.stringify(engine, null, 2))));\n return;\n }\n }\n\n if (files.length === 0) {\n throw new Error(\"files is required more than 1 argument\");\n }\n\n const invalidFiles: string[] = [];\n files.forEach((filePath) => {\n if (opts.verbose) {\n console.warn(`processing ${filePath}...`);\n }\n const content = fs.readFileSync(filePath, { encoding: \"utf8\" });\n const engine = getEngineByTargetDir(path.dirname(filePath), opts);\n const changeSet = engine.makeChangeSet(filePath);\n if (changeSet.diffs.length !== 0) {\n invalidFiles.push(filePath);\n }\n\n if (opts.stdout) {\n const result = changeSet.applyChangeSets(content);\n process.stdout.write(result);\n } else if (opts.diff) {\n const result = changeSet.applyChangeSets(content);\n const patch = diff.createPatch(filePath, content, result, \"before\", \"replaced\");\n console.log(patch);\n } else if (opts.replace) {\n const result = changeSet.applyChangeSets(content);\n if (content !== result) {\n fs.writeFileSync(filePath, result);\n console.warn(`replaced ${filePath}`);\n }\n } else {\n changeSet.diffs.forEach((d) => {\n const before = changeSet.content.substr(d.index, d.tailIndex - d.index);\n const after = d.newText;\n if (after == null) {\n return;\n }\n const lineColumn = indexToLineColumn(d.index, changeSet.content);\n console.log(`${changeSet.filePath}(${lineColumn.line + 1},${lineColumn.column + 1}): ${before} → ${after}`);\n });\n }\n });\n if (opts.verify && invalidFiles.length !== 0) {\n throw new Error(`${invalidFiles.join(\" ,\")} failed proofreading`);\n }\n });\n\nprogram\n .command(\"init\")\n .description(\"generate prh.yml\")\n .action(() => {\n fs.createReadStream(path.resolve(__dirname, \"../misc/prh.yml\")).pipe(fs.createWriteStream(\"prh.yml\"));\n console.log(\"create prh.yml\");\n console.log(\"see prh/rules collection https://github.com/prh/rules\");\n });\n\nfunction getEngineByTargetDir(targetDir: string, opts: Options) {\n let rulePaths: string[];\n if (opts.rules && opts.rules[0]) {\n rulePaths = [...opts.rules];\n } else {\n const foundPath = getRuleFilePath(targetDir);\n if (!foundPath) {\n throw new Error(`can't find rule file from ${targetDir}`);\n }\n\n rulePaths = [foundPath];\n }\n\n if (opts.verbose) {\n rulePaths.forEach((p, i) => {\n console.warn(` apply ${i + 1}: ${p}`);\n });\n }\n\n return fromYAMLFilePaths(...rulePaths);\n}\n\nprogram.parseAsync(process.argv).catch(errorHandler);\n\nfunction errorHandler(err: any) {\n if (err instanceof Error) {\n console.error(err.stack);\n } else {\n console.error(err);\n }\n return Promise.resolve(null).then(() => {\n process.exit(1);\n });\n}\n"]}
package/lib/engine.js CHANGED
@@ -1,56 +1,55 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var fs = require("fs");
4
- var regexp_1 = require("./utils/regexp");
5
- var paragraph_1 = require("./paragraph");
6
- var target_1 = require("./target");
7
- var rule_1 = require("./rule");
8
- var changeset_1 = require("./changeset");
9
- var Engine = /** @class */ (function () {
10
- function Engine(src) {
3
+ exports.Engine = void 0;
4
+ const fs = require("fs");
5
+ const regexp_1 = require("./utils/regexp");
6
+ const paragraph_1 = require("./paragraph");
7
+ const target_1 = require("./target");
8
+ const rule_1 = require("./rule");
9
+ const changeset_1 = require("./changeset");
10
+ class Engine {
11
+ constructor(src) {
11
12
  if (!src) {
12
- throw new Error("src is requried");
13
+ throw new Error("src is required");
13
14
  }
14
15
  this.version = +src.version || 1;
15
- this.targets = (src.targets || []).map(function (target) { return new target_1.Target(target); });
16
- this.rules = (src.rules || []).map(function (rule) { return new rule_1.Rule(rule); });
16
+ this.targets = (src.targets || []).map((target) => new target_1.Target(target));
17
+ this.rules = (src.rules || []).map((rule) => new rule_1.Rule(rule));
17
18
  this.sourcePaths = [];
18
19
  }
19
- Engine.prototype.merge = function (other) {
20
- var _this = this;
20
+ merge(other) {
21
21
  if (!other) {
22
22
  throw new Error("other is required");
23
23
  }
24
24
  if (this.version !== other.version) {
25
25
  throw new Error("version mismatch!");
26
26
  }
27
- other.sourcePaths.forEach(function (sourcePath) {
28
- var exists = _this.sourcePaths.filter(function (otherSourcePath) { return otherSourcePath === sourcePath; }).length !== 0;
27
+ other.sourcePaths.forEach((sourcePath) => {
28
+ const exists = this.sourcePaths.filter((otherSourcePath) => otherSourcePath === sourcePath).length !== 0;
29
29
  if (!exists) {
30
- _this.sourcePaths.push(sourcePath);
30
+ this.sourcePaths.push(sourcePath);
31
31
  }
32
32
  });
33
- other.targets.forEach(function (otherTarget) {
34
- var exists = _this.targets.filter(function (target) { return regexp_1.equals(target.file, otherTarget.file); }).length !== 0;
33
+ other.targets.forEach((otherTarget) => {
34
+ const exists = this.targets.filter((target) => (0, regexp_1.equals)(target.file, otherTarget.file)).length !== 0;
35
35
  if (!exists) {
36
- _this.targets.push(otherTarget);
36
+ this.targets.push(otherTarget);
37
37
  }
38
38
  });
39
39
  // NOTE https://github.com/vvakame/prh/issues/18#issuecomment-222524140
40
- var reqRules = other.rules.filter(function (otherRule) {
41
- return _this.rules.filter(function (rule) { return rule.expected === otherRule.expected; }).length === 0;
40
+ const reqRules = other.rules.filter((otherRule) => {
41
+ return this.rules.filter((rule) => rule.expected === otherRule.expected).length === 0;
42
42
  });
43
43
  this.rules = this.rules.concat(reqRules);
44
- };
45
- Engine.prototype.makeChangeSet = function (filePath, contentText) {
46
- var _this = this;
47
- var content = contentText != null ? contentText : fs.readFileSync(filePath, { encoding: "utf8" });
48
- var re = /([^]*?)\n{2,}/g;
49
- var paragraphs = [];
44
+ }
45
+ makeChangeSet(filePath, contentText) {
46
+ const content = contentText != null ? contentText : fs.readFileSync(filePath, { encoding: "utf8" });
47
+ const re = /([^]*?)\n{2,}/g;
48
+ const paragraphs = [];
50
49
  {
51
- var lastIndex = 0;
50
+ let lastIndex = 0;
52
51
  while (true) {
53
- var matches = re.exec(content);
52
+ const matches = re.exec(content);
54
53
  if (!matches) {
55
54
  paragraphs.push(new paragraph_1.Paragraph(lastIndex, content.substr(lastIndex)));
56
55
  break;
@@ -59,19 +58,19 @@ var Engine = /** @class */ (function () {
59
58
  lastIndex = re.lastIndex;
60
59
  }
61
60
  }
62
- var diffs = paragraphs.map(function (p) { return p.makeDiffs(_this.rules); }).reduce(function (p, c) { return p.concat(c); }, []);
63
- var changeSet = new changeset_1.ChangeSet({ filePath: filePath, content: content, diffs: diffs });
64
- var includes = null;
65
- var excludes = null;
66
- this.targets.forEach(function (target) {
61
+ const diffs = paragraphs.map((p) => p.makeDiffs(this.rules)).reduce((p, c) => p.concat(c), []);
62
+ let changeSet = new changeset_1.ChangeSet({ filePath, content, diffs });
63
+ let includes = null;
64
+ let excludes = null;
65
+ this.targets.forEach((target) => {
67
66
  target.reset();
68
67
  if (!target.file.test(filePath)) {
69
68
  return;
70
69
  }
71
70
  if (target.includes.length !== 0) {
72
71
  // .ts の // の後や /* */ の内部だけ対象にしたい場合のための機能
73
- target.includes.forEach(function (include) {
74
- var intersect = changeset_1.makeChangeSet(filePath, content, include.pattern);
72
+ target.includes.forEach((include) => {
73
+ const intersect = (0, changeset_1.makeChangeSet)(filePath, content, include.pattern);
75
74
  if (includes) {
76
75
  includes = includes.concat(intersect);
77
76
  }
@@ -82,8 +81,8 @@ var Engine = /** @class */ (function () {
82
81
  }
83
82
  if (target.excludes.length !== 0) {
84
83
  // .re の #@ の後を対象にしたくない場合のための機能
85
- target.excludes.forEach(function (exclude) {
86
- var subsract = changeset_1.makeChangeSet(filePath, content, exclude.pattern);
84
+ target.excludes.forEach((exclude) => {
85
+ const subsract = (0, changeset_1.makeChangeSet)(filePath, content, exclude.pattern);
87
86
  if (excludes) {
88
87
  excludes = excludes.concat(subsract);
89
88
  }
@@ -100,15 +99,14 @@ var Engine = /** @class */ (function () {
100
99
  changeSet = changeSet.subtract(excludes);
101
100
  }
102
101
  return changeSet;
103
- };
104
- Engine.prototype.replaceByRule = function (filePath, content) {
102
+ }
103
+ replaceByRule(filePath, content) {
105
104
  if (content == null) {
106
105
  content = fs.readFileSync(filePath, { encoding: "utf8" });
107
106
  }
108
- var changeSet = this.makeChangeSet(filePath, content);
107
+ const changeSet = this.makeChangeSet(filePath, content);
109
108
  return changeSet.applyChangeSets(content);
110
- };
111
- return Engine;
112
- }());
109
+ }
110
+ }
113
111
  exports.Engine = Engine;
114
112
  //# sourceMappingURL=engine.js.map
package/lib/engine.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":";;AAAA,uBAAyB;AAEzB,yCAAwC;AAGxC,yCAAwC;AACxC,mCAAkC;AAClC,+BAA8B;AAC9B,yCAAuD;AAEvD;IAMI,gBAAY,GAAe;QACvB,IAAI,CAAC,GAAG,EAAE;YACN,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;SACtC;QACD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,IAAI,eAAM,CAAC,MAAM,CAAC,EAAlB,CAAkB,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,WAAI,CAAC,IAAI,CAAC,EAAd,CAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAK,GAAL,UAAM,KAAa;QAAnB,iBAwBC;QAvBG,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACxC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACxC;QACD,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU;YAChC,IAAM,MAAM,GAAG,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,eAAe,IAAI,OAAA,eAAe,KAAK,UAAU,EAA9B,CAA8B,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YACvG,IAAI,CAAC,MAAM,EAAE;gBACT,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACrC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,WAAW;YAC7B,IAAM,MAAM,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAArC,CAAqC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YACjG,IAAI,CAAC,MAAM,EAAE;gBACT,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAClC;QACL,CAAC,CAAC,CAAC;QACH,uEAAuE;QACvE,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAA,SAAS;YACzC,OAAO,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAApC,CAAoC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,8BAAa,GAAb,UAAc,QAAgB,EAAE,WAAoB;QAApD,iBA4DC;QA3DG,IAAM,OAAO,GAAW,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAE5G,IAAM,EAAE,GAAG,gBAAgB,CAAC;QAC5B,IAAM,UAAU,GAAgB,EAAE,CAAC;QACnC;YACI,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,OAAO,IAAI,EAAE;gBACT,IAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,CAAC,OAAO,EAAE;oBACV,UAAU,CAAC,IAAI,CAAC,IAAI,qBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACrE,MAAM;iBACT;gBACD,UAAU,CAAC,IAAI,CAAC,IAAI,qBAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;aAC5B;SACJ;QAED,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,KAAI,CAAC,KAAK,CAAC,EAAvB,CAAuB,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAX,CAAW,EAAE,EAAE,CAAC,CAAC;QAC7F,IAAI,SAAS,GAAG,IAAI,qBAAS,CAAC,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;QAE5D,IAAI,QAAQ,GAAqB,IAAI,CAAC;QACtC,IAAI,QAAQ,GAAqB,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;YACvB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC7B,OAAO;aACV;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,yCAAyC;gBACzC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;oBAC3B,IAAM,SAAS,GAAG,yBAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBACpE,IAAI,QAAQ,EAAE;wBACV,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBACzC;yBAAM;wBACH,QAAQ,GAAG,SAAS,CAAC;qBACxB;gBACL,CAAC,CAAC,CAAC;aACN;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,+BAA+B;gBAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;oBAC3B,IAAM,QAAQ,GAAG,yBAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBACnE,IAAI,QAAQ,EAAE;wBACV,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;qBACxC;yBAAM;wBACH,QAAQ,GAAG,QAAQ,CAAC;qBACvB;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE;YACV,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;SAC7C;QACD,IAAI,QAAQ,EAAE;YACV,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC5C;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,8BAAa,GAAb,UAAc,QAAgB,EAAE,OAAgB;QAC5C,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;SAC7D;QACD,IAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IACL,aAAC;AAAD,CAAC,AA/GD,IA+GC;AA/GY,wBAAM","sourcesContent":["import * as fs from \"fs\";\n\nimport { equals } from \"./utils/regexp\";\n\nimport * as raw from \"./raw\";\nimport { Paragraph } from \"./paragraph\";\nimport { Target } from \"./target\";\nimport { Rule } from \"./rule\";\nimport { makeChangeSet, ChangeSet } from \"./changeset\";\n\nexport class Engine {\n version: number;\n targets: Target[];\n rules: Rule[];\n sourcePaths: string[]; // NOTE ソースとなったファイルのパス\n\n constructor(src: raw.Config) {\n if (!src) {\n throw new Error(\"src is requried\");\n }\n this.version = +src.version || 1;\n this.targets = (src.targets || []).map(target => new Target(target));\n this.rules = (src.rules || []).map(rule => new Rule(rule));\n this.sourcePaths = [];\n }\n\n merge(other: Engine) {\n if (!other) {\n throw new Error(\"other is required\");\n }\n if (this.version !== other.version) {\n throw new Error(\"version mismatch!\");\n }\n other.sourcePaths.forEach(sourcePath => {\n const exists = this.sourcePaths.filter(otherSourcePath => otherSourcePath === sourcePath).length !== 0;\n if (!exists) {\n this.sourcePaths.push(sourcePath);\n }\n });\n other.targets.forEach(otherTarget => {\n const exists = this.targets.filter(target => equals(target.file, otherTarget.file)).length !== 0;\n if (!exists) {\n this.targets.push(otherTarget);\n }\n });\n // NOTE https://github.com/vvakame/prh/issues/18#issuecomment-222524140\n const reqRules = other.rules.filter(otherRule => {\n return this.rules.filter(rule => rule.expected === otherRule.expected).length === 0;\n });\n this.rules = this.rules.concat(reqRules);\n }\n\n makeChangeSet(filePath: string, contentText?: string): ChangeSet {\n const content: string = contentText != null ? contentText : fs.readFileSync(filePath, { encoding: \"utf8\" });\n\n const re = /([^]*?)\\n{2,}/g;\n const paragraphs: Paragraph[] = [];\n {\n let lastIndex = 0;\n while (true) {\n const matches = re.exec(content);\n if (!matches) {\n paragraphs.push(new Paragraph(lastIndex, content.substr(lastIndex)));\n break;\n }\n paragraphs.push(new Paragraph(matches.index, matches[1]));\n lastIndex = re.lastIndex;\n }\n }\n\n const diffs = paragraphs.map(p => p.makeDiffs(this.rules)).reduce((p, c) => p.concat(c), []);\n let changeSet = new ChangeSet({ filePath, content, diffs });\n\n let includes: ChangeSet | null = null;\n let excludes: ChangeSet | null = null;\n this.targets.forEach(target => {\n target.reset();\n if (!target.file.test(filePath)) {\n return;\n }\n if (target.includes.length !== 0) {\n // .ts の // の後や /* */ の内部だけ対象にしたい場合のための機能\n target.includes.forEach(include => {\n const intersect = makeChangeSet(filePath, content, include.pattern);\n if (includes) {\n includes = includes.concat(intersect);\n } else {\n includes = intersect;\n }\n });\n }\n if (target.excludes.length !== 0) {\n // .re の #@ の後を対象にしたくない場合のための機能\n target.excludes.forEach(exclude => {\n const subsract = makeChangeSet(filePath, content, exclude.pattern);\n if (excludes) {\n excludes = excludes.concat(subsract);\n } else {\n excludes = subsract;\n }\n });\n }\n });\n\n if (includes) {\n changeSet = changeSet.intersect(includes);\n }\n if (excludes) {\n changeSet = changeSet.subtract(excludes);\n }\n\n return changeSet;\n }\n\n replaceByRule(filePath: string, content?: string) {\n if (content == null) {\n content = fs.readFileSync(filePath, { encoding: \"utf8\" });\n }\n const changeSet = this.makeChangeSet(filePath, content);\n return changeSet.applyChangeSets(content);\n }\n}\n"]}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\n\nimport { equals } from \"./utils/regexp\";\n\nimport * as raw from \"./raw\";\nimport { Paragraph } from \"./paragraph\";\nimport { Target } from \"./target\";\nimport { Rule } from \"./rule\";\nimport { makeChangeSet, ChangeSet } from \"./changeset\";\n\nexport class Engine {\n version: number;\n targets: Target[];\n rules: Rule[];\n sourcePaths: string[]; // NOTE ソースとなったファイルのパス\n\n constructor(src: raw.Config) {\n if (!src) {\n throw new Error(\"src is required\");\n }\n this.version = +src.version || 1;\n this.targets = (src.targets || []).map((target) => new Target(target));\n this.rules = (src.rules || []).map((rule) => new Rule(rule));\n this.sourcePaths = [];\n }\n\n merge(other: Engine) {\n if (!other) {\n throw new Error(\"other is required\");\n }\n if (this.version !== other.version) {\n throw new Error(\"version mismatch!\");\n }\n other.sourcePaths.forEach((sourcePath) => {\n const exists = this.sourcePaths.filter((otherSourcePath) => otherSourcePath === sourcePath).length !== 0;\n if (!exists) {\n this.sourcePaths.push(sourcePath);\n }\n });\n other.targets.forEach((otherTarget) => {\n const exists = this.targets.filter((target) => equals(target.file, otherTarget.file)).length !== 0;\n if (!exists) {\n this.targets.push(otherTarget);\n }\n });\n // NOTE https://github.com/vvakame/prh/issues/18#issuecomment-222524140\n const reqRules = other.rules.filter((otherRule) => {\n return this.rules.filter((rule) => rule.expected === otherRule.expected).length === 0;\n });\n this.rules = this.rules.concat(reqRules);\n }\n\n makeChangeSet(filePath: string, contentText?: string): ChangeSet {\n const content: string = contentText != null ? contentText : fs.readFileSync(filePath, { encoding: \"utf8\" });\n\n const re = /([^]*?)\\n{2,}/g;\n const paragraphs: Paragraph[] = [];\n {\n let lastIndex = 0;\n while (true) {\n const matches = re.exec(content);\n if (!matches) {\n paragraphs.push(new Paragraph(lastIndex, content.substr(lastIndex)));\n break;\n }\n paragraphs.push(new Paragraph(matches.index, matches[1]));\n lastIndex = re.lastIndex;\n }\n }\n\n const diffs = paragraphs.map((p) => p.makeDiffs(this.rules)).reduce((p, c) => p.concat(c), []);\n let changeSet = new ChangeSet({ filePath, content, diffs });\n\n let includes: ChangeSet | null = null;\n let excludes: ChangeSet | null = null;\n this.targets.forEach((target) => {\n target.reset();\n if (!target.file.test(filePath)) {\n return;\n }\n if (target.includes.length !== 0) {\n // .ts の // の後や /* */ の内部だけ対象にしたい場合のための機能\n target.includes.forEach((include) => {\n const intersect = makeChangeSet(filePath, content, include.pattern);\n if (includes) {\n includes = includes.concat(intersect);\n } else {\n includes = intersect;\n }\n });\n }\n if (target.excludes.length !== 0) {\n // .re の #@ の後を対象にしたくない場合のための機能\n target.excludes.forEach((exclude) => {\n const subsract = makeChangeSet(filePath, content, exclude.pattern);\n if (excludes) {\n excludes = excludes.concat(subsract);\n } else {\n excludes = subsract;\n }\n });\n }\n });\n\n if (includes) {\n changeSet = changeSet.intersect(includes);\n }\n if (excludes) {\n changeSet = changeSet.subtract(excludes);\n }\n\n return changeSet;\n }\n\n replaceByRule(filePath: string, content?: string) {\n if (content == null) {\n content = fs.readFileSync(filePath, { encoding: \"utf8\" });\n }\n const changeSet = this.makeChangeSet(filePath, content);\n return changeSet.applyChangeSets(content);\n }\n}\n"]}
package/lib/index.js CHANGED
@@ -1,54 +1,56 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var fs = require("fs");
4
- var path = require("path");
5
- var yaml = require("js-yaml");
6
- var engine_1 = require("./engine");
7
- exports.Engine = engine_1.Engine;
8
- var changeset_1 = require("./changeset/");
9
- exports.ChangeSet = changeset_1.ChangeSet;
10
- exports.Diff = changeset_1.Diff;
11
- function fromYAMLFilePaths() {
12
- var configPaths = [];
13
- for (var _i = 0; _i < arguments.length; _i++) {
14
- configPaths[_i] = arguments[_i];
15
- }
16
- var engine = fromYAMLFilePath(configPaths[0]);
17
- configPaths.splice(1).forEach(function (path) {
3
+ exports.Diff = exports.ChangeSet = exports.Engine = void 0;
4
+ exports.fromYAMLFilePaths = fromYAMLFilePaths;
5
+ exports.fromYAMLFilePath = fromYAMLFilePath;
6
+ exports.fromYAML = fromYAML;
7
+ exports.fromRowConfig = fromRowConfig;
8
+ exports.fromYAMLFilePathsAsync = fromYAMLFilePathsAsync;
9
+ exports.fromYAMLFilePathAsync = fromYAMLFilePathAsync;
10
+ exports.fromYAMLAsync = fromYAMLAsync;
11
+ exports.fromRowConfigAsync = fromRowConfigAsync;
12
+ exports.getRuleFilePath = getRuleFilePath;
13
+ const fs = require("fs");
14
+ const path = require("path");
15
+ const yaml = require("js-yaml");
16
+ const engine_1 = require("./engine");
17
+ Object.defineProperty(exports, "Engine", { enumerable: true, get: function () { return engine_1.Engine; } });
18
+ const changeset_1 = require("./changeset/");
19
+ Object.defineProperty(exports, "ChangeSet", { enumerable: true, get: function () { return changeset_1.ChangeSet; } });
20
+ Object.defineProperty(exports, "Diff", { enumerable: true, get: function () { return changeset_1.Diff; } });
21
+ function fromYAMLFilePaths(...configPaths) {
22
+ const engine = fromYAMLFilePath(configPaths[0]);
23
+ configPaths.splice(1).forEach((path) => {
18
24
  engine.merge(fromYAMLFilePath(path));
19
25
  });
20
26
  return engine;
21
27
  }
22
- exports.fromYAMLFilePaths = fromYAMLFilePaths;
23
- function fromYAMLFilePath(configPath, opts) {
24
- if (opts === void 0) { opts = {}; }
25
- var content = fs.readFileSync(configPath, { encoding: "utf8" });
28
+ function fromYAMLFilePath(configPath, opts = {}) {
29
+ const content = fs.readFileSync(configPath, { encoding: "utf8" });
26
30
  return fromYAML(configPath, content, opts);
27
31
  }
28
- exports.fromYAMLFilePath = fromYAMLFilePath;
29
- function fromYAML(configPath, yamlContent, opts) {
30
- if (opts === void 0) { opts = {}; }
31
- var rawConfig = yaml.load(yamlContent);
32
+ function fromYAML(configPath, yamlContent, opts = {}) {
33
+ const rawConfig = yaml.load(yamlContent);
32
34
  return fromRowConfig(configPath, rawConfig, opts);
33
35
  }
34
- exports.fromYAML = fromYAML;
35
- function fromRowConfig(configPath, rawConfig, opts) {
36
- if (opts === void 0) { opts = {}; }
37
- var engine = new engine_1.Engine(rawConfig);
36
+ function fromRowConfig(configPath, rawConfig, opts = {}) {
37
+ const engine = new engine_1.Engine(rawConfig);
38
38
  engine.sourcePaths.push(path.normalize(configPath));
39
39
  if (!opts.disableImports && rawConfig.imports) {
40
40
  // TODO この辺の処理をEngine側に移したい
41
41
  // なるべく破壊的変更を避ける
42
42
  // fsやyamlを使わずに同等のEngineを組み立てる余地を残す
43
43
  // async化したいけどprhの参照パッケージが壊れるのが辛い
44
- var importSpecs = void 0;
44
+ let importSpecs;
45
45
  if (typeof rawConfig.imports === "string") {
46
- importSpecs = [{
46
+ importSpecs = [
47
+ {
47
48
  path: rawConfig.imports,
48
- }];
49
+ },
50
+ ];
49
51
  }
50
52
  else {
51
- importSpecs = rawConfig.imports.map(function (imp) {
53
+ importSpecs = rawConfig.imports.map((imp) => {
52
54
  if (typeof imp === "string") {
53
55
  return {
54
56
  path: imp,
@@ -57,16 +59,16 @@ function fromRowConfig(configPath, rawConfig, opts) {
57
59
  return imp;
58
60
  });
59
61
  }
60
- importSpecs.forEach(function (importSpec) {
61
- var importedConfigPath = path.join(path.dirname(configPath), importSpec.path);
62
- var newEngine = fromYAMLFilePath(importedConfigPath, {
62
+ importSpecs.forEach((importSpec) => {
63
+ const importedConfigPath = path.join(path.dirname(configPath), importSpec.path);
64
+ const newEngine = fromYAMLFilePath(importedConfigPath, {
63
65
  disableImports: !!importSpec.disableImports,
64
66
  });
65
- var ignoreRules = (importSpec.ignoreRules || []).map(function (ignoreRule) {
67
+ const ignoreRules = (importSpec.ignoreRules || []).map((ignoreRule) => {
66
68
  return typeof ignoreRule === "string" ? { pattern: ignoreRule } : ignoreRule;
67
69
  });
68
- newEngine.rules = newEngine.rules.filter(function (rule) {
69
- return ignoreRules.every(function (ignoreRule) {
70
+ newEngine.rules = newEngine.rules.filter((rule) => {
71
+ return ignoreRules.every((ignoreRule) => {
70
72
  return !rule._shouldIgnore(ignoreRule);
71
73
  });
72
74
  });
@@ -75,22 +77,15 @@ function fromRowConfig(configPath, rawConfig, opts) {
75
77
  }
76
78
  return engine;
77
79
  }
78
- exports.fromRowConfig = fromRowConfig;
79
- function fromYAMLFilePathsAsync() {
80
- var configPaths = [];
81
- for (var _i = 0; _i < arguments.length; _i++) {
82
- configPaths[_i] = arguments[_i];
83
- }
80
+ function fromYAMLFilePathsAsync(...configPaths) {
84
81
  try {
85
- return Promise.resolve(fromYAMLFilePaths.apply(void 0, configPaths));
82
+ return Promise.resolve(fromYAMLFilePaths(...configPaths));
86
83
  }
87
84
  catch (e) {
88
85
  return Promise.reject(e);
89
86
  }
90
87
  }
91
- exports.fromYAMLFilePathsAsync = fromYAMLFilePathsAsync;
92
- function fromYAMLFilePathAsync(configPath, opts) {
93
- if (opts === void 0) { opts = {}; }
88
+ function fromYAMLFilePathAsync(configPath, opts = {}) {
94
89
  try {
95
90
  return Promise.resolve(fromYAMLFilePath(configPath, opts));
96
91
  }
@@ -98,9 +93,7 @@ function fromYAMLFilePathAsync(configPath, opts) {
98
93
  return Promise.reject(e);
99
94
  }
100
95
  }
101
- exports.fromYAMLFilePathAsync = fromYAMLFilePathAsync;
102
- function fromYAMLAsync(configPath, yamlContent, opts) {
103
- if (opts === void 0) { opts = {}; }
96
+ function fromYAMLAsync(configPath, yamlContent, opts = {}) {
104
97
  try {
105
98
  return Promise.resolve(fromYAML(configPath, yamlContent, opts));
106
99
  }
@@ -108,9 +101,7 @@ function fromYAMLAsync(configPath, yamlContent, opts) {
108
101
  return Promise.reject(e);
109
102
  }
110
103
  }
111
- exports.fromYAMLAsync = fromYAMLAsync;
112
- function fromRowConfigAsync(configPath, rawConfig, opts) {
113
- if (opts === void 0) { opts = {}; }
104
+ function fromRowConfigAsync(configPath, rawConfig, opts = {}) {
114
105
  try {
115
106
  return Promise.resolve(fromRowConfig(configPath, rawConfig, opts));
116
107
  }
@@ -118,10 +109,8 @@ function fromRowConfigAsync(configPath, rawConfig, opts) {
118
109
  return Promise.reject(e);
119
110
  }
120
111
  }
121
- exports.fromRowConfigAsync = fromRowConfigAsync;
122
- function getRuleFilePath(baseDir, configFileName) {
123
- if (configFileName === void 0) { configFileName = "prh.yml"; }
124
- var configFilePath = path.resolve(baseDir, configFileName);
112
+ function getRuleFilePath(baseDir, configFileName = "prh.yml") {
113
+ const configFilePath = path.resolve(baseDir, configFileName);
125
114
  if (fs.existsSync(configFilePath)) {
126
115
  return configFilePath;
127
116
  }
@@ -130,5 +119,4 @@ function getRuleFilePath(baseDir, configFileName) {
130
119
  }
131
120
  return getRuleFilePath(path.resolve(baseDir, "../"), configFileName);
132
121
  }
133
- exports.getRuleFilePath = getRuleFilePath;
134
122
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as yaml from \"js-yaml\";\n\nimport * as raw from \"./raw\";\nimport { Engine } from \"./engine\";\nimport { ChangeSet, Diff } from \"./changeset/\";\n\nexport { Engine, ChangeSet, Diff };\n\nexport function fromYAMLFilePaths(...configPaths: string[]): Engine {\n const engine = fromYAMLFilePath(configPaths[0]);\n configPaths.splice(1).forEach(path => {\n engine.merge(fromYAMLFilePath(path));\n });\n return engine;\n}\n\nexport interface Options {\n disableImports?: boolean;\n}\n\nexport function fromYAMLFilePath(configPath: string, opts: Options = {}): Engine {\n const content = fs.readFileSync(configPath, { encoding: \"utf8\" });\n return fromYAML(configPath, content, opts);\n}\n\nexport function fromYAML(configPath: string, yamlContent: string, opts: Options = {}): Engine {\n const rawConfig = yaml.load(yamlContent);\n return fromRowConfig(configPath, rawConfig, opts);\n}\n\nexport function fromRowConfig(configPath: string, rawConfig: raw.Config, opts: Options = {}): Engine {\n const engine = new Engine(rawConfig);\n engine.sourcePaths.push(path.normalize(configPath));\n\n if (!opts.disableImports && rawConfig.imports) {\n // TODO この辺の処理をEngine側に移したい\n // なるべく破壊的変更を避ける\n // fsやyamlを使わずに同等のEngineを組み立てる余地を残す\n // async化したいけどprhの参照パッケージが壊れるのが辛い\n\n let importSpecs: raw.ImportSpec[];\n if (typeof rawConfig.imports === \"string\") {\n importSpecs = [{\n path: rawConfig.imports,\n }];\n } else {\n importSpecs = rawConfig.imports.map(imp => {\n if (typeof imp === \"string\") {\n return {\n path: imp,\n };\n }\n return imp;\n });\n }\n importSpecs.forEach(importSpec => {\n const importedConfigPath = path.join(path.dirname(configPath), importSpec.path);\n const newEngine = fromYAMLFilePath(importedConfigPath, {\n disableImports: !!importSpec.disableImports,\n });\n\n const ignoreRules = (importSpec.ignoreRules || []).map(ignoreRule => {\n return typeof ignoreRule === \"string\" ? { pattern: ignoreRule } : ignoreRule;\n });\n newEngine.rules = newEngine.rules.filter(rule => {\n return ignoreRules.every(ignoreRule => {\n return !rule._shouldIgnore(ignoreRule);\n });\n });\n\n engine.merge(newEngine);\n });\n }\n\n return engine;\n}\n\nexport function fromYAMLFilePathsAsync(...configPaths: string[]): Promise<Engine> {\n try {\n return Promise.resolve(fromYAMLFilePaths(...configPaths));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function fromYAMLFilePathAsync(configPath: string, opts: Options = {}): Promise<Engine> {\n try {\n return Promise.resolve(fromYAMLFilePath(configPath, opts));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function fromYAMLAsync(configPath: string, yamlContent: string, opts: Options = {}): Promise<Engine> {\n try {\n return Promise.resolve(fromYAML(configPath, yamlContent, opts));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function fromRowConfigAsync(configPath: string, rawConfig: raw.Config, opts: Options = {}): Promise<Engine> {\n try {\n return Promise.resolve(fromRowConfig(configPath, rawConfig, opts));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function getRuleFilePath(baseDir: string, configFileName = \"prh.yml\"): string | null {\n const configFilePath = path.resolve(baseDir, configFileName);\n if (fs.existsSync(configFilePath)) {\n return configFilePath;\n }\n\n if (baseDir.length === path.dirname(baseDir).length) {\n return null;\n }\n\n return getRuleFilePath(path.resolve(baseDir, \"../\"), configFileName);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as yaml from \"js-yaml\";\n\nimport * as raw from \"./raw\";\nimport { Engine } from \"./engine\";\nimport { ChangeSet, Diff } from \"./changeset/\";\n\nexport { Engine, ChangeSet, Diff };\n\nexport function fromYAMLFilePaths(...configPaths: string[]): Engine {\n const engine = fromYAMLFilePath(configPaths[0]);\n configPaths.splice(1).forEach((path) => {\n engine.merge(fromYAMLFilePath(path));\n });\n return engine;\n}\n\nexport interface Options {\n disableImports?: boolean;\n}\n\nexport function fromYAMLFilePath(configPath: string, opts: Options = {}): Engine {\n const content = fs.readFileSync(configPath, { encoding: \"utf8\" });\n return fromYAML(configPath, content, opts);\n}\n\nexport function fromYAML(configPath: string, yamlContent: string, opts: Options = {}): Engine {\n const rawConfig = yaml.load(yamlContent) as raw.Config;\n return fromRowConfig(configPath, rawConfig, opts);\n}\n\nexport function fromRowConfig(configPath: string, rawConfig: raw.Config, opts: Options = {}): Engine {\n const engine = new Engine(rawConfig);\n engine.sourcePaths.push(path.normalize(configPath));\n\n if (!opts.disableImports && rawConfig.imports) {\n // TODO この辺の処理をEngine側に移したい\n // なるべく破壊的変更を避ける\n // fsやyamlを使わずに同等のEngineを組み立てる余地を残す\n // async化したいけどprhの参照パッケージが壊れるのが辛い\n\n let importSpecs: raw.ImportSpec[];\n if (typeof rawConfig.imports === \"string\") {\n importSpecs = [\n {\n path: rawConfig.imports,\n },\n ];\n } else {\n importSpecs = rawConfig.imports.map((imp) => {\n if (typeof imp === \"string\") {\n return {\n path: imp,\n };\n }\n return imp;\n });\n }\n importSpecs.forEach((importSpec) => {\n const importedConfigPath = path.join(path.dirname(configPath), importSpec.path);\n const newEngine = fromYAMLFilePath(importedConfigPath, {\n disableImports: !!importSpec.disableImports,\n });\n\n const ignoreRules = (importSpec.ignoreRules || []).map((ignoreRule) => {\n return typeof ignoreRule === \"string\" ? { pattern: ignoreRule } : ignoreRule;\n });\n newEngine.rules = newEngine.rules.filter((rule) => {\n return ignoreRules.every((ignoreRule) => {\n return !rule._shouldIgnore(ignoreRule);\n });\n });\n\n engine.merge(newEngine);\n });\n }\n\n return engine;\n}\n\nexport function fromYAMLFilePathsAsync(...configPaths: string[]): Promise<Engine> {\n try {\n return Promise.resolve(fromYAMLFilePaths(...configPaths));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function fromYAMLFilePathAsync(configPath: string, opts: Options = {}): Promise<Engine> {\n try {\n return Promise.resolve(fromYAMLFilePath(configPath, opts));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function fromYAMLAsync(configPath: string, yamlContent: string, opts: Options = {}): Promise<Engine> {\n try {\n return Promise.resolve(fromYAML(configPath, yamlContent, opts));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function fromRowConfigAsync(configPath: string, rawConfig: raw.Config, opts: Options = {}): Promise<Engine> {\n try {\n return Promise.resolve(fromRowConfig(configPath, rawConfig, opts));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport function getRuleFilePath(baseDir: string, configFileName = \"prh.yml\"): string | null {\n const configFilePath = path.resolve(baseDir, configFileName);\n if (fs.existsSync(configFilePath)) {\n return configFilePath;\n }\n\n if (baseDir.length === path.dirname(baseDir).length) {\n return null;\n }\n\n return getRuleFilePath(path.resolve(baseDir, \"../\"), configFileName);\n}\n"]}
package/lib/options.js CHANGED
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var Options = /** @class */ (function () {
4
- function Options(_rule, src) {
3
+ exports.Options = void 0;
4
+ class Options {
5
+ constructor(_rule, src) {
5
6
  src = src || {};
6
7
  this.wordBoundary = src.wordBoundary != null ? src.wordBoundary : false;
7
8
  }
8
- return Options;
9
- }());
9
+ }
10
10
  exports.Options = Options;
11
11
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;AAGA;IAGI,iBAAY,KAAW,EAAE,GAAiB;QACtC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5E,CAAC;IACL,cAAC;AAAD,CAAC,AAPD,IAOC;AAPY,0BAAO","sourcesContent":["import * as raw from \"./raw\";\nimport { Rule } from \"./rule\";\n\nexport class Options {\n wordBoundary: boolean;\n\n constructor(_rule: Rule, src?: raw.Options) {\n src = src || {};\n this.wordBoundary = src.wordBoundary != null ? src.wordBoundary : false;\n }\n}\n"]}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;AAGA,MAAa,OAAO;IAGhB,YAAY,KAAW,EAAE,GAAiB;QACtC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5E,CAAC;CACJ;AAPD,0BAOC","sourcesContent":["import * as raw from \"./raw\";\nimport { Rule } from \"./rule\";\n\nexport class Options {\n wordBoundary: boolean;\n\n constructor(_rule: Rule, src?: raw.Options) {\n src = src || {};\n this.wordBoundary = src.wordBoundary != null ? src.wordBoundary : false;\n }\n}\n"]}
package/lib/paragraph.js CHANGED
@@ -1,22 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Paragraph = void 0;
3
4
  // 設計思想
4
5
  // 文章の1ブロック毎にデータを保持する
5
6
  // ファイル全体→Paragraphに分割→Paragraph毎にChangeSetを作成→ChangeSetをmerge
6
7
  // Paragraphでは特定の検出を無効化したい場合がある
7
8
  // 例えばてくぶ標準だと 良い→よい と変換するが漢字をわざと使いたい場合がある
8
- var Paragraph = /** @class */ (function () {
9
- function Paragraph(index, content) {
9
+ class Paragraph {
10
+ constructor(index, content) {
10
11
  this.index = index;
11
12
  this.content = content;
12
13
  this.ignoreAll = false;
13
14
  // prh:disable:良い|悪い みたいなパターンからチェックをパスさせる表現を作る
14
15
  // prh:disable だけの場合は全部パスさせる
15
- var re = /^(?:.*?)prh:disable(?::([^\n\s]*))?/gm;
16
+ const re = /^(?:.*?)prh:disable(?::([^\n\s]*))?/gm;
16
17
  this._pragmaRanges = [];
17
18
  this.ignorePatterns = [];
18
19
  while (true) {
19
- var matches = re.exec(content);
20
+ const matches = re.exec(content);
20
21
  if (!matches) {
21
22
  break;
22
23
  }
@@ -25,27 +26,25 @@ var Paragraph = /** @class */ (function () {
25
26
  this.ignoreAll = true;
26
27
  continue;
27
28
  }
28
- var pattern = matches[1];
29
+ const pattern = matches[1];
29
30
  this._pragmaRanges.push({ index: matches.index, tailIndex: matches.index + matches[0].length });
30
- this.ignorePatterns.push(new RegExp("(" + pattern + ")", "g"));
31
+ this.ignorePatterns.push(new RegExp(`(${pattern})`, "g"));
31
32
  }
32
33
  }
33
- Paragraph.prototype.makeDiffs = function (rules) {
34
- var _this = this;
35
- var diffs = rules.map(function (rule) { return rule.applyRule(_this.content); }).reduce(function (p, c) { return p.concat(c); }, []);
34
+ makeDiffs(rules) {
35
+ let diffs = rules.map((rule) => rule.applyRule(this.content)).reduce((p, c) => p.concat(c), []);
36
36
  // pragmaに被る範囲の検出は無視する
37
- diffs = diffs.filter(function (diff) { return _this._pragmaRanges.every(function (range) { return !diff.isCollide(range); }); });
38
- diffs.forEach(function (diff) { return diff.index += _this.index; });
37
+ diffs = diffs.filter((diff) => this._pragmaRanges.every((range) => !diff.isCollide(range)));
38
+ diffs.forEach((diff) => (diff.index += this.index));
39
39
  if (this.ignoreAll) {
40
40
  return [];
41
41
  }
42
- return diffs.filter(function (diff) {
43
- return _this.ignorePatterns.filter(function (ignorePattern) {
42
+ return diffs.filter((diff) => {
43
+ return (this.ignorePatterns.filter((ignorePattern) => {
44
44
  return diff.matches[0].match(ignorePattern);
45
- }).length === 0;
45
+ }).length === 0);
46
46
  });
47
- };
48
- return Paragraph;
49
- }());
47
+ }
48
+ }
50
49
  exports.Paragraph = Paragraph;
51
50
  //# sourceMappingURL=paragraph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paragraph.js","sourceRoot":"","sources":["paragraph.ts"],"names":[],"mappings":";;AAGA,OAAO;AACP,qBAAqB;AACrB,8DAA8D;AAC9D,+BAA+B;AAC/B,2CAA2C;AAE3C;IAQI,mBAAY,KAAa,EAAE,OAAe;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,8CAA8C;QAC9C,4BAA4B;QAC5B,IAAM,EAAE,GAAG,uCAAuC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,EAAE;YACT,IAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM;aACT;YACD,UAAU;YACV,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,SAAS;aACZ;YAED,IAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAChG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAI,OAAO,MAAG,EAAE,GAAG,CAAC,CAAC,CAAC;SAC7D;IACL,CAAC;IAED,6BAAS,GAAT,UAAU,KAAa;QAAvB,iBAgBC;QAfG,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,EAA5B,CAA4B,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAX,CAAW,EAAE,EAAE,CAAC,CAAC;QAC9F,sBAAsB;QACtB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAtB,CAAsB,CAAC,EAAzD,CAAyD,CAAC,CAAC;QAExF,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,KAAK,IAAI,KAAI,CAAC,KAAK,EAAxB,CAAwB,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO,EAAE,CAAC;SACb;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,IAAI;YACpB,OAAO,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAA,aAAa;gBAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IACL,gBAAC;AAAD,CAAC,AApDD,IAoDC;AApDY,8BAAS","sourcesContent":["import { Rule } from \"./rule\";\nimport { Diff } from \"./changeset/diff\";\n\n// 設計思想\n// 文章の1ブロック毎にデータを保持する\n// ファイル全体→Paragraphに分割→Paragraph毎にChangeSetを作成→ChangeSetをmerge\n// Paragraphでは特定の検出を無効化したい場合がある\n// 例えばてくぶ標準だと 良い→よい と変換するが漢字をわざと使いたい場合がある\n\nexport class Paragraph {\n index: number;\n content: string;\n ignoreAll: boolean;\n /* @internal */\n _pragmaRanges: { index: number; tailIndex: number; }[];\n ignorePatterns: RegExp[];\n\n constructor(index: number, content: string) {\n this.index = index;\n this.content = content;\n this.ignoreAll = false;\n\n // prh:disable:良い|悪い みたいなパターンからチェックをパスさせる表現を作る\n // prh:disable だけの場合は全部パスさせる\n const re = /^(?:.*?)prh:disable(?::([^\\n\\s]*))?/gm;\n this._pragmaRanges = [];\n this.ignorePatterns = [];\n while (true) {\n const matches = re.exec(content);\n if (!matches) {\n break;\n }\n // : の後の有無\n if (!matches[1]) {\n this.ignoreAll = true;\n continue;\n }\n\n const pattern = matches[1];\n this._pragmaRanges.push({ index: matches.index, tailIndex: matches.index + matches[0].length });\n this.ignorePatterns.push(new RegExp(`(${pattern})`, \"g\"));\n }\n }\n\n makeDiffs(rules: Rule[]): Diff[] {\n let diffs = rules.map(rule => rule.applyRule(this.content)).reduce((p, c) => p.concat(c), []);\n // pragmaに被る範囲の検出は無視する\n diffs = diffs.filter(diff => this._pragmaRanges.every(range => !diff.isCollide(range)));\n\n diffs.forEach(diff => diff.index += this.index);\n\n if (this.ignoreAll) {\n return [];\n }\n\n return diffs.filter(diff => {\n return this.ignorePatterns.filter(ignorePattern => {\n return diff.matches[0].match(ignorePattern);\n }).length === 0;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"paragraph.js","sourceRoot":"","sources":["paragraph.ts"],"names":[],"mappings":";;;AAGA,OAAO;AACP,qBAAqB;AACrB,8DAA8D;AAC9D,+BAA+B;AAC/B,2CAA2C;AAE3C,MAAa,SAAS;IAQlB,YAAY,KAAa,EAAE,OAAe;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,8CAA8C;QAC9C,4BAA4B;QAC5B,MAAM,EAAE,GAAG,uCAAuC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM;YACV,CAAC;YACD,UAAU;YACV,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,SAAS;YACb,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAChG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAa;QACnB,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChG,sBAAsB;QACtB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5F,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CACH,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE;gBACzC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAClB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAtDD,8BAsDC","sourcesContent":["import { Rule } from \"./rule\";\nimport { Diff } from \"./changeset/diff\";\n\n// 設計思想\n// 文章の1ブロック毎にデータを保持する\n// ファイル全体→Paragraphに分割→Paragraph毎にChangeSetを作成→ChangeSetをmerge\n// Paragraphでは特定の検出を無効化したい場合がある\n// 例えばてくぶ標準だと 良い→よい と変換するが漢字をわざと使いたい場合がある\n\nexport class Paragraph {\n index: number;\n content: string;\n ignoreAll: boolean;\n /* @internal */\n _pragmaRanges: { index: number; tailIndex: number }[];\n ignorePatterns: RegExp[];\n\n constructor(index: number, content: string) {\n this.index = index;\n this.content = content;\n this.ignoreAll = false;\n\n // prh:disable:良い|悪い みたいなパターンからチェックをパスさせる表現を作る\n // prh:disable だけの場合は全部パスさせる\n const re = /^(?:.*?)prh:disable(?::([^\\n\\s]*))?/gm;\n this._pragmaRanges = [];\n this.ignorePatterns = [];\n while (true) {\n const matches = re.exec(content);\n if (!matches) {\n break;\n }\n // : の後の有無\n if (!matches[1]) {\n this.ignoreAll = true;\n continue;\n }\n\n const pattern = matches[1];\n this._pragmaRanges.push({ index: matches.index, tailIndex: matches.index + matches[0].length });\n this.ignorePatterns.push(new RegExp(`(${pattern})`, \"g\"));\n }\n }\n\n makeDiffs(rules: Rule[]): Diff[] {\n let diffs = rules.map((rule) => rule.applyRule(this.content)).reduce((p, c) => p.concat(c), []);\n // pragmaに被る範囲の検出は無視する\n diffs = diffs.filter((diff) => this._pragmaRanges.every((range) => !diff.isCollide(range)));\n\n diffs.forEach((diff) => (diff.index += this.index));\n\n if (this.ignoreAll) {\n return [];\n }\n\n return diffs.filter((diff) => {\n return (\n this.ignorePatterns.filter((ignorePattern) => {\n return diff.matches[0].match(ignorePattern);\n }).length === 0\n );\n });\n }\n}\n"]}
package/lib/raw.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"raw.js","sourceRoot":"","sources":["raw.ts"],"names":[],"mappings":"","sourcesContent":["export interface Config {\n version: number;\n imports?: string | (string | ImportSpec)[];\n targets?: Target[];\n rules?: (string | Rule)[]; // string | regexp style string or array\n}\n\nexport interface ImportSpec {\n path: string;\n disableImports?: boolean;\n // when string comming, evaluate to { pattern: string; }\n ignoreRules?: (string | IgnoreRule)[];\n}\n\nexport interface IgnoreRule {\n pattern?: string;\n expected?: string;\n}\n\nexport interface Target {\n file: string; // string | regexp style string\n includes?: (string | TargetPattern)[];\n excludes?: (string | TargetPattern)[];\n}\n\nexport interface TargetPattern {\n pattern: string; // string | regexp style string\n}\n\nexport interface Rule {\n expected: string;\n pattern?: string | string[] | null; // string | regexp style string or array\n patterns?: string | string[] | null; // string | regexp style string or array\n regexpMustEmpty?: string;\n options?: Options;\n specs?: RuleSpec[];\n}\n\nexport interface Options {\n wordBoundary?: boolean;\n}\n\nexport interface RuleSpec {\n from: string;\n to: string;\n}\n"]}
1
+ {"version":3,"file":"raw.js","sourceRoot":"","sources":["raw.ts"],"names":[],"mappings":"","sourcesContent":["export interface Config {\n version: number;\n imports?: string | (string | ImportSpec)[];\n targets?: Target[];\n rules?: (string | Rule)[]; // string | regexp style string or array\n}\n\nexport interface ImportSpec {\n path: string;\n disableImports?: boolean;\n // when string coming, evaluate to { pattern: string; }\n ignoreRules?: (string | IgnoreRule)[];\n}\n\nexport interface IgnoreRule {\n pattern?: string;\n expected?: string;\n}\n\nexport interface Target {\n file: string; // string | regexp style string\n includes?: (string | TargetPattern)[];\n excludes?: (string | TargetPattern)[];\n}\n\nexport interface TargetPattern {\n pattern: string; // string | regexp style string\n}\n\nexport interface Rule {\n expected: string;\n pattern?: string | string[] | null; // string | regexp style string or array\n patterns?: string | string[] | null; // string | regexp style string or array\n regexpMustEmpty?: string;\n options?: Options;\n specs?: RuleSpec[];\n}\n\nexport interface Options {\n wordBoundary?: boolean;\n}\n\nexport interface RuleSpec {\n from: string;\n to: string;\n}\n"]}