@dbx-tools/search 0.9.5 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/src/tool.js CHANGED
@@ -14,11 +14,11 @@
14
14
  *
15
15
  * @module
16
16
  */
17
- import { search as sharedSearch } from "@dbx-tools/shared-search";
17
+ import { searchSchemas } from "@dbx-tools/shared-search";
18
18
  import { createTool } from "@mastra/core/tools";
19
19
  import { z } from "zod";
20
20
  import { toSearchOptions, toUniversalSearchOptions } from "./_search-options.js";
21
- import { toCreateIndexOptions } from "./index-tools.js";
21
+ import { toCreateIndexOptions } from "./index-options.js";
22
22
  import { toDocumentArray } from "./query.js";
23
23
  import { createSearchRuntime } from "./runtime.js";
24
24
  import { ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SEARCH_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, createIndexToolSchema, indexInfoSchema, searchResultSchema, searchToolSchema, syncIndexToolSchema, universalSearchToolSchema, } from "./schema.js";
@@ -81,16 +81,16 @@ export function universalSearchTool(options = {}) {
81
81
  */
82
82
  export function addDocumentsTool(options = {}) {
83
83
  const runtime = toolRuntime(options);
84
- const inputSchema = sharedSearch.searchDocumentSchema
84
+ const inputSchema = searchSchemas.searchDocumentSchema
85
85
  .array()
86
86
  .describe("Documents to add or update. Each must include the index primary key.");
87
87
  return createTool({
88
88
  id: options.id ?? "add_documents",
89
89
  description: ADD_DOCUMENTS_TOOL_DESCRIPTION,
90
- inputSchema: sharedSearch.searchRequestSchema
90
+ inputSchema: searchSchemas.searchRequestSchema
91
91
  .pick({ index: true })
92
92
  .extend({ documents: inputSchema }),
93
- outputSchema: sharedSearch.upsertResultSchema,
93
+ outputSchema: searchSchemas.upsertResultSchema,
94
94
  execute: async (input, context) => {
95
95
  const { client, config } = runtime;
96
96
  const record = input;
@@ -144,4 +144,4 @@ export function syncIndexTool(options = {}) {
144
144
  },
145
145
  });
146
146
  }
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFxQixNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxjQUFjLENBQUM7QUFDdkUsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSxhQUFhLENBQUM7QUFjckIsNEVBQTRFO0FBQzVFLFNBQVMsV0FBVyxDQUFDLE9BQTBCO0lBQzdDLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDL0QsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFDRCxPQUFPLENBQ0wsT0FBTyxDQUFDLE9BQU87UUFDZixtQkFBbUIsQ0FBQztZQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsV0FBVyxFQUFFLE9BQU8sQ0FB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O1FBQ2hDLFlBQVksRUFBRSxxQkFBcUI7UUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDekQsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgc2VhcmNoYCwgYHVuaXZlcnNhbF9zZWFyY2hgLCBhbmQgKG9wdC1pbikgYGFkZF9kb2N1bWVudHNgLFxuICogYGNyZWF0ZV9pbmRleGAsIGFuZCBgc3luY19pbmRleGAgTWFzdHJhIHRvb2xzLlxuICpcbiAqIEFwcC1pbnRlZ3JhdGVkIGFnZW50cyBzaG91bGQgY29uc3VtZSB0aGUgcGx1Z2luJ3MgbmF0aXZlIHRvb2xraXQgc28gY2FsbHNcbiAqIHJldGFpbiB0aGF0IHBsdWdpbidzIGNvbmZpZyBhbmQgcHJvdmlkZXIgYmFja2VuZC4gVGhlc2Ugc3RhbmRhbG9uZSBmYWN0b3JpZXNcbiAqIGNhcHR1cmUgYW4gZXhwbGljaXQgcnVudGltZSBvciBidWlsZCBhbiBpc29sYXRlZCBvbmUgZnJvbSBjb25maWcgcGx1cyBhXG4gKiBwcm92aWRlci4gVGhleSBydW4gdW5kZXIgdGhlIGNhbGxlcidzIE9CTyBzY29wZSAodGhlIGNsaWVudCByZXNvbHZlcyB0aGVcbiAqIGV4ZWN1dGlvbiBjb250ZXh0J3Mgd29ya3NwYWNlIGNsaWVudCksIHNvIHNlYXJjaCBydW5zIGFzIHRoZSByZXF1ZXN0aW5nIHVzZXJcbiAqIGFuZCBVbml0eSBDYXRhbG9nIEFDTHMgYXBwbHkuXG4gKlxuICogVGhlIHNhbWUgdG9vbHMgYXJlIGV4cG9zZWQgdG8gQXBwS2l0J3Mgb3duIGFnZW50cyB0aHJvdWdoIHRoZSBwbHVnaW4nc1xuICogYFRvb2xQcm92aWRlcmAgKHNlZSBgcGx1Z2luLnRzYCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlYXJjaCBhcyBzaGFyZWRTZWFyY2gsIHR5cGUgVXBzZXJ0UmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyB0b1NlYXJjaE9wdGlvbnMsIHRvVW5pdmVyc2FsU2VhcmNoT3B0aW9ucyB9IGZyb20gXCIuL19zZWFyY2gtb3B0aW9ucy50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hSZWFkQmFja2VuZCB9IGZyb20gXCIuL2NsaWVudC50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IHRvQ3JlYXRlSW5kZXhPcHRpb25zIH0gZnJvbSBcIi4vaW5kZXgtdG9vbHMudHNcIjtcbmltcG9ydCB7IHRvRG9jdW1lbnRBcnJheSB9IGZyb20gXCIuL3F1ZXJ5LnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hSdW50aW1lLCB0eXBlIFNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5pbXBvcnQge1xuICBBRERfRE9DVU1FTlRTX1RPT0xfREVTQ1JJUFRJT04sXG4gIENSRUFURV9JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICBTRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICBVTklWRVJTQUxfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSxcbiAgaW5kZXhJbmZvU2NoZW1hLFxuICBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gIHNlYXJjaFRvb2xTY2hlbWEsXG4gIHN5bmNJbmRleFRvb2xTY2hlbWEsXG4gIHVuaXZlcnNhbFNlYXJjaFRvb2xTY2hlbWEsXG59IGZyb20gXCIuL3NjaGVtYS50c1wiO1xuXG4vKiogT3B0aW9ucyBhY2NlcHRlZCBieSBldmVyeSBzdGFuZGFsb25lIHRvb2wgZmFjdG9yeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoVG9vbE9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIHRvb2wgaWQgKGRlZmF1bHRzIHBlciB0b29sKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBJc29sYXRlZCBydW50aW1lIHVzZWQgYnkgdGhpcyBzdGFuZGFsb25lIHRvb2wuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGNvbmZpZy9iYWNrZW5kLiAqL1xuICBydW50aW1lPzogU2VhcmNoUnVudGltZTtcbiAgLyoqIENvbmZpZyB1c2VkIHRvIGNyZWF0ZSBhbiBpc29sYXRlZCBydW50aW1lLiAqL1xuICBjb25maWc/OiBTZWFyY2hQbHVnaW5Db25maWc7XG4gIC8qKiBQcm92aWRlciB1c2VkIHdoZW4gY3JlYXRpbmcgYSBydW50aW1lIGZyb20gY29uZmlnLiAqL1xuICByZWFkQmFja2VuZD86IFNlYXJjaFJlYWRCYWNrZW5kO1xufVxuXG4vKiogUmVzb2x2ZSB0aGUgaXNvbGF0ZWQgcnVudGltZSBjYXB0dXJlZCBieSBvbmUgc3RhbmRhbG9uZSB0b29sIGZhY3RvcnkuICovXG5mdW5jdGlvbiB0b29sUnVudGltZShvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyk6IFNlYXJjaFJ1bnRpbWUge1xuICBpZiAob3B0aW9ucy5ydW50aW1lICYmIChvcHRpb25zLmNvbmZpZyB8fCBvcHRpb25zLnJlYWRCYWNrZW5kKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzZWFyY2ggdG9vbCBvcHRpb25zIGFjY2VwdCBydW50aW1lIG9yIGNvbmZpZy9yZWFkQmFja2VuZCwgbm90IGJvdGhcIik7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBvcHRpb25zLnJ1bnRpbWUgPz9cbiAgICBjcmVhdGVTZWFyY2hSdW50aW1lKHtcbiAgICAgIGNvbmZpZzogb3B0aW9ucy5jb25maWcsXG4gICAgICByZWFkQmFja2VuZDogb3B0aW9ucy5yZWFkQmFja2VuZCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgc2VhcmNoYCB0b29sLiBTcHJlYWQgaXQgaW50byBhbnkgYWdlbnQgdGhhdCBzaG91bGQgYmUgYWJsZSB0byBsb29rXG4gKiB0aGluZ3MgdXAgaW4gYW4gaW5kZXguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzZWFyY2hUb29sIH0gZnJvbSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVBZ2VudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCBzdXBwb3J0ID0gY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiQW5zd2VyIGZyb20gdGhlIGRvY3MuIFVzZSBgc2VhcmNoYCB0byBmaW5kIHRoZW0uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyBzZWFyY2g6IHNlYXJjaFRvb2woKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgY29uc3QgcnVudGltZSA9IHRvb2xSdW50aW1lKG9wdGlvbnMpO1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjogU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHNlYXJjaFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gc2VhcmNoVG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICByZXR1cm4gcnVudGltZS5jbGllbnQuc2VhcmNoKHJlcXVlc3QucXVlcnksIHRvU2VhcmNoT3B0aW9ucyhyZXF1ZXN0LCBjb250ZXh0Py5hYm9ydFNpZ25hbCkpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGB1bml2ZXJzYWxfc2VhcmNoYCB0b29sIChmZWRlcmF0ZWQgc2VhcmNoIGFjcm9zcyBldmVyeSBpbmRleCkuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pdmVyc2FsU2VhcmNoVG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b29sUnVudGltZShvcHRpb25zKTtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwidW5pdmVyc2FsX3NlYXJjaFwiLFxuICAgIGRlc2NyaXB0aW9uOiBVTklWRVJTQUxfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHVuaXZlcnNhbFNlYXJjaFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICByZXR1cm4gcnVudGltZS5jbGllbnQudW5pdmVyc2FsU2VhcmNoKFxuICAgICAgICByZXF1ZXN0LnF1ZXJ5LFxuICAgICAgICB0b1VuaXZlcnNhbFNlYXJjaE9wdGlvbnMocmVxdWVzdCwgY29udGV4dD8uYWJvcnRTaWduYWwpLFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBhZGRfZG9jdW1lbnRzYCB0b29sICh3cml0ZSBpbnRvIGEgZGlyZWN0LWFjY2VzcyBpbmRleCkuXG4gKiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRG9jdW1lbnRzVG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b29sUnVudGltZShvcHRpb25zKTtcbiAgY29uc3QgaW5wdXRTY2hlbWEgPSBzaGFyZWRTZWFyY2guc2VhcmNoRG9jdW1lbnRTY2hlbWFcbiAgICAuYXJyYXkoKVxuICAgIC5kZXNjcmliZShcIkRvY3VtZW50cyB0byBhZGQgb3IgdXBkYXRlLiBFYWNoIG11c3QgaW5jbHVkZSB0aGUgaW5kZXggcHJpbWFyeSBrZXkuXCIpO1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJhZGRfZG9jdW1lbnRzXCIsXG4gICAgZGVzY3JpcHRpb246IEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc2hhcmVkU2VhcmNoLnNlYXJjaFJlcXVlc3RTY2hlbWFcbiAgICAgIC5waWNrKHsgaW5kZXg6IHRydWUgfSlcbiAgICAgIC5leHRlbmQoeyBkb2N1bWVudHM6IGlucHV0U2NoZW1hIH0pLFxuICAgIG91dHB1dFNjaGVtYTogc2hhcmVkU2VhcmNoLnVwc2VydFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpOiBQcm9taXNlPFVwc2VydFJlc3VsdD4gPT4ge1xuICAgICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gcnVudGltZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGlucHV0IGFzIHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9O1xuICAgICAgY29uc3QgZG9jdW1lbnRzID0gdG9Eb2N1bWVudEFycmF5KHJlY29yZC5kb2N1bWVudHMpO1xuICAgICAgY29uc3QgaW5kZXggPSByZWNvcmQuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgICAgcmV0dXJuIGNsaWVudC5hZGREb2N1bWVudHMoaW5kZXgsIGRvY3VtZW50cywgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHQtaW4gYGNyZWF0ZV9pbmRleGAgdG9vbCAocHJvdmlzaW9uIGEgVmVjdG9yIFNlYXJjaCBpbmRleCkuXG4gKiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBTZWFyY2hDbGllbnQuY3JlYXRlSW5kZXh9LCBpbmZlcnJpbmcgdGhlIGVuZHBvaW50LCBlbWJlZGRpbmcgbW9kZWwsXG4gKiBrZXksIGFuZCBjb2x1bW5zIGZyb20gdGhlIHJlcXVlc3QgKyBwbHVnaW4gY29uZmlnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5kZXhUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgY29uc3QgcnVudGltZSA9IHRvb2xSdW50aW1lKG9wdGlvbnMpO1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJjcmVhdGVfaW5kZXhcIixcbiAgICBkZXNjcmlwdGlvbjogQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IGNyZWF0ZUluZGV4VG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IGluZGV4SW5mb1NjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBjcmVhdGVJbmRleFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgcmV0dXJuIHJ1bnRpbWUuY2xpZW50LmNyZWF0ZUluZGV4KFxuICAgICAgICByZXF1ZXN0Lm5hbWUsXG4gICAgICAgIHRvQ3JlYXRlSW5kZXhPcHRpb25zKHJlcXVlc3QsIGNvbnRleHQ/LmFib3J0U2lnbmFsKSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBPdXRwdXQgc2NoZW1hIGZvciB0aGUgYHN5bmNfaW5kZXhgIHRvb2wuICovXG5jb25zdCBzeW5jSW5kZXhSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGluZGV4OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIGluZGV4IHRoYXQgd2FzIHN5bmNlZC5cIiksXG4gIHN5bmNlZDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIG9uY2UgdGhlIHN5bmMgd2FzIHRyaWdnZXJlZC5cIiksXG59KTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBzeW5jX2luZGV4YCB0b29sIChyZWZyZXNoIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0c1xuICogc291cmNlIHRhYmxlKS4gT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNJbmRleFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBydW50aW1lID0gdG9vbFJ1bnRpbWUob3B0aW9ucyk7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcInN5bmNfaW5kZXhcIixcbiAgICBkZXNjcmlwdGlvbjogU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzeW5jSW5kZXhUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc3luY0luZGV4UmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHN5bmNJbmRleFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gcnVudGltZTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgICBhd2FpdCBjbGllbnQuc3luY0luZGV4KGluZGV4LCBjb250ZXh0Py5hYm9ydFNpZ25hbCk7XG4gICAgICByZXR1cm4geyBpbmRleCwgc3luY2VkOiB0cnVlIH07XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixNQUFNLGNBQWMsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLGlDQUFpQyxFQUNqQyxxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLHlCQUF5QixHQUMxQixNQUFNLGFBQWEsQ0FBQztBQWNyQiw0RUFBNEU7QUFDNUUsU0FBUyxXQUFXLENBQUMsT0FBMEI7SUFDN0MsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLElBQUksU0FBUyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUNELE9BQU8sQ0FDTCxPQUFPLENBQUMsT0FBTztRQUNmLG1CQUFtQixDQUFDO1lBQ2xCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7U0FD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WSxFQUFFLHFCQUFxQjtRQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUN6RCxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBzZWFyY2hgLCBgdW5pdmVyc2FsX3NlYXJjaGAsIGFuZCAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AsXG4gKiBgY3JlYXRlX2luZGV4YCwgYW5kIGBzeW5jX2luZGV4YCBNYXN0cmEgdG9vbHMuXG4gKlxuICogQXBwLWludGVncmF0ZWQgYWdlbnRzIHNob3VsZCBjb25zdW1lIHRoZSBwbHVnaW4ncyBuYXRpdmUgdG9vbGtpdCBzbyBjYWxsc1xuICogcmV0YWluIHRoYXQgcGx1Z2luJ3MgY29uZmlnIGFuZCBwcm92aWRlciBiYWNrZW5kLiBUaGVzZSBzdGFuZGFsb25lIGZhY3Rvcmllc1xuICogY2FwdHVyZSBhbiBleHBsaWNpdCBydW50aW1lIG9yIGJ1aWxkIGFuIGlzb2xhdGVkIG9uZSBmcm9tIGNvbmZpZyBwbHVzIGFcbiAqIHByb3ZpZGVyLiBUaGV5IHJ1biB1bmRlciB0aGUgY2FsbGVyJ3MgT0JPIHNjb3BlICh0aGUgY2xpZW50IHJlc29sdmVzIHRoZVxuICogZXhlY3V0aW9uIGNvbnRleHQncyB3b3Jrc3BhY2UgY2xpZW50KSwgc28gc2VhcmNoIHJ1bnMgYXMgdGhlIHJlcXVlc3RpbmcgdXNlclxuICogYW5kIFVuaXR5IENhdGFsb2cgQUNMcyBhcHBseS5cbiAqXG4gKiBUaGUgc2FtZSB0b29scyBhcmUgZXhwb3NlZCB0byBBcHBLaXQncyBvd24gYWdlbnRzIHRocm91Z2ggdGhlIHBsdWdpbidzXG4gKiBgVG9vbFByb3ZpZGVyYCAoc2VlIGBwbHVnaW4udHNgKS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc2VhcmNoU2NoZW1hcywgdHlwZSBVcHNlcnRSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHRvU2VhcmNoT3B0aW9ucywgdG9Vbml2ZXJzYWxTZWFyY2hPcHRpb25zIH0gZnJvbSBcIi4vX3NlYXJjaC1vcHRpb25zLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFJlYWRCYWNrZW5kIH0gZnJvbSBcIi4vY2xpZW50LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgdG9DcmVhdGVJbmRleE9wdGlvbnMgfSBmcm9tIFwiLi9pbmRleC1vcHRpb25zLnRzXCI7XG5pbXBvcnQgeyB0b0RvY3VtZW50QXJyYXkgfSBmcm9tIFwiLi9xdWVyeS50c1wiO1xuaW1wb3J0IHsgY3JlYXRlU2VhcmNoUnVudGltZSwgdHlwZSBTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgVU5JVkVSU0FMX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBjcmVhdGVJbmRleFRvb2xTY2hlbWEsXG4gIGluZGV4SW5mb1NjaGVtYSxcbiAgc2VhcmNoUmVzdWx0U2NoZW1hLFxuICBzZWFyY2hUb29sU2NoZW1hLFxuICBzeW5jSW5kZXhUb29sU2NoZW1hLFxuICB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcblxuLyoqIE9wdGlvbnMgYWNjZXB0ZWQgYnkgZXZlcnkgc3RhbmRhbG9uZSB0b29sIGZhY3RvcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFRvb2xPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIHRoZSB0b29sIGlkIChkZWZhdWx0cyBwZXIgdG9vbCkuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogSXNvbGF0ZWQgcnVudGltZSB1c2VkIGJ5IHRoaXMgc3RhbmRhbG9uZSB0b29sLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBjb25maWcvYmFja2VuZC4gKi9cbiAgcnVudGltZT86IFNlYXJjaFJ1bnRpbWU7XG4gIC8qKiBDb25maWcgdXNlZCB0byBjcmVhdGUgYW4gaXNvbGF0ZWQgcnVudGltZS4gKi9cbiAgY29uZmlnPzogU2VhcmNoUGx1Z2luQ29uZmlnO1xuICAvKiogUHJvdmlkZXIgdXNlZCB3aGVuIGNyZWF0aW5nIGEgcnVudGltZSBmcm9tIGNvbmZpZy4gKi9cbiAgcmVhZEJhY2tlbmQ/OiBTZWFyY2hSZWFkQmFja2VuZDtcbn1cblxuLyoqIFJlc29sdmUgdGhlIGlzb2xhdGVkIHJ1bnRpbWUgY2FwdHVyZWQgYnkgb25lIHN0YW5kYWxvbmUgdG9vbCBmYWN0b3J5LiAqL1xuZnVuY3Rpb24gdG9vbFJ1bnRpbWUob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMpOiBTZWFyY2hSdW50aW1lIHtcbiAgaWYgKG9wdGlvbnMucnVudGltZSAmJiAob3B0aW9ucy5jb25maWcgfHwgb3B0aW9ucy5yZWFkQmFja2VuZCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VhcmNoIHRvb2wgb3B0aW9ucyBhY2NlcHQgcnVudGltZSBvciBjb25maWcvcmVhZEJhY2tlbmQsIG5vdCBib3RoXCIpO1xuICB9XG4gIHJldHVybiAoXG4gICAgb3B0aW9ucy5ydW50aW1lID8/XG4gICAgY3JlYXRlU2VhcmNoUnVudGltZSh7XG4gICAgICBjb25maWc6IG9wdGlvbnMuY29uZmlnLFxuICAgICAgcmVhZEJhY2tlbmQ6IG9wdGlvbnMucmVhZEJhY2tlbmQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHNlYXJjaGAgdG9vbC4gU3ByZWFkIGl0IGludG8gYW55IGFnZW50IHRoYXQgc2hvdWxkIGJlIGFibGUgdG8gbG9va1xuICogdGhpbmdzIHVwIGluIGFuIGluZGV4LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc2VhcmNoVG9vbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NlYXJjaFwiO1xuICogaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3Qgc3VwcG9ydCA9IGNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIkFuc3dlciBmcm9tIHRoZSBkb2NzLiBVc2UgYHNlYXJjaGAgdG8gZmluZCB0aGVtLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgc2VhcmNoOiBzZWFyY2hUb29sKCkgfSksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoVG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b29sUnVudGltZShvcHRpb25zKTtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwic2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzZWFyY2hUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc2VhcmNoUmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHNlYXJjaFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgcmV0dXJuIHJ1bnRpbWUuY2xpZW50LnNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB0b1NlYXJjaE9wdGlvbnMocmVxdWVzdCwgY29udGV4dD8uYWJvcnRTaWduYWwpKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgdW5pdmVyc2FsX3NlYXJjaGAgdG9vbCAoZmVkZXJhdGVkIHNlYXJjaCBhY3Jvc3MgZXZlcnkgaW5kZXgpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXZlcnNhbFNlYXJjaFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBydW50aW1lID0gdG9vbFJ1bnRpbWUob3B0aW9ucyk7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcInVuaXZlcnNhbF9zZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjogVU5JVkVSU0FMX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc2VhcmNoUmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHVuaXZlcnNhbFNlYXJjaFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgcmV0dXJuIHJ1bnRpbWUuY2xpZW50LnVuaXZlcnNhbFNlYXJjaChcbiAgICAgICAgcmVxdWVzdC5xdWVyeSxcbiAgICAgICAgdG9Vbml2ZXJzYWxTZWFyY2hPcHRpb25zKHJlcXVlc3QsIGNvbnRleHQ/LmFib3J0U2lnbmFsKSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9wdC1pbiBgYWRkX2RvY3VtZW50c2AgdG9vbCAod3JpdGUgaW50byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERvY3VtZW50c1Rvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBydW50aW1lID0gdG9vbFJ1bnRpbWUob3B0aW9ucyk7XG4gIGNvbnN0IGlucHV0U2NoZW1hID0gc2VhcmNoU2NoZW1hcy5zZWFyY2hEb2N1bWVudFNjaGVtYVxuICAgIC5hcnJheSgpXG4gICAgLmRlc2NyaWJlKFwiRG9jdW1lbnRzIHRvIGFkZCBvciB1cGRhdGUuIEVhY2ggbXVzdCBpbmNsdWRlIHRoZSBpbmRleCBwcmltYXJ5IGtleS5cIik7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImFkZF9kb2N1bWVudHNcIixcbiAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzZWFyY2hTY2hlbWFzLnNlYXJjaFJlcXVlc3RTY2hlbWFcbiAgICAgIC5waWNrKHsgaW5kZXg6IHRydWUgfSlcbiAgICAgIC5leHRlbmQoeyBkb2N1bWVudHM6IGlucHV0U2NoZW1hIH0pLFxuICAgIG91dHB1dFNjaGVtYTogc2VhcmNoU2NoZW1hcy51cHNlcnRSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KTogUHJvbWlzZTxVcHNlcnRSZXN1bHQ+ID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IHJ1bnRpbWU7XG4gICAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyB7IGluZGV4Pzogc3RyaW5nOyBkb2N1bWVudHM6IHVua25vd24gfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50cyA9IHRvRG9jdW1lbnRBcnJheShyZWNvcmQuZG9jdW1lbnRzKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVjb3JkLmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICAgIHJldHVybiBjbGllbnQuYWRkRG9jdW1lbnRzKGluZGV4LCBkb2N1bWVudHMsIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBjcmVhdGVfaW5kZXhgIHRvb2wgKHByb3Zpc2lvbiBhIFZlY3RvciBTZWFyY2ggaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgU2VhcmNoQ2xpZW50LmNyZWF0ZUluZGV4fSwgaW5mZXJyaW5nIHRoZSBlbmRwb2ludCwgZW1iZWRkaW5nIG1vZGVsLFxuICoga2V5LCBhbmQgY29sdW1ucyBmcm9tIHRoZSByZXF1ZXN0ICsgcGx1Z2luIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4VG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b29sUnVudGltZShvcHRpb25zKTtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwiY3JlYXRlX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IENSRUFURV9JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBjcmVhdGVJbmRleFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBpbmRleEluZm9TY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gY3JlYXRlSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIHJldHVybiBydW50aW1lLmNsaWVudC5jcmVhdGVJbmRleChcbiAgICAgICAgcmVxdWVzdC5uYW1lLFxuICAgICAgICB0b0NyZWF0ZUluZGV4T3B0aW9ucyhyZXF1ZXN0LCBjb250ZXh0Py5hYm9ydFNpZ25hbCksXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKiogT3V0cHV0IHNjaGVtYSBmb3IgdGhlIGBzeW5jX2luZGV4YCB0b29sLiAqL1xuY29uc3Qgc3luY0luZGV4UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBpbmRleDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBpbmRleCB0aGF0IHdhcyBzeW5jZWQuXCIpLFxuICBzeW5jZWQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVHJ1ZSBvbmNlIHRoZSBzeW5jIHdhcyB0cmlnZ2VyZWQuXCIpLFxufSk7XG5cbi8qKlxuICogQnVpbGQgdGhlIG9wdC1pbiBgc3luY19pbmRleGAgdG9vbCAocmVmcmVzaCBhIERlbHRhIFN5bmMgaW5kZXggZnJvbSBpdHNcbiAqIHNvdXJjZSB0YWJsZSkuIE9ubHkgaW5zdGFsbCBpdCB3aGVuIHRoZSBwbHVnaW4ncyB3cml0ZSBzdXJmYWNlIGlzIGVuYWJsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW5jSW5kZXhUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgY29uc3QgcnVudGltZSA9IHRvb2xSdW50aW1lKG9wdGlvbnMpO1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzeW5jX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc3luY0luZGV4VG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHN5bmNJbmRleFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzeW5jSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IHJ1bnRpbWU7XG4gICAgICBjb25zdCBpbmRleCA9IHJlcXVlc3QuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgICAgYXdhaXQgY2xpZW50LnN5bmNJbmRleChpbmRleCwgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgICAgcmV0dXJuIHsgaW5kZXgsIHN5bmNlZDogdHJ1ZSB9O1xuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -1 +1 @@
1
- {"root":["../src/_search-options.ts","../src/client.ts","../src/config.ts","../src/index-tools.ts","../src/lakebase-plugin.ts","../src/lakebase.ts","../src/native.ts","../src/plugin.ts","../src/query.ts","../src/runtime.ts","../src/schema.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/_search-options.ts","../src/client.ts","../src/config.ts","../src/index-options.ts","../src/lakebase-plugin.ts","../src/lakebase.ts","../src/native.ts","../src/plugin.ts","../src/query.ts","../src/runtime.ts","../src/schema.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -29,12 +29,12 @@
29
29
  "dependencies": {
30
30
  "@databricks/appkit": "0.81.0",
31
31
  "@databricks/sdk-experimental": "^0.17.0",
32
- "@dbx-tools/appkit": "^0.9.5",
33
- "@dbx-tools/core": "^0.9.5",
34
- "@dbx-tools/model": "^0.9.5",
35
- "@dbx-tools/shared-core": "^0.9.5",
36
- "@dbx-tools/shared-model": "^0.9.5",
37
- "@dbx-tools/shared-search": "^0.9.5",
32
+ "@dbx-tools/appkit": "^0.9.7",
33
+ "@dbx-tools/core": "^0.9.7",
34
+ "@dbx-tools/model": "^0.9.7",
35
+ "@dbx-tools/shared-core": "^0.9.7",
36
+ "@dbx-tools/shared-model": "^0.9.7",
37
+ "@dbx-tools/shared-search": "^0.9.7",
38
38
  "@mastra/core": "1.71.0",
39
39
  "pg": "^8.22.0",
40
40
  "zod": "4.3.6"
@@ -53,7 +53,7 @@
53
53
  "./package.json": "./package.json"
54
54
  }
55
55
  },
56
- "version": "0.9.5",
56
+ "version": "0.9.7",
57
57
  "types": "./lib/index.d.ts",
58
58
  "type": "module",
59
59
  "exports": {
package/src/client.ts CHANGED
@@ -22,8 +22,8 @@
22
22
  import { ExecutionError, getExecutionContext } from "@databricks/appkit";
23
23
  import { Context } from "@databricks/sdk-experimental";
24
24
  import { appkit, databricks } from "@dbx-tools/appkit";
25
- import { invoke, resolve as modelResolve, serving } from "@dbx-tools/model";
26
- import { async as sharedAsync, json, log, string } from "@dbx-tools/shared-core";
25
+ import { invoke, resolve as modelResolve, modelCatalog } from "@dbx-tools/model";
26
+ import { asyncUtils, json, log, stringUtils } from "@dbx-tools/shared-core";
27
27
  import { ModelClass } from "@dbx-tools/shared-model";
28
28
  import type {
29
29
  SearchDocument,
@@ -259,7 +259,7 @@ export class SearchClient {
259
259
  query: string,
260
260
  options: SearchOptions & { index?: string } = {},
261
261
  ): Promise<SearchResult> {
262
- const text = string.trimToEmpty(query);
262
+ const text = stringUtils.trimToEmpty(query);
263
263
  const name = resolveIndexName(this.config, options.index);
264
264
  if (name === null) {
265
265
  throw new ExecutionError("search: no index configured; set a default index or pass one", {
@@ -288,7 +288,7 @@ export class SearchClient {
288
288
  query: string,
289
289
  options: UniversalSearchOptions = {},
290
290
  ): Promise<SearchResult> {
291
- const text = string.trimToEmpty(query);
291
+ const text = stringUtils.trimToEmpty(query);
292
292
  const names =
293
293
  options.indexes && options.indexes.length > 0
294
294
  ? options.indexes.map((ref) => resolveIndexName(this.config, ref) ?? ref)
@@ -327,7 +327,7 @@ export class SearchClient {
327
327
  * `ENDPOINT_NOT_FOUND` instead of naming the real problem.
328
328
  */
329
329
  private requireIndexName(reference: string, operation: string): string {
330
- const name = string.trimToNull(resolveIndexName(this.config, reference) ?? reference);
330
+ const name = stringUtils.trimToNull(resolveIndexName(this.config, reference) ?? reference);
331
331
  if (name === null) {
332
332
  throw new ExecutionError(
333
333
  `search: no index configured; set a default index or pass one to ${operation}`,
@@ -424,7 +424,7 @@ export class SearchClient {
424
424
  * live catalogue, otherwise the highest-ranked embedding endpoint is chosen.
425
425
  */
426
426
  async resolveEmbeddingModel(requested?: string, signal?: AbortSignal): Promise<string | null> {
427
- const explicit = string.trimToNull(requested ?? this.config.embeddingModel);
427
+ const explicit = stringUtils.trimToNull(requested ?? this.config.embeddingModel);
428
428
  // An explicit name that already looks like an endpoint id (no whitespace)
429
429
  // is used verbatim - no need to fetch and fuzzy-match the live catalogue.
430
430
  // A genuinely loose name (e.g. "gte large") still resolves against it.
@@ -432,12 +432,12 @@ export class SearchClient {
432
432
  signal?.throwIfAborted();
433
433
  const client = defaultAppKitWorkspaceClient();
434
434
  const host = (await client.config.getHost()).toString();
435
- const endpoints = await serving.listServingEndpoints(client, host);
435
+ const endpoints = await modelCatalog.listServingEndpoints(client, host);
436
436
  signal?.throwIfAborted();
437
437
  const { modelId } = modelResolve.resolveModel(endpoints, {
438
438
  ...(explicit ? { explicit } : { modelClass: ModelClass.Embedding }),
439
439
  });
440
- return string.trimToNull(modelId);
440
+ return stringUtils.trimToNull(modelId);
441
441
  }
442
442
 
443
443
  /**
@@ -630,7 +630,7 @@ export class SearchClient {
630
630
  const needEmbed = seed.some((doc) => doc[vectorColumn] === undefined);
631
631
  let rows = seed;
632
632
  if (needEmbed) {
633
- const texts = seed.map((doc) => string.trimToEmpty(String(doc[sourceColumn] ?? "")));
633
+ const texts = seed.map((doc) => stringUtils.trimToEmpty(String(doc[sourceColumn] ?? "")));
634
634
  const vectors = await this.embed(texts, options.embeddingModel, options.signal);
635
635
  rows = seed.map((doc, i) =>
636
636
  doc[vectorColumn] === undefined ? { ...doc, [vectorColumn]: vectors[i] } : doc,
@@ -657,7 +657,7 @@ export class SearchClient {
657
657
  context: { operation: "provision" },
658
658
  });
659
659
  }
660
- await sharedAsync.sleep(5000, signal);
660
+ await asyncUtils.sleep(5000, signal);
661
661
  info = await this.getIndex(name, signal);
662
662
  }
663
663
  return info;
package/src/config.ts CHANGED
@@ -23,8 +23,8 @@
23
23
  */
24
24
 
25
25
  import { ConfigurationError, type BasePluginConfig } from "@databricks/appkit";
26
- import { config as coreConfig } from "@dbx-tools/core";
27
- import { object, string } from "@dbx-tools/shared-core";
26
+ import { configUtils } from "@dbx-tools/core";
27
+ import { object, stringUtils } from "@dbx-tools/shared-core";
28
28
  import type { SearchDocument, SearchMode } from "@dbx-tools/shared-search";
29
29
  import type { JSONSchema7 } from "json-schema";
30
30
 
@@ -226,11 +226,11 @@ export function defaultAlias(name: string): string {
226
226
  /** Normalize a config index entry (string or object) into a {@link ResolvedIndexConfig}. */
227
227
  function toResolvedIndex(entry: string | SearchIndexConfig): ResolvedIndexConfig | null {
228
228
  const raw = typeof entry === "string" ? { name: entry } : entry;
229
- const name = string.trimToNull(raw.name);
229
+ const name = stringUtils.trimToNull(raw.name);
230
230
  if (name === null) return null;
231
231
  return {
232
232
  name,
233
- alias: string.trimToNull(raw.alias) ?? defaultAlias(name),
233
+ alias: stringUtils.trimToNull(raw.alias) ?? defaultAlias(name),
234
234
  ...(raw.primaryKey ? { primaryKey: raw.primaryKey } : {}),
235
235
  ...(raw.columns && raw.columns.length > 0 ? { columns: [...raw.columns] } : {}),
236
236
  };
@@ -238,7 +238,7 @@ function toResolvedIndex(entry: string | SearchIndexConfig): ResolvedIndexConfig
238
238
 
239
239
  /** Parse and validate a {@link SearchMode} from config or an env var. */
240
240
  function resolveMode(configured: SearchMode | undefined): SearchMode {
241
- const raw = configured ?? coreConfig.text("SEARCH_MODE", coreConfig.ENV_ONLY);
241
+ const raw = configured ?? configUtils.text("SEARCH_MODE", configUtils.ENV_ONLY);
242
242
  if (raw === undefined) return DEFAULT_MODE;
243
243
  if (raw !== "hybrid" && raw !== "vector" && raw !== "keyword") {
244
244
  throw new ConfigurationError(
@@ -256,10 +256,10 @@ function resolveMode(configured: SearchMode | undefined): SearchMode {
256
256
  * and a bad mode throws a {@link ConfigurationError} naming the field.
257
257
  */
258
258
  export function resolveSearchConfig(config: SearchPluginConfig = {}): ResolvedSearchConfig {
259
- const defaultIndexRaw = coreConfig.string(
259
+ const defaultIndexRaw = configUtils.string(
260
260
  config.index,
261
261
  [INDEX_ENV, DATABRICKS_INDEX_ENV],
262
- coreConfig.ENV_ONLY,
262
+ configUtils.ENV_ONLY,
263
263
  );
264
264
 
265
265
  const configured = (config.indexes ?? [])
@@ -268,7 +268,12 @@ export function resolveSearchConfig(config: SearchPluginConfig = {}): ResolvedSe
268
268
 
269
269
  // Ensure the default index is represented in the known set.
270
270
  if (defaultIndexRaw && !configured.some((i) => i.name === defaultIndexRaw)) {
271
- const envColumns = coreConfig.list(undefined, "SEARCH_COLUMNS", undefined, coreConfig.ENV_ONLY);
271
+ const envColumns = configUtils.list(
272
+ undefined,
273
+ "SEARCH_COLUMNS",
274
+ undefined,
275
+ configUtils.ENV_ONLY,
276
+ );
272
277
  configured.unshift({
273
278
  name: defaultIndexRaw,
274
279
  alias: defaultAlias(defaultIndexRaw),
@@ -285,35 +290,41 @@ export function resolveSearchConfig(config: SearchPluginConfig = {}): ResolvedSe
285
290
  });
286
291
 
287
292
  const defaultIndex = defaultIndexRaw ?? indexes[0]?.name;
288
- const columns = coreConfig.list(config.columns, "SEARCH_COLUMNS", undefined, coreConfig.ENV_ONLY);
293
+ const columns = configUtils.list(
294
+ config.columns,
295
+ "SEARCH_COLUMNS",
296
+ undefined,
297
+ configUtils.ENV_ONLY,
298
+ );
289
299
 
290
300
  return {
291
301
  ...object.optional("defaultIndex", defaultIndex),
292
302
  indexes,
293
303
  ...object.optional(
294
304
  "endpoint",
295
- coreConfig.string(config.endpoint, ENDPOINT_ENV, coreConfig.ENV_ONLY),
305
+ configUtils.string(config.endpoint, ENDPOINT_ENV, configUtils.ENV_ONLY),
296
306
  ),
297
307
  ...(columns.length > 0 ? { columns } : {}),
298
- pageSize: coreConfig.positiveInt(
308
+ pageSize: configUtils.positiveInt(
299
309
  config.pageSize,
300
310
  "SEARCH_PAGE_SIZE",
301
311
  DEFAULT_PAGE_SIZE,
302
- coreConfig.ENV_ONLY,
312
+ configUtils.ENV_ONLY,
303
313
  ),
304
314
  mode: resolveMode(config.mode),
305
315
  ...object.optional(
306
316
  "embeddingModel",
307
- coreConfig.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", coreConfig.ENV_ONLY),
317
+ configUtils.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", configUtils.ENV_ONLY),
308
318
  ),
309
319
  basePath: DEFAULT_BASE_PATH,
310
- timeoutMs: coreConfig.positiveInt(
320
+ timeoutMs: configUtils.positiveInt(
311
321
  config.timeoutMs,
312
322
  "SEARCH_TIMEOUT_MS",
313
323
  DEFAULT_TIMEOUT_MS,
314
- coreConfig.ENV_ONLY,
324
+ configUtils.ENV_ONLY,
315
325
  ),
316
- allowWrite: coreConfig.boolean(config.allowWrite, "SEARCH_WRITE", coreConfig.ENV_ONLY) ?? false,
326
+ allowWrite:
327
+ configUtils.boolean(config.allowWrite, "SEARCH_WRITE", configUtils.ENV_ONLY) ?? false,
317
328
  ...(config.ensureOnSetup ? { ensureOnSetup: config.ensureOnSetup } : {}),
318
329
  };
319
330
  }
@@ -328,7 +339,7 @@ export function resolveIndexName(
328
339
  config: ResolvedSearchConfig,
329
340
  reference: string | undefined,
330
341
  ): string | null {
331
- const ref = string.trimToNull(reference);
342
+ const ref = stringUtils.trimToNull(reference);
332
343
  if (ref === null) return config.defaultIndex ?? null;
333
344
  const byAlias = config.indexes.find((i) => i.alias === ref || i.name === ref);
334
345
  if (byAlias) return byAlias.name;
@@ -14,8 +14,8 @@ import {
14
14
  type PluginManifest,
15
15
  } from "@databricks/appkit";
16
16
  import type { IndexConfig, SearchRequest, SearchResponse } from "@databricks/appkit/beta";
17
- import { plugin as appkitPlugin } from "@dbx-tools/appkit";
18
- import { log, object, string } from "@dbx-tools/shared-core";
17
+ import { pluginRegistry } from "@dbx-tools/appkit";
18
+ import { log, object, stringUtils } from "@dbx-tools/shared-core";
19
19
  import type { SearchDocument } from "@dbx-tools/shared-search";
20
20
  import type express from "express";
21
21
  import type { JSONSchema7 } from "json-schema";
@@ -94,10 +94,10 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
94
94
  override async setup(): Promise<void> {
95
95
  const indexes = this.indexes();
96
96
  for (const index of indexes) this.validateAuth(index);
97
- const lake = appkitPlugin.require(this.context, lakebase, this);
97
+ const lake = pluginRegistry.require(this.context, lakebase, this);
98
98
  this.backend = new LakebaseSearchBackend(
99
99
  { managedPool: () => lake.exports().pool },
100
- string.trimToNull(this.config.schema) ?? "public",
100
+ stringUtils.trimToNull(this.config.schema) ?? "public",
101
101
  );
102
102
  for (const index of indexes) {
103
103
  await this.backend.provision(index.indexName, {
@@ -107,7 +107,7 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
107
107
  }
108
108
  logger.info("ready", {
109
109
  indexes: this.indexes().map((index) => index.alias),
110
- schema: string.trimToNull(this.config.schema) ?? "public",
110
+ schema: stringUtils.trimToNull(this.config.schema) ?? "public",
111
111
  });
112
112
  }
113
113
 
@@ -237,7 +237,7 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
237
237
  private indexes(): ResolvedLakebaseIndex[] {
238
238
  return Object.entries(this.config.indexes ?? {}).map(([alias, config]) => ({
239
239
  alias,
240
- indexName: string.trimToNull(config.indexName) ?? alias,
240
+ indexName: stringUtils.trimToNull(config.indexName) ?? alias,
241
241
  config,
242
242
  }));
243
243
  }
package/src/lakebase.ts CHANGED
@@ -24,7 +24,7 @@
24
24
  */
25
25
 
26
26
  import { ExecutionError } from "@databricks/appkit";
27
- import { log, object, string } from "@dbx-tools/shared-core";
27
+ import { log, object, stringUtils } from "@dbx-tools/shared-core";
28
28
  import type {
29
29
  SearchDocument,
30
30
  SearchHit,
@@ -61,7 +61,10 @@ const RESERVED_COLUMNS = new Set(["id", "search_text", "document", "search_vecto
61
61
  */
62
62
  export function toSearchTerms(query: string): string[] {
63
63
  return [
64
- ...string.tokenizeWithOptions({ lowerCase: true, camelCase: false, distinct: true }, query),
64
+ ...stringUtils.tokenizeWithOptions(
65
+ { lowerCase: true, camelCase: false, distinct: true },
66
+ query,
67
+ ),
65
68
  ];
66
69
  }
67
70
 
@@ -175,7 +178,7 @@ export class LakebaseSearchBackend {
175
178
  query: string,
176
179
  options: LakebaseSearchOptions = {},
177
180
  ): Promise<SearchResult> {
178
- const text = string.trimToEmpty(query);
181
+ const text = stringUtils.trimToEmpty(query);
179
182
  const table = this.tableFor(index);
180
183
  const limit = options.limit ?? 10;
181
184
  const pool = await this.getPool();
@@ -355,7 +358,7 @@ export class LakebaseSearchBackend {
355
358
  signal?: AbortSignal,
356
359
  ): Promise<void> {
357
360
  for (const doc of documents) {
358
- const id = string.trimToNull(String(doc.id ?? doc.ID ?? "")) ?? undefined;
361
+ const id = stringUtils.trimToNull(String(doc.id ?? doc.ID ?? "")) ?? undefined;
359
362
  if (id === undefined) {
360
363
  throw new ExecutionError("search (lakebase): a document is missing an `id`", {
361
364
  context: { operation: "addDocuments" },
@@ -376,7 +379,7 @@ export class LakebaseSearchBackend {
376
379
 
377
380
  /** The text a row is indexed by: the text column first, then any other string field. */
378
381
  private searchText(doc: SearchDocument, textColumn: string): string {
379
- const primary = string.trimToEmpty(String(doc[textColumn] ?? ""));
382
+ const primary = stringUtils.trimToEmpty(String(doc[textColumn] ?? ""));
380
383
  const rest = Object.entries(doc)
381
384
  .filter(([key, value]) => key !== textColumn && key !== "id" && typeof value === "string")
382
385
  .map(([, value]) => value as string);
@@ -425,7 +428,7 @@ export class LakebaseSearchBackend {
425
428
  /** A safe bare table name derived from an index reference. */
426
429
  private bareName(reference: string): string {
427
430
  const last = reference.split(".").filter(Boolean).pop() ?? reference;
428
- const slug = string.toSlug(last).replace(/-/g, "_");
431
+ const slug = stringUtils.toSlug(last).replace(/-/g, "_");
429
432
  return slug.length > 0 ? slug : "documents";
430
433
  }
431
434
 
package/src/native.ts CHANGED
@@ -11,9 +11,9 @@ import type {
11
11
  SearchRequest as AppKitSearchRequest,
12
12
  SearchResponse as AppKitSearchResponse,
13
13
  } from "@databricks/appkit/beta";
14
- import { string } from "@dbx-tools/shared-core";
14
+ import { stringUtils } from "@dbx-tools/shared-core";
15
15
  import {
16
- search as sharedSearch,
16
+ searchSchemas,
17
17
  type SearchDocument,
18
18
  type SearchHit,
19
19
  type SearchRequest as ExtensionSearchRequest,
@@ -61,7 +61,7 @@ function hitId(
61
61
  }
62
62
 
63
63
  function aliasFor(index: string, config: ResolvedSearchConfig): string {
64
- const alias = indexConfigFor(config, index)?.alias ?? string.trimToNull(index);
64
+ const alias = indexConfigFor(config, index)?.alias ?? stringUtils.trimToNull(index);
65
65
  if (!alias) throw new ValidationError("AI Search requires a configured index alias");
66
66
  return alias;
67
67
  }
@@ -77,7 +77,7 @@ export function nativeAiSearchBackend(
77
77
  options.signal?.throwIfAborted();
78
78
  const known = indexConfigFor(config, index);
79
79
  const alias = aliasFor(index, config);
80
- const resolvedQueryType = sharedSearch.toAiSearchQueryType(options.mode);
80
+ const resolvedQueryType = searchSchemas.toAiSearchQueryType(options.mode);
81
81
  const resolvedFilters = filters(options.filter);
82
82
  const response = await provider.query(alias, {
83
83
  queryText: query,