box-node-sdk
Version:
Official SDK for Box Platform APIs
297 lines (296 loc) • 10.3 kB
text/typescript
import { BoxSdkError } from '../box/errors';
import { SerializedData } from '../serialization/json';
import { sdIsEmpty } from '../serialization/json';
import { sdIsBoolean } from '../serialization/json';
import { sdIsNumber } from '../serialization/json';
import { sdIsString } from '../serialization/json';
import { sdIsList } from '../serialization/json';
import { sdIsMap } from '../serialization/json';
export type MetadataQueryOrderByDirectionField = 'ASC' | 'DESC' | string;
export interface MetadataQueryOrderByField {
/**
* The metadata template field to order by.
*
* The `field_key` represents the `key` value of a field from the
* metadata template being searched for. */
readonly fieldKey?: string;
/**
* The direction to order by, either ascending or descending.
*
* The `ordering` direction must be the same for each item in the
* array. */
readonly direction?: MetadataQueryOrderByDirectionField;
readonly rawData?: SerializedData;
}
export interface MetadataQuery {
/**
* Specifies the template used in the query. Must be in the form
* `scope.templateKey`. Not all templates can be used in this field,
* most notably the built-in, Box-provided classification templates
* can not be used in a query. */
readonly from: string;
/**
* The query to perform. A query is a logical expression that is very similar
* to a SQL `SELECT` statement. Values in the search query can be turned into
* parameters specified in the `query_param` arguments list to prevent having
* to manually insert search values into the query string.
*
* For example, a value of `:amount` would represent the `amount` value in
* `query_params` object. */
readonly query?: string;
/**
* Set of arguments corresponding to the parameters specified in the
* `query`. The type of each parameter used in the `query_params` must match
* the type of the corresponding metadata template field. */
readonly queryParams?: {
readonly [key: string]: any;
};
/**
* The ID of the folder that you are restricting the query to. A
* value of zero will return results from all folders you have access
* to. A non-zero value will only return results found in the folder
* corresponding to the ID or in any of its subfolders. */
readonly ancestorFolderId: string;
/**
* A list of template fields and directions to sort the metadata query
* results by.
*
* The ordering `direction` must be the same for each item in the array. */
readonly orderBy?: readonly MetadataQueryOrderByField[];
/**
* A value between 0 and 100 that indicates the maximum number of results
* to return for a single request. This only specifies a maximum
* boundary and will not guarantee the minimum number of results
* returned. */
readonly limit?: number;
/**
* Marker to use for requesting the next page. */
readonly marker?: string;
/**
* By default, this endpoint returns only the most basic info about the items for
* which the query matches. This attribute can be used to specify a list of
* additional attributes to return for any item, including its metadata.
*
* This attribute takes a list of item fields, metadata template identifiers,
* or metadata template field identifiers.
*
* For example:
*
* * `created_by` will add the details of the user who created the item to
* the response.
* * `metadata.<scope>.<templateKey>` will return the mini-representation
* of the metadata instance identified by the `scope` and `templateKey`.
* * `metadata.<scope>.<templateKey>.<field>` will return all the mini-representation
* of the metadata instance identified by the `scope` and `templateKey` plus
* the field specified by the `field` name. Multiple fields for the same
* `scope` and `templateKey` can be defined. */
readonly fields?: readonly string[];
readonly rawData?: SerializedData;
}
export function serializeMetadataQueryOrderByDirectionField(
val: MetadataQueryOrderByDirectionField,
): SerializedData {
return val;
}
export function deserializeMetadataQueryOrderByDirectionField(
val: SerializedData,
): MetadataQueryOrderByDirectionField {
if (val == 'ASC') {
return val;
}
if (val == 'DESC') {
return val;
}
if (sdIsString(val)) {
return val;
}
throw new BoxSdkError({
message: "Can't deserialize MetadataQueryOrderByDirectionField",
});
}
export function serializeMetadataQueryOrderByField(
val: MetadataQueryOrderByField,
): SerializedData {
return {
['field_key']: val.fieldKey,
['direction']:
val.direction == void 0
? val.direction
: serializeMetadataQueryOrderByDirectionField(val.direction),
};
}
export function deserializeMetadataQueryOrderByField(
val: SerializedData,
): MetadataQueryOrderByField {
if (!sdIsMap(val)) {
throw new BoxSdkError({
message: 'Expecting a map for "MetadataQueryOrderByField"',
});
}
if (!(val.field_key == void 0) && !sdIsString(val.field_key)) {
throw new BoxSdkError({
message:
'Expecting string for "field_key" of type "MetadataQueryOrderByField"',
});
}
const fieldKey: undefined | string =
val.field_key == void 0 ? void 0 : val.field_key;
const direction: undefined | MetadataQueryOrderByDirectionField =
val.direction == void 0
? void 0
: deserializeMetadataQueryOrderByDirectionField(val.direction);
return {
fieldKey: fieldKey,
direction: direction,
} satisfies MetadataQueryOrderByField;
}
export function serializeMetadataQuery(val: MetadataQuery): SerializedData {
return {
['from']: val.from,
['query']: val.query,
['query_params']:
val.queryParams == void 0
? val.queryParams
: (Object.fromEntries(
Object.entries(val.queryParams).map(([k, v]: [string, any]) => [
k,
(function (v: any): any {
return v;
})(v),
]),
) as {
readonly [key: string]: any;
}),
['ancestor_folder_id']: val.ancestorFolderId,
['order_by']:
val.orderBy == void 0
? val.orderBy
: (val.orderBy.map(function (
item: MetadataQueryOrderByField,
): SerializedData {
return serializeMetadataQueryOrderByField(item);
}) as readonly any[]),
['limit']: val.limit,
['marker']: val.marker,
['fields']:
val.fields == void 0
? val.fields
: (val.fields.map(function (item: string): SerializedData {
return item;
}) as readonly any[]),
};
}
export function deserializeMetadataQuery(val: SerializedData): MetadataQuery {
if (!sdIsMap(val)) {
throw new BoxSdkError({ message: 'Expecting a map for "MetadataQuery"' });
}
if (val.from == void 0) {
throw new BoxSdkError({
message: 'Expecting "from" of type "MetadataQuery" to be defined',
});
}
if (!sdIsString(val.from)) {
throw new BoxSdkError({
message: 'Expecting string for "from" of type "MetadataQuery"',
});
}
const from: string = val.from;
if (!(val.query == void 0) && !sdIsString(val.query)) {
throw new BoxSdkError({
message: 'Expecting string for "query" of type "MetadataQuery"',
});
}
const query: undefined | string = val.query == void 0 ? void 0 : val.query;
if (!(val.query_params == void 0) && !sdIsMap(val.query_params)) {
throw new BoxSdkError({
message: 'Expecting object for "query_params" of type "MetadataQuery"',
});
}
const queryParams:
| undefined
| {
readonly [key: string]: any;
} =
val.query_params == void 0
? void 0
: sdIsMap(val.query_params)
? (Object.fromEntries(
Object.entries(val.query_params).map(([k, v]: [string, any]) => [
k,
(function (v: any): any {
return v;
})(v),
]),
) as {
readonly [key: string]: any;
})
: {};
if (val.ancestor_folder_id == void 0) {
throw new BoxSdkError({
message:
'Expecting "ancestor_folder_id" of type "MetadataQuery" to be defined',
});
}
if (!sdIsString(val.ancestor_folder_id)) {
throw new BoxSdkError({
message:
'Expecting string for "ancestor_folder_id" of type "MetadataQuery"',
});
}
const ancestorFolderId: string = val.ancestor_folder_id;
if (!(val.order_by == void 0) && !sdIsList(val.order_by)) {
throw new BoxSdkError({
message: 'Expecting array for "order_by" of type "MetadataQuery"',
});
}
const orderBy: undefined | readonly MetadataQueryOrderByField[] =
val.order_by == void 0
? void 0
: sdIsList(val.order_by)
? (val.order_by.map(function (
itm: SerializedData,
): MetadataQueryOrderByField {
return deserializeMetadataQueryOrderByField(itm);
}) as readonly any[])
: [];
if (!(val.limit == void 0) && !sdIsNumber(val.limit)) {
throw new BoxSdkError({
message: 'Expecting number for "limit" of type "MetadataQuery"',
});
}
const limit: undefined | number = val.limit == void 0 ? void 0 : val.limit;
if (!(val.marker == void 0) && !sdIsString(val.marker)) {
throw new BoxSdkError({
message: 'Expecting string for "marker" of type "MetadataQuery"',
});
}
const marker: undefined | string = val.marker == void 0 ? void 0 : val.marker;
if (!(val.fields == void 0) && !sdIsList(val.fields)) {
throw new BoxSdkError({
message: 'Expecting array for "fields" of type "MetadataQuery"',
});
}
const fields: undefined | readonly string[] =
val.fields == void 0
? void 0
: sdIsList(val.fields)
? (val.fields.map(function (itm: SerializedData): string {
if (!sdIsString(itm)) {
throw new BoxSdkError({
message: 'Expecting string for "MetadataQuery"',
});
}
return itm;
}) as readonly any[])
: [];
return {
from: from,
query: query,
queryParams: queryParams,
ancestorFolderId: ancestorFolderId,
orderBy: orderBy,
limit: limit,
marker: marker,
fields: fields,
} satisfies MetadataQuery;
}