watskeburt 0.9.2 → 0.10.1

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.
@@ -1,21 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  /* eslint-disable no-console */
3
-
4
- import { program } from "commander";
5
- import { listSync } from "../dist/esm-bundle.mjs";
6
- import { VERSION } from "./version.mjs";
3
+ import { EOL } from "node:os";
4
+ import { Option, program } from "commander";
5
+ import { listSync } from "../dist/esm/main.js";
6
+ import { VERSION } from "./version.js";
7
7
 
8
8
  program
9
9
  .description(
10
10
  "lists files & their statuses since [old-revision] " +
11
11
  "or between [old-revision] and [new-revision]." +
12
- "\n\n" +
12
+ `${EOL}${EOL}` +
13
13
  "-> When you don't pass a revision at all old-revision defaults to the current one."
14
14
  )
15
- .version(VERSION)
16
- .option("-T, --output-type <type>", "json,regex", "regex")
15
+ .addOption(
16
+ new Option("-T, --output-type <type>", "what format to emit")
17
+ .choices(["json", "regex"])
18
+ .default("regex")
19
+ )
17
20
  .option("--tracked-only", "only take tracked files into account", false)
18
21
  .arguments("[old-revision] [new-revision]")
22
+ .version(VERSION)
19
23
  .parse(process.argv);
20
24
 
21
25
  try {
package/bin/version.js ADDED
@@ -0,0 +1,2 @@
1
+ // generated by tools/get-version.ts - edits will be overwritten
2
+ export const VERSION = "0.10.1";
@@ -1 +1 @@
1
- "use strict";var i=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var N=(n,e)=>{for(var t in e)i(n,t,{get:e[t],enumerable:!0})},A=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of w(e))!x.call(n,o)&&o!==t&&i(n,o,{get:()=>e[o],enumerable:!(r=E(e,o))||r.enumerable});return n};var _=n=>A(i({},"__esModule",{value:!0}),n);var F={};N(F,{getSHASync:()=>j,listSync:()=>k});module.exports=_(F);var p=require("os"),D=/^(?<changeType>[ACDMRTUXB])(?<similarity>[0-9]{3})?[ \t]+(?<name>[^ \t]+)[ \t]*(?<newName>[^ \t]+)?$/,L=/^(?<stagedChangeType>[ ACDMRTUXB?!])(?<unStagedChangeType>[ ACDMRTUXB?!])[ \t]+(?<name>[^ \t]+)(( -> )(?<newName>[^ \t]+))?$/,O={A:"added",C:"copied",D:"deleted",M:"modified",R:"renamed",T:"type changed",U:"unmerged",B:"pairing broken"," ":"unmodified","?":"untracked","!":"ignored"};function g(n){return O[n]??"unknown"}function B(n){let e=n.match(L),t={};if(e!=null&&e.groups){let r=g(e.groups.stagedChangeType),o=g(e.groups.unStagedChangeType);t.changeType=r==="unmodified"?o:r,e.groups.newName?(t.name=e.groups.newName,t.oldName=e.groups.name):t.name=e.groups.name}return t}function U(n){let e=n.match(D),t={};return e!=null&&e.groups&&(t.changeType=g(e.groups.changeType),e.groups.newName?(t.name=e.groups.newName,t.oldName=e.groups.name):t.name=e.groups.name),t}function l(n){return n.split(p.EOL).filter(Boolean).map(B).filter(({name:e,changeType:t})=>Boolean(e)&&Boolean(t))}function d(n){return n.split(p.EOL).filter(Boolean).map(U).filter(({name:e,changeType:t})=>Boolean(e)&&Boolean(t))}var a=require("child_process");function h(n){return n instanceof Buffer?n.toString("utf8"):n}function $(n){throw n.code==="ENOENT"?new Error("git executable not found"):new Error(`internal spawn error: ${n}`)}function u(n,e,t){let r=t("git",n,{cwd:process.cwd(),env:process.env});if(r.error&&$(r.error),r.status===0)return h(r.stdout);throw new Error(e[r.status??0]||`internal git error: ${r.status} (${h(r.stderr)})`)}function y(n=a.spawnSync){let e={129:`'${process.cwd()}' does not seem to be a git repository`};return u(["status","--porcelain"],e,n)}function S(n,e,t=a.spawnSync){let r={128:`revision '${n}' ${e?`(or '${e}') `:""}unknown`,129:`'${process.cwd()}' does not seem to be a git repository`};return u(e?["diff",n,e,"--name-status"]:["diff",n,"--name-status"],r,t)}function c(n=a.spawnSync){return u(["rev-parse","HEAD"],{},n).slice(0,40)}var C=require("path"),M=new Set([".cjs",".cjsx",".coffee",".csx",".cts",".js",".json",".jsx",".litcoffee",".ls",".mjs",".mts",".svelte",".ts",".tsx",".vue",".vuex"]),P=new Set(["modified","added","renamed","copied","untracked"]);function f(n,e=M,t=P){return`^(${n.filter(o=>t.has(o.changeType)).map(({name:o})=>o).filter(o=>e.has((0,C.extname)(o))).join("|")})$`}var R=2;function m(n){return JSON.stringify(n,null,R)}var v=n=>n,H=new Map([["regex",f],["json",m]]);function T(n,e){return(H.get(e??"unknown")||v)(n)}function j(){return c()}function k(n,e,t){let r=n||c(),o=t||{},s=d(S(r,e));return o.trackedOnly||(s=s.concat(l(y()).filter(({changeType:I})=>I==="untracked"))),T(s,o.outputType)}0&&(module.exports={getSHASync,listSync});
1
+ "use strict";var i=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var n in e)i(t,n,{get:e[n],enumerable:!0})},A=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of E(e))!N.call(t,o)&&o!==n&&i(t,o,{get:()=>e[o],enumerable:!(r=w(e,o))||r.enumerable});return t};var _=t=>A(i({},"__esModule",{value:!0}),t);var v={};x(v,{getSHASync:()=>P,listSync:()=>R});module.exports=_(v);var g=require("os"),D=/^(?<changeType>[ACDMRTUXB])(?<similarity>[0-9]{3})?[ \t]+(?<name>[^ \t]+)[ \t]*(?<newName>[^ \t]+)?$/,L=/^(?<stagedChangeType>[ ACDMRTUXB?!])(?<unStagedChangeType>[ ACDMRTUXB?!])[ \t]+(?<name>[^ \t]+)(( -> )(?<newName>[^ \t]+))?$/,O={A:"added",C:"copied",D:"deleted",M:"modified",R:"renamed",T:"type changed",U:"unmerged",B:"pairing broken"," ":"unmodified","?":"untracked","!":"ignored"};function p(t){return O[t]??"unknown"}function j(t){let e=t.match(L),n={};if(e!=null&&e.groups){let r=p(e.groups.stagedChangeType),o=p(e.groups.unStagedChangeType);n.changeType=r==="unmodified"?o:r,e.groups.newName?(n.name=e.groups.newName,n.oldName=e.groups.name):n.name=e.groups.name}return n}function k(t){let e=t.match(D),n={};return e!=null&&e.groups&&(n.changeType=p(e.groups.changeType),e.groups.newName?(n.name=e.groups.newName,n.oldName=e.groups.name):n.name=e.groups.name),n}function y(t){return t.split(g.EOL).filter(Boolean).map(j).filter(({name:e,changeType:n})=>!!e&&!!n)}function l(t){return t.split(g.EOL).filter(Boolean).map(k).filter(({name:e,changeType:n})=>!!e&&!!n)}var s=require("child_process");function d(t){return t instanceof Buffer?t.toString("utf8"):t}function B(t){throw t.code==="ENOENT"?new Error("git executable not found"):new Error(`internal spawn error: ${t}`)}function u(t,e,n){let r=n("git",t,{cwd:process.cwd(),env:process.env});if(r.error&&B(r.error),r.status===0)return d(r.stdout);throw new Error(e[r.status??0]||`internal git error: ${r.status} (${d(r.stderr)})`)}function h(t=s.spawnSync){let e={129:`'${process.cwd()}' does not seem to be a git repository`};return u(["status","--porcelain"],e,t)}function S(t,e,n=s.spawnSync){let r={128:`revision '${t}' ${e?`(or '${e}') `:""}unknown`,129:`'${process.cwd()}' does not seem to be a git repository`};return u(e?["diff",t,e,"--name-status"]:["diff",t,"--name-status"],r,n)}function c(t=s.spawnSync){return u(["rev-parse","HEAD"],{},t).slice(0,40)}var C=require("path"),U=new Set([".cjs",".cjsx",".coffee",".csx",".cts",".js",".json",".jsx",".litcoffee",".ls",".mjs",".mts",".svelte",".ts",".tsx",".vue",".vuex"]),$=new Set(["modified","added","renamed","copied","untracked"]);function f(t,e=U,n=$){return`^(${t.filter(o=>n.has(o.changeType)).map(({name:o})=>o).filter(o=>e.has((0,C.extname)(o))).join("|")})$`}function m(t){return JSON.stringify(t,null,2)}var b=t=>t,M=new Map([["regex",f],["json",m]]);function T(t,e){return(M.get(e??"unknown")||b)(t)}function P(){return c()}function R(t,e,n){let r=t||c(),o=n||{},a=l(S(r,e));return o.trackedOnly||(a=a.concat(y(h()).filter(({changeType:I})=>I==="untracked"))),T(a,o.outputType)}0&&(module.exports={getSHASync,listSync});
@@ -0,0 +1,74 @@
1
+ // the security (and unicorn) plugins don't seem to detect named caption
2
+ // groups very well - false-flagging below regular expressions to be susceptible
3
+ // to redos attacks.
4
+ /* eslint-disable unicorn/no-unsafe-regex, security/detect-unsafe-regex */
5
+ import { EOL } from "node:os";
6
+ const DIFF_NAME_STATUS_LINE_PATTERN = /^(?<changeType>[ACDMRTUXB])(?<similarity>[0-9]{3})?[ \t]+(?<name>[^ \t]+)[ \t]*(?<newName>[^ \t]+)?$/;
7
+ const DIFF_SHORT_STATUS_LINE_PATTERN = /^(?<stagedChangeType>[ ACDMRTUXB?!])(?<unStagedChangeType>[ ACDMRTUXB?!])[ \t]+(?<name>[^ \t]+)(( -> )(?<newName>[^ \t]+))?$/;
8
+ const CHANGE_CHAR_2_CHANGE_TYPE = {
9
+ A: "added",
10
+ C: "copied",
11
+ D: "deleted",
12
+ M: "modified",
13
+ R: "renamed",
14
+ T: "type changed",
15
+ U: "unmerged",
16
+ B: "pairing broken",
17
+ " ": "unmodified",
18
+ "?": "untracked",
19
+ "!": "ignored",
20
+ // X: "unknown"
21
+ };
22
+ function changeChar2ChangeType(pChar) {
23
+ // eslint-disable-next-line security/detect-object-injection
24
+ return CHANGE_CHAR_2_CHANGE_TYPE[pChar] ?? "unknown";
25
+ }
26
+ export function convertStatusLine(pString) {
27
+ const lMatchResult = pString.match(DIFF_SHORT_STATUS_LINE_PATTERN);
28
+ const lReturnValue = {};
29
+ if (lMatchResult?.groups) {
30
+ const lStagedChangeType = changeChar2ChangeType(lMatchResult.groups.stagedChangeType);
31
+ const lUnStagedChangeType = changeChar2ChangeType(lMatchResult.groups.unStagedChangeType);
32
+ lReturnValue.changeType =
33
+ lStagedChangeType === "unmodified"
34
+ ? lUnStagedChangeType
35
+ : lStagedChangeType;
36
+ if (lMatchResult.groups.newName) {
37
+ lReturnValue.name = lMatchResult.groups.newName;
38
+ lReturnValue.oldName = lMatchResult.groups.name;
39
+ }
40
+ else {
41
+ lReturnValue.name = lMatchResult.groups.name;
42
+ }
43
+ }
44
+ return lReturnValue;
45
+ }
46
+ export function convertDiffLine(pString) {
47
+ const lMatchResult = pString.match(DIFF_NAME_STATUS_LINE_PATTERN);
48
+ const lReturnValue = {};
49
+ if (lMatchResult?.groups) {
50
+ lReturnValue.changeType = changeChar2ChangeType(lMatchResult.groups.changeType);
51
+ if (lMatchResult.groups.newName) {
52
+ lReturnValue.name = lMatchResult.groups.newName;
53
+ lReturnValue.oldName = lMatchResult.groups.name;
54
+ }
55
+ else {
56
+ lReturnValue.name = lMatchResult.groups.name;
57
+ }
58
+ }
59
+ return lReturnValue;
60
+ }
61
+ export function convertStatusLines(pString) {
62
+ return pString
63
+ .split(EOL)
64
+ .filter(Boolean)
65
+ .map(convertStatusLine)
66
+ .filter(({ name, changeType }) => Boolean(name) && Boolean(changeType));
67
+ }
68
+ export function convertDiffLines(pString) {
69
+ return pString
70
+ .split(EOL)
71
+ .filter(Boolean)
72
+ .map(convertDiffLine)
73
+ .filter(({ name, changeType }) => Boolean(name) && Boolean(changeType));
74
+ }
@@ -0,0 +1,10 @@
1
+ import formatToRegex from "./regex.js";
2
+ import formatToJSON from "./json.js";
3
+ const identity = (pX) => pX;
4
+ const OUTPUT_TYPE_TO_FUNCTION = new Map([
5
+ ["regex", formatToRegex],
6
+ ["json", formatToJSON],
7
+ ]);
8
+ export default function format(pChanges, pOutputType) {
9
+ return (OUTPUT_TYPE_TO_FUNCTION.get(pOutputType ?? "unknown") || identity)(pChanges);
10
+ }
@@ -0,0 +1,4 @@
1
+ const INDENT = 2;
2
+ export default function formatToJSON(pChanges) {
3
+ return JSON.stringify(pChanges, null, INDENT);
4
+ }
@@ -0,0 +1,36 @@
1
+ import { extname } from "node:path";
2
+ const DEFAULT_EXTENSIONS = new Set([
3
+ ".cjs",
4
+ ".cjsx",
5
+ ".coffee",
6
+ ".csx",
7
+ ".cts",
8
+ ".js",
9
+ ".json",
10
+ ".jsx",
11
+ ".litcoffee",
12
+ ".ls",
13
+ ".mjs",
14
+ ".mts",
15
+ ".svelte",
16
+ ".ts",
17
+ ".tsx",
18
+ ".vue",
19
+ ".vuex",
20
+ ]);
21
+ const DEFAULT_CHANGE_TYPES = new Set([
22
+ "modified",
23
+ "added",
24
+ "renamed",
25
+ "copied",
26
+ "untracked",
27
+ ]);
28
+ export default function formatToRegex(pChanges, pExtensions = DEFAULT_EXTENSIONS, pChangeTypes = DEFAULT_CHANGE_TYPES) {
29
+ const lChanges = pChanges
30
+ .filter((pChange) => pChangeTypes.has(pChange.changeType))
31
+ .map(({ name }) => name)
32
+ .filter((pName) => pExtensions.has(extname(pName)))
33
+ // .replace(/\./g, "\\\\.")
34
+ .join("|");
35
+ return `^(${lChanges})$`;
36
+ }
@@ -0,0 +1,64 @@
1
+ import { spawnSync } from "node:child_process";
2
+ function stringifyOutStream(pError) {
3
+ if (pError instanceof Buffer) {
4
+ return pError.toString("utf8");
5
+ }
6
+ else {
7
+ return pError;
8
+ }
9
+ }
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ function throwSpawnError(pError) {
12
+ if (pError.code === "ENOENT") {
13
+ throw new Error("git executable not found");
14
+ }
15
+ else {
16
+ throw new Error(`internal spawn error: ${pError}`);
17
+ }
18
+ }
19
+ /**
20
+ * @throws {Error}
21
+ */
22
+ function getGitResult(pArguments, pErrorMap, pSpawnFunction) {
23
+ const lGitResult = pSpawnFunction("git", pArguments, {
24
+ cwd: process.cwd(),
25
+ // eslint-disable-next-line node/no-process-env
26
+ env: process.env,
27
+ });
28
+ if (lGitResult.error) {
29
+ throwSpawnError(lGitResult.error);
30
+ }
31
+ if (lGitResult.status === 0) {
32
+ return stringifyOutStream(lGitResult.stdout);
33
+ }
34
+ else {
35
+ throw new Error(pErrorMap[lGitResult.status ?? 0] ||
36
+ `internal git error: ${lGitResult.status} (${stringifyOutStream(lGitResult.stderr)})`);
37
+ }
38
+ }
39
+ /**
40
+ * @throws {Error}
41
+ */
42
+ export function getStatusShort(pSpawnFunction = spawnSync) {
43
+ const lErrorMap = {
44
+ 129: `'${process.cwd()}' does not seem to be a git repository`,
45
+ };
46
+ return getGitResult(["status", "--porcelain"], lErrorMap, pSpawnFunction);
47
+ }
48
+ /**
49
+ *
50
+ * @throws {Error}
51
+ */
52
+ export function getDiffLines(pOldRevision, pNewRevision, pSpawnFunction = spawnSync) {
53
+ const lErrorMap = {
54
+ 128: `revision '${pOldRevision}' ${pNewRevision ? `(or '${pNewRevision}') ` : ""}unknown`,
55
+ 129: `'${process.cwd()}' does not seem to be a git repository`,
56
+ };
57
+ return getGitResult(pNewRevision
58
+ ? ["diff", pOldRevision, pNewRevision, "--name-status"]
59
+ : ["diff", pOldRevision, "--name-status"], lErrorMap, pSpawnFunction);
60
+ }
61
+ export function getSHA1(pSpawnFunction = spawnSync) {
62
+ const lSha1Length = 40;
63
+ return getGitResult(["rev-parse", "HEAD"], {}, pSpawnFunction).slice(0, lSha1Length);
64
+ }
@@ -0,0 +1,15 @@
1
+ import { convertDiffLines, convertStatusLines, } from "./convert-to-change-object.js";
2
+ import { getDiffLines, getSHA1, getStatusShort } from "./git-primitives.js";
3
+ import format from "./formatters/format.js";
4
+ export function getSHASync() {
5
+ return getSHA1();
6
+ }
7
+ export function listSync(pOldRevision, pNewRevision, pOptions) {
8
+ const lOldRevision = pOldRevision || getSHA1();
9
+ const lOptions = pOptions || {};
10
+ let lChanges = convertDiffLines(getDiffLines(lOldRevision, pNewRevision));
11
+ if (!lOptions.trackedOnly) {
12
+ lChanges = lChanges.concat(convertStatusLines(getStatusShort()).filter(({ changeType }) => changeType === "untracked"));
13
+ }
14
+ return format(lChanges, lOptions.outputType);
15
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "watskeburt",
3
- "version": "0.9.2",
3
+ "version": "0.10.1",
4
4
  "description": "List files changed since a git revision",
5
5
  "keywords": [
6
6
  "git",
@@ -19,15 +19,15 @@
19
19
  "url": "https://sverweij.github.io"
20
20
  },
21
21
  "license": "MIT",
22
- "bin": "bin/cli.mjs",
22
+ "bin": "bin/cli.js",
23
23
  "main": "dist/cjs-bundle.cjs",
24
- "module": "dist/esm-bundle.mjs",
24
+ "module": "dist/esm/main.js",
25
25
  "type": "module",
26
26
  "sideEffects": false,
27
27
  "exports": {
28
28
  ".": [
29
29
  {
30
- "import": "./dist/esm-bundle.mjs",
30
+ "import": "./dist/esm/main.js",
31
31
  "require": "./dist/cjs-bundle.cjs"
32
32
  },
33
33
  "./dist/cjs-bundle.cjs"
@@ -48,37 +48,38 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/mocha": "10.0.1",
51
- "@types/node": "18.13.0",
52
- "@typescript-eslint/eslint-plugin": "5.52.0",
53
- "c8": "7.12.0",
54
- "dependency-cruiser": "12.9.0",
55
- "esbuild": "0.17.8",
56
- "eslint": "8.34.0",
51
+ "@types/node": "18.15.3",
52
+ "@typescript-eslint/eslint-plugin": "5.55.0",
53
+ "c8": "7.13.0",
54
+ "dependency-cruiser": "12.10.2",
55
+ "esbuild": "0.17.12",
56
+ "eslint": "8.36.0",
57
57
  "eslint-config-moving-meadow": "4.0.2",
58
- "eslint-config-prettier": "8.6.0",
58
+ "eslint-config-prettier": "8.7.0",
59
59
  "eslint-plugin-budapestian": "5.0.1",
60
60
  "eslint-plugin-eslint-comments": "3.2.0",
61
61
  "eslint-plugin-import": "2.27.5",
62
62
  "eslint-plugin-mocha": "10.1.0",
63
63
  "eslint-plugin-node": "11.1.0",
64
64
  "eslint-plugin-security": "1.7.1",
65
- "eslint-plugin-unicorn": "45.0.2",
65
+ "eslint-plugin-unicorn": "46.0.0",
66
66
  "mocha": "10.2.0",
67
67
  "npm-run-all": "4.1.5",
68
68
  "prettier": "2.8.4",
69
69
  "ts-node": "10.9.1",
70
- "typescript": "4.9.5",
71
- "upem": "7.3.1"
70
+ "typescript": "5.0.2",
71
+ "upem": "7.3.2"
72
72
  },
73
73
  "engines": {
74
74
  "node": "^14||^16||>=18"
75
75
  },
76
76
  "scripts": {
77
- "build": "npm-run-all --sequential build:version build:dist",
78
- "build:version": "node tools/get-version.mjs > bin/version.mjs",
77
+ "build": "npm-run-all --sequential build:clean build:version build:dist",
78
+ "build:version": "ts-node --esm tools/get-version.ts > bin/version.js",
79
+ "build:clean": "rm -rf dist/*",
79
80
  "build:dist": "npm-run-all build:dist:*",
80
81
  "build:dist:cjs": "esbuild src/main.ts --format=cjs --target=node14 --platform=node --bundle --global-name=wkbtcjs --minify --outfile=dist/cjs-bundle.cjs",
81
- "build:dist:esm": "esbuild src/main.ts --format=esm --target=node14 --platform=node --bundle --global-name=wkbtesm --minify --outfile=dist/esm-bundle.mjs",
82
+ "build:dist:esm": "tsc",
82
83
  "check": "npm-run-all --parallel --aggregate-output lint depcruise test:cover",
83
84
  "clean": "rm -rf dist",
84
85
  "test": "NODE_OPTIONS=--no-warnings mocha",
@@ -87,19 +88,19 @@
87
88
  "depcruise:graph": "depcruise bin src types --include-only '^(bin|dist|src|types)' --config --output-type dot | dot -T svg | tee docs/dependency-graph.svg | depcruise-wrap-stream-in-html > docs/dependency-graph.html",
88
89
  "depcruise:graph:archi": "depcruise bin src --include-only '^(bin|dist|src|types)' --config --output-type archi | dot -T svg | depcruise-wrap-stream-in-html > docs/high-level-dependency-graph.html",
89
90
  "depcruise:graph:dev": "depcruise bin dist src types --include-only '^(bin|dist|src|types)' --prefix vscode://file/$(pwd)/ --config --output-type dot | dot -T svg | depcruise-wrap-stream-in-html | browser",
90
- "depcruise:graph:diff:dev": "depcruise bin dist src types --include-only '^(bin|dist|src|types)' --highlight \"$(node bin/cli.mjs main -T regex)\" --prefix vscode://file/$(pwd)/ --config --output-type dot | dot -T svg | depcruise-wrap-stream-in-html | browser",
91
- "depcruise:graph:diff:mermaid": "depcruise bin dist src types --include-only '^(bin|dist|src|types)' --config --output-type mermaid --output-to - --highlight \"$(node bin/cli.mjs $SHA -T regex)\"",
91
+ "depcruise:graph:diff:dev": "depcruise bin dist src types --include-only '^(bin|dist|src|types)' --highlight \"$(node bin/cli.js main -T regex)\" --prefix vscode://file/$(pwd)/ --config --output-type dot | dot -T svg | depcruise-wrap-stream-in-html | browser",
92
+ "depcruise:graph:diff:mermaid": "depcruise bin dist src types --include-only '^(bin|dist|src|types)' --config --output-type mermaid --output-to - --highlight \"$(node bin/cli.js $SHA -T regex)\"",
92
93
  "depcruise:html": "depcruise bin src types --progress --config --output-type err-html --output-to dependency-violation-report.html",
93
94
  "depcruise:text": "depcruise bin src types --progress --config --output-type text",
94
95
  "depcruise:focus": "depcruise bin src types --progress --config --output-type text --focus",
95
96
  "depcruise:reaches": "depcruise bin src types --progress --config --output-type text --reaches",
96
- "format": "prettier --write \"{bin,src,tools}/**/*.mjs\" \"types/**/*.ts\" \"*.{json,yml,md,js}\"",
97
- "format:check": "prettier --loglevel warn --check \"{bin,src,tools}/**/*.mjs\" \"types/**/*.ts\" \"*.{json,yml,md,js}\"",
97
+ "format": "prettier --write \"{bin,src,tools}/**/*.{js,ts}\" \"types/**/*.ts\" \"*.{json,yml,md,js}\"",
98
+ "format:check": "prettier --loglevel warn --check \"{bin,src,tools}/**/*.ts\" \"types/**/*.ts\" \"*.{json,yml,md,js}\"",
98
99
  "lint": "npm-run-all --parallel --aggregate-output format:check lint:eslint lint:types",
99
100
  "lint:fix": "npm-run-all --parallel --aggregate-output format lint:eslint:fix",
100
101
  "lint:eslint": "eslint bin src types tools --cache --cache-location node_modules/.cache/eslint/",
101
102
  "lint:eslint:fix": "eslint bin src types tools --fix --cache --cache-location node_modules/.cache/eslint/",
102
- "lint:types": "tsc",
103
+ "lint:types": "tsc --noEmit",
103
104
  "scm:stage": "git add .",
104
105
  "update-dependencies": "run-s upem:update upem:install lint:fix check",
105
106
  "upem-outdated": "npm outdated --json --long | upem --dry-run",
package/bin/version.mjs DELETED
@@ -1 +0,0 @@
1
- export const VERSION = "0.9.2";
@@ -1 +0,0 @@
1
- import{EOL as m}from"os";var C=/^(?<changeType>[ACDMRTUXB])(?<similarity>[0-9]{3})?[ \t]+(?<name>[^ \t]+)[ \t]*(?<newName>[^ \t]+)?$/,I=/^(?<stagedChangeType>[ ACDMRTUXB?!])(?<unStagedChangeType>[ ACDMRTUXB?!])[ \t]+(?<name>[^ \t]+)(( -> )(?<newName>[^ \t]+))?$/,E={A:"added",C:"copied",D:"deleted",M:"modified",R:"renamed",T:"type changed",U:"unmerged",B:"pairing broken"," ":"unmodified","?":"untracked","!":"ignored"};function s(n){return E[n]??"unknown"}function w(n){let e=n.match(I),t={};if(e!=null&&e.groups){let r=s(e.groups.stagedChangeType),o=s(e.groups.unStagedChangeType);t.changeType=r==="unmodified"?o:r,e.groups.newName?(t.name=e.groups.newName,t.oldName=e.groups.name):t.name=e.groups.name}return t}function x(n){let e=n.match(C),t={};return e!=null&&e.groups&&(t.changeType=s(e.groups.changeType),e.groups.newName?(t.name=e.groups.newName,t.oldName=e.groups.name):t.name=e.groups.name),t}function T(n){return n.split(m).filter(Boolean).map(w).filter(({name:e,changeType:t})=>Boolean(e)&&Boolean(t))}function l(n){return n.split(m).filter(Boolean).map(x).filter(({name:e,changeType:t})=>Boolean(e)&&Boolean(t))}import{spawnSync as i}from"child_process";function d(n){return n instanceof Buffer?n.toString("utf8"):n}function N(n){throw n.code==="ENOENT"?new Error("git executable not found"):new Error(`internal spawn error: ${n}`)}function g(n,e,t){let r=t("git",n,{cwd:process.cwd(),env:process.env});if(r.error&&N(r.error),r.status===0)return d(r.stdout);throw new Error(e[r.status??0]||`internal git error: ${r.status} (${d(r.stderr)})`)}function h(n=i){let e={129:`'${process.cwd()}' does not seem to be a git repository`};return g(["status","--porcelain"],e,n)}function y(n,e,t=i){let r={128:`revision '${n}' ${e?`(or '${e}') `:""}unknown`,129:`'${process.cwd()}' does not seem to be a git repository`};return g(e?["diff",n,e,"--name-status"]:["diff",n,"--name-status"],r,t)}function p(n=i){return g(["rev-parse","HEAD"],{},n).slice(0,40)}import{extname as A}from"path";var _=new Set([".cjs",".cjsx",".coffee",".csx",".cts",".js",".json",".jsx",".litcoffee",".ls",".mjs",".mts",".svelte",".ts",".tsx",".vue",".vuex"]),D=new Set(["modified","added","renamed","copied","untracked"]);function u(n,e=_,t=D){return`^(${n.filter(o=>t.has(o.changeType)).map(({name:o})=>o).filter(o=>e.has(A(o))).join("|")})$`}var L=2;function c(n){return JSON.stringify(n,null,L)}var O=n=>n,B=new Map([["regex",u],["json",c]]);function f(n,e){return(B.get(e??"unknown")||O)(n)}function Y(){return p()}function V(n,e,t){let r=n||p(),o=t||{},a=l(y(r,e));return o.trackedOnly||(a=a.concat(T(h()).filter(({changeType:S})=>S==="untracked"))),f(a,o.outputType)}export{Y as getSHASync,V as listSync};