Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
66 lines
2.6 KiB
Text
66 lines
2.6 KiB
Text
import { NormalizedSchema } from "@smithy/core/schema";
|
|
import { _parseEpochTimestamp, _parseRfc3339DateTimeWithOffset, _parseRfc7231DateTime, LazyJsonString, NumericValue, splitHeader, } from "@smithy/core/serde";
|
|
import { fromBase64 } from "@smithy/util-base64";
|
|
import { toUtf8 } from "@smithy/util-utf8";
|
|
import { SerdeContext } from "../SerdeContext";
|
|
import { determineTimestampFormat } from "./determineTimestampFormat";
|
|
export class FromStringShapeDeserializer extends SerdeContext {
|
|
settings;
|
|
constructor(settings) {
|
|
super();
|
|
this.settings = settings;
|
|
}
|
|
read(_schema, data) {
|
|
const ns = NormalizedSchema.of(_schema);
|
|
if (ns.isListSchema()) {
|
|
return splitHeader(data).map((item) => this.read(ns.getValueSchema(), item));
|
|
}
|
|
if (ns.isBlobSchema()) {
|
|
return (this.serdeContext?.base64Decoder ?? fromBase64)(data);
|
|
}
|
|
if (ns.isTimestampSchema()) {
|
|
const format = determineTimestampFormat(ns, this.settings);
|
|
switch (format) {
|
|
case 5:
|
|
return _parseRfc3339DateTimeWithOffset(data);
|
|
case 6:
|
|
return _parseRfc7231DateTime(data);
|
|
case 7:
|
|
return _parseEpochTimestamp(data);
|
|
default:
|
|
console.warn("Missing timestamp format, parsing value with Date constructor:", data);
|
|
return new Date(data);
|
|
}
|
|
}
|
|
if (ns.isStringSchema()) {
|
|
const mediaType = ns.getMergedTraits().mediaType;
|
|
let intermediateValue = data;
|
|
if (mediaType) {
|
|
if (ns.getMergedTraits().httpHeader) {
|
|
intermediateValue = this.base64ToUtf8(intermediateValue);
|
|
}
|
|
const isJson = mediaType === "application/json" || mediaType.endsWith("+json");
|
|
if (isJson) {
|
|
intermediateValue = LazyJsonString.from(intermediateValue);
|
|
}
|
|
return intermediateValue;
|
|
}
|
|
}
|
|
if (ns.isNumericSchema()) {
|
|
return Number(data);
|
|
}
|
|
if (ns.isBigIntegerSchema()) {
|
|
return BigInt(data);
|
|
}
|
|
if (ns.isBigDecimalSchema()) {
|
|
return new NumericValue(data, "bigDecimal");
|
|
}
|
|
if (ns.isBooleanSchema()) {
|
|
return String(data).toLowerCase() === "true";
|
|
}
|
|
return data;
|
|
}
|
|
base64ToUtf8(base64String) {
|
|
return (this.serdeContext?.utf8Encoder ?? toUtf8)((this.serdeContext?.base64Decoder ?? fromBase64)(base64String));
|
|
}
|
|
}
|