just-task 1.12.0 → 1.13.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/CHANGELOG.json CHANGED
@@ -2,7 +2,22 @@
2
2
  "name": "just-task",
3
3
  "entries": [
4
4
  {
5
- "date": "Fri, 28 Mar 2025 08:01:39 GMT",
5
+ "date": "Thu, 11 Dec 2025 17:20:50 GMT",
6
+ "version": "1.13.0",
7
+ "tag": "just-task_v1.13.0",
8
+ "comments": {
9
+ "minor": [
10
+ {
11
+ "author": "elcraig@microsoft.com",
12
+ "package": "just-task",
13
+ "commit": "9f2ae785ea8288e0dd60c4e684a17858c2d67902",
14
+ "comment": "Merge just-task-logger into this package"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Fri, 28 Mar 2025 08:01:48 GMT",
6
21
  "version": "1.12.0",
7
22
  "tag": "just-task_v1.12.0",
8
23
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # Change Log - just-task
2
2
 
3
- <!-- This log was last generated on Fri, 28 Mar 2025 08:01:39 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Thu, 11 Dec 2025 17:20:50 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 1.13.0
8
+
9
+ Thu, 11 Dec 2025 17:20:50 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - Merge just-task-logger into this package (elcraig@microsoft.com)
14
+
7
15
  ## 1.12.0
8
16
 
9
- Fri, 28 Mar 2025 08:01:39 GMT
17
+ Fri, 28 Mar 2025 08:01:48 GMT
10
18
 
11
19
  ### Minor changes
12
20
 
package/lib/cache.js CHANGED
@@ -6,7 +6,7 @@ const option_1 = require("./option");
6
6
  const resolve_1 = require("./resolve");
7
7
  const fs = require("fs-extra");
8
8
  const path = require("path");
9
- const just_task_logger_1 = require("just-task-logger");
9
+ const logger_1 = require("./logger");
10
10
  const findDependents_1 = require("./package/findDependents");
11
11
  const findGitRoot_1 = require("./package/findGitRoot");
12
12
  const child_process_1 = require("child_process");
@@ -41,7 +41,7 @@ function isCached(taskName) {
41
41
  shouldCache = JSON.stringify(currentHash) === JSON.stringify(cachedHash);
42
42
  }
43
43
  catch (e) {
44
- just_task_logger_1.logger.warn('Invalid package-deps.json detected');
44
+ logger_1.logger.warn('Invalid package-deps.json detected');
45
45
  }
46
46
  return shouldCache;
47
47
  }
@@ -95,7 +95,7 @@ function getLockFileHashes() {
95
95
  return results;
96
96
  }
97
97
  function getHash(taskName) {
98
- (0, just_task_logger_1.mark)('cache:getHash');
98
+ (0, logger_1.mark)('cache:getHash');
99
99
  const { ...args } = (0, option_1.argv)();
100
100
  const packageRootPath = getPackageRootPath();
101
101
  const packageDeps = {
@@ -108,11 +108,11 @@ function getHash(taskName) {
108
108
  hash: packageDeps,
109
109
  dependentHashTimestamps: getDependentHashTimestamps(),
110
110
  };
111
- just_task_logger_1.logger.perf('cache:getHash');
111
+ logger_1.logger.perf('cache:getHash');
112
112
  return hash;
113
113
  }
114
114
  function getDependentHashTimestamps() {
115
- (0, just_task_logger_1.mark)('cache:getDependentHashTimestamps');
115
+ (0, logger_1.mark)('cache:getDependentHashTimestamps');
116
116
  const dependentPkgPaths = (0, findDependents_1.findDependents)();
117
117
  const timestampsByPackage = {};
118
118
  for (const pkgDepInfo of dependentPkgPaths) {
@@ -128,6 +128,6 @@ function getDependentHashTimestamps() {
128
128
  timestampsByPackage[pkgDepInfo.name] = new Date().getTime();
129
129
  }
130
130
  }
131
- just_task_logger_1.logger.perf('cache:getDependentHashTimestamps');
131
+ logger_1.logger.perf('cache:getDependentHashTimestamps');
132
132
  return timestampsByPackage;
133
133
  }
package/lib/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const undertaker_1 = require("./undertaker");
4
4
  const option_1 = require("./option");
5
- const just_task_logger_1 = require("just-task-logger");
5
+ const logger_1 = require("./logger");
6
6
  const config_1 = require("./config");
7
7
  const task_1 = require("./task");
8
8
  const originalEmitWarning = process.emitWarning;
@@ -55,7 +55,7 @@ if (command) {
55
55
  undertaker_1.undertaker.series(registry.get(command))(() => undefined);
56
56
  }
57
57
  else {
58
- just_task_logger_1.logger.error(`Command not defined: ${command}`);
58
+ logger_1.logger.error(`Command not defined: ${command}`);
59
59
  process.exitCode = 1;
60
60
  }
61
61
  }
package/lib/config.js CHANGED
@@ -5,7 +5,7 @@ const fs = require("fs");
5
5
  const path = require("path");
6
6
  const option_1 = require("./option");
7
7
  const resolve_1 = require("./resolve");
8
- const just_task_logger_1 = require("just-task-logger");
8
+ const logger_1 = require("./logger");
9
9
  const enableTypeScript_1 = require("./enableTypeScript");
10
10
  function resolveConfigFile(args) {
11
11
  for (const entry of [
@@ -37,21 +37,21 @@ function readConfig() {
37
37
  }
38
38
  try {
39
39
  const configModule = require(configFile);
40
- (0, just_task_logger_1.mark)('registry:configModule');
40
+ (0, logger_1.mark)('registry:configModule');
41
41
  if (typeof configModule === 'function') {
42
42
  configModule();
43
43
  }
44
- just_task_logger_1.logger.perf('registry:configModule');
44
+ logger_1.logger.perf('registry:configModule');
45
45
  return configModule;
46
46
  }
47
47
  catch (e) {
48
- just_task_logger_1.logger.error(`Invalid configuration file: ${configFile}`);
49
- just_task_logger_1.logger.error(`Error: ${e.stack || e.message || e}`);
48
+ logger_1.logger.error(`Invalid configuration file: ${configFile}`);
49
+ logger_1.logger.error(`Error: ${e.stack || e.message || e}`);
50
50
  process.exit(1);
51
51
  }
52
52
  }
53
53
  else {
54
- just_task_logger_1.logger.error(`Cannot find config file "${configFile}".`, `Please create a file called "just.config.js" in the root of the project next to "package.json".`);
54
+ logger_1.logger.error(`Cannot find config file "${configFile}".`, `Please create a file called "just.config.js" in the root of the project next to "package.json".`);
55
55
  }
56
56
  }
57
57
  exports.readConfig = readConfig;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.enableTypeScript = void 0;
4
4
  const resolve_1 = require("./resolve");
5
- const just_task_logger_1 = require("just-task-logger");
5
+ const logger_1 = require("./logger");
6
6
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
7
7
  function enableTypeScript({ transpileOnly = true, esm = false }) {
8
8
  const tsNodeModule = (0, resolve_1.resolve)('ts-node');
@@ -25,7 +25,7 @@ function enableTypeScript({ transpileOnly = true, esm = false }) {
25
25
  });
26
26
  }
27
27
  else {
28
- just_task_logger_1.logger.error(`In order to use TypeScript with just.config.ts, you need to install "ts-node" module:
28
+ logger_1.logger.error(`In order to use TypeScript with just.config.ts, you need to install "ts-node" module:
29
29
 
30
30
  npm install -D ts-node
31
31
 
package/lib/logger.d.ts CHANGED
@@ -1,2 +1,17 @@
1
- export * from 'just-task-logger';
1
+ export declare function mark(marker: string): void;
2
+ export interface Logger {
3
+ /** Whether verbose logging is enabled. Default false unless --verbose arg is given. */
4
+ enableVerbose: boolean;
5
+ /** Log to `console.info` with a timestamp, but only if verbose logging is enabled. */
6
+ verbose(...args: any[]): void;
7
+ /** Log to `console.info` with a timestamp. */
8
+ info(...args: any[]): void;
9
+ /** Log to `console.warn` with a timestamp. */
10
+ warn(...args: any[]): void;
11
+ /** Log to `console.error` with a timestamp. */
12
+ error(...args: any[]): void;
13
+ /** Log perf marker data to `consold.info` with timestamp, only if verbose is enabled */
14
+ perf(marker: string, ...args: any[]): void;
15
+ }
16
+ export declare const logger: Logger;
2
17
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAcA,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzC;AAYD,MAAM,WAAW,MAAM;IACrB,uFAAuF;IACvF,aAAa,EAAE,OAAO,CAAC;IACvB,sFAAsF;IACtF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,8CAA8C;IAC9C,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,+CAA+C;IAC/C,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5B,wFAAwF;IACxF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC5C;AAMD,eAAO,MAAM,MAAM,EAAE,MAqCpB,CAAC"}
package/lib/logger.js CHANGED
@@ -1,13 +1,54 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
2
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("just-task-logger"), exports);
3
+ exports.logger = exports.mark = void 0;
4
+ const chalk = require("chalk");
5
+ const parser = require("yargs-parser");
6
+ const argv = parser(process.argv.slice(2));
7
+ function logInternal(method, symbol, ...args) {
8
+ const now = new Date();
9
+ const timestamp = chalk.gray(`[${now.toLocaleTimeString()}]`);
10
+ console[method](timestamp, symbol, ...args);
11
+ }
12
+ const markers = {};
13
+ function mark(marker) {
14
+ markers[marker] = process.hrtime();
15
+ }
16
+ exports.mark = mark;
17
+ function getDeltaAndClearMark(marker) {
18
+ if (markers[marker]) {
19
+ const delta = process.hrtime(markers[marker]);
20
+ delete markers[marker];
21
+ return delta;
22
+ }
23
+ return null;
24
+ }
25
+ const emptySquare = '\u25a1';
26
+ const square = '\u25a0';
27
+ const triangle = '\u25b2';
28
+ exports.logger = {
29
+ enableVerbose: !!argv.verbose,
30
+ verbose(...args) {
31
+ if (exports.logger.enableVerbose) {
32
+ logInternal('info', chalk.gray(emptySquare), ...args);
33
+ }
34
+ },
35
+ info(...args) {
36
+ logInternal('info', chalk.green(square), ...args);
37
+ },
38
+ warn(...args) {
39
+ logInternal('warn', chalk.yellow(triangle), ...args);
40
+ },
41
+ error(...args) {
42
+ logInternal('error', chalk.redBright('x'), ...args);
43
+ },
44
+ perf(marker, ...args) {
45
+ if (exports.logger.enableVerbose) {
46
+ const delta = getDeltaAndClearMark(marker);
47
+ if (delta) {
48
+ const ns = delta[0] * 1e9 + delta[1];
49
+ const deltaMsg = `${ns / 1e9}s`;
50
+ logInternal('info', chalk.cyan(square), `mark(${chalk.cyanBright(marker)}): took ${chalk.cyanBright(deltaMsg)}`, ...args);
51
+ }
52
+ }
53
+ },
54
+ };
@@ -5,13 +5,13 @@ const fs = require("fs");
5
5
  const path = require("path");
6
6
  const resolve_1 = require("../resolve");
7
7
  const findPackageRoot_1 = require("./findPackageRoot");
8
- const just_task_logger_1 = require("just-task-logger");
8
+ const logger_1 = require("../logger");
9
9
  const findGitRoot_1 = require("./findGitRoot");
10
10
  const paths_1 = require("../paths");
11
11
  function findDependents() {
12
- (0, just_task_logger_1.mark)('cache:findDependents');
12
+ (0, logger_1.mark)('cache:findDependents');
13
13
  const results = collectAllDependentPaths((0, findPackageRoot_1.findPackageRoot)());
14
- just_task_logger_1.logger.perf('cache:findDependents');
14
+ logger_1.logger.perf('cache:findDependents');
15
15
  return results;
16
16
  }
17
17
  exports.findDependents = findDependents;
@@ -38,12 +38,12 @@ function getDepsPaths(pkgPath) {
38
38
  .filter(p => p && p.path.indexOf('node_modules') === -1 && (0, paths_1.isChildOf)(p.path, gitRoot));
39
39
  }
40
40
  catch (e) {
41
- just_task_logger_1.logger.error(`Invalid package.json detected at ${packageJsonFile} `, e);
41
+ logger_1.logger.error(`Invalid package.json detected at ${packageJsonFile} `, e);
42
42
  return [];
43
43
  }
44
44
  }
45
45
  function collectAllDependentPaths(pkgPath, collected = new Set()) {
46
- (0, just_task_logger_1.mark)(`collectAllDependentPaths:${pkgPath}`);
46
+ (0, logger_1.mark)(`collectAllDependentPaths:${pkgPath}`);
47
47
  const depPaths = getDepsPaths(pkgPath);
48
48
  depPaths.forEach(depPath => collected.add(depPath));
49
49
  for (const depPath of depPaths) {
@@ -51,6 +51,6 @@ function collectAllDependentPaths(pkgPath, collected = new Set()) {
51
51
  collectAllDependentPaths(depPath.path, collected);
52
52
  }
53
53
  }
54
- just_task_logger_1.logger.perf(`collectAllDependentPaths:${pkgPath}`);
54
+ logger_1.logger.perf(`collectAllDependentPaths:${pkgPath}`);
55
55
  return collected;
56
56
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-task",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
4
4
  "description": "Build task definition library",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -34,7 +34,6 @@
34
34
  "chalk": "^4.0.0",
35
35
  "chokidar": "^3.5.2",
36
36
  "fs-extra": "^11.0.0",
37
- "just-task-logger": ">=1.3.0 <2.0.0",
38
37
  "resolve": "^1.19.0",
39
38
  "undertaker": "^2.0.0",
40
39
  "undertaker-registry": "^2.0.0",
package/src/cache.ts CHANGED
@@ -3,7 +3,7 @@ import { argv } from './option';
3
3
  import { resolveCwd } from './resolve';
4
4
  import * as fs from 'fs-extra';
5
5
  import * as path from 'path';
6
- import { logger, mark } from 'just-task-logger';
6
+ import { logger, mark } from './logger';
7
7
  import { findDependents } from './package/findDependents';
8
8
  import { findGitRoot } from './package/findGitRoot';
9
9
  import { spawnSync } from 'child_process';
package/src/cli.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { undertaker } from './undertaker';
2
2
  import { option, parseCommand } from './option';
3
- import { logger } from 'just-task-logger';
3
+ import { logger } from './logger';
4
4
  import { TaskFunction } from './interfaces';
5
5
  import { readConfig } from './config';
6
6
  import { task } from './task';
package/src/config.ts CHANGED
@@ -3,7 +3,7 @@ import * as path from 'path';
3
3
 
4
4
  import { argv } from './option';
5
5
  import { resolve } from './resolve';
6
- import { mark, logger } from 'just-task-logger';
6
+ import { mark, logger } from './logger';
7
7
  import { enableTypeScript } from './enableTypeScript';
8
8
  import yargsParser = require('yargs-parser');
9
9
  import { TaskFunction } from './interfaces';
@@ -1,5 +1,5 @@
1
1
  import { resolve } from './resolve';
2
- import { logger } from 'just-task-logger';
2
+ import { logger } from './logger';
3
3
 
4
4
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
5
5
  export function enableTypeScript({ transpileOnly = true, esm = false }): void {
package/src/logger.ts CHANGED
@@ -1 +1,85 @@
1
- export * from 'just-task-logger';
1
+ import chalk = require('chalk');
2
+ import * as parser from 'yargs-parser';
3
+
4
+ const argv = parser(process.argv.slice(2));
5
+
6
+ function logInternal(method: 'info' | 'warn' | 'error', symbol: string, ...args: any[]) {
7
+ const now = new Date();
8
+ const timestamp = chalk.gray(`[${now.toLocaleTimeString()}]`);
9
+
10
+ console[method](timestamp, symbol, ...args);
11
+ }
12
+
13
+ const markers: { [marker: string]: [number, number] } = {};
14
+
15
+ export function mark(marker: string): void {
16
+ markers[marker] = process.hrtime();
17
+ }
18
+
19
+ function getDeltaAndClearMark(marker: string): [number, number] | null {
20
+ if (markers[marker]) {
21
+ const delta = process.hrtime(markers[marker]);
22
+ delete markers[marker];
23
+ return delta;
24
+ }
25
+
26
+ return null;
27
+ }
28
+
29
+ export interface Logger {
30
+ /** Whether verbose logging is enabled. Default false unless --verbose arg is given. */
31
+ enableVerbose: boolean;
32
+ /** Log to `console.info` with a timestamp, but only if verbose logging is enabled. */
33
+ verbose(...args: any[]): void;
34
+ /** Log to `console.info` with a timestamp. */
35
+ info(...args: any[]): void;
36
+ /** Log to `console.warn` with a timestamp. */
37
+ warn(...args: any[]): void;
38
+ /** Log to `console.error` with a timestamp. */
39
+ error(...args: any[]): void;
40
+ /** Log perf marker data to `consold.info` with timestamp, only if verbose is enabled */
41
+ perf(marker: string, ...args: any[]): void;
42
+ }
43
+
44
+ const emptySquare = '\u25a1';
45
+ const square = '\u25a0';
46
+ const triangle = '\u25b2';
47
+
48
+ export const logger: Logger = {
49
+ enableVerbose: !!argv.verbose,
50
+
51
+ verbose(...args: any[]) {
52
+ if (logger.enableVerbose) {
53
+ logInternal('info', chalk.gray(emptySquare), ...args);
54
+ }
55
+ },
56
+
57
+ info(...args: any[]) {
58
+ logInternal('info', chalk.green(square), ...args);
59
+ },
60
+
61
+ warn(...args: any[]) {
62
+ logInternal('warn', chalk.yellow(triangle), ...args);
63
+ },
64
+
65
+ error(...args: any[]) {
66
+ logInternal('error', chalk.redBright('x'), ...args);
67
+ },
68
+
69
+ perf(marker: string, ...args: any[]) {
70
+ if (logger.enableVerbose) {
71
+ const delta = getDeltaAndClearMark(marker);
72
+
73
+ if (delta) {
74
+ const ns = delta[0] * 1e9 + delta[1];
75
+ const deltaMsg = `${ns / 1e9}s`;
76
+ logInternal(
77
+ 'info',
78
+ chalk.cyan(square),
79
+ `mark(${chalk.cyanBright(marker)}): took ${chalk.cyanBright(deltaMsg)}`,
80
+ ...args,
81
+ );
82
+ }
83
+ }
84
+ },
85
+ };
@@ -2,7 +2,7 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { resolveCwd } from '../resolve';
4
4
  import { findPackageRoot } from './findPackageRoot';
5
- import { logger, mark } from 'just-task-logger';
5
+ import { logger, mark } from '../logger';
6
6
  import { findGitRoot } from './findGitRoot';
7
7
  import { isChildOf } from '../paths';
8
8