UNPKG

ember-cli-blueprint-test-helpers

Version:

Blueprint test helpers for ember-cli. Mocks ember-cli for generate and destroy commands.

67 lines (52 loc) 1.93 kB
'use strict'; const fs = require('fs'); const path = require('path'); const ember = require('./helpers/ember'); const modifyPackages = require('./modify-packages'); const rethrowFromErrorLog = require('./rethrow-from-error-log'); const { enableModuleUnification, disableModuleUnification } = require('./helpers/module-unification-experiment'); /** * Create a new Ember.js app or addon in the current working directory. * * @param {Object} [options] optional parameters * @param {String} [options.target='app'] the type of project to create (`app`, `addon` or `in-repo-addon`) * @returns {Promise} */ module.exports = function(options) { options = options || {}; let target = options.target || 'app'; let isAddon = (target === 'addon'); let projectName = isAddon ? 'my-addon' : 'my-app'; let command = isAddon ? 'addon' : 'new'; let cliOptions = { disableDependencyChecker: true }; let originalENV = enableModuleUnification(options.isModuleUnification); return ember([command, projectName, '--skip-npm', '--skip-bower'], cliOptions) .then(generateInRepoAddon(target)) .then(linkAddon) .catch(rethrowFromErrorLog) .finally(() => disableModuleUnification(originalENV)); }; function generateInRepoAddon(target) { return function() { if (target === 'in-repo-addon') { return ember(['generate', 'in-repo-addon', 'my-addon']) } } } function linkAddon() { let projectPath = path.resolve(process.cwd(), '../../..'); let projectName = require(path.resolve(projectPath, 'package.json')).name; let symlinkPath = path.resolve(projectPath, 'node_modules', projectName); if (!fs.existsSync(path.resolve(symlinkPath, '..'))) { fs.mkdirSync(path.resolve(symlinkPath, '..')); } if (!fs.existsSync(path.resolve(symlinkPath, 'package.json'))) { fs.symlinkSync(projectPath, symlinkPath, 'dir'); } modifyPackages([{ name: projectName, dev: true }]); }