Skip to content

Commit

Permalink
feat(vite): rest of targets
Browse files Browse the repository at this point in the history
  • Loading branch information
mandarini committed Nov 7, 2023
1 parent c83ce3b commit 5f72ba9
Showing 1 changed file with 186 additions and 13 deletions.
199 changes: 186 additions & 13 deletions packages/vite/src/plugins/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import {
CreateNodes,
CreateNodesContext,
TargetConfiguration,
joinPathFragments,
offsetFromRoot,
} from '@nx/devkit';
import { basename, dirname, extname, join, resolve } from 'path';
import { registerTsProject } from '@nx/js/src/internal';
Expand All @@ -13,9 +15,7 @@ import { getNamedInputs } from '@nx/devkit/src/utils/get-named-inputs';
import { readdirSync } from 'fs';
import { ExecutorOptions } from '@nx/js/src/utils/schema';

export interface VitePluginOptions {
targetName?: string;
}
export interface VitePluginOptions {}

export const createNodes: CreateNodes<VitePluginOptions> = [
'**/vite.config.{js,ts}',
Expand Down Expand Up @@ -43,7 +43,8 @@ export const createNodes: CreateNodes<VitePluginOptions> = [
configFilePath,
projectRoot,
options,
context
context,
projectName
),
},
},
Expand All @@ -55,29 +56,159 @@ function buildViteTargets(
configFilePath: string,
projectRoot: string,
options: VitePluginOptions,
context: CreateNodesContext
context: CreateNodesContext,
projectName: string
) {
const viteConfig = getViteConfig(configFilePath, context);
console.log('Here is your viteConfig', viteConfig);
const namedInputs = getNamedInputs(projectRoot, context);

const targets: Record<string, TargetConfiguration<ExecutorOptions>> = {};

targets['build'] = buildTarget(context, namedInputs, projectRoot);

targets['serve'] = serveTarget(
context,
namedInputs,
projectRoot,
projectName
);

targets['preview'] = previewTarget(
context,
namedInputs,
projectRoot,
projectName
);

targets['test'] = testTarget(context, namedInputs, projectRoot, projectName);

return targets;
}

function buildTarget(
context: CreateNodesContext,
namedInputs: {
[inputName: string]: any[];
},
projectRoot: string
) {
const targetDefaults = readTargetDefaultsForTarget(
options.targetName,
'build',
context.nxJsonConfiguration.targetDefaults,
'@nx/vite:build'
);

const namedInputs = getNamedInputs(projectRoot, context);
const baseTargetConfig: TargetConfiguration<ExecutorOptions> = {
executor: '@nx/vite:build',
outputs: ['{options.outputPath}'],
defaultConfiguration: 'production',
options: {
outputPath: joinPathFragments('dist', projectRoot),
...targetDefaults?.options,
},
configurations: {
development: {
mode: 'development',
},
production: {
mode: 'production',
},
},
};
return {
...baseTargetConfig,
cache: targetDefaults?.cache ?? true,
inputs:
targetDefaults?.inputs ?? 'production' in namedInputs
? ['default', '^production']
: ['default', '^default'],
outputs: targetDefaults?.outputs ?? getOutputs(projectRoot),
options: {
...baseTargetConfig.options,
},
};
}

const targets: Record<string, TargetConfiguration<ExecutorOptions>> = {};
function serveTarget(
context: CreateNodesContext,
namedInputs: {
[inputName: string]: any[];
},
projectRoot: string,
projectName: string
) {
const targetDefaults = readTargetDefaultsForTarget(
'serve',
context.nxJsonConfiguration.targetDefaults,
'@nx/vite:dev-server'
);

const baseTargetConfig: TargetConfiguration<ExecutorOptions> = {
executor: '@nx/vite:build',
executor: '@nx/vite:dev-server',
defaultConfiguration: 'development',
options: {
config: configFilePath,
buildTarget: `${projectName}:build`,
...targetDefaults?.options,
},
configurations: {
development: {
buildTarget: `${projectName}:build:development`,
hmr: true,
},
production: {
buildTarget: `${projectName}:build:production`,
hmr: false,
},
},
};
return {
...baseTargetConfig,
cache: targetDefaults?.cache ?? true,
inputs:
targetDefaults?.inputs ?? 'production' in namedInputs
? ['default', '^production']
: ['default', '^default'],
outputs: targetDefaults?.outputs ?? getOutputs(projectRoot),
options: {
...baseTargetConfig.options,
},
};
}

function previewTarget(
context: CreateNodesContext,
namedInputs: {
[inputName: string]: any[];
},
projectRoot: string,
projectName: string
) {
const targetDefaults = readTargetDefaultsForTarget(
'preview',
context.nxJsonConfiguration.targetDefaults,
'@nx/vite:preview-server'
);

targets[options.targetName] = {
const baseTargetConfig: TargetConfiguration<ExecutorOptions> = {
executor: '@nx/vite:preview-server',
defaultConfiguration: 'development',
options: {
buildTarget: `${projectName}:build`,
...targetDefaults?.options,
},
configurations: {
development: {
buildTarget: `${projectName}:build:development`,
hmr: true,
},
production: {
buildTarget: `${projectName}:build:production`,
hmr: false,
},
},
};
return {
...baseTargetConfig,
cache: targetDefaults?.cache ?? true,
inputs:
Expand All @@ -89,8 +220,51 @@ function buildViteTargets(
...baseTargetConfig.options,
},
};
}

return targets;
function testTarget(
context: CreateNodesContext,
namedInputs: {
[inputName: string]: any[];
},
projectRoot: string,
projectName: string
) {
const targetDefaults = readTargetDefaultsForTarget(
'test',
context.nxJsonConfiguration.targetDefaults,
'@nx/vite:test'
);

const coveragePath = joinPathFragments(
'coverage',
projectRoot === '.' ? projectName : projectRoot
);

const baseTargetConfig: TargetConfiguration<ExecutorOptions> = {
executor: '@nx/vite:test',
outputs: ['{options.reportsDirectory}'],
options: {
passWithNoTests: true,
reportsDirectory: joinPathFragments(
offsetFromRoot(projectRoot),
coveragePath
),
...targetDefaults?.options,
},
};
return {
...baseTargetConfig,
cache: targetDefaults?.cache ?? true,
inputs:
targetDefaults?.inputs ?? 'production' in namedInputs
? ['default', '^production']
: ['default', '^default'],
outputs: targetDefaults?.outputs ?? getOutputs(projectRoot),
options: {
...baseTargetConfig.options,
},
};
}

function getViteConfig(
Expand Down Expand Up @@ -135,6 +309,5 @@ function getOutputs(projectRoot: string): string[] {

function normalizeOptions(options: VitePluginOptions): VitePluginOptions {
options ??= {};
options.targetName ??= 'build';
return options;
}

0 comments on commit 5f72ba9

Please sign in to comment.