@ls-stack/utils 1.2.0 → 1.3.0

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/dist/dedent.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare function dedent(strings: string): string;
2
1
  declare function dedent(strings: TemplateStringsArray, ...values: string[]): string;
2
+ declare function dedent(strings: string): string;
3
3
 
4
4
  export { dedent };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dedent.ts"],"sourcesContent":["// fork of https://github.com/dmnd/dedent\n\nexport function dedent(strings: string): string;\nexport function dedent(\n strings: TemplateStringsArray,\n ...values: string[]\n): string;\nexport function dedent(\n strings: TemplateStringsArray | string,\n ...values: string[]\n) {\n // $FlowFixMe: Flow doesn't undestand .raw\n const raw = typeof strings === 'string' ? [strings] : strings.raw;\n\n // first, perform interpolation\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n result += raw[i]! // join lines when there is a suppressed newline\n .replace(/\\\\\\n[ \\t]*/g, '')\n // handle escaped backticks\n .replace(/\\\\`/g, '`');\n\n if (i < values.length) {\n result += values[i];\n }\n }\n\n // now strip indentation\n const lines = result.split('\\n');\n let mindent: number | null = null;\n lines.forEach((l) => {\n const m = l.match(/^(\\s+)\\S+/);\n if (m) {\n const indent = m[1]!.length;\n if (!mindent) {\n // this is the first indented line\n mindent = indent;\n } else {\n mindent = Math.min(mindent, indent);\n }\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (mindent !== null) {\n const m = mindent; // appease Flow\n result = lines.map((l) => (l.startsWith(' ') ? l.slice(m) : l)).join('\\n');\n }\n\n return (\n result\n // dedent eats leading and trailing whitespace too\n .trim()\n // handle escaped newlines at the end to ensure they don't get stripped too\n .replace(/\\\\n/g, '\\n')\n );\n}\n"],"mappings":";AAOO,SAAS,OACd,YACG,QACH;AAEA,QAAM,MAAM,OAAO,YAAY,WAAW,CAAC,OAAO,IAAI,QAAQ;AAG9D,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAU,IAAI,CAAC,EACZ,QAAQ,eAAe,EAAE,EAEzB,QAAQ,QAAQ,GAAG;AAEtB,QAAI,IAAI,OAAO,QAAQ;AACrB,gBAAU,OAAO,CAAC;AAAA,IACpB;AAAA,EACF;AAGA,QAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,MAAI,UAAyB;AAC7B,QAAM,QAAQ,CAAC,MAAM;AACnB,UAAM,IAAI,EAAE,MAAM,WAAW;AAC7B,QAAI,GAAG;AACL,YAAM,SAAS,EAAE,CAAC,EAAG;AACrB,UAAI,CAAC,SAAS;AAEZ,kBAAU;AAAA,MACZ,OAAO;AACL,kBAAU,KAAK,IAAI,SAAS,MAAM;AAAA,MACpC;AAAA,IACF;AAAA,EACF,CAAC;AAGD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI;AACV,aAAS,MAAM,IAAI,CAAC,MAAO,EAAE,WAAW,GAAG,IAAI,EAAE,MAAM,CAAC,IAAI,CAAE,EAAE,KAAK,IAAI;AAAA,EAC3E;AAEA,SACE,OAEG,KAAK,EAEL,QAAQ,QAAQ,IAAI;AAE3B;","names":[]}
1
+ {"version":3,"sources":["../src/dedent.ts"],"sourcesContent":["// fork of https://github.com/dmnd/dedent\n\nexport function dedent(\n strings: TemplateStringsArray,\n ...values: string[]\n): string;\nexport function dedent(strings: string): string;\nexport function dedent(\n strings: TemplateStringsArray | string,\n ...values: string[]\n) {\n // $FlowFixMe: Flow doesn't undestand .raw\n const raw = typeof strings === 'string' ? [strings] : strings.raw;\n\n // first, perform interpolation\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n result += raw[i]! // join lines when there is a suppressed newline\n .replace(/\\\\\\n[ \\t]*/g, '')\n // handle escaped backticks\n .replace(/\\\\`/g, '`');\n\n if (i < values.length) {\n result += values[i];\n }\n }\n\n // now strip indentation\n const lines = result.split('\\n');\n let mindent: number | null = null;\n lines.forEach((l) => {\n const m = l.match(/^(\\s+)\\S+/);\n if (m) {\n const indent = m[1]!.length;\n if (!mindent) {\n // this is the first indented line\n mindent = indent;\n } else {\n mindent = Math.min(mindent, indent);\n }\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (mindent !== null) {\n const m = mindent; // appease Flow\n result = lines.map((l) => (l.startsWith(' ') ? l.slice(m) : l)).join('\\n');\n }\n\n return (\n result\n // dedent eats leading and trailing whitespace too\n .trim()\n // handle escaped newlines at the end to ensure they don't get stripped too\n .replace(/\\\\n/g, '\\n')\n );\n}\n"],"mappings":";AAOO,SAAS,OACd,YACG,QACH;AAEA,QAAM,MAAM,OAAO,YAAY,WAAW,CAAC,OAAO,IAAI,QAAQ;AAG9D,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAU,IAAI,CAAC,EACZ,QAAQ,eAAe,EAAE,EAEzB,QAAQ,QAAQ,GAAG;AAEtB,QAAI,IAAI,OAAO,QAAQ;AACrB,gBAAU,OAAO,CAAC;AAAA,IACpB;AAAA,EACF;AAGA,QAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,MAAI,UAAyB;AAC7B,QAAM,QAAQ,CAAC,MAAM;AACnB,UAAM,IAAI,EAAE,MAAM,WAAW;AAC7B,QAAI,GAAG;AACL,YAAM,SAAS,EAAE,CAAC,EAAG;AACrB,UAAI,CAAC,SAAS;AAEZ,kBAAU;AAAA,MACZ,OAAO;AACL,kBAAU,KAAK,IAAI,SAAS,MAAM;AAAA,MACpC;AAAA,IACF;AAAA,EACF,CAAC;AAGD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI;AACV,aAAS,MAAM,IAAI,CAAC,MAAO,EAAE,WAAW,GAAG,IAAI,EAAE,MAAM,CAAC,IAAI,CAAE,EAAE,KAAK,IAAI;AAAA,EAC3E;AAEA,SACE,OAEG,KAAK,EAEL,QAAQ,QAAQ,IAAI;AAE3B;","names":[]}
@@ -5,11 +5,18 @@ type CmdResult = {
5
5
  stdout: string;
6
6
  stderr: string;
7
7
  };
8
- declare function runCmd(label: string | null, command: string | string[], { mock, silent, cwd, }?: {
8
+ type RunCmdOptions = {
9
9
  mock?: CmdResult;
10
- silent?: boolean;
10
+ silent?: boolean | 'timeOnly';
11
11
  cwd?: string;
12
- }): Promise<CmdResult>;
12
+ throwOnError?: boolean;
13
+ };
14
+ declare function runCmd(label: string | null, command: string | string[], { mock, silent, throwOnError, cwd }?: RunCmdOptions): Promise<CmdResult>;
13
15
  declare function concurrentCmd(label: string, cmd: string, onResult: (result: CmdResult) => void): Promise<() => void>;
16
+ declare function runCmdUnwrap(label: string | null, command: string | string[], { silent, }?: {
17
+ silent?: boolean | 'timeOnly';
18
+ }): Promise<string>;
19
+ declare function runCmdSilent(command: string | string[]): Promise<CmdResult>;
20
+ declare function runCmdSilentUnwrap(command: string | string[]): Promise<string>;
14
21
 
15
- export { concurrentCmd, runCmd };
22
+ export { concurrentCmd, runCmd, runCmdSilent, runCmdSilentUnwrap, runCmdUnwrap };
@@ -1,19 +1,17 @@
1
1
  // src/runShellCmd.ts
2
2
  import { spawn } from "child_process";
3
3
  process.env.FORCE_COLOR = true;
4
- function runCmd(label, command, {
5
- mock,
6
- silent,
7
- cwd = process.cwd()
8
- } = {}) {
4
+ function runCmd(label, command, { mock, silent, throwOnError, cwd = process.cwd() } = {}) {
9
5
  if (mock)
10
6
  return Promise.resolve(mock);
11
- if (label && !silent) {
7
+ if (label && (!silent || silent === "timeOnly")) {
12
8
  console.log(`----${label}----`);
13
9
  console.time("\u2705");
14
10
  }
15
11
  return new Promise((resolve) => {
16
- const [cmd = "", ...args] = Array.isArray(command) ? command : command.split(" ");
12
+ const [cmd = "", ...args] = Array.isArray(command) ? command.flatMap(
13
+ (item) => item.startsWith("$") ? item.replace("$", "").split(" ") : item
14
+ ) : command.split(" ");
17
15
  const child = spawn(cmd, args, {
18
16
  cwd
19
17
  });
@@ -36,12 +34,23 @@ function runCmd(label, command, {
36
34
  });
37
35
  child.on("close", (code) => {
38
36
  const hasError = code !== 0;
39
- if (!silent && label) {
37
+ if (!silent || silent === "timeOnly") {
40
38
  if (!hasError) {
41
39
  console.timeEnd("\u2705");
42
40
  }
43
41
  console.log("\n");
44
42
  }
43
+ if (throwOnError && hasError) {
44
+ if (silent) {
45
+ if (label) {
46
+ console.log(`----${label}----`);
47
+ } else {
48
+ console.trace();
49
+ }
50
+ console.error(stderr);
51
+ }
52
+ process.exit(1);
53
+ }
45
54
  resolve({ label, out, stderr, stdout, error: hasError });
46
55
  });
47
56
  });
@@ -50,9 +59,9 @@ async function concurrentCmd(label, cmd, onResult) {
50
59
  const start = Date.now();
51
60
  const result = await runCmd(label, cmd, { silent: true });
52
61
  onResult(result);
53
- const ellapsedSeconds = (Date.now() - start) / 1e3;
62
+ const elapsedSeconds = (Date.now() - start) / 1e3;
54
63
  console.log(
55
- `${result.error ? "\u{1F534}" : "\u2705"} ${result.label} (${ellapsedSeconds.toFixed(
64
+ `${result.error ? "\u{1F534}" : "\u2705"} ${result.label} (${elapsedSeconds.toFixed(
56
65
  1
57
66
  )}s)`
58
67
  );
@@ -64,8 +73,22 @@ async function concurrentCmd(label, cmd, onResult) {
64
73
  }
65
74
  };
66
75
  }
76
+ async function runCmdUnwrap(label, command, {
77
+ silent
78
+ } = {}) {
79
+ return (await runCmd(label, command, { silent, throwOnError: true })).stdout;
80
+ }
81
+ function runCmdSilent(command) {
82
+ return runCmd(null, command, { silent: true });
83
+ }
84
+ function runCmdSilentUnwrap(command) {
85
+ return runCmdUnwrap(null, command, { silent: true });
86
+ }
67
87
  export {
68
88
  concurrentCmd,
69
- runCmd
89
+ runCmd,
90
+ runCmdSilent,
91
+ runCmdSilentUnwrap,
92
+ runCmdUnwrap
70
93
  };
71
94
  //# sourceMappingURL=runShellCmd.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runShellCmd.ts"],"sourcesContent":["/* eslint-disable no-console -- we need console here to print errors */\n\ntype CmdResult = {\n label: string | null;\n out: string;\n error: boolean;\n stdout: string;\n stderr: string;\n};\n\nimport { spawn } from 'child_process';\n\n(process.env as any).FORCE_COLOR = true;\n\nexport function runCmd(\n label: string | null,\n command: string | string[],\n {\n mock,\n silent,\n cwd = process.cwd(),\n }: { mock?: CmdResult; silent?: boolean; cwd?: string } = {},\n): Promise<CmdResult> {\n if (mock) return Promise.resolve(mock);\n\n if (label && !silent) {\n console.log(`----${label}----`);\n console.time('✅');\n }\n\n return new Promise((resolve) => {\n const [cmd = '', ...args] =\n Array.isArray(command) ? command : command.split(' ');\n const child = spawn(cmd, args, {\n cwd,\n });\n\n let stdout = '';\n let stderr = '';\n let out = '';\n\n child.stdout.on('data', (data) => {\n stdout += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.stderr.on('data', (data) => {\n stderr += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.on('close', (code) => {\n const hasError = code !== 0;\n\n if (!silent && label) {\n if (!hasError) {\n console.timeEnd('✅');\n }\n\n console.log('\\n');\n }\n\n resolve({ label, out, stderr, stdout, error: hasError });\n });\n });\n}\n\nexport async function concurrentCmd(\n label: string,\n cmd: string,\n onResult: (result: CmdResult) => void,\n) {\n const start = Date.now();\n\n const result = await runCmd(label, cmd, { silent: true });\n\n onResult(result);\n\n const ellapsedSeconds = (Date.now() - start) / 1000;\n\n console.log(\n `${result.error ? '🔴' : '✅'} ${result.label} (${ellapsedSeconds.toFixed(\n 1,\n )}s)`,\n );\n\n return () => {\n if (result.error) {\n console.log(`❌ ${result.label} errors:`);\n console.log(result.out);\n console.log('\\n');\n }\n };\n}\n"],"mappings":";AAUA,SAAS,aAAa;AAErB,QAAQ,IAAY,cAAc;AAE5B,SAAS,OACd,OACA,SACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,MAAM,QAAQ,IAAI;AACpB,IAA0D,CAAC,GACvC;AACpB,MAAI;AAAM,WAAO,QAAQ,QAAQ,IAAI;AAErC,MAAI,SAAS,CAAC,QAAQ;AACpB,YAAQ,IAAI,OAAO,KAAK,MAAM;AAC9B,YAAQ,KAAK,QAAG;AAAA,EAClB;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IACtB,MAAM,QAAQ,OAAO,IAAI,UAAU,QAAQ,MAAM,GAAG;AACtD,UAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,MAAM;AAEV,UAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAChC,gBAAU,OAAO,IAAI;AACrB,aAAO,OAAO,IAAI;AAElB,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAChC,gBAAU,OAAO,IAAI;AACrB,aAAO,OAAO,IAAI;AAElB,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,YAAM,WAAW,SAAS;AAE1B,UAAI,CAAC,UAAU,OAAO;AACpB,YAAI,CAAC,UAAU;AACb,kBAAQ,QAAQ,QAAG;AAAA,QACrB;AAEA,gBAAQ,IAAI,IAAI;AAAA,MAClB;AAEA,cAAQ,EAAE,OAAO,KAAK,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,IACzD,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,cACpB,OACA,KACA,UACA;AACA,QAAM,QAAQ,KAAK,IAAI;AAEvB,QAAM,SAAS,MAAM,OAAO,OAAO,KAAK,EAAE,QAAQ,KAAK,CAAC;AAExD,WAAS,MAAM;AAEf,QAAM,mBAAmB,KAAK,IAAI,IAAI,SAAS;AAE/C,UAAQ;AAAA,IACN,GAAG,OAAO,QAAQ,cAAO,QAAG,IAAI,OAAO,KAAK,KAAK,gBAAgB;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,MAAM;AACX,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAI,UAAK,OAAO,KAAK,UAAU;AACvC,cAAQ,IAAI,OAAO,GAAG;AACtB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/runShellCmd.ts"],"sourcesContent":["/* eslint-disable no-console -- we need console here to print errors */\n\ntype CmdResult = {\n label: string | null;\n out: string;\n error: boolean;\n stdout: string;\n stderr: string;\n};\n\nimport { spawn } from 'child_process';\n\n(process.env as any).FORCE_COLOR = true;\n\ntype RunCmdOptions = {\n mock?: CmdResult;\n silent?: boolean | 'timeOnly';\n cwd?: string;\n throwOnError?: boolean;\n};\n\nexport function runCmd(\n label: string | null,\n command: string | string[],\n { mock, silent, throwOnError, cwd = process.cwd() }: RunCmdOptions = {},\n): Promise<CmdResult> {\n if (mock) return Promise.resolve(mock);\n\n if (label && (!silent || silent === 'timeOnly')) {\n console.log(`----${label}----`);\n console.time('✅');\n }\n\n return new Promise((resolve) => {\n const [cmd = '', ...args] =\n Array.isArray(command) ?\n command.flatMap((item) =>\n item.startsWith('$') ? item.replace('$', '').split(' ') : item,\n )\n : command.split(' ');\n const child = spawn(cmd, args, {\n cwd,\n });\n\n let stdout = '';\n let stderr = '';\n let out = '';\n\n child.stdout.on('data', (data) => {\n stdout += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.stderr.on('data', (data) => {\n stderr += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.on('close', (code) => {\n const hasError = code !== 0;\n\n if (!silent || silent === 'timeOnly') {\n if (!hasError) {\n console.timeEnd('✅');\n }\n\n console.log('\\n');\n }\n\n if (throwOnError && hasError) {\n if (silent) {\n if (label) {\n console.log(`----${label}----`);\n } else {\n console.trace();\n }\n console.error(stderr);\n }\n\n process.exit(1);\n }\n\n resolve({ label, out, stderr, stdout, error: hasError });\n });\n });\n}\n\nexport async function concurrentCmd(\n label: string,\n cmd: string,\n onResult: (result: CmdResult) => void,\n) {\n const start = Date.now();\n\n const result = await runCmd(label, cmd, { silent: true });\n\n onResult(result);\n\n const elapsedSeconds = (Date.now() - start) / 1000;\n\n console.log(\n `${result.error ? '🔴' : '✅'} ${result.label} (${elapsedSeconds.toFixed(\n 1,\n )}s)`,\n );\n\n return () => {\n if (result.error) {\n console.log(`❌ ${result.label} errors:`);\n console.log(result.out);\n console.log('\\n');\n }\n };\n}\n\nexport async function runCmdUnwrap(\n label: string | null,\n command: string | string[],\n {\n silent,\n }: {\n silent?: boolean | 'timeOnly';\n } = {},\n) {\n return (await runCmd(label, command, { silent, throwOnError: true })).stdout;\n}\n\nexport function runCmdSilent(command: string | string[]) {\n return runCmd(null, command, { silent: true });\n}\n\nexport function runCmdSilentUnwrap(command: string | string[]) {\n return runCmdUnwrap(null, command, { silent: true });\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ls-stack/utils",
3
3
  "description": "Typescript utils",
4
- "version": "1.2.0",
4
+ "version": "1.3.0",
5
5
  "license": "MIT",
6
6
  "files": [
7
7
  "dist"