@rvoh/dream 0.36.0 → 0.36.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/serializer/decorators/attribute.js +22 -6
- package/dist/cjs/src/serializer/index.js +47 -48
- package/dist/esm/src/serializer/decorators/attribute.js +23 -7
- package/dist/esm/src/serializer/index.js +47 -48
- package/dist/types/src/serializer/decorators/attribute.d.ts +2 -2
- package/dist/types/src/serializer/index.d.ts +0 -2
- package/dist/types/src/types/openapi.d.ts +2 -2
- package/docs/classes/Benchmark.html +2 -2
- package/docs/classes/CalendarDate.html +2 -2
- package/docs/classes/CreateOrFindByFailedToCreateAndFind.html +3 -3
- package/docs/classes/Decorators.html +19 -19
- package/docs/classes/Dream.html +126 -126
- package/docs/classes/DreamApplication.html +4 -4
- package/docs/classes/DreamBin.html +2 -2
- package/docs/classes/DreamCLI.html +4 -4
- package/docs/classes/DreamImporter.html +2 -2
- package/docs/classes/DreamLogos.html +2 -2
- package/docs/classes/DreamMigrationHelpers.html +7 -7
- package/docs/classes/DreamSerializer.html +2 -2
- package/docs/classes/DreamTransaction.html +2 -2
- package/docs/classes/Encrypt.html +2 -2
- package/docs/classes/Env.html +2 -2
- package/docs/classes/GlobalNameNotSet.html +3 -3
- package/docs/classes/NonLoadedAssociation.html +3 -3
- package/docs/classes/Query.html +50 -50
- package/docs/classes/Range.html +2 -2
- package/docs/classes/RecordNotFound.html +3 -3
- package/docs/classes/ValidationError.html +3 -3
- package/docs/functions/Attribute.html +1 -1
- package/docs/functions/RendersMany.html +1 -1
- package/docs/functions/RendersOne.html +1 -1
- package/docs/functions/ReplicaSafe.html +1 -1
- package/docs/functions/STI.html +1 -1
- package/docs/functions/SoftDelete.html +1 -1
- package/docs/functions/camelize.html +1 -1
- package/docs/functions/capitalize.html +1 -1
- package/docs/functions/closeAllDbConnections.html +1 -1
- package/docs/functions/compact.html +1 -1
- package/docs/functions/debug.html +1 -1
- package/docs/functions/dreamDbConnections.html +1 -1
- package/docs/functions/dreamPath.html +1 -1
- package/docs/functions/generateDream.html +1 -1
- package/docs/functions/globalClassNameFromFullyQualifiedModelName.html +1 -1
- package/docs/functions/hyphenize.html +1 -1
- package/docs/functions/inferSerializerFromDreamClassOrViewModelClass.html +1 -1
- package/docs/functions/inferSerializerFromDreamOrViewModel.html +1 -1
- package/docs/functions/isEmpty.html +1 -1
- package/docs/functions/loadRepl.html +1 -1
- package/docs/functions/lookupClassByGlobalName.html +1 -1
- package/docs/functions/pascalize.html +1 -1
- package/docs/functions/pgErrorType.html +1 -1
- package/docs/functions/range-1.html +1 -1
- package/docs/functions/relativeDreamPath.html +1 -1
- package/docs/functions/round.html +1 -1
- package/docs/functions/serializerNameFromFullyQualifiedModelName.html +1 -1
- package/docs/functions/sharedPathPrefix.html +1 -1
- package/docs/functions/snakeify.html +1 -1
- package/docs/functions/sort.html +1 -1
- package/docs/functions/sortBy.html +1 -1
- package/docs/functions/standardizeFullyQualifiedModelName.html +1 -1
- package/docs/functions/uncapitalize.html +1 -1
- package/docs/functions/uniq.html +1 -1
- package/docs/functions/untypedDb.html +1 -1
- package/docs/functions/validateColumn.html +1 -1
- package/docs/functions/validateTable.html +1 -1
- package/docs/interfaces/AttributeStatement.html +2 -2
- package/docs/interfaces/DecoratorContext.html +2 -2
- package/docs/interfaces/DreamApplicationInitOptions.html +2 -2
- package/docs/interfaces/DreamApplicationOpts.html +2 -2
- package/docs/interfaces/DreamSerializerAssociationStatement.html +2 -2
- package/docs/interfaces/EncryptOptions.html +2 -2
- package/docs/interfaces/OpenapiSchemaProperties.html +1 -1
- package/docs/interfaces/OpenapiSchemaPropertiesShorthand.html +1 -1
- package/docs/interfaces/OpenapiTypeFieldObject.html +1 -1
- package/docs/types/Camelized.html +1 -1
- package/docs/types/CommonOpenapiSchemaObjectFields.html +1 -1
- package/docs/types/DateTime.html +1 -1
- package/docs/types/DbConnectionType.html +1 -1
- package/docs/types/DreamAssociationMetadata.html +1 -1
- package/docs/types/DreamAttributes.html +1 -1
- package/docs/types/DreamClassColumn.html +1 -1
- package/docs/types/DreamColumn.html +1 -1
- package/docs/types/DreamColumnNames.html +1 -1
- package/docs/types/DreamLogLevel.html +1 -1
- package/docs/types/DreamLogger.html +1 -1
- package/docs/types/DreamOrViewModelSerializerKey.html +1 -1
- package/docs/types/DreamParamSafeAttributes.html +1 -1
- package/docs/types/DreamParamSafeColumnNames.html +1 -1
- package/docs/types/DreamSerializerKey.html +1 -1
- package/docs/types/DreamSerializers.html +1 -1
- package/docs/types/DreamTableSchema.html +1 -1
- package/docs/types/DreamVirtualColumns.html +1 -1
- package/docs/types/EncryptAlgorithm.html +1 -1
- package/docs/types/Hyphenized.html +1 -1
- package/docs/types/IdType.html +1 -1
- package/docs/types/OpenapiAllTypes.html +1 -1
- package/docs/types/OpenapiFormats.html +1 -1
- package/docs/types/OpenapiNumberFormats.html +1 -1
- package/docs/types/OpenapiPrimitiveTypes.html +1 -1
- package/docs/types/OpenapiSchemaArray.html +1 -1
- package/docs/types/OpenapiSchemaArrayShorthand.html +1 -1
- package/docs/types/OpenapiSchemaBase.html +1 -1
- package/docs/types/OpenapiSchemaBody.html +1 -1
- package/docs/types/OpenapiSchemaBodyShorthand.html +1 -1
- package/docs/types/OpenapiSchemaCommonFields.html +1 -1
- package/docs/types/OpenapiSchemaExpressionAllOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionOneOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionRef.html +1 -1
- package/docs/types/OpenapiSchemaExpressionRefSchemaShorthand.html +1 -1
- package/docs/types/OpenapiSchemaInteger.html +1 -1
- package/docs/types/OpenapiSchemaNull.html +1 -1
- package/docs/types/OpenapiSchemaNumber.html +1 -1
- package/docs/types/OpenapiSchemaObject.html +1 -1
- package/docs/types/OpenapiSchemaObjectAllOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectAllOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectAnyOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectBase.html +1 -1
- package/docs/types/OpenapiSchemaObjectBaseShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectOneOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectOneOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectShorthand.html +1 -1
- package/docs/types/OpenapiSchemaPrimitiveGeneric.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionAllOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionOneOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionSerializableRef.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionSerializerRef.html +1 -1
- package/docs/types/OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
- package/docs/types/OpenapiSchemaString.html +1 -1
- package/docs/types/OpenapiShorthandAllTypes.html +1 -1
- package/docs/types/OpenapiShorthandPrimitiveTypes.html +1 -1
- package/docs/types/OpenapiTypeField.html +1 -1
- package/docs/types/Pascalized.html +1 -1
- package/docs/types/PrimaryKeyType.html +1 -1
- package/docs/types/RoundingPrecision.html +1 -1
- package/docs/types/SerializableClassOrSerializerCallback.html +1 -1
- package/docs/types/SerializableDreamClassOrViewModelClass.html +1 -1
- package/docs/types/SerializableDreamOrViewModel.html +1 -1
- package/docs/types/SerializableTypes.html +1 -1
- package/docs/types/Snakeified.html +1 -1
- package/docs/types/Timestamp.html +1 -1
- package/docs/types/UpdateableAssociationProperties.html +1 -1
- package/docs/types/UpdateableProperties.html +1 -1
- package/docs/types/ValidationType.html +1 -1
- package/docs/types/ViewModelSerializerKey.html +1 -1
- package/docs/types/WhereStatementForDream.html +1 -1
- package/docs/types/WhereStatementForDreamClass.html +1 -1
- package/docs/variables/DateTime-1.html +1 -1
- package/docs/variables/DreamConst.html +1 -1
- package/docs/variables/TRIGRAM_OPERATORS.html +1 -1
- package/docs/variables/openapiPrimitiveTypes-1.html +1 -1
- package/docs/variables/openapiShorthandPrimitiveTypes-1.html +1 -1
- package/docs/variables/ops.html +1 -1
- package/docs/variables/primaryKeyTypes.html +1 -1
- package/package.json +1 -1
|
@@ -97,17 +97,21 @@ function Attribute(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions, ope
|
|
|
97
97
|
...(0, dreamAttributeOpenapiShape_js_1.dreamAttributeOpenapiShape)(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions, key),
|
|
98
98
|
...openApiOptions,
|
|
99
99
|
};
|
|
100
|
+
renderAs = openApiShape.format || maybeNullPrimitiveToPrimitive(openApiShape?.type);
|
|
100
101
|
//
|
|
101
102
|
}
|
|
102
|
-
else if ((0, typechecks_js_1.isString)(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
else if ((0, typechecks_js_1.isString)(maybeNullPrimitiveToPrimitive(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions))) {
|
|
104
|
+
openApiShape = {
|
|
105
|
+
type: dreamClass_or_shorthandAttribute_or_manualOpenapiOptions,
|
|
106
|
+
...openApiOptions,
|
|
107
|
+
};
|
|
108
|
+
renderAs = maybeNullPrimitiveToPrimitive(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions);
|
|
106
109
|
//
|
|
107
110
|
}
|
|
108
|
-
else if (
|
|
111
|
+
else if ((0, typechecks_js_1.isObject)(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions)) {
|
|
109
112
|
openApiShape = dreamClass_or_shorthandAttribute_or_manualOpenapiOptions;
|
|
110
|
-
renderAs = openApiShape;
|
|
113
|
+
renderAs = openApiShape.format || maybeNullPrimitiveToPrimitive(openApiShape?.type);
|
|
114
|
+
//
|
|
111
115
|
}
|
|
112
116
|
else if (dreamClass_or_shorthandAttribute_or_manualOpenapiOptions === undefined) {
|
|
113
117
|
// no-op
|
|
@@ -132,6 +136,18 @@ Attribute: ${key}
|
|
|
132
136
|
});
|
|
133
137
|
};
|
|
134
138
|
}
|
|
139
|
+
function maybeNullPrimitiveToPrimitive(openapiType) {
|
|
140
|
+
if (Array.isArray(openapiType)) {
|
|
141
|
+
if (openapiType[1] === 'null')
|
|
142
|
+
return openapiType[0];
|
|
143
|
+
if (openapiType[0] === 'null')
|
|
144
|
+
return openapiType[1];
|
|
145
|
+
throw new Error(`Expected array with 'null' and an OpenAPI primitive string: ${JSON.stringify(openapiType)}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
return openapiType;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
135
151
|
function openApiAndRenderOptionsToSeparateOptions(openApiAndRenderOptions) {
|
|
136
152
|
let openApiOptions;
|
|
137
153
|
let renderOptions;
|
|
@@ -5,6 +5,7 @@ const constants_js_1 = require("../dream/constants.js");
|
|
|
5
5
|
const GlobalNameNotSet_js_1 = require("../errors/dream-application/GlobalNameNotSet.js");
|
|
6
6
|
const MissingSerializersDefinition_js_1 = require("../errors/MissingSerializersDefinition.js");
|
|
7
7
|
const FailedToRenderThroughAssociationForSerializer_js_1 = require("../errors/serializers/FailedToRenderThroughAssociationForSerializer.js");
|
|
8
|
+
const CalendarDate_js_1 = require("../helpers/CalendarDate.js");
|
|
8
9
|
const camelize_js_1 = require("../helpers/camelize.js");
|
|
9
10
|
const compact_js_1 = require("../helpers/compact.js");
|
|
10
11
|
const DateTime_js_1 = require("../helpers/DateTime.js");
|
|
@@ -145,29 +146,34 @@ class DreamSerializer {
|
|
|
145
146
|
const fieldWithCasing = this.applyCasingToField(field);
|
|
146
147
|
let dateValue;
|
|
147
148
|
let decimalValue;
|
|
148
|
-
switch (
|
|
149
|
+
switch (renderAs) {
|
|
149
150
|
case 'date':
|
|
151
|
+
case 'date[]':
|
|
150
152
|
dateValue = this.getAttributeValue(attributeStatement);
|
|
151
|
-
returnObj[fieldWithCasing] = dateValue
|
|
153
|
+
returnObj[fieldWithCasing] = Array.isArray(dateValue)
|
|
154
|
+
? dateValue?.map(date => unknownTypeToIsoDateString(date))
|
|
155
|
+
: unknownTypeToIsoDateString(dateValue);
|
|
152
156
|
break;
|
|
153
157
|
case 'date-time':
|
|
158
|
+
case 'date-time[]':
|
|
154
159
|
dateValue = this.getAttributeValue(attributeStatement);
|
|
155
|
-
returnObj[fieldWithCasing] = dateValue
|
|
156
|
-
?
|
|
157
|
-
:
|
|
160
|
+
returnObj[fieldWithCasing] = Array.isArray(dateValue)
|
|
161
|
+
? dateValue?.map(date => unknownTypeToIsoDatetimeString(date))
|
|
162
|
+
: unknownTypeToIsoDatetimeString(dateValue);
|
|
158
163
|
break;
|
|
159
164
|
case 'decimal':
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
? decimalValue
|
|
166
|
-
: (0, round_js_1.default)(decimalValue, renderOptions?.precision);
|
|
165
|
+
case 'decimal[]':
|
|
166
|
+
decimalValue = this.getAttributeValue(attributeStatement);
|
|
167
|
+
returnObj[fieldWithCasing] = Array.isArray(decimalValue)
|
|
168
|
+
? decimalValue?.map(date => unknownTypeToDecimal(date, renderOptions?.precision))
|
|
169
|
+
: unknownTypeToDecimal(decimalValue, renderOptions?.precision);
|
|
167
170
|
break;
|
|
168
171
|
case 'integer':
|
|
169
|
-
|
|
170
|
-
|
|
172
|
+
case 'integer[]':
|
|
173
|
+
decimalValue = this.getAttributeValue(attributeStatement);
|
|
174
|
+
returnObj[fieldWithCasing] = Array.isArray(decimalValue)
|
|
175
|
+
? decimalValue?.map(date => unknownTypeToDecimal(date, 0))
|
|
176
|
+
: unknownTypeToDecimal(decimalValue, 0);
|
|
171
177
|
break;
|
|
172
178
|
default:
|
|
173
179
|
returnObj[fieldWithCasing] = this.getAttributeValue(attributeStatement);
|
|
@@ -176,40 +182,6 @@ class DreamSerializer {
|
|
|
176
182
|
});
|
|
177
183
|
return returnObj;
|
|
178
184
|
}
|
|
179
|
-
numberOrStringToNumber(num) {
|
|
180
|
-
if (num === undefined)
|
|
181
|
-
return null;
|
|
182
|
-
if (num === null)
|
|
183
|
-
return null;
|
|
184
|
-
if (typeof num === 'number')
|
|
185
|
-
return num;
|
|
186
|
-
return Number(num);
|
|
187
|
-
}
|
|
188
|
-
computedRenderAs(renderAs) {
|
|
189
|
-
if (typeof renderAs === 'object') {
|
|
190
|
-
const safeRenderAs = renderAs;
|
|
191
|
-
let openApiType = safeRenderAs.type;
|
|
192
|
-
if (Array.isArray(openApiType)) {
|
|
193
|
-
if (openApiType[1] === 'null') {
|
|
194
|
-
openApiType = openApiType[0];
|
|
195
|
-
}
|
|
196
|
-
else if (openApiType[0] === 'null') {
|
|
197
|
-
openApiType = openApiType[1];
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
throw new Error(`Expected array with 'null' and an OpenAPI primitive string: ${JSON.stringify(openApiType)}`);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
if (openApiType === 'string' || openApiType === 'number') {
|
|
204
|
-
if (safeRenderAs.format)
|
|
205
|
-
return safeRenderAs.format;
|
|
206
|
-
return openApiType;
|
|
207
|
-
}
|
|
208
|
-
if (openApiType)
|
|
209
|
-
return openApiType;
|
|
210
|
-
}
|
|
211
|
-
return renderAs;
|
|
212
|
-
}
|
|
213
185
|
applyAssociation(associationStatement) {
|
|
214
186
|
const associatedData = this.associatedData(associationStatement);
|
|
215
187
|
if (associationStatement.type === 'RendersMany' && Array.isArray(associatedData))
|
|
@@ -281,3 +253,30 @@ class DreamSerializer {
|
|
|
281
253
|
}
|
|
282
254
|
}
|
|
283
255
|
exports.default = DreamSerializer;
|
|
256
|
+
function unknownTypeToIsoDateString(dateTime) {
|
|
257
|
+
if (dateTime instanceof CalendarDate_js_1.default || dateTime instanceof DateTime_js_1.DateTime)
|
|
258
|
+
return dateTime.toISODate();
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
function unknownTypeToIsoDatetimeString(dateTime) {
|
|
262
|
+
if (dateTime instanceof CalendarDate_js_1.default)
|
|
263
|
+
return DateTime_js_1.DateTime.fromISO(dateTime.toISO()).toISO();
|
|
264
|
+
if (dateTime instanceof DateTime_js_1.DateTime)
|
|
265
|
+
return dateTime.toISO();
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
function numberOrStringToNumber(num) {
|
|
269
|
+
if (num === undefined)
|
|
270
|
+
return null;
|
|
271
|
+
if (num === null)
|
|
272
|
+
return null;
|
|
273
|
+
if (typeof num === 'number')
|
|
274
|
+
return num;
|
|
275
|
+
return Number(num);
|
|
276
|
+
}
|
|
277
|
+
function unknownTypeToDecimal(decimalOrString, precision) {
|
|
278
|
+
const decimalValue = numberOrStringToNumber(decimalOrString);
|
|
279
|
+
if (decimalValue === null)
|
|
280
|
+
return null;
|
|
281
|
+
return precision === undefined ? decimalValue : (0, round_js_1.default)(decimalValue, precision);
|
|
282
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isString } from '../../helpers/typechecks.js';
|
|
1
|
+
import { isObject, isString } from '../../helpers/typechecks.js';
|
|
2
2
|
import { dreamAttributeOpenapiShape } from './helpers/dreamAttributeOpenapiShape.js';
|
|
3
3
|
/*
|
|
4
4
|
* Used to indicate which properties or methods on a
|
|
@@ -94,17 +94,21 @@ export default function Attribute(dreamClass_or_shorthandAttribute_or_manualOpen
|
|
|
94
94
|
...dreamAttributeOpenapiShape(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions, key),
|
|
95
95
|
...openApiOptions,
|
|
96
96
|
};
|
|
97
|
+
renderAs = openApiShape.format || maybeNullPrimitiveToPrimitive(openApiShape?.type);
|
|
97
98
|
//
|
|
98
99
|
}
|
|
99
|
-
else if (isString(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
else if (isString(maybeNullPrimitiveToPrimitive(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions))) {
|
|
101
|
+
openApiShape = {
|
|
102
|
+
type: dreamClass_or_shorthandAttribute_or_manualOpenapiOptions,
|
|
103
|
+
...openApiOptions,
|
|
104
|
+
};
|
|
105
|
+
renderAs = maybeNullPrimitiveToPrimitive(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions);
|
|
103
106
|
//
|
|
104
107
|
}
|
|
105
|
-
else if (
|
|
108
|
+
else if (isObject(dreamClass_or_shorthandAttribute_or_manualOpenapiOptions)) {
|
|
106
109
|
openApiShape = dreamClass_or_shorthandAttribute_or_manualOpenapiOptions;
|
|
107
|
-
renderAs = openApiShape;
|
|
110
|
+
renderAs = openApiShape.format || maybeNullPrimitiveToPrimitive(openApiShape?.type);
|
|
111
|
+
//
|
|
108
112
|
}
|
|
109
113
|
else if (dreamClass_or_shorthandAttribute_or_manualOpenapiOptions === undefined) {
|
|
110
114
|
// no-op
|
|
@@ -129,6 +133,18 @@ Attribute: ${key}
|
|
|
129
133
|
});
|
|
130
134
|
};
|
|
131
135
|
}
|
|
136
|
+
function maybeNullPrimitiveToPrimitive(openapiType) {
|
|
137
|
+
if (Array.isArray(openapiType)) {
|
|
138
|
+
if (openapiType[1] === 'null')
|
|
139
|
+
return openapiType[0];
|
|
140
|
+
if (openapiType[0] === 'null')
|
|
141
|
+
return openapiType[1];
|
|
142
|
+
throw new Error(`Expected array with 'null' and an OpenAPI primitive string: ${JSON.stringify(openapiType)}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return openapiType;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
132
148
|
function openApiAndRenderOptionsToSeparateOptions(openApiAndRenderOptions) {
|
|
133
149
|
let openApiOptions;
|
|
134
150
|
let renderOptions;
|
|
@@ -3,6 +3,7 @@ import { DreamConst } from '../dream/constants.js';
|
|
|
3
3
|
import GlobalNameNotSet from '../errors/dream-application/GlobalNameNotSet.js';
|
|
4
4
|
import MissingSerializer from '../errors/MissingSerializersDefinition.js';
|
|
5
5
|
import FailedToRenderThroughAssociationForSerializer from '../errors/serializers/FailedToRenderThroughAssociationForSerializer.js';
|
|
6
|
+
import CalendarDate from '../helpers/CalendarDate.js';
|
|
6
7
|
import camelize from '../helpers/camelize.js';
|
|
7
8
|
import compact from '../helpers/compact.js';
|
|
8
9
|
import { DateTime } from '../helpers/DateTime.js';
|
|
@@ -143,29 +144,34 @@ export default class DreamSerializer {
|
|
|
143
144
|
const fieldWithCasing = this.applyCasingToField(field);
|
|
144
145
|
let dateValue;
|
|
145
146
|
let decimalValue;
|
|
146
|
-
switch (
|
|
147
|
+
switch (renderAs) {
|
|
147
148
|
case 'date':
|
|
149
|
+
case 'date[]':
|
|
148
150
|
dateValue = this.getAttributeValue(attributeStatement);
|
|
149
|
-
returnObj[fieldWithCasing] = dateValue
|
|
151
|
+
returnObj[fieldWithCasing] = Array.isArray(dateValue)
|
|
152
|
+
? dateValue?.map(date => unknownTypeToIsoDateString(date))
|
|
153
|
+
: unknownTypeToIsoDateString(dateValue);
|
|
150
154
|
break;
|
|
151
155
|
case 'date-time':
|
|
156
|
+
case 'date-time[]':
|
|
152
157
|
dateValue = this.getAttributeValue(attributeStatement);
|
|
153
|
-
returnObj[fieldWithCasing] = dateValue
|
|
154
|
-
?
|
|
155
|
-
:
|
|
158
|
+
returnObj[fieldWithCasing] = Array.isArray(dateValue)
|
|
159
|
+
? dateValue?.map(date => unknownTypeToIsoDatetimeString(date))
|
|
160
|
+
: unknownTypeToIsoDatetimeString(dateValue);
|
|
156
161
|
break;
|
|
157
162
|
case 'decimal':
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
? decimalValue
|
|
164
|
-
: round(decimalValue, renderOptions?.precision);
|
|
163
|
+
case 'decimal[]':
|
|
164
|
+
decimalValue = this.getAttributeValue(attributeStatement);
|
|
165
|
+
returnObj[fieldWithCasing] = Array.isArray(decimalValue)
|
|
166
|
+
? decimalValue?.map(date => unknownTypeToDecimal(date, renderOptions?.precision))
|
|
167
|
+
: unknownTypeToDecimal(decimalValue, renderOptions?.precision);
|
|
165
168
|
break;
|
|
166
169
|
case 'integer':
|
|
167
|
-
|
|
168
|
-
|
|
170
|
+
case 'integer[]':
|
|
171
|
+
decimalValue = this.getAttributeValue(attributeStatement);
|
|
172
|
+
returnObj[fieldWithCasing] = Array.isArray(decimalValue)
|
|
173
|
+
? decimalValue?.map(date => unknownTypeToDecimal(date, 0))
|
|
174
|
+
: unknownTypeToDecimal(decimalValue, 0);
|
|
169
175
|
break;
|
|
170
176
|
default:
|
|
171
177
|
returnObj[fieldWithCasing] = this.getAttributeValue(attributeStatement);
|
|
@@ -174,40 +180,6 @@ export default class DreamSerializer {
|
|
|
174
180
|
});
|
|
175
181
|
return returnObj;
|
|
176
182
|
}
|
|
177
|
-
numberOrStringToNumber(num) {
|
|
178
|
-
if (num === undefined)
|
|
179
|
-
return null;
|
|
180
|
-
if (num === null)
|
|
181
|
-
return null;
|
|
182
|
-
if (typeof num === 'number')
|
|
183
|
-
return num;
|
|
184
|
-
return Number(num);
|
|
185
|
-
}
|
|
186
|
-
computedRenderAs(renderAs) {
|
|
187
|
-
if (typeof renderAs === 'object') {
|
|
188
|
-
const safeRenderAs = renderAs;
|
|
189
|
-
let openApiType = safeRenderAs.type;
|
|
190
|
-
if (Array.isArray(openApiType)) {
|
|
191
|
-
if (openApiType[1] === 'null') {
|
|
192
|
-
openApiType = openApiType[0];
|
|
193
|
-
}
|
|
194
|
-
else if (openApiType[0] === 'null') {
|
|
195
|
-
openApiType = openApiType[1];
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
throw new Error(`Expected array with 'null' and an OpenAPI primitive string: ${JSON.stringify(openApiType)}`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (openApiType === 'string' || openApiType === 'number') {
|
|
202
|
-
if (safeRenderAs.format)
|
|
203
|
-
return safeRenderAs.format;
|
|
204
|
-
return openApiType;
|
|
205
|
-
}
|
|
206
|
-
if (openApiType)
|
|
207
|
-
return openApiType;
|
|
208
|
-
}
|
|
209
|
-
return renderAs;
|
|
210
|
-
}
|
|
211
183
|
applyAssociation(associationStatement) {
|
|
212
184
|
const associatedData = this.associatedData(associationStatement);
|
|
213
185
|
if (associationStatement.type === 'RendersMany' && Array.isArray(associatedData))
|
|
@@ -278,3 +250,30 @@ export default class DreamSerializer {
|
|
|
278
250
|
}
|
|
279
251
|
}
|
|
280
252
|
}
|
|
253
|
+
function unknownTypeToIsoDateString(dateTime) {
|
|
254
|
+
if (dateTime instanceof CalendarDate || dateTime instanceof DateTime)
|
|
255
|
+
return dateTime.toISODate();
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
function unknownTypeToIsoDatetimeString(dateTime) {
|
|
259
|
+
if (dateTime instanceof CalendarDate)
|
|
260
|
+
return DateTime.fromISO(dateTime.toISO()).toISO();
|
|
261
|
+
if (dateTime instanceof DateTime)
|
|
262
|
+
return dateTime.toISO();
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
function numberOrStringToNumber(num) {
|
|
266
|
+
if (num === undefined)
|
|
267
|
+
return null;
|
|
268
|
+
if (num === null)
|
|
269
|
+
return null;
|
|
270
|
+
if (typeof num === 'number')
|
|
271
|
+
return num;
|
|
272
|
+
return Number(num);
|
|
273
|
+
}
|
|
274
|
+
function unknownTypeToDecimal(decimalOrString, precision) {
|
|
275
|
+
const decimalValue = numberOrStringToNumber(decimalOrString);
|
|
276
|
+
if (decimalValue === null)
|
|
277
|
+
return null;
|
|
278
|
+
return precision === undefined ? decimalValue : round(decimalValue, precision);
|
|
279
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Dream from '../../Dream.js';
|
|
2
2
|
import { RoundingPrecision } from '../../helpers/round.js';
|
|
3
|
-
import { OpenapiSchemaBodyShorthand, OpenapiShorthandPrimitiveTypes } from '../../types/openapi.js';
|
|
3
|
+
import { OpenapiSchemaBodyShorthand, OpenapiShorthandPrimitiveBaseTypes, OpenapiShorthandPrimitiveTypes } from '../../types/openapi.js';
|
|
4
4
|
export default function Attribute(): any;
|
|
5
5
|
export default function Attribute(manualOpenapiOptions: OpenapiSchemaBodyShorthand, renderOptions?: AttributeRenderOptions): any;
|
|
6
6
|
export default function Attribute<DreamClass extends typeof Dream>(dreamClass: DreamClass, openApiAndRenderOptions?: AutomaticOpenapiAndRenderOptions): any;
|
|
@@ -11,7 +11,7 @@ export interface AttributeStatement {
|
|
|
11
11
|
field: string;
|
|
12
12
|
functional: boolean;
|
|
13
13
|
openApiShape: OpenapiSchemaBodyShorthand;
|
|
14
|
-
renderAs?:
|
|
14
|
+
renderAs?: OpenapiShorthandPrimitiveBaseTypes;
|
|
15
15
|
renderOptions?: AttributeRenderOptions;
|
|
16
16
|
}
|
|
17
17
|
interface OpenapiOnlyOptions {
|
|
@@ -42,8 +42,6 @@ export default class DreamSerializer<DataType = any, PassthroughDataType = any>
|
|
|
42
42
|
renderOne(): {
|
|
43
43
|
[key: string]: any;
|
|
44
44
|
};
|
|
45
|
-
private numberOrStringToNumber;
|
|
46
|
-
private computedRenderAs;
|
|
47
45
|
private applyAssociation;
|
|
48
46
|
private renderAssociation;
|
|
49
47
|
private associatedData;
|
|
@@ -83,7 +83,7 @@ export type OpenapiSchemaCommonFields<T> = T & {
|
|
|
83
83
|
|
|
84
84
|
export type OpenapiSchemaString = OpenapiSchemaCommonFields<{
|
|
85
85
|
type: 'string' | ['string', 'null'] | ['null', 'string']
|
|
86
|
-
enum?: string[] | Readonly<string[]>
|
|
86
|
+
enum?: (string | null)[] | Readonly<(string | null)[]>
|
|
87
87
|
format?: string
|
|
88
88
|
pattern?: string
|
|
89
89
|
minLength?: number
|
|
@@ -230,7 +230,7 @@ export type OpenapiPrimitiveTypes =
|
|
|
230
230
|
| [OpenapiPrimitiveBaseTypes, 'null']
|
|
231
231
|
| ['null', OpenapiPrimitiveBaseTypes]
|
|
232
232
|
|
|
233
|
-
type OpenapiShorthandPrimitiveBaseTypes = (typeof openapiShorthandPrimitiveTypes)[number]
|
|
233
|
+
export type OpenapiShorthandPrimitiveBaseTypes = (typeof openapiShorthandPrimitiveTypes)[number]
|
|
234
234
|
export type OpenapiShorthandPrimitiveTypes =
|
|
235
235
|
| OpenapiShorthandPrimitiveBaseTypes
|
|
236
236
|
| [OpenapiShorthandPrimitiveBaseTypes, 'null']
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Benchmark | @rvoh/dream</title><meta name="description" content="Documentation for @rvoh/dream"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@rvoh/dream</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">@rvoh/dream</a></li><li><a href="Benchmark.html">Benchmark</a></li></ul><h1>Class Benchmark</h1></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Benchmark | @rvoh/dream</title><meta name="description" content="Documentation for @rvoh/dream"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@rvoh/dream</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">@rvoh/dream</a></li><li><a href="Benchmark.html">Benchmark</a></li></ul><h1>Class Benchmark</h1></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/cf2e5d36cb609cded66b58013751a0cf9ca2e08a/src/helpers/benchmark.ts#L6">src/helpers/benchmark.ts:6</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex="0"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-chevronSmall"></use></svg> Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="Benchmark.html#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
|
|
2
2
|
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Benchmark.html#mark" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>mark</span></a>
|
|
3
3
|
<a href="Benchmark.html#start" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>start</span></a>
|
|
4
|
-
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Constructors</h2></summary><section><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Benchmark" class="tsd-anchor"></a><span class="tsd-kind-constructor-signature">new <wbr/>Benchmark</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a><a href="#constructor.new_Benchmark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><h4 class="tsd-returns-title">Returns <a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a></h4></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Methods</h2></summary><section><section class="tsd-panel tsd-member"><a id="mark" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>mark</span><a href="#mark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="mark.mark-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">mark</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span>, <span class="tsd-kind-parameter">level</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#mark.mark-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">message</span>: <span class="tsd-signature-type">string</span></span></li><li><span><span class="tsd-kind-parameter">level</span>: <span class="tsd-signature-type">BenchmarkLogLevel</span><span class="tsd-signature-symbol"> = 'log'</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/
|
|
4
|
+
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Constructors</h2></summary><section><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Benchmark" class="tsd-anchor"></a><span class="tsd-kind-constructor-signature">new <wbr/>Benchmark</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a><a href="#constructor.new_Benchmark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><h4 class="tsd-returns-title">Returns <a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a></h4></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Methods</h2></summary><section><section class="tsd-panel tsd-member"><a id="mark" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>mark</span><a href="#mark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="mark.mark-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">mark</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span>, <span class="tsd-kind-parameter">level</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#mark.mark-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">message</span>: <span class="tsd-signature-type">string</span></span></li><li><span><span class="tsd-kind-parameter">level</span>: <span class="tsd-signature-type">BenchmarkLogLevel</span><span class="tsd-signature-symbol"> = 'log'</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/cf2e5d36cb609cded66b58013751a0cf9ca2e08a/src/helpers/benchmark.ts#L12">src/helpers/benchmark.ts:12</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="start" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>start</span><a href="#start" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="start.start-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">start</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#start.start-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/cf2e5d36cb609cded66b58013751a0cf9ca2e08a/src/helpers/benchmark.ts#L8">src/helpers/benchmark.ts:8</a></li></ul></aside></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="tsd-otp-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="tsd-otp-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#mark" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>mark</span></a><a href="#start" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>start</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@rvoh/dream</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|