77 lines
1.9 KiB
TypeScript
77 lines
1.9 KiB
TypeScript
import {
|
|
addProjectConfiguration,
|
|
formatFiles,
|
|
generateFiles,
|
|
getWorkspaceLayout,
|
|
names,
|
|
offsetFromRoot,
|
|
Tree,
|
|
} from '@nx/devkit';
|
|
import * as path from 'path';
|
|
import { AddWasmReferenceGeneratorSchema } from './schema';
|
|
|
|
interface NormalizedSchema extends AddWasmReferenceGeneratorSchema {
|
|
projectName: string;
|
|
projectRoot: string;
|
|
projectDirectory: string;
|
|
parsedTags: string[];
|
|
}
|
|
|
|
function normalizeOptions(
|
|
tree: Tree,
|
|
options: AddWasmReferenceGeneratorSchema
|
|
): NormalizedSchema {
|
|
const name = names(options.name).fileName;
|
|
const projectDirectory = options.directory
|
|
? `${names(options.directory).fileName}/${name}`
|
|
: name;
|
|
const projectName = projectDirectory.replace(new RegExp('/', 'g'), '-');
|
|
const projectRoot = `${getWorkspaceLayout(tree).libsDir}/${projectDirectory}`;
|
|
const parsedTags = options.tags
|
|
? options.tags.split(',').map((s) => s.trim())
|
|
: [];
|
|
|
|
return {
|
|
...options,
|
|
projectName,
|
|
projectRoot,
|
|
projectDirectory,
|
|
parsedTags,
|
|
};
|
|
}
|
|
|
|
function addFiles(tree: Tree, options: NormalizedSchema) {
|
|
const templateOptions = {
|
|
...options,
|
|
...names(options.name),
|
|
offsetFromRoot: offsetFromRoot(options.projectRoot),
|
|
template: '',
|
|
};
|
|
generateFiles(
|
|
tree,
|
|
path.join(__dirname, 'files'),
|
|
options.projectRoot,
|
|
templateOptions
|
|
);
|
|
}
|
|
|
|
export default async function (
|
|
tree: Tree,
|
|
options: AddWasmReferenceGeneratorSchema
|
|
) {
|
|
const normalizedOptions = normalizeOptions(tree, options);
|
|
addProjectConfiguration(tree, normalizedOptions.projectName, {
|
|
root: normalizedOptions.projectRoot,
|
|
projectType: 'library',
|
|
sourceRoot: `${normalizedOptions.projectRoot}/src`,
|
|
targets: {
|
|
build: {
|
|
executor: '@unbox-x/nx-rust:build',
|
|
},
|
|
},
|
|
tags: normalizedOptions.parsedTags,
|
|
});
|
|
addFiles(tree, normalizedOptions);
|
|
await formatFiles(tree);
|
|
}
|