diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index c26ef498a4e6..8d4c305102b7 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -17261,7 +17261,7 @@ packages: dev: false file:projects/arm-nginx.tgz: - resolution: {integrity: sha512-qVAjIstMnCDeC16WVu+q386pI/S3bFtobFjuP6YxWFRWUiczGYGRZQiEXIPRctVEptDwLMJs7hRGznIevzwpVA==, tarball: file:projects/arm-nginx.tgz} + resolution: {integrity: sha512-LKz17F5Q3MsKhK5toaiyrr/KzpOlIQvMTILwX2H3vviX33+RYmf6C8oPh+WvPsG0u/45enl6vCls46w8I2gFmg==, tarball: file:projects/arm-nginx.tgz} name: '@rush-temp/arm-nginx' version: 0.0.0 dependencies: @@ -17282,6 +17282,7 @@ packages: rimraf: 5.0.9 ts-node: 10.9.2(@types/node@18.19.42)(typescript@5.5.4) tslib: 2.6.3 + tsx: 4.16.2 typescript: 5.5.4 uglify-js: 3.19.1 transitivePeerDependencies: diff --git a/sdk/nginx/arm-nginx/CHANGELOG.md b/sdk/nginx/arm-nginx/CHANGELOG.md index 0ae793903e56..0248a9f5fe6a 100644 --- a/sdk/nginx/arm-nginx/CHANGELOG.md +++ b/sdk/nginx/arm-nginx/CHANGELOG.md @@ -1,15 +1,47 @@ # Release History + +## 4.0.0-beta.2 (2024-07-31) +Compared with version 3.0.0 + +**Features** -## 4.0.0-beta.2 (Unreleased) - -### Features Added - -### Breaking Changes - -### Bugs Fixed + - Added operation Configurations.analysis + - Added Interface AnalysisCreate + - Added Interface AnalysisCreateConfig + - Added Interface AnalysisDiagnostic + - Added Interface AnalysisResult + - Added Interface AnalysisResultData + - Added Interface AutoUpgradeProfile + - Added Interface ConfigurationsAnalysisOptionalParams + - Added Interface ErrorAdditionalInfo + - Added Interface ErrorDetail + - Added Interface NginxCertificateErrorResponseBody + - Added Interface NginxDeploymentPropertiesNginxAppProtect + - Added Interface NginxDeploymentUpdatePropertiesNginxAppProtect + - Added Interface ScaleProfile + - Added Interface ScaleProfileCapacity + - Added Interface WebApplicationFirewallComponentVersions + - Added Interface WebApplicationFirewallPackage + - Added Interface WebApplicationFirewallSettings + - Added Interface WebApplicationFirewallStatus + - Added Type Alias ActivationState + - Added Type Alias ConfigurationsAnalysisResponse + - Interface NginxCertificateProperties has a new optional parameter certificateError + - Interface NginxCertificateProperties has a new optional parameter keyVaultSecretCreated + - Interface NginxCertificateProperties has a new optional parameter keyVaultSecretVersion + - Interface NginxCertificateProperties has a new optional parameter sha1Thumbprint + - Interface NginxDeploymentProperties has a new optional parameter autoUpgradeProfile + - Interface NginxDeploymentProperties has a new optional parameter nginxAppProtect + - Interface NginxDeploymentScalingProperties has a new optional parameter profiles + - Interface NginxDeploymentUpdateProperties has a new optional parameter autoUpgradeProfile + - Interface NginxDeploymentUpdateProperties has a new optional parameter nginxAppProtect + - Added Enum KnownActivationState -### Other Changes +**Breaking Changes** + - Type of parameter error of interface ResourceProviderDefaultErrorResponse is changed from ErrorResponseBody to ErrorDetail + + ## 4.0.0-beta.1 (2024-03-18) **Features** diff --git a/sdk/nginx/arm-nginx/_meta.json b/sdk/nginx/arm-nginx/_meta.json index 8573a4c4aa51..eb2d95d1f8b4 100644 --- a/sdk/nginx/arm-nginx/_meta.json +++ b/sdk/nginx/arm-nginx/_meta.json @@ -1,8 +1,8 @@ { - "commit": "9fb75a3c4ca9b753271bd6db2e42e5f98366cbae", + "commit": "7d7195c0fd37c4e011addca6ad3e789fbe8e7454", "readme": "specification/nginx/resource-manager/readme.md", - "autorest_command": "autorest --version=3.9.7 --typescript --modelerfour.lenient-model-deduplication --azure-arm --head-as-boolean=true --license-header=MICROSOFT_MIT_NO_VERSION --generate-test --typescript-sdks-folder=D:\\Git\\azure-sdk-for-js ..\\azure-rest-api-specs\\specification\\nginx\\resource-manager\\readme.md --use=@autorest/typescript@6.0.17 --generate-sample=true", + "autorest_command": "autorest --version=3.9.7 --typescript --modelerfour.lenient-model-deduplication --azure-arm --head-as-boolean=true --license-header=MICROSOFT_MIT_NO_VERSION --generate-test --typescript-sdks-folder=/mnt/vss/_work/1/s/azure-sdk-for-js ../azure-rest-api-specs/specification/nginx/resource-manager/readme.md --use=@autorest/typescript@^6.0.12", "repository_url": "https://github.com/Azure/azure-rest-api-specs.git", - "release_tool": "@azure-tools/js-sdk-release-tools@2.7.4", - "use": "@autorest/typescript@6.0.17" + "release_tool": "@azure-tools/js-sdk-release-tools@2.7.10", + "use": "@autorest/typescript@^6.0.12" } \ No newline at end of file diff --git a/sdk/nginx/arm-nginx/package.json b/sdk/nginx/arm-nginx/package.json index 081d7953d45e..fbb267e6f0ff 100644 --- a/sdk/nginx/arm-nginx/package.json +++ b/sdk/nginx/arm-nginx/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@azure/core-lro": "^2.5.4", - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^2.1.2", "@azure/core-paging": "^1.2.0", "@azure/core-client": "^1.7.0", "@azure/core-auth": "^1.6.0", @@ -35,11 +35,12 @@ "rimraf": "^5.0.0", "dotenv": "^16.0.0", "@azure/dev-tool": "^1.0.0", - "@azure/identity": "^4.0.1", + "@azure/identity": "^4.2.1", "@azure-tools/test-recorder": "^3.0.0", - "@azure-tools/test-credential": "^1.0.0", + "@azure-tools/test-credential": "^1.1.0", "mocha": "^10.0.0", "@types/mocha": "^10.0.0", + "tsx": "^4.7.1", "@types/chai": "^4.2.8", "chai": "^4.2.0", "cross-env": "^7.0.2", @@ -105,13 +106,5 @@ ] }, "autoPublish": true, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/nginx/arm-nginx", - "//sampleConfiguration": { - "productName": "", - "productSlugs": [ - "azure" - ], - "disableDocsMs": true, - "apiRefLink": "https://docs.microsoft.com/javascript/api/@azure/arm-nginx?view=azure-node-preview" - } -} + "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/nginx/arm-nginx" +} \ No newline at end of file diff --git a/sdk/nginx/arm-nginx/review/arm-nginx.api.md b/sdk/nginx/arm-nginx/review/arm-nginx.api.md index 17140ce9c3e2..a8be1f100755 100644 --- a/sdk/nginx/arm-nginx/review/arm-nginx.api.md +++ b/sdk/nginx/arm-nginx/review/arm-nginx.api.md @@ -10,6 +10,9 @@ import { OperationState } from '@azure/core-lro'; import { PagedAsyncIterableIterator } from '@azure/core-paging'; import { SimplePollerLike } from '@azure/core-lro'; +// @public +export type ActivationState = string; + // @public export interface AnalysisCreate { // (undocumented) @@ -275,6 +278,12 @@ export interface IdentityProperties { // @public export type IdentityType = string; +// @public +export enum KnownActivationState { + Disabled = "Disabled", + Enabled = "Enabled" +} + // @public export enum KnownCreatedByType { Application = "Application", @@ -439,6 +448,7 @@ export interface NginxDeploymentProperties { managedResourceGroup?: string; // (undocumented) networkProfile?: NginxNetworkProfile; + nginxAppProtect?: NginxDeploymentPropertiesNginxAppProtect; readonly nginxVersion?: string; readonly provisioningState?: ProvisioningState; scalingProperties?: NginxDeploymentScalingProperties; @@ -446,6 +456,12 @@ export interface NginxDeploymentProperties { userProfile?: NginxDeploymentUserProfile; } +// @public +export interface NginxDeploymentPropertiesNginxAppProtect { + webApplicationFirewallSettings: WebApplicationFirewallSettings; + readonly webApplicationFirewallStatus?: WebApplicationFirewallStatus; +} + // @public export interface NginxDeploymentScalingProperties { // (undocumented) @@ -476,11 +492,17 @@ export interface NginxDeploymentUpdateProperties { enableDiagnosticsSupport?: boolean; // (undocumented) logging?: NginxLogging; + nginxAppProtect?: NginxDeploymentUpdatePropertiesNginxAppProtect; scalingProperties?: NginxDeploymentScalingProperties; // (undocumented) userProfile?: NginxDeploymentUserProfile; } +// @public +export interface NginxDeploymentUpdatePropertiesNginxAppProtect { + webApplicationFirewallSettings?: WebApplicationFirewallSettings; +} + // @public (undocumented) export interface NginxDeploymentUserProfile { preferredEmail?: string; @@ -649,6 +671,31 @@ export interface UserIdentityProperties { readonly principalId?: string; } +// @public +export interface WebApplicationFirewallComponentVersions { + wafEngineVersion: string; + wafNginxVersion: string; +} + +// @public +export interface WebApplicationFirewallPackage { + revisionDatetime: Date; + version: string; +} + +// @public +export interface WebApplicationFirewallSettings { + activationState?: ActivationState; +} + +// @public +export interface WebApplicationFirewallStatus { + readonly attackSignaturesPackage?: WebApplicationFirewallPackage; + readonly botSignaturesPackage?: WebApplicationFirewallPackage; + readonly componentVersions?: WebApplicationFirewallComponentVersions; + readonly threatCampaignsPackage?: WebApplicationFirewallPackage; +} + // (No @packageDocumentation comment for this package) ``` diff --git a/sdk/nginx/arm-nginx/src/models/index.ts b/sdk/nginx/arm-nginx/src/models/index.ts index f4c29559691e..0416dc53a76f 100644 --- a/sdk/nginx/arm-nginx/src/models/index.ts +++ b/sdk/nginx/arm-nginx/src/models/index.ts @@ -250,6 +250,8 @@ export interface NginxDeploymentProperties { /** Autoupgrade settings of a deployment. */ autoUpgradeProfile?: AutoUpgradeProfile; userProfile?: NginxDeploymentUserProfile; + /** Settings for NGINX App Protect (NAP) */ + nginxAppProtect?: NginxDeploymentPropertiesNginxAppProtect; } export interface NginxNetworkProfile { @@ -317,6 +319,63 @@ export interface NginxDeploymentUserProfile { preferredEmail?: string; } +/** Settings for NGINX App Protect (NAP) */ +export interface NginxDeploymentPropertiesNginxAppProtect { + /** Settings for the NGINX App Protect Web Application Firewall (WAF) */ + webApplicationFirewallSettings: WebApplicationFirewallSettings; + /** + * The status of the NGINX App Protect Web Application Firewall + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly webApplicationFirewallStatus?: WebApplicationFirewallStatus; +} + +/** Settings for the NGINX App Protect Web Application Firewall (WAF) */ +export interface WebApplicationFirewallSettings { + /** The activation state of the WAF. Use 'Enabled' to enable the WAF and 'Disabled' to disable it. */ + activationState?: ActivationState; +} + +/** The status of the NGINX App Protect Web Application Firewall */ +export interface WebApplicationFirewallStatus { + /** + * Package containing attack signatures for the NGINX App Protect Web Application Firewall (WAF). + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly attackSignaturesPackage?: WebApplicationFirewallPackage; + /** + * Package containing bot signatures for the NGINX App Protect Web Application Firewall (WAF). + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly botSignaturesPackage?: WebApplicationFirewallPackage; + /** + * Package containing threat campaigns for the NGINX App Protect Web Application Firewall (WAF). + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly threatCampaignsPackage?: WebApplicationFirewallPackage; + /** + * Versions of the NGINX App Protect Web Application Firewall (WAF) components. + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly componentVersions?: WebApplicationFirewallComponentVersions; +} + +/** NGINX App Protect Web Application Firewall (WAF) Package. Contains the version and revision date of the package. */ +export interface WebApplicationFirewallPackage { + /** The version of the NGINX App Protect Web Application Firewall (WAF) package. */ + version: string; + /** The date and time of the package revision. */ + revisionDatetime: Date; +} + +/** Versions of the NGINX App Protect Web Application Firewall (WAF) components. */ +export interface WebApplicationFirewallComponentVersions { + /** The version of the NGINX App Protect Web Application Firewall (WAF) engine. */ + wafEngineVersion: string; + /** The version of the NGINX App Protect Web Application Firewall (WAF) module for NGINX. */ + wafNginxVersion: string; +} + export interface ResourceSku { /** Name of the SKU. */ name: string; @@ -339,6 +398,14 @@ export interface NginxDeploymentUpdateProperties { userProfile?: NginxDeploymentUserProfile; /** Autoupgrade settings of a deployment. */ autoUpgradeProfile?: AutoUpgradeProfile; + /** Update settings for NGINX App Protect (NAP) */ + nginxAppProtect?: NginxDeploymentUpdatePropertiesNginxAppProtect; +} + +/** Update settings for NGINX App Protect (NAP) */ +export interface NginxDeploymentUpdatePropertiesNginxAppProtect { + /** Settings for the NGINX App Protect Web Application Firewall (WAF) */ + webApplicationFirewallSettings?: WebApplicationFirewallSettings; } export interface NginxDeploymentListResponse { @@ -481,6 +548,24 @@ export enum KnownNginxPrivateIPAllocationMethod { */ export type NginxPrivateIPAllocationMethod = string; +/** Known values of {@link ActivationState} that the service accepts. */ +export enum KnownActivationState { + /** Enabled */ + Enabled = "Enabled", + /** Disabled */ + Disabled = "Disabled", +} + +/** + * Defines values for ActivationState. \ + * {@link KnownActivationState} can be used interchangeably with ActivationState, + * this enum contains the known values that the service supports. + * ### Known values supported by the service + * **Enabled** \ + * **Disabled** + */ +export type ActivationState = string; + /** Optional parameters. */ export interface CertificatesGetOptionalParams extends coreClient.OperationOptions {} diff --git a/sdk/nginx/arm-nginx/src/models/mappers.ts b/sdk/nginx/arm-nginx/src/models/mappers.ts index dc21ad7ea040..51e56efe5777 100644 --- a/sdk/nginx/arm-nginx/src/models/mappers.ts +++ b/sdk/nginx/arm-nginx/src/models/mappers.ts @@ -855,6 +855,13 @@ export const NginxDeploymentProperties: coreClient.CompositeMapper = { className: "NginxDeploymentUserProfile", }, }, + nginxAppProtect: { + serializedName: "nginxAppProtect", + type: { + name: "Composite", + className: "NginxDeploymentPropertiesNginxAppProtect", + }, + }, }, }, }; @@ -1124,6 +1131,129 @@ export const NginxDeploymentUserProfile: coreClient.CompositeMapper = { }, }; +export const NginxDeploymentPropertiesNginxAppProtect: coreClient.CompositeMapper = + { + type: { + name: "Composite", + className: "NginxDeploymentPropertiesNginxAppProtect", + modelProperties: { + webApplicationFirewallSettings: { + serializedName: "webApplicationFirewallSettings", + type: { + name: "Composite", + className: "WebApplicationFirewallSettings", + }, + }, + webApplicationFirewallStatus: { + serializedName: "webApplicationFirewallStatus", + type: { + name: "Composite", + className: "WebApplicationFirewallStatus", + }, + }, + }, + }, + }; + +export const WebApplicationFirewallSettings: coreClient.CompositeMapper = { + type: { + name: "Composite", + className: "WebApplicationFirewallSettings", + modelProperties: { + activationState: { + serializedName: "activationState", + type: { + name: "String", + }, + }, + }, + }, +}; + +export const WebApplicationFirewallStatus: coreClient.CompositeMapper = { + type: { + name: "Composite", + className: "WebApplicationFirewallStatus", + modelProperties: { + attackSignaturesPackage: { + serializedName: "attackSignaturesPackage", + type: { + name: "Composite", + className: "WebApplicationFirewallPackage", + }, + }, + botSignaturesPackage: { + serializedName: "botSignaturesPackage", + type: { + name: "Composite", + className: "WebApplicationFirewallPackage", + }, + }, + threatCampaignsPackage: { + serializedName: "threatCampaignsPackage", + type: { + name: "Composite", + className: "WebApplicationFirewallPackage", + }, + }, + componentVersions: { + serializedName: "componentVersions", + type: { + name: "Composite", + className: "WebApplicationFirewallComponentVersions", + }, + }, + }, + }, +}; + +export const WebApplicationFirewallPackage: coreClient.CompositeMapper = { + type: { + name: "Composite", + className: "WebApplicationFirewallPackage", + modelProperties: { + version: { + serializedName: "version", + required: true, + type: { + name: "String", + }, + }, + revisionDatetime: { + serializedName: "revisionDatetime", + required: true, + type: { + name: "DateTime", + }, + }, + }, + }, +}; + +export const WebApplicationFirewallComponentVersions: coreClient.CompositeMapper = + { + type: { + name: "Composite", + className: "WebApplicationFirewallComponentVersions", + modelProperties: { + wafEngineVersion: { + serializedName: "wafEngineVersion", + required: true, + type: { + name: "String", + }, + }, + wafNginxVersion: { + serializedName: "wafNginxVersion", + required: true, + type: { + name: "String", + }, + }, + }, + }, + }; + export const ResourceSku: coreClient.CompositeMapper = { type: { name: "Composite", @@ -1222,10 +1352,34 @@ export const NginxDeploymentUpdateProperties: coreClient.CompositeMapper = { className: "AutoUpgradeProfile", }, }, + nginxAppProtect: { + serializedName: "nginxAppProtect", + type: { + name: "Composite", + className: "NginxDeploymentUpdatePropertiesNginxAppProtect", + }, + }, }, }, }; +export const NginxDeploymentUpdatePropertiesNginxAppProtect: coreClient.CompositeMapper = + { + type: { + name: "Composite", + className: "NginxDeploymentUpdatePropertiesNginxAppProtect", + modelProperties: { + webApplicationFirewallSettings: { + serializedName: "webApplicationFirewallSettings", + type: { + name: "Composite", + className: "WebApplicationFirewallSettings", + }, + }, + }, + }, + }; + export const NginxDeploymentListResponse: coreClient.CompositeMapper = { type: { name: "Composite", diff --git a/sdk/nginx/arm-nginx/src/models/parameters.ts b/sdk/nginx/arm-nginx/src/models/parameters.ts index 5fe0fe0a6539..47e2926ab5ee 100644 --- a/sdk/nginx/arm-nginx/src/models/parameters.ts +++ b/sdk/nginx/arm-nginx/src/models/parameters.ts @@ -102,7 +102,7 @@ export const certificateName: OperationURLParameter = { export const apiVersion: OperationQueryParameter = { parameterPath: "apiVersion", mapper: { - defaultValue: "2024-01-01-preview", + defaultValue: "2024-06-01-preview", isConstant: true, serializedName: "api-version", type: { diff --git a/sdk/nginx/arm-nginx/src/nginxManagementClient.ts b/sdk/nginx/arm-nginx/src/nginxManagementClient.ts index 18e0c11ae6f0..980cf5bd1fb8 100644 --- a/sdk/nginx/arm-nginx/src/nginxManagementClient.ts +++ b/sdk/nginx/arm-nginx/src/nginxManagementClient.ts @@ -114,7 +114,7 @@ export class NginxManagementClient extends coreClient.ServiceClient { // Assigning values to Constant parameters this.$host = options.$host || "https://management.azure.com"; - this.apiVersion = options.apiVersion || "2024-01-01-preview"; + this.apiVersion = options.apiVersion || "2024-06-01-preview"; this.certificates = new CertificatesImpl(this); this.configurations = new ConfigurationsImpl(this); this.deployments = new DeploymentsImpl(this); diff --git a/sdk/nginx/arm-nginx/src/operations/operations.ts b/sdk/nginx/arm-nginx/src/operations/operations.ts index 2e8073f0322f..d231e8625376 100644 --- a/sdk/nginx/arm-nginx/src/operations/operations.ts +++ b/sdk/nginx/arm-nginx/src/operations/operations.ts @@ -35,7 +35,7 @@ export class OperationsImpl implements Operations { } /** - * List all operations provided by Nginx.NginxPlus for the 2024-01-01-preview api version. + * List all operations provided by Nginx.NginxPlus for the 2024-06-01-preview api version. * @param options The options parameters. */ public list( @@ -89,7 +89,7 @@ export class OperationsImpl implements Operations { } /** - * List all operations provided by Nginx.NginxPlus for the 2024-01-01-preview api version. + * List all operations provided by Nginx.NginxPlus for the 2024-06-01-preview api version. * @param options The options parameters. */ private _list( diff --git a/sdk/nginx/arm-nginx/src/operationsInterfaces/operations.ts b/sdk/nginx/arm-nginx/src/operationsInterfaces/operations.ts index fce0fe5dfc2a..7f4ea352faf7 100644 --- a/sdk/nginx/arm-nginx/src/operationsInterfaces/operations.ts +++ b/sdk/nginx/arm-nginx/src/operationsInterfaces/operations.ts @@ -13,7 +13,7 @@ import { OperationResult, OperationsListOptionalParams } from "../models"; /** Interface representing a Operations. */ export interface Operations { /** - * List all operations provided by Nginx.NginxPlus for the 2024-01-01-preview api version. + * List all operations provided by Nginx.NginxPlus for the 2024-06-01-preview api version. * @param options The options parameters. */ list( diff --git a/sdk/nginx/arm-nginx/test/sampleTest.ts b/sdk/nginx/arm-nginx/test/sampleTest.ts new file mode 100644 index 000000000000..d64be981b694 --- /dev/null +++ b/sdk/nginx/arm-nginx/test/sampleTest.ts @@ -0,0 +1,43 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +import { + Recorder, + RecorderStartOptions, + env, +} from "@azure-tools/test-recorder"; +import { assert } from "chai"; +import { Context } from "mocha"; + +const replaceableVariables: Record = { + AZURE_CLIENT_ID: "azure_client_id", + AZURE_CLIENT_SECRET: "azure_client_secret", + AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888", + SUBSCRIPTION_ID: "azure_subscription_id", +}; + +const recorderOptions: RecorderStartOptions = { + envSetupForPlayback: replaceableVariables, +}; + +describe("My test", () => { + let recorder: Recorder; + + beforeEach(async function (this: Context) { + recorder = new Recorder(this.currentTest); + await recorder.start(recorderOptions); + }); + + afterEach(async function () { + await recorder.stop(); + }); + + it("sample test", async function () { + console.log("Hi, I'm a test!"); + }); +}); diff --git a/sdk/nginx/arm-nginx/tsconfig.json b/sdk/nginx/arm-nginx/tsconfig.json index 8191e31c111d..3e6ae96443f3 100644 --- a/sdk/nginx/arm-nginx/tsconfig.json +++ b/sdk/nginx/arm-nginx/tsconfig.json @@ -15,17 +15,11 @@ ], "declaration": true, "outDir": "./dist-esm", - "importHelpers": true, - "paths": { - "@azure/arm-nginx": [ - "./src/index" - ] - } + "importHelpers": true }, "include": [ "./src/**/*.ts", - "./test/**/*.ts", - "samples-dev/**/*.ts" + "./test/**/*.ts" ], "exclude": [ "node_modules"