From 9c1a75f6193293b73b1f21b6415a150501889e05 Mon Sep 17 00:00:00 2001 From: Sukaato Date: Wed, 20 Mar 2024 12:18:06 +0100 Subject: [PATCH 1/3] fix(compiler): Allow OutputTargetCustom to be called on devMode --- src/compiler/output-targets/index.ts | 2 ++ src/compiler/output-targets/output-custom.ts | 17 ++++++++--------- src/compiler/output-targets/output-docs.ts | 4 ---- src/declarations/stencil-public-compiler.ts | 10 +++++++++- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/compiler/output-targets/index.ts b/src/compiler/output-targets/index.ts index d6b680cd42f..e88d7641f04 100644 --- a/src/compiler/output-targets/index.ts +++ b/src/compiler/output-targets/index.ts @@ -6,6 +6,7 @@ import { outputCollection } from './dist-collection'; import { outputCustomElements } from './dist-custom-elements'; import { outputHydrateScript } from './dist-hydrate-script'; import { outputLazy } from './dist-lazy/lazy-output'; +import { outputCustom } from './output-custom'; import { outputDocs } from './output-docs'; import { outputLazyLoader } from './output-lazy-loader'; import { outputTypes } from './output-types'; @@ -45,6 +46,7 @@ export const generateOutputTargets = async ( // since it validates files were created await outputDocs(config, compilerCtx, buildCtx); await outputTypes(config, compilerCtx, buildCtx); + await outputCustom(config, compilerCtx, buildCtx); timeSpan.finish('generate outputs finished'); }; diff --git a/src/compiler/output-targets/output-custom.ts b/src/compiler/output-targets/output-custom.ts index 2fe17c622cc..e590247b55a 100644 --- a/src/compiler/output-targets/output-custom.ts +++ b/src/compiler/output-targets/output-custom.ts @@ -1,15 +1,14 @@ import { catchError, isOutputTargetCustom } from '@utils'; import type * as d from '../../declarations'; +import { generateDocData } from '../docs/generate-doc-data'; -export const outputCustom = async ( - config: d.ValidatedConfig, - compilerCtx: d.CompilerCtx, - buildCtx: d.BuildCtx, - docs: d.JsonDocs, - outputTargets: d.OutputTarget[], -) => { - const customOutputTargets = outputTargets.filter(isOutputTargetCustom); +export const outputCustom = async (config: d.ValidatedConfig, compilerCtx: d.CompilerCtx, buildCtx: d.BuildCtx) => { + const task = config.devMode ? 'run' : 'build'; + const docsData = await generateDocData(config, compilerCtx, buildCtx); + const customOutputTargets = config.outputTargets + .filter(isOutputTargetCustom) + .filter((o) => (o.task === undefined ? true : o.task === task)); if (customOutputTargets.length === 0) { return; } @@ -18,7 +17,7 @@ export const outputCustom = async ( customOutputTargets.map(async (o) => { const timespan = buildCtx.createTimeSpan(`generating ${o.name} started`); try { - await o.generator(config, compilerCtx, buildCtx, docs); + await o.generator(config, compilerCtx, buildCtx, docsData); } catch (e: any) { catchError(buildCtx.diagnostics, e); } diff --git a/src/compiler/output-targets/output-docs.ts b/src/compiler/output-targets/output-docs.ts index b01d7bd451b..ac12b47b934 100644 --- a/src/compiler/output-targets/output-docs.ts +++ b/src/compiler/output-targets/output-docs.ts @@ -1,5 +1,4 @@ import { - isOutputTargetCustom, isOutputTargetDocsCustom, isOutputTargetDocsJson, isOutputTargetDocsReadme, @@ -12,7 +11,6 @@ import { generateDocData } from '../docs/generate-doc-data'; import { generateJsonDocs } from '../docs/json'; import { generateReadmeDocs } from '../docs/readme'; import { generateVscodeDocs } from '../docs/vscode'; -import { outputCustom } from './output-custom'; /** * Generate documentation-related output targets @@ -30,7 +28,6 @@ export const outputDocs = async ( } const docsOutputTargets = config.outputTargets.filter( (o) => - isOutputTargetCustom(o) || isOutputTargetDocsReadme(o) || isOutputTargetDocsJson(o) || isOutputTargetDocsCustom(o) || @@ -51,6 +48,5 @@ export const outputDocs = async ( generateJsonDocs(config, compilerCtx, docsData, docsOutputTargets), generateVscodeDocs(compilerCtx, docsData, docsOutputTargets), generateCustomDocs(config, docsData, docsOutputTargets), - outputCustom(config, compilerCtx, buildCtx, docsData, docsOutputTargets), ]); }; diff --git a/src/declarations/stencil-public-compiler.ts b/src/declarations/stencil-public-compiler.ts index 7d1c3d0cd63..91aa84e7cb1 100644 --- a/src/declarations/stencil-public-compiler.ts +++ b/src/declarations/stencil-public-compiler.ts @@ -1,5 +1,6 @@ import type { ConfigFlags } from '../cli/config-flags'; import type { PrerenderUrlResults, PrintLine } from '../internal'; +import type { BuildCtx, CompilerCtx } from './stencil-private'; import type { JsonDocs } from './stencil-public-docs'; export * from './stencil-public-docs'; @@ -2239,8 +2240,15 @@ export interface OutputTargetHydrate extends OutputTargetBase { export interface OutputTargetCustom extends OutputTargetBase { type: 'custom'; name: string; + /** + * Indicate in wich mode the output target has to be executed. + * By default if nothing is specified it run for both. + * - `"run"`: Executed in dev mode on every change in your code + * - `"build"`: Executed only on build + */ + task?: 'run' | 'build'; validate?: (config: Config, diagnostics: Diagnostic[]) => void; - generator: (config: Config, compilerCtx: any, buildCtx: any, docs: any) => Promise; + generator: (config: Config, compilerCtx: CompilerCtx, buildCtx: BuildCtx, docs: JsonDocs) => Promise; copy?: CopyTask[]; } From ab9984270486428efcedf15c689bde2bcf67429d Mon Sep 17 00:00:00 2001 From: Sukaato Date: Tue, 16 Apr 2024 09:51:50 +0200 Subject: [PATCH 2/3] fix(compiler): Enable custom tasks to be called up in watch mode --- src/compiler/output-targets/output-custom.ts | 7 ++++--- src/declarations/stencil-public-compiler.ts | 12 +++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/compiler/output-targets/output-custom.ts b/src/compiler/output-targets/output-custom.ts index e590247b55a..f3813692403 100644 --- a/src/compiler/output-targets/output-custom.ts +++ b/src/compiler/output-targets/output-custom.ts @@ -4,14 +4,15 @@ import type * as d from '../../declarations'; import { generateDocData } from '../docs/generate-doc-data'; export const outputCustom = async (config: d.ValidatedConfig, compilerCtx: d.CompilerCtx, buildCtx: d.BuildCtx) => { - const task = config.devMode ? 'run' : 'build'; - const docsData = await generateDocData(config, compilerCtx, buildCtx); + const task = config.watch ? 'always' : 'onBuildOnly'; const customOutputTargets = config.outputTargets .filter(isOutputTargetCustom) - .filter((o) => (o.task === undefined ? true : o.task === task)); + .filter((o) => (o.taskShouldRun === undefined ? true : o.taskShouldRun === task)); + if (customOutputTargets.length === 0) { return; } + const docsData = await generateDocData(config, compilerCtx, buildCtx); await Promise.all( customOutputTargets.map(async (o) => { diff --git a/src/declarations/stencil-public-compiler.ts b/src/declarations/stencil-public-compiler.ts index 91aa84e7cb1..b003d4f0de5 100644 --- a/src/declarations/stencil-public-compiler.ts +++ b/src/declarations/stencil-public-compiler.ts @@ -2241,12 +2241,14 @@ export interface OutputTargetCustom extends OutputTargetBase { type: 'custom'; name: string; /** - * Indicate in wich mode the output target has to be executed. - * By default if nothing is specified it run for both. - * - `"run"`: Executed in dev mode on every change in your code - * - `"build"`: Executed only on build + * Indicate when the output target should be executed. + * + * - `"onBuildOnly"`: Executed only when `stencil build` is called without `--watch`. + * - `"always"`: Executed on every build, including in `watch` mode. + * + * Defaults to "always". */ - task?: 'run' | 'build'; + taskShouldRun?: 'onBuildOnly' | 'always'; validate?: (config: Config, diagnostics: Diagnostic[]) => void; generator: (config: Config, compilerCtx: CompilerCtx, buildCtx: BuildCtx, docs: JsonDocs) => Promise; copy?: CopyTask[]; From 2e2882761967813d8525807ac6e6f994ec958209 Mon Sep 17 00:00:00 2001 From: Sukaato Date: Fri, 3 May 2024 17:27:00 +0200 Subject: [PATCH 3/3] fix(compiler): run prettier & lint --- src/declarations/stencil-public-compiler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarations/stencil-public-compiler.ts b/src/declarations/stencil-public-compiler.ts index b003d4f0de5..d40cae80d36 100644 --- a/src/declarations/stencil-public-compiler.ts +++ b/src/declarations/stencil-public-compiler.ts @@ -2242,7 +2242,7 @@ export interface OutputTargetCustom extends OutputTargetBase { name: string; /** * Indicate when the output target should be executed. - * + * * - `"onBuildOnly"`: Executed only when `stencil build` is called without `--watch`. * - `"always"`: Executed on every build, including in `watch` mode. *