File Explorer

/proc/2/root/var/runtime/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

index.js108 KB · 2950 lines
const { SmithyRpcV2CborProtocol, loadSmithyRpcV2CborErrorCode } = require("@smithy/core/cbor");const { TypeRegistry, NormalizedSchema, deref } = require("@smithy/core/schema");const { decorateServiceException, getValueFromTextNode } = require("@smithy/core/client");const { collectBody, determineTimestampFormat, RpcProtocol, HttpBindingProtocol, HttpInterceptingShapeSerializer, HttpInterceptingShapeDeserializer, FromStringShapeDeserializer, extendedEncodeURIComponent } = require("@smithy/core/protocols");const { NumericValue, toUtf8, fromBase64, LazyJsonString, parseEpochTimestamp, parseRfc7231DateTime, parseRfc3339DateTimeWithOffset, generateIdempotencyToken, toBase64, dateToUtcString, expectUnion } = require("@smithy/core/serde");const { parseXML, XmlNode, XmlText } = require("@aws-sdk/xml-builder"); class ProtocolLib {    queryCompat;    errorRegistry;    constructor(queryCompat = false) {        this.queryCompat = queryCompat;    }    resolveRestContentType(defaultContentType, inputSchema) {        const members = inputSchema.getMemberSchemas();        const httpPayloadMember = Object.values(members).find((m) => {            return !!m.getMergedTraits().httpPayload;        });        if (httpPayloadMember) {            const mediaType = httpPayloadMember.getMergedTraits().mediaType;            if (mediaType) {                return mediaType;            }            else if (httpPayloadMember.isStringSchema()) {                return "text/plain";            }            else if (httpPayloadMember.isBlobSchema()) {                return "application/octet-stream";            }            else {                return defaultContentType;            }        }        else if (!inputSchema.isUnitSchema()) {            const hasBody = Object.values(members).find((m) => {                const { httpQuery, httpQueryParams, httpHeader, httpLabel, httpPrefixHeaders } = m.getMergedTraits();                const noPrefixHeaders = httpPrefixHeaders === void 0;                return !httpQuery && !httpQueryParams && !httpHeader && !httpLabel && noPrefixHeaders;            });            if (hasBody) {                return defaultContentType;            }        }    }    async getErrorSchemaOrThrowBaseException(errorIdentifier, defaultNamespace, response, dataObject, metadata, getErrorSchema) {        let errorName = errorIdentifier;        if (errorIdentifier.includes("#")) {            [, errorName] = errorIdentifier.split("#");        }        const errorMetadata = {            $metadata: metadata,            $fault: response.statusCode < 500 ? "client" : "server",        };        if (!this.errorRegistry) {            throw new Error("@aws-sdk/core/protocols - error handler not initialized.");        }        try {            const errorSchema = getErrorSchema?.(this.errorRegistry, errorName) ??                this.errorRegistry.getSchema(errorIdentifier);            return { errorSchema, errorMetadata };        }        catch (e) {            dataObject.message = dataObject.message ?? dataObject.Message ?? "UnknownError";            const synthetic = this.errorRegistry;            const baseExceptionSchema = synthetic.getBaseException();            if (baseExceptionSchema) {                const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;                throw this.decorateServiceException(Object.assign(new ErrorCtor({ name: errorName }), errorMetadata), dataObject);            }            const d = dataObject;            const message = d?.message ?? d?.Message ?? d?.Error?.Message ?? d?.Error?.message;            throw this.decorateServiceException(Object.assign(new Error(message), {                name: errorName,            }, errorMetadata), dataObject);        }    }    compose(composite, errorIdentifier, defaultNamespace) {        let namespace = defaultNamespace;        if (errorIdentifier.includes("#")) {            [namespace] = errorIdentifier.split("#");        }        const staticRegistry = TypeRegistry.for(namespace);        const defaultSyntheticRegistry = TypeRegistry.for("smithy.ts.sdk.synthetic." + defaultNamespace);        composite.copyFrom(staticRegistry);        composite.copyFrom(defaultSyntheticRegistry);        this.errorRegistry = composite;    }    decorateServiceException(exception, additions = {}) {        if (this.queryCompat) {            const msg = exception.Message ?? additions.Message;            const error = decorateServiceException(exception, additions);            if (msg) {                error.message = msg;            }            const errorObj = error.Error ?? {};            errorObj.Type = error.Error?.Type;            errorObj.Code = error.Error?.Code;            errorObj.Message = error.Error?.message ?? error.Error?.Message ?? msg;            error.Error = errorObj;            const reqId = error.$metadata.requestId;            if (reqId) {                error.RequestId = reqId;            }            return error;        }        return decorateServiceException(exception, additions);    }    setQueryCompatError(output, response) {        const queryErrorHeader = response.headers?.["x-amzn-query-error"];        if (output !== undefined && queryErrorHeader != null) {            const [Code, Type] = queryErrorHeader.split(";");            const keys = Object.keys(output);            const Error = {                Code,                Type,            };            output.Code = Code;            output.Type = Type;            for (let i = 0; i < keys.length; i++) {                const k = keys[i];                Error[k === "message" ? "Message" : k] = output[k];            }            delete Error.__type;            output.Error = Error;        }    }    queryCompatOutput(queryCompatErrorData, errorData) {        if (queryCompatErrorData.Error) {            errorData.Error = queryCompatErrorData.Error;        }        if (queryCompatErrorData.Type) {            errorData.Type = queryCompatErrorData.Type;        }        if (queryCompatErrorData.Code) {            errorData.Code = queryCompatErrorData.Code;        }    }    findQueryCompatibleError(registry, errorName) {        try {            return registry.getSchema(errorName);        }        catch (e) {            return registry.find((schema) => NormalizedSchema.of(schema).getMergedTraits().awsQueryError?.[0] === errorName);        }    }} class AwsSmithyRpcV2CborProtocol extends SmithyRpcV2CborProtocol {    awsQueryCompatible;    mixin;    constructor({ defaultNamespace, errorTypeRegistries, awsQueryCompatible, }) {        super({ defaultNamespace, errorTypeRegistries });        this.awsQueryCompatible = !!awsQueryCompatible;        this.mixin = new ProtocolLib(this.awsQueryCompatible);    }    async serializeRequest(operationSchema, input, context) {        const request = await super.serializeRequest(operationSchema, input, context);        if (this.awsQueryCompatible) {            request.headers["x-amzn-query-mode"] = "true";        }        return request;    }    async handleError(operationSchema, context, response, dataObject, metadata) {        if (this.awsQueryCompatible) {            this.mixin.setQueryCompatError(dataObject, response);        }        const errorName = (() => {            const compatHeader = response.headers["x-amzn-query-error"];            if (compatHeader && this.awsQueryCompatible) {                return compatHeader.split(";")[0];            }            return loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";        })();        this.mixin.compose(this.compositeErrorRegistry, errorName, this.options.defaultNamespace);        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorName, this.options.defaultNamespace, response, dataObject, metadata, this.awsQueryCompatible ? this.mixin.findQueryCompatibleError : undefined);        const ns = NormalizedSchema.of(errorSchema);        const message = dataObject.message ?? dataObject.Message ?? "UnknownError";        const ErrorCtor = this.compositeErrorRegistry.getErrorCtor(errorSchema) ?? Error;        const exception = new ErrorCtor({});        const output = {};        for (const [name, member] of ns.structIterator()) {            if (dataObject[name] != null) {                output[name] = this.deserializer.readValue(member, dataObject[name]);            }        }        if (this.awsQueryCompatible) {            this.mixin.queryCompatOutput(dataObject, output);        }        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {            $fault: ns.getMergedTraits().error,            message,        }, output), dataObject);    }} class SerdeContextConfig {    serdeContext;    setSerdeContext(serdeContext) {        this.serdeContext = serdeContext;    }} class UnionSerde {    from;    to;    keys;    constructor(from, to) {        this.from = from;        this.to = to;        const keys = Object.keys(this.from);        const set = new Set(keys);        set.delete("__type");        this.keys = set;    }    mark(key) {        this.keys.delete(key);    }    hasUnknown() {        return this.keys.size === 1 && Object.keys(this.to).length === 0;    }    writeUnknown() {        if (this.hasUnknown()) {            const k = this.keys.values().next().value;            const v = this.from[k];            this.to.$unknown = [k, v];        }    }} let canParseBuffer;function detectBufferParsing() {    if (canParseBuffer === undefined) {        try {            if (typeof Buffer !== "function") {                canParseBuffer = false;            }            else {                const result = JSON.parse(Buffer.from([0x7b, 0x7d]));                canParseBuffer = result !== null && typeof result === "object";            }        }        catch {            canParseBuffer = false;        }    }    return canParseBuffer;} function jsonReviver(key, value, context) {    if (context?.source) {        const numericString = context.source;        if (typeof value === "number") {            const inSafeRange = value <= Number.MAX_SAFE_INTEGER && value >= Number.MIN_SAFE_INTEGER;            if (inSafeRange) {                if (isRepresentable(numericString, value)) {                    return value;                }                return new NumericValue(numericString, "bigDecimal");            }            else {                if (isFractionalBigNumeric(numericString)) {                    return new NumericValue(numericString, "bigDecimal");                }                if (/[eE]/.test(numericString)) {                    return expandExponentToBigInt(numericString);                }                return BigInt(numericString);            }        }    }    return value;}function isFractionalBigNumeric(s) {    const dotIndex = s.indexOf(".");    if (dotIndex === -1) {        return false;    }    const eIndex = s.search(/[eE]/);    if (eIndex === -1) {        return true;    }    const fracDigits = eIndex - dotIndex - 1;    const exp = parseInt(s.slice(eIndex + 1), 10);    return exp < fracDigits;}function isRepresentable(numericString, value) {    if (numericString === String(value)) {        return true;    }    if (Object.is(value, -0)) {        return true;    }    if (/[eE]/.test(numericString)) {        return expandToDecimal(numericString) === expandToDecimal(String(value));    }    const normalized = numericString.replace(/(\.\d*?)0+$/, "$1").replace(/\.$/, "");    const canonical = String(value);    if (normalized === canonical) {        return true;    }    if (/[eE]/.test(canonical)) {        return normalized === expandToDecimal(canonical);    }    return false;}function expandToDecimal(s) {    const negative = s.startsWith("-");    const abs = negative ? s.slice(1) : s;    const eIndex = abs.search(/[eE]/);    let result;    if (eIndex === -1) {        result = abs;    }    else {        const exp = parseInt(abs.slice(eIndex + 1), 10);        const mantissa = abs.slice(0, eIndex);        const dotIndex = mantissa.indexOf(".");        let digits;        let intLen;        if (dotIndex === -1) {            digits = mantissa;            intLen = mantissa.length;        }        else {            digits = mantissa.slice(0, dotIndex) + mantissa.slice(dotIndex + 1);            intLen = dotIndex;        }        digits = digits.replace(/0+$/, "") || "0";        const newDotPos = intLen + exp;        if (digits === "0") {            result = "0";        }        else if (newDotPos <= 0) {            result = "0." + "0".repeat(-newDotPos) + digits;        }        else if (newDotPos >= digits.length) {            result = digits + "0".repeat(newDotPos - digits.length);        }        else {            result = digits.slice(0, newDotPos) + "." + digits.slice(newDotPos);        }    }    if (result.includes(".")) {        result = result.replace(/(\.\d*?)0+$/, "$1").replace(/\.$/, "");    }    return (negative ? "-" : "") + result;}function expandExponentToBigInt(s) {    const eIndex = s.search(/[eE]/);    const exp = parseInt(s.slice(eIndex + 1), 10);    const negative = s.startsWith("-");    const mantissa = s.slice(negative ? 1 : 0, eIndex);    const dotIndex = mantissa.indexOf(".");    let digits;    let shift;    if (dotIndex === -1) {        digits = mantissa;        shift = exp;    }    else {        digits = mantissa.slice(0, dotIndex) + mantissa.slice(dotIndex + 1);        const fracDigits = mantissa.length - dotIndex - 1;        shift = exp - fracDigits;    }    digits = digits.replace(/0+$/, "") || "0";    const result = BigInt(digits) * 10n ** BigInt(shift + (mantissa.replace(".", "").length - digits.length));    return negative ? -result : result;} const REVIVER_SYMBOL = Symbol.for("@aws-sdk/reviver");function needsReviver(schema) {    const ns = NormalizedSchema.of(schema);    const raw = ns.getSchema();    if (Array.isArray(raw) && ns.isStructSchema()) {        if (REVIVER_SYMBOL in raw) {            return raw[REVIVER_SYMBOL];        }        const result = _check(ns, new Set());        raw[REVIVER_SYMBOL] = result;        return result;    }    return _check(ns, new Set());}function _check(ns, seen) {    const raw = ns.getSchema();    if (seen.has(raw)) {        return false;    }    seen.add(raw);    if (ns.isBigIntegerSchema() || ns.isBigDecimalSchema()) {        return true;    }    if (ns.isStructSchema()) {        for (const [, memberSchema] of ns.structIterator()) {            if (_check(memberSchema, seen)) {                return true;            }        }    }    else if (ns.isListSchema() || ns.isMapSchema()) {        if (_check(ns.getValueSchema(), seen)) {            return true;        }    }    else if (ns.isDocumentSchema()) {        return true;    }    return false;} const collectBodyString = (streamBody, context) => collectBody(streamBody, context).then((body) => (context?.utf8Encoder ?? toUtf8)(body)); async function parseJsonBody(streamBody, context, schema) {    let parsingInput;    if (detectBufferParsing() && typeof streamBody?.[Symbol.asyncIterator] === "function") {        const buffer = await collectBody(streamBody, context);        if (typeof Buffer === "function") {            if (Buffer.isBuffer(buffer)) {                parsingInput = buffer;            }            else {                parsingInput = Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength);            }        }    }    if (!parsingInput) {        parsingInput = await collectBodyString(streamBody, context);    }    if (parsingInput.length === 0) {        return {};    }    const reviver = schema && needsReviver(schema) ? jsonReviver : undefined;    try {        return JSON.parse(parsingInput, reviver);    }    catch (e) {        if (e?.name === "SyntaxError") {            Object.defineProperty(e, "$responseBodyText", {                value: typeof parsingInput === "string" ? parsingInput : parsingInput.toString("utf8"),            });        }        throw e;    }}const parseJsonErrorBody = async (errorBody, context) => {    const value = await parseJsonBody(errorBody, context);    value.message = value.message ?? value.Message;    return value;};const findKey = (object, key) => Object.keys(object).find((k) => k.toLowerCase() === key.toLowerCase());const sanitizeErrorCode = (rawValue) => {    let cleanValue = rawValue;    if (typeof cleanValue === "number") {        cleanValue = cleanValue.toString();    }    if (cleanValue.indexOf(",") >= 0) {        cleanValue = cleanValue.split(",")[0];    }    if (cleanValue.indexOf(":") >= 0) {        cleanValue = cleanValue.split(":")[0];    }    if (cleanValue.indexOf("#") >= 0) {        cleanValue = cleanValue.split("#")[1];    }    return cleanValue;};const loadRestJsonErrorCode = (output, data) => {    return loadErrorCode(output, data, ["header", "code", "type"]);};const loadJsonRpcErrorCode = (output, data, queryCompat = false) => {    return loadErrorCode(output, data, queryCompat ? ["code", "header", "type"] : ["type", "code", "header"]);};const loadErrorCode = ({ headers }, data, order) => {    while (order.length > 0) {        const location = order.shift();        switch (location) {            case "header":                const headerKey = findKey(headers ?? {}, "x-amzn-errortype");                if (headerKey !== undefined) {                    return sanitizeErrorCode(headers[headerKey]);                }                break;            case "code":                const codeKey = findKey(data ?? {}, "code");                if (codeKey && data[codeKey] !== undefined) {                    return sanitizeErrorCode(data[codeKey]);                }                break;            case "type":                if (data?.__type !== undefined) {                    return sanitizeErrorCode(data.__type);                }                break;        }    }}; function writeKey(obj) {    Object.defineProperty(obj, "__proto__", { value: undefined, writable: true, enumerable: true, configurable: true });} class JsonShapeDeserializer2 extends SerdeContextConfig {    settings;    constructor(settings) {        super();        this.settings = settings;    }    async read(schema, data) {        const reviver = needsReviver(schema) ? jsonReviver : undefined;        let parsed;        if (typeof data === "string") {            if (data.length === 0) {                return {};            }            parsed = JSON.parse(data, reviver);        }        else if (data instanceof Uint8Array && detectBufferParsing()) {            if (data.byteLength === 0) {                return {};            }            const buf = Buffer.isBuffer(data) ? data : Buffer.from(data.buffer, data.byteOffset, data.byteLength);            parsed = JSON.parse(buf, reviver);        }        else {            parsed = await parseJsonBody(data, this.serdeContext, schema);        }        return this._read(schema, parsed);    }    readObject(schema, data) {        return this._read(schema, data);    }    _read(schema, value) {        const isObject = value !== null && typeof value === "object";        const ns = NormalizedSchema.of(schema);        if (isObject) {            if (ns.isStructSchema()) {                return this._readStruct(ns, value);            }            if (Array.isArray(value) && ns.isListSchema()) {                const listMember = ns.getValueSchema();                if (this.needsTransform(listMember)) {                    for (let i = 0; i < value.length; ++i) {                        value[i] = this._read(listMember, value[i]);                    }                }                return value;            }            if (ns.isMapSchema()) {                const mapMember = ns.getValueSchema();                const map = value;                if (this.needsTransform(mapMember)) {                    for (const k in map) {                        if (k === "__proto__") {                            writeKey(map);                        }                        map[k] = this._read(mapMember, map[k]);                    }                }                return map;            }        }        if (ns.isBlobSchema() && typeof value === "string") {            return fromBase64(value);        }        const mediaType = ns.getMergedTraits().mediaType;        if (ns.isStringSchema() && typeof value === "string" && mediaType) {            const isJson = mediaType === "application/json" || mediaType.endsWith("+json");            if (isJson) {                return LazyJsonString.from(value);            }            return value;        }        if (ns.isTimestampSchema() && value != null) {            const format = determineTimestampFormat(ns, this.settings);            switch (format) {                case 5:                    return parseRfc3339DateTimeWithOffset(value);                case 6:                    return parseRfc7231DateTime(value);                case 7:                    return parseEpochTimestamp(value);                default:                    console.warn("Missing timestamp format, parsing value with Date constructor:", value);                    return new Date(value);            }        }        if (ns.isBigIntegerSchema() && (typeof value === "number" || typeof value === "string")) {            return BigInt(value);        }        if (ns.isBigDecimalSchema() && value != undefined) {            if (value instanceof NumericValue) {                return value;            }            const untyped = value;            if (untyped.type === "bigDecimal" && "string" in untyped) {                return new NumericValue(untyped.string, untyped.type);            }            return new NumericValue(String(value), "bigDecimal");        }        if (ns.isNumericSchema() && typeof value === "string") {            switch (value) {                case "Infinity":                    return Infinity;                case "-Infinity":                    return -Infinity;                case "NaN":                    return NaN;            }            return value;        }        if (ns.isDocumentSchema()) {            if (isObject) {                if (Array.isArray(value)) {                    for (let i = 0; i < value.length; ++i) {                        const v = value[i];                        if (!(v instanceof NumericValue)) {                            value[i] = this._read(ns, v);                        }                    }                }                else {                    const doc = value;                    for (const k in doc) {                        if (k === "__proto__") {                            writeKey(doc);                        }                        const v = doc[k];                        if (!(v instanceof NumericValue)) {                            doc[k] = this._read(ns, v);                        }                    }                }            }        }        return value;    }    _readStruct(ns, record) {        const union = ns.isUnionSchema();        const out = {};        let nameMap;        const hasType = typeof record.__type === "string";        const { jsonName } = this.settings;        if (jsonName && hasType) {            nameMap = {};        }        let unionSerde;        if (union) {            unionSerde = new UnionSerde(record, out);        }        for (const [memberName, memberSchema] of ns.structIterator()) {            let fromKey = memberName;            if (jsonName) {                fromKey = memberSchema.getMergedTraits().jsonName ?? fromKey;                if (hasType) {                    nameMap[fromKey] = memberName;                }            }            if (union) {                unionSerde.mark(fromKey);            }            if (record[fromKey] != null) {                out[memberName] = this._read(memberSchema, record[fromKey]);            }        }        if (union) {            unionSerde.writeUnknown();        }        else if (hasType) {            for (const k in record) {                const v = record[k];                const t = jsonName ? (nameMap[k] ?? k) : k;                if (!(t in out)) {                    out[t] = v;                }            }        }        return out;    }    needsTransform(ns) {        if (ns.isBlobSchema() || ns.isTimestampSchema() || ns.isBigIntegerSchema() || ns.isBigDecimalSchema()) {            return true;        }        if (ns.isDocumentSchema() || ns.isStructSchema() || ns.isListSchema() || ns.isMapSchema()) {            return true;        }        if (ns.isStringSchema() && ns.getMergedTraits().mediaType) {            return true;        }        return false;    }} class JsonBytesStringAdapter extends Uint8Array {    string = null;    static allocUnsafe(bytes) {        if (typeof Buffer === "function") {            const buffer = Buffer.allocUnsafe(bytes);            return new JsonBytesStringAdapter(buffer.buffer, buffer.byteOffset, buffer.byteLength);        }        return new JsonBytesStringAdapter(bytes);    }    toString() {        return this.s();    }    valueOf() {        return this.s();    }    includes(searchString, position) {        if (typeof searchString === "string") {            return this.s().includes(searchString, position);        }        return Uint8Array.prototype.includes.call(this, searchString, position);    }    indexOf(searchString, position) {        if (typeof searchString === "string") {            return this.s().indexOf(searchString, position);        }        return Uint8Array.prototype.indexOf.call(this, searchString, position);    }    lastIndexOf(searchString, position) {        if (typeof searchString === "string") {            return this.s().lastIndexOf(searchString, position);        }        const fn = Uint8Array.prototype.lastIndexOf;        if (position !== undefined) {            return fn.call(this, searchString, position);        }        return fn.call(this, searchString);    }    startsWith(searchString, position) {        return this.s().startsWith(searchString, position);    }    endsWith(searchString, endPosition) {        return this.s().endsWith(searchString, endPosition);    }    match(regexp) {        return this.s().match(regexp);    }    replace(searchValue, replaceValue) {        return this.s().replace(searchValue, replaceValue);    }    search(regexp) {        return this.s().search(regexp);    }    split(separator, limit) {        return this.s().split(separator, limit);    }    substring(start, end) {        return this.s().substring(start, end);    }    trim() {        return this.s().trim();    }    trimStart() {        return this.s().trimStart();    }    trimEnd() {        return this.s().trimEnd();    }    charAt(pos) {        return this.s().charAt(pos);    }    charCodeAt(index) {        return this.s().charCodeAt(index);    }    padStart(maxLength, fillString) {        return this.s().padStart(maxLength, fillString);    }    padEnd(maxLength, fillString) {        return this.s().padEnd(maxLength, fillString);    }    repeat(count) {        return this.s().repeat(count);    }    toUpperCase() {        return this.s().toUpperCase();    }    toLowerCase() {        return this.s().toLowerCase();    }    s() {        if (this.string == null) {            const n = Date.now();            if (n > warned + 60_000) {                console.warn("@aws-sdk/core/protocols - WARN - JsonCodec2: you have called a string method on a Uint8Array request body. " +                    "It has been automatically converted to string. In a future version this will throw an error.");                warned = n;            }            this.string = toUtf8(this);        }        return this.string;    }}var warned = 0; const encoder = new TextEncoder();const OPEN_BRACE = 0x7b;const CLOSE_BRACE = 0x7d;const OPEN_BRACKET = 0x5b;const CLOSE_BRACKET = 0x5d;const QUOTE = 0x22;const COLON = 0x3a;const COMMA = 0x2c;const BACKSLASH = 0x5c;const TRUE = new Uint8Array([0x74, 0x72, 0x75, 0x65]);const FALSE = new Uint8Array([0x66, 0x61, 0x6c, 0x73, 0x65]);const NULL = new Uint8Array([0x6e, 0x75, 0x6c, 0x6c]);const ESCAPE_TABLE = new Array(128).fill(null);ESCAPE_TABLE[0x08] = "b";ESCAPE_TABLE[0x09] = "t";ESCAPE_TABLE[0x0a] = "n";ESCAPE_TABLE[0x0c] = "f";ESCAPE_TABLE[0x0d] = "r";ESCAPE_TABLE[0x22] = '"';ESCAPE_TABLE[0x5c] = "\\";for (let i = 0; i < 0x20; i++) {    if (ESCAPE_TABLE[i] === null) {        ESCAPE_TABLE[i] = "u00" + i.toString(16).padStart(2, "0");    }}const INITIAL_BUFFER_SIZE = 2048;function alloc(size) {    return JsonBytesStringAdapter.allocUnsafe(size);}class JsonShapeSerializer2 extends SerdeContextConfig {    settings;    json;    i = 0;    rootSchema;    rawValue;    passthrough = false;    constructor(settings) {        super();        this.settings = settings;        this.json = alloc(INITIAL_BUFFER_SIZE);    }    write(schema, value) {        this.i = 0;        this.rawValue = value;        this.rootSchema = NormalizedSchema.of(schema);        this.passthrough = this.rootSchema.isBlobSchema() || this.rootSchema.isStringSchema();        if (!this.passthrough) {            this.writeValue(this.rootSchema, value, undefined);        }    }    writeDiscriminatedDocument(schema, value) {        this.i = 0;        this.rootSchema = NormalizedSchema.of(schema);        const ns = this.rootSchema;        if (ns.isStructSchema() && value != null && typeof value === "object") {            this.writeValue(ns, value, undefined);            const prefix = `"__type":"${ns.getName(true) ?? "Unknown"}",`;            const z = prefix.length;            this.ensure(z);            this.json.copyWithin(1 + z, 1, this.i);            encoder.encodeInto(prefix, this.json.subarray(1));            this.i += z;        }        else {            this.writeValue(ns, value, undefined);        }    }    flush() {        this.rootSchema = undefined;        const finalPosition = this.i;        this.i = 0;        const raw = this.rawValue;        this.rawValue = undefined;        if (finalPosition === 0) {            return raw;        }        const result = this.json.subarray(0, finalPosition);        this.json = alloc(INITIAL_BUFFER_SIZE);        return result;    }    ensure(byteCount) {        const { i, json } = this;        if (i + byteCount > json.length) {            let newSize = json.length * 2;            while (newSize < i + byteCount) {                newSize *= 2;            }            const next = alloc(newSize);            next.set(this.json);            this.json = next;        }    }    writeAscii(s) {        const z = s.length;        this.ensure(z);        let { i, json } = this;        for (let j = 0; j < z; ++j) {            json[i] = s.charCodeAt(j);            i += 1;        }        this.i = i;    }    writeAsciiQuoted(s) {        const z = s.length;        this.ensure(z + 4);        let { json, i } = this;        json[i++] = QUOTE;        for (let j = 0; j < z; ++j) {            json[i++] = s.charCodeAt(j);        }        json[i++] = QUOTE;        this.i = i;    }    writeJsonString(s) {        this.ensure(s.length * 3 + 2);        this.json[this.i++] = QUOTE;        const z = s.length;        for (let j = 0; j < z; ++j) {            const c = s.charCodeAt(j);            if (c > 0x22 && c < 0x5c) {                this.json[this.i++] = c;            }            else if (c < 0x80) {                const esc = ESCAPE_TABLE[c];                if (esc !== null) {                    this.ensure(esc.length + 1);                    this.json[this.i++] = BACKSLASH;                    for (let k = 0; k < esc.length; k++) {                        this.json[this.i++] = esc.charCodeAt(k);                    }                }                else {                    this.json[this.i++] = c;                }            }            else if (c >= 0xd800 && c <= 0xdbff) {                const next = j + 1 < z ? s.charCodeAt(j + 1) : 0;                if (next >= 0xdc00 && next <= 0xdfff) {                    this.ensure(4);                    const { written } = encoder.encodeInto(s.substring(j, j + 2), this.json.subarray(this.i));                    this.i += written;                    ++j;                }                else {                    this.ensure(6);                    this.writeUnicodeEscape(c);                }            }            else if (c >= 0xdc00 && c <= 0xdfff) {                this.ensure(6);                this.writeUnicodeEscape(c);            }            else {                let { i, json } = this;                if (c < 0x800) {                    json[i++] = 0xc0 | (c >> 6);                    json[i++] = 0x80 | (c & 0x3f);                }                else {                    json[i++] = 0xe0 | (c >> 12);                    json[i++] = 0x80 | ((c >> 6) & 0x3f);                    json[i++] = 0x80 | (c & 0x3f);                }                this.i = i;            }        }        this.json[this.i++] = QUOTE;    }    writeUnicodeEscape(code) {        let { json, i } = this;        json[i++] = BACKSLASH;        json[i++] = 0x75;        const hex = code.toString(16).padStart(4, "0");        for (let j = 0; j < 4; ++j) {            json[i++] = hex.charCodeAt(j);        }        this.i = i;    }    static B64 = (() => {        const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";        const table = new Uint8Array(64);        for (let i = 0; i < 64; ++i) {            table[i] = chars.charCodeAt(i);        }        return table;    })();    writeBase64(data) {        const b64Len = Math.ceil(data.length / 3) * 4;        this.ensure(b64Len + 2);        const json = this.json;        const B64 = JsonShapeSerializer2.B64;        let i = this.i;        json[i++] = QUOTE;        const len = data.length;        const remainder = len % 3;        const mainLen = len - remainder;        for (let j = 0; j < mainLen; j += 3) {            const a = data[j];            const b = data[j + 1];            const c = data[j + 2];            json[i++] = B64[a >> 2];            json[i++] = B64[((a & 0x03) << 4) | (b >> 4)];            json[i++] = B64[((b & 0x0f) << 2) | (c >> 6)];            json[i++] = B64[c & 0x3f];        }        if (remainder === 2) {            const a = data[mainLen];            const b = data[mainLen + 1];            json[i++] = B64[a >> 2];            json[i++] = B64[((a & 0x03) << 4) | (b >> 4)];            json[i++] = B64[(b & 0x0f) << 2];            json[i++] = 0x3d;        }        else if (remainder === 1) {            const a = data[mainLen];            json[i++] = B64[a >> 2];            json[i++] = B64[(a & 0x03) << 4];            json[i++] = 0x3d;            json[i++] = 0x3d;        }        json[i++] = QUOTE;        this.i = i;    }    writeValue(schema, value, container) {        if (value == null) {            if (container?.isStructSchema()) {                if (value === undefined) {                    const ns = NormalizedSchema.of(schema);                    if (ns.isIdempotencyToken()) {                        this.writeAsciiQuoted(generateIdempotencyToken());                        return;                    }                }                return;            }            this.ensure(4);            this.json.set(NULL, this.i);            this.i += 4;            return;        }        const ns = NormalizedSchema.of(schema);        const isObject = typeof value === "object";        if (ns.isStringSchema()) {            const mediaType = ns.getMergedTraits().mediaType;            if (mediaType) {                const isJson = mediaType === "application/json" || mediaType.endsWith("+json");                if (isJson) {                    this.writeJsonString(LazyJsonString.from(value).toString());                    return;                }            }        }        if (isObject) {            if (ns.isStructSchema()) {                this.writeStruct(ns, value);                return;            }            if (Array.isArray(value) && (ns.isListSchema() || ns.isDocumentSchema())) {                this.writeList(ns, value, ns.isDocumentSchema());                return;            }            if (ns.isMapSchema()) {                this.writeMap(ns, value, false);                return;            }            if (value instanceof Uint8Array && (ns.isBlobSchema() || ns.isDocumentSchema())) {                this.writeBase64(value);                return;            }            if (value instanceof Date && (ns.isTimestampSchema() || ns.isDocumentSchema())) {                this.writeTimestamp(ns, value);                return;            }            if (value instanceof NumericValue) {                this.writeAscii(value.string);                return;            }            if (ns.isDocumentSchema()) {                if (Array.isArray(value)) {                    this.writeList(ns, value, true);                }                else {                    this.writeMap(ns, value, true);                }                return;            }            const json = JSON.stringify(value);            this.writeAscii(json);            return;        }        if (typeof value === "string") {            if (ns.isBlobSchema()) {                const b64 = (this.serdeContext?.base64Encoder ?? toBase64)(value);                this.writeAsciiQuoted(b64);                return;            }            this.writeJsonString(value);            return;        }        if (typeof value === "number") {            if (Math.abs(value) === Infinity || Number.isNaN(value)) {                this.writeAsciiQuoted(String(value));                return;            }            const numStr = String(value);            this.writeAscii(numStr);            return;        }        if (typeof value === "boolean") {            this.ensure(5);            let { i, json } = this;            if (value) {                json.set(TRUE, i);                i += 4;            }            else {                json.set(FALSE, i);                i += 5;            }            this.i = i;            return;        }        if (typeof value === "bigint") {            this.writeAscii(value.toString());            return;        }        this.writeAscii(String(value));    }    writeStruct(ns, value) {        this.ensure(2);        this.json[this.i++] = OPEN_BRACE;        let wroteAny = false;        const hasType = typeof value.__type === "string";        let writtenKeys;        if (hasType) {            writtenKeys = new Set();        }        for (const [memberName, memberSchema] of ns.structIterator()) {            const item = value[memberName];            if (item == null && !memberSchema.isIdempotencyToken()) {                continue;            }            if (wroteAny) {                this.ensure(1);                this.json[this.i++] = COMMA;            }            wroteAny = true;            const targetKey = this.settings.jsonName ? (memberSchema.getMergedTraits().jsonName ?? memberName) : memberName;            if (writtenKeys) {                writtenKeys.add(memberName);                writtenKeys.add(targetKey);            }            this.writeAsciiQuoted(targetKey);            this.json[this.i++] = COLON;            this.writeValue(memberSchema, item, ns);        }        if (!wroteAny && ns.isUnionSchema()) {            const { $unknown } = value;            if (Array.isArray($unknown)) {                const [k, v] = $unknown;                this.writeAsciiQuoted(k);                this.ensure(1);                this.json[this.i++] = COLON;                this.writeValue(15, v, ns);            }        }        else if (hasType) {            for (const k in value) {                if (writtenKeys.has(k)) {                    continue;                }                writtenKeys.add(k);                const v = value[k];                if (wroteAny) {                    this.ensure(1);                    this.json[this.i++] = COMMA;                }                wroteAny = true;                this.writeAsciiQuoted(k);                this.ensure(1);                this.json[this.i++] = COLON;                this.writeValue(15, v, undefined);            }        }        this.ensure(1);        this.json[this.i++] = CLOSE_BRACE;    }    writeList(ns, value, isDocument) {        const sparse = !!ns.getMergedTraits().sparse;        const valueSchema = ns.getValueSchema();        if (!isDocument) {            if (valueSchema.isStringSchema() || valueSchema.isNumericSchema() || valueSchema.isBooleanSchema()) {                let hasSpecials = false;                for (let i = 0; i < value.length; ++i) {                    const v = value[i];                    if (Number.isNaN(v) || v === Infinity || v === -Infinity || (v == null && !sparse)) {                        hasSpecials = true;                        break;                    }                }                let json;                if (!hasSpecials) {                    json = JSON.stringify(value);                }                else {                    const out = [];                    for (let i = 0; i < value.length; ++i) {                        const v = value[i];                        if (v == null && !sparse)                            continue;                        if (Number.isNaN(v) || v === Infinity || v === -Infinity) {                            out.push(String(v));                        }                        else {                            out.push(v);                        }                    }                    json = JSON.stringify(out);                }                this.ensure(json.length * 3);                this.i += encoder.encodeInto(json, this.json.subarray(this.i)).written;                return;            }        }        this.ensure(2);        this.json[this.i++] = OPEN_BRACKET;        let wroteFirstItem = false;        for (let i = 0; i < value.length; ++i) {            const item = value[i];            if (isDocument ? item === undefined : item == null && !sparse) {                continue;            }            if (wroteFirstItem) {                this.ensure(1);                this.json[this.i++] = COMMA;            }            this.writeValue(valueSchema, item, undefined);            wroteFirstItem = true;        }        this.ensure(1);        this.json[this.i++] = CLOSE_BRACKET;    }    writeMap(ns, value, isDocument) {        const sparse = !!ns.getMergedTraits().sparse;        const valueSchema = ns.getValueSchema();        if (!isDocument) {            if (valueSchema.isStringSchema() || valueSchema.isNumericSchema() || valueSchema.isBooleanSchema()) {                let modifications;                for (const k in value) {                    const v = value[k];                    if (Number.isNaN(v) || v === Infinity || v === -Infinity) {                        (modifications ??= {})[k] = v;                        value[k] = String(v);                    }                    else if (v === null && !sparse) {                        (modifications ??= {})[k] = null;                        value[k] = undefined;                    }                }                const json = JSON.stringify(value);                if (modifications) {                    Object.assign(value, modifications);                }                this.ensure(json.length * 3);                this.i += encoder.encodeInto(json, this.json.subarray(this.i)).written;                return;            }        }        this.ensure(2);        this.json[this.i++] = OPEN_BRACE;        let first = true;        for (const k in value) {            const v = value[k];            if (isDocument ? v === undefined : v == null && !sparse) {                continue;            }            if (!first) {                this.ensure(1);                this.json[this.i++] = COMMA;            }            first = false;            this.writeJsonString(k);            this.ensure(1);            this.json[this.i++] = COLON;            this.writeValue(valueSchema, v, undefined);        }        this.ensure(1);        this.json[this.i++] = CLOSE_BRACE;    }    writeTimestamp(ns, value) {        const format = determineTimestampFormat(ns, this.settings);        switch (format) {            case 5: {                const iso = value.toISOString().replace(".000Z", "Z");                this.writeAsciiQuoted(iso);                return;            }            case 6: {                this.writeAsciiQuoted(dateToUtcString(value));                return;            }            case 7: {                const epochSecs = String(value.getTime() / 1000);                this.writeAscii(epochSecs);                return;            }            default: {                const epochSecs = String(value.getTime() / 1000);                this.writeAscii(epochSecs);                return;            }        }    }} class JsonCodec2 extends SerdeContextConfig {    settings;    constructor(settings) {        super();        this.settings = settings;    }    createSerializer() {        const serializer = new JsonShapeSerializer2(this.settings);        serializer.setSerdeContext(this.serdeContext);        return serializer;    }    createDeserializer() {        const deserializer = new JsonShapeDeserializer2(this.settings);        deserializer.setSerdeContext(this.serdeContext);        return deserializer;    }} class AwsJsonRpcProtocol extends RpcProtocol {    serializer;    deserializer;    serviceTarget;    codec;    mixin;    awsQueryCompatible;    constructor({ defaultNamespace, errorTypeRegistries, serviceTarget, awsQueryCompatible, jsonCodec, }) {        super({            defaultNamespace,            errorTypeRegistries,        });        this.serviceTarget = serviceTarget;        this.codec =            jsonCodec ??                new JsonCodec2({                    timestampFormat: {                        useTrait: true,                        default: 7,                    },                    jsonName: false,                });        this.serializer = this.codec.createSerializer();        this.deserializer = this.codec.createDeserializer();        this.awsQueryCompatible = !!awsQueryCompatible;        this.mixin = new ProtocolLib(this.awsQueryCompatible);    }    async serializeRequest(operationSchema, input, context) {        const request = await super.serializeRequest(operationSchema, input, context);        if (!request.path.endsWith("/")) {            request.path += "/";        }        request.headers["content-type"] = `application/x-amz-json-${this.getJsonRpcVersion()}`;        request.headers["x-amz-target"] = `${this.serviceTarget}.${operationSchema.name}`;        if (this.awsQueryCompatible) {            request.headers["x-amzn-query-mode"] = "true";        }        if (deref(operationSchema.input) === "unit" || !request.body) {            request.body = "{}";        }        return request;    }    getPayloadCodec() {        return this.codec;    }    async handleError(operationSchema, context, response, dataObject, metadata) {        const { awsQueryCompatible } = this;        if (awsQueryCompatible) {            this.mixin.setQueryCompatError(dataObject, response);        }        const errorIdentifier = loadJsonRpcErrorCode(response, dataObject, awsQueryCompatible) ?? "Unknown";        this.mixin.compose(this.compositeErrorRegistry, errorIdentifier, this.options.defaultNamespace);        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata, awsQueryCompatible ? this.mixin.findQueryCompatibleError : undefined);        const ns = NormalizedSchema.of(errorSchema);        const message = dataObject.message ?? dataObject.Message ?? "UnknownError";        const ErrorCtor = this.compositeErrorRegistry.getErrorCtor(errorSchema) ?? Error;        const exception = new ErrorCtor({});        const output = {};        const errorDeserializer = this.codec.createDeserializer();        for (const [name, member] of ns.structIterator()) {            if (dataObject[name] != null) {                output[name] = errorDeserializer.readObject(member, dataObject[name]);            }        }        if (awsQueryCompatible) {            this.mixin.queryCompatOutput(dataObject, output);        }        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {            $fault: ns.getMergedTraits().error,            message,        }, output), dataObject);    }} class AwsJson1_0Protocol extends AwsJsonRpcProtocol {    constructor({ defaultNamespace, errorTypeRegistries, serviceTarget, awsQueryCompatible, jsonCodec, }) {        super({            defaultNamespace,            errorTypeRegistries,            serviceTarget,            awsQueryCompatible,            jsonCodec,        });    }    getShapeId() {        return "aws.protocols#awsJson1_0";    }    getJsonRpcVersion() {        return "1.0";    }    getDefaultContentType() {        return "application/x-amz-json-1.0";    }} class AwsJson1_1Protocol extends AwsJsonRpcProtocol {    constructor({ defaultNamespace, errorTypeRegistries, serviceTarget, awsQueryCompatible, jsonCodec, }) {        super({            defaultNamespace,            errorTypeRegistries,            serviceTarget,            awsQueryCompatible,            jsonCodec,        });    }    getShapeId() {        return "aws.protocols#awsJson1_1";    }    getJsonRpcVersion() {        return "1.1";    }    getDefaultContentType() {        return "application/x-amz-json-1.1";    }} class AwsRestJsonProtocol extends HttpBindingProtocol {    serializer;    deserializer;    codec;    mixin = new ProtocolLib();    constructor({ defaultNamespace, errorTypeRegistries, jsonCodec, }) {        super({            defaultNamespace,            errorTypeRegistries,        });        const settings = {            timestampFormat: {                useTrait: true,                default: 7,            },            httpBindings: true,            jsonName: true,        };        this.codec = jsonCodec ?? new JsonCodec2(settings);        this.serializer = new HttpInterceptingShapeSerializer(this.codec.createSerializer(), settings);        this.deserializer = new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(), settings);    }    getShapeId() {        return "aws.protocols#restJson1";    }    getPayloadCodec() {        return this.codec;    }    setSerdeContext(serdeContext) {        this.codec.setSerdeContext(serdeContext);        super.setSerdeContext(serdeContext);    }    async serializeRequest(operationSchema, input, context) {        const request = await super.serializeRequest(operationSchema, input, context);        const inputSchema = NormalizedSchema.of(operationSchema.input);        if (!request.headers["content-type"]) {            const contentType = this.mixin.resolveRestContentType(this.getDefaultContentType(), inputSchema);            if (contentType) {                request.headers["content-type"] = contentType;            }        }        if (request.body == null && request.headers["content-type"] === this.getDefaultContentType()) {            request.body = "{}";        }        return request;    }    async deserializeResponse(operationSchema, context, response) {        const output = await super.deserializeResponse(operationSchema, context, response);        const outputSchema = NormalizedSchema.of(operationSchema.output);        for (const [name, member] of outputSchema.structIterator()) {            if (member.getMemberTraits().httpPayload && !(name in output)) {                output[name] = null;            }        }        return output;    }    async handleError(operationSchema, context, response, dataObject, metadata) {        const errorIdentifier = loadRestJsonErrorCode(response, dataObject) ?? "Unknown";        this.mixin.compose(this.compositeErrorRegistry, errorIdentifier, this.options.defaultNamespace);        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata);        const ns = NormalizedSchema.of(errorSchema);        const message = dataObject.message ?? dataObject.Message ?? "UnknownError";        const ErrorCtor = this.compositeErrorRegistry.getErrorCtor(errorSchema) ?? Error;        const exception = new ErrorCtor({});        await this.deserializeHttpMessage(errorSchema, context, response, dataObject);        const output = {};        const errorDeserializer = this.codec.createDeserializer();        for (const [name, member] of ns.structIterator()) {            const target = member.getMergedTraits().jsonName ?? name;            output[name] = errorDeserializer.readObject(member, dataObject[target]);        }        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {            $fault: ns.getMergedTraits().error,            message,        }, output), dataObject);    }    getDefaultContentType() {        return "application/json";    }} class JsonShapeDeserializer extends SerdeContextConfig {    settings;    constructor(settings) {        super();        this.settings = settings;    }    async read(schema, data) {        const reviver = needsReviver(schema) ? jsonReviver : undefined;        return this._read(schema, typeof data === "string" ? JSON.parse(data, reviver) : await parseJsonBody(data, this.serdeContext, schema));    }    readObject(schema, data) {        return this._read(schema, data);    }    _read(schema, value) {        const isObject = value !== null && typeof value === "object";        const ns = NormalizedSchema.of(schema);        if (isObject) {            if (ns.isStructSchema()) {                const record = value;                const union = ns.isUnionSchema();                const out = {};                let nameMap = void 0;                const { jsonName } = this.settings;                if (jsonName) {                    nameMap = {};                }                let unionSerde;                if (union) {                    unionSerde = new UnionSerde(record, out);                }                for (const [memberName, memberSchema] of ns.structIterator()) {                    let fromKey = memberName;                    if (jsonName) {                        fromKey = memberSchema.getMergedTraits().jsonName ?? fromKey;                        nameMap[fromKey] = memberName;                    }                    if (union) {                        unionSerde.mark(fromKey);                    }                    if (record[fromKey] != null) {                        out[memberName] = this._read(memberSchema, record[fromKey]);                    }                }                if (union) {                    unionSerde.writeUnknown();                }                else if (typeof record.__type === "string") {                    for (const k in record) {                        const v = record[k];                        const t = jsonName ? (nameMap[k] ?? k) : k;                        if (!(t in out)) {                            out[t] = v;                        }                    }                }                return out;            }            if (Array.isArray(value) && ns.isListSchema()) {                const listMember = ns.getValueSchema();                const out = [];                for (const item of value) {                    out.push(this._read(listMember, item));                }                return out;            }            if (ns.isMapSchema()) {                const mapMember = ns.getValueSchema();                const out = {};                for (const _k in value) {                    if (_k === "__proto__") {                        writeKey(out);                    }                    out[_k] = this._read(mapMember, value[_k]);                }                return out;            }        }        if (ns.isBlobSchema() && typeof value === "string") {            return fromBase64(value);        }        const mediaType = ns.getMergedTraits().mediaType;        if (ns.isStringSchema() && typeof value === "string" && mediaType) {            const isJson = mediaType === "application/json" || mediaType.endsWith("+json");            if (isJson) {                return LazyJsonString.from(value);            }            return value;        }        if (ns.isTimestampSchema() && value != null) {            const format = determineTimestampFormat(ns, this.settings);            switch (format) {                case 5:                    return parseRfc3339DateTimeWithOffset(value);                case 6:                    return parseRfc7231DateTime(value);                case 7:                    return parseEpochTimestamp(value);                default:                    console.warn("Missing timestamp format, parsing value with Date constructor:", value);                    return new Date(value);            }        }        if (ns.isBigIntegerSchema() && (typeof value === "number" || typeof value === "string")) {            return BigInt(value);        }        if (ns.isBigDecimalSchema() && value != undefined) {            if (value instanceof NumericValue) {                return value;            }            const untyped = value;            if (untyped.type === "bigDecimal" && "string" in untyped) {                return new NumericValue(untyped.string, untyped.type);            }            return new NumericValue(String(value), "bigDecimal");        }        if (ns.isNumericSchema() && typeof value === "string") {            switch (value) {                case "Infinity":                    return Infinity;                case "-Infinity":                    return -Infinity;                case "NaN":                    return NaN;            }            return value;        }        if (ns.isDocumentSchema()) {            if (isObject) {                const out = Array.isArray(value) ? [] : {};                for (const k in value) {                    if (k === "__proto__") {                        writeKey(out);                    }                    const v = value[k];                    if (v instanceof NumericValue) {                        out[k] = v;                    }                    else {                        out[k] = this._read(ns, v);                    }                }                return out;            }            else {                return structuredClone(value);            }        }        return value;    }} const NUMERIC_CONTROL_CHAR = String.fromCharCode(925);class JsonReplacer {    values = new Map();    counter = 0;    stage = 0;    createReplacer() {        if (this.stage === 1) {            throw new Error("@aws-sdk/core/protocols - JsonReplacer already created.");        }        if (this.stage === 2) {            throw new Error("@aws-sdk/core/protocols - JsonReplacer exhausted.");        }        this.stage = 1;        return (key, value) => {            if (value instanceof NumericValue) {                const v = `${NUMERIC_CONTROL_CHAR + "nv" + this.counter++}_` + value.string;                this.values.set(`"${v}"`, value.string);                return v;            }            if (typeof value === "bigint") {                const s = value.toString();                const v = `${NUMERIC_CONTROL_CHAR + "b" + this.counter++}_` + s;                this.values.set(`"${v}"`, s);                return v;            }            return value;        };    }    replaceInJson(json) {        if (this.stage === 0) {            throw new Error("@aws-sdk/core/protocols - JsonReplacer not created yet.");        }        if (this.stage === 2) {            throw new Error("@aws-sdk/core/protocols - JsonReplacer exhausted.");        }        this.stage = 2;        if (this.counter === 0) {            return json;        }        for (const [key, value] of this.values) {            json = json.replace(key, value);        }        return json;    }} class JsonShapeSerializer extends SerdeContextConfig {    settings;    buffer;    useReplacer = false;    rootSchema;    constructor(settings) {        super();        this.settings = settings;    }    write(schema, value) {        this.rootSchema = NormalizedSchema.of(schema);        this.buffer = this._write(this.rootSchema, value);    }    flush() {        const { rootSchema, useReplacer } = this;        this.rootSchema = undefined;        this.useReplacer = false;        if (rootSchema?.isStructSchema() || rootSchema?.isDocumentSchema()) {            if (!useReplacer) {                return JSON.stringify(this.buffer);            }            const replacer = new JsonReplacer();            return replacer.replaceInJson(JSON.stringify(this.buffer, replacer.createReplacer(), 0));        }        return this.buffer;    }    writeDiscriminatedDocument(schema, value) {        this.write(schema, value);        if (typeof this.buffer === "object") {            this.buffer.__type = NormalizedSchema.of(schema).getName(true);        }    }    _write(schema, value, container) {        const isObject = value !== null && typeof value === "object";        const ns = NormalizedSchema.of(schema);        if (isObject) {            if (ns.isStructSchema()) {                const record = value;                const out = {};                const { jsonName } = this.settings;                let nameMap = void 0;                if (jsonName) {                    nameMap = {};                }                let outCount = 0;                for (const [memberName, memberSchema] of ns.structIterator()) {                    const serializableValue = this._write(memberSchema, record[memberName], ns);                    if (serializableValue !== undefined) {                        let targetKey = memberName;                        if (jsonName) {                            targetKey = memberSchema.getMergedTraits().jsonName ?? memberName;                            nameMap[memberName] = targetKey;                        }                        out[targetKey] = serializableValue;                        outCount++;                    }                }                if (ns.isUnionSchema() && outCount === 0) {                    const { $unknown } = record;                    if (Array.isArray($unknown)) {                        const [k, v] = $unknown;                        if (k === "__proto__") {                            writeKey(out);                        }                        out[k] = this._write(15, v);                    }                }                else if (typeof record.__type === "string") {                    for (const k in record) {                        const v = record[k];                        const targetKey = jsonName ? (nameMap[k] ?? k) : k;                        if (!(targetKey in out)) {                            out[targetKey] = this._write(15, v);                        }                    }                }                return out;            }            if (Array.isArray(value) && ns.isListSchema()) {                const listMember = ns.getValueSchema();                const out = [];                const sparse = !!ns.getMergedTraits().sparse;                for (const item of value) {                    if (sparse || item != null) {                        out.push(this._write(listMember, item));                    }                }                return out;            }            if (ns.isMapSchema()) {                const mapMember = ns.getValueSchema();                const out = {};                const sparse = !!ns.getMergedTraits().sparse;                for (const _k in value) {                    const _v = value[_k];                    if (sparse || _v != null) {                        if (_k === "__proto__") {                            writeKey(out);                        }                        out[_k] = this._write(mapMember, _v);                    }                }                return out;            }            if (value instanceof Uint8Array && ns.isBlobSchema()) {                if (ns === this.rootSchema) {                    return value;                }                return (this.serdeContext?.base64Encoder ?? toBase64)(value);            }            if (value instanceof Date && (ns.isTimestampSchema() || ns.isDocumentSchema())) {                const format = determineTimestampFormat(ns, this.settings);                switch (format) {                    case 5:                        return value.toISOString().replace(".000Z", "Z");                    case 6:                        return dateToUtcString(value);                    case 7:                        return value.getTime() / 1000;                    default:                        console.warn("Missing timestamp format, using epoch seconds", value);                        return value.getTime() / 1000;                }            }            if (value instanceof NumericValue) {                this.useReplacer = true;            }        }        if (value === null && container?.isStructSchema()) {            return void 0;        }        if (ns.isStringSchema()) {            if (typeof value === "undefined" && ns.isIdempotencyToken()) {                return generateIdempotencyToken();            }            const mediaType = ns.getMergedTraits().mediaType;            if (value != null && mediaType) {                const isJson = mediaType === "application/json" || mediaType.endsWith("+json");                if (isJson) {                    return LazyJsonString.from(value);                }            }            return value;        }        if (typeof value === "number") {            if (Math.abs(value) === Infinity || isNaN(value)) {                return String(value);            }            return value;        }        if (typeof value === "string" && ns.isBlobSchema()) {            if (ns === this.rootSchema) {                return value;            }            return (this.serdeContext?.base64Encoder ?? toBase64)(value);        }        if (typeof value === "bigint") {            this.useReplacer = true;        }        if (ns.isDocumentSchema()) {            if (isObject) {                if (value instanceof Uint8Array) {                    return (this.serdeContext?.base64Encoder ?? toBase64)(value);                }                const out = Array.isArray(value) ? [] : {};                for (const k in value) {                    const v = value[k];                    if (k === "__proto__") {                        writeKey(out);                    }                    if (v instanceof NumericValue) {                        this.useReplacer = true;                        out[k] = v;                    }                    else {                        out[k] = this._write(ns, v);                    }                }                return out;            }            else {                return structuredClone(value);            }        }        return value;    }} class JsonCodec extends SerdeContextConfig {    settings;    constructor(settings) {        super();        this.settings = settings;    }    createSerializer() {        const serializer = new JsonShapeSerializer(this.settings);        serializer.setSerdeContext(this.serdeContext);        return serializer;    }    createDeserializer() {        const deserializer = new JsonShapeDeserializer(this.settings);        deserializer.setSerdeContext(this.serdeContext);        return deserializer;    }} class XmlShapeDeserializer extends SerdeContextConfig {    settings;    stringDeserializer;    constructor(settings) {        super();        this.settings = settings;        this.stringDeserializer = new FromStringShapeDeserializer(settings);    }    setSerdeContext(serdeContext) {        this.serdeContext = serdeContext;        this.stringDeserializer.setSerdeContext(serdeContext);    }    read(schema, bytes, key) {        const ns = NormalizedSchema.of(schema);        const memberSchemas = ns.getMemberSchemas();        const isEventPayload = ns.isStructSchema() &&            ns.isMemberSchema() &&            !!Object.values(memberSchemas).find((memberNs) => {                return !!memberNs.getMemberTraits().eventPayload;            });        if (isEventPayload) {            const output = {};            const memberName = Object.keys(memberSchemas)[0];            const eventMemberSchema = memberSchemas[memberName];            if (eventMemberSchema.isBlobSchema()) {                output[memberName] = bytes;            }            else {                output[memberName] = this.read(memberSchemas[memberName], bytes);            }            return output;        }        const xmlString = (this.serdeContext?.utf8Encoder ?? toUtf8)(bytes);        const parsedObject = this.parseXml(xmlString);        return this.readSchema(schema, key ? parsedObject[key] : parsedObject);    }    readSchema(_schema, value) {        const ns = NormalizedSchema.of(_schema);        if (ns.isUnitSchema()) {            return;        }        const traits = ns.getMergedTraits();        if (ns.isListSchema() && !Array.isArray(value)) {            return this.readSchema(ns, [value]);        }        if (value == null) {            return value;        }        if (typeof value === "object") {            const flat = !!traits.xmlFlattened;            if (ns.isListSchema()) {                const listValue = ns.getValueSchema();                const buffer = [];                const sourceKey = listValue.getMergedTraits().xmlName ?? "member";                const source = flat ? value : (value[0] ?? value)[sourceKey];                if (source == null) {                    return buffer;                }                const sourceArray = Array.isArray(source) ? source : [source];                for (const v of sourceArray) {                    buffer.push(this.readSchema(listValue, v));                }                return buffer;            }            const buffer = {};            if (ns.isMapSchema()) {                const keyNs = ns.getKeySchema();                const memberNs = ns.getValueSchema();                let entries;                if (flat) {                    entries = Array.isArray(value) ? value : [value];                }                else {                    entries = Array.isArray(value.entry) ? value.entry : [value.entry];                }                const keyProperty = keyNs.getMergedTraits().xmlName ?? "key";                const valueProperty = memberNs.getMergedTraits().xmlName ?? "value";                for (const entry of entries) {                    const key = entry[keyProperty];                    const value = entry[valueProperty];                    if (key === "__proto__") {                        writeKey(buffer);                    }                    buffer[key] = this.readSchema(memberNs, value);                }                return buffer;            }            if (ns.isStructSchema()) {                const union = ns.isUnionSchema();                let unionSerde;                if (union) {                    unionSerde = new UnionSerde(value, buffer);                }                for (const [memberName, memberSchema] of ns.structIterator()) {                    const memberTraits = memberSchema.getMergedTraits();                    const xmlObjectKey = !memberTraits.httpPayload                        ? (memberSchema.getMemberTraits().xmlName ?? memberName)                        : (memberTraits.xmlName ?? memberSchema.getName());                    if (union) {                        unionSerde.mark(xmlObjectKey);                    }                    if (value[xmlObjectKey] != null) {                        buffer[memberName] = this.readSchema(memberSchema, value[xmlObjectKey]);                    }                }                if (union) {                    unionSerde.writeUnknown();                }                return buffer;            }            if (ns.isDocumentSchema()) {                return value;            }            throw new Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${ns.getName(true)}`);        }        if (ns.isListSchema()) {            return [];        }        if (ns.isMapSchema() || ns.isStructSchema()) {            return {};        }        return this.stringDeserializer.read(ns, value);    }    parseXml(xml) {        if (xml.length) {            let parsedObj;            try {                parsedObj = parseXML(xml);            }            catch (e) {                if (e && typeof e === "object") {                    Object.defineProperty(e, "$responseBodyText", {                        value: xml,                    });                }                throw e;            }            const textNodeName = "#text";            const key = Object.keys(parsedObj)[0];            const parsedObjToReturn = parsedObj[key];            if (parsedObjToReturn[textNodeName]) {                parsedObjToReturn[key] = parsedObjToReturn[textNodeName];                delete parsedObjToReturn[textNodeName];            }            return getValueFromTextNode(parsedObjToReturn);        }        return {};    }} class QueryShapeSerializer extends SerdeContextConfig {    settings;    buffer;    constructor(settings) {        super();        this.settings = settings;    }    write(schema, value, prefix = "") {        if (this.buffer === undefined) {            this.buffer = "";        }        const ns = NormalizedSchema.of(schema);        if (prefix && !prefix.endsWith(".")) {            prefix += ".";        }        if (ns.isBlobSchema()) {            if (typeof value === "string" || value instanceof Uint8Array) {                this.writeKey(prefix);                this.writeValue((this.serdeContext?.base64Encoder ?? toBase64)(value));            }        }        else if (ns.isBooleanSchema() || ns.isNumericSchema() || ns.isStringSchema()) {            if (value != null) {                this.writeKey(prefix);                this.writeValue(String(value));            }            else if (ns.isIdempotencyToken()) {                this.writeKey(prefix);                this.writeValue(generateIdempotencyToken());            }        }        else if (ns.isBigIntegerSchema()) {            if (value != null) {                this.writeKey(prefix);                this.writeValue(String(value));            }        }        else if (ns.isBigDecimalSchema()) {            if (value != null) {                this.writeKey(prefix);                this.writeValue(value instanceof NumericValue ? value.string : String(value));            }        }        else if (ns.isTimestampSchema()) {            if (value instanceof Date) {                this.writeKey(prefix);                const format = determineTimestampFormat(ns, this.settings);                switch (format) {                    case 5:                        this.writeValue(value.toISOString().replace(".000Z", "Z"));                        break;                    case 6:                        this.writeValue(dateToUtcString(value));                        break;                    case 7:                        this.writeValue(String(value.getTime() / 1000));                        break;                }            }        }        else if (ns.isDocumentSchema()) {            if (Array.isArray(value)) {                this.write(64 | 15, value, prefix);            }            else if (value instanceof Date) {                this.write(4, value, prefix);            }            else if (value instanceof Uint8Array) {                this.write(21, value, prefix);            }            else if (value && typeof value === "object") {                this.write(128 | 15, value, prefix);            }            else {                this.writeKey(prefix);                this.writeValue(String(value));            }        }        else if (ns.isListSchema()) {            if (Array.isArray(value)) {                if (value.length === 0) {                    if (this.settings.serializeEmptyLists) {                        this.writeKey(prefix);                        this.writeValue("");                    }                }                else {                    const member = ns.getValueSchema();                    const flat = this.settings.flattenLists || ns.getMergedTraits().xmlFlattened;                    let i = 1;                    for (const item of value) {                        if (item == null) {                            continue;                        }                        const traits = member.getMergedTraits();                        const suffix = this.getKey("member", traits.xmlName, traits.ec2QueryName);                        const key = flat ? `${prefix}${i}` : `${prefix}${suffix}.${i}`;                        this.write(member, item, key);                        ++i;                    }                }            }        }        else if (ns.isMapSchema()) {            if (value && typeof value === "object") {                const keySchema = ns.getKeySchema();                const memberSchema = ns.getValueSchema();                const flat = ns.getMergedTraits().xmlFlattened;                let i = 1;                for (const k in value) {                    const v = value[k];                    if (v == null) {                        continue;                    }                    const keyTraits = keySchema.getMergedTraits();                    const keySuffix = this.getKey("key", keyTraits.xmlName, keyTraits.ec2QueryName);                    const key = flat ? `${prefix}${i}.${keySuffix}` : `${prefix}entry.${i}.${keySuffix}`;                    const valTraits = memberSchema.getMergedTraits();                    const valueSuffix = this.getKey("value", valTraits.xmlName, valTraits.ec2QueryName);                    const valueKey = flat ? `${prefix}${i}.${valueSuffix}` : `${prefix}entry.${i}.${valueSuffix}`;                    this.write(keySchema, k, key);                    this.write(memberSchema, v, valueKey);                    ++i;                }            }        }        else if (ns.isStructSchema()) {            if (value && typeof value === "object") {                let didWriteMember = false;                for (const [memberName, member] of ns.structIterator()) {                    if (value[memberName] == null && !member.isIdempotencyToken()) {                        continue;                    }                    const traits = member.getMergedTraits();                    const suffix = this.getKey(memberName, traits.xmlName, traits.ec2QueryName, "struct");                    const key = `${prefix}${suffix}`;                    this.write(member, value[memberName], key);                    didWriteMember = true;                }                if (!didWriteMember && ns.isUnionSchema()) {                    const { $unknown } = value;                    if (Array.isArray($unknown)) {                        const [k, v] = $unknown;                        const key = `${prefix}${k}`;                        this.write(15, v, key);                    }                }            }        }        else if (ns.isUnitSchema()) ;        else {            throw new Error(`@aws-sdk/core/protocols - QuerySerializer unrecognized schema type ${ns.getName(true)}`);        }    }    flush() {        if (this.buffer === undefined) {            throw new Error("@aws-sdk/core/protocols - QuerySerializer cannot flush with nothing written to buffer.");        }        const str = this.buffer;        delete this.buffer;        return str;    }    getKey(memberName, xmlName, ec2QueryName, keySource) {        const { ec2, capitalizeKeys } = this.settings;        if (ec2 && ec2QueryName) {            return ec2QueryName;        }        const key = xmlName ?? memberName;        if (capitalizeKeys && keySource === "struct") {            return key[0].toUpperCase() + key.slice(1);        }        return key;    }    writeKey(key) {        if (key.endsWith(".")) {            key = key.slice(0, key.length - 1);        }        this.buffer += `&${extendedEncodeURIComponent(key)}=`;    }    writeValue(value) {        this.buffer += extendedEncodeURIComponent(value);    }} class AwsQueryProtocol extends RpcProtocol {    options;    serializer;    deserializer;    mixin = new ProtocolLib();    constructor(options) {        super({            defaultNamespace: options.defaultNamespace,            errorTypeRegistries: options.errorTypeRegistries,        });        this.options = options;        const settings = {            timestampFormat: {                useTrait: true,                default: 5,            },            httpBindings: false,            xmlNamespace: options.xmlNamespace,            serviceNamespace: options.defaultNamespace,            serializeEmptyLists: true,        };        this.serializer = new QueryShapeSerializer(settings);        this.deserializer = new XmlShapeDeserializer(settings);    }    getShapeId() {        return "aws.protocols#awsQuery";    }    setSerdeContext(serdeContext) {        this.serializer.setSerdeContext(serdeContext);        this.deserializer.setSerdeContext(serdeContext);    }    getPayloadCodec() {        throw new Error("AWSQuery protocol has no payload codec.");    }    async serializeRequest(operationSchema, input, context) {        const request = await super.serializeRequest(operationSchema, input, context);        if (!request.path.endsWith("/")) {            request.path += "/";        }        request.headers["content-type"] = "application/x-www-form-urlencoded";        if (deref(operationSchema.input) === "unit" || !request.body) {            request.body = "";        }        const action = operationSchema.name.split("#")[1] ?? operationSchema.name;        request.body = `Action=${action}&Version=${this.options.version}` + request.body;        if (request.body.endsWith("&")) {            request.body = request.body.slice(-1);        }        return request;    }    async deserializeResponse(operationSchema, context, response) {        const deserializer = this.deserializer;        const ns = NormalizedSchema.of(operationSchema.output);        const dataObject = {};        if (response.statusCode >= 300) {            const bytes = await collectBody(response.body, context);            if (bytes.byteLength > 0) {                Object.assign(dataObject, await deserializer.read(15, bytes));            }            await this.handleError(operationSchema, context, response, dataObject, this.deserializeMetadata(response));        }        for (const header in response.headers) {            const value = response.headers[header];            delete response.headers[header];            response.headers[header.toLowerCase()] = value;        }        const shortName = operationSchema.name.split("#")[1] ?? operationSchema.name;        const awsQueryResultKey = ns.isStructSchema() && this.useNestedResult() ? shortName + "Result" : undefined;        const bytes = await collectBody(response.body, context);        if (bytes.byteLength > 0) {            Object.assign(dataObject, await deserializer.read(ns, bytes, awsQueryResultKey));        }        dataObject.$metadata = this.deserializeMetadata(response);        return dataObject;    }    useNestedResult() {        return true;    }    async handleError(operationSchema, context, response, dataObject, metadata) {        const errorIdentifier = this.loadQueryErrorCode(response, dataObject) ?? "Unknown";        this.mixin.compose(this.compositeErrorRegistry, errorIdentifier, this.options.defaultNamespace);        const errorData = this.loadQueryError(dataObject) ?? {};        const message = this.loadQueryErrorMessage(dataObject);        errorData.message = message;        errorData.Error = {            Type: errorData.Type,            Code: errorData.Code,            Message: message,        };        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, errorData, metadata, this.mixin.findQueryCompatibleError);        const ns = NormalizedSchema.of(errorSchema);        const ErrorCtor = this.compositeErrorRegistry.getErrorCtor(errorSchema) ?? Error;        const exception = new ErrorCtor({});        const output = {            Type: errorData.Error.Type,            Code: errorData.Error.Code,            Error: errorData.Error,        };        for (const [name, member] of ns.structIterator()) {            const target = member.getMergedTraits().xmlName ?? name;            const value = errorData[target] ?? dataObject[target];            output[name] = this.deserializer.readSchema(member, value);        }        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {            $fault: ns.getMergedTraits().error,            message,        }, output), dataObject);    }    loadQueryErrorCode(output, data) {        const code = (data.Errors?.[0]?.Error ?? data.Errors?.Error ?? data.Error)?.Code;        if (code !== undefined) {            return code;        }        if (output.statusCode == 404) {            return "NotFound";        }    }    loadQueryError(data) {        return data.Errors?.[0]?.Error ?? data.Errors?.Error ?? data.Error;    }    loadQueryErrorMessage(data) {        const errorData = this.loadQueryError(data);        return errorData?.message ?? errorData?.Message ?? data.message ?? data.Message ?? "Unknown";    }    getDefaultContentType() {        return "application/x-www-form-urlencoded";    }} class AwsEc2QueryProtocol extends AwsQueryProtocol {    options;    constructor(options) {        super(options);        this.options = options;        const ec2Settings = {            capitalizeKeys: true,            flattenLists: true,            serializeEmptyLists: false,            ec2: true,        };        Object.assign(this.serializer.settings, ec2Settings);    }    getShapeId() {        return "aws.protocols#ec2Query";    }    useNestedResult() {        return false;    }} const parseXmlBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {    if (encoded.length) {        let parsedObj;        try {            parsedObj = parseXML(encoded);        }        catch (e) {            if (e && typeof e === "object") {                Object.defineProperty(e, "$responseBodyText", {                    value: encoded,                });            }            throw e;        }        const textNodeName = "#text";        const key = Object.keys(parsedObj)[0];        const parsedObjToReturn = parsedObj[key];        if (parsedObjToReturn[textNodeName]) {            parsedObjToReturn[key] = parsedObjToReturn[textNodeName];            delete parsedObjToReturn[textNodeName];        }        return getValueFromTextNode(parsedObjToReturn);    }    return {};});const parseXmlErrorBody = async (errorBody, context) => {    const value = await parseXmlBody(errorBody, context);    if (value.Error) {        value.Error.message = value.Error.message ?? value.Error.Message;    }    return value;};const loadRestXmlErrorCode = (output, data) => {    if (data?.Error?.Code !== undefined) {        return data.Error.Code;    }    if (data?.Code !== undefined) {        return data.Code;    }    if (output.statusCode == 404) {        return "NotFound";    }}; class XmlShapeSerializer extends SerdeContextConfig {    settings;    stringBuffer;    byteBuffer;    buffer;    constructor(settings) {        super();        this.settings = settings;    }    write(schema, value) {        const ns = NormalizedSchema.of(schema);        if (ns.isStringSchema() && typeof value === "string") {            this.stringBuffer = value;        }        else if (ns.isBlobSchema()) {            this.byteBuffer =                "byteLength" in value                    ? value                    : (this.serdeContext?.base64Decoder ?? fromBase64)(value);        }        else {            this.buffer = this.writeStruct(ns, value, undefined);            const traits = ns.getMergedTraits();            if (traits.httpPayload && !traits.xmlName) {                this.buffer.withName(ns.getName());            }        }    }    flush() {        if (this.byteBuffer !== undefined) {            const bytes = this.byteBuffer;            delete this.byteBuffer;            return bytes;        }        if (this.stringBuffer !== undefined) {            const str = this.stringBuffer;            delete this.stringBuffer;            return str;        }        const buffer = this.buffer;        if (this.settings.xmlNamespace) {            if (!buffer?.attributes?.["xmlns"]) {                buffer.addAttribute("xmlns", this.settings.xmlNamespace);            }        }        delete this.buffer;        return buffer.toString();    }    writeStruct(ns, value, parentXmlns) {        const traits = ns.getMergedTraits();        const name = ns.isMemberSchema() && !traits.httpPayload            ? (ns.getMemberTraits().xmlName ?? ns.getMemberName())            : (traits.xmlName ?? ns.getName());        if (!name || !ns.isStructSchema()) {            throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${ns.getName(true)}.`);        }        const structXmlNode = XmlNode.of(name);        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(ns, parentXmlns);        for (const [memberName, memberSchema] of ns.structIterator()) {            const val = value[memberName];            if (val != null || memberSchema.isIdempotencyToken()) {                if (memberSchema.getMergedTraits().xmlAttribute) {                    structXmlNode.addAttribute(memberSchema.getMergedTraits().xmlName ?? memberName, this.writeSimple(memberSchema, val));                    continue;                }                if (memberSchema.isListSchema()) {                    this.writeList(memberSchema, val, structXmlNode, xmlns);                }                else if (memberSchema.isMapSchema()) {                    this.writeMap(memberSchema, val, structXmlNode, xmlns);                }                else if (memberSchema.isStructSchema()) {                    structXmlNode.addChildNode(this.writeStruct(memberSchema, val, xmlns));                }                else {                    const memberNode = XmlNode.of(memberSchema.getMergedTraits().xmlName ?? memberSchema.getMemberName());                    this.writeSimpleInto(memberSchema, val, memberNode, xmlns);                    structXmlNode.addChildNode(memberNode);                }            }        }        const { $unknown } = value;        if ($unknown && ns.isUnionSchema() && Array.isArray($unknown) && Object.keys(value).length === 1) {            const [k, v] = $unknown;            const node = XmlNode.of(k);            if (typeof v !== "string") {                if (value instanceof XmlNode || value instanceof XmlText) {                    structXmlNode.addChildNode(value);                }                else {                    throw new Error(`@aws-sdk - $unknown union member in XML requires ` +                        `value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.`);                }            }            this.writeSimpleInto(0, v, node, xmlns);            structXmlNode.addChildNode(node);        }        if (xmlns) {            structXmlNode.addAttribute(xmlnsAttr, xmlns);        }        return structXmlNode;    }    writeList(listMember, array, container, parentXmlns) {        if (!listMember.isMemberSchema()) {            throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${listMember.getName(true)}`);        }        const listTraits = listMember.getMergedTraits();        const listValueSchema = listMember.getValueSchema();        const listValueTraits = listValueSchema.getMergedTraits();        const sparse = !!listValueTraits.sparse;        const flat = !!listTraits.xmlFlattened;        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(listMember, parentXmlns);        const writeItem = (container, value) => {            if (listValueSchema.isListSchema()) {                this.writeList(listValueSchema, Array.isArray(value) ? value : [value], container, xmlns);            }            else if (listValueSchema.isMapSchema()) {                this.writeMap(listValueSchema, value, container, xmlns);            }            else if (listValueSchema.isStructSchema()) {                const struct = this.writeStruct(listValueSchema, value, xmlns);                container.addChildNode(struct.withName(flat ? (listTraits.xmlName ?? listMember.getMemberName()) : (listValueTraits.xmlName ?? "member")));            }            else {                const listItemNode = XmlNode.of(flat ? (listTraits.xmlName ?? listMember.getMemberName()) : (listValueTraits.xmlName ?? "member"));                this.writeSimpleInto(listValueSchema, value, listItemNode, xmlns);                container.addChildNode(listItemNode);            }        };        if (flat) {            for (const value of array) {                if (sparse || value != null) {                    writeItem(container, value);                }            }        }        else {            const listNode = XmlNode.of(listTraits.xmlName ?? listMember.getMemberName());            if (xmlns) {                listNode.addAttribute(xmlnsAttr, xmlns);            }            for (const value of array) {                if (sparse || value != null) {                    writeItem(listNode, value);                }            }            container.addChildNode(listNode);        }    }    writeMap(mapMember, map, container, parentXmlns, containerIsMap = false) {        if (!mapMember.isMemberSchema()) {            throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${mapMember.getName(true)}`);        }        const mapTraits = mapMember.getMergedTraits();        const mapKeySchema = mapMember.getKeySchema();        const mapKeyTraits = mapKeySchema.getMergedTraits();        const keyTag = mapKeyTraits.xmlName ?? "key";        const mapValueSchema = mapMember.getValueSchema();        const mapValueTraits = mapValueSchema.getMergedTraits();        const valueTag = mapValueTraits.xmlName ?? "value";        const sparse = !!mapValueTraits.sparse;        const flat = !!mapTraits.xmlFlattened;        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(mapMember, parentXmlns);        const addKeyValue = (entry, key, val) => {            const keyNode = XmlNode.of(keyTag, key);            const [keyXmlnsAttr, keyXmlns] = this.getXmlnsAttribute(mapKeySchema, xmlns);            if (keyXmlns) {                keyNode.addAttribute(keyXmlnsAttr, keyXmlns);            }            entry.addChildNode(keyNode);            let valueNode = XmlNode.of(valueTag);            if (mapValueSchema.isListSchema()) {                this.writeList(mapValueSchema, val, valueNode, xmlns);            }            else if (mapValueSchema.isMapSchema()) {                this.writeMap(mapValueSchema, val, valueNode, xmlns, true);            }            else if (mapValueSchema.isStructSchema()) {                valueNode = this.writeStruct(mapValueSchema, val, xmlns);            }            else {                this.writeSimpleInto(mapValueSchema, val, valueNode, xmlns);            }            entry.addChildNode(valueNode);        };        if (flat) {            for (const key in map) {                const val = map[key];                if (sparse || val != null) {                    const entry = XmlNode.of(mapTraits.xmlName ?? mapMember.getMemberName());                    addKeyValue(entry, key, val);                    container.addChildNode(entry);                }            }        }        else {            let mapNode;            if (!containerIsMap) {                mapNode = XmlNode.of(mapTraits.xmlName ?? mapMember.getMemberName());                if (xmlns) {                    mapNode.addAttribute(xmlnsAttr, xmlns);                }                container.addChildNode(mapNode);            }            for (const key in map) {                const val = map[key];                if (sparse || val != null) {                    const entry = XmlNode.of("entry");                    addKeyValue(entry, key, val);                    (containerIsMap ? container : mapNode).addChildNode(entry);                }            }        }    }    writeSimple(_schema, value) {        if (null === value) {            throw new Error("@aws-sdk/core/protocols - (XML serializer) cannot write null value.");        }        const ns = NormalizedSchema.of(_schema);        let nodeContents = null;        if (value && typeof value === "object") {            if (ns.isBlobSchema()) {                nodeContents = (this.serdeContext?.base64Encoder ?? toBase64)(value);            }            else if (ns.isTimestampSchema() && value instanceof Date) {                const format = determineTimestampFormat(ns, this.settings);                switch (format) {                    case 5:                        nodeContents = value.toISOString().replace(".000Z", "Z");                        break;                    case 6:                        nodeContents = dateToUtcString(value);                        break;                    case 7:                        nodeContents = String(value.getTime() / 1000);                        break;                    default:                        console.warn("Missing timestamp format, using http date", value);                        nodeContents = dateToUtcString(value);                        break;                }            }            else if (ns.isBigDecimalSchema() && value) {                if (value instanceof NumericValue) {                    return value.string;                }                return String(value);            }            else if (ns.isMapSchema() || ns.isListSchema()) {                throw new Error("@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead.");            }            else {                throw new Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${ns.getName(true)}`);            }        }        if (ns.isBooleanSchema() || ns.isNumericSchema() || ns.isBigIntegerSchema() || ns.isBigDecimalSchema()) {            nodeContents = String(value);        }        if (ns.isStringSchema()) {            if (value === undefined && ns.isIdempotencyToken()) {                nodeContents = generateIdempotencyToken();            }            else {                nodeContents = String(value);            }        }        if (nodeContents === null) {            throw new Error(`Unhandled schema-value pair ${ns.getName(true)}=${value}`);        }        return nodeContents;    }    writeSimpleInto(_schema, value, into, parentXmlns) {        const nodeContents = this.writeSimple(_schema, value);        const ns = NormalizedSchema.of(_schema);        const content = new XmlText(nodeContents);        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(ns, parentXmlns);        if (xmlns) {            into.addAttribute(xmlnsAttr, xmlns);        }        into.addChildNode(content);    }    getXmlnsAttribute(ns, parentXmlns) {        const traits = ns.getMergedTraits();        const [prefix, xmlns] = traits.xmlNamespace ?? [];        if (xmlns && xmlns !== parentXmlns) {            return [prefix ? `xmlns:${prefix}` : "xmlns", xmlns];        }        return [void 0, void 0];    }} class XmlCodec extends SerdeContextConfig {    settings;    constructor(settings) {        super();        this.settings = settings;    }    createSerializer() {        const serializer = new XmlShapeSerializer(this.settings);        serializer.setSerdeContext(this.serdeContext);        return serializer;    }    createDeserializer() {        const deserializer = new XmlShapeDeserializer(this.settings);        deserializer.setSerdeContext(this.serdeContext);        return deserializer;    }} class AwsRestXmlProtocol extends HttpBindingProtocol {    codec;    serializer;    deserializer;    mixin = new ProtocolLib();    constructor(options) {        super(options);        const settings = {            timestampFormat: {                useTrait: true,                default: 5,            },            httpBindings: true,            xmlNamespace: options.xmlNamespace,            serviceNamespace: options.defaultNamespace,        };        this.codec = new XmlCodec(settings);        this.serializer = new HttpInterceptingShapeSerializer(this.codec.createSerializer(), settings);        this.deserializer = new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(), settings);    }    getPayloadCodec() {        return this.codec;    }    getShapeId() {        return "aws.protocols#restXml";    }    async serializeRequest(operationSchema, input, context) {        const request = await super.serializeRequest(operationSchema, input, context);        const inputSchema = NormalizedSchema.of(operationSchema.input);        if (!request.headers["content-type"]) {            const contentType = this.mixin.resolveRestContentType(this.getDefaultContentType(), inputSchema);            if (contentType) {                request.headers["content-type"] = contentType;            }        }        if (typeof request.body === "string" &&            request.headers["content-type"] === this.getDefaultContentType() &&            !request.body.startsWith("<?xml ") &&            !this.hasUnstructuredPayloadBinding(inputSchema)) {            request.body = '<?xml version="1.0" encoding="UTF-8"?>' + request.body;        }        return request;    }    async deserializeResponse(operationSchema, context, response) {        return super.deserializeResponse(operationSchema, context, response);    }    async handleError(operationSchema, context, response, dataObject, metadata) {        const errorIdentifier = loadRestXmlErrorCode(response, dataObject) ?? "Unknown";        this.mixin.compose(this.compositeErrorRegistry, errorIdentifier, this.options.defaultNamespace);        if (dataObject.Error && typeof dataObject.Error === "object") {            for (const key of Object.keys(dataObject.Error)) {                dataObject[key] = dataObject.Error[key];                if (key.toLowerCase() === "message") {                    dataObject.message = dataObject.Error[key];                }            }        }        if (dataObject.RequestId && !metadata.requestId) {            metadata.requestId = dataObject.RequestId;        }        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata);        const ns = NormalizedSchema.of(errorSchema);        const message = dataObject.Error?.message ??            dataObject.Error?.Message ??            dataObject.message ??            dataObject.Message ??            "UnknownError";        const ErrorCtor = this.compositeErrorRegistry.getErrorCtor(errorSchema) ?? Error;        const exception = new ErrorCtor({});        await this.deserializeHttpMessage(errorSchema, context, response, dataObject);        const output = {};        const errorDeserializer = this.codec.createDeserializer();        for (const [name, member] of ns.structIterator()) {            const target = member.getMergedTraits().xmlName ?? name;            const value = dataObject.Error?.[target] ?? dataObject[target];            output[name] = errorDeserializer.readSchema(member, value);        }        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {            $fault: ns.getMergedTraits().error,            message,        }, output), dataObject);    }    getDefaultContentType() {        return "application/xml";    }    hasUnstructuredPayloadBinding(ns) {        for (const [, member] of ns.structIterator()) {            if (member.getMergedTraits().httpPayload) {                return !(member.isStructSchema() || member.isMapSchema() || member.isListSchema());            }        }        return false;    }} const awsExpectUnion = (value) => {    if (value == null) {        return undefined;    }    if (typeof value === "object" && "__type" in value) {        delete value.__type;    }    return expectUnion(value);}; const _toStr = (val) => {    if (val == null) {        return val;    }    if (typeof val === "number" || typeof val === "bigint") {        const warning = new Error(`Received number ${val} where a string was expected.`);        warning.name = "Warning";        console.warn(warning);        return String(val);    }    if (typeof val === "boolean") {        const warning = new Error(`Received boolean ${val} where a string was expected.`);        warning.name = "Warning";        console.warn(warning);        return String(val);    }    return val;};const _toBool = (val) => {    if (val == null) {        return val;    }    if (typeof val === "string") {        const lowercase = val.toLowerCase();        if (val !== "" && lowercase !== "false" && lowercase !== "true") {            const warning = new Error(`Received string "${val}" where a boolean was expected.`);            warning.name = "Warning";            console.warn(warning);        }        return val !== "" && lowercase !== "false";    }    return val;};const _toNum = (val) => {    if (val == null) {        return val;    }    if (typeof val === "string") {        const num = Number(val);        if (num.toString() !== val) {            const warning = new Error(`Received string "${val}" where a number was expected.`);            warning.name = "Warning";            console.warn(warning);            return val;        }        return num;    }    return val;}; exports.AwsEc2QueryProtocol = AwsEc2QueryProtocol;exports.AwsJson1_0Protocol = AwsJson1_0Protocol;exports.AwsJson1_1Protocol = AwsJson1_1Protocol;exports.AwsJsonRpcProtocol = AwsJsonRpcProtocol;exports.AwsQueryProtocol = AwsQueryProtocol;exports.AwsRestJsonProtocol = AwsRestJsonProtocol;exports.AwsRestXmlProtocol = AwsRestXmlProtocol;exports.AwsSmithyRpcV2CborProtocol = AwsSmithyRpcV2CborProtocol;exports.JsonCodec = JsonCodec;exports.JsonCodec2 = JsonCodec2;exports.JsonShapeDeserializer = JsonShapeDeserializer;exports.JsonShapeDeserializer2 = JsonShapeDeserializer2;exports.JsonShapeSerializer = JsonShapeSerializer;exports.JsonShapeSerializer2 = JsonShapeSerializer2;exports.QueryShapeSerializer = QueryShapeSerializer;exports.XmlCodec = XmlCodec;exports.XmlShapeDeserializer = XmlShapeDeserializer;exports.XmlShapeSerializer = XmlShapeSerializer;exports._toBool = _toBool;exports._toNum = _toNum;exports._toStr = _toStr;exports.awsExpectUnion = awsExpectUnion;exports.loadJsonRpcErrorCode = loadJsonRpcErrorCode;exports.loadRestJsonErrorCode = loadRestJsonErrorCode;exports.loadRestXmlErrorCode = loadRestXmlErrorCode;exports.parseJsonBody = parseJsonBody;exports.parseJsonErrorBody = parseJsonErrorBody;exports.parseXmlBody = parseXmlBody;exports.parseXmlErrorBody = parseXmlErrorBody;