Skip to content

Commit

Permalink
fix(nx-plugin): make nx plugin use 16.1
Browse files Browse the repository at this point in the history
currently the nx plugin let the nx angular init generator
pick the version of angular to be installed. this meant
that when the nx angular init generator picks 16.0.0, due
to ~16.0.0 version in the nx repository, our created analog
application did not work anymore. this fix makes sure the
correct version ^16.1.0 is picked by nx tooling. unfortunately,
semver does not like ^ in its versions so we have to remove it
before finding the major version or ensuring compatibility.
  • Loading branch information
goetzrobin committed Jun 20, 2023
1 parent 2adade4 commit 15efeab
Show file tree
Hide file tree
Showing 20 changed files with 934 additions and 272 deletions.
2 changes: 1 addition & 1 deletion apps/nx-plugin-e2e/tests/nx-plugin.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ describe('nx-plugin e2e', () => {

it('should create hello-world', async () => {
const project = uniq('app');
const res = await runNxCommandAsync(
await runNxCommandAsync(
`generate @analogjs/platform:app ${project} --addTailwind=true --addTRPC=true`
);
copyNodeModules(['@analogjs']);
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
"@babel/core": "^7.21.8",
"@mdx-js/react": "1.6.22",
"@nx/angular": "16.1.0",
"@nrwl/angular": "16.1.0",
"@nx/devkit": "^16.2.1",
"@trpc/client": "^10.25.0",
"@trpc/server": "^10.25.0",
Expand Down
332 changes: 291 additions & 41 deletions packages/nx-plugin/src/generators/app/generator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,15 @@ import {
import generator from './generator';
import { AnalogNxApplicationGeneratorOptions } from './schema';
import { addDependenciesToPackageJson } from '@nx/devkit';
import { test } from 'vitest';

describe('nx-plugin generator', () => {
const setup = async (options: AnalogNxApplicationGeneratorOptions) => {
const setup = async (
options: AnalogNxApplicationGeneratorOptions,
nxVersion = '16.1.0'
) => {
const tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
addDependenciesToPackageJson(tree, { nx: '16.0.0' }, {});
addDependenciesToPackageJson(tree, {}, { nx: nxVersion });
await generator(tree, options);
const config = readProjectConfiguration(tree, options.analogAppName);
return {
Expand All @@ -22,15 +26,93 @@ describe('nx-plugin generator', () => {
};
};

const verifyCoreDependencies = (
//TODO: fix version here and in source files
const verifyCoreDependenciesV15_2_0 = (
dependencies: Record<string, string>,
devDependencies: Record<string, string>
) => {
expect(dependencies['@analogjs/content']).toBe('^0.2.0-beta.16');
expect(dependencies['@analogjs/router']).toBe('^0.2.0-beta.16');
expect(dependencies['@angular/platform-server']).toBe(
dependencies['@angular/core']
);
expect(dependencies['front-matter']).toBe('^4.0.2');
expect(dependencies['marked']).toBe('^5.0.2');
expect(dependencies['prismjs']).toBe('^1.29.0');

expect(devDependencies['@analogjs/platform']).toBe('0.1.0-beta.23');
expect(devDependencies['@nx/vite']).toBe('^15.7.0');
expect(devDependencies['jsdom']).toBe('^20.0.0');
expect(devDependencies['typescript']).toBe('~4.8.4');
expect(devDependencies['vite']).toBe('^4.0.3');
expect(devDependencies['vite-tsconfig-paths']).toBe('^4.0.2');
expect(devDependencies['vitest']).toBe('^0.31.0');
};

const verifyCoreDependenciesV15_8_0 = (
dependencies: Record<string, string>,
devDependencies: Record<string, string>
) => {
expect(dependencies['@analogjs/content']).toBe('^0.2.0-beta.16');
expect(dependencies['@analogjs/router']).toBe('^0.2.0-beta.16');
expect(dependencies['@angular/platform-server']).toBe(
dependencies['@angular/core']
);
expect(dependencies['front-matter']).toBe('^4.0.2');
expect(dependencies['marked']).toBe('^5.0.2');
expect(dependencies['prismjs']).toBe('^1.29.0');

expect(devDependencies['@analogjs/platform']).toBe('^0.2.0-beta.16');
expect(devDependencies['@nx/vite']).toBe('^16.0.0');
expect(devDependencies['jsdom']).toBe('^20.0.0');
expect(devDependencies['typescript']).toBe('~5.0.2');
expect(devDependencies['vite']).toBe('^4.0.3');
expect(devDependencies['vite-tsconfig-paths']).toBe('^4.0.2');
expect(devDependencies['vitest']).toBe('^0.31.0');
};

const verifyCoreDependenciesV16_1_0 = (
dependencies: Record<string, string>,
devDependencies: Record<string, string>
) => {
expect(dependencies['@analogjs/content']).toBe('^0.2.0-beta.16');
expect(dependencies['@analogjs/router']).toBe('^0.2.0-beta.16');
expect(dependencies['@angular/platform-server']).toBe(
dependencies['@angular/core']
);
expect(dependencies['front-matter']).toBe('^4.0.2');
expect(dependencies['marked']).toBe('^5.0.2');
expect(dependencies['prismjs']).toBe('^1.29.0');

expect(devDependencies['@analogjs/platform']).toBe('^0.2.0-beta.16');
expect(devDependencies['@nx/vite']).toBe('^16.0.0');
expect(devDependencies['jsdom']).toBe('^20.0.0');
expect(devDependencies['typescript']).toBe('~5.0.2');
expect(devDependencies['vite']).toBe('^4.0.3');
expect(devDependencies['vite-tsconfig-paths']).toBe('^4.0.2');
expect(devDependencies['vitest']).toBe('^0.31.0');
};

const verifyCoreDependenciesV_LATEST = (
dependencies: Record<string, string>,
devDependencies: Record<string, string>
) => {
expect(dependencies['@analogjs/router']).toBe('0.2.0-beta.15');
expect(dependencies['@angular/platform-server']).toBe('~16.0.0');
expect(dependencies['@analogjs/content']).toBe('^0.2.0-beta.16');
expect(dependencies['@analogjs/router']).toBe('^0.2.0-beta.16');
expect(dependencies['@angular/platform-server']).toBe(
dependencies['@angular/core']
);
expect(dependencies['front-matter']).toBe('^4.0.2');
expect(dependencies['marked']).toBe('^5.0.2');
expect(dependencies['prismjs']).toBe('^1.29.0');

expect(devDependencies['@analogjs/platform']).toBe('0.2.0-beta.15');
expect(devDependencies['@analogjs/platform']).toBe('^0.2.0-beta.16');
expect(devDependencies['@nx/vite']).toBe('^16.0.0');
expect(devDependencies['jsdom']).toBe('^20.0.0');
expect(devDependencies['typescript']).toBe('~5.0.2');
expect(devDependencies['vite']).toBe('^4.0.3');
expect(devDependencies['vite-tsconfig-paths']).toBe('^4.0.2');
expect(devDependencies['vitest']).toBe('^0.31.0');
};

const verifyConfig = (config: ProjectConfiguration, name: string) => {
Expand All @@ -49,29 +131,10 @@ describe('nx-plugin generator', () => {
expect(hasWelcomeComponentFile).toBeTruthy();
};

it('creates a default analogjs app in the source directory', async () => {
const analogAppName = 'analog';
const { config, tree } = await setup({ analogAppName });
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependencies(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
});

it('creates an analogjs app in the source directory with tailwind set up', async () => {
const analogAppName = 'tailwind-app';
const { config, tree } = await setup({ analogAppName, addTailwind: true });
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependencies(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);

const verifyTailwindIsSetUp = (
tree: Tree,
devDependencies: Record<string, string>
) => {
expect(devDependencies['tailwindcss']).toBeDefined();
const hasTailwindConfigFile = tree.exists(
'apps/tailwind-app/tailwind.config.js'
Expand All @@ -81,19 +144,12 @@ describe('nx-plugin generator', () => {
);
expect(hasTailwindConfigFile).toBeTruthy();
expect(hasPostCSSConfigFile).toBeTruthy();
});

it('creates an analogjs app in the source directory with trpc set up', async () => {
const analogAppName = 'trpc-app';
const { config, tree } = await setup({ analogAppName, addTRPC: true });
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependencies(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
};

const verifyTrpcIsSetUp = (
tree: Tree,
dependencies: Record<string, string>
) => {
expect(dependencies['@analogjs/trpc']).toBeDefined();
const hasTrpcClientFile = tree.exists('apps/trpc-app/src/trpc-client.ts');
const hasNoteFile = tree.exists('apps/trpc-app/src/note.ts');
Expand All @@ -112,5 +168,199 @@ describe('nx-plugin generator', () => {
.includes('injectTrpcClient');
expect(providesTrpcClient).toBeTruthy();
expect(injectsTrpcClient).toBeTruthy();
};

describe('Nx latest', () => {
it('creates a default analogjs app in the source directory', async () => {
const analogAppName = 'analog';
const { config, tree } = await setup({ analogAppName });
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV_LATEST(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
});

it('creates an analogjs app in the source directory with tailwind set up', async () => {
const analogAppName = 'tailwind-app';
const { config, tree } = await setup({
analogAppName,
addTailwind: true,
});
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV_LATEST(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);

verifyTailwindIsSetUp(tree, devDependencies);
});

it('creates an analogjs app in the source directory with trpc set up', async () => {
const analogAppName = 'trpc-app';
const { config, tree } = await setup({ analogAppName, addTRPC: true });
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV_LATEST(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
verifyTrpcIsSetUp(tree, dependencies);
});
});

describe('Nx 16.1.0', () => {
it('creates a default analogjs app in the source directory', async () => {
const analogAppName = 'analog';
const { config, tree } = await setup({ analogAppName }, '16.1.0');
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV16_1_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
});

it('creates an analogjs app in the source directory with tailwind set up', async () => {
const analogAppName = 'tailwind-app';
const { config, tree } = await setup(
{
analogAppName,
addTailwind: true,
},
'16.1.0'
);
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV16_1_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);

verifyTailwindIsSetUp(tree, devDependencies);
});

it('creates an analogjs app in the source directory with trpc set up', async () => {
const analogAppName = 'trpc-app';
const { config, tree } = await setup(
{ analogAppName, addTRPC: true },
'16.1.0'
);
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV16_1_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
verifyTrpcIsSetUp(tree, dependencies);
});
});

describe('Nx 15.8.0', () => {
test.skip('creates a default analogjs app in the source directory', async () => {
const analogAppName = 'analog';
const { config, tree } = await setup({ analogAppName }, '15.8.0');
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV15_8_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
});

test.skip('creates an analogjs app in the source directory with tailwind set up', async () => {
const analogAppName = 'tailwind-app';
const { config, tree } = await setup(
{
analogAppName,
addTailwind: true,
},
'15.8.0'
);
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV15_8_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);

verifyTailwindIsSetUp(tree, devDependencies);
});

test.skip('creates an analogjs app in the source directory with trpc set up', async () => {
const analogAppName = 'trpc-app';
const { config, tree } = await setup(
{ analogAppName, addTRPC: true },
'15.8.0'
);
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV15_8_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
verifyTrpcIsSetUp(tree, dependencies);
});
});

describe('Nx 15.2.0', () => {
test.skip('creates a default analogjs app in the source directory', async () => {
const analogAppName = 'analog';
const { config, tree } = await setup({ analogAppName }, '15.2.0');
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV15_2_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
});

test.skip('creates an analogjs app in the source directory with tailwind set up', async () => {
const analogAppName = 'tailwind-app';
const { config, tree } = await setup(
{
analogAppName,
addTailwind: true,
},
'15.2.0'
);
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV15_2_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);

verifyTailwindIsSetUp(tree, devDependencies);
});

test.skip('creates an analogjs app in the source directory with trpc set up', async () => {
const analogAppName = 'trpc-app';
const { config, tree } = await setup(
{ analogAppName, addTRPC: true },
'15.2.0'
);
const { dependencies, devDependencies } = readJson(tree, 'package.json');

verifyCoreDependenciesV15_2_0(dependencies, devDependencies);

verifyConfig(config, analogAppName);

verifyHomePageExists(tree, analogAppName);
verifyTrpcIsSetUp(tree, dependencies);
});
});
});
Loading

0 comments on commit 15efeab

Please sign in to comment.