Skip to content

Commit 43e640e

Browse files
fix: update config for application generator (#19)
1 parent 9b8ef04 commit 43e640e

16 files changed

+266
-212
lines changed

package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
"@commitlint/config-angular": "^17.3.0",
1717
"@commitlint/config-conventional": "^17.3.0",
1818
"@jscutlery/semver": "^2.29.0",
19-
"@nrwl/cli": "15.3.0",
20-
"@nrwl/devkit": "15.3.0",
21-
"@nrwl/eslint-plugin-nx": "15.3.0",
22-
"@nrwl/jest": "15.3.0",
23-
"@nrwl/js": "15.3.0",
24-
"@nrwl/linter": "15.3.0",
25-
"@nrwl/nx-plugin": "^15.3.0",
26-
"@nrwl/vite": "15.3.0",
27-
"@nrwl/workspace": "15.3.0",
19+
"@nrwl/cli": "15.4.0",
20+
"@nrwl/devkit": "15.4.0",
21+
"@nrwl/eslint-plugin-nx": "15.4.0",
22+
"@nrwl/jest": "15.4.0",
23+
"@nrwl/js": "15.4.0",
24+
"@nrwl/linter": "15.4.0",
25+
"@nrwl/nx-plugin": "^15.4.0",
26+
"@nrwl/vite": "15.4.0",
27+
"@nrwl/workspace": "15.4.0",
2828
"@swc-node/register": "^1.4.2",
2929
"@swc/cli": "~0.1.55",
3030
"@swc/core": "^1.2.173",
@@ -43,7 +43,7 @@
4343
"jest-environment-jsdom": "28.1.1",
4444
"jsonc-eslint-parser": "^2.1.0",
4545
"ngx-deploy-npm": "^4.3.9",
46-
"nx": "15.3.0",
46+
"nx": "15.4.0",
4747
"prettier": "^2.8.0",
4848
"pretty-quick": "^3.1.3",
4949
"ts-jest": "28.0.5",

packages/qwik-nx/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
"generators": "./generators.json",
2222
"executors": "./executors.json",
2323
"dependencies": {
24-
"@nrwl/vite": "~15.3.0"
24+
"@nrwl/vite": "~15.4.0"
2525
}
2626
}

packages/qwik-nx/src/generators/application/files/.eslintrc.json__template__

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"extends": [
3-
"<%= offsetFromRoot %>.eslintrc.json",
43
"eslint:recommended",
54
"plugin:@typescript-eslint/recommended",
6-
"plugin:qwik/recommended"
5+
"plugin:qwik/recommended",
6+
"<%= offsetFromRoot %>.eslintrc.json"
77
],
88
"parser": "@typescript-eslint/parser",
99
"parserOptions": {
10-
"project": ["<%= appProjectRoot %>/tsconfig.*?.json"],
10+
"project": ["<%= projectRoot %>/tsconfig.*?.json"],
1111
"ecmaVersion": 2021,
1212
"sourceType": "module",
1313
"ecmaFeatures": {

packages/qwik-nx/src/generators/application/files/.gitignore__template__

Lines changed: 0 additions & 38 deletions
This file was deleted.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"name": "<%= name %>"
3+
}

packages/qwik-nx/src/generators/application/files/vite.config.ts__template__

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
<% if(setupVitest) { %>
2-
/// <reference types="vitest" />
3-
<% } %>
1+
<% if(setupVitest) { %> /// <reference types="vitest" /> <% } %>
42
import { qwikVite } from '@builder.io/qwik/optimizer';
53
import { qwikCity } from '@builder.io/qwik-city/vite';
64
import { defineConfig } from 'vite';
75
import tsconfigPaths from 'vite-tsconfig-paths';
86

97
export default defineConfig({
10-
plugins: [qwikCity(), qwikVite(), tsconfigPaths()],
8+
plugins: [
9+
qwikCity(),
10+
qwikVite({
11+
client: {
12+
outDir: '<%= offsetFromRoot %>dist/<%= projectRoot %>/client',
13+
},
14+
ssr: {
15+
outDir: '<%= offsetFromRoot %>dist/<%= projectRoot %>/server',
16+
},
17+
}),
18+
tsconfigPaths()
19+
],
1120
preview: {
1221
headers: {
1322
'Cache-Control': 'public, max-age=600',
1423
},
1524
},
16-
server: {
17-
open: true
18-
},
1925
<% if(setupVitest) { %> test: {
2026
globals: true,
2127
cache: {
@@ -24,7 +30,7 @@ export default defineConfig({
2430
environment: 'node',
2531
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
2632
coverage: {
27-
reportsDirectory: '<%= offsetFromRoot %>coverage/<%= appProjectRoot %>'
33+
reportsDirectory: '<%= offsetFromRoot %>coverage/<%= projectRoot %>'
2834
}
2935
}
3036
<% } %>

packages/qwik-nx/src/generators/application/generator.ts

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import {
55
GeneratorCallback,
66
joinPathFragments,
77
names,
8-
readProjectConfiguration,
98
Tree,
10-
updateProjectConfiguration,
119
} from '@nrwl/devkit';
1210
import { NormalizedSchema, normalizeOptions } from './utils/normalize-options';
1311
import { viteConfigurationGenerator } from '@nrwl/vite';
@@ -17,6 +15,7 @@ import { addStyledModuleDependencies } from '../../utils/add-styled-dependencies
1715
import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial';
1816
import { configureEslint } from '../../utils/configure-eslint';
1917
import { addCommonQwikDependencies } from '../../utils/add-common-qwik-dependencies';
18+
import { updateQwikApplicationProjectParams } from './utils/update-qwik-application-project-params';
2019

2120
function addFiles(tree: Tree, options: NormalizedSchema) {
2221
const templateOptions = {
@@ -27,7 +26,7 @@ function addFiles(tree: Tree, options: NormalizedSchema) {
2726
generateFiles(
2827
tree,
2928
joinPathFragments(__dirname, 'files'),
30-
options.appProjectRoot,
29+
options.projectRoot,
3130
templateOptions
3231
);
3332
}
@@ -36,10 +35,7 @@ async function configureVite(
3635
tree: Tree,
3736
options: NormalizedSchema
3837
): Promise<GeneratorCallback> {
39-
const tsConfigPath = joinPathFragments(
40-
options.appProjectRoot,
41-
'tsconfig.json'
42-
);
38+
const tsConfigPath = joinPathFragments(options.projectRoot, 'tsconfig.json');
4339
const tsConfig = tree.read(tsConfigPath);
4440
const includeVitest = options.unitTestRunner === 'vitest';
4541

@@ -51,17 +47,12 @@ async function configureVite(
5147
uiFramework: 'none',
5248
inSourceTests: false,
5349
});
54-
tree.delete(joinPathFragments(options.appProjectRoot, 'index.html'));
50+
tree.delete(joinPathFragments(options.projectRoot, 'index.html'));
5551

5652
// overwrite tsconfig back after "viteConfigurationGenerator"
5753
tree.write(tsConfigPath, tsConfig);
5854

59-
if (includeVitest) {
60-
const projectConfig = readProjectConfiguration(tree, options.projectName);
61-
const testTarget = projectConfig.targets['test'];
62-
testTarget.outputs = ['{workspaceRoot}/coverage/{projectRoot}'];
63-
updateProjectConfiguration(tree, options.projectName, projectConfig);
64-
}
55+
updateQwikApplicationProjectParams(tree, options);
6556

6657
return callback;
6758
}
@@ -71,12 +62,12 @@ export default async function (tree: Tree, options: QwikAppGeneratorSchema) {
7162
const tasks: GeneratorCallback[] = [];
7263

7364
addProjectConfiguration(tree, normalizedOptions.projectName, {
74-
root: normalizedOptions.appProjectRoot,
65+
root: normalizedOptions.projectRoot,
7566
name: normalizedOptions.projectName,
7667
projectType: 'application',
77-
sourceRoot: `${normalizedOptions.appProjectRoot}/src`,
78-
// TODO: revisit later, now "viteConfigurationGenerator" will fail if there's no build target specified
79-
targets: { build: { options: {} } },
68+
sourceRoot: `${normalizedOptions.projectRoot}/src`,
69+
// TODO: revisit later, @nrwl/vite configuration will throw if no relevant targets found
70+
targets: { build: { executor: '@nrwl/webpack:webpack', options: {} } },
8071
tags: normalizedOptions.parsedTags,
8172
});
8273

packages/qwik-nx/src/generators/application/utils/normalize-options.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { getRelativePathToRootTsConfig } from '@nrwl/workspace/src/utilities/typ
1010

1111
export interface NormalizedSchema extends QwikAppGeneratorSchema {
1212
projectName: string;
13-
appProjectRoot: string;
13+
projectRoot: string;
1414
offsetFromRoot: string;
1515
rootTsConfigPath: string;
1616
setupVitest: boolean;
@@ -36,7 +36,7 @@ export const normalizeOptions = (
3636
const appProjectName = normalizeProjectName(options);
3737

3838
const { appsDir } = getWorkspaceLayout(host);
39-
const appProjectRoot = normalizePath(`${appsDir}/${appDirectory}`);
39+
const projectRoot = normalizePath(`${appsDir}/${appDirectory}`);
4040

4141
const parsedTags = options.tags
4242
? options.tags.split(',').map((s) => s.trim())
@@ -50,9 +50,9 @@ export const normalizeOptions = (
5050
return {
5151
...options,
5252
projectName: appProjectName,
53-
appProjectRoot,
54-
offsetFromRoot: offsetFromRoot(appProjectRoot),
55-
rootTsConfigPath: getRelativePathToRootTsConfig(host, appProjectRoot),
53+
projectRoot,
54+
offsetFromRoot: offsetFromRoot(projectRoot),
55+
rootTsConfigPath: getRelativePathToRootTsConfig(host, projectRoot),
5656
styleExtension,
5757
setupVitest: options.unitTestRunner === 'vitest',
5858
parsedTags,
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import {
2+
readProjectConfiguration,
3+
Tree,
4+
updateProjectConfiguration,
5+
TargetConfiguration,
6+
} from '@nrwl/devkit';
7+
8+
export interface UpdateQwikAppConfigurationParams {
9+
projectName: string;
10+
projectRoot: string;
11+
}
12+
13+
export function updateQwikApplicationProjectParams(
14+
tree: Tree,
15+
params: UpdateQwikAppConfigurationParams
16+
): void {
17+
const projectConfig = readProjectConfiguration(tree, params.projectName);
18+
19+
projectConfig.targets['build'] = getBuildTarget(params);
20+
projectConfig.targets['build-ssr'] = getBuildSsrTarget(params);
21+
projectConfig.targets['preview'] = getPreviewTarget(params);
22+
23+
const serveTarget = projectConfig.targets['serve'];
24+
serveTarget.options['mode'] = 'ssr';
25+
26+
const testTarget = projectConfig.targets['test'];
27+
if (testTarget?.executor === '@nrwl/vite:test') {
28+
testTarget.outputs = ['{workspaceRoot}/coverage/{projectRoot}'];
29+
}
30+
31+
updateProjectConfiguration(tree, params.projectName, projectConfig);
32+
}
33+
34+
function getBuildTarget(
35+
params: UpdateQwikAppConfigurationParams
36+
): TargetConfiguration {
37+
return {
38+
executor: '@nrwl/vite:build',
39+
options: {
40+
outputPath: `dist/${params.projectRoot}`,
41+
configFile: `${params.projectRoot}/vite.config.ts`,
42+
},
43+
};
44+
}
45+
46+
function getBuildSsrTarget(
47+
params: UpdateQwikAppConfigurationParams
48+
): TargetConfiguration {
49+
return {
50+
executor: '@nrwl/vite:build',
51+
defaultConfiguration: 'preview',
52+
options: {
53+
outputPath: `dist/${params.projectRoot}`,
54+
},
55+
configurations: {
56+
preview: {
57+
ssr: 'src/entry.preview.tsx',
58+
mode: 'production',
59+
},
60+
},
61+
dependsOn: ['build'],
62+
};
63+
}
64+
65+
function getPreviewTarget(
66+
params: UpdateQwikAppConfigurationParams
67+
): TargetConfiguration {
68+
return {
69+
executor: 'nx:run-commands',
70+
options: {
71+
command: 'vite preview',
72+
cwd: `${params.projectRoot}`,
73+
},
74+
dependsOn: ['build-ssr'],
75+
};
76+
}

packages/qwik-nx/src/generators/library/files/.eslintrc.json.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"extends": [
3-
"<%= offsetFromRoot %>.eslintrc.json",
43
"eslint:recommended",
54
"plugin:@typescript-eslint/recommended",
6-
"plugin:qwik/recommended"
5+
"plugin:qwik/recommended",
6+
"<%= offsetFromRoot %>.eslintrc.json",
77
],
88
"parser": "@typescript-eslint/parser",
99
"parserOptions": {

0 commit comments

Comments
 (0)