Skip to content

Commit b0a9f7b

Browse files
SukaatoSukaatoSukaato
authored
fix(compiler): Allow OutputTargetCustom to be called on devMode (#5541)
* fix(compiler): Allow OutputTargetCustom to be called on devMode * fix(compiler): Enable custom tasks to be called up in watch mode * fix(compiler): run prettier & lint --------- Co-authored-by: Sukaato <dev@Sukaato> Co-authored-by: Sukaato <sukaato@proton.me>
1 parent 945df46 commit b0a9f7b

File tree

4 files changed

+22
-14
lines changed

4 files changed

+22
-14
lines changed

src/compiler/output-targets/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { outputCollection } from './dist-collection';
66
import { outputCustomElements } from './dist-custom-elements';
77
import { outputHydrateScript } from './dist-hydrate-script';
88
import { outputLazy } from './dist-lazy/lazy-output';
9+
import { outputCustom } from './output-custom';
910
import { outputDocs } from './output-docs';
1011
import { outputLazyLoader } from './output-lazy-loader';
1112
import { outputTypes } from './output-types';
@@ -45,6 +46,7 @@ export const generateOutputTargets = async (
4546
// since it validates files were created
4647
await outputDocs(config, compilerCtx, buildCtx);
4748
await outputTypes(config, compilerCtx, buildCtx);
49+
await outputCustom(config, compilerCtx, buildCtx);
4850

4951
timeSpan.finish('generate outputs finished');
5052
};

src/compiler/output-targets/output-custom.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
import { catchError, isOutputTargetCustom } from '@utils';
22

33
import type * as d from '../../declarations';
4+
import { generateDocData } from '../docs/generate-doc-data';
5+
6+
export const outputCustom = async (config: d.ValidatedConfig, compilerCtx: d.CompilerCtx, buildCtx: d.BuildCtx) => {
7+
const task = config.watch ? 'always' : 'onBuildOnly';
8+
const customOutputTargets = config.outputTargets
9+
.filter(isOutputTargetCustom)
10+
.filter((o) => (o.taskShouldRun === undefined ? true : o.taskShouldRun === task));
411

5-
export const outputCustom = async (
6-
config: d.ValidatedConfig,
7-
compilerCtx: d.CompilerCtx,
8-
buildCtx: d.BuildCtx,
9-
docs: d.JsonDocs,
10-
outputTargets: d.OutputTarget[],
11-
) => {
12-
const customOutputTargets = outputTargets.filter(isOutputTargetCustom);
1312
if (customOutputTargets.length === 0) {
1413
return;
1514
}
15+
const docsData = await generateDocData(config, compilerCtx, buildCtx);
1616

1717
await Promise.all(
1818
customOutputTargets.map(async (o) => {
1919
const timespan = buildCtx.createTimeSpan(`generating ${o.name} started`);
2020
try {
21-
await o.generator(config, compilerCtx, buildCtx, docs);
21+
await o.generator(config, compilerCtx, buildCtx, docsData);
2222
} catch (e: any) {
2323
catchError(buildCtx.diagnostics, e);
2424
}

src/compiler/output-targets/output-docs.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
isOutputTargetCustom,
32
isOutputTargetDocsCustom,
43
isOutputTargetDocsJson,
54
isOutputTargetDocsReadme,
@@ -12,7 +11,6 @@ import { generateDocData } from '../docs/generate-doc-data';
1211
import { generateJsonDocs } from '../docs/json';
1312
import { generateReadmeDocs } from '../docs/readme';
1413
import { generateVscodeDocs } from '../docs/vscode';
15-
import { outputCustom } from './output-custom';
1614

1715
/**
1816
* Generate documentation-related output targets
@@ -30,7 +28,6 @@ export const outputDocs = async (
3028
}
3129
const docsOutputTargets = config.outputTargets.filter(
3230
(o) =>
33-
isOutputTargetCustom(o) ||
3431
isOutputTargetDocsReadme(o) ||
3532
isOutputTargetDocsJson(o) ||
3633
isOutputTargetDocsCustom(o) ||
@@ -51,6 +48,5 @@ export const outputDocs = async (
5148
generateJsonDocs(config, compilerCtx, docsData, docsOutputTargets),
5249
generateVscodeDocs(compilerCtx, docsData, docsOutputTargets),
5350
generateCustomDocs(config, docsData, docsOutputTargets),
54-
outputCustom(config, compilerCtx, buildCtx, docsData, docsOutputTargets),
5551
]);
5652
};

src/declarations/stencil-public-compiler.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ConfigFlags } from '../cli/config-flags';
22
import type { PrerenderUrlResults, PrintLine } from '../internal';
3+
import type { BuildCtx, CompilerCtx } from './stencil-private';
34
import type { JsonDocs } from './stencil-public-docs';
45

56
export * from './stencil-public-docs';
@@ -2239,8 +2240,17 @@ export interface OutputTargetHydrate extends OutputTargetBase {
22392240
export interface OutputTargetCustom extends OutputTargetBase {
22402241
type: 'custom';
22412242
name: string;
2243+
/**
2244+
* Indicate when the output target should be executed.
2245+
*
2246+
* - `"onBuildOnly"`: Executed only when `stencil build` is called without `--watch`.
2247+
* - `"always"`: Executed on every build, including in `watch` mode.
2248+
*
2249+
* Defaults to "always".
2250+
*/
2251+
taskShouldRun?: 'onBuildOnly' | 'always';
22422252
validate?: (config: Config, diagnostics: Diagnostic[]) => void;
2243-
generator: (config: Config, compilerCtx: any, buildCtx: any, docs: any) => Promise<void>;
2253+
generator: (config: Config, compilerCtx: CompilerCtx, buildCtx: BuildCtx, docs: JsonDocs) => Promise<void>;
22442254
copy?: CopyTask[];
22452255
}
22462256

0 commit comments

Comments
 (0)