powershell/plugins/powershell-v2.ts (126 lines of code) (raw):
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
//import { codemodel } from '@azure-tools/codemodel-v3';
import {
deserialize,
applyOverrides,
copyResources,
copyBinaryResources,
safeEval,
} from '@azure-tools/codegen';
import { AutorestExtensionHost as Host } from '@autorest/extension-base';
import { join } from 'path';
import { Project } from '../internal/project';
import { generatePsm1 } from '../generators/psm1';
import { generateCsproj } from '../generators/csproj';
import { generatePsm1Custom } from '../generators/psm1.custom';
import { generateInputHandlersCustom } from '../generators/inputhandler.custom';
import { generatePsm1Internal } from '../generators/psm1.internal';
import { generateNuspec } from '../generators/nuspec';
import { generateGitIgnore } from '../generators/gitignore';
import { generateGitAttributes } from '../generators/gitattributes';
import { generateReadme } from '../generators/readme';
import { generateScriptCmdlets } from '../generators/script-cmdlet';
import { TspHost } from '../utils/tsp-host';
import { ModelState } from '../utils/model-state';
import { PwshModel } from '../utils/PwshModel';
import { generateAssemblyInfo } from '../generators/AssemblyInfo';
const sourceFileCSharp = 'source-file-csharp';
const resources = `${__dirname}/../../resources`;
async function copyRequiredFiles(project: Project) {
const transformOutput = async (input: string) => {
return await project.state.resolveVariables(input);
};
// Project assets
await copyResources(
join(resources, 'assets'),
async (fname, content) =>
project.state.writeFile(join(project.baseFolder, fname), content, undefined, 'source-file-other'),
undefined,
transformOutput
);
// Runtime files
await copyResources(
join(resources, 'psruntime'),
async (fname, content) =>
project.state.writeFile(
join(project.runtimeFolder, fname),
content,
undefined,
'source-file-other'
),
project.overrides,
transformOutput
);
// utils cmdlets
await copyResources(
join(resources, 'utils'),
async (fname, content) =>
project.state.writeFile(
join(project.utilsFolder, fname),
content,
undefined,
'source-file-other'
),
project.overrides,
transformOutput
);
// Modules files
if (project.azure) {
await copyBinaryResources(
join(resources, 'modules'),
async (fname, content) =>
project.state.writeFile(
join(project.dependencyModuleFolder, fname),
content,
undefined,
'binary-file'
)
);
}
if (project.azure) {
// Signing key file
await copyBinaryResources(
join(resources, 'signing'),
async (fname, content) =>
project.state.writeFile(
join(project.baseFolder, fname),
content,
undefined,
'binary-file'
)
);
}
}
export async function powershellV2(service: Host | TspHost, state?: ModelState<PwshModel>) {
let debug = false;
try {
const project = await new Project(service).init(state);
await project.writeFiles(async (filename, content) =>
project.state.writeFile(
filename,
applyOverrides(content, project.overrides),
undefined,
sourceFileCSharp
)
);
debug = (await project.state.service.getValue('debug')) || false;
await project.state.protectFiles(project.psd1);
await project.state.protectFiles(project.readme);
await project.state.protectFiles(project.customFolder);
await project.state.protectFiles(project.testFolder);
await project.state.protectFiles(project.docsFolder);
await project.state.protectFiles(project.examplesFolder);
await project.state.protectFiles(project.resourcesFolder);
await project.state.protectFiles(project.uxFolder);
// wait for all the generation to be done
await copyRequiredFiles(project);
await generateCsproj(project);
await generatePsm1(project);
await generateInputHandlersCustom(project);
await generatePsm1Custom(project);
await generatePsm1Internal(project);
await generateNuspec(project);
await generateGitIgnore(project);
await generateGitAttributes(project);
await generateReadme(project);
await generateAssemblyInfo(project);
await generateScriptCmdlets(project);
} catch (E) {
if (debug && E instanceof Error) {
console.error(`${__filename} - FAILURE ${JSON.stringify(E)} ${E.stack}`);
}
throw E;
}
}