@atlaspack/core 2.18.6-dev.0 → 2.18.7-dev-eae8c193d.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.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaspack/core
2
2
 
3
+ ## 2.18.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [#655](https://github.com/atlassian-labs/atlaspack/pull/655) [`5ded263`](https://github.com/atlassian-labs/atlaspack/commit/5ded263c7f11b866e8885b81c73e20dd060b25be) Thanks [@yamadapc](https://github.com/yamadapc)! - Clean-up inline requires multi-threading feature-flag
8
+
9
+ - [#658](https://github.com/atlassian-labs/atlaspack/pull/658) [`74fd942`](https://github.com/atlassian-labs/atlaspack/commit/74fd94236ac697207082c4b755b079e56f5564fb) Thanks [@yamadapc](https://github.com/yamadapc)! - Fix environment deduplication issues
10
+
11
+ - Updated dependencies [[`5ded263`](https://github.com/atlassian-labs/atlaspack/commit/5ded263c7f11b866e8885b81c73e20dd060b25be)]:
12
+ - @atlaspack/feature-flags@2.18.3
13
+ - @atlaspack/cache@3.2.10
14
+ - @atlaspack/fs@2.15.10
15
+ - @atlaspack/graph@3.5.5
16
+ - @atlaspack/utils@2.15.3
17
+ - @atlaspack/package-manager@2.14.15
18
+ - @atlaspack/profiler@2.14.13
19
+ - @atlaspack/types@2.15.5
20
+ - @atlaspack/workers@2.14.15
21
+ - @atlaspack/plugin@2.14.15
22
+
3
23
  ## 2.18.5
4
24
 
5
25
  ### Patch Changes
package/lib/Atlaspack.js CHANGED
@@ -226,6 +226,11 @@ class Atlaspack {
226
226
  });
227
227
  }
228
228
  this.rustAtlaspack = rustAtlaspack;
229
+ if (featureFlags.atlaspackV3CleanShutdown) {
230
+ this.#disposable.add(() => {
231
+ rustAtlaspack.end();
232
+ });
233
+ }
229
234
  let {
230
235
  config
231
236
  } = await (0, _AtlaspackConfigRequest.loadAtlaspackConfig)(resolvedOptions);
@@ -395,6 +400,11 @@ class Atlaspack {
395
400
  }
396
401
  if (options.shouldTrace) {
397
402
  _profiler().tracer.enable();
403
+ // We need to ensure the tracer is disabled when Atlaspack is disposed as it is a module level object.
404
+ // While rare (except for tests), if another instance is created later it should not have tracing enabled.
405
+ this.#disposable.add(() => {
406
+ _profiler().tracer.disable();
407
+ });
398
408
  }
399
409
  await this.#reporterRunner.report({
400
410
  type: 'buildStart'
@@ -21,21 +21,28 @@ function _diagnostic() {
21
21
  }
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
  class AtlaspackV3 {
24
- constructor(atlaspack_napi) {
24
+ constructor(atlaspack_napi, napiWorkerPool, isDefaultNapiWorkerPool) {
25
25
  this._atlaspack_napi = atlaspack_napi;
26
+ this._napiWorkerPool = napiWorkerPool;
27
+ this._isDefaultNapiWorkerPool = isDefaultNapiWorkerPool;
26
28
  }
27
29
  static async create({
28
30
  fs,
29
31
  packageManager,
30
32
  threads,
31
33
  lmdb,
32
- napiWorkerPool = new _NapiWorkerPool.NapiWorkerPool(),
34
+ napiWorkerPool,
33
35
  ...options
34
36
  }) {
35
37
  options.logLevel = options.logLevel || 'error';
36
38
  options.defaultTargetOptions = options.defaultTargetOptions || {};
37
39
  // $FlowFixMe "engines" are readonly
38
40
  options.defaultTargetOptions.engines = options.defaultTargetOptions.engines || {};
41
+ let isDefaultNapiWorkerPool = false;
42
+ if (!napiWorkerPool) {
43
+ napiWorkerPool = new _NapiWorkerPool.NapiWorkerPool();
44
+ isDefaultNapiWorkerPool = true;
45
+ }
39
46
  const [internal, error] = await (0, _rust().atlaspackNapiCreate)({
40
47
  fs,
41
48
  packageManager,
@@ -48,7 +55,13 @@ class AtlaspackV3 {
48
55
  diagnostic: error
49
56
  });
50
57
  }
51
- return new AtlaspackV3(internal);
58
+ return new AtlaspackV3(internal, napiWorkerPool, isDefaultNapiWorkerPool);
59
+ }
60
+ end() {
61
+ // If the worker pool was provided to us, don't shut it down, it's up to the provider.
62
+ if (this._isDefaultNapiWorkerPool) {
63
+ this._napiWorkerPool.shutdown();
64
+ }
52
65
  }
53
66
  async buildAssetGraph() {
54
67
  let [graph, error] = await (0, _rust().atlaspackNapiBuildAssetGraph)(this._atlaspack_napi);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaspack/core",
3
- "version": "2.18.6-dev.0",
3
+ "version": "2.18.7-dev-eae8c193d.0",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -21,21 +21,21 @@
21
21
  "check-ts": "tsc --noEmit index.d.ts"
22
22
  },
23
23
  "dependencies": {
24
- "@atlaspack/build-cache": "2.13.4-dev.0",
25
- "@atlaspack/cache": "3.2.10-dev.0",
26
- "@atlaspack/diagnostic": "2.14.2-dev.0",
27
- "@atlaspack/events": "2.14.2-dev.0",
28
- "@atlaspack/feature-flags": "2.18.3-dev.0",
29
- "@atlaspack/fs": "2.15.10-dev.0",
30
- "@atlaspack/graph": "3.5.5-dev.0",
31
- "@atlaspack/logger": "2.14.12-dev.0",
32
- "@atlaspack/package-manager": "2.14.15-dev.0",
33
- "@atlaspack/plugin": "2.14.15-dev.0",
34
- "@atlaspack/profiler": "2.14.13-dev.0",
35
- "@atlaspack/rust": "3.3.6-dev.0",
36
- "@atlaspack/types": "2.15.5-dev.0",
37
- "@atlaspack/utils": "2.15.3-dev.0",
38
- "@atlaspack/workers": "2.14.15-dev.0",
24
+ "@atlaspack/build-cache": "2.13.4-dev-eae8c193d.0",
25
+ "@atlaspack/cache": "3.2.11-dev-eae8c193d.0",
26
+ "@atlaspack/diagnostic": "2.14.2-dev-eae8c193d.0",
27
+ "@atlaspack/events": "2.14.2-dev-eae8c193d.0",
28
+ "@atlaspack/feature-flags": "2.18.4-dev-eae8c193d.0",
29
+ "@atlaspack/fs": "2.15.11-dev-eae8c193d.0",
30
+ "@atlaspack/graph": "3.5.6-dev-eae8c193d.0",
31
+ "@atlaspack/logger": "2.14.12-dev-eae8c193d.0",
32
+ "@atlaspack/package-manager": "2.14.16-dev-eae8c193d.0",
33
+ "@atlaspack/plugin": "2.14.16-dev-eae8c193d.0",
34
+ "@atlaspack/profiler": "2.14.14-dev-eae8c193d.0",
35
+ "@atlaspack/rust": "3.3.6-dev-eae8c193d.0",
36
+ "@atlaspack/types": "2.15.6-dev-eae8c193d.0",
37
+ "@atlaspack/utils": "2.15.4-dev-eae8c193d.0",
38
+ "@atlaspack/workers": "2.14.16-dev-eae8c193d.0",
39
39
  "@mischnic/json-sourcemap": "^0.1.0",
40
40
  "@parcel/source-map": "^2.1.1",
41
41
  "base-x": "^3.0.8",
@@ -49,7 +49,7 @@
49
49
  "semver": "^7.5.2"
50
50
  },
51
51
  "devDependencies": {
52
- "@atlaspack/babel-register": "2.14.2-dev.0",
52
+ "@atlaspack/babel-register": "2.14.2-dev-eae8c193d.0",
53
53
  "@types/node": ">= 18",
54
54
  "graphviz": "^0.0.9",
55
55
  "jest-diff": "*",
@@ -60,5 +60,5 @@
60
60
  "./src/serializerCore.js": "./src/serializerCore.browser.js"
61
61
  },
62
62
  "type": "commonjs",
63
- "gitHead": "6ce3565fe038caf52c09fad4e48175829b174571"
63
+ "gitHead": "eae8c193d1b12309f6377859a2da6a352b329f3d"
64
64
  }
package/src/Atlaspack.js CHANGED
@@ -190,6 +190,12 @@ export default class Atlaspack {
190
190
  }
191
191
  this.rustAtlaspack = rustAtlaspack;
192
192
 
193
+ if (featureFlags.atlaspackV3CleanShutdown) {
194
+ this.#disposable.add(() => {
195
+ rustAtlaspack.end();
196
+ });
197
+ }
198
+
193
199
  let {config} = await loadAtlaspackConfig(resolvedOptions);
194
200
  this.#config = new AtlaspackConfig(config, resolvedOptions);
195
201
 
@@ -386,6 +392,11 @@ export default class Atlaspack {
386
392
  }
387
393
  if (options.shouldTrace) {
388
394
  tracer.enable();
395
+ // We need to ensure the tracer is disabled when Atlaspack is disposed as it is a module level object.
396
+ // While rare (except for tests), if another instance is created later it should not have tracing enabled.
397
+ this.#disposable.add(() => {
398
+ tracer.disable();
399
+ });
389
400
  }
390
401
  await this.#reporterRunner.report({
391
402
  type: 'buildStart',
@@ -28,9 +28,17 @@ export type AtlaspackV3Options = {|
28
28
 
29
29
  export class AtlaspackV3 {
30
30
  _atlaspack_napi: AtlaspackNapi;
31
+ _napiWorkerPool: INapiWorkerPool;
32
+ _isDefaultNapiWorkerPool: boolean;
31
33
 
32
- constructor(atlaspack_napi: AtlaspackNapi) {
34
+ constructor(
35
+ atlaspack_napi: AtlaspackNapi,
36
+ napiWorkerPool: INapiWorkerPool,
37
+ isDefaultNapiWorkerPool: boolean,
38
+ ) {
33
39
  this._atlaspack_napi = atlaspack_napi;
40
+ this._napiWorkerPool = napiWorkerPool;
41
+ this._isDefaultNapiWorkerPool = isDefaultNapiWorkerPool;
34
42
  }
35
43
 
36
44
  static async create({
@@ -38,7 +46,7 @@ export class AtlaspackV3 {
38
46
  packageManager,
39
47
  threads,
40
48
  lmdb,
41
- napiWorkerPool = new NapiWorkerPool(),
49
+ napiWorkerPool,
42
50
  ...options
43
51
  }: AtlaspackV3Options): Promise<AtlaspackV3> {
44
52
  options.logLevel = options.logLevel || 'error';
@@ -47,6 +55,12 @@ export class AtlaspackV3 {
47
55
  options.defaultTargetOptions.engines =
48
56
  options.defaultTargetOptions.engines || {};
49
57
 
58
+ let isDefaultNapiWorkerPool = false;
59
+ if (!napiWorkerPool) {
60
+ napiWorkerPool = new NapiWorkerPool();
61
+ isDefaultNapiWorkerPool = true;
62
+ }
63
+
50
64
  const [internal, error] = await atlaspackNapiCreate(
51
65
  {
52
66
  fs,
@@ -64,7 +78,14 @@ export class AtlaspackV3 {
64
78
  });
65
79
  }
66
80
 
67
- return new AtlaspackV3(internal);
81
+ return new AtlaspackV3(internal, napiWorkerPool, isDefaultNapiWorkerPool);
82
+ }
83
+
84
+ end(): void {
85
+ // If the worker pool was provided to us, don't shut it down, it's up to the provider.
86
+ if (this._isDefaultNapiWorkerPool) {
87
+ this._napiWorkerPool.shutdown();
88
+ }
68
89
  }
69
90
 
70
91
  async buildAssetGraph(): Promise<any> {
@@ -24,9 +24,13 @@ const options = {
24
24
  ...DEFAULT_OPTIONS,
25
25
  cache: new LMDBLiteCache(DEFAULT_OPTIONS.cacheDir),
26
26
  };
27
- const farm = new WorkerFarm({workerPath: require.resolve('../src/worker')});
28
27
 
29
28
  describe('RequestTracker', () => {
29
+ let farm;
30
+ before(() => {
31
+ farm = new WorkerFarm({workerPath: require.resolve('../src/worker')});
32
+ });
33
+
30
34
  beforeEach(async () => {
31
35
  await options.cache.ensure();
32
36
 
@@ -35,6 +39,10 @@ describe('RequestTracker', () => {
35
39
  }
36
40
  });
37
41
 
42
+ after(() => {
43
+ farm.end();
44
+ });
45
+
38
46
  it('should not run requests that have not been invalidated', async () => {
39
47
  let tracker = new RequestTracker({farm, options});
40
48
  await tracker.runRequest({
@@ -23,15 +23,23 @@ const mockCast = (f: any): any => f;
23
23
 
24
24
  describe('ConfigRequest tests', () => {
25
25
  const projectRoot = 'project_root';
26
- const farm = new WorkerFarm({
27
- workerPath: require.resolve('../../src/worker'),
28
- maxConcurrentWorkers: 1,
26
+ let farm;
27
+ let fs;
28
+ before(() => {
29
+ farm = new WorkerFarm({
30
+ workerPath: require.resolve('../../src/worker'),
31
+ maxConcurrentWorkers: 1,
32
+ });
29
33
  });
30
- let fs = new MemoryFS(farm);
34
+
31
35
  beforeEach(() => {
32
36
  fs = new MemoryFS(farm);
33
37
  });
34
38
 
39
+ after(() => {
40
+ farm.end();
41
+ });
42
+
35
43
  const getMockRunApi = (
36
44
  options: mixed = {projectRoot, inputFS: fs},
37
45
  ): RunAPI<ConfigRequestResult> => {