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>
258 lines
8.3 KiB
Text
258 lines
8.3 KiB
Text
import { deref } from "../deref";
|
|
import { translateTraits } from "./translateTraits";
|
|
export class NormalizedSchema {
|
|
ref;
|
|
memberName;
|
|
static symbol = Symbol.for("@smithy/nor");
|
|
symbol = NormalizedSchema.symbol;
|
|
name;
|
|
schema;
|
|
_isMemberSchema;
|
|
traits;
|
|
memberTraits;
|
|
normalizedTraits;
|
|
constructor(ref, memberName) {
|
|
this.ref = ref;
|
|
this.memberName = memberName;
|
|
const traitStack = [];
|
|
let _ref = ref;
|
|
let schema = ref;
|
|
this._isMemberSchema = false;
|
|
while (isMemberSchema(_ref)) {
|
|
traitStack.push(_ref[1]);
|
|
_ref = _ref[0];
|
|
schema = deref(_ref);
|
|
this._isMemberSchema = true;
|
|
}
|
|
if (traitStack.length > 0) {
|
|
this.memberTraits = {};
|
|
for (let i = traitStack.length - 1; i >= 0; --i) {
|
|
const traitSet = traitStack[i];
|
|
Object.assign(this.memberTraits, translateTraits(traitSet));
|
|
}
|
|
}
|
|
else {
|
|
this.memberTraits = 0;
|
|
}
|
|
if (schema instanceof NormalizedSchema) {
|
|
const computedMemberTraits = this.memberTraits;
|
|
Object.assign(this, schema);
|
|
this.memberTraits = Object.assign({}, computedMemberTraits, schema.getMemberTraits(), this.getMemberTraits());
|
|
this.normalizedTraits = void 0;
|
|
this.memberName = memberName ?? schema.memberName;
|
|
return;
|
|
}
|
|
this.schema = deref(schema);
|
|
if (isStaticSchema(this.schema)) {
|
|
this.name = `${this.schema[1]}#${this.schema[2]}`;
|
|
this.traits = this.schema[3];
|
|
}
|
|
else {
|
|
this.name = this.memberName ?? String(schema);
|
|
this.traits = 0;
|
|
}
|
|
if (this._isMemberSchema && !memberName) {
|
|
throw new Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(true)} missing member name.`);
|
|
}
|
|
}
|
|
static [Symbol.hasInstance](lhs) {
|
|
const isPrototype = this.prototype.isPrototypeOf(lhs);
|
|
if (!isPrototype && typeof lhs === "object" && lhs !== null) {
|
|
const ns = lhs;
|
|
return ns.symbol === this.symbol;
|
|
}
|
|
return isPrototype;
|
|
}
|
|
static of(ref) {
|
|
const sc = deref(ref);
|
|
if (sc instanceof NormalizedSchema) {
|
|
return sc;
|
|
}
|
|
if (isMemberSchema(sc)) {
|
|
const [ns, traits] = sc;
|
|
if (ns instanceof NormalizedSchema) {
|
|
Object.assign(ns.getMergedTraits(), translateTraits(traits));
|
|
return ns;
|
|
}
|
|
throw new Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(ref, null, 2)}.`);
|
|
}
|
|
return new NormalizedSchema(sc);
|
|
}
|
|
getSchema() {
|
|
const sc = this.schema;
|
|
if (sc[0] === 0) {
|
|
return sc[4];
|
|
}
|
|
return sc;
|
|
}
|
|
getName(withNamespace = false) {
|
|
const { name } = this;
|
|
const short = !withNamespace && name && name.includes("#");
|
|
return short ? name.split("#")[1] : name || undefined;
|
|
}
|
|
getMemberName() {
|
|
return this.memberName;
|
|
}
|
|
isMemberSchema() {
|
|
return this._isMemberSchema;
|
|
}
|
|
isListSchema() {
|
|
const sc = this.getSchema();
|
|
return typeof sc === "number"
|
|
? sc >= 64 && sc < 128
|
|
: sc[0] === 1;
|
|
}
|
|
isMapSchema() {
|
|
const sc = this.getSchema();
|
|
return typeof sc === "number"
|
|
? sc >= 128 && sc <= 0b1111_1111
|
|
: sc[0] === 2;
|
|
}
|
|
isStructSchema() {
|
|
const sc = this.getSchema();
|
|
const id = sc[0];
|
|
return (id === 3 ||
|
|
id === -3 ||
|
|
id === 4);
|
|
}
|
|
isUnionSchema() {
|
|
const sc = this.getSchema();
|
|
return sc[0] === 4;
|
|
}
|
|
isBlobSchema() {
|
|
const sc = this.getSchema();
|
|
return sc === 21 || sc === 42;
|
|
}
|
|
isTimestampSchema() {
|
|
const sc = this.getSchema();
|
|
return (typeof sc === "number" &&
|
|
sc >= 4 &&
|
|
sc <= 7);
|
|
}
|
|
isUnitSchema() {
|
|
return this.getSchema() === "unit";
|
|
}
|
|
isDocumentSchema() {
|
|
return this.getSchema() === 15;
|
|
}
|
|
isStringSchema() {
|
|
return this.getSchema() === 0;
|
|
}
|
|
isBooleanSchema() {
|
|
return this.getSchema() === 2;
|
|
}
|
|
isNumericSchema() {
|
|
return this.getSchema() === 1;
|
|
}
|
|
isBigIntegerSchema() {
|
|
return this.getSchema() === 17;
|
|
}
|
|
isBigDecimalSchema() {
|
|
return this.getSchema() === 19;
|
|
}
|
|
isStreaming() {
|
|
const { streaming } = this.getMergedTraits();
|
|
return !!streaming || this.getSchema() === 42;
|
|
}
|
|
isIdempotencyToken() {
|
|
const match = (traits) => (traits & 0b0100) === 0b0100 ||
|
|
!!traits?.idempotencyToken;
|
|
const { normalizedTraits, traits, memberTraits } = this;
|
|
return match(normalizedTraits) || match(traits) || match(memberTraits);
|
|
}
|
|
getMergedTraits() {
|
|
return (this.normalizedTraits ??
|
|
(this.normalizedTraits = {
|
|
...this.getOwnTraits(),
|
|
...this.getMemberTraits(),
|
|
}));
|
|
}
|
|
getMemberTraits() {
|
|
return translateTraits(this.memberTraits);
|
|
}
|
|
getOwnTraits() {
|
|
return translateTraits(this.traits);
|
|
}
|
|
getKeySchema() {
|
|
const [isDoc, isMap] = [this.isDocumentSchema(), this.isMapSchema()];
|
|
if (!isDoc && !isMap) {
|
|
throw new Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(true)}`);
|
|
}
|
|
const schema = this.getSchema();
|
|
const memberSchema = isDoc
|
|
? 15
|
|
: schema[4] ?? 0;
|
|
return member([memberSchema, 0], "key");
|
|
}
|
|
getValueSchema() {
|
|
const sc = this.getSchema();
|
|
const [isDoc, isMap, isList] = [this.isDocumentSchema(), this.isMapSchema(), this.isListSchema()];
|
|
const memberSchema = typeof sc === "number"
|
|
? 0b0011_1111 & sc
|
|
: sc && typeof sc === "object" && (isMap || isList)
|
|
? sc[3 + sc[0]]
|
|
: isDoc
|
|
? 15
|
|
: void 0;
|
|
if (memberSchema != null) {
|
|
return member([memberSchema, 0], isMap ? "value" : "member");
|
|
}
|
|
throw new Error(`@smithy/core/schema - ${this.getName(true)} has no value member.`);
|
|
}
|
|
getMemberSchema(memberName) {
|
|
const struct = this.getSchema();
|
|
if (this.isStructSchema() && struct[4].includes(memberName)) {
|
|
const i = struct[4].indexOf(memberName);
|
|
const memberSchema = struct[5][i];
|
|
return member(isMemberSchema(memberSchema) ? memberSchema : [memberSchema, 0], memberName);
|
|
}
|
|
if (this.isDocumentSchema()) {
|
|
return member([15, 0], memberName);
|
|
}
|
|
throw new Error(`@smithy/core/schema - ${this.getName(true)} has no no member=${memberName}.`);
|
|
}
|
|
getMemberSchemas() {
|
|
const buffer = {};
|
|
try {
|
|
for (const [k, v] of this.structIterator()) {
|
|
buffer[k] = v;
|
|
}
|
|
}
|
|
catch (ignored) { }
|
|
return buffer;
|
|
}
|
|
getEventStreamMember() {
|
|
if (this.isStructSchema()) {
|
|
for (const [memberName, memberSchema] of this.structIterator()) {
|
|
if (memberSchema.isStreaming() && memberSchema.isStructSchema()) {
|
|
return memberName;
|
|
}
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
*structIterator() {
|
|
if (this.isUnitSchema()) {
|
|
return;
|
|
}
|
|
if (!this.isStructSchema()) {
|
|
throw new Error("@smithy/core/schema - cannot iterate non-struct schema.");
|
|
}
|
|
const struct = this.getSchema();
|
|
for (let i = 0; i < struct[4].length; ++i) {
|
|
yield [struct[4][i], member([struct[5][i], 0], struct[4][i])];
|
|
}
|
|
}
|
|
}
|
|
function member(memberSchema, memberName) {
|
|
if (memberSchema instanceof NormalizedSchema) {
|
|
return Object.assign(memberSchema, {
|
|
memberName,
|
|
_isMemberSchema: true,
|
|
});
|
|
}
|
|
const internalCtorAccess = NormalizedSchema;
|
|
return new internalCtorAccess(memberSchema, memberName);
|
|
}
|
|
const isMemberSchema = (sc) => Array.isArray(sc) && sc.length === 2;
|
|
export const isStaticSchema = (sc) => Array.isArray(sc) && sc.length >= 5;
|