[communication] Migrate @azure/communication-email to ESM/vitest (#31770)
### Packages impacted by this PR - @azure/communication-email ### Issues associated with this PR - https://github.com/Azure/azure-sdk-for-js/issues/31338 ### Describe the problem that is addressed by this PR Migrates the @azure/communication-email package to ESM/vitest. ### What are the possible designs available to address the problem? If there are more than one possible design, why was the one in this PR chosen? ### Are there test cases added in this PR? _(If not, why?)_ ### Provide a list of related PRs _(if any)_ ### Command used to generate this PR:**_(Applicable only to SDK release request PRs)_ ### Checklists - [ ] Added impacted package name to the issue description - [ ] Does this PR needs any fixes in the SDK Generator?** _(If so, create an Issue in the [Autorest/typescript](https://github.com/Azure/autorest.typescript) repository and link it here)_ - [ ] Added a changelog (if necessary)
This commit is contained in:
Родитель
6b0ec887ea
Коммит
35680de9a6
|
@ -19061,7 +19061,7 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/communication-email.tgz:
|
file:projects/communication-email.tgz:
|
||||||
resolution: {integrity: sha512-ZOPSfMCI6uWwWm9OUsw6AHSJzn7SAMKxJOFFDbrj1jkvcQ9f1V+m2qa1NwV7FywuGMuKjN7wumpI284OIjxSxg==, tarball: file:projects/communication-email.tgz}
|
resolution: {integrity: sha512-QhLsLLokYOq6xNcg5alwSd7zmjUr5iul+3/p1yq7jzXk2vDsxGU32Wq5S1ALu5jX+eTLPpxjm8WPdCFc37UtIg==, tarball: file:projects/communication-email.tgz}
|
||||||
name: '@rush-temp/communication-email'
|
name: '@rush-temp/communication-email'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -19070,6 +19070,8 @@ packages:
|
||||||
'@types/chai': 4.3.20
|
'@types/chai': 4.3.20
|
||||||
'@types/mocha': 10.0.9
|
'@types/mocha': 10.0.9
|
||||||
'@types/node': 18.19.64
|
'@types/node': 18.19.64
|
||||||
|
'@vitest/browser': 2.1.5(@types/node@18.19.64)(playwright@1.48.2)(typescript@5.6.3)(vitest@2.1.5)
|
||||||
|
'@vitest/coverage-istanbul': 2.1.5(vitest@2.1.5)
|
||||||
chai: 4.3.10
|
chai: 4.3.10
|
||||||
dotenv: 16.4.5
|
dotenv: 16.4.5
|
||||||
eslint: 9.14.0
|
eslint: 9.14.0
|
||||||
|
@ -19086,17 +19088,31 @@ packages:
|
||||||
karma-sourcemap-loader: 0.3.8
|
karma-sourcemap-loader: 0.3.8
|
||||||
mocha: 10.8.2
|
mocha: 10.8.2
|
||||||
nyc: 17.1.0
|
nyc: 17.1.0
|
||||||
|
playwright: 1.48.2
|
||||||
ts-node: 10.9.2(@types/node@18.19.64)(typescript@5.6.3)
|
ts-node: 10.9.2(@types/node@18.19.64)(typescript@5.6.3)
|
||||||
tslib: 1.14.1
|
tslib: 2.8.1
|
||||||
typescript: 5.6.3
|
typescript: 5.6.3
|
||||||
|
vitest: 2.1.5(@types/node@18.19.64)(@vitest/browser@2.1.5)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@swc/core'
|
- '@edge-runtime/vm'
|
||||||
- '@swc/wasm'
|
- '@vitest/ui'
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- debug
|
- happy-dom
|
||||||
- jiti
|
- jiti
|
||||||
|
- jsdom
|
||||||
|
- less
|
||||||
|
- lightningcss
|
||||||
|
- msw
|
||||||
|
- safaridriver
|
||||||
|
- sass
|
||||||
|
- sass-embedded
|
||||||
|
- stylus
|
||||||
|
- sugarss
|
||||||
- supports-color
|
- supports-color
|
||||||
|
- terser
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
- vite
|
||||||
|
- webdriverio
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/communication-identity.tgz:
|
file:projects/communication-identity.tgz:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
|
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
|
||||||
"mainEntryPointFilePath": "types/src/index.d.ts",
|
"mainEntryPointFilePath": "dist/esm/index.d.ts",
|
||||||
"docModel": {
|
"docModel": {
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
"dtsRollup": {
|
"dtsRollup": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"untrimmedFilePath": "",
|
"untrimmedFilePath": "",
|
||||||
"publicTrimmedFilePath": "./types/communication-email.d.ts"
|
"publicTrimmedFilePath": "dist/communication-email.d.ts"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"tsdocMessageReporting": {
|
"tsdocMessageReporting": {
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
// https://github.com/karma-runner/karma-chrome-launcher
|
|
||||||
process.env.CHROME_BIN = require("puppeteer").executablePath();
|
|
||||||
const { relativeRecordingsPath } = require("@azure-tools/test-recorder");
|
|
||||||
|
|
||||||
require("dotenv").config();
|
|
||||||
|
|
||||||
process.env.RECORDINGS_RELATIVE_PATH = relativeRecordingsPath();
|
|
||||||
|
|
||||||
module.exports = function (config) {
|
|
||||||
config.set({
|
|
||||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
|
||||||
basePath: "./",
|
|
||||||
|
|
||||||
// frameworks to use
|
|
||||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
|
||||||
frameworks: ["mocha"],
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
"karma-mocha",
|
|
||||||
"karma-mocha-reporter",
|
|
||||||
"karma-chrome-launcher",
|
|
||||||
"karma-firefox-launcher",
|
|
||||||
"karma-env-preprocessor",
|
|
||||||
"karma-coverage",
|
|
||||||
"karma-sourcemap-loader",
|
|
||||||
"karma-junit-reporter",
|
|
||||||
],
|
|
||||||
|
|
||||||
// list of files / patterns to load in the browser
|
|
||||||
files: ["dist-test/index.browser.js"],
|
|
||||||
|
|
||||||
// list of files / patterns to exclude
|
|
||||||
exclude: [],
|
|
||||||
|
|
||||||
// preprocess matching files before serving them to the browser
|
|
||||||
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
|
||||||
preprocessors: {
|
|
||||||
"**/*.js": ["sourcemap", "env"],
|
|
||||||
// IMPORTANT: COMMENT following line if you want to debug in your browsers!!
|
|
||||||
// Preprocess source file to calculate code coverage, however this will make source file unreadable
|
|
||||||
//"dist-test/index.browser.js": ["coverage"]
|
|
||||||
},
|
|
||||||
|
|
||||||
// inject following environment values into browser testing with window.__env__
|
|
||||||
// environment values MUST be exported or set with same console running "karma start"
|
|
||||||
// https://www.npmjs.com/package/karma-env-preprocessor
|
|
||||||
envPreprocessor: [
|
|
||||||
"COMMUNICATION_CONNECTION_STRING_EMAIL",
|
|
||||||
"RECIPIENT_ADDRESS",
|
|
||||||
"SENDER_ADDRESS",
|
|
||||||
"TEST_MODE",
|
|
||||||
"RECORDINGS_RELATIVE_PATH",
|
|
||||||
],
|
|
||||||
|
|
||||||
// test results reporter to use
|
|
||||||
// possible values: 'dots', 'progress'
|
|
||||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
|
||||||
reporters: ["mocha", "coverage", "junit"],
|
|
||||||
|
|
||||||
coverageReporter: {
|
|
||||||
// specify a common output directory
|
|
||||||
dir: "coverage-browser/",
|
|
||||||
reporters: [
|
|
||||||
{ type: "json", subdir: ".", file: "coverage.json" },
|
|
||||||
{ type: "lcovonly", subdir: ".", file: "lcov.info" },
|
|
||||||
{ type: "html", subdir: "html" },
|
|
||||||
{ type: "cobertura", subdir: ".", file: "cobertura-coverage.xml" },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
|
|
||||||
junitReporter: {
|
|
||||||
outputDir: "", // results will be saved as $outputDir/$browserName.xml
|
|
||||||
outputFile: "test-results.browser.xml", // if included, results will be saved as $outputDir/$browserName/$outputFile
|
|
||||||
suite: "", // suite will become the package name attribute in xml testsuite element
|
|
||||||
useBrowserName: false, // add browser name to report and classes names
|
|
||||||
nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element
|
|
||||||
classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element
|
|
||||||
properties: {}, // key value pair of properties to add to the <properties> section of the report
|
|
||||||
},
|
|
||||||
|
|
||||||
// web server port
|
|
||||||
port: 9876,
|
|
||||||
|
|
||||||
// enable / disable colors in the output (reporters and logs)
|
|
||||||
colors: true,
|
|
||||||
|
|
||||||
// level of logging
|
|
||||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
|
||||||
logLevel: config.LOG_INFO,
|
|
||||||
|
|
||||||
// enable / disable watching file and executing tests whenever any file changes
|
|
||||||
autoWatch: false,
|
|
||||||
|
|
||||||
// start these browsers
|
|
||||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
|
||||||
// 'ChromeHeadless', 'Chrome', 'Firefox', 'Edge', 'IE'
|
|
||||||
browsers: ["HeadlessChrome"],
|
|
||||||
|
|
||||||
customLaunchers: {
|
|
||||||
HeadlessChrome: {
|
|
||||||
base: "ChromeHeadless",
|
|
||||||
flags: ["--no-sandbox", "--disable-web-security"],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
// Continuous Integration mode
|
|
||||||
// if true, Karma captures browsers, runs the tests and exits
|
|
||||||
singleRun: true,
|
|
||||||
|
|
||||||
// Concurrency level
|
|
||||||
// how many browser should be started simultaneous
|
|
||||||
concurrency: 1,
|
|
||||||
|
|
||||||
browserNoActivityTimeout: 600000,
|
|
||||||
browserDisconnectTimeout: 10000,
|
|
||||||
browserDisconnectTolerance: 3,
|
|
||||||
|
|
||||||
client: {
|
|
||||||
mocha: {
|
|
||||||
// change Karma's debug.html to the mocha web reporter
|
|
||||||
reporter: "html",
|
|
||||||
timeout: "600000",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
|
@ -5,22 +5,22 @@
|
||||||
"author": "Microsoft Corporation",
|
"author": "Microsoft Corporation",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"sdk-type": "client",
|
"sdk-type": "client",
|
||||||
"main": "dist/index.js",
|
"main": "./dist/commonjs/index.js",
|
||||||
"module": "dist-esm/src/index.js",
|
"module": "./dist/esm/index.js",
|
||||||
"types": "types/communication-email.d.ts",
|
"types": "./dist/commonjs/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm run clean && tsc -p . && dev-tool run bundle --browser-test=false && dev-tool run extract-api",
|
"build": "npm run clean && dev-tool run build-package && dev-tool run extract-api",
|
||||||
"build:samples": "dev-tool samples publish -f",
|
"build:samples": "dev-tool samples publish -f",
|
||||||
"build:test": "tsc -p . && dev-tool run bundle",
|
"build:test": "dev-tool run build-package && dev-tool run bundle",
|
||||||
"check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
|
"check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
|
||||||
"clean": "dev-tool run vendored rimraf --glob dist dist-* temp types *.tgz *.log",
|
"clean": "dev-tool run vendored rimraf --glob dist dist-* temp types *.tgz *.log",
|
||||||
"execute:samples": "dev-tool samples run samples-dev",
|
"execute:samples": "dev-tool samples run samples-dev",
|
||||||
"extract-api": "tsc -p . && dev-tool run extract-api",
|
"extract-api": "dev-tool run build-package && dev-tool run extract-api",
|
||||||
"format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
|
"format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
|
||||||
"generate:client": "autorest --typescript ./swagger/README.md && rushx format",
|
"generate:client": "autorest --typescript ./swagger/README.md && rushx format",
|
||||||
"integration-test": "npm run integration-test:node && npm run integration-test:browser",
|
"integration-test": "npm run integration-test:node && npm run integration-test:browser",
|
||||||
"integration-test:browser": "dev-tool run test:browser",
|
"integration-test:browser": "npm run clean && dev-tool run build-package && dev-tool run build-test && dev-tool run test:vitest --browser",
|
||||||
"integration-test:node": "dev-tool run test:node-js-input -- --timeout 5000000 'dist-esm/test/**/*.spec.js'",
|
"integration-test:node": "dev-tool run test:vitest",
|
||||||
"lint": "eslint package.json api-extractor.json src test",
|
"lint": "eslint package.json api-extractor.json src test",
|
||||||
"lint:fix": "eslint package.json api-extractor.json src test --fix --fix-type [problem,suggestion]",
|
"lint:fix": "eslint package.json api-extractor.json src test --fix --fix-type [problem,suggestion]",
|
||||||
"pack": "npm pack 2>&1",
|
"pack": "npm pack 2>&1",
|
||||||
|
@ -28,14 +28,12 @@
|
||||||
"test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
|
"test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
|
||||||
"test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node",
|
"test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node",
|
||||||
"unit-test": "npm run unit-test:node && npm run unit-test:browser",
|
"unit-test": "npm run unit-test:node && npm run unit-test:browser",
|
||||||
"unit-test:browser": "dev-tool run test:browser",
|
"unit-test:browser": "npm run clean && dev-tool run build-package && dev-tool run build-test && dev-tool run test:vitest --browser",
|
||||||
"unit-test:node": "dev-tool run test:node-ts-input -- --timeout 1200000 --exclude 'test/**/browser/*.spec.ts' 'test/**/*.spec.ts'",
|
"unit-test:node": "dev-tool run test:vitest",
|
||||||
"update-snippets": "echo skipped"
|
"update-snippets": "echo skipped"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist/",
|
"dist/",
|
||||||
"dist-esm/",
|
|
||||||
"types/communication-email.d.ts",
|
|
||||||
"README.md",
|
"README.md",
|
||||||
"LICENSE"
|
"LICENSE"
|
||||||
],
|
],
|
||||||
|
@ -47,41 +45,28 @@
|
||||||
"email"
|
"email"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@azure/communication-common": "^2.2.0",
|
"@azure/communication-common": "^2.3.1",
|
||||||
"@azure/core-auth": "^1.3.0",
|
"@azure/core-auth": "^1.9.0",
|
||||||
"@azure/core-client": "^1.3.2",
|
"@azure/core-client": "^1.9.2",
|
||||||
"@azure/core-lro": "^2.5.0",
|
"@azure/core-lro": "^2.5.0",
|
||||||
"@azure/core-rest-pipeline": "^1.8.0",
|
"@azure/core-rest-pipeline": "^1.18.0",
|
||||||
"@azure/core-util": "^1.6.1",
|
"@azure/core-util": "^1.11.0",
|
||||||
"@azure/logger": "^1.0.0",
|
"@azure/logger": "^1.1.4",
|
||||||
"tslib": "^1.9.3"
|
"tslib": "^2.8.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@azure-tools/test-recorder": "^3.0.0",
|
"@azure-tools/test-recorder": "^4.1.0",
|
||||||
"@azure-tools/test-utils": "^1.0.1",
|
"@azure-tools/test-utils-vitest": "^1.0.0",
|
||||||
"@azure/dev-tool": "^1.0.0",
|
"@azure/dev-tool": "^1.0.0",
|
||||||
"@azure/eslint-plugin-azure-sdk": "^3.0.0",
|
"@azure/eslint-plugin-azure-sdk": "^3.0.0",
|
||||||
"@types/chai": "^4.1.6",
|
|
||||||
"@types/mocha": "^10.0.0",
|
|
||||||
"@types/node": "^18.0.0",
|
"@types/node": "^18.0.0",
|
||||||
"chai": "^4.2.0",
|
"@vitest/browser": "^2.1.5",
|
||||||
|
"@vitest/coverage-istanbul": "^2.1.5",
|
||||||
"dotenv": "^16.0.0",
|
"dotenv": "^16.0.0",
|
||||||
"eslint": "^9.9.0",
|
"eslint": "^9.9.0",
|
||||||
"karma": "^6.2.0",
|
"playwright": "^1.48.2",
|
||||||
"karma-chrome-launcher": "^3.0.0",
|
"typescript": "~5.6.2",
|
||||||
"karma-coverage": "^2.0.0",
|
"vitest": "^2.1.5"
|
||||||
"karma-env-preprocessor": "^0.1.1",
|
|
||||||
"karma-firefox-launcher": "^1.1.0",
|
|
||||||
"karma-json-preprocessor": "^0.3.3",
|
|
||||||
"karma-json-to-file-reporter": "^1.0.1",
|
|
||||||
"karma-junit-reporter": "^2.0.1",
|
|
||||||
"karma-mocha": "^2.0.1",
|
|
||||||
"karma-mocha-reporter": "^2.2.5",
|
|
||||||
"karma-sourcemap-loader": "^0.3.8",
|
|
||||||
"mocha": "^10.0.0",
|
|
||||||
"nyc": "^17.0.0",
|
|
||||||
"ts-node": "^10.0.0",
|
|
||||||
"typescript": "~5.6.2"
|
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-email/",
|
"homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-email/",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
|
@ -103,5 +88,43 @@
|
||||||
"Azure Communication Services Resource": "https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource",
|
"Azure Communication Services Resource": "https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource",
|
||||||
"Email Communication Services Resource": "https://aka.ms/acsemail/createemailresource"
|
"Email Communication Services Resource": "https://aka.ms/acsemail/createemailresource"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"type": "module",
|
||||||
|
"tshy": {
|
||||||
|
"exports": {
|
||||||
|
"./package.json": "./package.json",
|
||||||
|
".": "./src/index.ts"
|
||||||
|
},
|
||||||
|
"dialects": [
|
||||||
|
"esm",
|
||||||
|
"commonjs"
|
||||||
|
],
|
||||||
|
"esmDialects": [
|
||||||
|
"browser",
|
||||||
|
"react-native"
|
||||||
|
],
|
||||||
|
"selfLink": false
|
||||||
|
},
|
||||||
|
"browser": "./dist/browser/index.js",
|
||||||
|
"exports": {
|
||||||
|
"./package.json": "./package.json",
|
||||||
|
".": {
|
||||||
|
"browser": {
|
||||||
|
"types": "./dist/browser/index.d.ts",
|
||||||
|
"default": "./dist/browser/index.js"
|
||||||
|
},
|
||||||
|
"react-native": {
|
||||||
|
"types": "./dist/react-native/index.d.ts",
|
||||||
|
"default": "./dist/react-native/index.js"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"types": "./dist/esm/index.d.ts",
|
||||||
|
"default": "./dist/esm/index.js"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"types": "./dist/commonjs/index.d.ts",
|
||||||
|
"default": "./dist/commonjs/index.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) Microsoft Corporation.
|
// Copyright (c) Microsoft Corporation.
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
import type { EmailClientOptions, EmailMessage, EmailSendOptionalParams } from "./models";
|
import type { EmailClientOptions, EmailMessage, EmailSendOptionalParams } from "./models.js";
|
||||||
import type { KeyCredential, TokenCredential } from "@azure/core-auth";
|
import type { KeyCredential, TokenCredential } from "@azure/core-auth";
|
||||||
import { isTokenCredential } from "@azure/core-auth";
|
import { isTokenCredential } from "@azure/core-auth";
|
||||||
import type { PollerLike, PollOperationState } from "@azure/core-lro";
|
import type { PollerLike, PollOperationState } from "@azure/core-lro";
|
||||||
|
@ -10,10 +10,10 @@ import {
|
||||||
isKeyCredential,
|
isKeyCredential,
|
||||||
parseClientArguments,
|
parseClientArguments,
|
||||||
} from "@azure/communication-common";
|
} from "@azure/communication-common";
|
||||||
import { EmailRestApiClient } from "./generated/src/emailRestApiClient";
|
import { EmailRestApiClient } from "./generated/src/emailRestApiClient.js";
|
||||||
import type { InternalPipelineOptions } from "@azure/core-rest-pipeline";
|
import type { InternalPipelineOptions } from "@azure/core-rest-pipeline";
|
||||||
import { logger } from "./logger";
|
import { logger } from "./logger.js";
|
||||||
import type { EmailSendResponse } from "./generated/src";
|
import type { EmailSendResponse } from "./generated/src/index.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the type of a value is EmailClientOptions or not.
|
* Checks whether the type of a value is EmailClientOptions or not.
|
||||||
|
|
|
@ -12,9 +12,9 @@ import {
|
||||||
PipelineResponse,
|
PipelineResponse,
|
||||||
SendRequest
|
SendRequest
|
||||||
} from "@azure/core-rest-pipeline";
|
} from "@azure/core-rest-pipeline";
|
||||||
import { EmailImpl } from "./operations";
|
import { EmailImpl } from "./operations/index.js";
|
||||||
import { Email } from "./operationsInterfaces";
|
import { Email } from "./operationsInterfaces/index.js";
|
||||||
import { EmailRestApiClientOptionalParams } from "./models";
|
import { EmailRestApiClientOptionalParams } from "./models/index.js";
|
||||||
|
|
||||||
export class EmailRestApiClient extends coreClient.ServiceClient {
|
export class EmailRestApiClient extends coreClient.ServiceClient {
|
||||||
endpoint: string;
|
endpoint: string;
|
||||||
|
|
|
@ -6,6 +6,6 @@
|
||||||
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export * from "./models";
|
export * from "./models/index.js";
|
||||||
export { EmailRestApiClient } from "./emailRestApiClient";
|
export { EmailRestApiClient } from "./emailRestApiClient.js";
|
||||||
export * from "./operationsInterfaces";
|
export * from "./operationsInterfaces/index.js";
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
OperationURLParameter,
|
OperationURLParameter,
|
||||||
OperationQueryParameter
|
OperationQueryParameter
|
||||||
} from "@azure/core-client";
|
} from "@azure/core-client";
|
||||||
import { EmailMessage as EmailMessageMapper } from "../models/mappers";
|
import { EmailMessage as EmailMessageMapper } from "../models/mappers.js";
|
||||||
|
|
||||||
export const accept: OperationParameter = {
|
export const accept: OperationParameter = {
|
||||||
parameterPath: "accept",
|
parameterPath: "accept",
|
||||||
|
|
|
@ -6,20 +6,20 @@
|
||||||
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Email } from "../operationsInterfaces";
|
import { Email } from "../operationsInterfaces/index.js";
|
||||||
import * as coreClient from "@azure/core-client";
|
import * as coreClient from "@azure/core-client";
|
||||||
import * as Mappers from "../models/mappers";
|
import * as Mappers from "../models/mappers.js";
|
||||||
import * as Parameters from "../models/parameters";
|
import * as Parameters from "../models/parameters.js";
|
||||||
import { EmailRestApiClient } from "../emailRestApiClient";
|
import { EmailRestApiClient } from "../emailRestApiClient.js";
|
||||||
import { PollerLike, PollOperationState, LroEngine } from "@azure/core-lro";
|
import { PollerLike, PollOperationState, LroEngine } from "@azure/core-lro";
|
||||||
import { LroImpl } from "../lroImpl";
|
import { LroImpl } from "../lroImpl.js";
|
||||||
import {
|
import {
|
||||||
EmailGetSendResultOptionalParams,
|
EmailGetSendResultOptionalParams,
|
||||||
EmailGetSendResultResponse,
|
EmailGetSendResultResponse,
|
||||||
EmailMessage,
|
EmailMessage,
|
||||||
EmailSendOptionalParams,
|
EmailSendOptionalParams,
|
||||||
EmailSendResponse
|
EmailSendResponse
|
||||||
} from "../models";
|
} from "../models/index.js";
|
||||||
|
|
||||||
/** Class containing Email operations. */
|
/** Class containing Email operations. */
|
||||||
export class EmailImpl implements Email {
|
export class EmailImpl implements Email {
|
||||||
|
|
|
@ -6,4 +6,4 @@
|
||||||
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export * from "./email";
|
export * from "./email.js";
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {
|
||||||
EmailMessage,
|
EmailMessage,
|
||||||
EmailSendOptionalParams,
|
EmailSendOptionalParams,
|
||||||
EmailSendResponse
|
EmailSendResponse
|
||||||
} from "../models";
|
} from "../models/index.js";
|
||||||
|
|
||||||
/** Interface representing a Email. */
|
/** Interface representing a Email. */
|
||||||
export interface Email {
|
export interface Email {
|
||||||
|
|
|
@ -6,4 +6,4 @@
|
||||||
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export * from "./email";
|
export * from "./email.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) Microsoft Corporation.
|
// Copyright (c) Microsoft Corporation.
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
export * from "./emailClient";
|
export * from "./emailClient.js";
|
||||||
export * from "./models";
|
export * from "./models.js";
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
import type { CommonClientOptions, OperationOptions } from "@azure/core-client";
|
import type { CommonClientOptions, OperationOptions } from "@azure/core-client";
|
||||||
import type { EmailRecipients, EmailAttachment, EmailAddress } from "./models";
|
import type { EmailRecipients, EmailAttachment, EmailAddress } from "./models.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Client options used to configure Email Client API requests.
|
* Client options used to configure Email Client API requests.
|
||||||
|
@ -71,4 +71,4 @@ export {
|
||||||
ErrorDetail,
|
ErrorDetail,
|
||||||
ErrorAdditionalInfo,
|
ErrorAdditionalInfo,
|
||||||
KnownEmailSendStatus,
|
KnownEmailSendStatus,
|
||||||
} from "./generated/src/models";
|
} from "./generated/src/models/index.js";
|
||||||
|
|
|
@ -1,29 +1,28 @@
|
||||||
// Copyright (c) Microsoft Corporation.
|
// Copyright (c) Microsoft Corporation.
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
import type { EmailClient, EmailMessage } from "../../src";
|
import type { EmailClient, EmailMessage } from "../../src/index.js";
|
||||||
import { KnownEmailSendStatus } from "../../src";
|
import { KnownEmailSendStatus } from "../../src/index.js";
|
||||||
import type { Recorder } from "@azure-tools/test-recorder";
|
import type { Recorder } from "@azure-tools/test-recorder";
|
||||||
import { env } from "@azure-tools/test-recorder";
|
import { env } from "@azure-tools/test-recorder";
|
||||||
import type { Context } from "mocha";
|
import { createRecordedEmailClientWithConnectionString } from "./utils/recordedClient.js";
|
||||||
import { assert } from "chai";
|
import { describe, it, assert, beforeEach, afterEach } from "vitest";
|
||||||
import { createRecordedEmailClientWithConnectionString } from "./utils/recordedClient";
|
|
||||||
|
|
||||||
describe(`EmailClient [Playback/Live]`, function () {
|
describe(`EmailClient [Playback/Live]`, () => {
|
||||||
let recorder: Recorder;
|
let recorder: Recorder;
|
||||||
let client: EmailClient;
|
let client: EmailClient;
|
||||||
|
|
||||||
beforeEach(async function (this: Context) {
|
beforeEach(async (ctx) => {
|
||||||
({ client, recorder } = await createRecordedEmailClientWithConnectionString(this));
|
({ client, recorder } = await createRecordedEmailClientWithConnectionString(ctx));
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(async function (this: Context) {
|
afterEach(async (ctx) => {
|
||||||
if (!this.currentTest?.isPending()) {
|
if (!ctx.task.pending) {
|
||||||
await recorder.stop();
|
await recorder.stop();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it("successfully sends an email to a single recipient", async function () {
|
it("successfully sends an email to a single recipient", { timeout: 120000 }, async () => {
|
||||||
const emailMessage: EmailMessage = {
|
const emailMessage: EmailMessage = {
|
||||||
senderAddress: env.SENDER_ADDRESS || "",
|
senderAddress: env.SENDER_ADDRESS || "",
|
||||||
recipients: {
|
recipients: {
|
||||||
|
@ -45,49 +44,53 @@ describe(`EmailClient [Playback/Live]`, function () {
|
||||||
const response = await poller.pollUntilDone();
|
const response = await poller.pollUntilDone();
|
||||||
|
|
||||||
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
||||||
}).timeout(120000);
|
});
|
||||||
|
|
||||||
it("successfully sends an email to multiple types of recipients", async function () {
|
it(
|
||||||
const emailMessage: EmailMessage = {
|
"successfully sends an email to multiple types of recipients",
|
||||||
senderAddress: env.SENDER_ADDRESS ?? "",
|
{ timeout: 120000 },
|
||||||
recipients: {
|
async () => {
|
||||||
to: [
|
const emailMessage: EmailMessage = {
|
||||||
{
|
senderAddress: env.SENDER_ADDRESS ?? "",
|
||||||
address: env.RECIPIENT_ADDRESS ?? "",
|
recipients: {
|
||||||
displayName: "someRecipient",
|
to: [
|
||||||
},
|
{
|
||||||
{
|
address: env.RECIPIENT_ADDRESS ?? "",
|
||||||
address: env.RECIPIENT_ADDRESS ?? "",
|
displayName: "someRecipient",
|
||||||
displayName: "someRecipient",
|
},
|
||||||
},
|
{
|
||||||
],
|
address: env.RECIPIENT_ADDRESS ?? "",
|
||||||
cc: [
|
displayName: "someRecipient",
|
||||||
{
|
},
|
||||||
address: env.RECIPIENT_ADDRESS ?? "",
|
],
|
||||||
displayName: "someRecipient",
|
cc: [
|
||||||
},
|
{
|
||||||
],
|
address: env.RECIPIENT_ADDRESS ?? "",
|
||||||
bcc: [
|
displayName: "someRecipient",
|
||||||
{
|
},
|
||||||
address: env.RECIPIENT_ADDRESS ?? "",
|
],
|
||||||
displayName: "someRecipient",
|
bcc: [
|
||||||
},
|
{
|
||||||
],
|
address: env.RECIPIENT_ADDRESS ?? "",
|
||||||
},
|
displayName: "someRecipient",
|
||||||
content: {
|
},
|
||||||
subject: "someSubject",
|
],
|
||||||
plainText: "somePlainTextBody",
|
},
|
||||||
html: "<html><h1>someHtmlBody</html>",
|
content: {
|
||||||
},
|
subject: "someSubject",
|
||||||
};
|
plainText: "somePlainTextBody",
|
||||||
|
html: "<html><h1>someHtmlBody</html>",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
const poller = await client.beginSend(emailMessage);
|
const poller = await client.beginSend(emailMessage);
|
||||||
const response = await poller.pollUntilDone();
|
const response = await poller.pollUntilDone();
|
||||||
|
|
||||||
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
||||||
}).timeout(120000);
|
},
|
||||||
|
);
|
||||||
|
|
||||||
it("successfully sends an email with an attachment", async function () {
|
it("successfully sends an email with an attachment", { timeout: 120000 }, async () => {
|
||||||
const emailMessage: EmailMessage = {
|
const emailMessage: EmailMessage = {
|
||||||
senderAddress: env.SENDER_ADDRESS ?? "",
|
senderAddress: env.SENDER_ADDRESS ?? "",
|
||||||
recipients: {
|
recipients: {
|
||||||
|
@ -116,9 +119,9 @@ describe(`EmailClient [Playback/Live]`, function () {
|
||||||
const response = await poller.pollUntilDone();
|
const response = await poller.pollUntilDone();
|
||||||
|
|
||||||
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
||||||
}).timeout(120000);
|
});
|
||||||
|
|
||||||
it("successfully sends an email with an inline attachment", async function () {
|
it("successfully sends an email with an inline attachment", { timeout: 120000 }, async () => {
|
||||||
const emailMessage: EmailMessage = {
|
const emailMessage: EmailMessage = {
|
||||||
senderAddress: env.SENDER_ADDRESS ?? "",
|
senderAddress: env.SENDER_ADDRESS ?? "",
|
||||||
recipients: {
|
recipients: {
|
||||||
|
@ -148,5 +151,5 @@ describe(`EmailClient [Playback/Live]`, function () {
|
||||||
const response = await poller.pollUntilDone();
|
const response = await poller.pollUntilDone();
|
||||||
|
|
||||||
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
assert.isTrue(response.status === KnownEmailSendStatus.Succeeded);
|
||||||
}).timeout(120000);
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
// Copyright (c) Microsoft Corporation.
|
// Copyright (c) Microsoft Corporation.
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
import type { SanitizerOptions, TestInfo } from "@azure-tools/test-recorder";
|
||||||
import type { Context, Test } from "mocha";
|
|
||||||
import type { SanitizerOptions } from "@azure-tools/test-recorder";
|
|
||||||
import { Recorder, env } from "@azure-tools/test-recorder";
|
import { Recorder, env } from "@azure-tools/test-recorder";
|
||||||
import { EmailClient } from "../../../src";
|
import { EmailClient } from "../../../src/index.js";
|
||||||
|
|
||||||
export interface RecordedEmailClient {
|
export interface RecordedEmailClient {
|
||||||
client: EmailClient;
|
client: EmailClient;
|
||||||
|
@ -47,7 +45,7 @@ const sanitizerOptions: SanitizerOptions = {
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function createRecorder(context: Test | undefined): Promise<Recorder> {
|
export async function createRecorder(context: TestInfo | undefined): Promise<Recorder> {
|
||||||
const recorder = new Recorder(context);
|
const recorder = new Recorder(context);
|
||||||
await recorder.start({ envSetupForPlayback });
|
await recorder.start({ envSetupForPlayback });
|
||||||
await recorder.addSanitizers(sanitizerOptions, ["record", "playback"]);
|
await recorder.addSanitizers(sanitizerOptions, ["record", "playback"]);
|
||||||
|
@ -61,9 +59,9 @@ export async function createRecorder(context: Test | undefined): Promise<Recorde
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createRecordedEmailClientWithConnectionString(
|
export async function createRecordedEmailClientWithConnectionString(
|
||||||
context: Context,
|
context: TestInfo,
|
||||||
): Promise<RecordedEmailClient> {
|
): Promise<RecordedEmailClient> {
|
||||||
const recorder = await createRecorder(context.currentTest);
|
const recorder = await createRecorder(context);
|
||||||
|
|
||||||
const client = new EmailClient(
|
const client = new EmailClient(
|
||||||
env.COMMUNICATION_CONNECTION_STRING_EMAIL ?? "",
|
env.COMMUNICATION_CONNECTION_STRING_EMAIL ?? "",
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"extends": "./.tshy/build.json",
|
||||||
|
"include": ["./src/**/*.ts", "./src/**/*.mts", "./test/**/*.spec.ts", "./test/**/*.mts"],
|
||||||
|
"exclude": ["./test/**/node/**/*.ts"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist-test/browser",
|
||||||
|
"rootDir": ".",
|
||||||
|
"skipLibCheck": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../../tsconfig",
|
"extends": "../../../tsconfig",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "./dist-esm",
|
|
||||||
"declarationDir": "./types",
|
|
||||||
"paths": {
|
"paths": {
|
||||||
"@azure/communication-email": ["./src/index"]
|
"@azure/communication-email": ["./src/index"]
|
||||||
}
|
},
|
||||||
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"rootDir": "."
|
||||||
},
|
},
|
||||||
"include": ["src/**/*.ts", "test/**/*.ts", "samples-dev/**/*.ts"]
|
"include": ["src/**/*.ts", "src/**/*.mts", "src/**/*.cts", "samples-dev/**/*.ts", "test/**/*.ts"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
|
import { defineConfig, mergeConfig } from "vitest/config";
|
||||||
|
import viteConfig from "../../../vitest.browser.shared.config.ts";
|
||||||
|
|
||||||
|
export default mergeConfig(
|
||||||
|
viteConfig,
|
||||||
|
defineConfig({
|
||||||
|
test: {
|
||||||
|
include: ["dist-test/browser/test/**/*.spec.js"],
|
||||||
|
hookTimeout: 5000000,
|
||||||
|
testTimeout: 5000000,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
|
@ -0,0 +1,16 @@
|
||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
|
import { defineConfig, mergeConfig } from "vitest/config";
|
||||||
|
import viteConfig from "../../../vitest.shared.config.ts";
|
||||||
|
|
||||||
|
export default mergeConfig(
|
||||||
|
viteConfig,
|
||||||
|
defineConfig({
|
||||||
|
test: {
|
||||||
|
include: ["test/**/*.spec.ts"],
|
||||||
|
hookTimeout: 5000000,
|
||||||
|
testTimeout: 5000000,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
Загрузка…
Ссылка в новой задаче