Skip to content

Commit

Permalink
feat(core): Add support for versioning in the preset package name (#8146
Browse files Browse the repository at this point in the history
)
  • Loading branch information
ndcunningham committed Dec 14, 2021
1 parent e111ed2 commit 18b3d61
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
5 changes: 4 additions & 1 deletion packages/create-nx-workspace/bin/create-nx-workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,10 @@ function determineWorkspaceName(parsedArgs: any): Promise<string> {

async function determineThirdPartyPackage({ preset }) {
if (preset && Object.values(Preset).indexOf(preset) === -1) {
const validateResult = validateNpmPackage(preset);
const packageName = preset.match(/.+@/)
? preset[0] + preset.substring(1).split('@')[0]
: preset;
const validateResult = validateNpmPackage(packageName);
if (validateResult.validForNewPackages) {
return Promise.resolve(preset);
} else {
Expand Down
33 changes: 25 additions & 8 deletions packages/workspace/src/generators/new/new.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ export interface Schema {
packageManager?: PackageManager;
}

function generatePreset(host: Tree, opts: Schema) {
export interface NormalizedSchema extends Schema {
presetVersion?: string;
}

function generatePreset(host: Tree, opts: NormalizedSchema) {
const cliCommand = opts.cli === 'angular' ? 'ng' : 'nx';
const parsedArgs = yargsParser(process.argv, {
boolean: ['interactive'],
Expand All @@ -70,7 +74,7 @@ function generatePreset(host: Tree, opts: Schema) {
});
});

function getPresetArgs(options: Schema) {
function getPresetArgs(options: NormalizedSchema) {
if (Object.values(Preset).some((val) => val === options.preset)) {
// supported presets
return getDefaultArgs(options);
Expand Down Expand Up @@ -241,7 +245,7 @@ function addCloudDependencies(host: Tree, options: Schema) {
}
}

function getPresetDependencies(preset: string) {
function getPresetDependencies(preset: string, version?: string) {
switch (preset) {
case Preset.Angular:
return { dependencies: { '@nrwl/angular': nxVersion }, dev: {} };
Expand Down Expand Up @@ -283,17 +287,22 @@ function getPresetDependencies(preset: string) {
return { dependencies: {}, dev: { '@nrwl/web': nxVersion } };

default: {
const version = getNpmPackageVersion(preset);
return { dev: {}, dependencies: { [preset]: version } };
return {
dev: {},
dependencies: { [preset]: version ?? getNpmPackageVersion(preset) },
};
}
}
}

function addPresetDependencies(host: Tree, options: Schema) {
function addPresetDependencies(host: Tree, options: NormalizedSchema) {
if (options.preset === Preset.Empty || options.preset === Preset.NPM) {
return;
}
const { dependencies, dev } = getPresetDependencies(options.preset);
const { dependencies, dev } = getPresetDependencies(
options.preset,
options.presetVersion
);
return addDependenciesToPackageJson(
host,
dependencies,
Expand All @@ -302,11 +311,19 @@ function addPresetDependencies(host: Tree, options: Schema) {
);
}

function normalizeOptions(options: Schema): Schema {
function normalizeOptions(options: NormalizedSchema): NormalizedSchema {
options.name = names(options.name).fileName;
if (!options.directory) {
options.directory = options.name;
}
const { preset } = options;
if (preset.match(/.+@/)) {
// If the preset already contains a version in the name
// -- my-package@2.0.1
// -- @scope/package@version
options.preset = preset[0] + preset.substring(1).split('@')[0];
options.presetVersion = preset.substring(1).split('@')[1];
}
return options;
}

Expand Down

0 comments on commit 18b3d61

Please sign in to comment.