diff --git a/sdk/search/search-documents/package.json b/sdk/search/search-documents/package.json index cd3e9b5cb0b1..55edddb2e22a 100644 --- a/sdk/search/search-documents/package.json +++ b/sdk/search/search-documents/package.json @@ -41,7 +41,8 @@ "LICENSE" ], "browser": { - "./dist-esm/src/base64.js": "./dist-esm/src/base64.browser.js" + "./dist-esm/src/base64.js": "./dist-esm/src/base64.browser.js", + "./dist-esm/src/synonymMapHelper.js": "./dist-esm/src/synonymMapHelper.browser.js" }, "//metadata": { "constantPaths": [ diff --git a/sdk/search/search-documents/review/search-documents.api.md b/sdk/search/search-documents/review/search-documents.api.md index 098ca8905f01..00a80e61d659 100644 --- a/sdk/search/search-documents/review/search-documents.api.md +++ b/sdk/search/search-documents/review/search-documents.api.md @@ -288,6 +288,9 @@ export interface CreateOrUpdateSynonymMapOptions extends OperationOptions { // @public export type CreateSkillsetOptions = OperationOptions; +// @public +export function createSynonymMapFromFile(name: string, filePath: string): Promise; + // @public export type CreateSynonymMapOptions = OperationOptions; diff --git a/sdk/search/search-documents/src/index.ts b/sdk/search/search-documents/src/index.ts index 85fa534379b3..d683c36da059 100644 --- a/sdk/search/search-documents/src/index.ts +++ b/sdk/search/search-documents/src/index.ts @@ -301,3 +301,4 @@ export { SearchIndexerKnowledgeStoreTableProjectionSelector } from "./generated/service/models"; export { AzureKeyCredential } from "@azure/core-auth"; +export { createSynonymMapFromFile } from "./synonymMapHelper"; diff --git a/sdk/search/search-documents/src/synonymMapHelper.browser.ts b/sdk/search/search-documents/src/synonymMapHelper.browser.ts new file mode 100644 index 000000000000..21157bdb866c --- /dev/null +++ b/sdk/search/search-documents/src/synonymMapHelper.browser.ts @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { SynonymMap } from "./serviceModels"; + +/** + * Helper method to create a SynonymMap object. This is a NodeJS only method. + * Will throw an error for browser. + * + * @param _name - Name of the SynonymMap. + * @param _filePath - Path of the file that contains the Synonyms (seperated by new lines) + * @returns SynonymMap object + */ +export async function createSynonymMapFromFile( + _name: string, + _filePath: string +): Promise { + throw new Error("Not implemented for browser."); +} diff --git a/sdk/search/search-documents/src/synonymMapHelper.ts b/sdk/search/search-documents/src/synonymMapHelper.ts new file mode 100644 index 000000000000..a01bf5f58f6d --- /dev/null +++ b/sdk/search/search-documents/src/synonymMapHelper.ts @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { SynonymMap } from "./serviceModels"; +import { promisify } from "util"; +import * as fs from "fs"; +const readFileAsync = promisify(fs.readFile); + +/** + * Helper method to create a SynonymMap object. This is a NodeJS only method. + * + * @param name - Name of the SynonymMap. + * @param filePath - Path of the file that contains the Synonyms (seperated by new lines) + * @returns SynonymMap object + */ +export async function createSynonymMapFromFile( + name: string, + filePath: string +): Promise { + const synonyms: string[] = (await readFileAsync(filePath, "utf-8")) + .replace(/\r/g, "") + .split("\n") + .map((line) => line.trim()) + .filter(Boolean); + + return { + name, + synonyms + }; +} diff --git a/sdk/search/search-documents/test/internal/browser/synonymMap.browser.spec.ts b/sdk/search/search-documents/test/internal/browser/synonymMap.browser.spec.ts new file mode 100644 index 000000000000..fc1d7a7a135c --- /dev/null +++ b/sdk/search/search-documents/test/internal/browser/synonymMap.browser.spec.ts @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { assert } from "chai"; +import { createSynonymMapFromFile } from "../../../src/synonymMapHelper.browser"; + +describe("synonymmap", () => { + it("create synonymmap from file(browser)", async function() { + let errorThrown = false; + try { + await createSynonymMapFromFile("my-synonym-map-1", "./test/internal/synonymMap.txt"); + } catch (ex) { + errorThrown = true; + } + assert.isTrue(errorThrown, "Expected createSynonymMapFromFile to fail with an exception"); + }); +}); diff --git a/sdk/search/search-documents/test/internal/node/synonymMap.node.spec.ts b/sdk/search/search-documents/test/internal/node/synonymMap.node.spec.ts new file mode 100644 index 000000000000..66b613005365 --- /dev/null +++ b/sdk/search/search-documents/test/internal/node/synonymMap.node.spec.ts @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { assert } from "chai"; +import { createSynonymMapFromFile } from "../../../src"; +import { SynonymMap } from "../../../src/serviceModels"; + +describe("synonymmap", () => { + it("create synonymmap from file(node)", async function() { + const synonymMap: SynonymMap = await createSynonymMapFromFile( + "my-synonym-map-1", + "./test/internal/synonymMap.txt" + ); + assert.equal(synonymMap.name, "my-synonym-map-1"); + assert.equal(synonymMap.synonyms.length, 2); + assert.equal(synonymMap.synonyms[0], "United States, United States of America => USA"); + assert.equal(synonymMap.synonyms[1], "Washington, Wash. => WA"); + }); +}); diff --git a/sdk/search/search-documents/test/internal/synonymMap.txt b/sdk/search/search-documents/test/internal/synonymMap.txt new file mode 100644 index 000000000000..c81a921ed614 --- /dev/null +++ b/sdk/search/search-documents/test/internal/synonymMap.txt @@ -0,0 +1,2 @@ +United States, United States of America => USA +Washington, Wash. => WA