@yolkai/nx-workspace
Version:
181 lines (179 loc) • 6.96 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const memfs_1 = require("memfs");
const literals_1 = require("@angular-devkit/core/src/utils/literals");
const project_graph_1 = require("./project-graph");
const project_graph_models_1 = require("./project-graph-models");
jest.mock('fs', () => require('memfs').fs);
jest.mock('../../utils/app-root', () => ({ appRootPath: '/root' }));
describe('project graph', () => {
let packageJson;
let workspaceJson;
let nxJson;
let tsConfigJson;
let filesJson;
let files;
beforeEach(() => {
packageJson = {
name: '@yolkai/nx-workspace-src',
dependencies: {
'happy-nrwl': '1.0.0'
},
devDependencies: {
'@yolkai/nx-workspace': '*'
}
};
workspaceJson = {
projects: {
demo: {
root: 'apps/demo/',
sourceRoot: 'apps/demo/src',
projectType: 'application'
},
'demo-e2e': {
root: 'apps/demo-e2e/',
sourceRoot: 'apps/demo-e2e/src',
projectType: 'application'
},
ui: {
root: 'libs/ui/',
sourceRoot: 'libs/ui/src',
projectType: 'library'
},
'shared-util': {
root: 'libs/shared/util/',
sourceRoot: 'libs/shared/util/src',
projectType: 'library'
},
'shared-util-data': {
root: 'libs/shared/util/data',
sourceRoot: 'libs/shared/util/data/src',
projectType: 'library'
},
'lazy-lib': {
root: 'libs/lazy-lib',
sourceRoot: 'libs/lazy-lib',
projectType: 'library'
},
api: {
root: 'apps/api/',
sourceRoot: 'apps/api/src',
projectType: 'application'
}
}
};
nxJson = {
npmScope: 'nrwl',
projects: {
api: { tags: [] },
demo: { tags: [], implicitDependencies: ['api'] },
'demo-e2e': { tags: [] },
ui: { tags: [] },
'shared-util': { tags: [] },
'shared-util-data': { tags: [] },
'lazy-lib': { tags: [] }
}
};
tsConfigJson = {
compilerOptions: {
baseUrl: '.',
paths: {
'@yolkai/nx-shared/util': ['libs/shared/util/src/index.ts'],
'@yolkai/nx-shared-util-data': ['libs/shared/util/data/src/index.ts'],
'@yolkai/nx-ui': ['libs/ui/src/index.ts'],
'@yolkai/nx-lazy-lib': ['libs/lazy-lib/src/index.ts']
}
}
};
filesJson = {
'./apps/api/src/index.ts': literals_1.stripIndents `
console.log('starting server');
`,
'./apps/demo/src/index.ts': literals_1.stripIndents `
import * as ui from '@yolkai/nx-ui';
import * as data from '@yolkai/nx-shared-util-data;
const s = { loadChildren: '@yolkai/nx-lazy-lib#LAZY' }
`,
'./apps/demo-e2e/src/integration/app.spec.ts': literals_1.stripIndents `
describe('whatever', () => {});
`,
'./libs/ui/src/index.ts': literals_1.stripIndents `
import * as util from '@yolkai/shared/util';
`,
'./libs/shared/util/src/index.ts': literals_1.stripIndents `
import * as happyNrwl from 'happy-nrwl';
`,
'./libs/shared/util/data/src/index.ts': literals_1.stripIndents `
export const SHARED_DATA = 'shared data';
`,
'./libs/lazy-lib/src/index.ts': literals_1.stripIndents `
export const LAZY = 'lazy lib';
`,
'./package.json': JSON.stringify(packageJson),
'./nx.json': JSON.stringify(nxJson),
'./workspace.json': JSON.stringify(workspaceJson),
'./tsconfig.json': JSON.stringify(tsConfigJson)
};
files = Object.keys(filesJson).map(f => ({
file: f,
ext: path_1.extname(f),
mtime: 1
}));
memfs_1.vol.fromJSON(filesJson, '/root');
});
it('should create nodes and dependencies with workspace projects', () => {
const graph = project_graph_1.createProjectGraph();
expect(graph.nodes).toMatchObject({
api: { name: 'api', type: 'app' },
'demo-e2e': { name: 'demo-e2e', type: 'e2e' },
demo: { name: 'demo', type: 'app' },
ui: { name: 'ui', type: 'lib' },
'shared-util': { name: 'shared-util', type: 'lib' },
'shared-util-data': { name: 'shared-util-data', type: 'lib' },
'lazy-lib': { name: 'lazy-lib', type: 'lib' }
});
expect(graph.dependencies).toMatchObject({
'demo-e2e': [
{ type: project_graph_models_1.DependencyType.implicit, source: 'demo-e2e', target: 'demo' }
],
demo: [
{ type: project_graph_models_1.DependencyType.static, source: 'demo', target: 'ui' },
{
type: project_graph_models_1.DependencyType.static,
source: 'demo',
target: 'shared-util-data'
},
{
type: project_graph_models_1.DependencyType.dynamic,
source: 'demo',
target: 'lazy-lib'
},
{ type: project_graph_models_1.DependencyType.implicit, source: 'demo', target: 'api' }
],
ui: [{ type: project_graph_models_1.DependencyType.static, source: 'ui', target: 'shared-util' }]
});
});
it('should handle circular dependencies', () => {
filesJson['./libs/shared/util/src/index.ts'] = literals_1.stripIndents `
import * as ui from '@yolkai/ui';
import * as happyNrwl from 'happy-nrwl';
`;
memfs_1.vol.fromJSON(filesJson, '/root');
const graph = project_graph_1.createProjectGraph();
expect(graph.dependencies['shared-util']).toEqual([
{
type: project_graph_models_1.DependencyType.static,
source: 'shared-util',
target: 'ui'
}
]);
expect(graph.dependencies['ui']).toEqual([
{
type: project_graph_models_1.DependencyType.static,
source: 'ui',
target: 'shared-util'
}
]);
});
});