@rvoh/dream 0.40.0 → 0.40.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.
Files changed (152) hide show
  1. package/dist/cjs/src/Dream.js +45 -41
  2. package/dist/esm/src/Dream.js +45 -41
  3. package/dist/types/src/Dream.d.ts +2 -2
  4. package/docs/classes/Benchmark.html +2 -2
  5. package/docs/classes/CalendarDate.html +2 -2
  6. package/docs/classes/CreateOrFindByFailedToCreateAndFind.html +3 -3
  7. package/docs/classes/Decorators.html +19 -19
  8. package/docs/classes/Dream.html +127 -127
  9. package/docs/classes/DreamApp.html +4 -4
  10. package/docs/classes/DreamBin.html +2 -2
  11. package/docs/classes/DreamCLI.html +4 -4
  12. package/docs/classes/DreamImporter.html +2 -2
  13. package/docs/classes/DreamLogos.html +2 -2
  14. package/docs/classes/DreamMigrationHelpers.html +7 -7
  15. package/docs/classes/DreamSerializer.html +2 -2
  16. package/docs/classes/DreamTransaction.html +2 -2
  17. package/docs/classes/Encrypt.html +2 -2
  18. package/docs/classes/Env.html +2 -2
  19. package/docs/classes/GlobalNameNotSet.html +3 -3
  20. package/docs/classes/NonLoadedAssociation.html +3 -3
  21. package/docs/classes/Query.html +50 -50
  22. package/docs/classes/Range.html +2 -2
  23. package/docs/classes/RecordNotFound.html +3 -3
  24. package/docs/classes/ValidationError.html +3 -3
  25. package/docs/functions/Attribute.html +1 -1
  26. package/docs/functions/RendersMany.html +1 -1
  27. package/docs/functions/RendersOne.html +1 -1
  28. package/docs/functions/ReplicaSafe.html +1 -1
  29. package/docs/functions/STI.html +1 -1
  30. package/docs/functions/SoftDelete.html +1 -1
  31. package/docs/functions/camelize.html +1 -1
  32. package/docs/functions/capitalize.html +1 -1
  33. package/docs/functions/closeAllDbConnections.html +1 -1
  34. package/docs/functions/compact.html +1 -1
  35. package/docs/functions/dreamDbConnections.html +1 -1
  36. package/docs/functions/dreamPath.html +1 -1
  37. package/docs/functions/generateDream.html +1 -1
  38. package/docs/functions/globalClassNameFromFullyQualifiedModelName.html +1 -1
  39. package/docs/functions/hyphenize.html +1 -1
  40. package/docs/functions/inferSerializerFromDreamClassOrViewModelClass.html +1 -1
  41. package/docs/functions/inferSerializerFromDreamOrViewModel.html +1 -1
  42. package/docs/functions/isEmpty.html +1 -1
  43. package/docs/functions/loadRepl.html +1 -1
  44. package/docs/functions/lookupClassByGlobalName.html +1 -1
  45. package/docs/functions/pascalize.html +1 -1
  46. package/docs/functions/pgErrorType.html +1 -1
  47. package/docs/functions/range-1.html +1 -1
  48. package/docs/functions/relativeDreamPath.html +1 -1
  49. package/docs/functions/round.html +1 -1
  50. package/docs/functions/serializerNameFromFullyQualifiedModelName.html +1 -1
  51. package/docs/functions/sharedPathPrefix.html +1 -1
  52. package/docs/functions/snakeify.html +1 -1
  53. package/docs/functions/sort.html +1 -1
  54. package/docs/functions/sortBy.html +1 -1
  55. package/docs/functions/standardizeFullyQualifiedModelName.html +1 -1
  56. package/docs/functions/uncapitalize.html +1 -1
  57. package/docs/functions/uniq.html +1 -1
  58. package/docs/functions/untypedDb.html +1 -1
  59. package/docs/functions/validateColumn.html +1 -1
  60. package/docs/functions/validateTable.html +1 -1
  61. package/docs/interfaces/AttributeStatement.html +2 -2
  62. package/docs/interfaces/DecoratorContext.html +2 -2
  63. package/docs/interfaces/DreamAppInitOptions.html +2 -2
  64. package/docs/interfaces/DreamAppOpts.html +2 -2
  65. package/docs/interfaces/DreamSerializerAssociationStatement.html +2 -2
  66. package/docs/interfaces/EncryptOptions.html +2 -2
  67. package/docs/interfaces/OpenapiSchemaProperties.html +1 -1
  68. package/docs/interfaces/OpenapiSchemaPropertiesShorthand.html +1 -1
  69. package/docs/interfaces/OpenapiTypeFieldObject.html +1 -1
  70. package/docs/types/Camelized.html +1 -1
  71. package/docs/types/CommonOpenapiSchemaObjectFields.html +1 -1
  72. package/docs/types/DateTime.html +1 -1
  73. package/docs/types/DbConnectionType.html +1 -1
  74. package/docs/types/DreamAssociationMetadata.html +1 -1
  75. package/docs/types/DreamAttributes.html +1 -1
  76. package/docs/types/DreamClassColumn.html +1 -1
  77. package/docs/types/DreamColumn.html +1 -1
  78. package/docs/types/DreamColumnNames.html +1 -1
  79. package/docs/types/DreamLogLevel.html +1 -1
  80. package/docs/types/DreamLogger.html +1 -1
  81. package/docs/types/DreamOrViewModelSerializerKey.html +1 -1
  82. package/docs/types/DreamParamSafeAttributes.html +1 -1
  83. package/docs/types/DreamParamSafeColumnNames.html +1 -1
  84. package/docs/types/DreamSerializerKey.html +1 -1
  85. package/docs/types/DreamSerializers.html +1 -1
  86. package/docs/types/DreamTableSchema.html +1 -1
  87. package/docs/types/DreamVirtualColumns.html +1 -1
  88. package/docs/types/EncryptAlgorithm.html +1 -1
  89. package/docs/types/Hyphenized.html +1 -1
  90. package/docs/types/IdType.html +1 -1
  91. package/docs/types/OpenapiAllTypes.html +1 -1
  92. package/docs/types/OpenapiFormats.html +1 -1
  93. package/docs/types/OpenapiNumberFormats.html +1 -1
  94. package/docs/types/OpenapiPrimitiveTypes.html +1 -1
  95. package/docs/types/OpenapiSchemaArray.html +1 -1
  96. package/docs/types/OpenapiSchemaArrayShorthand.html +1 -1
  97. package/docs/types/OpenapiSchemaBase.html +1 -1
  98. package/docs/types/OpenapiSchemaBody.html +1 -1
  99. package/docs/types/OpenapiSchemaBodyShorthand.html +1 -1
  100. package/docs/types/OpenapiSchemaCommonFields.html +1 -1
  101. package/docs/types/OpenapiSchemaExpressionAllOf.html +1 -1
  102. package/docs/types/OpenapiSchemaExpressionAnyOf.html +1 -1
  103. package/docs/types/OpenapiSchemaExpressionOneOf.html +1 -1
  104. package/docs/types/OpenapiSchemaExpressionRef.html +1 -1
  105. package/docs/types/OpenapiSchemaExpressionRefSchemaShorthand.html +1 -1
  106. package/docs/types/OpenapiSchemaInteger.html +1 -1
  107. package/docs/types/OpenapiSchemaNull.html +1 -1
  108. package/docs/types/OpenapiSchemaNumber.html +1 -1
  109. package/docs/types/OpenapiSchemaObject.html +1 -1
  110. package/docs/types/OpenapiSchemaObjectAllOf.html +1 -1
  111. package/docs/types/OpenapiSchemaObjectAllOfShorthand.html +1 -1
  112. package/docs/types/OpenapiSchemaObjectAnyOf.html +1 -1
  113. package/docs/types/OpenapiSchemaObjectAnyOfShorthand.html +1 -1
  114. package/docs/types/OpenapiSchemaObjectBase.html +1 -1
  115. package/docs/types/OpenapiSchemaObjectBaseShorthand.html +1 -1
  116. package/docs/types/OpenapiSchemaObjectOneOf.html +1 -1
  117. package/docs/types/OpenapiSchemaObjectOneOfShorthand.html +1 -1
  118. package/docs/types/OpenapiSchemaObjectShorthand.html +1 -1
  119. package/docs/types/OpenapiSchemaPrimitiveGeneric.html +1 -1
  120. package/docs/types/OpenapiSchemaShorthandExpressionAllOf.html +1 -1
  121. package/docs/types/OpenapiSchemaShorthandExpressionAnyOf.html +1 -1
  122. package/docs/types/OpenapiSchemaShorthandExpressionOneOf.html +1 -1
  123. package/docs/types/OpenapiSchemaShorthandExpressionSerializableRef.html +1 -1
  124. package/docs/types/OpenapiSchemaShorthandExpressionSerializerRef.html +1 -1
  125. package/docs/types/OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
  126. package/docs/types/OpenapiSchemaString.html +1 -1
  127. package/docs/types/OpenapiShorthandAllTypes.html +1 -1
  128. package/docs/types/OpenapiShorthandPrimitiveTypes.html +1 -1
  129. package/docs/types/OpenapiTypeField.html +1 -1
  130. package/docs/types/Pascalized.html +1 -1
  131. package/docs/types/PrimaryKeyType.html +1 -1
  132. package/docs/types/RoundingPrecision.html +1 -1
  133. package/docs/types/SerializableClassOrSerializerCallback.html +1 -1
  134. package/docs/types/SerializableDreamClassOrViewModelClass.html +1 -1
  135. package/docs/types/SerializableDreamOrViewModel.html +1 -1
  136. package/docs/types/SerializableTypes.html +1 -1
  137. package/docs/types/Snakeified.html +1 -1
  138. package/docs/types/Timestamp.html +1 -1
  139. package/docs/types/UpdateableAssociationProperties.html +1 -1
  140. package/docs/types/UpdateableProperties.html +1 -1
  141. package/docs/types/ValidationType.html +1 -1
  142. package/docs/types/ViewModelSerializerKey.html +1 -1
  143. package/docs/types/WhereStatementForDream.html +1 -1
  144. package/docs/types/WhereStatementForDreamClass.html +1 -1
  145. package/docs/variables/DateTime-1.html +1 -1
  146. package/docs/variables/DreamConst.html +1 -1
  147. package/docs/variables/TRIGRAM_OPERATORS.html +1 -1
  148. package/docs/variables/openapiPrimitiveTypes-1.html +1 -1
  149. package/docs/variables/openapiShorthandPrimitiveTypes-1.html +1 -1
  150. package/docs/variables/ops.html +1 -1
  151. package/docs/variables/primaryKeyTypes.html +1 -1
  152. package/package.json +1 -1
@@ -1885,12 +1885,25 @@ class Dream {
1885
1885
  const returnValues = {};
1886
1886
  const setAttributeOnDreamInstance = (attr, value) => {
1887
1887
  if (!dreamInstance)
1888
- return;
1889
- if (bypassUserDefinedSetters) {
1888
+ return value;
1889
+ if (!dreamInstance.columns().has(attr)) {
1890
+ // not a column. set via the setter and return the getter value
1891
+ ;
1892
+ dreamInstance[attr] = value;
1893
+ return dreamInstance[attr];
1894
+ //
1895
+ }
1896
+ else if (bypassUserDefinedSetters && !(0, isJsonColumn_js_1.default)(this, attr)) {
1897
+ // bypass user defined setters, and this field is not json, so set
1898
+ // the attribute directly and return the attribute
1890
1899
  dreamInstance.setAttribute(attr, value);
1900
+ return dreamInstance.getAttribute(attr);
1891
1901
  }
1892
1902
  else {
1903
+ // don't bypass user defined setters, or this field is json, so set
1904
+ // the attribute directly and return the attribute
1893
1905
  dreamInstance.assignAttribute(attr, value);
1906
+ return dreamInstance.getAttribute(attr);
1894
1907
  }
1895
1908
  };
1896
1909
  Object.keys(attributes).forEach(attr => {
@@ -1921,8 +1934,7 @@ class Dream {
1921
1934
  }
1922
1935
  }
1923
1936
  else {
1924
- returnValues[attr] = attributes[attr];
1925
- setAttributeOnDreamInstance(attr, returnValues[attr]);
1937
+ returnValues[attr] = setAttributeOnDreamInstance(attr, attributes[attr]);
1926
1938
  }
1927
1939
  });
1928
1940
  return returnValues;
@@ -1940,16 +1952,19 @@ class Dream {
1940
1952
  columns.forEach(column => {
1941
1953
  // this ensures that the currentAttributes object will contain keys
1942
1954
  // for each of the properties
1943
- if (this.currentAttributes[column] === undefined)
1944
- this.currentAttributes[column] = undefined;
1955
+ if (this.getAttribute(column) === undefined)
1956
+ this.setAttribute(column, undefined);
1945
1957
  if (!Object.getOwnPropertyDescriptor(dreamPrototype, column)?.set) {
1946
1958
  if ((0, isJsonColumn_js_1.default)(this.constructor, column)) {
1947
1959
  // handle JSON columns
1948
1960
  Object.defineProperty(dreamPrototype, column, {
1949
1961
  get() {
1950
- if ([undefined, null].includes(this.currentAttributes[column]))
1951
- return this.currentAttributes[column];
1952
- return JSON.parse(this.currentAttributes[column]);
1962
+ const val = this.getAttribute(column);
1963
+ if (val === null)
1964
+ return null;
1965
+ if (val === undefined)
1966
+ return undefined;
1967
+ return JSON.parse(val);
1953
1968
  },
1954
1969
  set(val) {
1955
1970
  /**
@@ -1967,7 +1982,13 @@ class Dream {
1967
1982
  */
1968
1983
  if (this.columnSetterGuardActivated)
1969
1984
  return;
1970
- this.currentAttributes[column] = (0, typechecks_js_1.isString)(val) ? val : JSON.stringify(val);
1985
+ this.setAttribute(column, val === null
1986
+ ? null
1987
+ : val === undefined
1988
+ ? undefined
1989
+ : (0, typechecks_js_1.isString)(val)
1990
+ ? val
1991
+ : JSON.stringify(val));
1971
1992
  },
1972
1993
  configurable: true,
1973
1994
  });
@@ -1976,7 +1997,7 @@ class Dream {
1976
1997
  // handle all other columns
1977
1998
  Object.defineProperty(dreamPrototype, column, {
1978
1999
  get() {
1979
- return this.currentAttributes[column];
2000
+ return this.getAttribute(column);
1980
2001
  },
1981
2002
  set(val) {
1982
2003
  /**
@@ -1994,7 +2015,7 @@ class Dream {
1994
2015
  */
1995
2016
  if (this.columnSetterGuardActivated)
1996
2017
  return;
1997
- this.currentAttributes[column] = val;
2018
+ this.setAttribute(column, val);
1998
2019
  },
1999
2020
  configurable: true,
2000
2021
  });
@@ -2093,8 +2114,8 @@ class Dream {
2093
2114
  * ```
2094
2115
  */
2095
2116
  assignAttribute(attr, val) {
2096
- const self = this;
2097
- self[attr] = val;
2117
+ ;
2118
+ this[attr] = val;
2098
2119
  }
2099
2120
  /**
2100
2121
  * Changes the attribute value for a single attribute internally,
@@ -2106,19 +2127,9 @@ class Dream {
2106
2127
  * user.setAttribute('email', 'sally@gmail.com')
2107
2128
  * ```
2108
2129
  */
2109
- setAttribute(attr, val) {
2110
- const columns = this.constructor.columns();
2111
- const self = this;
2112
- if (columns.has(attr)) {
2113
- self.currentAttributes[attr] = (0, isJsonColumn_js_1.default)(this.constructor, attr)
2114
- ? (0, typechecks_js_1.isString)(val)
2115
- ? val
2116
- : JSON.stringify(val)
2117
- : val;
2118
- }
2119
- else {
2120
- self.currentAttributes[attr] = val;
2121
- }
2130
+ setAttribute(column, val) {
2131
+ ;
2132
+ this.currentAttributes[column] = val;
2122
2133
  }
2123
2134
  /**
2124
2135
  * Returns the value for a columnName provided,
@@ -2129,15 +2140,8 @@ class Dream {
2129
2140
  * user.getAttribute('email') // 'how@yadoin'
2130
2141
  * ```
2131
2142
  */
2132
- getAttribute(columnName) {
2133
- const columns = this.constructor.columns();
2134
- const self = this;
2135
- if (columns.has(columnName)) {
2136
- return self.currentAttributes[columnName];
2137
- }
2138
- else {
2139
- return self[columnName];
2140
- }
2143
+ getAttribute(column) {
2144
+ return this.currentAttributes[column];
2141
2145
  }
2142
2146
  /**
2143
2147
  * Returns an object containing all the columns
@@ -2242,7 +2246,7 @@ class Dream {
2242
2246
  const obj = {};
2243
2247
  this.constructor.columns().forEach(column => {
2244
2248
  const was = this.previousValueForAttribute(column);
2245
- const now = this[column];
2249
+ const now = this.getAttribute(column);
2246
2250
  if ((0, notEqual_js_1.default)(was, now))
2247
2251
  obj[column] = { was, now };
2248
2252
  });
@@ -2278,7 +2282,7 @@ class Dream {
2278
2282
  * @returns Returns the previous value for an attribute
2279
2283
  */
2280
2284
  previousValueForAttribute(columnName) {
2281
- if ((0, notEqual_js_1.default)(this.frozenAttributes[columnName], this[columnName]))
2285
+ if ((0, notEqual_js_1.default)(this.frozenAttributes[columnName], this.getAttribute(columnName)))
2282
2286
  return this.frozenAttributes[columnName];
2283
2287
  return this.attributesFromBeforeLastSave[columnName];
2284
2288
  }
@@ -2292,8 +2296,8 @@ class Dream {
2292
2296
  */
2293
2297
  savedChangeToAttribute(columnName) {
2294
2298
  const changes = this.changes();
2295
- const now = changes?.[columnName]?.now;
2296
2299
  const was = changes?.[columnName]?.was;
2300
+ const now = changes?.[columnName]?.now;
2297
2301
  return this.isPersisted && (0, notEqual_js_1.default)(now, was);
2298
2302
  }
2299
2303
  /**
@@ -2346,7 +2350,7 @@ class Dream {
2346
2350
  this.columns().forEach(column => {
2347
2351
  // TODO: clean up types
2348
2352
  if (this.attributeIsDirty(column))
2349
- obj[column] = this.getAttributes()[column];
2353
+ obj[column] = this.getAttribute(column);
2350
2354
  });
2351
2355
  return obj;
2352
2356
  }
@@ -2357,7 +2361,7 @@ class Dream {
2357
2361
  */
2358
2362
  attributeIsDirty(attribute) {
2359
2363
  const frozenValue = this.frozenAttributes[attribute];
2360
- const currentValue = this.getAttributes()[attribute];
2364
+ const currentValue = this.getAttribute(attribute);
2361
2365
  if (this.isNewRecord)
2362
2366
  return true;
2363
2367
  if (frozenValue instanceof DateTime_js_1.DateTime) {
@@ -1883,12 +1883,25 @@ export default class Dream {
1883
1883
  const returnValues = {};
1884
1884
  const setAttributeOnDreamInstance = (attr, value) => {
1885
1885
  if (!dreamInstance)
1886
- return;
1887
- if (bypassUserDefinedSetters) {
1886
+ return value;
1887
+ if (!dreamInstance.columns().has(attr)) {
1888
+ // not a column. set via the setter and return the getter value
1889
+ ;
1890
+ dreamInstance[attr] = value;
1891
+ return dreamInstance[attr];
1892
+ //
1893
+ }
1894
+ else if (bypassUserDefinedSetters && !isJsonColumn(this, attr)) {
1895
+ // bypass user defined setters, and this field is not json, so set
1896
+ // the attribute directly and return the attribute
1888
1897
  dreamInstance.setAttribute(attr, value);
1898
+ return dreamInstance.getAttribute(attr);
1889
1899
  }
1890
1900
  else {
1901
+ // don't bypass user defined setters, or this field is json, so set
1902
+ // the attribute directly and return the attribute
1891
1903
  dreamInstance.assignAttribute(attr, value);
1904
+ return dreamInstance.getAttribute(attr);
1892
1905
  }
1893
1906
  };
1894
1907
  Object.keys(attributes).forEach(attr => {
@@ -1919,8 +1932,7 @@ export default class Dream {
1919
1932
  }
1920
1933
  }
1921
1934
  else {
1922
- returnValues[attr] = attributes[attr];
1923
- setAttributeOnDreamInstance(attr, returnValues[attr]);
1935
+ returnValues[attr] = setAttributeOnDreamInstance(attr, attributes[attr]);
1924
1936
  }
1925
1937
  });
1926
1938
  return returnValues;
@@ -1938,16 +1950,19 @@ export default class Dream {
1938
1950
  columns.forEach(column => {
1939
1951
  // this ensures that the currentAttributes object will contain keys
1940
1952
  // for each of the properties
1941
- if (this.currentAttributes[column] === undefined)
1942
- this.currentAttributes[column] = undefined;
1953
+ if (this.getAttribute(column) === undefined)
1954
+ this.setAttribute(column, undefined);
1943
1955
  if (!Object.getOwnPropertyDescriptor(dreamPrototype, column)?.set) {
1944
1956
  if (isJsonColumn(this.constructor, column)) {
1945
1957
  // handle JSON columns
1946
1958
  Object.defineProperty(dreamPrototype, column, {
1947
1959
  get() {
1948
- if ([undefined, null].includes(this.currentAttributes[column]))
1949
- return this.currentAttributes[column];
1950
- return JSON.parse(this.currentAttributes[column]);
1960
+ const val = this.getAttribute(column);
1961
+ if (val === null)
1962
+ return null;
1963
+ if (val === undefined)
1964
+ return undefined;
1965
+ return JSON.parse(val);
1951
1966
  },
1952
1967
  set(val) {
1953
1968
  /**
@@ -1965,7 +1980,13 @@ export default class Dream {
1965
1980
  */
1966
1981
  if (this.columnSetterGuardActivated)
1967
1982
  return;
1968
- this.currentAttributes[column] = isString(val) ? val : JSON.stringify(val);
1983
+ this.setAttribute(column, val === null
1984
+ ? null
1985
+ : val === undefined
1986
+ ? undefined
1987
+ : isString(val)
1988
+ ? val
1989
+ : JSON.stringify(val));
1969
1990
  },
1970
1991
  configurable: true,
1971
1992
  });
@@ -1974,7 +1995,7 @@ export default class Dream {
1974
1995
  // handle all other columns
1975
1996
  Object.defineProperty(dreamPrototype, column, {
1976
1997
  get() {
1977
- return this.currentAttributes[column];
1998
+ return this.getAttribute(column);
1978
1999
  },
1979
2000
  set(val) {
1980
2001
  /**
@@ -1992,7 +2013,7 @@ export default class Dream {
1992
2013
  */
1993
2014
  if (this.columnSetterGuardActivated)
1994
2015
  return;
1995
- this.currentAttributes[column] = val;
2016
+ this.setAttribute(column, val);
1996
2017
  },
1997
2018
  configurable: true,
1998
2019
  });
@@ -2091,8 +2112,8 @@ export default class Dream {
2091
2112
  * ```
2092
2113
  */
2093
2114
  assignAttribute(attr, val) {
2094
- const self = this;
2095
- self[attr] = val;
2115
+ ;
2116
+ this[attr] = val;
2096
2117
  }
2097
2118
  /**
2098
2119
  * Changes the attribute value for a single attribute internally,
@@ -2104,19 +2125,9 @@ export default class Dream {
2104
2125
  * user.setAttribute('email', 'sally@gmail.com')
2105
2126
  * ```
2106
2127
  */
2107
- setAttribute(attr, val) {
2108
- const columns = this.constructor.columns();
2109
- const self = this;
2110
- if (columns.has(attr)) {
2111
- self.currentAttributes[attr] = isJsonColumn(this.constructor, attr)
2112
- ? isString(val)
2113
- ? val
2114
- : JSON.stringify(val)
2115
- : val;
2116
- }
2117
- else {
2118
- self.currentAttributes[attr] = val;
2119
- }
2128
+ setAttribute(column, val) {
2129
+ ;
2130
+ this.currentAttributes[column] = val;
2120
2131
  }
2121
2132
  /**
2122
2133
  * Returns the value for a columnName provided,
@@ -2127,15 +2138,8 @@ export default class Dream {
2127
2138
  * user.getAttribute('email') // 'how@yadoin'
2128
2139
  * ```
2129
2140
  */
2130
- getAttribute(columnName) {
2131
- const columns = this.constructor.columns();
2132
- const self = this;
2133
- if (columns.has(columnName)) {
2134
- return self.currentAttributes[columnName];
2135
- }
2136
- else {
2137
- return self[columnName];
2138
- }
2141
+ getAttribute(column) {
2142
+ return this.currentAttributes[column];
2139
2143
  }
2140
2144
  /**
2141
2145
  * Returns an object containing all the columns
@@ -2240,7 +2244,7 @@ export default class Dream {
2240
2244
  const obj = {};
2241
2245
  this.constructor.columns().forEach(column => {
2242
2246
  const was = this.previousValueForAttribute(column);
2243
- const now = this[column];
2247
+ const now = this.getAttribute(column);
2244
2248
  if (notEqual(was, now))
2245
2249
  obj[column] = { was, now };
2246
2250
  });
@@ -2276,7 +2280,7 @@ export default class Dream {
2276
2280
  * @returns Returns the previous value for an attribute
2277
2281
  */
2278
2282
  previousValueForAttribute(columnName) {
2279
- if (notEqual(this.frozenAttributes[columnName], this[columnName]))
2283
+ if (notEqual(this.frozenAttributes[columnName], this.getAttribute(columnName)))
2280
2284
  return this.frozenAttributes[columnName];
2281
2285
  return this.attributesFromBeforeLastSave[columnName];
2282
2286
  }
@@ -2290,8 +2294,8 @@ export default class Dream {
2290
2294
  */
2291
2295
  savedChangeToAttribute(columnName) {
2292
2296
  const changes = this.changes();
2293
- const now = changes?.[columnName]?.now;
2294
2297
  const was = changes?.[columnName]?.was;
2298
+ const now = changes?.[columnName]?.now;
2295
2299
  return this.isPersisted && notEqual(now, was);
2296
2300
  }
2297
2301
  /**
@@ -2344,7 +2348,7 @@ export default class Dream {
2344
2348
  this.columns().forEach(column => {
2345
2349
  // TODO: clean up types
2346
2350
  if (this.attributeIsDirty(column))
2347
- obj[column] = this.getAttributes()[column];
2351
+ obj[column] = this.getAttribute(column);
2348
2352
  });
2349
2353
  return obj;
2350
2354
  }
@@ -2355,7 +2359,7 @@ export default class Dream {
2355
2359
  */
2356
2360
  attributeIsDirty(attribute) {
2357
2361
  const frozenValue = this.frozenAttributes[attribute];
2358
- const currentValue = this.getAttributes()[attribute];
2362
+ const currentValue = this.getAttribute(attribute);
2359
2363
  if (this.isNewRecord)
2360
2364
  return true;
2361
2365
  if (frozenValue instanceof DateTime) {
@@ -1627,7 +1627,7 @@ export default class Dream {
1627
1627
  * user.setAttribute('email', 'sally@gmail.com')
1628
1628
  * ```
1629
1629
  */
1630
- setAttribute<I extends Dream, Key extends AttributeKeys<I>>(this: I, attr: Key & string, val: any): void;
1630
+ setAttribute<I extends Dream, Key extends AttributeKeys<I>>(this: I, column: Key & string, val: any): void;
1631
1631
  /**
1632
1632
  * Returns the value for a columnName provided,
1633
1633
  * bypassing the getters.
@@ -1637,7 +1637,7 @@ export default class Dream {
1637
1637
  * user.getAttribute('email') // 'how@yadoin'
1638
1638
  * ```
1639
1639
  */
1640
- getAttribute<I extends Dream, Key extends AttributeKeys<I>>(this: I, columnName: Key & string): DreamAttributes<I>[Key];
1640
+ getAttribute<I extends Dream, Key extends AttributeKeys<I>>(this: I, column: Key & string): DreamAttributes<I>[Key];
1641
1641
  /**
1642
1642
  * Returns an object containing all the columns
1643
1643
  * on this dream class, as well as their values,
@@ -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/f9c985bbf299219d42d2d2dde97554cb0d2da459/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>
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/3dd6e09372f033328519df23f18b03062bc4f5d0/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"> = &#39;log&#39;</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/f9c985bbf299219d42d2d2dde97554cb0d2da459/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/f9c985bbf299219d42d2d2dde97554cb0d2da459/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>
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"> = &#39;log&#39;</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/3dd6e09372f033328519df23f18b03062bc4f5d0/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/3dd6e09372f033328519df23f18b03062bc4f5d0/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>