UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

110 lines 4.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const spruce_event_utils_1 = require("@sprucelabs/spruce-event-utils"); const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils"); const SpruceError_1 = __importDefault(require("../../errors/SpruceError")); const tsConfig_utility_1 = __importDefault(require("../../utilities/tsConfig.utility")); const AbstractFeature_1 = __importDefault(require("../AbstractFeature")); const ParentTestFinder_1 = __importDefault(require("../error/ParentTestFinder")); class TestFeature extends AbstractFeature_1.default { nameReadable = 'Testing'; description = 'Test first. Test everything! 💪'; code = 'test'; dependencies = [ { code: 'skill', isRequired: false }, { code: 'node', isRequired: true }, ]; packageDependencies = [ { name: '@sprucelabs/test@latest', isDev: true }, { name: '@sprucelabs/test-utils@latest', isDev: true }, { name: '@sprucelabs/jest-json-reporter@latest', isDev: true }, { name: 'jest-circus', isDev: true }, { name: 'jest', isDev: true }, ]; actionsDir = spruce_skill_utils_1.diskUtil.resolvePath(__dirname, 'actions'); async afterPackageInstall() { const service = this.Service('pkg'); this.configureJest(service); this.configureScripts(service); this.configureTsConfig(); return {}; } configureTsConfig() { try { const tsConfig = tsConfig_utility_1.default.readConfig(this.cwd); if (!tsConfig.compilerOptions.experimentalDecorators) { tsConfig.compilerOptions.experimentalDecorators = true; tsConfig_utility_1.default.setCompilerOption(this.cwd, 'experimentalDecorators', true); } } catch (err) { //@ts-ignore } } configureScripts(service) { let scripts = service.get('scripts'); if (!scripts) { scripts = {}; } if (!scripts.test) { scripts.test = 'jest'; scripts['watch.tests'] = 'jest --watch'; service.set({ path: 'scripts', value: scripts }); } } configureJest(service) { const jestConfig = { testRunner: 'jest-circus/runner', maxWorkers: 4, testTimeout: 120000, testEnvironment: 'node', testPathIgnorePatterns: [ '<rootDir>/tmp/', '<rootDir>/src/', '<rootDir>/node_modules/', '<rootDir>/build/__tests__/testDirsAndFiles/', ], testMatch: ['**/__tests__/**/*.test.js?(x)'], moduleNameMapper: { '^#spruce/(.*)$': '<rootDir>/build/.spruce/$1', }, }; const existingJest = service.get('jest'); if (!existingJest) { service.set({ path: 'jest', value: jestConfig }); } } async buildParentClassCandidates() { const parentFinder = new ParentTestFinder_1.default(this.cwd); const candidates = (await parentFinder.findAbstractTests()).map((a) => ({ ...a, label: a.name })); const results = await this.emitter.emit('test.register-abstract-test-classes'); const { payloads } = spruce_event_utils_1.eventResponseUtil.getAllResponsePayloadsAndErrors(results, SpruceError_1.default); for (const payload of payloads) { const { abstractClasses } = payload; for (const ac of abstractClasses) { const a = { ...ac, isDefaultExport: false }; if (ac.featureCode) { const isInstalled = await this.features.isInstalled(ac.featureCode); if (!isInstalled) { a.label = `${a.label} (requires install)`; } } candidates.push(a); } } candidates.sort((a, b) => { if (a.label > b.label) { return 1; } else { return -1; } }); return candidates; } } exports.default = TestFeature; //# sourceMappingURL=TestFeature.js.map