From 14856fe9d4acc9511bb98ba826300211b5b4d45c Mon Sep 17 00:00:00 2001 From: Xiaogang Date: Wed, 21 Aug 2024 16:58:07 +0800 Subject: [PATCH] tsp - move common config to the emitter (#1372) --- common/config/rush/pnpm-lock.yaml | 15 +++++---- .../typespec-powershell/configuration.yaml | 32 +++++++++++++++++++ packages/typespec-powershell/package.json | 2 +- packages/typespec-powershell/src/emitter.ts | 16 ++++++++++ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index b7041cb938..b14461ae2a 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: ~3.5.2 version: 3.5.2 '@autorest/powershell': - specifier: ~4.0.702 - version: 4.0.702 + specifier: ~4.0.708 + version: 4.0.708 '@azure-tools/async-io': specifier: ~3.0.0 version: 3.0.254 @@ -126,8 +126,8 @@ packages: vscode-jsonrpc: 3.6.2 dev: false - /@autorest/powershell@4.0.702: - resolution: {integrity: sha512-xdRReopyjBbfKDip7Zd2MkXhm4NJsDRo+SbV30ij07/ELa9E63T5EopLSzHOwJlllq2KmGjnfn4xYU4GVySu3w==} + /@autorest/powershell@4.0.708: + resolution: {integrity: sha512-qRVA7Dbuy9x8cxFtXSoAy0Tj8hNLrcb2wKwGR4v9NQ+u1Oaigjf46roWvypr44hkeBHVBz5UML6VNHSUiB26ag==} engines: {node: '>=10.12.0'} dependencies: '@autorest/codemodel': 4.19.3 @@ -138,10 +138,13 @@ packages: '@azure-tools/codemodel-v3': 3.1.266 '@azure-tools/linq': 3.1.263 '@azure-tools/tasks': 3.0.255 + '@azure-tools/uri': 3.1.1 ejs: 3.1.9 js-yaml: 3.13.1 source-map-support: 0.5.13 xmlbuilder: 10.1.1 + transitivePeerDependencies: + - supports-color dev: false /@azure-tools/async-io@3.0.254: @@ -4489,13 +4492,13 @@ packages: dev: false file:projects/typespec-powershell.tgz: - resolution: {integrity: sha512-faeQhGWL+GN07n8p4riwDBWlZLNc36hqf6Gu5LVK1mJow5IiBe+mgUSDkrOn48dfTPRY1mJx7jn52w1HE4O5Tg==, tarball: file:projects/typespec-powershell.tgz} + resolution: {integrity: sha512-nJTut+dJB/qoOsof76bauP5BhxsrcPuz+QkxF3JSf+bQhhmk+SGESqigrJpvNCH1uj1w7rzg69TvWdPR9ihl1g==, tarball: file:projects/typespec-powershell.tgz} name: '@rush-temp/typespec-powershell' version: 0.0.0 dependencies: '@autorest/codemodel': 4.19.3 '@autorest/extension-base': 3.5.2 - '@autorest/powershell': 4.0.702 + '@autorest/powershell': 4.0.708 '@azure-tools/async-io': 3.0.254 '@azure-tools/codegen': 2.5.294 '@azure-tools/codegen-csharp': 3.0.264 diff --git a/packages/typespec-powershell/configuration.yaml b/packages/typespec-powershell/configuration.yaml index 295f82b5fa..45e0ffaf67 100644 --- a/packages/typespec-powershell/configuration.yaml +++ b/packages/typespec-powershell/configuration.yaml @@ -211,3 +211,35 @@ verb-mapping: Wipe: Clear Write: Write +# Folder configurations +current-folder: "./" +module-folder: "./generated" +cmdlet-folder: "./generated/cmdlets" +model-cmdlet-folder: "./custom/autogen-model-cmdlets" +custom-cmdlet-folder: "./custom" +utils-cmdlet-folder: "./utils" +internal-cmdlet-folder: "./internal" +test-folder: "./test" +runtime-folder: "./generated/runtime" +api-folder: "./generated/api" +bin-folder: "./bin" +obj-folder: "./obj" +exports-folder: "./exports" +docs-folder: "./docs" +dependency-module-folder: "./generated/modules" +examples-folder: "./examples" +resources-folder: "./resources" +ux-folder: "./UX" +csproj: "./{module-name}.csproj" +dll-name: "{module-name}.private" +dll: "./bin/{module-name}.private.dll" +psd1: "./{module-name}.psd1" +psm1: "./{module-name}.psm1" +psm1-custom: "./custom/{module-name}.custom.psm1" +psm1-internal: "./internal/{module-name}.internal.psm1" +format-ps1xml: "./{module-name}.format.ps1xml" +nuspec: "./{module-name}.nuspec" + +# misc configurations +skip-model-cmdlets: false +module-version: 0.1.0 \ No newline at end of file diff --git a/packages/typespec-powershell/package.json b/packages/typespec-powershell/package.json index 12c4c33568..e7e60e7626 100644 --- a/packages/typespec-powershell/package.json +++ b/packages/typespec-powershell/package.json @@ -15,7 +15,7 @@ } }, "dependencies": { - "@autorest/powershell": "~4.0.702", + "@autorest/powershell": "~4.0.708", "@autorest/codemodel": "~4.19.3", "@autorest/extension-base": "~3.5.2", "@azure-tools/async-io": "~3.0.0", diff --git a/packages/typespec-powershell/src/emitter.ts b/packages/typespec-powershell/src/emitter.ts index 18ecf6bb03..b29a1024cc 100644 --- a/packages/typespec-powershell/src/emitter.ts +++ b/packages/typespec-powershell/src/emitter.ts @@ -12,12 +12,28 @@ import { readFileSync } from "fs"; import path from "path"; import { fileURLToPath } from "url"; +// Function to recursively interpolate placeholders in an object +function interpolatePlaceholders(obj: any, values: any) { + for (const key in obj) { + if (typeof obj[key] === 'string') { + obj[key] = obj[key].replace(/{([^}]+)}/g, (match: string, placeholder: string) => values[placeholder]); + } else if (typeof obj[key] === 'object') { + interpolatePlaceholders(obj[key], values); + } + } +} + //load configuration from configuration.md function loadConfiguration(emitterOptions: Record): Record { const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const configPath = path.join(__dirname, '../../configuration.yaml'); const configuration = deserialize>(readFileSync(configPath, 'utf8'), configPath); + // Define the values for interpolation + const interpolationValues = { + 'module-name': emitterOptions['module-name'] + }; + interpolatePlaceholders(configuration, interpolationValues); // If there is overlap between the configuration and the emitter options, the emitter options will take precedence return { ...configuration, ...emitterOptions }; }