@azure/search-documents 12.1.0-beta.1 → 12.1.0-beta.2

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.
Files changed (40) hide show
  1. package/README.md +30 -19
  2. package/dist/index.js +634 -224
  3. package/dist/index.js.map +1 -1
  4. package/dist-esm/src/generated/data/models/index.js +43 -23
  5. package/dist-esm/src/generated/data/models/index.js.map +1 -1
  6. package/dist-esm/src/generated/data/models/mappers.js +127 -0
  7. package/dist-esm/src/generated/data/models/mappers.js.map +1 -1
  8. package/dist-esm/src/generated/data/models/parameters.js +74 -74
  9. package/dist-esm/src/generated/data/models/parameters.js.map +1 -1
  10. package/dist-esm/src/generated/data/operations/documents.js +8 -8
  11. package/dist-esm/src/generated/data/operations/documents.js.map +1 -1
  12. package/dist-esm/src/generated/data/searchClient.js +1 -1
  13. package/dist-esm/src/generated/data/searchClient.js.map +1 -1
  14. package/dist-esm/src/generated/service/models/index.js +53 -9
  15. package/dist-esm/src/generated/service/models/index.js.map +1 -1
  16. package/dist-esm/src/generated/service/models/mappers.js +159 -16
  17. package/dist-esm/src/generated/service/models/mappers.js.map +1 -1
  18. package/dist-esm/src/generated/service/searchServiceClient.js +1 -1
  19. package/dist-esm/src/generated/service/searchServiceClient.js.map +1 -1
  20. package/dist-esm/src/generatedStringLiteralUnions.js.map +1 -1
  21. package/dist-esm/src/index.js +2 -2
  22. package/dist-esm/src/index.js.map +1 -1
  23. package/dist-esm/src/indexModels.js.map +1 -1
  24. package/dist-esm/src/searchClient.js +2 -5
  25. package/dist-esm/src/searchClient.js.map +1 -1
  26. package/dist-esm/src/searchIndexClient.js +5 -5
  27. package/dist-esm/src/searchIndexClient.js.map +1 -1
  28. package/dist-esm/src/searchIndexingBufferedSender.js +2 -1
  29. package/dist-esm/src/searchIndexingBufferedSender.js.map +1 -1
  30. package/dist-esm/src/serialization.js +34 -70
  31. package/dist-esm/src/serialization.js.map +1 -1
  32. package/dist-esm/src/serviceModels.js.map +1 -1
  33. package/dist-esm/src/serviceUtils.js +38 -12
  34. package/dist-esm/src/serviceUtils.js.map +1 -1
  35. package/dist-esm/src/walk.js +79 -0
  36. package/dist-esm/src/walk.js.map +1 -0
  37. package/package.json +11 -10
  38. package/types/search-documents.d.ts +7679 -7432
  39. package/dist-esm/src/constants.js +0 -5
  40. package/dist-esm/src/constants.js.map +0 -1
@@ -1,95 +1,59 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import GeographyPoint from "./geographyPoint";
4
+ import { walk } from "./walk";
4
5
  const ISO8601DateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z$/i;
5
6
  const GeoJSONPointTypeName = "Point";
6
7
  const WorldGeodeticSystem1984 = "EPSG:4326"; // See https://epsg.io/4326
8
+ const [serializeValue, deserializeValue] = [
9
+ [serializeSpecialNumbers, serializeDates, serializeGeoPoint],
10
+ [deserializeSpecialNumbers, deserializeDates, deserializeGeoPoint],
11
+ ].map((fns) => (value) => fns.reduceRight((acc, fn) => fn(acc), value));
7
12
  export function serialize(obj) {
8
- return walk(obj, (value) => {
9
- const result = serializeSpecialNumbers(value);
10
- return result;
11
- });
13
+ return walk(obj, serializeValue);
12
14
  }
13
15
  export function deserialize(obj) {
14
- return walk(obj, (value) => {
15
- let result = deserializeSpecialNumbers(value);
16
- result = deserializeDates(result);
17
- result = deserializeGeoPoint(result);
18
- return result;
19
- });
20
- }
21
- function walk(start, mapper) {
22
- // eslint-disable-next-line @typescript-eslint/ban-types
23
- const seenMarker = new WeakMap();
24
- const result = { value: undefined };
25
- const queue = [
26
- { value: start, parent: result, key: "value" },
27
- ];
28
- while (queue.length) {
29
- const current = queue.shift();
30
- if (typeof current.value === "object" && current.value !== null) {
31
- if (seenMarker.has(current.value)) {
32
- continue;
33
- }
34
- else {
35
- seenMarker.set(current.value, true);
36
- }
37
- }
38
- const mapped = mapper(current.value);
39
- if ((current === null || current === void 0 ? void 0 : current.parent) && current.key) {
40
- current.parent[current.key] = mapped;
41
- }
42
- if (typeof mapped === "object" && mapped !== null) {
43
- for (const key of Object.keys(mapped)) {
44
- queue.push({
45
- value: mapped[key],
46
- parent: mapped,
47
- key,
48
- });
49
- }
50
- }
51
- }
52
- return result.value;
16
+ return walk(obj, deserializeValue);
53
17
  }
54
18
  function serializeSpecialNumbers(input) {
55
- if (typeof input === "number") {
56
- if (isNaN(input)) {
57
- return "NaN";
58
- }
59
- else if (input === Infinity) {
60
- return "INF";
61
- }
62
- else if (input === -Infinity) {
63
- return "-INF";
64
- }
19
+ if (typeof input === "number" && isNaN(input)) {
20
+ return "NaN";
65
21
  }
66
- return input;
22
+ else if (input === Infinity) {
23
+ return "INF";
24
+ }
25
+ else if (input === -Infinity) {
26
+ return "-INF";
27
+ }
28
+ else {
29
+ return input;
30
+ }
31
+ }
32
+ function serializeDates(input) {
33
+ return input instanceof Date ? input.toISOString() : input;
34
+ }
35
+ function serializeGeoPoint(input) {
36
+ return input instanceof GeographyPoint ? input.toJSON() : input;
67
37
  }
68
38
  function deserializeSpecialNumbers(input) {
69
- if (typeof input === "string") {
70
- if (input === "NaN") {
39
+ switch (input) {
40
+ case "NaN":
71
41
  return NaN;
72
- }
73
- else if (input === "INF") {
74
- return Infinity;
75
- }
76
- else if (input === "-INF") {
42
+ case "-INF":
77
43
  return -Infinity;
78
- }
44
+ case "INF":
45
+ return Infinity;
46
+ default:
47
+ return input;
79
48
  }
80
- return input;
81
49
  }
82
50
  function deserializeDates(input) {
83
- if (typeof input === "string") {
84
- if (ISO8601DateRegex.test(input)) {
85
- return new Date(input);
86
- }
87
- }
88
- return input;
51
+ return typeof input === "string" && ISO8601DateRegex.test(input) ? new Date(input) : input;
89
52
  }
90
53
  function deserializeGeoPoint(input) {
91
54
  if (isGeoJSONPoint(input)) {
92
- return new GeographyPoint({ longitude: input.coordinates[0], latitude: input.coordinates[1] });
55
+ const [longitude, latitude] = input.coordinates;
56
+ return new GeographyPoint({ longitude, latitude });
93
57
  }
94
58
  return input;
95
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/serialization.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport GeographyPoint from \"./geographyPoint\";\n\nconst ISO8601DateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,3})?Z$/i;\nconst GeoJSONPointTypeName = \"Point\";\nconst WorldGeodeticSystem1984 = \"EPSG:4326\"; // See https://epsg.io/4326\n\nexport function serialize<OutputT>(obj: unknown): OutputT {\n return walk(obj, (value) => {\n const result = serializeSpecialNumbers(value);\n return result;\n });\n}\n\nexport function deserialize<OutputT>(obj: unknown): OutputT {\n return walk(obj, (value) => {\n let result = deserializeSpecialNumbers(value);\n result = deserializeDates(result);\n result = deserializeGeoPoint(result);\n return result;\n });\n}\n\nfunction walk(start: unknown, mapper: (val: any) => any): any {\n // eslint-disable-next-line @typescript-eslint/ban-types\n const seenMarker = new WeakMap<object, boolean>();\n const result = { value: undefined };\n const queue: { value: any; parent: any; key: string }[] = [\n { value: start, parent: result, key: \"value\" },\n ];\n\n while (queue.length) {\n const current = queue.shift()!;\n\n if (typeof current.value === \"object\" && current.value !== null) {\n if (seenMarker.has(current.value)) {\n continue;\n } else {\n seenMarker.set(current.value, true);\n }\n }\n\n const mapped = mapper(current.value);\n if (current?.parent && current.key) {\n current.parent[current.key] = mapped;\n }\n if (typeof mapped === \"object\" && mapped !== null) {\n for (const key of Object.keys(mapped)) {\n queue.push({\n value: mapped[key],\n parent: mapped,\n key,\n });\n }\n }\n }\n\n return result.value;\n}\n\nfunction serializeSpecialNumbers(input: unknown): unknown {\n if (typeof input === \"number\") {\n if (isNaN(input)) {\n return \"NaN\";\n } else if (input === Infinity) {\n return \"INF\";\n } else if (input === -Infinity) {\n return \"-INF\";\n }\n }\n return input;\n}\n\nfunction deserializeSpecialNumbers(input: unknown): unknown {\n if (typeof input === \"string\") {\n if (input === \"NaN\") {\n return NaN;\n } else if (input === \"INF\") {\n return Infinity;\n } else if (input === \"-INF\") {\n return -Infinity;\n }\n }\n return input;\n}\n\nfunction deserializeDates(input: unknown): Date | unknown {\n if (typeof input === \"string\") {\n if (ISO8601DateRegex.test(input)) {\n return new Date(input);\n }\n }\n return input;\n}\n\nfunction deserializeGeoPoint(input: unknown): GeographyPoint | unknown {\n if (isGeoJSONPoint(input)) {\n return new GeographyPoint({ longitude: input.coordinates[0], latitude: input.coordinates[1] });\n }\n\n return input;\n}\n\ninterface GeoJSONPoint {\n type: \"Point\";\n coordinates: [number, number];\n crs: {\n type: \"name\";\n properties: {\n name: \"EPSG:4326\";\n };\n };\n}\n\nfunction isGeoJSONPoint(obj: any): obj is GeoJSONPoint {\n const requiredKeys = [\"type\", \"coordinates\"];\n return isValidObject(obj, {\n requiredKeys,\n propertyValidator: (key) => {\n switch (key) {\n case \"type\":\n return obj.type === GeoJSONPointTypeName;\n break;\n case \"coordinates\":\n return isCoordinateArray(obj.coordinates);\n break;\n case \"crs\":\n return isCrs(obj.crs);\n break;\n default:\n return false;\n }\n },\n });\n}\n\nfunction isCoordinateArray(maybeCoordinates: any): boolean {\n if (!Array.isArray(maybeCoordinates)) {\n return false;\n }\n if (maybeCoordinates.length !== 2) {\n return false;\n }\n if (typeof maybeCoordinates[0] !== \"number\" || typeof maybeCoordinates[1] !== \"number\") {\n return false;\n }\n return true;\n}\n\nfunction isCrs(maybeCrs: any): boolean {\n return isValidObject(maybeCrs, {\n requiredKeys: [\"type\", \"properties\"],\n propertyValidator: (key) => {\n switch (key) {\n case \"type\":\n return maybeCrs.type === \"name\";\n break;\n case \"properties\":\n return isCrsProperties(maybeCrs.properties);\n break;\n default:\n return false;\n }\n },\n });\n}\n\nfunction isCrsProperties(maybeProperties: any): boolean {\n return isValidObject(maybeProperties, {\n requiredKeys: [\"name\"],\n propertyValidator: (key) => {\n if (key === \"name\") {\n return maybeProperties.name === WorldGeodeticSystem1984;\n } else {\n return false;\n }\n },\n });\n}\n\nfunction isValidObject(\n obj: any,\n options: {\n requiredKeys?: string[];\n propertyValidator?: (keyName: string) => boolean;\n } = {},\n): boolean {\n if (typeof obj !== \"object\" || obj === null) {\n return false;\n }\n\n const keys = Object.keys(obj);\n\n if (options.requiredKeys) {\n for (const requiredKey of options.requiredKeys) {\n if (!keys.includes(requiredKey)) {\n return false;\n }\n }\n }\n\n if (options.propertyValidator) {\n for (const key of keys) {\n if (!options.propertyValidator(key)) {\n return false;\n }\n }\n }\n\n return true;\n}\n"]}
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/serialization.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport GeographyPoint from \"./geographyPoint\";\nimport { walk } from \"./walk\";\n\nconst ISO8601DateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,3})?Z$/i;\nconst GeoJSONPointTypeName = \"Point\";\nconst WorldGeodeticSystem1984 = \"EPSG:4326\"; // See https://epsg.io/4326\n\nconst [serializeValue, deserializeValue] = [\n [serializeSpecialNumbers, serializeDates, serializeGeoPoint],\n [deserializeSpecialNumbers, deserializeDates, deserializeGeoPoint],\n].map(\n (fns) =>\n (value: unknown): unknown =>\n fns.reduceRight((acc, fn) => fn(acc), value),\n);\n\nexport function serialize<OutputT>(obj: unknown): OutputT {\n return walk(obj, serializeValue) as OutputT;\n}\n\nexport function deserialize<OutputT>(obj: unknown): OutputT {\n return walk(obj, deserializeValue) as OutputT;\n}\n\nfunction serializeSpecialNumbers(input: unknown): unknown {\n if (typeof input === \"number\" && isNaN(input)) {\n return \"NaN\";\n } else if (input === Infinity) {\n return \"INF\";\n } else if (input === -Infinity) {\n return \"-INF\";\n } else {\n return input;\n }\n}\n\nfunction serializeDates(input: unknown): string | unknown {\n return input instanceof Date ? input.toISOString() : input;\n}\n\nfunction serializeGeoPoint(input: unknown): object | unknown {\n return input instanceof GeographyPoint ? input.toJSON() : input;\n}\n\nfunction deserializeSpecialNumbers(input: unknown): unknown {\n switch (input) {\n case \"NaN\":\n return NaN;\n case \"-INF\":\n return -Infinity;\n case \"INF\":\n return Infinity;\n default:\n return input;\n }\n}\n\nfunction deserializeDates(input: unknown): Date | unknown {\n return typeof input === \"string\" && ISO8601DateRegex.test(input) ? new Date(input) : input;\n}\n\nfunction deserializeGeoPoint(input: unknown): GeographyPoint | unknown {\n if (isGeoJSONPoint(input)) {\n const [longitude, latitude] = input.coordinates;\n return new GeographyPoint({ longitude, latitude });\n }\n return input;\n}\n\ninterface GeoJSONPoint {\n type: \"Point\";\n coordinates: [number, number];\n crs: {\n type: \"name\";\n properties: {\n name: \"EPSG:4326\";\n };\n };\n}\n\nfunction isGeoJSONPoint(obj: any): obj is GeoJSONPoint {\n const requiredKeys = [\"type\", \"coordinates\"];\n return isValidObject(obj, {\n requiredKeys,\n propertyValidator: (key) => {\n switch (key) {\n case \"type\":\n return obj.type === GeoJSONPointTypeName;\n break;\n case \"coordinates\":\n return isCoordinateArray(obj.coordinates);\n break;\n case \"crs\":\n return isCrs(obj.crs);\n break;\n default:\n return false;\n }\n },\n });\n}\n\nfunction isCoordinateArray(maybeCoordinates: any): boolean {\n if (!Array.isArray(maybeCoordinates)) {\n return false;\n }\n if (maybeCoordinates.length !== 2) {\n return false;\n }\n if (typeof maybeCoordinates[0] !== \"number\" || typeof maybeCoordinates[1] !== \"number\") {\n return false;\n }\n return true;\n}\n\nfunction isCrs(maybeCrs: any): boolean {\n return isValidObject(maybeCrs, {\n requiredKeys: [\"type\", \"properties\"],\n propertyValidator: (key) => {\n switch (key) {\n case \"type\":\n return maybeCrs.type === \"name\";\n break;\n case \"properties\":\n return isCrsProperties(maybeCrs.properties);\n break;\n default:\n return false;\n }\n },\n });\n}\n\nfunction isCrsProperties(maybeProperties: any): boolean {\n return isValidObject(maybeProperties, {\n requiredKeys: [\"name\"],\n propertyValidator: (key) => {\n if (key === \"name\") {\n return maybeProperties.name === WorldGeodeticSystem1984;\n } else {\n return false;\n }\n },\n });\n}\n\nfunction isValidObject(\n obj: any,\n options: {\n requiredKeys?: string[];\n propertyValidator?: (keyName: string) => boolean;\n } = {},\n): boolean {\n if (typeof obj !== \"object\" || obj === null) {\n return false;\n }\n\n const keys = Object.keys(obj);\n\n if (options.requiredKeys) {\n for (const requiredKey of options.requiredKeys) {\n if (!keys.includes(requiredKey)) {\n return false;\n }\n }\n }\n\n if (options.propertyValidator) {\n for (const key of keys) {\n if (!options.propertyValidator(key)) {\n return false;\n }\n }\n }\n\n return true;\n}\n"]}