115 lines
3.9 KiB
JavaScript
115 lines
3.9 KiB
JavaScript
|
import { constructStack } from "@smithy/middleware-stack";
|
||
|
import { SMITHY_CONTEXT_KEY } from "@smithy/types";
|
||
|
export class Command {
|
||
|
constructor() {
|
||
|
this.middlewareStack = constructStack();
|
||
|
}
|
||
|
static classBuilder() {
|
||
|
return new ClassBuilder();
|
||
|
}
|
||
|
resolveMiddlewareWithContext(clientStack, configuration, options, { middlewareFn, clientName, commandName, inputFilterSensitiveLog, outputFilterSensitiveLog, smithyContext, additionalContext, CommandCtor, }) {
|
||
|
for (const mw of middlewareFn.bind(this)(CommandCtor, clientStack, configuration, options)) {
|
||
|
this.middlewareStack.use(mw);
|
||
|
}
|
||
|
const stack = clientStack.concat(this.middlewareStack);
|
||
|
const { logger } = configuration;
|
||
|
const handlerExecutionContext = {
|
||
|
logger,
|
||
|
clientName,
|
||
|
commandName,
|
||
|
inputFilterSensitiveLog,
|
||
|
outputFilterSensitiveLog,
|
||
|
[SMITHY_CONTEXT_KEY]: {
|
||
|
...smithyContext,
|
||
|
},
|
||
|
...additionalContext,
|
||
|
};
|
||
|
const { requestHandler } = configuration;
|
||
|
return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
|
||
|
}
|
||
|
}
|
||
|
class ClassBuilder {
|
||
|
constructor() {
|
||
|
this._init = () => { };
|
||
|
this._ep = {};
|
||
|
this._middlewareFn = () => [];
|
||
|
this._commandName = "";
|
||
|
this._clientName = "";
|
||
|
this._additionalContext = {};
|
||
|
this._smithyContext = {};
|
||
|
this._inputFilterSensitiveLog = (_) => _;
|
||
|
this._outputFilterSensitiveLog = (_) => _;
|
||
|
this._serializer = null;
|
||
|
this._deserializer = null;
|
||
|
}
|
||
|
init(cb) {
|
||
|
this._init = cb;
|
||
|
}
|
||
|
ep(endpointParameterInstructions) {
|
||
|
this._ep = endpointParameterInstructions;
|
||
|
return this;
|
||
|
}
|
||
|
m(middlewareSupplier) {
|
||
|
this._middlewareFn = middlewareSupplier;
|
||
|
return this;
|
||
|
}
|
||
|
s(service, operation, smithyContext = {}) {
|
||
|
this._smithyContext = {
|
||
|
service,
|
||
|
operation,
|
||
|
...smithyContext,
|
||
|
};
|
||
|
return this;
|
||
|
}
|
||
|
c(additionalContext = {}) {
|
||
|
this._additionalContext = additionalContext;
|
||
|
return this;
|
||
|
}
|
||
|
n(clientName, commandName) {
|
||
|
this._clientName = clientName;
|
||
|
this._commandName = commandName;
|
||
|
return this;
|
||
|
}
|
||
|
f(inputFilter = (_) => _, outputFilter = (_) => _) {
|
||
|
this._inputFilterSensitiveLog = inputFilter;
|
||
|
this._outputFilterSensitiveLog = outputFilter;
|
||
|
return this;
|
||
|
}
|
||
|
ser(serializer) {
|
||
|
this._serializer = serializer;
|
||
|
return this;
|
||
|
}
|
||
|
de(deserializer) {
|
||
|
this._deserializer = deserializer;
|
||
|
return this;
|
||
|
}
|
||
|
build() {
|
||
|
const closure = this;
|
||
|
let CommandRef;
|
||
|
return (CommandRef = class extends Command {
|
||
|
static getEndpointParameterInstructions() {
|
||
|
return closure._ep;
|
||
|
}
|
||
|
constructor(...[input]) {
|
||
|
super();
|
||
|
this.serialize = closure._serializer;
|
||
|
this.deserialize = closure._deserializer;
|
||
|
this.input = input ?? {};
|
||
|
closure._init(this);
|
||
|
}
|
||
|
resolveMiddleware(stack, configuration, options) {
|
||
|
return this.resolveMiddlewareWithContext(stack, configuration, options, {
|
||
|
CommandCtor: CommandRef,
|
||
|
middlewareFn: closure._middlewareFn,
|
||
|
clientName: closure._clientName,
|
||
|
commandName: closure._commandName,
|
||
|
inputFilterSensitiveLog: closure._inputFilterSensitiveLog,
|
||
|
outputFilterSensitiveLog: closure._outputFilterSensitiveLog,
|
||
|
smithyContext: closure._smithyContext,
|
||
|
additionalContext: closure._additionalContext,
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|