zarro 1.103.0 → 1.103.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,122 +1,123 @@
1
- const resolveNuget = require("./resolve-nuget"),
2
- downloadNuget = require("./download-nuget"),
3
- nugetUpdateSelf = require("./nuget-update-self"),
4
- debug = require("debug")("install-local-tools"),
5
- gutil = requireModule("gulp-util"),
6
- path = require("path"),
7
- fs = require("fs"),
8
- getToolsFolder = require("./get-tools-folder"),
9
- nuget = require("./nuget"),
10
- ensureFolderExists = require("./ensure-folder-exists"),
11
- { ZarroError } = requireModule("zarro-error"),
12
- del = require("del");
13
-
14
- function cleanFoldersFrom(toolsFolder) {
15
- const dirs = fs
16
- .readdirSync(toolsFolder)
17
- .map(p => path.join(toolsFolder, p))
18
- .filter(p => {
19
- const stat = fs.lstatSync(p);
20
- return stat.isDirectory();
21
- });
22
- if (dirs.length) {
23
- debug(`Will delete the following tools sub-folders:`);
24
- dirs.forEach(d => {
25
- debug(` - ${d}`);
26
- });
27
- }
28
- return del(dirs);
29
- }
30
-
31
- function downloadOrUpdateNuget(targetFolder) {
32
- const nugetPath = path.join(targetFolder, "nuget.exe");
33
- const nuget = resolveNuget(nugetPath, false);
34
- if (nuget && !nuget.match(/dotnet/i)) {
35
- if (!process.env.SKIP_NUGET_UPDATES) {
36
- gutil.log("nuget.exe already exists... attempting self-update");
37
- console.log(`NUGET: (${nuget})`);
38
- return nugetUpdateSelf(nuget);
39
- }
40
- return nuget;
41
- }
42
- debug(`Attempting to get tools nuget to: ${targetFolder}`);
43
- return downloadNuget(targetFolder);
44
- }
45
-
46
- function generateNugetSourcesOptions(toolSpecifiedSource) {
47
- if (toolSpecifiedSource) {
48
- return ["-source", toolSpecifiedSource];
49
- }
50
- return (process.env.NUGET_SOURCES || "")
51
- .split(",")
52
- .reduce((acc, cur) => acc.concat(cur ? ["-source", cur] : []), []);
53
- }
54
-
55
- function generateNugetInstallArgsFor(toolSpec) {
56
- // accept a tool package in the formats:
57
- // packagename (eg 'nunit')
58
- // - retrieves the package according to the system config (original & default behavior)
59
- // source/packagename (eg 'proget.mycompany.moo/nunit')
60
- // - retrieves the package from the named source (same as nuget.exe install nunit -source proget.mycompany.moo}
61
- // - allows consumer to be specific about where the package should come from
62
- // - allows third-parties to be specific about their packages being from, eg, nuget.org
63
- var parts = toolSpec.split("/");
64
- var toolPackage = parts.splice(parts.length - 1);
65
- return ["install", toolPackage].concat(generateNugetSourcesOptions(parts[0]));
66
- }
67
-
68
- // gulp4 doesn't seem to protect against repeated dependencies, so this is a safeguard
69
- // here to prevent accidental parallel install
70
- let
71
- installingPromise = null,
72
- installingRequest = null;
73
- module.exports = {
74
- install: (requiredTools, overrideToolsFolder) => {
75
- if (!requiredTools) {
76
- throw new ZarroError("No required tools set");
77
- }
78
- if (!Array.isArray(requiredTools)) {
79
- requiredTools = [requiredTools];
80
- }
81
- const target = overrideToolsFolder || getToolsFolder();
82
- // TODO: should allow subsequent installations, ie if
83
- // a prior install asked for tools "A" and "B", a subsequent
84
- // request for "C" should just wait and then do the work
85
- if (installingPromise) {
86
- debug("default tools installer already running...");
87
- const missing = requiredTools.reduce((acc, cur) => {
88
- if (installingRequest.indexOf(cur) === -1) {
89
- acc.push(cur);
90
- }
91
- return acc;
92
- }, []);
93
- if (missing.length) {
94
- return Promist.reject("multiple tools installations are not (yet) supported");
95
- }
96
- return installingPromise;
97
- }
98
- installingRequest = requiredTools;
99
- return installingPromise = ensureFolderExists(target)
100
- .then(() => cleanFoldersFrom(target))
101
- .then(() => downloadOrUpdateNuget(target))
102
- .then(() =>
103
- Promise.all(
104
- requiredTools.map(tool => {
105
- debug(`install: ${tool}`);
106
- return nuget(
107
- generateNugetInstallArgsFor(tool),
108
- { cwd: target }
109
- );
110
- })
111
- )
112
- )
113
- .then(() => {
114
- debug("tool installation complete");
115
- });
116
- },
117
- clean: overrideToolsFolder => {
118
- debug("cleaning tools folder");
119
- const target = overrideToolsFolder || getToolsFolder();
120
- return cleanFoldersFrom(target);
121
- }
122
- };
1
+ const
2
+ resolveNuget = require("./resolve-nuget"),
3
+ downloadNuget = require("./download-nuget"),
4
+ nugetUpdateSelf = require("./nuget-update-self"),
5
+ debug = require("debug")("install-local-tools"),
6
+ gutil = requireModule("gulp-util"),
7
+ path = require("path"),
8
+ fs = require("fs"),
9
+ getToolsFolder = require("./get-tools-folder"),
10
+ nuget = require("./nuget"),
11
+ ensureFolderExists = require("./ensure-folder-exists"),
12
+ { ZarroError } = requireModule("zarro-error"),
13
+ del = require("del");
14
+
15
+ function cleanFoldersFrom(toolsFolder) {
16
+ const dirs = fs
17
+ .readdirSync(toolsFolder)
18
+ .map(p => path.join(toolsFolder, p))
19
+ .filter(p => {
20
+ const stat = fs.lstatSync(p);
21
+ return stat.isDirectory();
22
+ });
23
+ if (dirs.length) {
24
+ debug(`Will delete the following tools sub-folders:`);
25
+ dirs.forEach(d => {
26
+ debug(` - ${d}`);
27
+ });
28
+ }
29
+ return del(dirs);
30
+ }
31
+
32
+ function downloadOrUpdateNuget(targetFolder) {
33
+ const nugetPath = path.join(targetFolder, "nuget.exe");
34
+ const nuget = resolveNuget(nugetPath, false);
35
+ if (nuget && !nuget.match(/dotnet/i)) {
36
+ if (!process.env.SKIP_NUGET_UPDATES) {
37
+ gutil.log("nuget.exe already exists... attempting self-update");
38
+ console.log(`NUGET: (${nuget})`);
39
+ return nugetUpdateSelf(nuget);
40
+ }
41
+ return nuget;
42
+ }
43
+ debug(`Attempting to get tools nuget to: ${targetFolder}`);
44
+ return downloadNuget(targetFolder);
45
+ }
46
+
47
+ function generateNugetSourcesOptions(toolSpecifiedSource) {
48
+ if (toolSpecifiedSource) {
49
+ return ["-source", toolSpecifiedSource];
50
+ }
51
+ return (process.env.NUGET_SOURCES || "")
52
+ .split(",")
53
+ .reduce((acc, cur) => acc.concat(cur ? ["-source", cur] : []), []);
54
+ }
55
+
56
+ function generateNugetInstallArgsFor(toolSpec) {
57
+ // accept a tool package in the formats:
58
+ // packagename (eg 'nunit')
59
+ // - retrieves the package according to the system config (original & default behavior)
60
+ // source/packagename (eg 'proget.mycompany.moo/nunit')
61
+ // - retrieves the package from the named source (same as nuget.exe install nunit -source proget.mycompany.moo}
62
+ // - allows consumer to be specific about where the package should come from
63
+ // - allows third-parties to be specific about their packages being from, eg, nuget.org
64
+ var parts = toolSpec.split("/");
65
+ var toolPackage = parts.splice(parts.length - 1);
66
+ return ["install", toolPackage].concat(generateNugetSourcesOptions(parts[0]));
67
+ }
68
+
69
+ // gulp4 doesn't seem to protect against repeated dependencies, so this is a safeguard
70
+ // here to prevent accidental parallel install
71
+ let
72
+ installingPromise = null,
73
+ installingRequest = null;
74
+ module.exports = {
75
+ install: (requiredTools, overrideToolsFolder) => {
76
+ if (!requiredTools) {
77
+ throw new ZarroError("No required tools set");
78
+ }
79
+ if (!Array.isArray(requiredTools)) {
80
+ requiredTools = [requiredTools];
81
+ }
82
+ const target = overrideToolsFolder || getToolsFolder();
83
+ // TODO: should allow subsequent installations, ie if
84
+ // a prior install asked for tools "A" and "B", a subsequent
85
+ // request for "C" should just wait and then do the work
86
+ if (installingPromise) {
87
+ debug("default tools installer already running...");
88
+ const missing = requiredTools.reduce((acc, cur) => {
89
+ if (installingRequest.indexOf(cur) === -1) {
90
+ acc.push(cur);
91
+ }
92
+ return acc;
93
+ }, []);
94
+ if (missing.length) {
95
+ return Promist.reject("multiple tools installations are not (yet) supported");
96
+ }
97
+ return installingPromise;
98
+ }
99
+ installingRequest = requiredTools;
100
+ return installingPromise = ensureFolderExists(target)
101
+ .then(() => cleanFoldersFrom(target))
102
+ .then(() => downloadOrUpdateNuget(target))
103
+ .then(() =>
104
+ Promise.all(
105
+ requiredTools.map(tool => {
106
+ debug(`install: ${tool}`);
107
+ return nuget(
108
+ generateNugetInstallArgsFor(tool),
109
+ { cwd: target }
110
+ );
111
+ })
112
+ )
113
+ )
114
+ .then(() => {
115
+ debug("tool installation complete");
116
+ });
117
+ },
118
+ clean: overrideToolsFolder => {
119
+ debug("cleaning tools folder");
120
+ const target = overrideToolsFolder || getToolsFolder();
121
+ return cleanFoldersFrom(target);
122
+ }
123
+ };
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  (function () {
3
- const resolveNuget = require("./resolve-nuget"), findLocalNuget = require("./find-local-nuget"), exec = require("./exec");
3
+ const resolveNuget = requireModule("resolve-nuget"), findLocalNuget = requireModule("find-local-nuget"), tryDo = requireModule("try-do"), exec = requireModule("exec");
4
4
  module.exports = async function (args, execOpts) {
5
- const resolvedNuget = await resolveNuget(null, false), nugetPath = resolvedNuget || await findLocalNuget(), argsCopy = args.slice();
6
- return exec(nugetPath, argsCopy, execOpts);
5
+ const resolvedNuget = resolveNuget(undefined, false), nugetPath = resolvedNuget || await findLocalNuget(), argsCopy = args.slice();
6
+ return await tryDo(() => exec(nugetPath, argsCopy, execOpts), "RESTORE_RETRIES");
7
7
  };
8
8
  })();
@@ -1,14 +1,18 @@
1
- (function() {
2
- const
3
- resolveNuget = require("./resolve-nuget"),
4
- findLocalNuget = require("./find-local-nuget"),
5
- exec = require("./exec");
6
-
7
- module.exports = async function(args: string[], execOpts: ExecOpts) {
8
- const
9
- resolvedNuget = await resolveNuget(null, false),
10
- nugetPath = resolvedNuget || await findLocalNuget(),
11
- argsCopy = args.slice();
12
- return exec(nugetPath, argsCopy, execOpts);
13
- }
14
- })();
1
+ (function() {
2
+ const
3
+ resolveNuget = requireModule<ResolveNuget>("resolve-nuget"),
4
+ findLocalNuget = requireModule<FindLocalNuget>("find-local-nuget"),
5
+ tryDo = requireModule<TryDo<string>>("try-do"),
6
+ exec = requireModule<Exec>("exec");
7
+
8
+ module.exports = async function(args: string[], execOpts: ExecOpts) {
9
+ const
10
+ resolvedNuget = resolveNuget(undefined, false),
11
+ nugetPath = resolvedNuget || await findLocalNuget(),
12
+ argsCopy = args.slice();
13
+ return await tryDo(
14
+ () => exec(nugetPath, argsCopy, execOpts),
15
+ "RESTORE_RETRIES"
16
+ )
17
+ }
18
+ })();
@@ -13,8 +13,7 @@
13
13
  let retryCount = 0;
14
14
  while (totalAttempts-- > 0) {
15
15
  try {
16
- await logic();
17
- return;
16
+ return await logic();
18
17
  }
19
18
  catch (e) {
20
19
  if (totalAttempts > 0) {
@@ -47,6 +46,7 @@
47
46
  }
48
47
  }
49
48
  }
49
+ throw new Error("Should have either completed or thrown by now");
50
50
  }
51
51
  module.exports = tryDo;
52
52
  })();
@@ -3,12 +3,12 @@
3
3
  env = requireModule<Env>("env"),
4
4
  chalk = require("ansi-colors");
5
5
 
6
- async function tryDo(
7
- logic: AsyncVoidVoid,
6
+ async function tryDo<T>(
7
+ logic: AsyncVoidFunc<T>,
8
8
  retries: number | string,
9
9
  onTransientError: ErrorReporter,
10
10
  onFinalFailure: VoidVoid
11
- ): Promise<void> {
11
+ ): Promise<T> {
12
12
  // always attempt at least once
13
13
  const requestedRetries = typeof retries === "string"
14
14
  ? env.resolveNumber(retries)
@@ -22,8 +22,7 @@
22
22
 
23
23
  while (totalAttempts-- > 0) {
24
24
  try {
25
- await logic();
26
- return;
25
+ return await logic();
27
26
  } catch (e) {
28
27
  if (totalAttempts > 0) {
29
28
  if (onTransientError) {
@@ -51,6 +50,7 @@
51
50
  }
52
51
  }
53
52
  }
53
+ throw new Error("Should have either completed or thrown by now");
54
54
  }
55
55
 
56
56
  module.exports = tryDo;
@@ -6,7 +6,6 @@ const
6
6
  nugetRestore = requireModule("./gulp-nuget-restore"),
7
7
  promisify = requireModule("promisify"),
8
8
  resolveMasks = requireModule("resolve-masks"),
9
- { ZarroError } = requireModule("zarro-error"),
10
9
  tryDo = requireModule("try-do"),
11
10
  findLocalNuget = requireModule("find-local-nuget");
12
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zarro",
3
- "version": "1.103.0",
3
+ "version": "1.103.1",
4
4
  "description": "Some glue to make gulp easier, perhaps even zero- or close-to-zero-conf",
5
5
  "bin": {
6
6
  "zarro": "./index.js"
package/types.d.ts CHANGED
@@ -21,11 +21,14 @@ declare global {
21
21
 
22
22
  type VoidVoid = () => void;
23
23
  type AsyncVoidVoid = () => Promise<void>;
24
- type AsyncVoidFunction = () => Promise<void>;
24
+ type AsyncVoidFunc<T> = () => Promise<T>;
25
25
  type ErrorReporter = (e: Error) => Promise<void> | void;
26
26
  type GulpCallback =
27
27
  (() => Promise<any> | NodeJS.EventEmitter) | ((done: VoidVoid) => Promise<any> | NodeJS.EventEmitter)
28
- type TryDo = (logic: AsyncVoidVoid, retries: number | string, onTransientError?: ErrorReporter, onFinalFailure?: VoidVoid) => Promise<void>;
28
+ type TryDo<T> = (logic: AsyncVoidFunc<T>, retries: number | string, onTransientError?: ErrorReporter, onFinalFailure?: VoidVoid) => Promise<void>;
29
+ type Optional<T> = T | undefined;
30
+ type ResolveNuget = (nugetPath: Optional<string>, errorOnMissing: boolean) => string;
31
+ type FindLocalNuget = () => Promise<string>;
29
32
 
30
33
  interface GulpWithHelp {
31
34
  task(name: string, callback: GulpCallback): void;