@fluid-experimental/property-properties 0.54.2 → 0.56.0-49831

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 (120) hide show
  1. package/dist/properties/arrayProperty.d.ts.map +1 -1
  2. package/dist/properties/arrayProperty.js +4 -4
  3. package/dist/properties/arrayProperty.js.map +1 -1
  4. package/dist/properties/baseProperty.d.ts +1 -1
  5. package/dist/properties/baseProperty.d.ts.map +1 -1
  6. package/dist/properties/baseProperty.js +13 -12
  7. package/dist/properties/baseProperty.js.map +1 -1
  8. package/dist/properties/boolProperty.d.ts.map +1 -1
  9. package/dist/properties/boolProperty.js +3 -2
  10. package/dist/properties/boolProperty.js.map +1 -1
  11. package/dist/properties/containerProperty.d.ts +1 -1
  12. package/dist/properties/containerProperty.d.ts.map +1 -1
  13. package/dist/properties/containerProperty.js +12 -3
  14. package/dist/properties/containerProperty.js.map +1 -1
  15. package/dist/properties/enumArrayProperty.js +2 -1
  16. package/dist/properties/enumArrayProperty.js.map +1 -1
  17. package/dist/properties/enumProperty.d.ts.map +1 -1
  18. package/dist/properties/enumProperty.js +2 -1
  19. package/dist/properties/enumProperty.js.map +1 -1
  20. package/dist/properties/floatProperties.d.ts.map +1 -1
  21. package/dist/properties/floatProperties.js +6 -4
  22. package/dist/properties/floatProperties.js.map +1 -1
  23. package/dist/properties/indexedCollectionBaseProperty.d.ts +2 -2
  24. package/dist/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
  25. package/dist/properties/indexedCollectionBaseProperty.js +2 -2
  26. package/dist/properties/indexedCollectionBaseProperty.js.map +1 -1
  27. package/dist/properties/intProperties.d.ts.map +1 -1
  28. package/dist/properties/intProperties.js +15 -10
  29. package/dist/properties/intProperties.js.map +1 -1
  30. package/dist/properties/mapProperty.d.ts.map +1 -1
  31. package/dist/properties/mapProperty.js +2 -1
  32. package/dist/properties/mapProperty.js.map +1 -1
  33. package/dist/properties/namedNodeProperty.js +2 -1
  34. package/dist/properties/namedNodeProperty.js.map +1 -1
  35. package/dist/properties/namedProperty.js +2 -1
  36. package/dist/properties/namedProperty.js.map +1 -1
  37. package/dist/properties/nodeProperty.d.ts.map +1 -1
  38. package/dist/properties/nodeProperty.js +3 -1
  39. package/dist/properties/nodeProperty.js.map +1 -1
  40. package/dist/properties/referenceArrayProperty.js +2 -1
  41. package/dist/properties/referenceArrayProperty.js.map +1 -1
  42. package/dist/properties/referenceMapProperty.js +2 -1
  43. package/dist/properties/referenceMapProperty.js.map +1 -1
  44. package/dist/properties/referenceProperty.d.ts +1 -1
  45. package/dist/properties/referenceProperty.d.ts.map +1 -1
  46. package/dist/properties/referenceProperty.js +3 -2
  47. package/dist/properties/referenceProperty.js.map +1 -1
  48. package/dist/properties/setProperty.d.ts.map +1 -1
  49. package/dist/properties/setProperty.js +3 -2
  50. package/dist/properties/setProperty.js.map +1 -1
  51. package/dist/properties/stringProperty.d.ts.map +1 -1
  52. package/dist/properties/stringProperty.js +12 -3
  53. package/dist/properties/stringProperty.js.map +1 -1
  54. package/dist/properties/uintProperties.d.ts.map +1 -1
  55. package/dist/properties/uintProperties.js +9 -6
  56. package/dist/properties/uintProperties.js.map +1 -1
  57. package/dist/properties/valueArrayProperty.d.ts +1 -1
  58. package/dist/properties/valueArrayProperty.d.ts.map +1 -1
  59. package/dist/properties/valueArrayProperty.js +25 -13
  60. package/dist/properties/valueArrayProperty.js.map +1 -1
  61. package/dist/properties/valueMapProperty.d.ts.map +1 -1
  62. package/dist/properties/valueMapProperty.js +38 -26
  63. package/dist/properties/valueMapProperty.js.map +1 -1
  64. package/dist/propertyFactory.d.ts.map +1 -1
  65. package/dist/propertyFactory.js +442 -86
  66. package/dist/propertyFactory.js.map +1 -1
  67. package/dist/propertyTemplateWrapper.d.ts +0 -34
  68. package/dist/propertyTemplateWrapper.d.ts.map +1 -1
  69. package/dist/propertyTemplateWrapper.js +0 -108
  70. package/dist/propertyTemplateWrapper.js.map +1 -1
  71. package/dist/test/propertyFactory.spec.js +5 -2
  72. package/dist/test/propertyFactory.spec.js.map +1 -1
  73. package/dist/test/tsconfig.tsbuildinfo +11 -11
  74. package/lib/properties/arrayProperty.js +4 -4
  75. package/lib/properties/arrayProperty.js.map +1 -1
  76. package/lib/properties/baseProperty.js +13 -12
  77. package/lib/properties/baseProperty.js.map +1 -1
  78. package/lib/properties/boolProperty.js +3 -2
  79. package/lib/properties/boolProperty.js.map +1 -1
  80. package/lib/properties/containerProperty.js +12 -3
  81. package/lib/properties/containerProperty.js.map +1 -1
  82. package/lib/properties/enumArrayProperty.js +2 -1
  83. package/lib/properties/enumArrayProperty.js.map +1 -1
  84. package/lib/properties/enumProperty.js +2 -1
  85. package/lib/properties/enumProperty.js.map +1 -1
  86. package/lib/properties/floatProperties.js +6 -4
  87. package/lib/properties/floatProperties.js.map +1 -1
  88. package/lib/properties/indexedCollectionBaseProperty.js +2 -2
  89. package/lib/properties/indexedCollectionBaseProperty.js.map +1 -1
  90. package/lib/properties/intProperties.js +15 -10
  91. package/lib/properties/intProperties.js.map +1 -1
  92. package/lib/properties/mapProperty.js +2 -1
  93. package/lib/properties/mapProperty.js.map +1 -1
  94. package/lib/properties/namedNodeProperty.js +2 -1
  95. package/lib/properties/namedNodeProperty.js.map +1 -1
  96. package/lib/properties/namedProperty.js +2 -1
  97. package/lib/properties/namedProperty.js.map +1 -1
  98. package/lib/properties/nodeProperty.js +3 -1
  99. package/lib/properties/nodeProperty.js.map +1 -1
  100. package/lib/properties/referenceArrayProperty.js +2 -1
  101. package/lib/properties/referenceArrayProperty.js.map +1 -1
  102. package/lib/properties/referenceMapProperty.js +2 -1
  103. package/lib/properties/referenceMapProperty.js.map +1 -1
  104. package/lib/properties/referenceProperty.js +3 -2
  105. package/lib/properties/referenceProperty.js.map +1 -1
  106. package/lib/properties/setProperty.js +3 -2
  107. package/lib/properties/setProperty.js.map +1 -1
  108. package/lib/properties/stringProperty.js +12 -3
  109. package/lib/properties/stringProperty.js.map +1 -1
  110. package/lib/properties/uintProperties.js +9 -6
  111. package/lib/properties/uintProperties.js.map +1 -1
  112. package/lib/properties/valueArrayProperty.js +25 -13
  113. package/lib/properties/valueArrayProperty.js.map +1 -1
  114. package/lib/properties/valueMapProperty.js +38 -26
  115. package/lib/properties/valueMapProperty.js.map +1 -1
  116. package/lib/propertyFactory.js +442 -86
  117. package/lib/propertyFactory.js.map +1 -1
  118. package/lib/propertyTemplateWrapper.js +0 -108
  119. package/lib/propertyTemplateWrapper.js.map +1 -1
  120. package/package.json +5 -5
@@ -16,8 +16,6 @@ export class PropertyTemplateWrapper {
16
16
  * from templates this template inherits from.
17
17
  */
18
18
  _compiledPropertyTemplate: any;
19
- /** Constants saved in a tree like structure */
20
- constantTree: any;
21
19
  _objectCreationType: string;
22
20
  _scope: string;
23
21
  /**
@@ -72,37 +70,5 @@ export class PropertyTemplateWrapper {
72
70
  * @package
73
71
  */
74
72
  _mergeProperty(in_childProperty: object, in_parentProperty: object): void;
75
- /**
76
- * @return {Boolean} true if a constant tree was already created and stored here
77
- */
78
- hasConstantTree(): boolean;
79
- /**
80
- * Creates the constant tree if it doesn't exist yet, then apply it to the passed in property
81
- * @param {property-properties.BaseProperty} in_property The property which will have constants applied to
82
- */
83
- loadConstants(in_property: any): void;
84
- /**
85
- * Begins the process of creating and saving the constant tree.
86
- * @param {property-properties.BaseProperty} in_property The property which has constants to be saved
87
- */
88
- _saveConstants(in_property: any): void;
89
- /**
90
- * Recursive function which extracts all constants from in_property and saves them.
91
- * @param {property-properties.BaseProperty} in_property The property whose constants will be saved
92
- * @param {Object} out_property A tree like series of nested objects which holds all constants of in_property
93
- * @return {Boolean} returns true if there is a constant within the subtree passed in as in_property
94
- */
95
- _saveConstantsRecursive(in_property: any, out_property: any): boolean;
96
- /**
97
- * Applies save constants to the property passed in
98
- * @param {property-properties.BaseProperty} in_property The property that constants are being applied to
99
- */
100
- _applyConstants(in_property: any): void;
101
- /**
102
- * Applies constants from the in_property on to the out_property
103
- * @param {Object} in_property The property whose constants will be transfered
104
- * @param {property-properties.BaseProperty} out_property The property that constants are being applied to
105
- */
106
- _applyConstantsRecursive(in_property: any, out_property: any): void;
107
73
  }
108
74
  //# sourceMappingURL=propertyTemplateWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"propertyTemplateWrapper.d.ts","sourceRoot":"","sources":["../src/propertyTemplateWrapper.js"],"names":[],"mappings":"AA6BA;IAEI;;;;;;;;;OASG;IACH,8CAPW,MAAM,EAwBhB;IAhBG,oDAAoD;IACpD,uBAA0C;IAE1C;;OAEG;IACH,+BAA0C;IAE1C,+CAA+C;IAC/C,kBAA6B;IAG7B,4BAAoC;IAGpC,eAAsB;IAI1B;;;;OAIG;IACH,2BAEC;IAED;;;;;;;OAOG;IACH,kDAKC;IAED;;;;OAIG;IACH,uBAHY,OAAO,CAKlB;IAED;;;;OAIG;IACH,mBAHY,MAAM,CAKjB;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,QAmBhB;IAED;;;;;;;OAOG;IACH,wDAuHC;IAED;;;;;;OAMG;IACH,iCAJW,MAAM,qBACN,MAAM,QAqEhB;IAGD;;OAEG;IACH,2BAEC;IAED;;;OAGG;IACH,sCAOC;IAED;;;OAGG;IACH,uCAGC;IAED;;;;;OAKG;IACH,sEA0CC;IAED;;;QAGI;IACJ,wCAEC;IAED;;;;OAIG;IACH,oEAcC;CACJ"}
1
+ {"version":3,"file":"propertyTemplateWrapper.d.ts","sourceRoot":"","sources":["../src/propertyTemplateWrapper.js"],"names":[],"mappings":"AA6BA;IAEI;;;;;;;;;OASG;IACH,8CAPW,MAAM,EAqBhB;IAbG,oDAAoD;IACpD,uBAA0C;IAE1C;;OAEG;IACH,+BAA0C;IAG1C,4BAAoC;IAGpC,eAAsB;IAI1B;;;;OAIG;IACH,2BAEC;IAED;;;;;;;OAOG;IACH,kDAKC;IAED;;;;OAIG;IACH,uBAHY,OAAO,CAKlB;IAED;;;;OAIG;IACH,mBAHY,MAAM,CAKjB;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,QAmBhB;IAED;;;;;;;OAOG;IACH,wDAuHC;IAED;;;;;;OAMG;IACH,iCAJW,MAAM,qBACN,MAAM,QAqEhB;CACJ"}
@@ -45,8 +45,6 @@ class PropertyTemplateWrapper {
45
45
  * from templates this template inherits from.
46
46
  */
47
47
  this._compiledPropertyTemplate = undefined;
48
- /** Constants saved in a tree like structure */
49
- this.constantTree = undefined;
50
48
  /* What type of base object is created for this template*/
51
49
  this._objectCreationType = undefined;
52
50
  /* The scope of this template*/
@@ -293,112 +291,6 @@ class PropertyTemplateWrapper {
293
291
  mergeSubProperties(in_childProperty, in_parentProperty, 'constants');
294
292
  }
295
293
  ;
296
- /**
297
- * @return {Boolean} true if a constant tree was already created and stored here
298
- */
299
- hasConstantTree() {
300
- return this.constantTree !== undefined;
301
- }
302
- ;
303
- /**
304
- * Creates the constant tree if it doesn't exist yet, then apply it to the passed in property
305
- * @param {property-properties.BaseProperty} in_property The property which will have constants applied to
306
- */
307
- loadConstants(in_property) {
308
- if (this.hasConstantTree()) {
309
- this._applyConstants(in_property);
310
- }
311
- else {
312
- this._saveConstants(in_property);
313
- this._applyConstants(in_property);
314
- }
315
- }
316
- ;
317
- /**
318
- * Begins the process of creating and saving the constant tree.
319
- * @param {property-properties.BaseProperty} in_property The property which has constants to be saved
320
- */
321
- _saveConstants(in_property) {
322
- this._saveConstantsRecursive(in_property, {});
323
- // Object.freeze(this.constantTree);
324
- }
325
- ;
326
- /**
327
- * Recursive function which extracts all constants from in_property and saves them.
328
- * @param {property-properties.BaseProperty} in_property The property whose constants will be saved
329
- * @param {Object} out_property A tree like series of nested objects which holds all constants of in_property
330
- * @return {Boolean} returns true if there is a constant within the subtree passed in as in_property
331
- */
332
- _saveConstantsRecursive(in_property, out_property) {
333
- if (in_property instanceof ContainerProperty) {
334
- const children = in_property._staticChildren;
335
- let isConstant = false;
336
- if (children !== undefined) {
337
- if (out_property._constantChildren === undefined) {
338
- out_property._constantChildren = {};
339
- }
340
- if (out_property._staticChildren === undefined) {
341
- out_property._staticChildren = {};
342
- }
343
- const keys = Object.keys(children);
344
- for (let i = 0; i < keys.length; ++i) {
345
- const key = keys[i];
346
- const child = children[key];
347
- if (child._isConstant) {
348
- child._cleanDirty();
349
- if (child._parent && !child._parent._isConstant) {
350
- child._parent = undefined;
351
- }
352
- out_property._constantChildren[key] = child;
353
- // Object.freeze(out_property._constantChildren[key]);
354
- isConstant = true;
355
- delete in_property._staticChildren[key];
356
- }
357
- else {
358
- out_property._staticChildren[key] = {};
359
- const isThereAConstantInChild = this._saveConstantsRecursive(child, out_property._staticChildren[key]);
360
- isConstant = isConstant || isThereAConstantInChild;
361
- if (!isThereAConstantInChild) {
362
- delete out_property._staticChildren[key];
363
- }
364
- }
365
- }
366
- }
367
- this.constantTree = out_property;
368
- return isConstant;
369
- }
370
- return false;
371
- }
372
- ;
373
- /**
374
- * Applies save constants to the property passed in
375
- * @param {property-properties.BaseProperty} in_property The property that constants are being applied to
376
- */
377
- _applyConstants(in_property) {
378
- this._applyConstantsRecursive(this.constantTree, in_property);
379
- }
380
- ;
381
- /**
382
- * Applies constants from the in_property on to the out_property
383
- * @param {Object} in_property The property whose constants will be transfered
384
- * @param {property-properties.BaseProperty} out_property The property that constants are being applied to
385
- */
386
- _applyConstantsRecursive(in_property, out_property) {
387
- if (out_property instanceof ContainerProperty) {
388
- if (in_property._constantChildren) {
389
- out_property._setConstants(in_property._constantChildren);
390
- }
391
- const children = in_property._staticChildren;
392
- if (!_.isUndefined(children)) {
393
- const keys = Object.keys(children);
394
- for (let i = 0; i < keys.length; ++i) {
395
- const key = keys[i];
396
- this._applyConstantsRecursive(children[key], out_property.get([key]));
397
- }
398
- }
399
- }
400
- }
401
- ;
402
294
  }
403
295
  exports.PropertyTemplateWrapper = PropertyTemplateWrapper;
404
296
  //# sourceMappingURL=propertyTemplateWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"propertyTemplateWrapper.js","sourceRoot":"","sources":["../src/propertyTemplateWrapper.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview\n * Declaration of the PropertyTemplateWrapper module\n * PropertyTemplateWrapper is used to wrap a property template and perform internal optimizations\n */\nconst _ = require('lodash');\nconst { ContainerProperty } = require('./properties/containerProperty');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\n\nconst reservedTypesWithoutTemplates = {\n 'BaseProperty': true,\n 'ContainerProperty': true,\n 'NodeProperty': true,\n 'Enum': true\n};\n/**\n * Utility function that validates if the typeid is a reserved type without a template.\n * @param {string} in_typeid The typeid to validate.\n * @return {boolean} True if the typeid is a reserved type without a template, false otherwise.\n */\nconst hasAssociatedTemplate = (in_typeid) => {\n return !reservedTypesWithoutTemplates[in_typeid];\n};\n\nexport class PropertyTemplateWrapper {\n\n /**\n * Constructor for creating a PropertyTemplateWrapper based on the given template.\n * @param {PropertyTemplate} in_remoteTemplate A property template\n * @param {string} in_scope The scope of the template\n *\n * @constructor\n * @package\n * @alias property-properties.PropertyTemplateWrapper\n * @category Properties\n */\n constructor(in_remoteTemplate, in_scope) {\n /** The property template this object is wrapping */\n this._propertyTemplate = in_remoteTemplate;\n\n /** A property template created from this.propertyTemplate with the addition of all information\n * from templates this template inherits from.\n */\n this._compiledPropertyTemplate = undefined;\n\n /** Constants saved in a tree like structure */\n this.constantTree = undefined;\n\n /* What type of base object is created for this template*/\n this._objectCreationType = undefined;\n\n /* The scope of this template*/\n this._scope = in_scope;\n };\n\n\n /**\n * To get the property template that this is wrapping.\n * @return {property-properties.PropertyTemplate} The template this wrapper contains\n * @package\n */\n getPropertyTemplate() {\n return this._propertyTemplate;\n };\n\n /**\n * Gets the compiled template or creates it then returns it.\n * @param {property-properties.PropertyFactory} in_propertyFactory The assosiated PropertyFactory.\n * @return {property-properties.PropertyTemplate} The compiled template\n * A compiled template is the template which is actually used for creating objects.\n * It has all information from parent Templates, and other changes.\n * @package\n */\n getCompiledTemplate(in_propertyFactory) {\n if (this._compiledPropertyTemplate === undefined) {\n this._compiledPropertyTemplate = this._contructCompiledTemplate(in_propertyFactory);\n }\n return this._compiledPropertyTemplate;\n };\n\n /**\n * Returns if the compiled template has been created.\n * @return {boolean} if the compiled template has been created\n * @package\n */\n hasCompiledTemplate() {\n return !!this._compiledPropertyTemplate;\n };\n\n /**\n * To get the creation type of the template this wraps.\n * @return {string} A typeid which represents the creation type of this template\n * @package\n */\n getCreationType() {\n return this._objectCreationType;\n };\n\n /**\n * If current creation type is undefined, sets it to in_typeid if in_typeid is a creation type.\n * If current creation type is defined, throws if in_typeid is a creation type.\n *\n * @param {string} in_typeid A typeid\n * @package\n */\n setCreationType(in_typeid) {\n // This function could be moved somewhere else, an enum could be made if this information is widely needed.\n const isCreationType = (typeid) => {\n const creationTypes =\n ['ContainerProperty', 'NodeProperty', 'Enum', 'BinaryProperty', 'Binary', 'RepositoryReferenceProperty'];\n return creationTypes.indexOf(typeid) !== -1;\n };\n\n if (isCreationType(in_typeid)) {\n const currentCreationType = this._objectCreationType;\n if (currentCreationType === undefined) {\n this._objectCreationType = in_typeid;\n } else if (currentCreationType !== in_typeid) {\n throw new Error(MSG.ONLY_ONE_CREATION_TYPE + currentCreationType + ', ' + in_typeid);\n }\n }\n };\n\n /**\n * Contructs the compiled template from the template this wraps\n * @param {property-properties.PropertyFactory} in_propertyFactory The associated PropertyFactory.\n * @return {property-properties.PropertyTemplate} The compiled template\n * A compiled template is the template which is actually used for creating objects.\n * It has all information from parent Templates, and other changes.\n * @package\n */\n _contructCompiledTemplate(in_propertyFactory) {\n const originalTemplate = this.getPropertyTemplate();\n\n this.setCreationType(originalTemplate.typeid);\n\n /* Because we treat templates and contructor functions for base types the same way :( */\n if (_.isFunction(originalTemplate)) {\n return originalTemplate;\n }\n\n let parentTemplateIds = originalTemplate.inherits;\n\n /* template.inherits can be a string, if so convert it to array of strings */\n if (typeof parentTemplateIds === 'string') {\n parentTemplateIds = [parentTemplateIds];\n }\n\n /* Cloning the original template to avoid modifying it */\n const template = originalTemplate.clone();\n\n /* Copy the proccesed list of parents to not modify the original */\n const typeInheritence = parentTemplateIds ? parentTemplateIds.slice() : [];\n\n /* Look ups to efficiently check what properties/constants parents have */\n const parentsPropertiesById = {};\n const parentsConstantsById = {};\n\n if (parentTemplateIds !== undefined) {\n for (let i = 0; i < parentTemplateIds.length; ++i) {\n const parentTemplateId = parentTemplateIds[i];\n this.setCreationType(parentTemplateId);\n\n if (hasAssociatedTemplate(parentTemplateId)) {\n const parentTemplateWrapper = in_propertyFactory._getWrapper(parentTemplateId, undefined, this._scope);\n if (parentTemplateWrapper) {\n const parentTemplate = parentTemplateWrapper.getCompiledTemplate(in_propertyFactory);\n const parentCreationType = parentTemplateWrapper.getCreationType();\n\n if (parentCreationType !== 'ContainerProperty') {\n this.setCreationType(parentCreationType);\n }\n\n if (parentTemplate.inherits) {\n typeInheritence.concat(parentTemplateId);\n }\n\n /* Fills parentsPropertiesById and makes sure there are no two properties or constants with the same id */\n if (parentTemplate.hasNestedProperties()) {\n const parentProperties = parentTemplate.properties;\n for (let j = 0; j < parentProperties.length; ++j) {\n const parentProperty = parentProperties[j];\n /* Two parents has child property with same id */\n if (parentsPropertiesById[parentProperty.id] || parentsConstantsById[parentProperty.id]) {\n throw new Error(MSG.OVERWRITING_ID + parentProperty.id);\n }\n parentsPropertiesById[parentProperty.id] = parentProperty;\n }\n }\n\n /* Fills parentsConsantsById and makes sure there are no two properties or constants with the same id */\n if (parentTemplate.hasNestedConstants()) {\n const parentConstants = parentTemplate.constants;\n for (let j = 0; j < parentConstants.length; ++j) {\n const parentConstant = parentConstants[j];\n /* Two parents has child property with same id */\n if (parentsConstantsById[parentConstant.id] || parentsPropertiesById[parentConstant.id]) {\n throw new Error(MSG.OVERWRITING_ID + parentConstant.id);\n }\n parentsConstantsById[parentConstant.id] = parentConstant;\n }\n }\n }\n }\n }\n }\n\n if (this._objectCreationType === undefined) {\n this.setCreationType('ContainerProperty');\n }\n\n /* Merges properties from parents into the properties of the child */\n const constructSubProperties = (in_template, in_parentsPropertiesById, fieldName) => {\n const propertyKeys = Object.keys(in_parentsPropertiesById);\n\n if (in_template[fieldName] === undefined && propertyKeys.length !== 0) {\n in_template[fieldName] = [];\n }\n\n const properties = in_template[fieldName] || [];\n\n for (let i = 0; i < properties.length; ++i) {\n const property = properties[i];\n const id = property.id;\n if (in_parentsPropertiesById[id]) {\n this._mergeProperty(property, in_parentsPropertiesById[id]);\n delete in_parentsPropertiesById[id];\n }\n }\n\n for (let i = 0; i < propertyKeys.length; ++i) {\n const insertProperty = in_parentsPropertiesById[propertyKeys[i]];\n if (insertProperty) {\n properties.push(insertProperty);\n }\n }\n\n if (properties.length > 0) {\n template[fieldName] = properties;\n }\n };\n\n constructSubProperties(template, parentsPropertiesById, 'properties');\n constructSubProperties(template, parentsConstantsById, 'constants');\n\n if (typeInheritence.length > 0) {\n template.inherits = typeInheritence;\n }\n\n return template;\n };\n\n /**\n * A helper function which merges a child and parent property.\n * The changes are applied directly to the in_childProperty.\n * @param {object} in_childProperty The child's property defition.\n * @param {object} in_parentProperty The parent's property defition.\n * @package\n */\n _mergeProperty(in_childProperty, in_parentProperty) {\n const mergeField = (child, parent, fieldName, defaultValue) => {\n if (child[fieldName] === undefined) {\n if (parent[fieldName] !== undefined) {\n child[fieldName] = parent[fieldName];\n }\n } else if (child[fieldName] !== parent[fieldName] &&\n (child[fieldName] !== defaultValue || parent[fieldName] !== undefined)) {\n throw new Error(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE + fieldName +\n ' as the base type: ' + child.id + ': ' + child[fieldName] + ' != ' + parent[fieldName]);\n }\n };\n\n mergeField(in_childProperty, in_parentProperty, 'context', 'single');\n mergeField(in_childProperty, in_parentProperty, 'contextKeyType', 'string');\n mergeField(in_childProperty, in_parentProperty, 'length', 0);\n mergeField(in_childProperty, in_parentProperty, 'optional', false);\n mergeField(in_childProperty, in_parentProperty, 'typeid', undefined);\n\n if (in_parentProperty.typedValue !== undefined) {\n if (in_childProperty.typedValue === undefined) {\n in_childProperty.typedValue = in_parentProperty.typedValue;\n }\n }\n\n if (in_parentProperty.value !== undefined) {\n if (in_childProperty.value === undefined) {\n in_childProperty.value = in_parentProperty.value;\n }\n }\n\n const mergeSubProperties = (child, parent, fieldName) => {\n const parentPropertiesById = {};\n let parentProperties = parent[fieldName];\n let properties = child[fieldName] || [];\n if (parentProperties) {\n for (let j = 0; j < parentProperties.length; ++j) {\n const parentProperty = parentProperties[j];\n parentPropertiesById[parentProperty.id] = parentProperty;\n }\n\n for (let i = 0; i < properties.length; ++i) {\n const property = properties[i];\n const id = property.id;\n if (parentPropertiesById[id]) {\n this._mergeProperty(property, parentPropertiesById[id]);\n delete parentPropertiesById[id];\n }\n }\n\n const propertyKeys = Object.keys(parentPropertiesById);\n for (let i = 0; i < propertyKeys.length; ++i) {\n const insertProperty = parentPropertiesById[propertyKeys[i]];\n if (insertProperty) {\n properties.push(insertProperty);\n }\n }\n }\n\n if (properties.length > 0) {\n child[fieldName] = properties;\n }\n };\n\n mergeSubProperties(in_childProperty, in_parentProperty, 'properties');\n mergeSubProperties(in_childProperty, in_parentProperty, 'constants');\n };\n\n\n /**\n * @return {Boolean} true if a constant tree was already created and stored here\n */\n hasConstantTree() {\n return this.constantTree !== undefined;\n };\n\n /**\n * Creates the constant tree if it doesn't exist yet, then apply it to the passed in property\n * @param {property-properties.BaseProperty} in_property The property which will have constants applied to\n */\n loadConstants(in_property) {\n if (this.hasConstantTree()) {\n this._applyConstants(in_property);\n } else {\n this._saveConstants(in_property);\n this._applyConstants(in_property);\n }\n };\n\n /**\n * Begins the process of creating and saving the constant tree.\n * @param {property-properties.BaseProperty} in_property The property which has constants to be saved\n */\n _saveConstants(in_property) {\n this._saveConstantsRecursive(in_property, {});\n // Object.freeze(this.constantTree);\n };\n\n /**\n * Recursive function which extracts all constants from in_property and saves them.\n * @param {property-properties.BaseProperty} in_property The property whose constants will be saved\n * @param {Object} out_property A tree like series of nested objects which holds all constants of in_property\n * @return {Boolean} returns true if there is a constant within the subtree passed in as in_property\n */\n _saveConstantsRecursive(in_property, out_property) {\n if (in_property instanceof ContainerProperty) {\n const children = in_property._staticChildren;\n let isConstant = false;\n if (children !== undefined) {\n if (out_property._constantChildren === undefined) {\n out_property._constantChildren = {};\n }\n if (out_property._staticChildren === undefined) {\n out_property._staticChildren = {};\n }\n const keys = Object.keys(children);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const child = children[key];\n if (child._isConstant) {\n\n child._cleanDirty();\n if (child._parent && !child._parent._isConstant) {\n child._parent = undefined;\n }\n out_property._constantChildren[key] = child;\n // Object.freeze(out_property._constantChildren[key]);\n isConstant = true;\n delete in_property._staticChildren[key];\n } else {\n out_property._staticChildren[key] = {};\n const isThereAConstantInChild = this._saveConstantsRecursive(\n child,\n out_property._staticChildren[key]);\n\n isConstant = isConstant || isThereAConstantInChild;\n if (!isThereAConstantInChild) {\n delete out_property._staticChildren[key];\n }\n }\n }\n }\n this.constantTree = out_property;\n return isConstant;\n }\n return false;\n };\n\n /**\n * Applies save constants to the property passed in\n * @param {property-properties.BaseProperty} in_property The property that constants are being applied to\n */\n _applyConstants(in_property) {\n this._applyConstantsRecursive(this.constantTree, in_property);\n };\n\n /**\n * Applies constants from the in_property on to the out_property\n * @param {Object} in_property The property whose constants will be transfered\n * @param {property-properties.BaseProperty} out_property The property that constants are being applied to\n */\n _applyConstantsRecursive(in_property, out_property) {\n if (out_property instanceof ContainerProperty) {\n if (in_property._constantChildren) {\n out_property._setConstants(in_property._constantChildren);\n }\n const children = in_property._staticChildren;\n if (!_.isUndefined(children)) {\n const keys = Object.keys(children);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n this._applyConstantsRecursive(children[key], out_property.get([key]));\n }\n }\n }\n };\n}\n"]}
1
+ {"version":3,"file":"propertyTemplateWrapper.js","sourceRoot":"","sources":["../src/propertyTemplateWrapper.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview\n * Declaration of the PropertyTemplateWrapper module\n * PropertyTemplateWrapper is used to wrap a property template and perform internal optimizations\n */\nconst _ = require('lodash');\nconst { ContainerProperty } = require('./properties/containerProperty');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\n\nconst reservedTypesWithoutTemplates = {\n 'BaseProperty': true,\n 'ContainerProperty': true,\n 'NodeProperty': true,\n 'Enum': true\n};\n/**\n * Utility function that validates if the typeid is a reserved type without a template.\n * @param {string} in_typeid The typeid to validate.\n * @return {boolean} True if the typeid is a reserved type without a template, false otherwise.\n */\nconst hasAssociatedTemplate = (in_typeid) => {\n return !reservedTypesWithoutTemplates[in_typeid];\n};\n\nexport class PropertyTemplateWrapper {\n\n /**\n * Constructor for creating a PropertyTemplateWrapper based on the given template.\n * @param {PropertyTemplate} in_remoteTemplate A property template\n * @param {string} in_scope The scope of the template\n *\n * @constructor\n * @package\n * @alias property-properties.PropertyTemplateWrapper\n * @category Properties\n */\n constructor(in_remoteTemplate, in_scope) {\n /** The property template this object is wrapping */\n this._propertyTemplate = in_remoteTemplate;\n\n /** A property template created from this.propertyTemplate with the addition of all information\n * from templates this template inherits from.\n */\n this._compiledPropertyTemplate = undefined;\n\n /* What type of base object is created for this template*/\n this._objectCreationType = undefined;\n\n /* The scope of this template*/\n this._scope = in_scope;\n };\n\n\n /**\n * To get the property template that this is wrapping.\n * @return {property-properties.PropertyTemplate} The template this wrapper contains\n * @package\n */\n getPropertyTemplate() {\n return this._propertyTemplate;\n };\n\n /**\n * Gets the compiled template or creates it then returns it.\n * @param {property-properties.PropertyFactory} in_propertyFactory The assosiated PropertyFactory.\n * @return {property-properties.PropertyTemplate} The compiled template\n * A compiled template is the template which is actually used for creating objects.\n * It has all information from parent Templates, and other changes.\n * @package\n */\n getCompiledTemplate(in_propertyFactory) {\n if (this._compiledPropertyTemplate === undefined) {\n this._compiledPropertyTemplate = this._contructCompiledTemplate(in_propertyFactory);\n }\n return this._compiledPropertyTemplate;\n };\n\n /**\n * Returns if the compiled template has been created.\n * @return {boolean} if the compiled template has been created\n * @package\n */\n hasCompiledTemplate() {\n return !!this._compiledPropertyTemplate;\n };\n\n /**\n * To get the creation type of the template this wraps.\n * @return {string} A typeid which represents the creation type of this template\n * @package\n */\n getCreationType() {\n return this._objectCreationType;\n };\n\n /**\n * If current creation type is undefined, sets it to in_typeid if in_typeid is a creation type.\n * If current creation type is defined, throws if in_typeid is a creation type.\n *\n * @param {string} in_typeid A typeid\n * @package\n */\n setCreationType(in_typeid) {\n // This function could be moved somewhere else, an enum could be made if this information is widely needed.\n const isCreationType = (typeid) => {\n const creationTypes =\n ['ContainerProperty', 'NodeProperty', 'Enum', 'BinaryProperty', 'Binary', 'RepositoryReferenceProperty'];\n return creationTypes.indexOf(typeid) !== -1;\n };\n\n if (isCreationType(in_typeid)) {\n const currentCreationType = this._objectCreationType;\n if (currentCreationType === undefined) {\n this._objectCreationType = in_typeid;\n } else if (currentCreationType !== in_typeid) {\n throw new Error(MSG.ONLY_ONE_CREATION_TYPE + currentCreationType + ', ' + in_typeid);\n }\n }\n };\n\n /**\n * Contructs the compiled template from the template this wraps\n * @param {property-properties.PropertyFactory} in_propertyFactory The associated PropertyFactory.\n * @return {property-properties.PropertyTemplate} The compiled template\n * A compiled template is the template which is actually used for creating objects.\n * It has all information from parent Templates, and other changes.\n * @package\n */\n _contructCompiledTemplate(in_propertyFactory) {\n const originalTemplate = this.getPropertyTemplate();\n\n this.setCreationType(originalTemplate.typeid);\n\n /* Because we treat templates and contructor functions for base types the same way :( */\n if (_.isFunction(originalTemplate)) {\n return originalTemplate;\n }\n\n let parentTemplateIds = originalTemplate.inherits;\n\n /* template.inherits can be a string, if so convert it to array of strings */\n if (typeof parentTemplateIds === 'string') {\n parentTemplateIds = [parentTemplateIds];\n }\n\n /* Cloning the original template to avoid modifying it */\n const template = originalTemplate.clone();\n\n /* Copy the proccesed list of parents to not modify the original */\n const typeInheritence = parentTemplateIds ? parentTemplateIds.slice() : [];\n\n /* Look ups to efficiently check what properties/constants parents have */\n const parentsPropertiesById = {};\n const parentsConstantsById = {};\n\n if (parentTemplateIds !== undefined) {\n for (let i = 0; i < parentTemplateIds.length; ++i) {\n const parentTemplateId = parentTemplateIds[i];\n this.setCreationType(parentTemplateId);\n\n if (hasAssociatedTemplate(parentTemplateId)) {\n const parentTemplateWrapper = in_propertyFactory._getWrapper(parentTemplateId, undefined, this._scope);\n if (parentTemplateWrapper) {\n const parentTemplate = parentTemplateWrapper.getCompiledTemplate(in_propertyFactory);\n const parentCreationType = parentTemplateWrapper.getCreationType();\n\n if (parentCreationType !== 'ContainerProperty') {\n this.setCreationType(parentCreationType);\n }\n\n if (parentTemplate.inherits) {\n typeInheritence.concat(parentTemplateId);\n }\n\n /* Fills parentsPropertiesById and makes sure there are no two properties or constants with the same id */\n if (parentTemplate.hasNestedProperties()) {\n const parentProperties = parentTemplate.properties;\n for (let j = 0; j < parentProperties.length; ++j) {\n const parentProperty = parentProperties[j];\n /* Two parents has child property with same id */\n if (parentsPropertiesById[parentProperty.id] || parentsConstantsById[parentProperty.id]) {\n throw new Error(MSG.OVERWRITING_ID + parentProperty.id);\n }\n parentsPropertiesById[parentProperty.id] = parentProperty;\n }\n }\n\n /* Fills parentsConsantsById and makes sure there are no two properties or constants with the same id */\n if (parentTemplate.hasNestedConstants()) {\n const parentConstants = parentTemplate.constants;\n for (let j = 0; j < parentConstants.length; ++j) {\n const parentConstant = parentConstants[j];\n /* Two parents has child property with same id */\n if (parentsConstantsById[parentConstant.id] || parentsPropertiesById[parentConstant.id]) {\n throw new Error(MSG.OVERWRITING_ID + parentConstant.id);\n }\n parentsConstantsById[parentConstant.id] = parentConstant;\n }\n }\n }\n }\n }\n }\n\n if (this._objectCreationType === undefined) {\n this.setCreationType('ContainerProperty');\n }\n\n /* Merges properties from parents into the properties of the child */\n const constructSubProperties = (in_template, in_parentsPropertiesById, fieldName) => {\n const propertyKeys = Object.keys(in_parentsPropertiesById);\n\n if (in_template[fieldName] === undefined && propertyKeys.length !== 0) {\n in_template[fieldName] = [];\n }\n\n const properties = in_template[fieldName] || [];\n\n for (let i = 0; i < properties.length; ++i) {\n const property = properties[i];\n const id = property.id;\n if (in_parentsPropertiesById[id]) {\n this._mergeProperty(property, in_parentsPropertiesById[id]);\n delete in_parentsPropertiesById[id];\n }\n }\n\n for (let i = 0; i < propertyKeys.length; ++i) {\n const insertProperty = in_parentsPropertiesById[propertyKeys[i]];\n if (insertProperty) {\n properties.push(insertProperty);\n }\n }\n\n if (properties.length > 0) {\n template[fieldName] = properties;\n }\n };\n\n constructSubProperties(template, parentsPropertiesById, 'properties');\n constructSubProperties(template, parentsConstantsById, 'constants');\n\n if (typeInheritence.length > 0) {\n template.inherits = typeInheritence;\n }\n\n return template;\n };\n\n /**\n * A helper function which merges a child and parent property.\n * The changes are applied directly to the in_childProperty.\n * @param {object} in_childProperty The child's property defition.\n * @param {object} in_parentProperty The parent's property defition.\n * @package\n */\n _mergeProperty(in_childProperty, in_parentProperty) {\n const mergeField = (child, parent, fieldName, defaultValue) => {\n if (child[fieldName] === undefined) {\n if (parent[fieldName] !== undefined) {\n child[fieldName] = parent[fieldName];\n }\n } else if (child[fieldName] !== parent[fieldName] &&\n (child[fieldName] !== defaultValue || parent[fieldName] !== undefined)) {\n throw new Error(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE + fieldName +\n ' as the base type: ' + child.id + ': ' + child[fieldName] + ' != ' + parent[fieldName]);\n }\n };\n\n mergeField(in_childProperty, in_parentProperty, 'context', 'single');\n mergeField(in_childProperty, in_parentProperty, 'contextKeyType', 'string');\n mergeField(in_childProperty, in_parentProperty, 'length', 0);\n mergeField(in_childProperty, in_parentProperty, 'optional', false);\n mergeField(in_childProperty, in_parentProperty, 'typeid', undefined);\n\n if (in_parentProperty.typedValue !== undefined) {\n if (in_childProperty.typedValue === undefined) {\n in_childProperty.typedValue = in_parentProperty.typedValue;\n }\n }\n\n if (in_parentProperty.value !== undefined) {\n if (in_childProperty.value === undefined) {\n in_childProperty.value = in_parentProperty.value;\n }\n }\n\n const mergeSubProperties = (child, parent, fieldName) => {\n const parentPropertiesById = {};\n let parentProperties = parent[fieldName];\n let properties = child[fieldName] || [];\n if (parentProperties) {\n for (let j = 0; j < parentProperties.length; ++j) {\n const parentProperty = parentProperties[j];\n parentPropertiesById[parentProperty.id] = parentProperty;\n }\n\n for (let i = 0; i < properties.length; ++i) {\n const property = properties[i];\n const id = property.id;\n if (parentPropertiesById[id]) {\n this._mergeProperty(property, parentPropertiesById[id]);\n delete parentPropertiesById[id];\n }\n }\n\n const propertyKeys = Object.keys(parentPropertiesById);\n for (let i = 0; i < propertyKeys.length; ++i) {\n const insertProperty = parentPropertiesById[propertyKeys[i]];\n if (insertProperty) {\n properties.push(insertProperty);\n }\n }\n }\n\n if (properties.length > 0) {\n child[fieldName] = properties;\n }\n };\n\n mergeSubProperties(in_childProperty, in_parentProperty, 'properties');\n mergeSubProperties(in_childProperty, in_parentProperty, 'constants');\n };\n}\n"]}
@@ -2071,7 +2071,7 @@ describe('PropertyFactory', function () {
2071
2071
  properties: [{ id: 'default', typeid: 'Uint32' }]
2072
2072
  };
2073
2073
  PropertyFactory.register(ConstantTemplateEntry);
2074
- PropertyFactory.register(ConstantTemplate);
2074
+ PropertyFactory._reregister(ConstantTemplate);
2075
2075
  var instance = PropertyFactory.create('SimpleTest:ConstantTemplate-1.0.0');
2076
2076
  expect(instance.get('template').get('num').getValue()).to.equal(111);
2077
2077
  expect(instance.get('template').get('dynamic').get('dynamic_string').getValue()).to.equal('I am a string');
@@ -2102,6 +2102,9 @@ describe('PropertyFactory', function () {
2102
2102
  expect(instance.get('set').getAsArray().length).to.equal(2);
2103
2103
  expect(instance.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');
2104
2104
  expect(instance.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');
2105
+ // All instances should share the same constant objects
2106
+ var instance2 = PropertyFactory.create('SimpleTest:ConstantSet-1.0.0');
2107
+ expect(instance.get('set') === instance2.get('set')).to.be.true;
2105
2108
  });
2106
2109
  it('should support primitive map constants', function () {
2107
2110
  var ConstantPrimitiveMap = {
@@ -2162,7 +2165,7 @@ describe('PropertyFactory', function () {
2162
2165
  ],
2163
2166
  properties: [{ id: 'default', typeid: 'Uint32' }]
2164
2167
  };
2165
- PropertyFactory.register(ConstantTemplate);
2168
+ PropertyFactory._reregister(ConstantTemplate);
2166
2169
  var instance = PropertyFactory.create('SimpleTest:ConstantTemplate-1.0.0');
2167
2170
  expect(instance.get('map')._contextKeyType).to.equal('typeid');
2168
2171
  expect(instance.get('map').get('SimpleTest:ConstantTemplate1-1.0.0')).to.equal(1);