@atlaspack/core 2.38.0 → 2.38.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/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # @atlaspack/core
2
2
 
3
+ ## 2.38.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`7d1839c`](https://github.com/atlassian-labs/atlaspack/commit/7d1839cc7cf0225dd35afecb68109a11fd931f2b)]:
8
+ - @atlaspack/rust@3.28.0
9
+ - @atlaspack/cache@3.2.55
10
+ - @atlaspack/fs@2.15.55
11
+ - @atlaspack/logger@2.14.52
12
+ - @atlaspack/source-map@3.3.4
13
+ - @atlaspack/utils@3.4.2
14
+ - @atlaspack/package-manager@2.14.60
15
+ - @atlaspack/profiler@2.15.21
16
+ - @atlaspack/workers@2.14.60
17
+ - @atlaspack/types@2.15.50
18
+ - @atlaspack/graph@3.6.22
19
+ - @atlaspack/plugin@2.14.60
20
+
21
+ ## 2.38.1
22
+
23
+ ### Patch Changes
24
+
25
+ - [#1059](https://github.com/atlassian-labs/atlaspack/pull/1059) [`1c767e4`](https://github.com/atlassian-labs/atlaspack/commit/1c767e4907664dd490a56276d6562f79dbeea3fb) Thanks [@OscarCookeAbbott](https://github.com/OscarCookeAbbott)! - Improve multithreaded logging
26
+
27
+ - Updated dependencies [[`a958853`](https://github.com/atlassian-labs/atlaspack/commit/a958853ae3de2812bfd032357e9fa7cab6a1ddb6), [`0f5c1ef`](https://github.com/atlassian-labs/atlaspack/commit/0f5c1eff9138728168231efa66202a8d844c33ef)]:
28
+ - @atlaspack/rust@3.27.0
29
+ - @atlaspack/cache@3.2.54
30
+ - @atlaspack/fs@2.15.54
31
+ - @atlaspack/logger@2.14.51
32
+ - @atlaspack/source-map@3.3.3
33
+ - @atlaspack/utils@3.4.1
34
+ - @atlaspack/package-manager@2.14.59
35
+ - @atlaspack/profiler@2.15.20
36
+ - @atlaspack/workers@2.14.59
37
+ - @atlaspack/types@2.15.49
38
+ - @atlaspack/graph@3.6.21
39
+ - @atlaspack/plugin@2.14.59
40
+
3
41
  ## 2.38.0
4
42
 
5
43
  ### Minor Changes
@@ -20,6 +20,7 @@ const worker_threads_1 = require("worker_threads");
20
20
  const path_1 = __importDefault(require("path"));
21
21
  const process_1 = __importDefault(require("process"));
22
22
  const rust_1 = require("@atlaspack/rust");
23
+ const logger_1 = __importDefault(require("@atlaspack/logger"));
23
24
  const WORKER_PATH = path_1.default.join(__dirname, 'worker', 'index.js');
24
25
  const ATLASPACK_NAPI_WORKERS = process_1.default.env.ATLASPACK_NAPI_WORKERS &&
25
26
  parseInt(process_1.default.env.ATLASPACK_NAPI_WORKERS, 10);
@@ -43,6 +44,32 @@ class NapiWorkerPool {
43
44
  let worker = new worker_threads_1.Worker(WORKER_PATH);
44
45
  __classPrivateFieldGet(this, _NapiWorkerPool_workers, "f").push(worker);
45
46
  __classPrivateFieldGet(this, _NapiWorkerPool_napiWorkers, "f").push(new Promise((res) => worker.once('message', res)));
47
+ // Re-emit log events from the worker thread into the main-thread logger
48
+ // so they reach reporters and are subject to log-level filtering.
49
+ worker.on('message', (message) => {
50
+ if (message != null &&
51
+ typeof message === 'object' &&
52
+ message.type === 'logEvent') {
53
+ const event = message.event;
54
+ switch (event.level) {
55
+ case 'verbose':
56
+ logger_1.default.verbose(event.diagnostics);
57
+ break;
58
+ case 'info':
59
+ logger_1.default.info(event.diagnostics);
60
+ break;
61
+ case 'warn':
62
+ logger_1.default.warn(event.diagnostics);
63
+ break;
64
+ case 'error':
65
+ logger_1.default.error(event.diagnostics);
66
+ break;
67
+ case 'progress':
68
+ logger_1.default.progress(event.message);
69
+ break;
70
+ }
71
+ }
72
+ });
46
73
  }
47
74
  }
48
75
  clearAllWorkerState() {
@@ -55,6 +82,12 @@ class NapiWorkerPool {
55
82
  worker.removeListener('message', messageHandler);
56
83
  res();
57
84
  }
85
+ else if (message != null &&
86
+ typeof message === 'object' &&
87
+ message.type === 'logEvent') {
88
+ // logEvent messages are forwarded asynchronously from the worker
89
+ // logger bridge and are expected at any time; ignore them here.
90
+ }
58
91
  else {
59
92
  // Log unexpected messages for debugging
60
93
  // eslint-disable-next-line no-console
@@ -20,6 +20,5 @@ __exportStar(require("./environment"), exports);
20
20
  __exportStar(require("./target"), exports);
21
21
  __exportStar(require("./plugin-config"), exports);
22
22
  __exportStar(require("./plugin-tracer"), exports);
23
- __exportStar(require("./plugin-logger"), exports);
24
23
  __exportStar(require("./plugin-options"), exports);
25
24
  __exportStar(require("./mutable-asset"), exports);
@@ -59,8 +59,10 @@ const napi = __importStar(require("@atlaspack/rust"));
59
59
  const fs_1 = require("@atlaspack/fs");
60
60
  const package_manager_1 = require("@atlaspack/package-manager");
61
61
  const worker_threads_1 = require("worker_threads");
62
+ const logger_1 = __importDefault(require("@atlaspack/logger"));
62
63
  const module = __importStar(require("module"));
63
64
  const jsCallable_1 = require("../jsCallable");
65
+ const logger_2 = require("@atlaspack/logger");
64
66
  const compat_1 = require("./compat");
65
67
  const CONFIG = Symbol.for('parcel-plugin-config');
66
68
  class AtlaspackWorker {
@@ -121,7 +123,7 @@ class AtlaspackWorker {
121
123
  const env = new compat_1.Environment(napiDependency.env);
122
124
  const dependency = new compat_1.Dependency(napiDependency, env);
123
125
  const defaultOptions = {
124
- logger: new compat_1.PluginLogger(),
126
+ logger: new logger_2.PluginLogger({ origin: key }),
125
127
  tracer: new compat_1.PluginTracer(),
126
128
  options: new compat_1.PluginOptions(this.options),
127
129
  };
@@ -201,7 +203,7 @@ class AtlaspackWorker {
201
203
  contents, env, __classPrivateFieldGet(this, _AtlaspackWorker_fs, "f"), map, this.options.projectRoot);
202
204
  const pluginOptions = new compat_1.PluginOptions(this.options);
203
205
  const defaultOptions = {
204
- logger: new compat_1.PluginLogger(),
206
+ logger: new logger_2.PluginLogger({ origin: key }),
205
207
  tracer: new compat_1.PluginTracer(),
206
208
  options: pluginOptions,
207
209
  };
@@ -341,7 +343,7 @@ class AtlaspackWorker {
341
343
  let packageManager = new package_manager_1.NodePackageManager(__classPrivateFieldGet(this, _AtlaspackWorker_fs, "f"), this.options.projectRoot);
342
344
  if (transformer.setup) {
343
345
  let setupResult = await transformer.setup({
344
- logger: new compat_1.PluginLogger(),
346
+ logger: new logger_2.PluginLogger({ origin: specifier }),
345
347
  options: new compat_1.PluginOptions({
346
348
  ...this.options,
347
349
  shouldAutoInstall: false,
@@ -378,6 +380,11 @@ class AtlaspackWorker {
378
380
  }
379
381
  exports.AtlaspackWorker = AtlaspackWorker;
380
382
  _AtlaspackWorker_resolvers = new WeakMap(), _AtlaspackWorker_transformers = new WeakMap(), _AtlaspackWorker_fs = new WeakMap(), _AtlaspackWorker_packageManager = new WeakMap(), _AtlaspackWorker_options = new WeakMap(), _AtlaspackWorker_sideEffectDetector = new WeakMap();
383
+ // Forward all logger events from this worker thread to the main thread so
384
+ // they are re-emitted into the main-thread logger and reach reporters.
385
+ logger_1.default.onLog((event) => {
386
+ worker_threads_1.parentPort?.postMessage({ type: 'logEvent', event });
387
+ });
381
388
  // Create napi worker and send it back to main thread
382
389
  const worker = new AtlaspackWorker();
383
390
  const napiWorker = napi.newNodejsWorker(worker);
@@ -32,6 +32,13 @@ function _rust() {
32
32
  };
33
33
  return data;
34
34
  }
35
+ function _logger() {
36
+ const data = _interopRequireDefault(require("@atlaspack/logger"));
37
+ _logger = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
35
42
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
43
  // @ts-expect-error TS2724
37
44
 
@@ -60,6 +67,31 @@ class NapiWorkerPool {
60
67
  let worker = new (_worker_threads().Worker)(WORKER_PATH);
61
68
  this.#workers.push(worker);
62
69
  this.#napiWorkers.push(new Promise(res => worker.once('message', res)));
70
+
71
+ // Re-emit log events from the worker thread into the main-thread logger
72
+ // so they reach reporters and are subject to log-level filtering.
73
+ worker.on('message', message => {
74
+ if (message != null && typeof message === 'object' && message.type === 'logEvent') {
75
+ const event = message.event;
76
+ switch (event.level) {
77
+ case 'verbose':
78
+ _logger().default.verbose(event.diagnostics);
79
+ break;
80
+ case 'info':
81
+ _logger().default.info(event.diagnostics);
82
+ break;
83
+ case 'warn':
84
+ _logger().default.warn(event.diagnostics);
85
+ break;
86
+ case 'error':
87
+ _logger().default.error(event.diagnostics);
88
+ break;
89
+ case 'progress':
90
+ _logger().default.progress(event.message);
91
+ break;
92
+ }
93
+ }
94
+ });
63
95
  }
64
96
  }
65
97
  clearAllWorkerState() {
@@ -72,6 +104,9 @@ class NapiWorkerPool {
72
104
  if (message === 'stateCleared') {
73
105
  worker.removeListener('message', messageHandler);
74
106
  res();
107
+ } else if (message != null && typeof message === 'object' && message.type === 'logEvent') {
108
+ // logEvent messages are forwarded asynchronously from the worker
109
+ // logger bridge and are expected at any time; ignore them here.
75
110
  } else {
76
111
  // Log unexpected messages for debugging
77
112
  // eslint-disable-next-line no-console
@@ -69,17 +69,6 @@ Object.keys(_pluginTracer).forEach(function (key) {
69
69
  }
70
70
  });
71
71
  });
72
- var _pluginLogger = require("./plugin-logger");
73
- Object.keys(_pluginLogger).forEach(function (key) {
74
- if (key === "default" || key === "__esModule") return;
75
- if (key in exports && exports[key] === _pluginLogger[key]) return;
76
- Object.defineProperty(exports, key, {
77
- enumerable: true,
78
- get: function () {
79
- return _pluginLogger[key];
80
- }
81
- });
82
- });
83
72
  var _pluginOptions = require("./plugin-options");
84
73
  Object.keys(_pluginOptions).forEach(function (key) {
85
74
  if (key === "default" || key === "__esModule") return;
@@ -40,6 +40,13 @@ function _worker_threads() {
40
40
  };
41
41
  return data;
42
42
  }
43
+ function _logger() {
44
+ const data = _interopRequireWildcard(require("@atlaspack/logger"));
45
+ _logger = function () {
46
+ return data;
47
+ };
48
+ return data;
49
+ }
43
50
  function _module() {
44
51
  const data = _interopRequireWildcard(require("module"));
45
52
  _module = function () {
@@ -144,7 +151,9 @@ class AtlaspackWorker {
144
151
  const env = new _compat.Environment(napiDependency.env);
145
152
  const dependency = new _compat.Dependency(napiDependency, env);
146
153
  const defaultOptions = {
147
- logger: new _compat.PluginLogger(),
154
+ logger: new (_logger().PluginLogger)({
155
+ origin: key
156
+ }),
148
157
  tracer: new _compat.PluginTracer(),
149
158
  options: new _compat.PluginOptions(this.options)
150
159
  };
@@ -240,7 +249,9 @@ class AtlaspackWorker {
240
249
  contents, env, this.#fs, map, this.options.projectRoot);
241
250
  const pluginOptions = new _compat.PluginOptions(this.options);
242
251
  const defaultOptions = {
243
- logger: new _compat.PluginLogger(),
252
+ logger: new (_logger().PluginLogger)({
253
+ origin: key
254
+ }),
244
255
  tracer: new _compat.PluginTracer(),
245
256
  options: pluginOptions
246
257
  };
@@ -369,7 +380,9 @@ class AtlaspackWorker {
369
380
  if (transformer.setup) {
370
381
  var _setupResult$env;
371
382
  let setupResult = await transformer.setup({
372
- logger: new _compat.PluginLogger(),
383
+ logger: new (_logger().PluginLogger)({
384
+ origin: specifier
385
+ }),
373
386
  options: new _compat.PluginOptions({
374
387
  ...this.options,
375
388
  shouldAutoInstall: false,
@@ -406,8 +419,17 @@ class AtlaspackWorker {
406
419
  }
407
420
  }
408
421
 
409
- // Create napi worker and send it back to main thread
422
+ // Forward all logger events from this worker thread to the main thread so
423
+ // they are re-emitted into the main-thread logger and reach reporters.
410
424
  exports.AtlaspackWorker = AtlaspackWorker;
425
+ _logger().default.onLog(event => {
426
+ _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.postMessage({
427
+ type: 'logEvent',
428
+ event
429
+ });
430
+ });
431
+
432
+ // Create napi worker and send it back to main thread
411
433
  const worker = new AtlaspackWorker();
412
434
  const napiWorker = napi().newNodejsWorker(worker);
413
435
  _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.postMessage(napiWorker);
@@ -4,6 +4,5 @@ export * from './environment';
4
4
  export * from './target';
5
5
  export * from './plugin-config';
6
6
  export * from './plugin-tracer';
7
- export * from './plugin-logger';
8
7
  export * from './plugin-options';
9
8
  export * from './mutable-asset';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaspack/core",
3
- "version": "2.38.0",
3
+ "version": "2.38.2",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -24,21 +24,21 @@
24
24
  "dependencies": {
25
25
  "@mischnic/json-sourcemap": "^0.1.0",
26
26
  "@atlaspack/build-cache": "2.13.14",
27
- "@atlaspack/cache": "3.2.53",
27
+ "@atlaspack/cache": "3.2.55",
28
28
  "@atlaspack/diagnostic": "2.14.4",
29
29
  "@atlaspack/events": "2.14.4",
30
30
  "@atlaspack/feature-flags": "2.31.0",
31
- "@atlaspack/fs": "2.15.53",
32
- "@atlaspack/graph": "3.6.20",
33
- "@atlaspack/logger": "2.14.50",
34
- "@atlaspack/package-manager": "2.14.58",
35
- "@atlaspack/plugin": "2.14.58",
36
- "@atlaspack/profiler": "2.15.19",
37
- "@atlaspack/rust": "3.26.0",
38
- "@atlaspack/types": "2.15.48",
39
- "@atlaspack/utils": "3.4.0",
40
- "@atlaspack/workers": "2.14.58",
41
- "@atlaspack/source-map": "3.3.2",
31
+ "@atlaspack/fs": "2.15.55",
32
+ "@atlaspack/graph": "3.6.22",
33
+ "@atlaspack/logger": "2.14.52",
34
+ "@atlaspack/package-manager": "2.14.60",
35
+ "@atlaspack/plugin": "2.14.60",
36
+ "@atlaspack/profiler": "2.15.21",
37
+ "@atlaspack/rust": "3.28.0",
38
+ "@atlaspack/types": "2.15.50",
39
+ "@atlaspack/utils": "3.4.2",
40
+ "@atlaspack/workers": "2.14.60",
41
+ "@atlaspack/source-map": "3.3.4",
42
42
  "base-x": "^3.0.8",
43
43
  "browserslist": "^4.6.6",
44
44
  "clone": "^2.1.1",
@@ -5,6 +5,8 @@ import process from 'process';
5
5
  // @ts-expect-error TS2724
6
6
  import type {Transferable} from '@atlaspack/rust';
7
7
  import {getAvailableThreads} from '@atlaspack/rust';
8
+ import logger from '@atlaspack/logger';
9
+ import type {LogEvent} from '@atlaspack/types-internal';
8
10
 
9
11
  const WORKER_PATH = path.join(__dirname, 'worker', 'index.js');
10
12
  const ATLASPACK_NAPI_WORKERS =
@@ -43,6 +45,35 @@ export class NapiWorkerPool implements INapiWorkerPool {
43
45
  worker.once('message', res),
44
46
  ),
45
47
  );
48
+
49
+ // Re-emit log events from the worker thread into the main-thread logger
50
+ // so they reach reporters and are subject to log-level filtering.
51
+ worker.on('message', (message: unknown) => {
52
+ if (
53
+ message != null &&
54
+ typeof message === 'object' &&
55
+ (message as {type?: unknown}).type === 'logEvent'
56
+ ) {
57
+ const event = (message as {type: string; event: LogEvent}).event;
58
+ switch (event.level) {
59
+ case 'verbose':
60
+ logger.verbose(event.diagnostics);
61
+ break;
62
+ case 'info':
63
+ logger.info(event.diagnostics);
64
+ break;
65
+ case 'warn':
66
+ logger.warn(event.diagnostics);
67
+ break;
68
+ case 'error':
69
+ logger.error(event.diagnostics);
70
+ break;
71
+ case 'progress':
72
+ logger.progress(event.message);
73
+ break;
74
+ }
75
+ }
76
+ });
46
77
  }
47
78
  }
48
79
 
@@ -59,6 +90,13 @@ export class NapiWorkerPool implements INapiWorkerPool {
59
90
  if (message === 'stateCleared') {
60
91
  worker.removeListener('message', messageHandler);
61
92
  res();
93
+ } else if (
94
+ message != null &&
95
+ typeof message === 'object' &&
96
+ (message as {type?: unknown}).type === 'logEvent'
97
+ ) {
98
+ // logEvent messages are forwarded asynchronously from the worker
99
+ // logger bridge and are expected at any time; ignore them here.
62
100
  } else {
63
101
  // Log unexpected messages for debugging
64
102
  // eslint-disable-next-line no-console
@@ -4,6 +4,5 @@ export * from './environment';
4
4
  export * from './target';
5
5
  export * from './plugin-config';
6
6
  export * from './plugin-tracer';
7
- export * from './plugin-logger';
8
7
  export * from './plugin-options';
9
8
  export * from './mutable-asset';
@@ -19,14 +19,15 @@ import type {
19
19
  } from '@atlaspack/types';
20
20
  import type {FeatureFlags} from '@atlaspack/feature-flags';
21
21
  import {parentPort} from 'worker_threads';
22
+ import logger from '@atlaspack/logger';
22
23
  import * as module from 'module';
23
24
 
24
25
  import {jsCallable} from '../jsCallable';
26
+ import {PluginLogger} from '@atlaspack/logger';
25
27
  import {
26
28
  Environment,
27
29
  Dependency,
28
30
  PluginConfig,
29
- PluginLogger,
30
31
  PluginTracer,
31
32
  PluginOptions,
32
33
  MutableAsset,
@@ -130,7 +131,7 @@ export class AtlaspackWorker {
130
131
  const dependency = new Dependency(napiDependency, env);
131
132
 
132
133
  const defaultOptions = {
133
- logger: new PluginLogger(),
134
+ logger: new PluginLogger({origin: key}),
134
135
  tracer: new PluginTracer(),
135
136
  options: new PluginOptions(this.options),
136
137
  } as const;
@@ -236,7 +237,7 @@ export class AtlaspackWorker {
236
237
 
237
238
  const pluginOptions = new PluginOptions(this.options);
238
239
  const defaultOptions = {
239
- logger: new PluginLogger(),
240
+ logger: new PluginLogger({origin: key}),
240
241
  tracer: new PluginTracer(),
241
242
  options: pluginOptions,
242
243
  } as const;
@@ -403,7 +404,7 @@ export class AtlaspackWorker {
403
404
 
404
405
  if (transformer.setup) {
405
406
  let setupResult = await transformer.setup({
406
- logger: new PluginLogger(),
407
+ logger: new PluginLogger({origin: specifier}),
407
408
  options: new PluginOptions({
408
409
  ...this.options,
409
410
  shouldAutoInstall: false,
@@ -448,6 +449,12 @@ export class AtlaspackWorker {
448
449
  }
449
450
  }
450
451
 
452
+ // Forward all logger events from this worker thread to the main thread so
453
+ // they are re-emitted into the main-thread logger and reach reporters.
454
+ logger.onLog((event) => {
455
+ parentPort?.postMessage({type: 'logEvent', event});
456
+ });
457
+
451
458
  // Create napi worker and send it back to main thread
452
459
  const worker = new AtlaspackWorker();
453
460
  const napiWorker = napi.newNodejsWorker(worker);