diff --git a/app/imports/api/engine/computation/writeComputation/writeScope.js b/app/imports/api/engine/computation/writeComputation/writeScope.js
index 18d93373..a25e9ba0 100644
--- a/app/imports/api/engine/computation/writeComputation/writeScope.js
+++ b/app/imports/api/engine/computation/writeComputation/writeScope.js
@@ -62,3 +62,13 @@ export default function writeScope(creatureId, computation) {
Creatures.update({ _id: creatureId }, { $unset: { dirty: 1 } });
}
}
+/*
+function calculateSize(computation) {
+ const sizeEstimator = {
+ creature: computation.creature,
+ variables: computation.variables,
+ props: computation.originalPropsById,
+ };
+ return MongoInternals.NpmModule.BSON.calculateObjectSize(sizeEstimator, { checkKeys: false })
+}
+*/
diff --git a/app/imports/api/engine/computeCreature.js b/app/imports/api/engine/computeCreature.js
index d0a3d469..b6dba147 100644
--- a/app/imports/api/engine/computeCreature.js
+++ b/app/imports/api/engine/computeCreature.js
@@ -4,7 +4,7 @@ import writeAlteredProperties from './computation/writeComputation/writeAlteredP
import writeScope from './computation/writeComputation/writeScope.js';
import writeErrors from './computation/writeComputation/writeErrors.js';
-export default function computeCreature(creatureId){
+export default function computeCreature(creatureId) {
if (Meteor.isClient) return;
// console.log('compute ' + creatureId);
const computation = buildCreatureComputation(creatureId);
@@ -16,7 +16,7 @@ function computeComputation(computation, creatureId) {
computeCreatureComputation(computation);
writeAlteredProperties(computation);
writeScope(creatureId, computation);
- } catch (e){
+ } catch (e) {
const errorText = e.reason || e.message || e.toString();
computation.errors.push({
type: 'crash',
@@ -32,6 +32,19 @@ function computeComputation(computation, creatureId) {
console.error(logError);
throw e;
} finally {
+ checkPropertyCount(computation)
writeErrors(creatureId, computation.errors);
}
}
+
+const MAX_PROPS = 1000;
+function checkPropertyCount(computation) {
+ const count = computation.props.length;
+ if (count <= MAX_PROPS) return;
+ computation.errors.push({
+ type: 'warning',
+ details: {
+ error: `This character sheet has too many properties and may perform poorly ( ${count} / ${MAX_PROPS} )`
+ },
+ });
+}
diff --git a/app/imports/client/ui/creature/character/errors/CharacterErrors.vue b/app/imports/client/ui/creature/character/errors/CharacterErrors.vue
index 130144f3..5c2452da 100644
--- a/app/imports/client/ui/creature/character/errors/CharacterErrors.vue
+++ b/app/imports/client/ui/creature/character/errors/CharacterErrors.vue
@@ -34,6 +34,16 @@
:key="index + 'dependencyLoopError'"
:model="error"
/>
+
+ {{ error.details.error }}
+