@cypress/schematic
Version:
Official Cypress schematic for the Angular CLI
111 lines • 4.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAngularJsonValue = exports.createTemplate = exports.getDirectoriesAndCreateSpecs = exports.getLatestNodeVersion = exports.getAngularSemverVersion = void 0;
const fs_1 = require("fs");
const path_1 = require("path");
const core_1 = require("@angular-devkit/core");
const schematics_1 = require("@angular-devkit/schematics");
const https_1 = require("https");
const semver_1 = require("semver");
const dependencies_1 = require("./dependencies");
const jsonFile_1 = require("./jsonFile");
function getAngularSemverVersion(tree) {
const packageNode = (0, dependencies_1.getPackageJsonDependency)(tree, '@angular/core');
try {
if (packageNode !== null) {
const version = packageNode && packageNode.version ?
(0, semver_1.minVersion)(packageNode.version) : null;
return version;
}
return null;
}
catch (e) {
return null;
}
}
exports.getAngularSemverVersion = getAngularSemverVersion;
/**
* Attempt to retrieve the latest package version from NPM
* Return an optional "latest" version in case of error
* @param packageName
*/
function getLatestNodeVersion(packageName) {
const DEFAULT_VERSION = 'latest';
return new Promise((resolve) => {
return (0, https_1.get)(`https://registry.npmjs.org/${packageName}`, (res) => {
let rawData = '';
res.on('data', (chunk) => (rawData += chunk));
res.on('end', () => {
try {
const response = JSON.parse(rawData);
const version = (response && response['dist-tags']) || {};
resolve(buildPackage(packageName, version.latest));
}
catch (e) {
resolve(buildPackage(packageName));
}
});
}).on('error', () => resolve(buildPackage(packageName)));
});
function buildPackage(name, version = DEFAULT_VERSION) {
return { name, version };
}
}
exports.getLatestNodeVersion = getLatestNodeVersion;
const ctSpecContent = ({ componentName, componentFilename }) => {
return `import { ${componentName} } from './${componentFilename}.component'\n
describe('${componentName}', () => {
it('should mount', () => {
cy.mount(${componentName})
})
})
`;
};
function generateCTSpec({ tree, appPath, component }) {
const buffer = tree.read(`${appPath}/${component['name']}`);
const componentString = buffer === null || buffer === void 0 ? void 0 : buffer.toString();
const componentMatch = componentString === null || componentString === void 0 ? void 0 : componentString.match(/(?<=class )\S+/g);
const componentFilename = component['name'].split('.')[0];
const componentName = componentMatch ? componentMatch[0] : componentFilename;
console.log(`Creating new component spec for: ${componentName}\n`);
return tree.create(`${appPath}/${componentFilename}.component.cy.ts`, ctSpecContent({ componentName, componentFilename }));
}
function getDirectoriesAndCreateSpecs({ appPath, tree }) {
let components = [];
let directories = [];
const projectPath = (0, path_1.resolve)((0, core_1.getSystemPath)((0, core_1.normalize)('')));
const contents = (0, fs_1.readdirSync)((0, path_1.resolve)(`${projectPath}/${appPath}`), { withFileTypes: true });
if (contents) {
components = contents.filter((file) => file['name'].endsWith(`component.ts`));
directories = contents.filter((file) => file.isDirectory());
if (components) {
components.map((component) => {
return generateCTSpec({ tree, appPath, component });
});
}
if (directories) {
directories.forEach((directory) => {
return getDirectoriesAndCreateSpecs({ tree, appPath: `${appPath}/${directory['name']}` });
});
}
}
}
exports.getDirectoriesAndCreateSpecs = getDirectoriesAndCreateSpecs;
function createTemplate({ templatePath, options }) {
return (0, schematics_1.apply)((0, schematics_1.url)(templatePath), [
(0, schematics_1.applyTemplates)({
classify: core_1.strings.classify,
dasherize: core_1.strings.dasherize,
name: options.component ? `${options.name}Component` : options.name,
fileName: options.filename || options.name,
}),
(0, schematics_1.move)((0, core_1.normalize)(options.path)),
]);
}
exports.createTemplate = createTemplate;
function getAngularJsonValue(tree) {
const angularJson = new jsonFile_1.JSONFile(tree, './angular.json');
return angularJson.get([]);
}
exports.getAngularJsonValue = getAngularJsonValue;
//# sourceMappingURL=index.js.map