@plugjs/build 0.2.1 → 0.2.3

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/index.cjs CHANGED
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  // index.ts
22
22
  var src_exports = {};
23
23
  __export(src_exports, {
24
+ banner: () => banner,
24
25
  tasks: () => tasks
25
26
  });
26
27
  module.exports = __toCommonJS(src_exports);
@@ -61,7 +62,7 @@ function tasks(options = {}) {
61
62
  optimalFileCoverage: _optimalFileCoverage = void 0,
62
63
  esbuildOptions: _esbuildOptions = {}
63
64
  } = options;
64
- const banner = _banners ? emitBanner : (...args) => void 0;
65
+ const emitBanner = _banners ? banner : (...args) => void 0;
65
66
  const esbuildMergedOptions = Object.assign({}, esbuildDefaults, _esbuildOptions);
66
67
  return (0, import_plug.build)({
67
68
  /** The directory for the original sources (default: `src`) */
@@ -110,8 +111,8 @@ function tasks(options = {}) {
110
111
  _find_types() {
111
112
  return (0, import_plug.find)("**/*.d.ts", { directory: this.sourceDir });
112
113
  },
113
- /** Find all types definition files within sources */
114
- _find_extras() {
114
+ /** Find all extra types definition files from `extraTypesDir` */
115
+ _find_extra_types() {
115
116
  if (!(0, import_plug.isDirectory)(this.extraTypesDir))
116
117
  return (0, import_plug.noop)();
117
118
  return (0, import_plug.find)("**/*.d.ts", { directory: this.extraTypesDir });
@@ -124,6 +125,15 @@ function tasks(options = {}) {
124
125
  _find_tests() {
125
126
  return (0, import_plug.find)(this.testGlob, { directory: this.testDir, ignore: "**/*.d.ts" });
126
127
  },
128
+ /** Find all source files to lint */
129
+ _find_lint_sources() {
130
+ return (0, import_plug.merge)([
131
+ this._find_sources(),
132
+ this._find_tests(),
133
+ this._find_types(),
134
+ this._find_extra_types()
135
+ ]);
136
+ },
127
137
  /* ====================================================================== *
128
138
  * TRANSPILE *
129
139
  * ====================================================================== */
@@ -150,7 +160,7 @@ function tasks(options = {}) {
150
160
  return (0, import_plug.merge)([
151
161
  this._find_sources(),
152
162
  this._find_types(),
153
- this._find_extras()
163
+ this._find_extra_types()
154
164
  ]).tsc("tsconfig.json", {
155
165
  noEmit: false,
156
166
  rootDir: this.sourceDir,
@@ -160,7 +170,7 @@ function tasks(options = {}) {
160
170
  });
161
171
  },
162
172
  /** Copy all resources coming alongside our sources */
163
- transpile_resources() {
173
+ copy_resources() {
164
174
  return (0, import_plug.merge)([
165
175
  this._find_resources(),
166
176
  this._find_types()
@@ -168,34 +178,61 @@ function tasks(options = {}) {
168
178
  },
169
179
  /** Transpile all source code */
170
180
  async transpile() {
171
- banner("Transpiling source files");
181
+ emitBanner("Transpiling source files");
172
182
  if ((0, import_plug.isDirectory)(this.destDir))
173
183
  await (0, import_plug.rmrf)(this.destDir);
174
- return (0, import_plug.merge)([
184
+ const result = await (0, import_plug.merge)([
175
185
  _cjsTranspile ? this.transpile_cjs() : (0, import_plug.noop)(),
176
186
  _esmTranspile ? this.transpile_esm() : (0, import_plug.noop)(),
177
187
  this.transpile_types(),
178
- this.transpile_resources()
188
+ this.copy_resources()
179
189
  ]);
190
+ return result;
180
191
  },
181
192
  /* ====================================================================== *
182
- * TEST, COVERAGE & LINTING *
193
+ * TEST & COVERAGE *
183
194
  * ====================================================================== */
184
- /** Run test and emit coverage data */
195
+ /** Run tests */
196
+ async test_cjs() {
197
+ emitBanner("Running tests (CommonJS)");
198
+ const forceType = process.env.__TS_LOADER_FORCE_TYPE;
199
+ try {
200
+ process.env.__TS_LOADER_FORCE_TYPE = "commonjs";
201
+ await this._find_tests().jasmine({ coverageDir: _coverage ? this.coverageDataDir : void 0 });
202
+ } finally {
203
+ delete process.env.__TS_LOADER_FORCE_TYPE;
204
+ if (forceType)
205
+ process.env.__TS_LOADER_FORCE_TYPE = forceType;
206
+ }
207
+ },
208
+ /** Run tests */
209
+ async test_esm() {
210
+ emitBanner("Running tests (ES Modules)");
211
+ const forceType = process.env.__TS_LOADER_FORCE_TYPE;
212
+ try {
213
+ process.env.__TS_LOADER_FORCE_TYPE = "module";
214
+ await this._find_tests().jasmine({ coverageDir: _coverage ? this.coverageDataDir : void 0 });
215
+ } finally {
216
+ delete process.env.__TS_LOADER_FORCE_TYPE;
217
+ if (forceType)
218
+ process.env.__TS_LOADER_FORCE_TYPE = forceType;
219
+ }
220
+ },
221
+ /** Run tests */
185
222
  async test() {
186
- banner("Running tests");
187
223
  if (_coverage && (0, import_plug.isDirectory)(this.coverageDataDir))
188
224
  await (0, import_plug.rmrf)(this.coverageDataDir);
189
- await this._find_tests().jasmine({ coverageDir: _coverage ? this.coverageDataDir : void 0 });
225
+ await this.test_cjs();
226
+ await this.test_esm();
190
227
  },
191
- /** Run tests (always) and generate a coverage report */
228
+ /** Ensure tests have run and generate a coverage report */
192
229
  async coverage() {
193
- let files;
230
+ let coveragePipe;
194
231
  try {
195
232
  await this.test();
196
233
  } finally {
197
- banner("Preparing coverage report");
198
- files = await this._find_sources().coverage(this.coverageDataDir, {
234
+ emitBanner("Preparing coverage report");
235
+ coveragePipe = this._find_sources().coverage(this.coverageDataDir, {
199
236
  reportDir: this.coverageDir,
200
237
  minimumCoverage: _minimumCoverage,
201
238
  minimumFileCoverage: _minimumFileCoverage,
@@ -203,17 +240,15 @@ function tasks(options = {}) {
203
240
  optimalFileCoverage: _optimalFileCoverage
204
241
  });
205
242
  }
206
- return files;
243
+ return coveragePipe;
207
244
  },
208
- /** Run test and emit coverage data */
245
+ /* ====================================================================== *
246
+ * LINTING *
247
+ * ====================================================================== */
248
+ /** Lint all sources */
209
249
  async lint() {
210
- banner("Linting sources");
211
- await (0, import_plug.merge)([
212
- this._find_sources(),
213
- this._find_tests(),
214
- this._find_types(),
215
- this._find_extras()
216
- ]).eslint();
250
+ emitBanner("Linting sources");
251
+ await this._find_lint_sources().eslint();
217
252
  },
218
253
  /* ====================================================================== *
219
254
  * PACKAGE.JSON EXPORTS *
@@ -221,7 +256,7 @@ function tasks(options = {}) {
221
256
  /** Inject `exports` into the `package.json` file */
222
257
  async exports() {
223
258
  const files = await this.transpile();
224
- banner('Updating exports in "package.json"');
259
+ emitBanner('Updating exports in "package.json"');
225
260
  return (0, import_plug.merge)([files]).filter(this.exportsGlob, { directory: this.destDir, ignore: "**/*.map" }).exports({
226
261
  cjsExtension: this.cjsExtension,
227
262
  esmExtension: this.esmExtension,
@@ -230,11 +265,11 @@ function tasks(options = {}) {
230
265
  });
231
266
  },
232
267
  /* ====================================================================== *
233
- * DEFAULT: DO EVERYTHING *
268
+ * ALL: DO EVERYTHING *
234
269
  * ====================================================================== */
235
270
  /* coverage ignore next */
236
- /** Build everything */
237
- async default() {
271
+ /** Build everything. */
272
+ async all() {
238
273
  if (_parallelize) {
239
274
  await Promise.all([
240
275
  this.transpile(),
@@ -247,11 +282,23 @@ function tasks(options = {}) {
247
282
  await this.coverage();
248
283
  await this.lint();
249
284
  }
250
- await this.exports();
285
+ },
286
+ /* ====================================================================== *
287
+ * DEFAULT: DO EVERYTHING *
288
+ * ====================================================================== */
289
+ /* coverage ignore next */
290
+ /**
291
+ * Default task (simply invokes `this._all()`).
292
+ *
293
+ * Override this and invoke `this._all()` to inject tasks _before_ or
294
+ * _after_ the normal build execution.
295
+ */
296
+ async default() {
297
+ await this.all();
251
298
  }
252
299
  });
253
300
  }
254
- function emitBanner(message) {
301
+ function banner(message) {
255
302
  import_plug.log.notice([
256
303
  "",
257
304
  (0, import_plug.$gry)(`\u2554${"".padStart(60, "\u2550")}\u2557`),
@@ -262,6 +309,7 @@ function emitBanner(message) {
262
309
  }
263
310
  // Annotate the CommonJS export names for ESM import in node:
264
311
  0 && (module.exports = {
312
+ banner,
265
313
  tasks
266
314
  });
267
315
  //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/dist/index.d.ts CHANGED
@@ -97,12 +97,14 @@ export declare function tasks(options?: TasksOptions): import("@plugjs/plug").Bu
97
97
  _find_sources(): Pipe;
98
98
  /** Find all types definition files within sources */
99
99
  _find_types(): Pipe;
100
- /** Find all types definition files within sources */
101
- _find_extras(): Pipe;
100
+ /** Find all extra types definition files from `extraTypesDir` */
101
+ _find_extra_types(): Pipe;
102
102
  /** Find all resource files (non-typescript files) within sources */
103
103
  _find_resources(): Pipe;
104
104
  /** Find all test source files */
105
105
  _find_tests(): Pipe;
106
+ /** Find all source files to lint */
107
+ _find_lint_sources(): Pipe;
106
108
  /** Transpile to CJS */
107
109
  transpile_cjs(): Pipe;
108
110
  /** Transpile to ESM */
@@ -110,17 +112,29 @@ export declare function tasks(options?: TasksOptions): import("@plugjs/plug").Bu
110
112
  /** Generate all .d.ts files */
111
113
  transpile_types(): Pipe;
112
114
  /** Copy all resources coming alongside our sources */
113
- transpile_resources(): Pipe;
115
+ copy_resources(): Pipe;
114
116
  /** Transpile all source code */
115
117
  transpile(): Promise<Pipe>;
116
- /** Run test and emit coverage data */
118
+ /** Run tests */
119
+ test_cjs(): Promise<void>;
120
+ /** Run tests */
121
+ test_esm(): Promise<void>;
122
+ /** Run tests */
117
123
  test(): Promise<void>;
118
- /** Run tests (always) and generate a coverage report */
124
+ /** Ensure tests have run and generate a coverage report */
119
125
  coverage(): Promise<Pipe>;
120
- /** Run test and emit coverage data */
126
+ /** Lint all sources */
121
127
  lint(): Promise<void>;
122
128
  /** Inject `exports` into the `package.json` file */
123
129
  exports(): Promise<Pipe>;
124
- /** Build everything */
130
+ /** Build everything. */
131
+ all(): Promise<void>;
132
+ /**
133
+ * Default task (simply invokes `this._all()`).
134
+ *
135
+ * Override this and invoke `this._all()` to inject tasks _before_ or
136
+ * _after_ the normal build execution.
137
+ */
125
138
  default(): Promise<void>;
126
139
  }>;
140
+ export declare function banner(message: string): void;
package/dist/index.mjs CHANGED
@@ -47,7 +47,7 @@ function tasks(options = {}) {
47
47
  optimalFileCoverage: _optimalFileCoverage = void 0,
48
48
  esbuildOptions: _esbuildOptions = {}
49
49
  } = options;
50
- const banner = _banners ? emitBanner : (...args) => void 0;
50
+ const emitBanner = _banners ? banner : (...args) => void 0;
51
51
  const esbuildMergedOptions = Object.assign({}, esbuildDefaults, _esbuildOptions);
52
52
  return build({
53
53
  /** The directory for the original sources (default: `src`) */
@@ -96,8 +96,8 @@ function tasks(options = {}) {
96
96
  _find_types() {
97
97
  return find("**/*.d.ts", { directory: this.sourceDir });
98
98
  },
99
- /** Find all types definition files within sources */
100
- _find_extras() {
99
+ /** Find all extra types definition files from `extraTypesDir` */
100
+ _find_extra_types() {
101
101
  if (!isDirectory(this.extraTypesDir))
102
102
  return noop();
103
103
  return find("**/*.d.ts", { directory: this.extraTypesDir });
@@ -110,6 +110,15 @@ function tasks(options = {}) {
110
110
  _find_tests() {
111
111
  return find(this.testGlob, { directory: this.testDir, ignore: "**/*.d.ts" });
112
112
  },
113
+ /** Find all source files to lint */
114
+ _find_lint_sources() {
115
+ return merge([
116
+ this._find_sources(),
117
+ this._find_tests(),
118
+ this._find_types(),
119
+ this._find_extra_types()
120
+ ]);
121
+ },
113
122
  /* ====================================================================== *
114
123
  * TRANSPILE *
115
124
  * ====================================================================== */
@@ -136,7 +145,7 @@ function tasks(options = {}) {
136
145
  return merge([
137
146
  this._find_sources(),
138
147
  this._find_types(),
139
- this._find_extras()
148
+ this._find_extra_types()
140
149
  ]).tsc("tsconfig.json", {
141
150
  noEmit: false,
142
151
  rootDir: this.sourceDir,
@@ -146,7 +155,7 @@ function tasks(options = {}) {
146
155
  });
147
156
  },
148
157
  /** Copy all resources coming alongside our sources */
149
- transpile_resources() {
158
+ copy_resources() {
150
159
  return merge([
151
160
  this._find_resources(),
152
161
  this._find_types()
@@ -154,34 +163,61 @@ function tasks(options = {}) {
154
163
  },
155
164
  /** Transpile all source code */
156
165
  async transpile() {
157
- banner("Transpiling source files");
166
+ emitBanner("Transpiling source files");
158
167
  if (isDirectory(this.destDir))
159
168
  await rmrf(this.destDir);
160
- return merge([
169
+ const result = await merge([
161
170
  _cjsTranspile ? this.transpile_cjs() : noop(),
162
171
  _esmTranspile ? this.transpile_esm() : noop(),
163
172
  this.transpile_types(),
164
- this.transpile_resources()
173
+ this.copy_resources()
165
174
  ]);
175
+ return result;
166
176
  },
167
177
  /* ====================================================================== *
168
- * TEST, COVERAGE & LINTING *
178
+ * TEST & COVERAGE *
169
179
  * ====================================================================== */
170
- /** Run test and emit coverage data */
180
+ /** Run tests */
181
+ async test_cjs() {
182
+ emitBanner("Running tests (CommonJS)");
183
+ const forceType = process.env.__TS_LOADER_FORCE_TYPE;
184
+ try {
185
+ process.env.__TS_LOADER_FORCE_TYPE = "commonjs";
186
+ await this._find_tests().jasmine({ coverageDir: _coverage ? this.coverageDataDir : void 0 });
187
+ } finally {
188
+ delete process.env.__TS_LOADER_FORCE_TYPE;
189
+ if (forceType)
190
+ process.env.__TS_LOADER_FORCE_TYPE = forceType;
191
+ }
192
+ },
193
+ /** Run tests */
194
+ async test_esm() {
195
+ emitBanner("Running tests (ES Modules)");
196
+ const forceType = process.env.__TS_LOADER_FORCE_TYPE;
197
+ try {
198
+ process.env.__TS_LOADER_FORCE_TYPE = "module";
199
+ await this._find_tests().jasmine({ coverageDir: _coverage ? this.coverageDataDir : void 0 });
200
+ } finally {
201
+ delete process.env.__TS_LOADER_FORCE_TYPE;
202
+ if (forceType)
203
+ process.env.__TS_LOADER_FORCE_TYPE = forceType;
204
+ }
205
+ },
206
+ /** Run tests */
171
207
  async test() {
172
- banner("Running tests");
173
208
  if (_coverage && isDirectory(this.coverageDataDir))
174
209
  await rmrf(this.coverageDataDir);
175
- await this._find_tests().jasmine({ coverageDir: _coverage ? this.coverageDataDir : void 0 });
210
+ await this.test_cjs();
211
+ await this.test_esm();
176
212
  },
177
- /** Run tests (always) and generate a coverage report */
213
+ /** Ensure tests have run and generate a coverage report */
178
214
  async coverage() {
179
- let files;
215
+ let coveragePipe;
180
216
  try {
181
217
  await this.test();
182
218
  } finally {
183
- banner("Preparing coverage report");
184
- files = await this._find_sources().coverage(this.coverageDataDir, {
219
+ emitBanner("Preparing coverage report");
220
+ coveragePipe = this._find_sources().coverage(this.coverageDataDir, {
185
221
  reportDir: this.coverageDir,
186
222
  minimumCoverage: _minimumCoverage,
187
223
  minimumFileCoverage: _minimumFileCoverage,
@@ -189,17 +225,15 @@ function tasks(options = {}) {
189
225
  optimalFileCoverage: _optimalFileCoverage
190
226
  });
191
227
  }
192
- return files;
228
+ return coveragePipe;
193
229
  },
194
- /** Run test and emit coverage data */
230
+ /* ====================================================================== *
231
+ * LINTING *
232
+ * ====================================================================== */
233
+ /** Lint all sources */
195
234
  async lint() {
196
- banner("Linting sources");
197
- await merge([
198
- this._find_sources(),
199
- this._find_tests(),
200
- this._find_types(),
201
- this._find_extras()
202
- ]).eslint();
235
+ emitBanner("Linting sources");
236
+ await this._find_lint_sources().eslint();
203
237
  },
204
238
  /* ====================================================================== *
205
239
  * PACKAGE.JSON EXPORTS *
@@ -207,7 +241,7 @@ function tasks(options = {}) {
207
241
  /** Inject `exports` into the `package.json` file */
208
242
  async exports() {
209
243
  const files = await this.transpile();
210
- banner('Updating exports in "package.json"');
244
+ emitBanner('Updating exports in "package.json"');
211
245
  return merge([files]).filter(this.exportsGlob, { directory: this.destDir, ignore: "**/*.map" }).exports({
212
246
  cjsExtension: this.cjsExtension,
213
247
  esmExtension: this.esmExtension,
@@ -216,11 +250,11 @@ function tasks(options = {}) {
216
250
  });
217
251
  },
218
252
  /* ====================================================================== *
219
- * DEFAULT: DO EVERYTHING *
253
+ * ALL: DO EVERYTHING *
220
254
  * ====================================================================== */
221
255
  /* coverage ignore next */
222
- /** Build everything */
223
- async default() {
256
+ /** Build everything. */
257
+ async all() {
224
258
  if (_parallelize) {
225
259
  await Promise.all([
226
260
  this.transpile(),
@@ -233,11 +267,23 @@ function tasks(options = {}) {
233
267
  await this.coverage();
234
268
  await this.lint();
235
269
  }
236
- await this.exports();
270
+ },
271
+ /* ====================================================================== *
272
+ * DEFAULT: DO EVERYTHING *
273
+ * ====================================================================== */
274
+ /* coverage ignore next */
275
+ /**
276
+ * Default task (simply invokes `this._all()`).
277
+ *
278
+ * Override this and invoke `this._all()` to inject tasks _before_ or
279
+ * _after_ the normal build execution.
280
+ */
281
+ async default() {
282
+ await this.all();
237
283
  }
238
284
  });
239
285
  }
240
- function emitBanner(message) {
286
+ function banner(message) {
241
287
  log.notice([
242
288
  "",
243
289
  $gry(`\u2554${"".padStart(60, "\u2550")}\u2557`),
@@ -247,6 +293,7 @@ function emitBanner(message) {
247
293
  ].join("\n"));
248
294
  }
249
295
  export {
296
+ banner,
250
297
  tasks
251
298
  };
252
299
  //# sourceMappingURL=index.mjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plugjs/build",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Simple shared build using PlugJS",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -29,12 +29,12 @@
29
29
  "transpile": "plug transpile"
30
30
  },
31
31
  "dependencies": {
32
- "@plugjs/cov8": "^0.2.0",
33
- "@plugjs/eslint": "^0.2.0",
32
+ "@plugjs/cov8": "^0.2.2",
33
+ "@plugjs/eslint": "^0.2.2",
34
34
  "@plugjs/eslint-plugin": "^0.1.2",
35
- "@plugjs/jasmine": "^0.2.0",
36
- "@plugjs/plug": "^0.2.0",
37
- "@plugjs/typescript": "^0.2.0"
35
+ "@plugjs/jasmine": "^0.2.2",
36
+ "@plugjs/plug": "^0.2.2",
37
+ "@plugjs/typescript": "^0.2.2"
38
38
  },
39
39
  "files": [
40
40
  "*.md",
package/src/index.ts CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  } from '@plugjs/plug'
14
14
  import '@plugjs/typescript'
15
15
 
16
- import type { ESBuildOptions, Files, Pipe } from '@plugjs/plug'
16
+ import type { ESBuildOptions, Pipe } from '@plugjs/plug'
17
17
 
18
18
  export * from '@plugjs/plug'
19
19
 
@@ -89,7 +89,6 @@ export interface TasksOptions {
89
89
  /** Optimal per-file coverage percentage (default: _none_) */
90
90
  optimalFileCoverage?: number,
91
91
 
92
-
93
92
  /**
94
93
  * ESBuild compilation options
95
94
  *
@@ -139,7 +138,7 @@ export function tasks(options: TasksOptions = {}) {
139
138
  } = options
140
139
 
141
140
  // coverage ignore next
142
- const banner = _banners ? emitBanner : (...args: any) => void args
141
+ const emitBanner = _banners ? banner : (...args: any) => void args
143
142
 
144
143
  // Merge esbuild defaults with specified options
145
144
  const esbuildMergedOptions = Object.assign({}, esbuildDefaults, _esbuildOptions)
@@ -197,13 +196,12 @@ export function tasks(options: TasksOptions = {}) {
197
196
  return find('**/*.d.ts', { directory: this.sourceDir })
198
197
  },
199
198
 
200
- /** Find all types definition files within sources */
201
- _find_extras(): Pipe {
199
+ /** Find all extra types definition files from `extraTypesDir` */
200
+ _find_extra_types(): Pipe {
202
201
  if (! isDirectory(this.extraTypesDir)) return noop()
203
202
  return find('**/*.d.ts', { directory: this.extraTypesDir })
204
203
  },
205
204
 
206
-
207
205
  /** Find all resource files (non-typescript files) within sources */
208
206
  _find_resources(): Pipe {
209
207
  return find('**/*', { directory: this.sourceDir, ignore: '**/*.([cm])?ts' })
@@ -214,6 +212,16 @@ export function tasks(options: TasksOptions = {}) {
214
212
  return find(this.testGlob, { directory: this.testDir, ignore: '**/*.d.ts' })
215
213
  },
216
214
 
215
+ /** Find all source files to lint */
216
+ _find_lint_sources(): Pipe {
217
+ return merge([
218
+ this._find_sources(),
219
+ this._find_tests(),
220
+ this._find_types(),
221
+ this._find_extra_types(),
222
+ ])
223
+ },
224
+
217
225
  /* ====================================================================== *
218
226
  * TRANSPILE *
219
227
  * ====================================================================== */
@@ -245,7 +253,7 @@ export function tasks(options: TasksOptions = {}) {
245
253
  return merge([
246
254
  this._find_sources(),
247
255
  this._find_types(),
248
- this._find_extras(),
256
+ this._find_extra_types(),
249
257
  ]).tsc('tsconfig.json', {
250
258
  noEmit: false,
251
259
  rootDir: this.sourceDir,
@@ -256,7 +264,7 @@ export function tasks(options: TasksOptions = {}) {
256
264
  },
257
265
 
258
266
  /** Copy all resources coming alongside our sources */
259
- transpile_resources(): Pipe {
267
+ copy_resources(): Pipe {
260
268
  return merge([
261
269
  this._find_resources(),
262
270
  this._find_types(),
@@ -265,43 +273,75 @@ export function tasks(options: TasksOptions = {}) {
265
273
 
266
274
  /** Transpile all source code */
267
275
  async transpile(): Promise<Pipe> {
268
- banner('Transpiling source files')
276
+ emitBanner('Transpiling source files')
269
277
 
270
278
  if (isDirectory(this.destDir)) await rmrf(this.destDir)
271
279
 
272
- return merge([
280
+ const result = await merge([
273
281
  _cjsTranspile ? this.transpile_cjs() : noop(),
274
282
  _esmTranspile ? this.transpile_esm() : noop(),
275
283
  this.transpile_types(),
276
- this.transpile_resources(),
284
+ this.copy_resources(),
277
285
  ])
286
+
287
+ return result
278
288
  },
279
289
 
280
290
  /* ====================================================================== *
281
- * TEST, COVERAGE & LINTING *
291
+ * TEST & COVERAGE *
282
292
  * ====================================================================== */
283
293
 
284
- /** Run test and emit coverage data */
285
- async test(): Promise<void> {
286
- banner('Running tests')
294
+ /** Run tests */
295
+ async test_cjs(): Promise<void> {
296
+ emitBanner('Running tests (CommonJS)')
287
297
 
298
+ const forceType = process.env.__TS_LOADER_FORCE_TYPE
299
+ try {
300
+ process.env.__TS_LOADER_FORCE_TYPE = 'commonjs'
301
+ await this
302
+ ._find_tests()
303
+ .jasmine({ coverageDir: _coverage ? this.coverageDataDir : undefined })
304
+ } finally {
305
+ delete process.env.__TS_LOADER_FORCE_TYPE
306
+ if (forceType) process.env.__TS_LOADER_FORCE_TYPE = forceType
307
+ }
308
+ },
309
+
310
+ /** Run tests */
311
+ async test_esm(): Promise<void> {
312
+ emitBanner('Running tests (ES Modules)')
313
+
314
+ const forceType = process.env.__TS_LOADER_FORCE_TYPE
315
+ try {
316
+ process.env.__TS_LOADER_FORCE_TYPE = 'module'
317
+ await this
318
+ ._find_tests()
319
+ .jasmine({ coverageDir: _coverage ? this.coverageDataDir : undefined })
320
+ } finally {
321
+ delete process.env.__TS_LOADER_FORCE_TYPE
322
+ if (forceType) process.env.__TS_LOADER_FORCE_TYPE = forceType
323
+ }
324
+ },
325
+
326
+ /** Run tests */
327
+ async test(): Promise<void> {
288
328
  if (_coverage && isDirectory(this.coverageDataDir)) await rmrf(this.coverageDataDir)
289
329
 
290
- await this
291
- ._find_tests()
292
- .jasmine({ coverageDir: _coverage ? this.coverageDataDir : undefined })
330
+ await this.test_cjs()
331
+ await this.test_esm()
293
332
  },
294
333
 
295
- /** Run tests (always) and generate a coverage report */
334
+ /** Ensure tests have run and generate a coverage report */
296
335
  async coverage(): Promise<Pipe> {
336
+ let coveragePipe: Pipe
337
+
297
338
  // Capture error from running tests, but always produce coverage
298
- let files: Files
299
339
  try {
300
340
  await this.test()
301
341
  } finally {
302
- banner('Preparing coverage report')
303
- files = await this
304
- ._find_sources()
342
+ emitBanner('Preparing coverage report')
343
+
344
+ coveragePipe = this._find_sources()
305
345
  .coverage(this.coverageDataDir, {
306
346
  reportDir: this.coverageDir,
307
347
  minimumCoverage: _minimumCoverage,
@@ -311,20 +351,19 @@ export function tasks(options: TasksOptions = {}) {
311
351
  })
312
352
  }
313
353
 
314
- // No exceptions!
315
- return files
354
+ // If the tests didn't throw, return the coverage
355
+ return coveragePipe
316
356
  },
317
357
 
318
- /** Run test and emit coverage data */
358
+ /* ====================================================================== *
359
+ * LINTING *
360
+ * ====================================================================== */
361
+
362
+ /** Lint all sources */
319
363
  async lint(): Promise<void> {
320
- banner('Linting sources')
364
+ emitBanner('Linting sources')
321
365
 
322
- await merge([
323
- this._find_sources(),
324
- this._find_tests(),
325
- this._find_types(),
326
- this._find_extras(),
327
- ]).eslint()
366
+ await this._find_lint_sources().eslint()
328
367
  },
329
368
 
330
369
  /* ====================================================================== *
@@ -335,7 +374,7 @@ export function tasks(options: TasksOptions = {}) {
335
374
  async exports(): Promise<Pipe> {
336
375
  const files = await this.transpile()
337
376
 
338
- banner('Updating exports in "package.json"')
377
+ emitBanner('Updating exports in "package.json"')
339
378
 
340
379
  return merge([ files ])
341
380
  .filter(this.exportsGlob, { directory: this.destDir, ignore: '**/*.map' })
@@ -348,12 +387,12 @@ export function tasks(options: TasksOptions = {}) {
348
387
  },
349
388
 
350
389
  /* ====================================================================== *
351
- * DEFAULT: DO EVERYTHING *
390
+ * ALL: DO EVERYTHING *
352
391
  * ====================================================================== */
353
392
 
354
393
  /* coverage ignore next */
355
- /** Build everything */
356
- async default(): Promise<void> {
394
+ /** Build everything. */
395
+ async all(): Promise<void> {
357
396
  if (_parallelize) {
358
397
  await Promise.all([
359
398
  this.transpile(),
@@ -365,14 +404,28 @@ export function tasks(options: TasksOptions = {}) {
365
404
  await this.coverage() // implies "test"
366
405
  await this.lint()
367
406
  }
368
- await this.exports()
407
+ },
408
+
409
+ /* ====================================================================== *
410
+ * DEFAULT: DO EVERYTHING *
411
+ * ====================================================================== */
412
+
413
+ /* coverage ignore next */
414
+ /**
415
+ * Default task (simply invokes `this._all()`).
416
+ *
417
+ * Override this and invoke `this._all()` to inject tasks _before_ or
418
+ * _after_ the normal build execution.
419
+ */
420
+ async default(): Promise<void> {
421
+ await this.all()
369
422
  },
370
423
  })
371
424
  }
372
425
 
373
426
  /* coverage ignore next */
374
427
  /* Leave this at the _end_ of the file, unicode messes up sitemaps... */
375
- function emitBanner(message: string): void {
428
+ export function banner(message: string): void {
376
429
  log.notice([
377
430
  '', $gry(`\u2554${''.padStart(60, '\u2550')}\u2557`),
378
431
  `${$gry('\u2551')} ${$wht(message.padEnd(58, ' '))} ${$gry('\u2551')}`,