@oracle/oraclejet-audit 14.1.4 → 15.0.0

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 (278) hide show
  1. package/corePackMigrator/cli.js +6 -0
  2. package/corePackMigrator/corePackMigrator.js +10 -0
  3. package/corePackMigrator/metadata/avatarMetadata.json +40 -0
  4. package/corePackMigrator/metadata/buttonMetadata.json +55 -0
  5. package/corePackMigrator/metadata/collapsibleMetadata.json +15 -0
  6. package/corePackMigrator/metadata/filePickerMetadata.json +8 -0
  7. package/corePackMigrator/metadata/inputNumberMetadata.json +56 -0
  8. package/corePackMigrator/metadata/inputPasswordMetadata.json +50 -0
  9. package/corePackMigrator/metadata/inputTextMetadata.json +62 -0
  10. package/corePackMigrator/metadata/legendItemMetadata.json +8 -0
  11. package/corePackMigrator/metadata/legendMetadata.json +18 -0
  12. package/corePackMigrator/metadata/legendSectionMetadata.json +8 -0
  13. package/corePackMigrator/metadata/listItemLayoutMetadata.json +15 -0
  14. package/corePackMigrator/metadata/listviewMetadata.json +8 -0
  15. package/corePackMigrator/metadata/messagesMetadata.json +35 -0
  16. package/corePackMigrator/metadata/progressBarMetadata.json +15 -0
  17. package/corePackMigrator/metadata/progressCircleMetadata.json +8 -0
  18. package/corePackMigrator/metadata/ratingGaugeMetadata.json +78 -0
  19. package/corePackMigrator/metadata/selectManyMetadata.json +39 -0
  20. package/corePackMigrator/metadata/selectSingleMetadata.json +39 -0
  21. package/corePackMigrator/metadata/statusMeterGaugeMetadata.json +99 -0
  22. package/corePackMigrator/metadata/textAreaMetadata.json +44 -0
  23. package/corePackMigrator/resource/astUtils.js +6 -0
  24. package/corePackMigrator/resource/componentMigrator.js +6 -0
  25. package/corePackMigrator/resource/fileScanner.js +6 -0
  26. package/corePackMigrator/resource/htmlUtils.js +6 -0
  27. package/corePackMigrator/resource/manifest.json +102 -0
  28. package/corePackMigrator/resource/migrationConfig.json +21 -0
  29. package/corePackMigrator/templates/componentMetaData.json +119 -0
  30. package/corePackMigrator/templates/migrationConfig.json +17 -0
  31. package/corePackMigrator/utilities/logging.js +6 -0
  32. package/jaf-amd.js +1 -1
  33. package/lib/AST_Ts.js +1 -1
  34. package/lib/Cli.js +1 -1
  35. package/lib/Components.js +1 -1
  36. package/lib/Config.js +1 -1
  37. package/lib/ConfigLib.js +1 -1
  38. package/lib/DomUtils.js +1 -1
  39. package/lib/FileIndex.js +1 -1
  40. package/lib/FileSet.js +1 -1
  41. package/lib/FsUtils.js +1 -1
  42. package/lib/HtmlUtils.js +1 -1
  43. package/lib/JsonLoader.js +1 -1
  44. package/lib/MetaLib.js +1 -1
  45. package/lib/NetUtils.js +1 -1
  46. package/lib/Parser.js +1 -1
  47. package/lib/RegTypes.js +1 -1
  48. package/lib/Registry.js +1 -1
  49. package/lib/Reporter.js +1 -1
  50. package/lib/RulePack.js +1 -1
  51. package/lib/RuleSet.js +1 -1
  52. package/lib/Rules.js +1 -1
  53. package/lib/Scope.js +1 -1
  54. package/lib/Ts.js +1 -1
  55. package/lib/TsxUtils.js +1 -1
  56. package/lib/TsxUtils2.js +6 -0
  57. package/lib/Utils.js +1 -1
  58. package/lib/ZipUtils.js +1 -1
  59. package/lib/checkage.js +1 -1
  60. package/lib/cmdline.js +1 -1
  61. package/lib/defaults.js +1 -1
  62. package/lib/exportRules.js +1 -1
  63. package/lib/filetypes.js +1 -1
  64. package/lib/groups.js +1 -1
  65. package/lib/help.js +1 -1
  66. package/lib/jetver.js +1 -1
  67. package/lib/jsx.js +1 -1
  68. package/lib/maint.js +6 -0
  69. package/lib/manpage.js +1 -1
  70. package/lib/manual.js +1 -1
  71. package/lib/migrator.js +6 -0
  72. package/lib/msgidLoader.js +1 -1
  73. package/lib/ns.js +1 -1
  74. package/lib/outfile.js +1 -1
  75. package/lib/schema.js +1 -1
  76. package/lib/scopewalker.js +1 -1
  77. package/libext/expparser.js +1 -1
  78. package/meta/14.0.0/jetauditmeta.js +1 -1
  79. package/meta/14.1.0/jetauditmeta.js +1 -1
  80. package/meta/15.0.0/jetauditmeta.js +9 -0
  81. package/meta/metaverlist.json +1 -1
  82. package/package.json +16 -8
  83. package/profiles/redwood-strict.json +2 -1
  84. package/rulepacks/csp/csp-html-script-unsafe-inline.js +1 -1
  85. package/rulepacks/csp/csp-html-unsafe-expr.js +1 -1
  86. package/rulepacks/csp/csp-js-script-unsafe-eval.js +1 -1
  87. package/rulepacks/csp/csp-js-style-unsafe-inline.js +1 -1
  88. package/rulepacks/csp/csp-json-unsafe-expr.js +6 -0
  89. package/rulepacks/csp/msgid.json +1 -1
  90. package/rulepacks/csp/rules.json +1 -1
  91. package/rulepacks/jetwc/jetwc-absolute-jetversion.js +1 -1
  92. package/rulepacks/jetwc/jetwc-aria-redefinition.js +1 -1
  93. package/rulepacks/jetwc/jetwc-bootstrap.js +1 -1
  94. package/rulepacks/jetwc/jetwc-compjson-bp-ar.js +1 -1
  95. package/rulepacks/jetwc/jetwc-compjson-bp-obj.js +1 -1
  96. package/rulepacks/jetwc/jetwc-component-dependencies.js +1 -1
  97. package/rulepacks/jetwc/jetwc-component-displayname.js +1 -1
  98. package/rulepacks/jetwc/jetwc-component-foldername.js +1 -1
  99. package/rulepacks/jetwc/jetwc-component-location.js +1 -1
  100. package/rulepacks/jetwc/jetwc-component-type.js +1 -1
  101. package/rulepacks/jetwc/jetwc-css-oj-complete.js +1 -1
  102. package/rulepacks/jetwc/jetwc-css-pack-load-path.js +6 -0
  103. package/rulepacks/jetwc/jetwc-css-scoping.js +1 -1
  104. package/rulepacks/jetwc/jetwc-data-property-prefix.js +1 -1
  105. package/rulepacks/jetwc/jetwc-deprecated-lifecycle.js +1 -1
  106. package/rulepacks/jetwc/jetwc-disabled-property.js +1 -1
  107. package/rulepacks/jetwc/jetwc-displayname.js +1 -1
  108. package/rulepacks/jetwc/jetwc-dynamic-slot-context.js +1 -1
  109. package/rulepacks/jetwc/jetwc-event-displayname.js +1 -1
  110. package/rulepacks/jetwc/jetwc-events.js +1 -1
  111. package/rulepacks/jetwc/jetwc-exchange-images.js +1 -1
  112. package/rulepacks/jetwc/jetwc-jet-version.js +1 -1
  113. package/rulepacks/jetwc/jetwc-loader-file.js +1 -1
  114. package/rulepacks/jetwc/jetwc-markdown-link.js +1 -1
  115. package/rulepacks/jetwc/jetwc-method-displayname.js +1 -1
  116. package/rulepacks/jetwc/jetwc-methods.js +1 -1
  117. package/rulepacks/jetwc/jetwc-namespace.js +1 -1
  118. package/rulepacks/jetwc/jetwc-nested-defaults.js +1 -1
  119. package/rulepacks/jetwc/jetwc-nls-languages.js +1 -1
  120. package/rulepacks/jetwc/jetwc-nls-root.js +1 -1
  121. package/rulepacks/jetwc/jetwc-oj-register.js +1 -1
  122. package/rulepacks/jetwc/jetwc-ojcss.js +1 -1
  123. package/rulepacks/jetwc/jetwc-pack-children.js +1 -1
  124. package/rulepacks/jetwc/jetwc-packable-components.js +1 -1
  125. package/rulepacks/jetwc/jetwc-prerelease-dependencies.js +1 -1
  126. package/rulepacks/jetwc/jetwc-prerelease-pattern.js +1 -1
  127. package/rulepacks/jetwc/jetwc-prerelease-version.js +1 -1
  128. package/rulepacks/jetwc/jetwc-property-changed.js +1 -1
  129. package/rulepacks/jetwc/jetwc-property-displayname.js +1 -1
  130. package/rulepacks/jetwc/jetwc-property-nesting.js +1 -1
  131. package/rulepacks/jetwc/jetwc-property-translatable.js +1 -1
  132. package/rulepacks/jetwc/jetwc-public-modules.js +1 -1
  133. package/rulepacks/jetwc/jetwc-reference-npm-path.js +6 -0
  134. package/rulepacks/jetwc/jetwc-register-css.js +1 -1
  135. package/rulepacks/jetwc/jetwc-register-with-promises.js +1 -1
  136. package/rulepacks/jetwc/jetwc-require-paths.js +1 -1
  137. package/rulepacks/jetwc/jetwc-required-subproperty.js +1 -1
  138. package/rulepacks/jetwc/jetwc-reserved-property.js +1 -1
  139. package/rulepacks/jetwc/jetwc-schema.js +1 -1
  140. package/rulepacks/jetwc/jetwc-semantic-version.js +1 -1
  141. package/rulepacks/jetwc/jetwc-slot-displayname.js +1 -1
  142. package/rulepacks/jetwc/jetwc-slots.js +1 -1
  143. package/rulepacks/jetwc/jetwc-standard-files.js +1 -1
  144. package/rulepacks/jetwc/jetwc-status-since.js +6 -0
  145. package/rulepacks/jetwc/jetwc-unused-events.js +1 -1
  146. package/rulepacks/jetwc/jetwc-unused-slots.js +1 -1
  147. package/rulepacks/jetwc/jetwc-vb-category.js +1 -1
  148. package/rulepacks/jetwc/jetwc-vb-icon.js +1 -1
  149. package/rulepacks/jetwc/jetwc-vcomponent-jetversion.js +1 -1
  150. package/rulepacks/jetwc/jetwc-vcomponent-loader.js +1 -1
  151. package/rulepacks/jetwc/jetwc-vcomponent-version.js +1 -1
  152. package/rulepacks/jetwc/jetwc-version-openrange.js +1 -1
  153. package/rulepacks/jetwc/jetwc-writeback-required.js +1 -1
  154. package/rulepacks/jetwc/msgid.json +1 -1
  155. package/rulepacks/jetwc/rules.json +1 -1
  156. package/rulepacks/jetwc-lib/jetwcutils-auditComponentCacheManager.js +1 -1
  157. package/rulepacks/jetwc-lib/jetwcutils-commonListenerImpls.js +1 -1
  158. package/rulepacks/jetwc-lib/jetwcutils-componentAuditUtils.js +1 -1
  159. package/rulepacks/jetwc-lib/jetwcutils-componentFinder.js +1 -1
  160. package/rulepacks/jetwc-lib/jetwcutils-preCompiler.js +1 -1
  161. package/rulepacks/jetwc-lib/jetwcutils-tsxUtils.js +1 -1
  162. package/rulepacks/jetwco/jetwco-bootstrap.js +1 -1
  163. package/rulepacks/jetwco/jetwco-cacc-componentType.js +1 -1
  164. package/rulepacks/jetwco/jetwco-cacc-dependencies.js +1 -1
  165. package/rulepacks/jetwco/jetwco-cacc-dynamicSlots.js +1 -1
  166. package/rulepacks/jetwco/jetwco-cacc-eventBubbles.js +1 -1
  167. package/rulepacks/jetwco/jetwco-cacc-eventCancelable.js +1 -1
  168. package/rulepacks/jetwco/jetwco-cacc-eventPayload.js +1 -1
  169. package/rulepacks/jetwco/jetwco-cacc-events.js +1 -1
  170. package/rulepacks/jetwco/jetwco-cacc-helpers.js +1 -1
  171. package/rulepacks/jetwco/jetwco-cacc-jetVer.js +1 -1
  172. package/rulepacks/jetwco/jetwco-cacc-methodParamTypes.js +1 -1
  173. package/rulepacks/jetwco/jetwco-cacc-methodParams.js +1 -1
  174. package/rulepacks/jetwco/jetwco-cacc-methodReturnType.js +1 -1
  175. package/rulepacks/jetwco/jetwco-cacc-methods.js +1 -1
  176. package/rulepacks/jetwco/jetwco-cacc-packBundle.js +1 -1
  177. package/rulepacks/jetwco/jetwco-cacc-packBundleContent.js +1 -1
  178. package/rulepacks/jetwco/jetwco-cacc-packContent.js +1 -1
  179. package/rulepacks/jetwco/jetwco-cacc-properties.js +1 -1
  180. package/rulepacks/jetwco/jetwco-cacc-propertyDefault.js +1 -1
  181. package/rulepacks/jetwco/jetwco-cacc-propertyEnumeration.js +1 -1
  182. package/rulepacks/jetwco/jetwco-cacc-propertyReadOnly.js +1 -1
  183. package/rulepacks/jetwco/jetwco-cacc-propertyRequired.js +1 -1
  184. package/rulepacks/jetwco/jetwco-cacc-propertyType.js +1 -1
  185. package/rulepacks/jetwco/jetwco-cacc-propertyWriteback.js +1 -1
  186. package/rulepacks/jetwco/jetwco-cacc-publicModules.js +1 -1
  187. package/rulepacks/jetwco/jetwco-cacc-slotDataVariable.js +1 -1
  188. package/rulepacks/jetwco/jetwco-cacc-slotDataVariableType.js +1 -1
  189. package/rulepacks/jetwco/jetwco-cacc-slots.js +1 -1
  190. package/rulepacks/jetwco/jetwco-cacc-styleClasses.js +1 -1
  191. package/rulepacks/jetwco/jetwco-cacc-styleVariables.js +1 -1
  192. package/rulepacks/jetwco/jetwco-cacc-typeMappingOverrides.js +6 -0
  193. package/rulepacks/jetwco/jetwco-compjson-ns-reg.js +1 -1
  194. package/rulepacks/jetwco/jetwco-component-api-baseline-changes.js +1 -1
  195. package/rulepacks/jetwco/jetwco-component-api-changes.js +1 -1
  196. package/rulepacks/jetwco/jetwco-component-api-controlled-changes.js +1 -1
  197. package/rulepacks/jetwco/jetwco-component-cdn.js +1 -1
  198. package/rulepacks/jetwco/jetwco-description-standards.js +1 -1
  199. package/rulepacks/jetwco/jetwco-displayname-standards.js +1 -1
  200. package/rulepacks/jetwco/jetwco-exchange-version-check.js +1 -1
  201. package/rulepacks/jetwco/jetwco-license-info.js +1 -1
  202. package/rulepacks/jetwco/jetwco-prerelease-cdn.js +1 -1
  203. package/rulepacks/jetwco/jetwco-thirdparty-ba.js +1 -1
  204. package/rulepacks/jetwco/msgid.json +1 -1
  205. package/rulepacks/jetwco/rules.json +1 -1
  206. package/rules/jaf/jaf-ts-noparser.js +6 -0
  207. package/rules/jaf/msgid.json +1 -1
  208. package/rules/jaf/rules.json +1 -1
  209. package/rules/jet/helpers/has-slot-name.js +1 -1
  210. package/rules/jet/helpers/style-selector.js +1 -1
  211. package/rules/jet/helpers/tsx/has-slot-name.js +6 -0
  212. package/rules/jet/msgid.json +1 -1
  213. package/rules/jet/oj-acc-aria-labelledby.js +1 -1
  214. package/rules/jet/oj-cca-compjson-bp-ar.js +1 -1
  215. package/rules/jet/oj-cca-compjson-bp-obj.js +1 -1
  216. package/rules/jet/oj-css-bp-dir-flow.js +1 -1
  217. package/rules/jet/oj-html-attr-$unique.js +1 -1
  218. package/rules/jet/oj-html-attr-expr-delims.js +6 -0
  219. package/rules/jet/oj-html-combo-converter.js +1 -1
  220. package/rules/jet/oj-html-file-pick-accept.js +1 -1
  221. package/rules/jet/oj-html-form-bindif.js +1 -1
  222. package/rules/jet/oj-html-input-isodate.js +1 -1
  223. package/rules/jet/oj-html-invalid-doctype.js +1 -1
  224. package/rules/jet/oj-html-msgs-cat-text.js +1 -1
  225. package/rules/jet/oj-html-ojattr-deprecated.js +1 -1
  226. package/rules/jet/oj-html-ojattr-enum-deprecated.js +1 -1
  227. package/rules/jet/oj-html-ojtag-deprecated.js +1 -1
  228. package/rules/jet/oj-html-ojtag-ns.js +1 -1
  229. package/rules/jet/oj-html-rating-gauge-track-resize.js +6 -0
  230. package/rules/jet/oj-html-self-close.js +1 -1
  231. package/rules/jet/oj-html-slot-deprecated.js +1 -1
  232. package/rules/jet/oj-html-slot-item-minmax.js +1 -1
  233. package/rules/jet/oj-html-slot-name.js +1 -1
  234. package/rules/jet/oj-html-slot-pref-content.js +1 -1
  235. package/rules/jet/oj-html-style.js +1 -1
  236. package/rules/jet/oj-html-stylesel.js +1 -1
  237. package/rules/jet/oj-html-tabbar-edge.js +6 -0
  238. package/rules/jet/oj-html-unsup-theme.js +1 -1
  239. package/rules/jet/oj-html-wctag-maintenance.js +1 -1
  240. package/rules/jet/oj-html-wctag-nested.js +1 -1
  241. package/rules/jet/oj-html-wctag-supersedes.js +6 -0
  242. package/rules/jet/oj-js-numconv-pattern.js +6 -0
  243. package/rules/jet/oj-ts-numconv-pattern.js +6 -0
  244. package/rules/jet/oj-tsx-5-tag-obs.js +1 -1
  245. package/rules/jet/oj-tsx-acc-avatar-aria-role.js +6 -0
  246. package/rules/jet/oj-tsx-acc-button-onclick.js +1 -1
  247. package/rules/jet/oj-tsx-aria-ojselector-labelledby.js +1 -1
  248. package/rules/jet/oj-tsx-aria-prop.js +1 -1
  249. package/rules/jet/oj-tsx-attr-req.js +1 -1
  250. package/rules/jet/oj-tsx-cca-tagname.js +1 -1
  251. package/rules/jet/oj-tsx-combo-converter.js +1 -1
  252. package/rules/jet/oj-tsx-databind-all.js +1 -1
  253. package/rules/jet/oj-tsx-dlg-title.js +1 -1
  254. package/rules/jet/oj-tsx-form-bindif.js +6 -0
  255. package/rules/jet/oj-tsx-form-noflex.js +6 -0
  256. package/rules/jet/oj-tsx-input-isodate.js +1 -1
  257. package/rules/jet/oj-tsx-ojattr-deprecated.js +6 -0
  258. package/rules/jet/oj-tsx-ojattr-enum-deprecated.js +6 -0
  259. package/rules/jet/oj-tsx-ojattr-value.js +1 -1
  260. package/rules/jet/oj-tsx-ojattr.js +1 -1
  261. package/rules/jet/oj-tsx-ojtag-deprecated.js +1 -1
  262. package/rules/jet/oj-tsx-ojtag-ns.js +6 -0
  263. package/rules/jet/oj-tsx-pageopts-type.js +1 -1
  264. package/rules/jet/oj-tsx-picker-attrs.js +1 -1
  265. package/rules/jet/oj-tsx-prop-inline-definition.js +1 -1
  266. package/rules/jet/oj-tsx-rating-gauge-size.js +1 -1
  267. package/rules/jet/oj-tsx-rating-gauge-track-resize.js +6 -0
  268. package/rules/jet/oj-tsx-slot-deprecated.js +6 -0
  269. package/rules/jet/oj-tsx-slot-pref-content.js +6 -0
  270. package/rules/jet/oj-tsx-tabbar-edge.js +6 -0
  271. package/rules/jet/oj-tsx-unsup-theme.js +1 -1
  272. package/rules/jet/oj-tsx-wctag-maintenance.js +1 -1
  273. package/rules/jet/oj-tsx-wctag-nested.js +1 -1
  274. package/rules/jet/rules.json +1 -1
  275. package/schema/component-schema.json +1 -1
  276. package/src/JafCore.js +1 -1
  277. package/types/index.d.ts +6 -4
  278. package/rules/jet/oj-html-cspexpr.js +0 -6
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const path=require('path');const Utils=require('../jetwc-lib/jetwcutils-componentAuditUtils');const componentFinder=require('../jetwc-lib/jetwcutils-componentFinder');const preCompiler=require('../jetwc-lib/jetwcutils-preCompiler');const ruleDef=function(){};ruleDef.prototype.getName=function(){return'jetwco-bootstrap'};ruleDef.prototype.getShortDescription=function(){return'Bootstrap processing for the JETWCO rulset'};ruleDef.prototype.getDescription=function(){return'This rule is for internal use by the ruleset and should not be disabled'};ruleDef.prototype.register=function(context){this.componentRoots=context.config.components;this.auditBase=context.config.base;this.typeScriptCompile=context.config.typescript&&context.config.typescript.compile;return{startupRP:this._getAllVisibleComponents,closedownRP:this._reportDiagnostics}};ruleDef.prototype._getAllVisibleComponents=function(context){const{msgLib}=context.utils;msgLib.info(`builtinJetWcOracleRules (${context.rulePack.getPackInfo().prefix}): ${context.rulePack.getPackInfo().version}`);const projectPathInfo=Utils.getKeyPathInfoForRulepack(context,this.auditBase);const componentRootFolder=context.rulePack.getRuleOptions().componentRoot||projectPathInfo.componentRootFolder;const exchangeURL=context.rulePack.getRuleOptions().exchangeURL;let precompileCache;if(this.typeScriptCompile){precompileCache=preCompiler.getPrecompileCacheIfNeeded(context,this.auditBase,projectPathInfo.tsSource,projectPathInfo.componentRootFolder)}const masterComponentList=componentFinder.findAllComponents(context,projectPathInfo,this.componentRoots,precompileCache);if(masterComponentList&&masterComponentList.length>0){const allComponentsMap=masterComponentList.reduce((wmap,component)=>{if(!projectPathInfo.isBuiltOutput||projectPathInfo.isBuiltOutput&&!wmap.has(component.fullName)){wmap.set(component.fullName,component)}return wmap},new Map);const referenceComponents=new Map;const componentPaths=new Map;allComponentsMap.forEach(component=>{component.language=Utils.detectComponentSourceType(context,component.rootFolder);switch(component.type){case'reference':referenceComponents.set(component.fullName,component.ba);break;case'composite':case'resource':if(component.local){if(component.dependencies){Object.values(component.dependencies).forEach(dependencyName=>{if(allComponentsMap.has(dependencyName)){const proxyPaths=allComponentsMap.get(dependencyName).requirePaths;proxyPaths.forEach(path=>{component.requirePaths.add(path)})}})}componentPaths.set(component.rootFolder,component.fullName)}break;}});context.rulePack.setExtension({rulepackVersion:context.rulePack.getPackInfo().version,bootStrap:true,exchangeURL:exchangeURL,platform:Utils.isWindows?'Windows':'Unix-like',precompiled:this.typeScriptCompile,componentHome:`/${componentRootFolder}/`,auditBuildOutput:projectPathInfo.isBuiltOutput,discoveredPaths:projectPathInfo,componentRoots:this.componentRoots,allReferenceComponents:referenceComponents,allComponents:allComponentsMap,auditableComponentPaths:componentPaths,allAuditableFilePaths:new Map})}else{msgLib.error(`No components have been discovered from the JAF configuration for the ${context.rulePack.getPackInfo().prefix} ruleset to process. You will need to configure the "components" array to point at your component root folder`);Utils.disableRulePack(context)}};ruleDef.prototype._reportDiagnostics=function(context){const msgLib=context.utils.msgLib;const opts=context.rulePack.getRuleOptions();const diagnostics=context.rulePack.getExtension();if(!opts.testMode){let foundVMMapping=0;let candidateLocal=0;if(diagnostics&&diagnostics.allComponents&&diagnostics.allComponents.length>0){diagnostics.allComponents.forEach((component,compName)=>{if(component.local&&component.type==='composite'){candidateLocal++;if(component.viewModel&&component.viewModel.resolved){foundVMMapping++}}});if(foundVMMapping!==candidateLocal){msgLib.error(`Error: Audit was only able to map ${foundVMMapping} out of ${candidateLocal} components to their viewModels. Some audits will be unable to operate.`)}}}if(opts.debug&&opts.diagnosticFile&&diagnostics){msgLib.msg(`Writing JETWCO diagnostics to ${opts.diagnosticFile}.json`);const dFile=Utils.toJAFPath(path.join(path.resolve('.'),opts.diagnosticFile+'.json'));context.utils.fsUtils.writeJsonSync(diagnostics,dFile,{spaces:2,replacer:Utils.diagnosticReplacer})}};module.exports=ruleDef;
6
+ const path=require("path");const Utils=require("../jetwc-lib/jetwcutils-componentAuditUtils");const componentFinder=require("../jetwc-lib/jetwcutils-componentFinder");const preCompiler=require("../jetwc-lib/jetwcutils-preCompiler");const ruleDef=function(){};ruleDef.prototype.getName=function(){return"jetwco-bootstrap"};ruleDef.prototype.getShortDescription=function(){return"Bootstrap processing for the JETWCO rulset"};ruleDef.prototype.getDescription=function(){return"This rule is for internal use by the ruleset and should not be disabled"};ruleDef.prototype.register=function(context){this.componentRoots=context.config.components;this.auditBase=context.config.base;this.typeScriptCompile=context.config.typescript&&context.config.typescript.compile;return{startupRP:this._getAllVisibleComponents,closedownRP:this._reportDiagnostics}};ruleDef.prototype._getAllVisibleComponents=function(context){const{msgLib}=context.utils;msgLib.info(`builtinJetWcOracleRules (${context.rulePack.getPackInfo().prefix}): ${context.rulePack.getPackInfo().version}`);const projectPathInfo=Utils.getKeyPathInfoForRulepack(context,this.auditBase);const componentRootFolder=context.rulePack.getRuleOptions().componentRoot||projectPathInfo.componentRootFolder;const exchangeURL=context.rulePack.getRuleOptions().exchangeURL;let precompileCache;if(this.typeScriptCompile&&projectPathInfo.tsSource){precompileCache=preCompiler.getPrecompileCacheIfNeeded(context,this.auditBase,projectPathInfo.tsSource,projectPathInfo.componentRootFolder)}const masterComponentList=componentFinder.findAllComponents(context,projectPathInfo,this.componentRoots,precompileCache);if(masterComponentList&&masterComponentList.length>0){const allComponentsMap=masterComponentList.reduce((wmap,component)=>{if(!projectPathInfo.isBuiltOutput||projectPathInfo.isBuiltOutput&&!wmap.has(component.fullName)){wmap.set(component.fullName,component)}return wmap},new Map);const referenceComponents=new Map;const componentPaths=new Map;allComponentsMap.forEach(component=>{component.language=Utils.detectComponentSourceType(context,component.rootFolder);switch(component.type){case"reference":referenceComponents.set(component.fullName,component.ba);break;case"composite":case"resource":if(component.local){if(component.dependencies){Object.values(component.dependencies).forEach(dependencyName=>{if(allComponentsMap.has(dependencyName)){const proxyPaths=allComponentsMap.get(dependencyName).requirePaths;proxyPaths.forEach(path=>{component.requirePaths.add(path)})}})}componentPaths.set(component.rootFolder,component.fullName)}break}});context.rulePack.setExtension({rulepackVersion:context.rulePack.getPackInfo().version,bootStrap:true,exchangeURL:exchangeURL,platform:Utils.isWindows?"Windows":"Unix-like",precompiled:this.typeScriptCompile,componentHome:`/${componentRootFolder}/`,auditBuildOutput:projectPathInfo.isBuiltOutput,discoveredPaths:projectPathInfo,componentRoots:this.componentRoots,allReferenceComponents:referenceComponents,allComponents:allComponentsMap,auditableComponentPaths:componentPaths,allAuditableFilePaths:new Map})}else{msgLib.error(`No components have been discovered from the JAF configuration for the ${context.rulePack.getPackInfo().prefix} ruleset to process. You will need to configure the "components" array to point at your component root folder`);Utils.disableRulePack(context)}};ruleDef.prototype._reportDiagnostics=function(context){const msgLib=context.utils.msgLib;const opts=context.rulePack.getRuleOptions();const diagnostics=context.rulePack.getExtension();if(!opts.testMode){let foundVMMapping=0;let candidateLocal=0;if(diagnostics&&diagnostics.allComponents&&diagnostics.allComponents.length>0){diagnostics.allComponents.forEach((component,compName)=>{if(component.local&&component.type==="composite"){candidateLocal++;if(component.viewModel&&component.viewModel.resolved){foundVMMapping++}}});if(foundVMMapping!==candidateLocal){msgLib.error(`Error: Audit was only able to map ${foundVMMapping} out of ${candidateLocal} components to their viewModels. Some audits will be unable to operate.`)}}}if(opts.debug&&opts.diagnosticFile&&diagnostics){msgLib.msg(`Writing JETWCO diagnostics to ${opts.diagnosticFile}.json`);const dFile=Utils.toJAFPath(path.join(path.resolve("."),opts.diagnosticFile+".json"));context.utils.fsUtils.writeJsonSync(diagnostics,dFile,{spaces:2,replacer:Utils.diagnosticReplacer})}};module.exports=ruleDef;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){const currentType=componentType?componentType:'composite';const compareType=compareMetadata.type?compareMetadata.type:'composite';if(currentType!=compareType){return`Component type has been changed from ${compareType} to ${currentType} for${errorMsgContext}'never'`}return};module.exports=controlCallback;
6
+ function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){const currentType=componentType?componentType:"composite";const compareType=compareMetadata.type?compareMetadata.type:"composite";if(currentType!=compareType){return`Component type has been changed from ${compareType} to ${currentType} for${errorMsgContext}'never'`}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(['composite','resource','vbcs-pattern'].includes(componentType)){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const diffs=CaccHelpers.dependenciesDiff(metadata.dependencies,compareMetadata.dependencies);if(CaccHelpers.checkConstraintMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Dependencies ${diffs.add.map(dep=>dep.dependency).join(', ')} added to${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMinorMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Dependencies ${diffs.remove.map(dep=>dep.dependency).join(', ')} removed from${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){diffs.mutate.forEach(mutation=>{const mutationVersionDiff=CaccHelpers.semanticDiff(semver,mutation.version,mutation.historicalVersion);switch(mutateConstraint){case VC.NEVER:errorConditions.push(`Dependency ${mutation.dependency} version change in${errorMsgContext}'${mutateConstraint}'`);break;case VC.SEMVER:case VC.PATCH:if(mutationVersionDiff>componentVersionDiff){errorConditions.push(`Dependency ${mutation.dependency}@${mutation.historicalVersion}->${mutation.version} change in${errorMsgContext}'${mutateConstraint}'`)}break;case VC.MINOR:if(componentVersionDiff<3||mutationVersionDiff>componentVersionDiff){errorConditions.push(`Dependency ${mutation.dependency}@${mutation.historicalVersion}->${mutation.version} change in${errorMsgContext}'${mutateConstraint}'`)}break;default:if(componentVersionDiff<4){errorConditions.push(`Dependency ${mutation.dependency}@${mutation.historicalVersion}->${mutation.version} change in${errorMsgContext}'${mutateConstraint}'`)}break;}})}if(errorConditions.length>0){return errorConditions.join('/n')}}return};module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(["composite","resource","vbcs-pattern"].includes(componentType)){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const diffs=CaccHelpers.dependenciesDiff(metadata.dependencies,compareMetadata.dependencies);if(CaccHelpers.checkConstraintMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Dependencies ${diffs.add.map(dep=>dep.dependency).join(", ")} added to${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMinorMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Dependencies ${diffs.remove.map(dep=>dep.dependency).join(", ")} removed from${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){diffs.mutate.forEach(mutation=>{const mutationVersionDiff=CaccHelpers.semanticDiff(semver,mutation.version,mutation.historicalVersion);switch(mutateConstraint){case VC.NEVER:errorConditions.push(`Dependency ${mutation.dependency} version change in${errorMsgContext}'${mutateConstraint}'`);break;case VC.SEMVER:case VC.PATCH:if(mutationVersionDiff>componentVersionDiff){errorConditions.push(`Dependency ${mutation.dependency}@${mutation.historicalVersion}->${mutation.version} change in${errorMsgContext}'${mutateConstraint}'`)}break;case VC.MINOR:if(componentVersionDiff<3||mutationVersionDiff>componentVersionDiff){errorConditions.push(`Dependency ${mutation.dependency}@${mutation.historicalVersion}->${mutation.version} change in${errorMsgContext}'${mutateConstraint}'`)}break;default:if(componentVersionDiff<4){errorConditions.push(`Dependency ${mutation.dependency}@${mutation.historicalVersion}->${mutation.version} change in${errorMsgContext}'${mutateConstraint}'`)}break}})}if(errorConditions.length>0){return errorConditions.join("/n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorCondition;if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;let flagDiff,errorState;if(metadata.hasOwnProperty('dynamicSlots')){if(!compareMetadata.hasOwnProperty('dynamicSlots')){flagDiff='added to';switch(addConstraint){case VC.NEVER:errorState=true;break;case VC.SEMVER:case VC.PATCH:case VC.MINOR:if(componentVersionDiff<3){errorState=true}break;default:if(componentVersionDiff<4){errorState=true}break;}}}else if(compareMetadata.hasOwnProperty('dynamicSlots')){flagDiff='removed from';let errorState=false;switch(removeConstraint){case VC.NEVER:errorState=true;break;default:if(componentVersionDiff<4){errorState=true}break;}}if(errorState){errorCondition=`dynamicSlots marker ${flagDiff}${errorMsgContext}'${removeConstraint}'`}}return errorCondition};module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorCondition;if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;let flagDiff,errorState;if(metadata.hasOwnProperty("dynamicSlots")){if(!compareMetadata.hasOwnProperty("dynamicSlots")){flagDiff="added to";switch(addConstraint){case VC.NEVER:errorState=true;break;case VC.SEMVER:case VC.PATCH:case VC.MINOR:if(componentVersionDiff<3){errorState=true}break;default:if(componentVersionDiff<4){errorState=true}break}}}else if(compareMetadata.hasOwnProperty("dynamicSlots")){flagDiff="removed from";let errorState=false;switch(removeConstraint){case VC.NEVER:errorState=true;break;default:if(componentVersionDiff<4){errorState=true}break}}if(errorState){errorCondition=`dynamicSlots marker ${flagDiff}${errorMsgContext}'${removeConstraint}'`}}return errorCondition};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.events,compareMetadata.events,'bubbles',true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Event bubble flag set on ${diffs.add.map(addition=>addition.name).join(', ')} event(s) in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Event bubble flag unset on ${diffs.remove.map(removal=>removal.name).join(', ')} event(s) in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.events,compareMetadata.events,"bubbles",true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Event bubble flag set on ${diffs.add.map(addition=>addition.name).join(", ")} event(s) in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Event bubble flag unset on ${diffs.remove.map(removal=>removal.name).join(", ")} event(s) in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.events,compareMetadata.events,'cancelable',true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Event cancelable flag set on ${diffs.add.map(addition=>addition.name).join(', ')} event(s) in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Event cancelable flag unset on ${diffs.remove.map(removal=>removal.name).join(', ')} event(s) in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.events,compareMetadata.events,"cancelable",true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Event cancelable flag set on ${diffs.add.map(addition=>addition.name).join(", ")} event(s) in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Event cancelable flag unset on ${diffs.remove.map(removal=>removal.name).join(", ")} event(s) in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;if(metadata.hasOwnProperty('events')&&compareMetadata.hasOwnProperty('events')){for(const[eventName,eventDef]of Object.entries(metadata.events)){if(compareMetadata.events.hasOwnProperty(eventName)){const diffs=CaccHelpers.apiDiff(eventDef.detail,compareMetadata.events[eventName].detail);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Detail attribute(s) ${diffs.add.map(addition=>addition.name).join(', ')} added to ${eventName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Detail attribute(s) ${diffs.remove.map(removal=>removal.name).join(', ')} removed from ${eventName} in ${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){diffs.mutate.forEach(mutation=>{const mdType=eventDef.detail[mutation.name].type;const historicalType=compareMetadata.events[eventName].detail[mutation.name].type;if(mdType!==historicalType){if(mutateConstraint===VC.NEVER||componentVersionDiff<4){errorConditions.push(`Detail attribute type change for ${mutation.name} in ${eventName} in${errorMsgContext}'${mutateConstraint}'`)}}})}}}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;if(metadata.hasOwnProperty("events")&&compareMetadata.hasOwnProperty("events")){for(const[eventName,eventDef]of Object.entries(metadata.events)){if(compareMetadata.events.hasOwnProperty(eventName)){const diffs=CaccHelpers.apiDiff(eventDef.detail,compareMetadata.events[eventName].detail);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Detail attribute(s) ${diffs.add.map(addition=>addition.name).join(", ")} added to ${eventName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Detail attribute(s) ${diffs.remove.map(removal=>removal.name).join(", ")} removed from ${eventName} in ${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){diffs.mutate.forEach(mutation=>{const mdType=eventDef.detail[mutation.name].type;const historicalType=compareMetadata.events[eventName].detail[mutation.name].type;if(mdType!==historicalType){if(mutateConstraint===VC.NEVER||componentVersionDiff<4){errorConditions.push(`Detail attribute type change for ${mutation.name} in ${eventName} in${errorMsgContext}'${mutateConstraint}'`)}}})}}}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){return CaccHelpers.sharedMapAPICallback('events',controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings)};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){return CaccHelpers.sharedMapAPICallback("events",controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings)};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');function calcRequiredVersionMatrix(controlProfile){const requiredVersions={patch:false,minor:false,major:false,major2:false,major3:false};for(const[auditCheck,ops]of Object.entries(controlProfile)){for(const[op,opDef]of Object.entries(ops)){if(['add','remove','mutate'].includes(op)){switch(opDef){case VC.SEMVER:requiredVersions.patch=true;requiredVersions.minor=true;requiredVersions.major=true;break;case VC.NEVER:break;case VC.PATCH:requiredVersions.patch=true;break;case VC.MINOR:requiredVersions.minor=true;break;case VC.MAJOR:case VC.MAJOR_DEPRECATED:requiredVersions.major=true;break;case VC.MAJOR_2_DEPRECATED:requiredVersions.major2=true;break;case VC.MAJOR_3_DEPRECATED:requiredVersions.major3=true;break;}}}}return requiredVersions}function dependenciesDiff(compareDependencies,historicalDependencies){const compare=compareDependencies?compareDependencies:{};const historical=historicalDependencies?historicalDependencies:{};const diffs={add:[],remove:[],mutate:[]};for(const[dependency,dependencyVersion]of Object.entries(compare)){if(historical.hasOwnProperty(dependency)){if(dependencyVersion!==historical[dependency]){diffs.mutate.push({dependency:dependency,version:dependencyVersion,historicalVersion:historical[dependency]})}}else{diffs.add.push({dependency:dependency,version:dependencyVersion})}}for(const[dependency,dependencyVersion]of Object.entries(historical)){if(!compare.hasOwnProperty(dependency)){diffs.remove.push({dependency:dependency,version:dependencyVersion})}}return diffs}function apiDiff(compareAPI,historicalAPI){const compare=compareAPI?compareAPI:{};const historical=historicalAPI?historicalAPI:{};const diffs={add:[],remove:[],mutate:[]};for(const[apiName,definition]of Object.entries(compare)){if(historical.hasOwnProperty(apiName)){if(JSON.stringify(definition)!==JSON.stringify(historical[apiName])){diffs.mutate.push({name:apiName,definition:definition,historicalDefinition:historical[apiName]})}}else{diffs.add.push({name:apiName,definition:definition})}}for(const[apiName,definition]of Object.entries(historical)){if(!compare.hasOwnProperty(apiName)){diffs.remove.push({name:apiName,definition:definition})}}return diffs}function mapAttributesDiff(compareMap,historicalMap,attributeKey,isBooleanFlagAttribute){const compare=compareMap?compareMap:{};const historical=historicalMap?historicalMap:{};const diffs={add:[],remove:[],mutate:[]};for(const[entryName,entryDef]of Object.entries(compare)){if(historical.hasOwnProperty(entryName)){const matchingHistoricalDef=historical[entryName];if(entryDef.hasOwnProperty(attributeKey)){if(!matchingHistoricalDef.hasOwnProperty(attributeKey)){if(!isBooleanFlagAttribute){diffs.add.push({name:entryName,value:entryDef[attributeKey]})}else if(entryDef[attributeKey]){diffs.add.push({name:entryName,value:true})}}else if(JSON.stringify(entryDef[attributeKey])!==JSON.stringify(matchingHistoricalDef[attributeKey])){if(!isBooleanFlagAttribute){diffs.mutate.push({name:entryName,value:entryDef[attributeKey],historicalValue:matchingHistoricalDef[attributeKey]})}else{if(entryDef[attributeKey]){diffs.add.push({name:entryName,value:true,historicalValue:false})}else{diffs.remove.push({name:entryName,value:false,historicalValue:true})}}}}else if(matchingHistoricalDef.hasOwnProperty(attributeKey)){if(!isBooleanFlagAttribute){diffs.remove.push({name:entryName,historicalValue:matchingHistoricalDef[attributeKey]})}else if(matchingHistoricalDef[attributeKey]){diffs.remove.push({name:entryName,historicalValue:true})}}}}return diffs}function typeDiff(currentTypeDef,compareTypeDef,overrideTypeMappings){const currentStr=currentTypeDef?currentTypeDef:'';const historicalStr=compareTypeDef?compareTypeDef:'';const diffs={add:[],remove:[],mutate:[]};const current=currentStr.split('|').map(type=>trimAndRefactor(type,overrideTypeMappings)).filter(type=>type!=='null');const historical=historicalStr.split('|').map(type=>trimAndRefactor(type,overrideTypeMappings)).filter(type=>type!=='null');if(current.length===1&&historical.length===1){if(current[0]!==historical[0]){diffs.mutate.push({type:current[0],historicalType:historical[0]})}}else{current.forEach(checkType=>{if(!historical.includes(checkType)){diffs.add.push({type:checkType})}});historical.forEach(checkType=>{if(!current.includes(checkType)){diffs.remove.push({historicalType:checkType})}})}return diffs}function trimAndRefactor(inputType,overrideTypeMappings){let cleanedString=inputType.trim();;if(overrideTypeMappings.hasOwnProperty(cleanedString)){cleanedString=overrideTypeMappings[cleanedString]}return cleanedString}function stringArrayDiff(currentArray,compareArray){const compare=Array.isArray(currentArray)?currentArray:[];const historical=Array.isArray(compareArray)?compareArray:[];const diffs={add:[],remove:[]};compare.forEach(arrayEntry=>{if(!historical.includes(arrayEntry)){diffs.add.push(arrayEntry)}});historical.forEach(arrayEntry=>{if(!compare.includes(arrayEntry)){diffs.remove.push(arrayEntry)}});return diffs}function incrementMajorToMaxSupported(semver,startFrom,supportedRange){let{major:testMajor}=semver.parse(startFrom);let lastSupported=startFrom;while(semver.satisfiesRange(`${++testMajor}.0.0`,supportedRange)){lastSupported=semver.parse(`${testMajor}.0.0`)}return lastSupported}function deriveConstraintMetadata(baseline,constraint){let requiredConstraint=constraint;if(!constraint||constraint===VC.SEMVER){requiredConstraint=VC.LATEST}return baseline[requiredConstraint].metadata}function semanticDiff(semver,firstVersion,secondVersion){let diff=null;const first=tolerantSemverParse(semver,firstVersion);const second=tolerantSemverParse(semver,secondVersion);if(first&&second){if(semver.eq(first.version,second.version)){diff=0}else{const modifier=semver.gte(first.version,second.version)?1:-1;if(first.major!==second.major){diff=4}else if(first.minor!==second.minor){diff=3}else if(first.patch!==second.patch){diff=2}else{diff=1}diff=diff*modifier}}return diff}function tolerantSemverParse(semver,versionString){let parsed=null;if(semver.isValid(versionString)){parsed=semver.parse(versionString)}else if(semver.isValidRange(versionString)){parsed=semver.minVersion(versionString)}return parsed}function isMarkedAsDeprecated(cacheManager,componentName,version,scope,versionMetadata,statusTarget,statusValue){let deprecated=false;let metadata=versionMetadata;if(!metadata){metadata=cacheManager.getComponentMetadata(componentName,version)}if(metadata){let checkScope=castToScope(metadata,scope);if(checkScope&&checkScope.hasOwnProperty('status')){checkScope.status.forEach(statusRecord=>{if(statusRecord.type==='deprecated'){if(!statusTarget&&!statusRecord.target){deprecated=true}else if(statusRecord.target===statusTarget){if(Array.isArray(statusRecord.value)){statusRecord.value.forEach(srv=>{if(srv===statusValue){deprecated=true}})}}}})}}return deprecated}function castToScope(rootObject,scope){if(scope&&Array.isArray(scope)&&scope.length>0){const scopes=scope.slice();let workingObj=rootObject;while(workingObj&&scopes.length>0){let scopeKey=scopes.shift();if(scopeKey.startsWith('[')){if(Array.isArray(workingObj)){let match=scopeKey.slice(1,-1).split(':');workingObj=workingObj.find(row=>row[match[0]]===match[1])}else{return}}else{workingObj=workingObj[scopeKey]}}return workingObj}else{return rootObject}}function getPrintScope(scopeArray){const workingScope=scopeArray.slice(1);const printScope=workingScope.reduce((scopeString,scopeEntry)=>{return`${scopeString}${scopeEntry==='properties'?'.':scopeEntry}`},'');return printScope}function getComponentFullName(metadata){return metadata.pack?metadata.pack+'-'+metadata.name:metadata.name}function getStdErrorContext(componentName,controlRuleName){return` component ${componentName} in contradiction of ${controlRuleName} API change constraint of `}function sharedMapAPICallback(apiName,controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext){let errorConditions=[];if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const removeControlMetadata=deriveConstraintMetadata(baselines,removeConstraint);const diffs=apiDiff(metadata[apiName],compareMetadata[apiName]);if(checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`${apiName} ${diffs.add.map(added=>added.name).join(', ')} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return[apiName,diff.name]});if(removeErrors.length>0){errorConditions.push(`${apiName} ${removeErrors.map(removed=>removed.name).join(', ')} removed from${errorMsgContext}'${removeConstraint}'`)}return errorConditions.join('\n')}};function flattenArrayByAttr(arrayOfObjects,keyAttrName){if(Array.isArray(arrayOfObjects)){return arrayOfObjects.map(instance=>instance[keyAttrName])}else{return[]}}function checkConstraintMajor(verbDiffs,constraint,versionDiff){let errorFlag=false;if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorFlag=true;break;default:if(versionDiff<4){errorFlag=true}break;}}return errorFlag}function checkConstraintMajorWithDeprecation(verbDiffs,constraint,versionDiff,cacheManager,componentName,controlMetadata,scopeFn,statusTarget,statusValueFn){let errorDiffs=[];if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorDiffs=verbDiffs;break;case VC.PATCH:case VC.SEMVER:case VC.MINOR:case VC.MAJOR:if(versionDiff<4){errorDiffs=verbDiffs}break;default:if(versionDiff<4||!controlMetadata){errorDiffs=verbDiffs}else{verbDiffs.forEach(diff=>{const diffScope=scopeFn.call(this,diff);let statusValue;if(statusValueFn){statusValue=statusValueFn.call(this,diff)}if(!isMarkedAsDeprecated(cacheManager,componentName,controlMetadata.version,diffScope,controlMetadata,statusTarget,statusValue)){errorDiffs.push(diff)}})}break;}}return errorDiffs}function checkConstraintMinorMajor(verbDiffs,constraint,versionDiff){let errorFlag=false;if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorFlag=true;break;case VC.SEMVER:case VC.PATCH:case VC.MINOR:if(versionDiff<3){errorFlag=true}break;default:if(versionDiff<4){errorFlag=true}break;}}return errorFlag}function checkConstraintMinorMajorWithDeprecation(verbDiffs,constraint,versionDiff,cacheManager,componentName,controlMetadata,scopeFn,statusTarget,statusValueFn){let errorDiffs=[];if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorDiffs=verbDiffs;break;case VC.PATCH:case VC.SEMVER:case VC.MINOR:if(versionDiff<3){errorDiffs=verbDiffs}break;case VC.MAJOR:if(versionDiff<4){errorDiffs=verbDiffs}break;default:if(versionDiff<4||!controlMetadata){errorDiffs=verbDiffs}else{verbDiffs.forEach(diff=>{const diffScope=scopeFn.call(this,diff);let statusValue;if(statusValueFn){statusValue=statusValueFn.call(this,diff)}if(!isMarkedAsDeprecated(cacheManager,componentName,controlMetadata.version,diffScope,controlMetadata,statusTarget,statusValue)){errorDiffs.push(diff)}})}break;}}return errorDiffs}function checkConstraintPatchMajor(verbDiffs,constraint,versionDiff){let errorFlag=false;if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorFlag=true;break;case VC.PATCH:if(versionDiff<2){errorFlag=true}break;case VC.SEMVER:case VC.MINOR:if(versionDiff<3){errorFlag=true}break;default:if(versionDiff<4){errorFlag=true}break;}}return errorFlag}module.exports={calcRequiredVersionMatrix,dependenciesDiff,apiDiff,mapAttributesDiff,typeDiff,stringArrayDiff,incrementMajorToMaxSupported,deriveConstraintMetadata,semanticDiff,tolerantSemverParse,isMarkedAsDeprecated,castToScope,getPrintScope,getComponentFullName,getStdErrorContext,sharedMapAPICallback,flattenArrayByAttr,checkConstraintMajor,checkConstraintMajorWithDeprecation,checkConstraintMinorMajor,checkConstraintMinorMajorWithDeprecation,checkConstraintPatchMajor};
6
+ const VC=require("./jetwco-cacc-auditConstraints");const{fuzzyTypeMatch,generateFuzzyHistorical,generateFuzzyCurrent}=require("./jetwco-cacc-typeMappingOverrides");function calcRequiredVersionMatrix(controlProfile){const requiredVersions={patch:false,minor:false,major:false,major2:false,major3:false};for(const[auditCheck,ops]of Object.entries(controlProfile)){for(const[op,opDef]of Object.entries(ops)){if(["add","remove","mutate"].includes(op)){switch(opDef){case VC.SEMVER:requiredVersions.patch=true;requiredVersions.minor=true;requiredVersions.major=true;break;case VC.NEVER:break;case VC.PATCH:requiredVersions.patch=true;break;case VC.MINOR:requiredVersions.minor=true;break;case VC.MAJOR:case VC.MAJOR_DEPRECATED:requiredVersions.major=true;break;case VC.MAJOR_2_DEPRECATED:requiredVersions.major2=true;break;case VC.MAJOR_3_DEPRECATED:requiredVersions.major3=true;break}}}}return requiredVersions}function dependenciesDiff(compareDependencies,historicalDependencies){const compare=compareDependencies?compareDependencies:{};const historical=historicalDependencies?historicalDependencies:{};const diffs={add:[],remove:[],mutate:[]};for(const[dependency,dependencyVersion]of Object.entries(compare)){if(historical.hasOwnProperty(dependency)){if(dependencyVersion!==historical[dependency]){diffs.mutate.push({dependency:dependency,version:dependencyVersion,historicalVersion:historical[dependency]})}}else{diffs.add.push({dependency:dependency,version:dependencyVersion})}}for(const[dependency,dependencyVersion]of Object.entries(historical)){if(!compare.hasOwnProperty(dependency)){diffs.remove.push({dependency:dependency,version:dependencyVersion})}}return diffs}function apiDiff(compareAPI,historicalAPI){const compare=compareAPI?compareAPI:{};const historical=historicalAPI?historicalAPI:{};const diffs={add:[],remove:[],mutate:[]};for(const[apiName,definition]of Object.entries(compare)){if(historical.hasOwnProperty(apiName)){if(JSON.stringify(definition)!==JSON.stringify(historical[apiName])){diffs.mutate.push({name:apiName,definition:definition,historicalDefinition:historical[apiName]})}}else{diffs.add.push({name:apiName,definition:definition})}}for(const[apiName,definition]of Object.entries(historical)){if(!compare.hasOwnProperty(apiName)){diffs.remove.push({name:apiName,definition:definition})}}return diffs}function mapAttributesDiff(compareMap,historicalMap,attributeKey,isBooleanFlagAttribute){const compare=compareMap?compareMap:{};const historical=historicalMap?historicalMap:{};const diffs={add:[],remove:[],mutate:[]};for(const[entryName,entryDef]of Object.entries(compare)){if(historical.hasOwnProperty(entryName)){const matchingHistoricalDef=historical[entryName];if(entryDef.hasOwnProperty(attributeKey)){if(!matchingHistoricalDef.hasOwnProperty(attributeKey)){if(!isBooleanFlagAttribute){diffs.add.push({name:entryName,value:entryDef[attributeKey]})}else if(entryDef[attributeKey]){diffs.add.push({name:entryName,value:true})}}else if(JSON.stringify(entryDef[attributeKey])!==JSON.stringify(matchingHistoricalDef[attributeKey])){if(!isBooleanFlagAttribute){diffs.mutate.push({name:entryName,value:entryDef[attributeKey],historicalValue:matchingHistoricalDef[attributeKey]})}else{if(entryDef[attributeKey]){diffs.add.push({name:entryName,value:true,historicalValue:false})}else{diffs.remove.push({name:entryName,value:false,historicalValue:true})}}}}else if(matchingHistoricalDef.hasOwnProperty(attributeKey)){if(!isBooleanFlagAttribute){diffs.remove.push({name:entryName,historicalValue:matchingHistoricalDef[attributeKey]})}else if(matchingHistoricalDef[attributeKey]){diffs.remove.push({name:entryName,historicalValue:true})}}}}return diffs}function typeDiff(currentTypeDef,compareTypeDef,overrideTypeMappings){const currentStr=currentTypeDef?currentTypeDef:"";const historicalStr=compareTypeDef?compareTypeDef:"";const diffs={add:[],remove:[],mutate:[]};const current=currentStr.split("|").map(type=>type.trim()).filter(type=>type!=="null");const historical=historicalStr.split("|").map(type=>type.trim()).filter(type=>type!=="null");if(current.length===1&&historical.length===1){if(!fuzzyTypeMatch(historical[0],current[0],overrideTypeMappings)){diffs.mutate.push({type:current[0],historicalType:historical[0]})}}else{const expandedHistorical=generateFuzzyHistorical(historical,overrideTypeMappings);current.forEach(checkType=>{if(!expandedHistorical.includes(checkType)){diffs.add.push({type:checkType})}});const expandedCurrent=generateFuzzyCurrent(current,overrideTypeMappings);historical.forEach(checkType=>{if(!expandedCurrent.includes(checkType)){diffs.remove.push({historicalType:checkType})}})}return diffs}function stringArrayDiff(currentArray,compareArray){const compare=Array.isArray(currentArray)?currentArray:[];const historical=Array.isArray(compareArray)?compareArray:[];const diffs={add:[],remove:[]};compare.forEach(arrayEntry=>{if(!historical.includes(arrayEntry)){diffs.add.push(arrayEntry)}});historical.forEach(arrayEntry=>{if(!compare.includes(arrayEntry)){diffs.remove.push(arrayEntry)}});return diffs}function incrementMajorToMaxSupported(semver,startFrom,supportedRange){let{major:testMajor}=semver.parse(startFrom);let lastSupported=startFrom;while(semver.satisfiesRange(`${++testMajor}.0.0`,supportedRange)){lastSupported=semver.parse(`${testMajor}.0.0`)}return lastSupported}function deriveConstraintMetadata(baseline,constraint){let requiredConstraint=constraint;if(!constraint||constraint===VC.SEMVER){requiredConstraint=VC.LATEST}return baseline[requiredConstraint].metadata}function semanticDiff(semver,firstVersion,secondVersion){let diff=null;const first=tolerantSemverParse(semver,firstVersion);const second=tolerantSemverParse(semver,secondVersion);if(first&&second){if(semver.eq(first.version,second.version)){diff=0}else{const modifier=semver.gte(first.version,second.version)?1:-1;if(first.major!==second.major){diff=4}else if(first.minor!==second.minor){diff=3}else if(first.patch!==second.patch){diff=2}else{diff=1}diff=diff*modifier}}return diff}function tolerantSemverParse(semver,versionString){let parsed=null;if(semver.isValid(versionString)){parsed=semver.parse(versionString)}else if(semver.isValidRange(versionString)){parsed=semver.minVersion(versionString)}return parsed}function isMarkedAsDeprecated(cacheManager,componentName,version,scope,versionMetadata,statusTarget,statusValue){let deprecated=false;let metadata=versionMetadata;if(!metadata){metadata=cacheManager.getComponentMetadata(componentName,version)}if(metadata){let checkScope=castToScope(metadata,scope);if(checkScope&&checkScope.hasOwnProperty("status")){checkScope.status.forEach(statusRecord=>{if(statusRecord.type==="deprecated"){if(!statusTarget&&!statusRecord.target){deprecated=true}else if(statusRecord.target===statusTarget){if(Array.isArray(statusRecord.value)){statusRecord.value.forEach(srv=>{if(srv===statusValue){deprecated=true}})}}}})}}return deprecated}function castToScope(rootObject,scope){if(scope&&Array.isArray(scope)&&scope.length>0){const scopes=scope.slice();let workingObj=rootObject;while(workingObj&&scopes.length>0){let scopeKey=scopes.shift();if(scopeKey.startsWith("[")){if(Array.isArray(workingObj)){let match=scopeKey.slice(1,-1).split(":");workingObj=workingObj.find(row=>row[match[0]]===match[1])}else{return}}else{workingObj=workingObj[scopeKey]}}return workingObj}else{return rootObject}}function getPrintScope(scopeArray){const workingScope=scopeArray.slice(1);const printScope=workingScope.reduce((scopeString,scopeEntry)=>{return`${scopeString}${scopeEntry==="properties"?".":scopeEntry}`},"");return printScope}function getComponentFullName(metadata){return metadata.pack?metadata.pack+"-"+metadata.name:metadata.name}function getStdErrorContext(componentName,controlRuleName){return` component ${componentName} in contradiction of ${controlRuleName} API change constraint of `}function sharedMapAPICallback(apiName,controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext){let errorConditions=[];if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const removeControlMetadata=deriveConstraintMetadata(baselines,removeConstraint);const diffs=apiDiff(metadata[apiName],compareMetadata[apiName]);if(checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`${apiName} ${diffs.add.map(added=>added.name).join(", ")} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return[apiName,diff.name]});if(removeErrors.length>0){errorConditions.push(`${apiName} ${removeErrors.map(removed=>removed.name).join(", ")} removed from${errorMsgContext}'${removeConstraint}'`)}return errorConditions.join("\n")}};function flattenArrayByAttr(arrayOfObjects,keyAttrName){if(Array.isArray(arrayOfObjects)){return arrayOfObjects.map(instance=>instance[keyAttrName])}else{return[]}}function checkConstraintMajor(verbDiffs,constraint,versionDiff){let errorFlag=false;if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorFlag=true;break;default:if(versionDiff<4){errorFlag=true}break}}return errorFlag}function checkConstraintMajorWithDeprecation(verbDiffs,constraint,versionDiff,cacheManager,componentName,controlMetadata,scopeFn,statusTarget,statusValueFn){let errorDiffs=[];if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorDiffs=verbDiffs;break;case VC.PATCH:case VC.SEMVER:case VC.MINOR:case VC.MAJOR:if(versionDiff<4){errorDiffs=verbDiffs}break;default:if(versionDiff<4||!controlMetadata){errorDiffs=verbDiffs}else{verbDiffs.forEach(diff=>{const diffScope=scopeFn.call(this,diff);let statusValue;if(statusValueFn){statusValue=statusValueFn.call(this,diff)}if(!isMarkedAsDeprecated(cacheManager,componentName,controlMetadata.version,diffScope,controlMetadata,statusTarget,statusValue)){errorDiffs.push(diff)}})}break}}return errorDiffs}function checkConstraintMinorMajor(verbDiffs,constraint,versionDiff){let errorFlag=false;if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorFlag=true;break;case VC.SEMVER:case VC.PATCH:case VC.MINOR:if(versionDiff<3){errorFlag=true}break;default:if(versionDiff<4){errorFlag=true}break}}return errorFlag}function checkConstraintMinorMajorWithDeprecation(verbDiffs,constraint,versionDiff,cacheManager,componentName,controlMetadata,scopeFn,statusTarget,statusValueFn){let errorDiffs=[];if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorDiffs=verbDiffs;break;case VC.PATCH:case VC.SEMVER:case VC.MINOR:if(versionDiff<3){errorDiffs=verbDiffs}break;case VC.MAJOR:if(versionDiff<4){errorDiffs=verbDiffs}break;default:if(versionDiff<4||!controlMetadata){errorDiffs=verbDiffs}else{verbDiffs.forEach(diff=>{const diffScope=scopeFn.call(this,diff);let statusValue;if(statusValueFn){statusValue=statusValueFn.call(this,diff)}if(!isMarkedAsDeprecated(cacheManager,componentName,controlMetadata.version,diffScope,controlMetadata,statusTarget,statusValue)){errorDiffs.push(diff)}})}break}}return errorDiffs}function checkConstraintPatchMajor(verbDiffs,constraint,versionDiff){let errorFlag=false;if(verbDiffs&&verbDiffs.length>0){switch(constraint){case VC.NEVER:errorFlag=true;break;case VC.PATCH:if(versionDiff<2){errorFlag=true}break;case VC.SEMVER:case VC.MINOR:if(versionDiff<3){errorFlag=true}break;default:if(versionDiff<4){errorFlag=true}break}}return errorFlag}module.exports={calcRequiredVersionMatrix,dependenciesDiff,apiDiff,mapAttributesDiff,typeDiff,stringArrayDiff,incrementMajorToMaxSupported,deriveConstraintMetadata,semanticDiff,tolerantSemverParse,isMarkedAsDeprecated,castToScope,getPrintScope,getComponentFullName,getStdErrorContext,sharedMapAPICallback,flattenArrayByAttr,checkConstraintMajor,checkConstraintMajorWithDeprecation,checkConstraintMinorMajor,checkConstraintMinorMajorWithDeprecation,checkConstraintPatchMajor};
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');const CaccHelpers=require('./jetwco-cacc-helpers');const NULL_VERSION='0.0.0';function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorCondition;const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const addControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,addConstraint);const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const mutateControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,mutateConstraint);const newJetVersionRange=metadata.jetVersion?metadata.jetVersion:NULL_VERSION;const compareJetVersionRange=compareMetadata.jetVersion?compareMetadata.jetVersion:NULL_VERSION;const mutateControlVersion=mutateControlMetadata?mutateControlMetadata.version:NULL_VERSION;if(mutateConstraint===VC.NEVER||compareMetadata.version!==mutateControlVersion){if((newJetVersionRange===NULL_VERSION||compareJetVersionRange===NULL_VERSION)&&newJetVersionRange!==compareJetVersionRange){errorCondition=`JET version range attribute (jetVersion) has been ${newJetVersionRange===NULL_VERSION?'removed from':'added to'} metadata in contradiction of ${controlRuleName} API change constraint of '${mutateConstraint}'`}}if(!errorCondition){const newMin=semver.minVersion(newJetVersionRange);const compareMin=semver.minVersion(compareJetVersionRange);if(newMin.version!==compareMin.version){if(removeConstraint===VC.NEVER||newMin>compareMin&&compareMetadata.version!==removeControlMetadata.version){errorCondition=`Lower bound of JET version range attribute (jetVersion) has been changed in contradiction of ${controlRuleName} API change constraint of '${removeConstraint}'`}}}if(!errorCondition){const newMaxMajor=CaccHelpers.incrementMajorToMaxSupported(semver,semver.minVersion(newJetVersionRange),newJetVersionRange);const compareMaxMajor=CaccHelpers.incrementMajorToMaxSupported(semver,semver.minVersion(compareJetVersionRange),compareJetVersionRange);if(newMaxMajor.major!==compareMaxMajor.major){if(addConstraint===VC.NEVER||compareMetadata.version!==addControlMetadata.version){errorCondition=`Upper bound of JET version range attribute (jetVersion) has been changed in contradiction of ${controlRuleName} API change constraint of '${addConstraint}'`}}}return errorCondition}module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");const CaccHelpers=require("./jetwco-cacc-helpers");const NULL_VERSION="0.0.0";function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorCondition;const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const addControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,addConstraint);const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const mutateControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,mutateConstraint);const newJetVersionRange=metadata.jetVersion?metadata.jetVersion:NULL_VERSION;const compareJetVersionRange=compareMetadata.jetVersion?compareMetadata.jetVersion:NULL_VERSION;const mutateControlVersion=mutateControlMetadata?mutateControlMetadata.version:NULL_VERSION;if(mutateConstraint===VC.NEVER||compareMetadata.version!==mutateControlVersion){if((newJetVersionRange===NULL_VERSION||compareJetVersionRange===NULL_VERSION)&&newJetVersionRange!==compareJetVersionRange){errorCondition=`JET version range attribute (jetVersion) has been ${newJetVersionRange===NULL_VERSION?"removed from":"added to"} metadata in contradiction of ${controlRuleName} API change constraint of '${mutateConstraint}'`}}if(!errorCondition){const newMin=semver.minVersion(newJetVersionRange);const compareMin=semver.minVersion(compareJetVersionRange);if(newMin.version!==compareMin.version){if(removeConstraint===VC.NEVER||newMin>compareMin&&compareMetadata.version!==removeControlMetadata.version){errorCondition=`Lower bound of JET version range attribute (jetVersion) has been changed in contradiction of ${controlRuleName} API change constraint of '${removeConstraint}'`}}}if(!errorCondition){const newMaxMajor=CaccHelpers.incrementMajorToMaxSupported(semver,semver.minVersion(newJetVersionRange),newJetVersionRange);const compareMaxMajor=CaccHelpers.incrementMajorToMaxSupported(semver,semver.minVersion(compareJetVersionRange),compareJetVersionRange);if(newMaxMajor.major!==compareMaxMajor.major){if(addConstraint===VC.NEVER||compareMetadata.version!==addControlMetadata.version){errorCondition=`Upper bound of JET version range attribute (jetVersion) has been changed in contradiction of ${controlRuleName} API change constraint of '${addConstraint}'`}}}return errorCondition}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty('methods')&&compareMetadata.hasOwnProperty('methods')){for(const[methodName,methodDef]of Object.entries(metadata.methods)){if(compareMetadata.methods.hasOwnProperty(methodName)){if(methodDef.hasOwnProperty('params')){methodDef.params.forEach(paramDef=>{const historicalParamDef=compareMetadata.methods[methodName].params.find(hpd=>hpd.name===paramDef.name);if(historicalParamDef){const diffs=CaccHelpers.typeDiff(paramDef.type,historicalParamDef.type,overrideTypeMappings);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Types ${diffs.add.map(addition=>addition.type).join(', ')} added to method parameter ${methodName}.${paramDef.name} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){errorConditions.push(`Method parameter type mutated for ${methodName} in${errorMsgContext}'${mutateConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['methods',methodName,'params',`[name:${paramDef.name}]`]},'parameterType',diff=>diff.historicalType);if(removeErrors.length>0){errorConditions.push(`Type(s) ${removeErrors.map(d=>d.historicalType).join(', ')} removed for parameter ${methodName}.${paramDef.name} in${errorMsgContext}'${removeConstraint}'`)}}})}}}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty("methods")&&compareMetadata.hasOwnProperty("methods")){for(const[methodName,methodDef]of Object.entries(metadata.methods)){if(compareMetadata.methods.hasOwnProperty(methodName)){if(methodDef.hasOwnProperty("params")){methodDef.params.forEach(paramDef=>{const historicalParamDef=compareMetadata.methods[methodName].params.find(hpd=>hpd.name===paramDef.name);if(historicalParamDef){const diffs=CaccHelpers.typeDiff(paramDef.type,historicalParamDef.type,overrideTypeMappings);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Types ${diffs.add.map(addition=>addition.type).join(", ")} added to method parameter ${methodName}.${paramDef.name} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){errorConditions.push(`Method parameter type mutated for ${methodName} in${errorMsgContext}'${mutateConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["methods",methodName,"params",`[name:${paramDef.name}]`]},"parameterType",diff=>diff.historicalType);if(removeErrors.length>0){errorConditions.push(`Type(s) ${removeErrors.map(d=>d.historicalType).join(", ")} removed for parameter ${methodName}.${paramDef.name} in${errorMsgContext}'${removeConstraint}'`)}}})}}}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty('methods')&&compareMetadata.hasOwnProperty('methods')){for(const[methodName,methodDef]of Object.entries(metadata.methods)){if(compareMetadata.methods.hasOwnProperty(methodName)){const diffs=methodParamsDiff(methodDef.params,compareMetadata.methods[methodName].params);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Method parameters ${diffs.add.join(', ')} added to ${methodName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){errorConditions.push(`Method parameters mutated in a breaking fashion for ${methodName} in${errorMsgContext}'${mutateConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['methods',methodName,'params',`[name:${diff}]`]});if(removeErrors.length>0){errorConditions.push(`Method parameters ${removeErrors.join(', ')} removed from ${methodName} in ${errorMsgContext}'${removeConstraint}'`)}}}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};function methodParamsDiff(currentParams,historicalParams){const compare=currentParams?currentParams.map(p=>p.name):[];const historical=historicalParams?historicalParams.map(p=>p.name):[];const diffs={add:[],remove:[],mutate:[]};for(let ci=0;ci<compare.length;ci++){const checkParam=compare[ci];const historicalIndex=historical.indexOf(checkParam);if(ci!==historicalIndex){if(historicalIndex>=0){diffs.mutate.push(checkParam)}else{if(ci>historical.length-1){diffs.add.push(checkParam)}else{diffs.mutate.push(checkParam)}}}}historical.forEach(histParam=>{if(!compare.includes(histParam)){diffs.remove.push(histParam)}});return diffs}function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager){return errorConditions}module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty("methods")&&compareMetadata.hasOwnProperty("methods")){for(const[methodName,methodDef]of Object.entries(metadata.methods)){if(compareMetadata.methods.hasOwnProperty(methodName)){const diffs=methodParamsDiff(methodDef.params,compareMetadata.methods[methodName].params);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Method parameters ${diffs.add.join(", ")} added to ${methodName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){errorConditions.push(`Method parameters mutated in a breaking fashion for ${methodName} in${errorMsgContext}'${mutateConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["methods",methodName,"params",`[name:${diff}]`]});if(removeErrors.length>0){errorConditions.push(`Method parameters ${removeErrors.join(", ")} removed from ${methodName} in ${errorMsgContext}'${removeConstraint}'`)}}}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};function methodParamsDiff(currentParams,historicalParams){const compare=currentParams?currentParams.map(p=>p.name):[];const historical=historicalParams?historicalParams.map(p=>p.name):[];const diffs={add:[],remove:[],mutate:[]};for(let ci=0;ci<compare.length;ci++){const checkParam=compare[ci];const historicalIndex=historical.indexOf(checkParam);if(ci!==historicalIndex){if(historicalIndex>=0){diffs.mutate.push(checkParam)}else{if(ci>historical.length-1){diffs.add.push(checkParam)}else{diffs.mutate.push(checkParam)}}}}historical.forEach(histParam=>{if(!compare.includes(histParam)){diffs.remove.push(histParam)}});return diffs}function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager){return errorConditions}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;if(metadata.hasOwnProperty('methods')&&compareMetadata.hasOwnProperty('methods')){for(const[methodName,methodDef]of Object.entries(metadata.methods)){if(compareMetadata.methods.hasOwnProperty(methodName)){const diffs=CaccHelpers.typeDiff(methodDef.return,compareMetadata.methods[methodName].return,overrideTypeMappings);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Method return type amended to include ${diffs.add.map(addition=>addition.type).join(', ')} added to ${methodName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){const errorAction=diffs.mutate[0].type?'added':'removed';errorConditions.push(`Method return type ${errorAction} for ${methodName} in${errorMsgContext}'${mutateConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Types ${diffs.remove.join(', ')} removed from return value of method ${methodName} in ${errorMsgContext}'${removeConstraint}'`)}}}if(errorConditions.length>0){return errorConditions.join('\n')}}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;if(metadata.hasOwnProperty("methods")&&compareMetadata.hasOwnProperty("methods")){for(const[methodName,methodDef]of Object.entries(metadata.methods)){if(compareMetadata.methods.hasOwnProperty(methodName)){const diffs=CaccHelpers.typeDiff(methodDef.return,compareMetadata.methods[methodName].return,overrideTypeMappings);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Method return type amended to include ${diffs.add.map(addition=>addition.type).join(", ")} added to ${methodName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){const errorAction=diffs.mutate[0].type?"added":"removed";errorConditions.push(`Method return type ${errorAction} for ${methodName} in${errorMsgContext}'${mutateConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Types ${diffs.remove.join(", ")} removed from return value of method ${methodName} in ${errorMsgContext}'${removeConstraint}'`)}}}if(errorConditions.length>0){return errorConditions.join("\n")}}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){return CaccHelpers.sharedMapAPICallback('methods',controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings)};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){return CaccHelpers.sharedMapAPICallback("methods",controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings)};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='pack'){const errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=bundlesDiff(metadata.bundles,compareMetadata.bundles);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Bundle(s) ${diffs.add.join(', ')} added to${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Bundle(s) ${diffs.remove.join(', ')} removed from${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};function bundlesDiff(compareBundles,historicalBundles){const compare=compareBundles?compareBundles:{};const historical=historicalBundles?historicalBundles:{};const diffs={add:[],remove:[]};Object.keys(compare).forEach(bundleName=>{if(!historical.hasOwnProperty(bundleName)){diffs.add.push(bundleName)}});Object.keys(historical).forEach(bundleName=>{if(!compare.hasOwnProperty(bundleName)){diffs.remove.push(bundleName)}});return diffs}module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="pack"){const errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=bundlesDiff(metadata.bundles,compareMetadata.bundles);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Bundle(s) ${diffs.add.join(", ")} added to${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Bundle(s) ${diffs.remove.join(", ")} removed from${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};function bundlesDiff(compareBundles,historicalBundles){const compare=compareBundles?compareBundles:{};const historical=historicalBundles?historicalBundles:{};const diffs={add:[],remove:[]};Object.keys(compare).forEach(bundleName=>{if(!historical.hasOwnProperty(bundleName)){diffs.add.push(bundleName)}});Object.keys(historical).forEach(bundleName=>{if(!compare.hasOwnProperty(bundleName)){diffs.remove.push(bundleName)}});return diffs}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='pack'&&metadata.bundles){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const errorConditions=[];for(const[bundleName,bundleContents]of Object.entries(metadata.bundles)){const historicalBundleContents=compareMetadata.hasOwnProperty('bundles')&&compareMetadata.bundles.hasOwnProperty(bundleName)?compareMetadata.bundles[bundleName]:[];const diffs=CaccHelpers.stringArrayDiff(bundleContents,historicalBundleContents);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Entries ${diffs.add.join(', ')} added to bundle ${bundleName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Entries ${diffs.remove.join(', ')} removed from ${bundleName} in${errorMsgContext}'${removeConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="pack"&&metadata.bundles){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const errorConditions=[];for(const[bundleName,bundleContents]of Object.entries(metadata.bundles)){const historicalBundleContents=compareMetadata.hasOwnProperty("bundles")&&compareMetadata.bundles.hasOwnProperty(bundleName)?compareMetadata.bundles[bundleName]:[];const diffs=CaccHelpers.stringArrayDiff(bundleContents,historicalBundleContents);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Entries ${diffs.add.join(", ")} added to bundle ${bundleName} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Entries ${diffs.remove.join(", ")} removed from ${bundleName} in${errorMsgContext}'${removeConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='pack'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const mdSemver=semver.parse(metadata.version);const compareSemver=semver.parse(compareMetadata.version);const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const diffs=CaccHelpers.dependenciesDiff(metadata.dependencies,compareMetadata.dependencies);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Component(s) ${diffs.add.map(dep=>dep.dependency).join(', ')} added to${errorMsgContext}'${addConstraint}'`)}if(diffs.mutate.length>0){const mutationErrors=[];diffs.mutate.forEach(diff=>{switch(mutateConstraint){case VC.NEVER:mutationErrors.push(`${diff.dependency}@${diff.historicalVersion} -> ${diff.version}`);break;case VC.SEMVER:case VC.PATCH:case VC.MINOR:const dependencyVersionDiff=CaccHelpers.semanticDiff(semver,diff.version,diff.historicalVersion);if(dependencyVersionDiff>componentVersionDiff){mutationErrors.push(`${diff.dependency}@${diff.historicalVersion} -> ${diff.version}`)}break;default:if(mdSemver.major>=compareSemver.major){mutationErrors.push(`${diff.dependency}@${diff.historicalVersion} -> ${diff.version}`)}break;}});if(mutationErrors.length>0){errorConditions.push(`Pack children changes for ${metadata.name} in contradiction of ${controlRuleName} API change constraint '${mutateConstraint}':[${mutationErrors.join(', ')}]`)}}if(diffs.remove.length>0){const removeErrors=[];diffs.remove.forEach(diff=>{if(removeConstraint===VC.NEVER||mdSemver.major<=compareSemver.major){removeErrors.push(`${diff.dependency}@${diff.version}`)}else{const historicalDependencyVersion=removeControlMetadata.dependencies[diff.dependency];switch(removeConstraint){case VC.MAJOR_DEPRECATED:case VC.MAJOR_2_DEPRECATED:case VC.MAJOR_3_DEPRECATED:if(!CaccHelpers.isMarkedAsDeprecated(cacheManager,diff.dependency,historicalDependencyVersion)){removeErrors.push(`${diff.dependency}@${diff.version} not marked as deprecated in historical version: ${historicalDependencyVersion}`)}break;}}});if(removeErrors.length>0){errorConditions.push(`Pack children removal for ${metadata.name} in contradiction of ${controlRuleName} API change constraint '${removeConstraint}':[${removeErrors.join(', ')}]`)}}if(errorConditions.length>0){return errorConditions.join('\n')}}return}module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="pack"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const mdSemver=semver.parse(metadata.version);const compareSemver=semver.parse(compareMetadata.version);const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const diffs=CaccHelpers.dependenciesDiff(metadata.dependencies,compareMetadata.dependencies);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Component(s) ${diffs.add.map(dep=>dep.dependency).join(", ")} added to${errorMsgContext}'${addConstraint}'`)}if(diffs.mutate.length>0){const mutationErrors=[];diffs.mutate.forEach(diff=>{switch(mutateConstraint){case VC.NEVER:mutationErrors.push(`${diff.dependency}@${diff.historicalVersion} -> ${diff.version}`);break;case VC.SEMVER:case VC.PATCH:case VC.MINOR:const dependencyVersionDiff=CaccHelpers.semanticDiff(semver,diff.version,diff.historicalVersion);if(dependencyVersionDiff>componentVersionDiff){mutationErrors.push(`${diff.dependency}@${diff.historicalVersion} -> ${diff.version}`)}break;default:if(mdSemver.major>=compareSemver.major){mutationErrors.push(`${diff.dependency}@${diff.historicalVersion} -> ${diff.version}`)}break}});if(mutationErrors.length>0){errorConditions.push(`Pack children changes for ${metadata.name} in contradiction of ${controlRuleName} API change constraint '${mutateConstraint}':[${mutationErrors.join(", ")}]`)}}if(diffs.remove.length>0){const removeErrors=[];diffs.remove.forEach(diff=>{if(removeConstraint===VC.NEVER||mdSemver.major<=compareSemver.major){removeErrors.push(`${diff.dependency}@${diff.version}`)}else{const historicalDependencyVersion=removeControlMetadata.dependencies[diff.dependency];switch(removeConstraint){case VC.MAJOR_DEPRECATED:case VC.MAJOR_2_DEPRECATED:case VC.MAJOR_3_DEPRECATED:if(!CaccHelpers.isMarkedAsDeprecated(cacheManager,diff.dependency,historicalDependencyVersion)){removeErrors.push(`${diff.dependency}@${diff.version} not marked as deprecated in historical version: ${historicalDependencyVersion}`)}break}}});if(removeErrors.length>0){errorConditions.push(`Pack children removal for ${metadata.name} in contradiction of ${controlRuleName} API change constraint '${removeConstraint}':[${removeErrors.join(", ")}]`)}}if(errorConditions.length>0){return errorConditions.join("\n")}}return}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);return recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,['properties'],addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext).join('\n')}return};function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext){let errorConditions=[];const printScope=CaccHelpers.getPrintScope(compareScope);const diffs=CaccHelpers.apiDiff(CaccHelpers.castToScope(metadata,compareScope),CaccHelpers.castToScope(compareMetadata,compareScope));if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Properties ${printScope}${diffs.add.map(prop=>prop.name).join(', ')} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return compareScope.concat([diff.name])});if(removeErrors.length>0){errorConditions.push(`Properties ${printScope}${diffs.remove.map(prop=>prop.name).join(', ')} removed from${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){diffs.mutate.forEach(mutation=>{let newScope=compareScope.slice().concat([mutation.name,'properties']);const mutateErrors=recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,newScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext);if(mutateErrors){errorConditions=errorConditions.concat(mutateErrors)}})}return errorConditions}module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);return recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,["properties"],addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext).join("\n")}return};function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext){let errorConditions=[];const printScope=CaccHelpers.getPrintScope(compareScope);const diffs=CaccHelpers.apiDiff(CaccHelpers.castToScope(metadata,compareScope),CaccHelpers.castToScope(compareMetadata,compareScope));if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Properties ${printScope}${diffs.add.map(prop=>prop.name).join(", ")} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return compareScope.concat([diff.name])});if(removeErrors.length>0){errorConditions.push(`Properties ${printScope}${diffs.remove.map(prop=>prop.name).join(", ")} removed from${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){diffs.mutate.forEach(mutation=>{let newScope=compareScope.slice().concat([mutation.name,"properties"]);const mutateErrors=recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,newScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext);if(mutateErrors){errorConditions=errorConditions.concat(mutateErrors)}})}return errorConditions}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const mutateControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,mutateConstraint);const cleanedProperties=removeReadonlyProperties(metadata.properties);const cleanedCompareProperties=removeReadonlyProperties(compareMetadata.properties);const diffs=CaccHelpers.mapAttributesDiff(cleanedProperties,cleanedCompareProperties,'value');if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property default value set for ${diffs.add.map(addition=>addition.name).join(', ')} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMinorMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['properties',diff.name]},'propertyValue',diff=>diff.historicalValue);if(removeErrors.length>0){errorConditions.push(`Property default value removed from ${removeErrors.map(err=>err.name).join(', ')} in${errorMsgContext}'${removeConstraint}'`)}const mutateErrors=CaccHelpers.checkConstraintMinorMajorWithDeprecation(diffs.mutate,mutateConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['properties',diff.name]},'propertyValue',diff=>diff.historicalValue);if(mutateErrors.length>0){errorConditions.push(`Property default value changed in ${mutateErrors.map(err=>err.name).join(', ')} in${errorMsgContext}'${mutateConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join('\n')}return};function removeReadonlyProperties(propertyMap){const cleaned={};if(propertyMap){for(const[propName,prop]of Object.entries(propertyMap)){if(!prop.readOnly){cleaned[propName]=prop}}}return cleaned}module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const mutateControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,mutateConstraint);const cleanedProperties=removeReadonlyProperties(metadata.properties);const cleanedCompareProperties=removeReadonlyProperties(compareMetadata.properties);const diffs=CaccHelpers.mapAttributesDiff(cleanedProperties,cleanedCompareProperties,"value");if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property default value set for ${diffs.add.map(addition=>addition.name).join(", ")} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMinorMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["properties",diff.name]},"propertyValue",diff=>diff.historicalValue);if(removeErrors.length>0){errorConditions.push(`Property default value removed from ${removeErrors.map(err=>err.name).join(", ")} in${errorMsgContext}'${removeConstraint}'`)}const mutateErrors=CaccHelpers.checkConstraintMinorMajorWithDeprecation(diffs.mutate,mutateConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["properties",diff.name]},"propertyValue",diff=>diff.historicalValue);if(mutateErrors.length>0){errorConditions.push(`Property default value changed in ${mutateErrors.map(err=>err.name).join(", ")} in${errorMsgContext}'${mutateConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join("\n")}return};function removeReadonlyProperties(propertyMap){const cleaned={};if(propertyMap){for(const[propName,prop]of Object.entries(propertyMap)){if(!prop.readOnly){cleaned[propName]=prop}}}return cleaned}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);return recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,['properties'],addConstraint,removeConstraint,mutateConstraint,componentVersionDiff,cacheManager,errorMsgContext).join('\n')}return};function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,mutateConstraint,componentVersionDiff,cacheManager,errorMsgContext){let errorConditions=[];const checkProps=CaccHelpers.castToScope(metadata,compareScope);const compareProps=CaccHelpers.castToScope(compareMetadata,compareScope);if(checkProps&&compareProps){for(const[propertyName,propertyDef]of Object.entries(checkProps)){if(compareProps.hasOwnProperty(propertyName)){const currentEnums=propertyDef.enumValues;const compareEnums=compareProps[propertyName].enumValues;const printScope=CaccHelpers.getPrintScope(compareScope)+propertyName;if(currentEnums&&compareEnums){const diffs=CaccHelpers.stringArrayDiff(currentEnums,compareEnums);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Values ${diffs.add.join(', ')} added to enumValues of ${printScope} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return compareScope.concat([propertyName])},'propertyValue',diff=>diff);if(removeErrors.length>0){errorConditions.push(`Values ${removeErrors.join(', ')} removed from enumValues of ${printScope} in${errorMsgContext}'${removeConstraint}'`)}}else if(currentEnums||compareEnums){let errorFlag=false;switch(mutateConstraint){case VC.NEVER:errorFlag=true;break;default:if(componentVersionDiff<4){errorFlag=true}break;}if(errorFlag){const action=currentEnums?'added to':'removed from';errorConditions.push(`Enumerations ${action} ${printScope} in${errorMsgContext}'${mutateConstraint}'`)}}if(propertyDef.hasOwnProperty('properties')){const subPropertyScope=compareScope.concat([propertyName,'properties']);errorConditions=errorConditions.concat(recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,subPropertyScope,addConstraint,removeConstraint,mutateConstraint,componentVersionDiff,cacheManager,errorMsgContext))}}}}return errorConditions}module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);return recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,["properties"],addConstraint,removeConstraint,mutateConstraint,componentVersionDiff,cacheManager,errorMsgContext).join("\n")}return};function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,mutateConstraint,componentVersionDiff,cacheManager,errorMsgContext){let errorConditions=[];const checkProps=CaccHelpers.castToScope(metadata,compareScope);const compareProps=CaccHelpers.castToScope(compareMetadata,compareScope);if(checkProps&&compareProps){for(const[propertyName,propertyDef]of Object.entries(checkProps)){if(compareProps.hasOwnProperty(propertyName)){const currentEnums=propertyDef.enumValues;const compareEnums=compareProps[propertyName].enumValues;const printScope=CaccHelpers.getPrintScope(compareScope)+propertyName;if(currentEnums&&compareEnums){const diffs=CaccHelpers.stringArrayDiff(currentEnums,compareEnums);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Values ${diffs.add.join(", ")} added to enumValues of ${printScope} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return compareScope.concat([propertyName])},"propertyValue",diff=>diff);if(removeErrors.length>0){errorConditions.push(`Values ${removeErrors.join(", ")} removed from enumValues of ${printScope} in${errorMsgContext}'${removeConstraint}'`)}}else if(currentEnums||compareEnums){let errorFlag=false;switch(mutateConstraint){case VC.NEVER:errorFlag=true;break;default:if(componentVersionDiff<4){errorFlag=true}break}if(errorFlag){const action=currentEnums?"added to":"removed from";errorConditions.push(`Enumerations ${action} ${printScope} in${errorMsgContext}'${mutateConstraint}'`)}}if(propertyDef.hasOwnProperty("properties")){const subPropertyScope=compareScope.concat([propertyName,"properties"]);errorConditions=errorConditions.concat(recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,subPropertyScope,addConstraint,removeConstraint,mutateConstraint,componentVersionDiff,cacheManager,errorMsgContext))}}}}return errorConditions}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.properties,compareMetadata.properties,'readOnly',true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property readOnly value set on ${diffs.add.map(addition=>addition.name).join(', ')} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintPatchMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Property readOnly value unset from ${diffs.remove.map(removal=>removal.name).join(', ')} in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.properties,compareMetadata.properties,"readOnly",true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property readOnly value set on ${diffs.add.map(addition=>addition.name).join(", ")} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintPatchMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Property readOnly value unset from ${diffs.remove.map(removal=>removal.name).join(", ")} in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.properties,compareMetadata.properties,'required',true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property required value set on ${diffs.add.map(addition=>addition.name).join(', ')} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintPatchMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Property required value unset from ${diffs.remove.map(removal=>removal.name).join(', ')} in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.properties,compareMetadata.properties,"required",true);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property required value set on ${diffs.add.map(addition=>addition.name).join(", ")} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintPatchMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Property required value unset from ${diffs.remove.map(removal=>removal.name).join(", ")} in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const componentName=CaccHelpers.getComponentFullName(metadata);return recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,['properties'],addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext,overrideTypeMappings).join('\n')}return};function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext,overrideTypeMappings){let errorConditions=[];const checkProps=CaccHelpers.castToScope(metadata,compareScope);const compareProps=CaccHelpers.castToScope(compareMetadata,compareScope);if(checkProps&&compareProps){for(const[propertyName,propertyDef]of Object.entries(checkProps)){if(compareProps.hasOwnProperty(propertyName)){const currentTypeDef=propertyDef.type;const compareTypeDef=compareProps[propertyName].type;const printScope=CaccHelpers.getPrintScope(compareScope)+propertyName;const diffs=CaccHelpers.typeDiff(currentTypeDef,compareTypeDef,overrideTypeMappings);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Type expanded to add ${diffs.add.map(addition=>addition.type).join('|')} to ${printScope} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return compareScope.concat([propertyName])},'propertyType',diff=>diff.historicalType);if(removeErrors.length>0){errorConditions.push(`Type contracted to remove ${removeErrors.map(removal=>removal.historicalType).join('|')} from ${printScope} in${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){errorConditions.push(`Forbidden type change of ${diffs.mutate[0].historicalType} to ${diffs.mutate[0].type} made to ${printScope} in ${componentName}`)}if(propertyDef.hasOwnProperty('properties')){const subPropertyScope=compareScope.concat([propertyName,'properties']);errorConditions=errorConditions.concat(recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,subPropertyScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext,overrideTypeMappings))}}}}return errorConditions}module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);const componentName=CaccHelpers.getComponentFullName(metadata);return recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,["properties"],addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext,overrideTypeMappings).join("\n")}return};function recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,compareScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext,overrideTypeMappings){let errorConditions=[];const checkProps=CaccHelpers.castToScope(metadata,compareScope);const compareProps=CaccHelpers.castToScope(compareMetadata,compareScope);if(checkProps&&compareProps){for(const[propertyName,propertyDef]of Object.entries(checkProps)){if(compareProps.hasOwnProperty(propertyName)){const currentTypeDef=propertyDef.type;const compareTypeDef=compareProps[propertyName].type;const printScope=CaccHelpers.getPrintScope(compareScope)+propertyName;const diffs=CaccHelpers.typeDiff(currentTypeDef,compareTypeDef,overrideTypeMappings);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Type expanded to add ${diffs.add.map(addition=>addition.type).join("|")} to ${printScope} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return compareScope.concat([propertyName])},"propertyType",diff=>diff.historicalType);if(removeErrors.length>0){errorConditions.push(`Type contracted to remove ${removeErrors.map(removal=>removal.historicalType).join("|")} from ${printScope} in${errorMsgContext}'${removeConstraint}'`)}if(diffs.mutate.length>0){errorConditions.push(`Forbidden type change of ${diffs.mutate[0].historicalType} to ${diffs.mutate[0].type} made to ${printScope} in ${componentName}`)}if(propertyDef.hasOwnProperty("properties")){const subPropertyScope=compareScope.concat([propertyName,"properties"]);errorConditions=errorConditions.concat(recurseThroughProps(controlRuleName,componentName,metadata,compareMetadata,removeControlMetadata,subPropertyScope,addConstraint,removeConstraint,componentVersionDiff,cacheManager,errorMsgContext,overrideTypeMappings))}}}}return errorConditions}module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==='composite'){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.properties,compareMetadata.properties,'writeback',true);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property writeback value set on ${diffs.add.map(addition=>addition.name).join(', ')} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Property writeback value unset from ${diffs.remove.map(removed=>removed.name).join(', ')} in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){let errorConditions=[];if(componentType==="composite"){const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.mapAttributesDiff(metadata.properties,compareMetadata.properties,"writeback",true);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Property writeback value set on ${diffs.add.map(addition=>addition.name).join(", ")} in${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`Property writeback value unset from ${diffs.remove.map(removed=>removed.name).join(", ")} in${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='resource'){const errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.stringArrayDiff(metadata.publicModules,compareMetadata.publicModules);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`publicModules ${diffs.add.join(', ')} added to${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`publicModules ${diffs.remove.join(', ')} removed from${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="resource"){const errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const diffs=CaccHelpers.stringArrayDiff(metadata.publicModules,compareMetadata.publicModules);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`publicModules ${diffs.add.join(", ")} added to${errorMsgContext}'${addConstraint}'`)}if(CaccHelpers.checkConstraintMajor(diffs.remove,removeConstraint,componentVersionDiff)){errorConditions.push(`publicModules ${diffs.remove.join(", ")} removed from${errorMsgContext}'${removeConstraint}'`)}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const VC=require('./jetwco-cacc-auditConstraints');const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty('slots')&&compareMetadata.hasOwnProperty('slots')){for(const[slotName,slotDef]of Object.entries(metadata.slots)){if(compareMetadata.slots.hasOwnProperty(slotName)){const compareSlotDef=compareMetadata.slots[slotName];if(slotDef.hasOwnProperty('data')===compareSlotDef.hasOwnProperty('data')){if(slotDef.hasOwnProperty('data')){const diffs=CaccHelpers.apiDiff(slotDef.data,compareSlotDef.data);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Slot data attribute amended to include ${diffs.add.map(addition=>addition.name).join(', ')} on ${slotName} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['slots',slotName,'data',diff.name]});if(removeErrors.length>0){errorConditions.push(`Attributes ${removeErrors.map(removal=>removal.name).join(', ')} removed from data attribute of slot ${slotName} in${errorMsgContext}'${removeConstraint}'`)}}}else{let errorFlag=false;switch(mutateConstraint){case VC.NEVER:errorFlag=true;break;default:if(componentVersionDiff<4){errorFlag=true}break;}if(errorFlag){const errorAction=slotDef.hasOwnProperty('data')?'added':'removed';errorConditions.push(`Slot data attribute ${errorAction} for ${slotName} in${errorMsgContext}'${mutateConstraint}'`)}}}}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const VC=require("./jetwco-cacc-auditConstraints");const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty("slots")&&compareMetadata.hasOwnProperty("slots")){for(const[slotName,slotDef]of Object.entries(metadata.slots)){if(compareMetadata.slots.hasOwnProperty(slotName)){const compareSlotDef=compareMetadata.slots[slotName];if(slotDef.hasOwnProperty("data")===compareSlotDef.hasOwnProperty("data")){if(slotDef.hasOwnProperty("data")){const diffs=CaccHelpers.apiDiff(slotDef.data,compareSlotDef.data);if(CaccHelpers.checkConstraintPatchMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Slot data attribute amended to include ${diffs.add.map(addition=>addition.name).join(", ")} on ${slotName} in${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["slots",slotName,"data",diff.name]});if(removeErrors.length>0){errorConditions.push(`Attributes ${removeErrors.map(removal=>removal.name).join(", ")} removed from data attribute of slot ${slotName} in${errorMsgContext}'${removeConstraint}'`)}}}else{let errorFlag=false;switch(mutateConstraint){case VC.NEVER:errorFlag=true;break;default:if(componentVersionDiff<4){errorFlag=true}break}if(errorFlag){const errorAction=slotDef.hasOwnProperty("data")?"added":"removed";errorConditions.push(`Slot data attribute ${errorAction} for ${slotName} in${errorMsgContext}'${mutateConstraint}'`)}}}}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;if(metadata.hasOwnProperty('slots')&&compareMetadata.hasOwnProperty('slots')){for(const[slotName,slotDef]of Object.entries(metadata.slots)){if(compareMetadata.slots.hasOwnProperty(slotName)){const compareSlotDef=compareMetadata.slots[slotName];if(slotDef.hasOwnProperty('data')&&compareSlotDef.hasOwnProperty('data')){const diffs=CaccHelpers.mapAttributesDiff(slotDef.data,compareSlotDef.data,'type',false);if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){errorConditions.push(`Type for data attribute(s) ${diffs.mutate.map(mut=>mut.name).join(', ')} updated for slot ${slotName} in${errorMsgContext}'${addConstraint}'`)}}}}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;if(metadata.hasOwnProperty("slots")&&compareMetadata.hasOwnProperty("slots")){for(const[slotName,slotDef]of Object.entries(metadata.slots)){if(compareMetadata.slots.hasOwnProperty(slotName)){const compareSlotDef=compareMetadata.slots[slotName];if(slotDef.hasOwnProperty("data")&&compareSlotDef.hasOwnProperty("data")){const diffs=CaccHelpers.mapAttributesDiff(slotDef.data,compareSlotDef.data,"type",false);if(CaccHelpers.checkConstraintMajor(diffs.mutate,mutateConstraint,componentVersionDiff)){errorConditions.push(`Type for data attribute(s) ${diffs.mutate.map(mut=>mut.name).join(", ")} updated for slot ${slotName} in${errorMsgContext}'${addConstraint}'`)}}}}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){return CaccHelpers.sharedMapAPICallback('slots',controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings)};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){return CaccHelpers.sharedMapAPICallback("slots",controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings)};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty('styleClasses')||compareMetadata.hasOwnProperty('styleClasses')){const styleClasses=CaccHelpers.flattenArrayByAttr(metadata.styleClasses,'name');const historicalStyleClasses=CaccHelpers.flattenArrayByAttr(compareMetadata.styleClasses,'name');const diffs=CaccHelpers.stringArrayDiff(styleClasses,historicalStyleClasses);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Style class(es) ${diffs.add.join(', ')} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['styleClasses',`[name:${diff}]`]});if(removeErrors.length>0){errorConditions.push(`Class(es) ${removeErrors.join(', ')} removed from styleClasses of${errorMsgContext}'${removeConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint,mutate:mutateConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty("styleClasses")||compareMetadata.hasOwnProperty("styleClasses")){const styleClasses=CaccHelpers.flattenArrayByAttr(metadata.styleClasses,"name");const historicalStyleClasses=CaccHelpers.flattenArrayByAttr(compareMetadata.styleClasses,"name");const diffs=CaccHelpers.stringArrayDiff(styleClasses,historicalStyleClasses);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Style class(es) ${diffs.add.join(", ")} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["styleClasses",`[name:${diff}]`]});if(removeErrors.length>0){errorConditions.push(`Class(es) ${removeErrors.join(", ")} removed from styleClasses of${errorMsgContext}'${removeConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const CaccHelpers=require('./jetwco-cacc-helpers');function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==='composite'){let errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty('styleVariables')||compareMetadata.hasOwnProperty('styleVariables')){const styleVariables=CaccHelpers.flattenArrayByAttr(metadata.styleVariables,'name');const historicalStyleVariables=CaccHelpers.flattenArrayByAttr(compareMetadata.styleVariables,'name');const diffs=CaccHelpers.stringArrayDiff(styleVariables,historicalStyleVariables);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Style variable(s) ${diffs.add.join(', ')} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return['styleVariables',`[name:${diff}]`]});if(removeErrors.length>0){errorConditions.push(`Style variable(s) ${removeErrors.join(', ')} removed from${errorMsgContext}'${removeConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join('\n')}}return};module.exports=controlCallback;
6
+ const CaccHelpers=require("./jetwco-cacc-helpers");function controlCallback(controlRuleName,controlRuleDef,semver,cacheManager,metadata,compareMetadata,componentVersionDiff,baselines,componentType,componentName,errorMsgContext,overrideTypeMappings){if(componentType==="composite"){let errorConditions=[];const{add:addConstraint,remove:removeConstraint}=controlRuleDef;const removeControlMetadata=CaccHelpers.deriveConstraintMetadata(baselines,removeConstraint);if(metadata.hasOwnProperty("styleVariables")||compareMetadata.hasOwnProperty("styleVariables")){const styleVariables=CaccHelpers.flattenArrayByAttr(metadata.styleVariables,"name");const historicalStyleVariables=CaccHelpers.flattenArrayByAttr(compareMetadata.styleVariables,"name");const diffs=CaccHelpers.stringArrayDiff(styleVariables,historicalStyleVariables);if(CaccHelpers.checkConstraintMinorMajor(diffs.add,addConstraint,componentVersionDiff)){errorConditions.push(`Style variable(s) ${diffs.add.join(", ")} added to${errorMsgContext}'${addConstraint}'`)}const removeErrors=CaccHelpers.checkConstraintMajorWithDeprecation(diffs.remove,removeConstraint,componentVersionDiff,cacheManager,componentName,removeControlMetadata,diff=>{return["styleVariables",`[name:${diff}]`]});if(removeErrors.length>0){errorConditions.push(`Style variable(s) ${removeErrors.join(", ")} removed from${errorMsgContext}'${removeConstraint}'`)}}if(errorConditions.length>0){return errorConditions.join("\n")}}return};module.exports=controlCallback;
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright (c) 2018, 2023, Oracle and/or its affiliates.
3
+ * Licensed under The Universal Permissive License (UPL), Version 1.0
4
+ * as shown at https://oss.oracle.com/licenses/upl/
5
+ */
6
+ const standardRemappings=[{oldType:"Object",newType:"object"},{oldType:"Void",newType:"void"},{oldType:"String",newType:"string"},{oldType:"Number",newType:"number"},{oldType:"Boolean",newType:"boolean"}];function applyCustomMappings(overrideMappings){let allMappings=[...standardRemappings];if(overrideMappings){for(const[key,value]of Object.entries(overrideMappings)){if(value&&value.length>0){if(Array.isArray(value)){const addMappings=value.map(newTarget=>{return{oldType:key,newType:newTarget}});allMappings=allMappings.concat(addMappings)}else if(typeof value==="string"){allMappings.push({oldType:key,newType:value})}}}}return allMappings}function fuzzyTypeMatch(oldType,newType,fuzzyMappings){let match=false;if(oldType==newType){match=true}else{let alternatives=fuzzyMappings.filter(fm=>{return fm.oldType===oldType&&fm.newType===newType});match=alternatives.length>0}return match}function generateFuzzyHistorical(oldTypeArray,fuzzyMappings){const expandedOldTypes=[...oldTypeArray];oldTypeArray.forEach(historicalType=>{const foundFuzzyMatches=fuzzyMappings.filter(ft=>ft.oldType===historicalType);foundFuzzyMatches.forEach(match=>{expandedOldTypes.push(match.newType)})});return expandedOldTypes}function generateFuzzyCurrent(newTypeArray,fuzzyMappings){const expandedNewTypes=[...newTypeArray];newTypeArray.forEach(newType=>{const foundFuzzyMatches=fuzzyMappings.filter(ft=>ft.newType===newType);foundFuzzyMatches.forEach(match=>{expandedNewTypes.push(match.oldType)})});return expandedNewTypes}module.exports={applyCustomMappings,fuzzyTypeMatch,generateFuzzyHistorical,generateFuzzyCurrent};
@@ -3,4 +3,4 @@
3
3
  * Licensed under The Universal Permissive License (UPL), Version 1.0
4
4
  * as shown at https://oss.oracle.com/licenses/upl/
5
5
  */
6
- const Utils=require('../jetwc-lib/jetwcutils-componentAuditUtils');const TsxUtils=require('../jetwc-lib/jetwcutils-tsxUtils');const ruleDef=function(){};ruleDef.prototype.getName=function(){return'jetwco-compjson-ns-reg'};ruleDef.prototype.getShortDescription=function(){return'Web component namespaces starting with \'oj-\' or \'ns-\' must be registered.'};ruleDef.prototype.getDescription=function(){return'Web components namespaces starting with prefixes \'oj-\' or \'ns-\' must be registered. A component must not use an un-registered namespace.'};ruleDef.prototype.register=function(context){return{startup:this._enableIfRequired,compjson:this._doAudit,Program:this._doVComponentAudit}};ruleDef.prototype._enableIfRequired=function(context){if(context.rulePack.isRuleEnabled('oj-cca-compjson-ns-reg','JET')){context.rulePack.disableRule()}};ruleDef.prototype._doAudit=function(context){if(context.suppData.obj){const meta=context.suppData.obj;const componentName=Utils.getComponentFullName(meta);if(componentName&&!context.utils.metaLib.isJetTag(componentName)&&(componentName.startsWith('oj-')||componentName.startsWith('ns-'))){const nameParts=componentName.split('-');if(nameParts.length>1){const checkNS=nameParts[0]+'-'+nameParts[1];if(!context.utils.metaLib.isNSRegistered(checkNS)){const issue=new context.Issue(`${componentName}: unregistered use of the '${nameParts[0]}' namespace`);issue.setPosition(this._getNamePos(context.suppData.ast));context.reporter.addIssue(issue,context)}}}}};ruleDef.prototype._doVComponentAudit=function(context){const componentInfo=TsxUtils.matchToVComponentImpl(context,context.filepath);if(componentInfo){const componentName=componentInfo.fullName;if(componentName&&!context.utils.metaLib.isJetTag(componentName)&&(componentName.startsWith('oj-')||componentName.startsWith('ns-'))){const nameParts=componentName.split('-');if(nameParts.length>1){const checkNS=nameParts[0]+'-'+nameParts[1];if(!context.utils.metaLib.isNSRegistered(checkNS)){const issue=new context.Issue(`${componentName}: unregistered use of the '${nameParts[0]}' namespace`);context.reporter.addIssue(issue,context)}}}}};ruleDef.prototype._getNamePos=function(ast){var props,name,pos,ret=null,i;if(ast&&ast.members){props=ast.members;for(i=0;i<props.length;i++){name=props[i];if(name.name==='name'){pos=name.pos;ret={line:pos.row,col:pos.col,startIndex:pos.index,endIndex:pos.index+5};break}}}return ret};module.exports=ruleDef;
6
+ const Utils=require("../jetwc-lib/jetwcutils-componentAuditUtils");const TsxUtils=require("../jetwc-lib/jetwcutils-tsxUtils");const ruleDef=function(){};ruleDef.prototype.getName=function(){return"jetwco-compjson-ns-reg"};ruleDef.prototype.getShortDescription=function(){return"Web component namespaces starting with 'oj-' or 'ns-' must be registered."};ruleDef.prototype.getDescription=function(){return"Web components namespaces starting with prefixes 'oj-' or 'ns-' must be registered. A component must not use an un-registered namespace."};ruleDef.prototype.register=function(context){return{startup:this._enableIfRequired,compjson:this._doAudit,Program:this._doVComponentAudit}};ruleDef.prototype._enableIfRequired=function(context){if(context.rulePack.isRuleEnabled("oj-cca-compjson-ns-reg","JET")){context.rulePack.disableRule()}};ruleDef.prototype._doAudit=function(context){if(context.suppData.obj){const meta=context.suppData.obj;const componentName=Utils.getComponentFullName(meta);if(componentName&&!context.utils.metaLib.isJetTag(componentName)&&(componentName.startsWith("oj-")||componentName.startsWith("ns-"))){const nameParts=componentName.split("-");if(nameParts.length>1){const checkNS=nameParts[0]+"-"+nameParts[1];if(!context.utils.metaLib.isNSRegistered(checkNS)){const issue=new context.Issue(`${componentName}: unregistered use of the '${nameParts[0]}' namespace`);issue.setPosition(this._getNamePos(context.suppData.ast));context.reporter.addIssue(issue,context)}}}}};ruleDef.prototype._doVComponentAudit=function(context){const componentInfo=TsxUtils.matchToVComponentImpl(context,context.filepath);if(componentInfo){const componentName=componentInfo.fullName;if(componentName&&!context.utils.metaLib.isJetTag(componentName)&&(componentName.startsWith("oj-")||componentName.startsWith("ns-"))){const nameParts=componentName.split("-");if(nameParts.length>1){const checkNS=nameParts[0]+"-"+nameParts[1];if(!context.utils.metaLib.isNSRegistered(checkNS)){const issue=new context.Issue(`${componentName}: unregistered use of the '${nameParts[0]}' namespace`);context.reporter.addIssue(issue,context)}}}}};ruleDef.prototype._getNamePos=function(ast){var props,name,pos,ret=null,i;if(ast&&ast.members){props=ast.members;for(i=0;i<props.length;i++){name=props[i];if(name.name==="name"){pos=name.pos;ret={line:pos.row,col:pos.col,startIndex:pos.index,endIndex:pos.index+5};break}}}return ret};module.exports=ruleDef;