UNPKG

@yolkai/nx-workspace

Version:

Extensible Dev Tools for Monorepos

181 lines (179 loc) 6.96 kB
"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' } ]); }); });