@nxext/stencil
Version:
Nx plugin for stenciljs
64 lines • 3.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.addReactGenerator = addReactGenerator;
const tslib_1 = require("tslib");
const devkit_1 = require("@nx/devkit");
const js_1 = require("@nx/js");
const eslint_1 = require("@nx/eslint");
const versions_1 = require("../../../utils/versions");
const fileutils_1 = require("../../../utils/fileutils");
const common_1 = require("@nxext/common");
const stencil_core_utils_1 = require("../../../stencil-core-utils");
const calculate_stencil_source_options_1 = require("../lib/calculate-stencil-source-options");
function prepareReactLibrary(host, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { libsDir } = (0, devkit_1.getWorkspaceLayout)(host);
const reactProjectName = `${options.projectName}-react`;
const reactProjectDir = `libs/${reactProjectName}`;
const jsInitTask = yield (0, js_1.initGenerator)(host, Object.assign(Object.assign({}, options), { tsConfigName: 'tsconfig.base.json', skipFormat: true }));
(0, devkit_1.ensurePackage)('@nx/react', devkit_1.NX_VERSION);
const { libraryGenerator } = yield Promise.resolve().then(() => require('@nx/react'));
const libraryTarget = yield libraryGenerator(host, {
directory: reactProjectDir,
style: 'css',
publishable: options.publishable,
bundler: options.publishable ? 'rollup' : 'none',
importPath: options.importPath,
component: false,
skipTsConfig: false,
skipFormat: true,
unitTestRunner: 'jest',
linter: eslint_1.Linter.EsLint,
});
yield (0, devkit_1.addDependenciesToPackageJson)(host, {}, {
'@stencil/react-output-target': versions_1.STENCIL_OUTPUTTARGET_VERSION['react'],
});
host.write(`${libsDir}/${reactProjectName}/src/index.ts`, `export * from './generated/components';`);
return (0, devkit_1.runTasksInSerial)(jsInitTask, libraryTarget);
});
}
function addReactOutputtarget(tree, projectName, stencilProjectConfig, stencilConfigPath, stencilConfigSource, packageName) {
const reactProjectConfig = (0, devkit_1.readProjectConfiguration)(tree, `${projectName}-react`);
const realtivePath = (0, fileutils_1.getRelativePath)((0, fileutils_1.getDistDir)(stencilProjectConfig.root), reactProjectConfig.root);
const changes = (0, devkit_1.applyChangesToString)(stencilConfigSource.text, [
...(0, common_1.addImport)(stencilConfigSource, `import { reactOutputTarget } from '@stencil/react-output-target';`),
...(0, stencil_core_utils_1.addOutputTarget)(stencilConfigSource, `
reactOutputTarget({
componentCorePackage: '${packageName}',
proxiesFile: '${realtivePath}/src/generated/components.ts',
includeDefineCustomElements: true,
})
`),
]);
tree.write(stencilConfigPath, changes);
}
function addReactGenerator(host, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const libraryTarget = yield prepareReactLibrary(host, options);
const { stencilProjectConfig, stencilConfigPath, stencilConfigSource, packageName, } = (0, calculate_stencil_source_options_1.calculateStencilSourceOptions)(host, options.projectName);
addReactOutputtarget(host, options.projectName, stencilProjectConfig, stencilConfigPath, stencilConfigSource, packageName);
return libraryTarget;
});
}
exports.default = addReactGenerator;
//# sourceMappingURL=generator.js.map