@oracle/oraclejet-audit 18.0.6 → 18.1.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.
- package/jaf-amd.js +1 -1
- package/lib/checkage.js +1 -1
- package/lib/defaults.js +1 -1
- package/lib/sublib/precomp/Precompiler.js +1 -1
- package/meta/18.0.0/jetauditmeta.js +1 -1
- package/meta/18.1.0/jetauditmeta.js +9 -0
- package/meta/metaverlist.json +1 -1
- package/package.json +2 -2
- package/rules/jet/oj-html-binding-as-slot-child.js +1 -1
- package/rules/jet/oj-html-form-bindif.js +1 -1
- package/rules/jet/oj-tsx-form-bindif.js +1 -1
- package/schema/component-schema.json +1 -1
package/meta/metaverlist.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"metaList":{"8.3.0":{"version":"8.3.0","date":"Monday May 04, 2020","time":"4:34pm edt"},"13.0.0":{"version":"13.0.4","date":"Thursday Sep 22, 2022","time":"3:14am utc"},"13.1.0":{"version":"13.1.0","date":"Sunday Oct 02, 2022","time":"3:37am utc"},"14.0.0":{"version":"14.0.0","date":"Tuesday Jan 03, 2023","time":"8:54pm utc"},"14.1.0":{"version":"14.1.0","date":"Thursday Apr 06, 2023","time":"7:55pm utc"},"15.0.0":{"version":"15.0.0","date":"Saturday Jul 01, 2023","time":"2:08pm utc"},"15.1.0":{"version":"15.1.0","date":"Thursday Jul 06, 2023","time":"8:04pm utc"},"16.0.0":{"version":"16.0.0","date":"Saturday Feb 10, 2024","time":"4:36pm utc"},"16.1.0":{"version":"16.1.0","date":"Monday Feb 12, 2024","time":"8:58pm utc"},"17.0.0":{"version":"17.0.0","date":"Thursday Jul 25, 2024","time":"1:57am utc"},"17.1.0":{"version":"17.1.0","date":"Friday Nov 01, 2024","time":"11:30pm utc"},"18.0.0":{"version":"18.0.
|
|
1
|
+
{"metaList":{"8.3.0":{"version":"8.3.0","date":"Monday May 04, 2020","time":"4:34pm edt"},"13.0.0":{"version":"13.0.4","date":"Thursday Sep 22, 2022","time":"3:14am utc"},"13.1.0":{"version":"13.1.0","date":"Sunday Oct 02, 2022","time":"3:37am utc"},"14.0.0":{"version":"14.0.0","date":"Tuesday Jan 03, 2023","time":"8:54pm utc"},"14.1.0":{"version":"14.1.0","date":"Thursday Apr 06, 2023","time":"7:55pm utc"},"15.0.0":{"version":"15.0.0","date":"Saturday Jul 01, 2023","time":"2:08pm utc"},"15.1.0":{"version":"15.1.0","date":"Thursday Jul 06, 2023","time":"8:04pm utc"},"16.0.0":{"version":"16.0.0","date":"Saturday Feb 10, 2024","time":"4:36pm utc"},"16.1.0":{"version":"16.1.0","date":"Monday Feb 12, 2024","time":"8:58pm utc"},"17.0.0":{"version":"17.0.0","date":"Thursday Jul 25, 2024","time":"1:57am utc"},"17.1.0":{"version":"17.1.0","date":"Friday Nov 01, 2024","time":"11:30pm utc"},"18.0.0":{"version":"18.0.0","date":"Saturday Feb 08, 2025","time":"0:54am utc"},"18.1.0":{"version":"18.1.0","date":"Friday May 09, 2025","time":"4:40pm utc"}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oracle/oraclejet-audit",
|
|
3
|
-
"version": "18.0
|
|
3
|
+
"version": "18.1.0",
|
|
4
4
|
"description": "JET AUDIT FRAMEWORK",
|
|
5
5
|
"main": "jaf.js",
|
|
6
6
|
"files": [
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"lint"
|
|
45
45
|
],
|
|
46
46
|
"Jaf": {
|
|
47
|
-
"version": "11.
|
|
47
|
+
"version": "11.13.4"
|
|
48
48
|
},
|
|
49
49
|
"license": "UPL-1.0",
|
|
50
50
|
"dependencies": {
|
|
@@ -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 RULENAME="oj-html-binding-as-slot-child";const DESCRIPTION="JET binding components such as <oj-bind-if> are not present in the final browser "+"DOM at runtime, and as such will not function correctly when directly assigned to "+"a slot. They should either be relaced with <oj-if> which can be assigned to a slot, "+"or they should be wrapped in another element such as a <div> or <span> which has "+"the slot attribute applied.<br>";const SHORT_DESCRIPTION="The slot attribute should not be applied directly to JET binding components";const SLOT="slot";const TEMPLATE="template";const OJ_BIND="oj-bind";const OJ_BIND_IF="oj-bind-if";const OJ_IF="oj-if";const OJ_OPTION="oj-option";const BODY="body";const EXCEPTION_TAGS=["oj-accordion","oj-buttonset-many","oj-buttonset-one","oj-checkboxset","oj-combobox-many","oj-combobox-one","oj-film-strip","oj-form-layout","oj-list-item-layout","oj-masonry-layout","oj-menu","oj-menu-select-many","oj-optgroup","oj-radioset","oj-select-many","oj-select-single","oj-toolbar","oj-validation-group","template"];class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(regCtx){this._metaLib=regCtx.utils.metaLib;return{bindingtag:this._onBind}}_onBind(ruleCtx,tag){var attribs,attrib,node,parent,name;node=ruleCtx.tagNode;if(attribs=node.attribs){for(attrib in attribs){if(attrib===SLOT){this._emitIssue(1,ruleCtx,tag);break}}}if(parent=this._getParentElem(node,ruleCtx)){name=parent.name;if(name===OJ_IF){return}if(name===OJ_OPTION){if(parent?.parent?.name===TEMPLATE){return}}if(EXCEPTION_TAGS.includes(name)){return}if(this._metaLib.isWCTag(name)&&this._metaLib.hasTagDefaultSlot(name)){this._emitIssue(2,ruleCtx,node.name,name)}}}_getParentElem(node,ruleCtx){var parent,name;if(node&&(parent=node.parent)){if(name=parent.name){if(name.startsWith(OJ_BIND)||name===TEMPLATE||ruleCtx.utils.DomUtils.isSelfClosingTag(name)){return this._getParentElem(parent,ruleCtx)}if(name===BODY){return null}}return parent}return null}_emitIssue(msgType,ruleCtx,tagName,parentName){var issue;if(msgType===1){let msg=`The slot attribute must not be applied directly on a <${tagName}> : `;msg+=tagName===OJ_BIND_IF?`either relace with <oj-if> which can be assigned to a slot, or wrap in a <div> or <span> and apply the slot attribute to that.`:`wrap it in a <div> or <span> and apply the slot attribute to that.`;issue=new ruleCtx.Issue(msg)}else if(msgType===2){issue=new ruleCtx.Issue(`If <${tagName}> is used as the direct child of <${parentName}>, then <${parentName}> may not reflect updates to the bound value unless the <${tagName}> is enclosed in a DOM element such as <div> or <span>.`);issue.setMsgKey(RULENAME+"_1");issue.setSeverity("info")}ruleCtx.reporter.addIssue(issue,ruleCtx)}}module.exports=Rule;
|
|
6
|
+
const RULENAME="oj-html-binding-as-slot-child";const DESCRIPTION="JET binding components such as <oj-bind-if> are not present in the final browser "+"DOM at runtime, and as such will not function correctly when directly assigned to "+"a slot. They should either be relaced with <oj-if> which can be assigned to a slot, "+"or they should be wrapped in another element such as a <div> or <span> which has "+"the slot attribute applied.<br>";const SHORT_DESCRIPTION="The slot attribute should not be applied directly to JET binding components";const SLOT="slot";const TEMPLATE="template";const OJ_BIND="oj-bind";const OJ_BIND_IF="oj-bind-if";const OJ_IF="oj-if";const OJ_OPTION="oj-option";const BODY="body";const EXCEPTION_TAGS=["oj-accordion","oj-buttonset-many","oj-buttonset-one","oj-checkboxset","oj-combobox-many","oj-combobox-one","oj-film-strip","oj-form-layout","oj-c-form-layout","oj-list-item-layout","oj-masonry-layout","oj-menu","oj-menu-select-many","oj-optgroup","oj-radioset","oj-select-many","oj-select-single","oj-toolbar","oj-validation-group","template"];class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(regCtx){this._metaLib=regCtx.utils.metaLib;return{bindingtag:this._onBind}}_onBind(ruleCtx,tag){var attribs,attrib,node,parent,name;node=ruleCtx.tagNode;if(attribs=node.attribs){for(attrib in attribs){if(attrib===SLOT){this._emitIssue(1,ruleCtx,tag);break}}}if(parent=this._getParentElem(node,ruleCtx)){name=parent.name;if(name===OJ_IF){return}if(name===OJ_OPTION){if(parent?.parent?.name===TEMPLATE){return}}if(EXCEPTION_TAGS.includes(name)){return}if(this._metaLib.isWCTag(name)&&this._metaLib.hasTagDefaultSlot(name)){this._emitIssue(2,ruleCtx,node.name,name)}}}_getParentElem(node,ruleCtx){var parent,name;if(node&&(parent=node.parent)){if(name=parent.name){if(name.startsWith(OJ_BIND)||name===TEMPLATE||ruleCtx.utils.DomUtils.isSelfClosingTag(name)){return this._getParentElem(parent,ruleCtx)}if(name===BODY){return null}}return parent}return null}_emitIssue(msgType,ruleCtx,tagName,parentName){var issue;if(msgType===1){let msg=`The slot attribute must not be applied directly on a <${tagName}> : `;msg+=tagName===OJ_BIND_IF?`either relace with <oj-if> which can be assigned to a slot, or wrap in a <div> or <span> and apply the slot attribute to that.`:`wrap it in a <div> or <span> and apply the slot attribute to that.`;issue=new ruleCtx.Issue(msg)}else if(msgType===2){issue=new ruleCtx.Issue(`If <${tagName}> is used as the direct DOM child of <${parentName}>, then <${parentName}> may not reflect updates to the bound value unless the <${tagName}> is enclosed in a DOM element such as <div> or <span>.`);issue.setMsgKey(RULENAME+"_1");issue.setSeverity("info")}ruleCtx.reporter.addIssue(issue,ruleCtx)}}module.exports=Rule;
|
|
@@ -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 RULENAME="oj-html-form-bindif";const DESCRIPTION="<oj-form-layout> is meant to have static content only. The use of a 'bind' tag - <oj-bind-for-each>, <oj-bind-if>,"+"or <oj-if> - is not supported.<p>"+"The problem with using a 'bind' tag inside a form layout, is that the layout will not be refreshed if "+"its child DOM changes after instantiation (unless the refresh() method on the layout is called). This can result in the "+"layout not managing multiple columns correctly and is therefore not supported.<p>"+"If the 'bind' tag evaluation is fully resolved and will not change before the form is rendered, there will be no problem. "+"Similarly, if the form has only one column of fields, there is unlikely to be any visible issue. "+"If there is the possibility that the expression used to control the bind-if is going to change, then the solution is to put "+"the <oj-form-layout> inside the 'bind' tag' (i.e. split the form layout into multiple layouts and control each as a unit).";const SHORT_DESCRIPTION="The use of <oj-bind-for-each>, <oj-bind-if>, or <oj-if> inside <oj-form-layout> is not supported";const OJ_IF="oj-if";const OJ_BIND_IF="oj-bind-if";const OJ_BIND_FOR_EACH="oj-bind-for-each";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<oj-form-layout>":this._onForm}}_onForm(ruleCtx){let node=ruleCtx.tagNode;let attribs=node.attribs;if(this._attrVal(attribs,"direction")!=="column"){let maxcol=this._attrVal(attribs,"max-columns");if(isNaN(maxcol)||maxcol>1){this._walkDomChildren(ruleCtx,node)}}}_emit(ruleCtx,node){let issue=new ruleCtx.Issue(`<oj-form-layout> is meant to have static content only. The use of <${node.name}> is not supported`);issue.setPosition(null,null,node.startIndex+1,node.startIndex+node.name.length);ruleCtx.reporter.addIssue(issue,ruleCtx)}_walkDomChildren(ruleCtx,node){var ch,n,i,ok=true;;ch=node.children;if(ch){for(i=0;i<ch.length;i++){n=ch[i];if(n.type==="tag"){let name=n.name;if(name===OJ_BIND_FOR_EACH){ok=false;this._emit(ruleCtx,n)}else if(name===OJ_BIND_IF||name===OJ_IF){if(n.children&&n.children.length>1){ok=false;this._emit(ruleCtx,n)}}}}}return ok}_attrVal(attribs,attr){var v=attribs[attr];return attr==="max-columns"?parseInt(v):v}}module.exports=Rule;
|
|
6
|
+
const RULENAME="oj-html-form-bindif";const DESCRIPTION="<oj-form-layout> is meant to have static content only. The use of a 'bind' tag - <oj-bind-for-each>, <oj-bind-if>,"+"or <oj-if> - is not supported.<p>"+"The problem with using a 'bind' tag inside a form layout, is that the layout will not be refreshed if "+"its child DOM changes after instantiation (unless the refresh() method on the layout is called). This can result in the "+"layout not managing multiple columns correctly and is therefore not supported.<p>"+"If the 'bind' tag evaluation is fully resolved and will not change before the form is rendered, there will be no problem. "+"Similarly, if the form has only one column of fields, there is unlikely to be any visible issue. "+"If there is the possibility that the expression used to control the bind-if is going to change, then the solution is to put "+"the <oj-form-layout> inside the 'bind' tag' (i.e. split the form layout into multiple layouts and control each as a unit).";const SHORT_DESCRIPTION="The use of <oj-bind-for-each>, <oj-bind-if>, or <oj-if> inside <oj-form-layout> is not supported";const OJ_IF="oj-if";const OJ_BIND_IF="oj-bind-if";const OJ_BIND_FOR_EACH="oj-bind-for-each";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<oj-form-layout>":this._onForm,"<oj-c-form-layout>":this._onForm}}_onForm(ruleCtx){let node=ruleCtx.tagNode;let attribs=node.attribs;if(this._attrVal(attribs,"direction")!=="column"){let maxcol=this._attrVal(attribs,"max-columns");if(isNaN(maxcol)||maxcol>1){this._walkDomChildren(ruleCtx,node)}}}_emit(ruleCtx,node){let issue=new ruleCtx.Issue(`<oj-form-layout> is meant to have static content only. The use of <${node.name}> is not supported`);issue.setPosition(null,null,node.startIndex+1,node.startIndex+node.name.length);ruleCtx.reporter.addIssue(issue,ruleCtx)}_walkDomChildren(ruleCtx,node){var ch,n,i,ok=true;;ch=node.children;if(ch){for(i=0;i<ch.length;i++){n=ch[i];if(n.type==="tag"){let name=n.name;if(name===OJ_BIND_FOR_EACH){ok=false;this._emit(ruleCtx,n)}else if(name===OJ_BIND_IF||name===OJ_IF){if(n.children&&n.children.length>1){ok=false;this._emit(ruleCtx,n)}}}}}return ok}_attrVal(attribs,attr){var v=attribs[attr];return attr==="max-columns"?parseInt(v):v}}module.exports=Rule;
|
|
@@ -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 RULENAME="oj-tsx-form-bindif";const DESCRIPTION="<oj-form-layout> is meant to have static content only. The use of a 'bind' tag - <oj-bind-for-each>, <oj-bind-if>,"+"or <oj-if> - is not supported.<p>"+"The problem with using a 'bind' tag inside a form layout, is that the layout will not be refreshed if "+"its child DOM changes after instantiation (unless the refresh() method on the layout is called). This can result in the "+"layout not managing multiple columns correctly and is therefore not supported.<p>"+"If the 'bind' tag evaluation is fully resolved and will not change before the form is rendered, there will be no problem. "+"Similarly, if the form has only one column of fields, there is unlikely to be any visible issue. "+"If there is the possibility that the expression used to control the bind-if is going to change, then the solution is to put "+"the <oj-form-layout> inside the 'bind' tag' (i.e. split the form layout into multiple layouts and control each as a unit).";const SHORT_DESCRIPTION="The use of <oj-bind-for-each>, <oj-bind-if>, or <oj-if> inside <oj-form-layout> is not supported";const OJ_IF="oj-if";const OJ_BIND_IF="oj-bind-if";const OJ_BIND_FOR_EACH="oj-bind-for-each";const COLUMN="column";const MAX_COLUMNS="max-columns";const DIRECTION="direction";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"Tsx<oj-form-layout>":this._onForm}}_onForm(ruleCtx,tsxComp){let tsxUtils=ruleCtx.utils.tsxUtils;let val;if(val=tsxUtils.getPropertyRawValue(tsxComp,DIRECTION,true)){if(val!==COLUMN){let maxcol=tsxUtils.getPropertyRawValue(tsxComp,MAX_COLUMNS,true);if(!maxcol||isNaN(maxcol)||maxcol>1){this._walkDomChildren(ruleCtx,tsxComp)}}}}_emit(ruleCtx,tsxComp){let issue=new ruleCtx.Issue(`<oj-form-layout> is meant to have static content only. The use of <${tsxComp.name}> is not supported`);ruleCtx.utils.tsxUtils.setIssuePosition(issue,tsxComp);ruleCtx.reporter.addIssue(issue,ruleCtx)}_walkDomChildren(ruleCtx,comp){var ch,tsxComp,i,ok=true;;if(ch=comp.children){for(i=0;i<ch.length;i++){let name;tsxComp=ch[i];name=tsxComp.name;if(name===OJ_BIND_FOR_EACH){ok=false;this._emit(ruleCtx,tsxComp)}else if(name===OJ_BIND_IF||name===OJ_IF){if(tsxComp.children&&tsxComp.children.length>1){ok=false;this._emit(ruleCtx,tsxComp)}}}}return ok}}module.exports=Rule;
|
|
6
|
+
const RULENAME="oj-tsx-form-bindif";const DESCRIPTION="<oj-form-layout> is meant to have static content only. The use of a 'bind' tag - <oj-bind-for-each>, <oj-bind-if>,"+"or <oj-if> - is not supported.<p>"+"The problem with using a 'bind' tag inside a form layout, is that the layout will not be refreshed if "+"its child DOM changes after instantiation (unless the refresh() method on the layout is called). This can result in the "+"layout not managing multiple columns correctly and is therefore not supported.<p>"+"If the 'bind' tag evaluation is fully resolved and will not change before the form is rendered, there will be no problem. "+"Similarly, if the form has only one column of fields, there is unlikely to be any visible issue. "+"If there is the possibility that the expression used to control the bind-if is going to change, then the solution is to put "+"the <oj-form-layout> inside the 'bind' tag' (i.e. split the form layout into multiple layouts and control each as a unit).";const SHORT_DESCRIPTION="The use of <oj-bind-for-each>, <oj-bind-if>, or <oj-if> inside <oj-form-layout> is not supported";const OJ_IF="oj-if";const OJ_BIND_IF="oj-bind-if";const OJ_BIND_FOR_EACH="oj-bind-for-each";const COLUMN="column";const MAX_COLUMNS="max-columns";const DIRECTION="direction";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"Tsx<oj-form-layout>":this._onForm,"Tsx<oj-c-form-layout>":this._onForm}}_onForm(ruleCtx,tsxComp){let tsxUtils=ruleCtx.utils.tsxUtils;let val;if(val=tsxUtils.getPropertyRawValue(tsxComp,DIRECTION,true)){if(val!==COLUMN){let maxcol=tsxUtils.getPropertyRawValue(tsxComp,MAX_COLUMNS,true);if(!maxcol||isNaN(maxcol)||maxcol>1){this._walkDomChildren(ruleCtx,tsxComp)}}}}_emit(ruleCtx,tsxComp){let issue=new ruleCtx.Issue(`<oj-form-layout> is meant to have static content only. The use of <${tsxComp.name}> is not supported`);ruleCtx.utils.tsxUtils.setIssuePosition(issue,tsxComp);ruleCtx.reporter.addIssue(issue,ruleCtx)}_walkDomChildren(ruleCtx,comp){var ch,tsxComp,i,ok=true;;if(ch=comp.children){for(i=0;i<ch.length;i++){let name;tsxComp=ch[i];name=tsxComp.name;if(name===OJ_BIND_FOR_EACH){ok=false;this._emit(ruleCtx,tsxComp)}else if(name===OJ_BIND_IF||name===OJ_IF){if(tsxComp.children&&tsxComp.children.length>1){ok=false;this._emit(ruleCtx,tsxComp)}}}}return ok}}module.exports=Rule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"component-schema.json","title":"JSON Schema for Oracle JET component.json files","type":"object","definitions":{"jetCustomElementNameDef":{"$comment":"central definition for JET custom element names","type":"string","pattern":"^([a-z][a-z0-9_-]*)$","not":{"enum":["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"]}},"propNameRestrictionsDef":{"$comment":"web component property names cannot conflict with HTML global attribute names","propertyNames":{"not":{"enum":["accesskey","accessKey","accessKeyLabel","autocapitalize","autoCapitalize","class","className","contenteditable","contentEditable","dir","draggable","enterkeyhint","enterKeyHint","hidden","id","inputmode","inputMode","is","itemid","itemprop","itemref","itemscope","itemtype","lang","nonce","role","slot","spellcheck","style","tabindex","tabIndex","title","translate"]}}},"eventNameRestrictionsDef":{"$comment":"web component event names, which become 'on<name>' attributes at runtime, cannot conflict with HTML GlobalEventHandlers","propertyNames":{"not":{"enum":["abort","animationcancel","animationend","animationiteration","animationstart","auxclick","blur","cancel","canplay","canplaythrough","change","click","close","contextmenu","copy","cuechange","cut","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop","durationchange","emptied","ended","error","focus","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadeddata","loadedmetadata","loadstart","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","paste","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","securitypolicyviolation","seeked","seeking","select","slotchange","stalled","submit","suspend","timeupdate","toggle","touchcancel","touchend","touchmove","touchstart","volumechange","waiting","wheel"]}}},"commonPropsMetadataDef":{"$comment":"definitions of common Property metadata properties: top-level, nested, or within an extension","properties":{"enumValues":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"type":{"type":"string"},"value":{"type":["array","boolean","number","null","object","string"]},"writeback":{"type":"boolean"},"binding":{"$ref":"#/definitions/bindingDef"},"description":{"type":"string"},"displayName":{"type":"string"},"dynamicSlotDef":{"type":"string"},"eventGroup":{"type":"string"},"exclusiveMaximum":{"type":["number","string"]},"exclusiveMinimum":{"type":["number","string"]},"format":{"type":"string","enum":["double","float","int32","int64","binary","byte","color","date","date-time","email","time","password","uri"]},"help":{"type":"string"},"maximum":{"type":["number","string"]},"minimum":{"type":["number","string"]},"minCapabilities":{"$ref":"#/definitions/minCapabilitiesDef"},"pattern":{"type":"string","format":"regex"},"placeholder":{"type":"string"},"propertyEditorValues":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])*$":{"type":"object","properties":{"description":{"type":"string"},"displayName":{"type":"string"},"icon":{"$ref":"#/definitions/iconsDef"}},"additionalProperties":false}},"additionalProperties":false},"propertyGroup":{"type":"string"},"required":{"type":"boolean"},"status":{"$ref":"#/definitions/statusDef"},"templateSlotRenderType":{"type":"string"},"translatable":{"type":"boolean"},"units":{"type":"string"},"visible":{"type":"boolean"}}},"extensionApiDecorationDef":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"enumValues":{"type":"array","items":{"type":"string"}},"visible":{"type":"boolean"},"properties":{"type":"object","additionalProperties":{"$ref":"#/definitions/extensionApiDecorationDef"}}}},"extensionDataProviderPropsDef":{"type":"object","$comment":"DataProvider property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"value":{"type":["array","boolean","number","null","object","string"]},"key":{"type":"boolean"},"properties":{"$ref":"#/definitions/extensionDataProviderPropsDef"}},"required":["type"]}}},"extensionDef":{"type":"object","properties":{"vbdt":{"type":"object"},"catalog":{"type":"object","properties":{"apiDecoration":{"$ref":"#/definitions/extensionApiDecorationDef"}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"},"webelement":{"$ref":"#/definitions/extensionWebElementExceptionStatusDef"}}},"extensionJetDef":{"type":"object","properties":{"unsupportedBrowsers":{"type":"array","items":{"type":"string","enum":["IE11"]}}}},"extensionThemesDef":{"type":"object","properties":{"unsupportedThemes":{"type":"array","items":{"$ref":"#/definitions/availableThemesDef"}}}},"extensionComponentDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"audits":{"type":"string"},"componentPalette":{"type":"object","properties":{"visibility":{"type":"string","enum":["visible","whenPreferred","never"]}}},"defaultColumns":{"type":["number","string"],"multipleOf":1,"minimum":1,"maximum":12},"minColumns":{"type":["number","string"],"multipleOf":1,"minimum":1,"maximum":12},"usedFor":{"type":"array","items":{"type":"string","enum":["pageContent","page","formTemplate","fieldTemplate"]}},"visibility":{"type":"string","enum":["visible","oracleInternal"]}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"}}},"extensionSubPropsDef":{"type":"object","$comment":"relaxed definition for nested extension Properties; property names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","allOf":[{"$ref":"#/definitions/commonPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonPropsMetadataDef!!","properties":{"enumValues":{},"properties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"},"readOnly":{},"type":{},"value":{},"writeback":{},"binding":{},"description":{},"displayName":{},"dynamicSlotDef":{},"eventGroup":{},"exclusiveMaximum":{},"exclusiveMinimum":{},"format":{},"help":{},"maximum":{},"minimum":{},"minCapabilities":{},"pattern":{},"placeholder":{},"propertyEditorValues":{},"propertyGroup":{},"required":{},"status":{},"templateSlotRenderType":{},"translatable":{},"units":{},"visible":{}},"required":["type"]}]}},"additionalProperties":false},"extensionPropsDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"itemProperties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}}},"catalog":{"type":"object","properties":{"apiDecoration":{"$ref":"#/definitions/extensionApiDecorationDef"},"dataProviderProperties":{"$ref":"#/definitions/extensionDataProviderPropsDef"}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"},"webelement":{"$ref":"#/definitions/extensionWebElementExceptionStatusDef"}}},"extensionKeyedPropsDef":{"type":"object","properties":{"keys":{"type":"object","properties":{"type":{"type":"string"},"enumValues":{"type":"array","items":{"type":["string","number"]}}}},"values":{"type":"object","properties":{"type":{"type":"string"},"properties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}}}}},"extensionCatalogDef":{"type":"object","properties":{"catalog":{"type":"object","properties":{"audits":{"type":"string"},"category":{"type":"string"},"coverImage":{"type":"string"},"docUrl":{"type":"string","format":"uri"},"extraInfo":{"type":"object"},"readme":{"type":"string"},"referenceModules":{"type":"array","items":{"type":"string"}},"screenshots":{"type":"object","patternProperties":{"^(0|([1-9]{1}[0-9]*))$":{"type":"string"}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string"}}}}}},"extensionWebElementDef":{"type":"object","properties":{"webelement":{"type":"object","properties":{"package":{"$comment":"WebElement npm pkg name, with optional scope","type":"string"},"version":{"$ref":"#/definitions/semverRangeDef"},"docUrl":{"type":"string","format":"uri"}}}}},"extensionWebElementExceptionStatusDef":{"type":"object","properties":{"exceptionStatus":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["deprecated","getterOnly","unsupported"]},"since":{"$ref":"#/definitions/semverExactDef"},"description":{"type":"string"}}}}}},"extensionOracleDef":{"type":"object","properties":{"oracle":{"type":"object","properties":{"businessApprovals":{"type":"object","additionalProperties":{"type":"string"}},"icon":{"type":"string"},"uxSpecs":{"type":"array","items":{"type":"string"}}}}}},"iconsDef":{"type":"object","properties":{"iconPath":{"type":"string"},"selectedIconPath":{"type":"string"},"hoverIconPath":{"type":"string"}},"additionalProperties":false},"paramsDef":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"name":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"returnDef":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"properties":{"patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}}}},"additionalProperties":false},"bindingDef":{"type":"object","properties":{"consume":{"type":"object","properties":{"name":{"type":"string"}},"additionalProperties":false},"provide":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"default":{"type":["string","number","boolean","null"]},"transform":{"type":"object","additionalProperties":{"type":["string","number","boolean","null"]}}},"required":["name"],"additionalProperties":false}}},"additionalProperties":false},"minCapabilitiesDef":{"type":"object","properties":{"filter":{"type":"object","properties":{"nestedFilter":{"type":"boolean"},"textFilter":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"propsDef":{"type":"object","$comment":"strict definition for nested Properties; property names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","allOf":[{"$ref":"#/definitions/commonPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonPropsMetadataDef!!","properties":{"enumValues":{},"properties":{"$ref":"#/definitions/propsDef"},"readOnly":{},"type":{},"value":{},"writeback":{},"binding":{},"description":{},"displayName":{},"dynamicSlotDef":{},"eventGroup":{},"exclusiveMaximum":{},"exclusiveMinimum":{},"extension":{"$ref":"#/definitions/extensionPropsDef"},"format":{},"help":{},"maximum":{},"minimum":{},"minCapabilities":{},"pattern":{},"placeholder":{},"propertyEditorValues":{},"propertyGroup":{},"required":{},"status":{},"templateSlotRenderType":{},"translatable":{},"units":{},"visible":{}},"required":["type"],"additionalProperties":false}]}},"additionalProperties":false},"methodsDef":{"type":"object","$comment":"method names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","properties":{"internalName":{"type":"string","$comment":"method internalNames cannot conflict with reserved JS keywords","not":{"enum":["await","break","case","class","catch","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","implements","import","in","instanceof","interface","let","new","null","package","private","protected","public","return","super","static","switch","this","throw","true","try","typeof","var","void","while","with","yield"]}},"description":{"type":"string"},"displayName":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"params":{"$ref":"#/definitions/paramsDef"},"return":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"eventsDef":{"type":"object","$comment":"event names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"properties":{"bubbles":{"type":"boolean"},"cancelable":{"type":"boolean"},"description":{"type":"string"},"detail":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])+$":{"type":"object","properties":{"description":{"type":"string"},"type":{"type":"string"},"enumValues":{"type":"array","items":{"type":"string"}},"eventGroup":{"type":"string"},"extension":{"$ref":"#/definitions/extensionPropsDef"},"properties":{"$ref":"#/definitions/propsDef"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}},"additionalProperties":false},"displayName":{"type":"string"},"eventGroup":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"slotDataDef":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])+$":{"type":"object","properties":{"description":{"type":"string"},"type":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"properties":{"$ref":"#/definitions/propsDef"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}},"additionalProperties":false},"slotsDef":{"type":"object","$comment":"slot names & dynamic slot definition names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]*)$":{"type":"object","properties":{"data":{"$ref":"#/definitions/slotDataDef"},"description":{"type":"string"},"displayName":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"implicitBusyContext":{"type":"boolean"},"maxItems":{"type":"number","multipleOf":1},"minItems":{"type":"number","multipleOf":1,"minimum":0},"preferredContent":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/definitions/statusDef"},"templateSlotRenderType":{"type":"string"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"pathsDef":{"type":"object","properties":{"cdn":{"type":"object","properties":{"min":{"type":"string","format":"uri"},"debug":{"type":"string","format":"uri"}},"additionalProperties":false},"npm":{"type":"object","properties":{"min":{"type":"string"},"debug":{"type":"string"}},"additionalProperties":false},"name":{"type":"string"}},"additionalProperties":false},"propertyGroupObjDef":{"type":"object","properties":{"propertyGroup":{"type":"string"},"displayName":{"type":"string"},"items":{"type":"array","items":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/propertyGroupObjDef"}]}}},"additionalProperties":false},"semverExactDef":{"type":"string","$comment":"validates an EXACT semver string -- MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD], PRERELEASE and BUILD are optional -- see https://semver.org for details","pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"},"semverRangeDef":{"type":"string","$comment":"validates a semver range -- see https://github.com/npm/node-semver#ranges, https://github.com/npm/node-semver#advanced-range-syntax for details","pattern":"^(((=|>=|<=|=>|=<|>|<|!=|~|\\^)?(0|x|X|\\*|[1-9]\\d*)(\\.(0|x|X|\\*|[1-9]\\d*)){0,2}(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(\\s|\\s\\|\\|\\s|\\s-\\s)?)+$"},"statusDef":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["antiPattern","candidate","deprecated","maintenance","production","supersedes"]},"since":{"$ref":"#/definitions/semverExactDef"},"description":{"type":"string"},"target":{"type":"string","enum":["propertyType","parameterType","returnType","propertyValue"]},"themes":{"type":"array","items":{"$ref":"#/definitions/availableThemesDef"}},"value":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"allOf":[{"if":{"$comment":"if the Status 'type' is explicitly set to anything other than 'antiPattern', then 'themes' is invalid","properties":{"type":{"not":{"const":"antiPattern"}}},"required":["type"]},"then":{"propertyNames":{"not":{"const":"themes"}}},"else":{"if":{"$comment":"otherwise if the Status 'type' is explicitly set to 'antiPattern', then 'themes' is required","properties":{"type":{"const":"antiPattern"}},"required":["type"]},"then":{"required":["themes"]}}},{"if":{"$comment":"if the Status 'type' is explicitly set to 'candidate', 'maintenance', 'production', or 'supersedes', then 'target' is invalid","properties":{"type":{"enum":["candidate","maintenance","production","supersedes"]}},"required":["type"]},"then":{"propertyNames":{"not":{"const":"target"}}}}]}},"styleClassItemDef":{"$comment":"Union of styleClass, styleSet, and styleTemplate properties, allowing for effective auto-completion in code editors","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["class","set","template"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"styleSelector":{"type":"string"},"styleItems":{"type":"array","items":{"$ref":"#/definitions/styleClassItemDef"}},"tokens":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenDef"}}}},"styleClassStrictDef":{"$comment":"Strict styleClass definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["class"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleSelector":{"type":"string"}},"required":["name","kind"],"additionalProperties":false},"styleSetStrictDef":{"$comment":"Strict styleSet definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["set"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"styleItems":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/styleClassStrictDef"},{"$ref":"#/definitions/styleSetStrictDef"},{"$ref":"#/definitions/styleTemplateStrictDef"}]}}},"required":["name","kind","styleRelation","styleItems"],"additionalProperties":false},"styleTemplateStrictDef":{"$comment":"Strict styleTemplate definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["template"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleSelector":{"type":"string"},"tokens":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenDef"}}},"required":["name","kind","tokens"],"additionalProperties":false},"styleTemplateTokenDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"values":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenValueDef"}}},"required":["name","styleRelation","values"],"additionalProperties":false},"styleTemplateTokenValueDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"}},"required":["name"],"additionalProperties":false},"deprecatedStyleGroupDef":{"$comment":"DEPRECATED IN RELEASE 8.0.0. SHOULD BE REMOVED WHEN THAT RELEASE REACHES ITS END-OF-LIFE.","type":"object","properties":{"styleGroup":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}},"additionalProperties":false},"styleVariableDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"formats":{"type":"array","items":{"type":"string","enum":["color","font_weight","length","number","percentage","rgb_values","time"]}},"help":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/definitions/statusDef"}},"required":["name"],"additionalProperties":false},"contentItemsDef":{"type":"object","properties":{"name":{"$ref":"#/definitions/jetCustomElementNameDef"},"defaultExport":{"type":"boolean"},"description":{"type":"string"},"displayName":{"type":"string"},"export":{"type":"string"},"help":{"type":"string"},"main":{"type":"string"},"readme":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string","enum":["component","resource","vdom","hook","util","vbcs-pattern","vbcs-fragment"]},"metadata":{"type":"string"}},"required":["name"],"allOf":[{"$comment":"if the content type is 'component' (default), 'resource', 'vdom', 'hook', 'vbcs-pattern', or 'vbcs-fragment' then 'defaultExport' is invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"enum":["component","resource","vdom","hook","vbcs-pattern","vbcs-fragment"]}},"required":["type"]}]},"then":{"propertyNames":{"not":{"enum":["defaultExport"]}}}},{"$comment":"if the content type is not explicitly set to 'vdom', 'hook', 'vbcs-pattern', or 'vbcs-fragment' then 'metadata' is invalid","if":{"properties":{"type":{"not":{"enum":["vdom","hook","vbcs-pattern","vbcs-fragment"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["metadata"]}}}},{"$comment":"if the content type is explicitly set to 'resource', 'vbcs-pattern', or 'vbcs-fragment' then 'export' is invalid","if":{"properties":{"type":{"enum":["resource","vbcs-pattern","vbcs-fragment"]}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["export"]}}}}],"additionalProperties":false},"contentsDef":{"type":"array","items":{"$comment":"either an @contents@ token string OR a contentItems object","oneOf":[{"const":"@contents@"},{"$ref":"#/definitions/contentItemsDef"}]}},"commonContentsPropNamesDef":{"enum":["name","type","description","displayName","defaultExport","export","main","since","status","version","jetVersion","pack","license","extension","help","icon"]},"preferredParentItemDef":{"type":"object","properties":{"parentInterface":{"type":"string"},"isDirectParent":{"type":"boolean"},"extension":{"$ref":"#/definitions/extensionDef"},"status":{"$ref":"#/definitions/statusDef"}},"required":["parentInterface"]},"availableThemesDef":{"anyOf":[{"type":"string","enum":["Alta","Redwood","Stable"]},{"type":"string"}]}},"properties":{"name":{"$ref":"#/definitions/jetCustomElementNameDef"},"version":{"$ref":"#/definitions/semverExactDef"},"jetVersion":{"$ref":"#/definitions/semverRangeDef"},"actionParams":{"$ref":"#/definitions/paramsDef"},"actionResult":{"type":"string"},"bundles":{"type":"object","patternProperties":{"^([A-Za-z0-9_/-])+$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"contents":{"$ref":"#/definitions/contentsDef"},"defaultExport":{"type":"boolean"},"demoFor":{"type":"array","items":{"type":"string"}},"dependencies":{"$comment":"either an @dependencies@ token string OR an object with key-value pairs","oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$comment":"values in 'dependencies' key-value pairs are USUALLY valid semver ranges, but JET Packs require exact semvers -- see conditional rules below","type":"string"}}]},"dependencyScope":{"type":"string","enum":["installable","provided","runtime"]},"description":{"type":"string"},"displayName":{"type":"string"},"export":{"type":"string"},"properties":{"$ref":"#/definitions/propsDef"},"methods":{"$ref":"#/definitions/methodsDef"},"events":{"$ref":"#/definitions/eventsDef"},"slots":{"$ref":"#/definitions/slotsDef"},"dynamicSlots":{"$ref":"#/definitions/slotsDef"},"extension":{"allOf":[{"$ref":"#/definitions/extensionComponentDef"},{"$ref":"#/definitions/extensionCatalogDef"},{"$ref":"#/definitions/extensionWebElementDef"},{"$ref":"#/definitions/extensionOracleDef"}]},"help":{"type":"string"},"icon":{"$ref":"#/definitions/iconsDef"},"implements":{"type":"array","items":{"type":"string"}},"license":{"type":"string"},"main":{"type":"string"},"pack":{"type":"string","pattern":"^([a-z][a-z0-9_-]*)$"},"package":{"type":"string"},"params":{"$comment":"needed for 'hook' type","$ref":"#/definitions/paramsDef"},"paths":{"oneOf":[{"$ref":"#/definitions/pathsDef"},{"type":"array","items":{"$ref":"#/definitions/pathsDef"}}]},"preferredParent":{"type":"array","items":{"$ref":"#/definitions/preferredParentItemDef"}},"propertyLayout":{"type":"array","items":{"$ref":"#/definitions/propertyGroupObjDef"}},"publicModules":{"type":"array","items":{"type":"string"}},"return":{"$comment":"needed for 'hook' type","$ref":"#/definitions/returnDef"},"since":{"$ref":"#/definitions/semverExactDef"},"status":{"$ref":"#/definitions/statusDef"},"styleClasses":{"type":"array","items":{"$ref":"#/definitions/styleClassItemDef"}},"styleVariables":{"type":"array","items":{"$ref":"#/definitions/styleVariableDef"}},"subcomponentType":{"type":"string","enum":["data","patternImpl","packPrivate"]},"translationBundle":{"type":"string"},"type":{"type":"string","enum":["composite","core","pack","mono-pack","reference","resource","demo","stripe","vdom","hook","vbcs-pattern","vbcs-template","vbcs-action","vbcs-fragment"]},"typesRoot":{"type":"string"}},"patternProperties":{"^x-.+$":{"$comment":"Also allow OpenAPI extension properties at the top level."}},"required":["name"],"additionalProperties":false,"$comment":"the following 'allOf' array entries specify conditional validation rules, per JSON Schema draft-07","allOf":[{"$comment":"if the 'type' property is explicitly set to anything other than 'composite' or 'core', then 'implements' and 'preferredParent' are invalid","if":{"properties":{"type":{"not":{"enum":["core","composite"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["implements","preferredParent"]}}}},{"$comment":"if the 'type' property is explicitly set to anything other than 'composite', 'core', 'vdom' or 'hook', then 'main' is invalid","if":{"properties":{"type":{"not":{"enum":["core","composite","vdom","hook"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["main"]}}}},{"$comment":"if the component type is explicitly set to 'core', then the 'since' property is required","if":{"properties":{"type":{"const":"core"}},"required":["type"]},"then":{"required":["since"]}},{"$comment":"if optional 'styleClasses' metadata exists, then apply strict validation rules","if":{"required":["styleClasses"]},"then":{"$comment":"stricter rules for 'styleClasses' metadata for validation purposes -- this will simplify once deprecated 'styleGroup' reaches end-of-life","oneOf":[{"$comment":"EITHER an array in which all items are instances of new 'styleClasses' metadata...","properties":{"styleClasses":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/styleClassStrictDef"},{"$ref":"#/definitions/styleSetStrictDef"},{"$ref":"#/definitions/styleTemplateStrictDef"}]}}}},{"$comment":"...OR an array in which all items are instances of old, deprecated 'styleGroup' metadata","properties":{"styleClasses":{"type":"array","items":{"$ref":"#/definitions/deprecatedStyleGroupDef"}}}}]}},{"$comment":"if the component type is explicitly set to 'reference', then the 'package' property is required","if":{"properties":{"type":{"const":"reference"}},"required":["type"]},"then":{"required":["package"]},"else":{"$comment":"otherwise, if the component type is not explicitly set to 'mono-pack', then 'package' property is invalid","if":{"not":{"properties":{"type":{"const":"mono-pack"}},"required":["type"]}},"then":{"propertyNames":{"not":{"enum":["package"]}}}}},{"$comment":"if the component type is explicitly NOT 'resource', then the 'publicModules' property is invalid","if":{"properties":{"type":{"not":{"const":"resource"}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["publicModules"]}}}},{"$comment":"if the component type is explicitly set to 'pack', then values of 'dependencies' property key-value pairs must be exact semver strings AND 'pack' property is invalid (nested JET Packs not allowed)","if":{"properties":{"type":{"const":"pack"}},"required":["type"]},"then":{"properties":{"dependencies":{"oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$ref":"#/definitions/semverExactDef"}}]}},"propertyNames":{"not":{"enum":["pack"]}}},"else":{"$comment":"otherwise, the values of 'dependencies' property key-value pairs must be a semver range string","properties":{"dependencies":{"oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$ref":"#/definitions/semverRangeDef"}}]}}}},{"$comment":"if the component type is explicitly set to 'mono-pack', then the 'contents', 'jetVersion', and 'version' properties are required AND 'pack' property is invalid (nested JET Packs not allowed)","if":{"properties":{"type":{"const":"mono-pack"}},"required":["type"]},"then":{"required":["contents","jetVersion","version"],"propertyNames":{"not":{"enum":["pack"]}}},"else":{"$comment":"otherwise, the 'contents' and 'typesRoot' properties are invalid (reserved for mono-packs)","propertyNames":{"not":{"enum":["contents","typesRoot"]}}}},{"$comment":"if the component type is explicitly set to 'reference', then the 'jetVersion' property is invalid","if":{"properties":{"type":{"const":["reference"]}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["jetVersion"]}}}},{"$comment":"if the component type is explicitly neither 'mono-pack' nor 'reference', then the 'translationBundle' property is invalid","if":{"properties":{"type":{"not":{"enum":["mono-pack","reference"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["translationBundle"]}}}},{"$comment":"if the component type is explicitly set to 'vdom', then only a subset of metadata properties are supported","if":{"properties":{"type":{"const":"vdom"}},"required":["type"]},"then":{"allOf":[{"propertyNames":{"anyOf":[{"$ref":"#/definitions/commonContentsPropNamesDef"},{"enum":["properties"]}]}},{"properties":{"properties":{"$comment":"vdom (Preact) property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","$comment":"only support a subset of metadata properties for vdom (Preact) Props","propertyNames":{"enum":["type","description","required","status","value"]}}}}}}]}},{"$comment":"if the component type is explicitly set to 'hook', then only a subset of metadata properties are supported","if":{"properties":{"type":{"const":"hook"}},"required":["type"]},"then":{"propertyNames":{"anyOf":[{"$ref":"#/definitions/commonContentsPropNamesDef"},{"enum":["params","return"]}]}},"else":{"$comment":"otherwise, the 'params' and 'return' properties are invalid (reserved for 'hooks')","propertyNames":{"not":{"enum":["params","return"]}}}},{"$comment":"if the component type is explicitly neither 'vdom' nor 'hook', then the 'defaultExport' and 'export' properties are invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"not":{"enum":["vdom","hook"]}}},"required":["type"]}]},"then":{"propertyNames":{"not":{"enum":["defaultExport","export"]}}}},{"$comment":"if the component type is explicitly set to 'demo', then the 'demoFor' property is required; else the 'demoFor' property is invalid","if":{"properties":{"type":{"const":"demo"}},"required":["type"]},"then":{"required":["demoFor"]},"else":{"propertyNames":{"not":{"enum":["demoFor"]}}}},{"$comment":"if the component type is explicitly set to 'stripe', then 'pack' property is invalid (stripe components are always singletons)","if":{"properties":{"type":{"const":"stripe"}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["pack"]}}}},{"$comment":"if the component type is explicitly set to 'vbcs-action', then the 'actionParams' and 'actionResult' properties are required; otherwise they are invalid","if":{"properties":{"type":{"const":"vbcs-action"}},"required":["type"]},"then":{"required":["actionParams","actionResult"]},"else":{"propertyNames":{"not":{"enum":["actionParams","actionResult"]}}}},{"$comment":"if the component type is NOT 'vbcs-fragment', then apply additional restrictions to property, event names; otherwise 'methods' is invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"not":{"const":"vbcs-fragment"}}},"required":["type"]}]},"then":{"properties":{"properties":{"$ref":"#/definitions/propNameRestrictionsDef"},"events":{"$ref":"#/definitions/eventNameRestrictionsDef"}}},"else":{"propertyNames":{"not":{"enum":["methods"]}}}}]}
|
|
1
|
+
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"component-schema.json","title":"JSON Schema for Oracle JET component.json files","type":"object","definitions":{"jetCustomElementNameDef":{"$comment":"central definition for JET custom element names","type":"string","pattern":"^([a-z][a-z0-9_-]*)$","not":{"enum":["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"]}},"propNameRestrictionsDef":{"$comment":"web component property names cannot conflict with HTML global attribute names","propertyNames":{"not":{"enum":["accesskey","accessKey","accessKeyLabel","autocapitalize","autoCapitalize","class","className","contenteditable","contentEditable","dir","draggable","enterkeyhint","enterKeyHint","hidden","id","inputmode","inputMode","is","itemid","itemprop","itemref","itemscope","itemtype","lang","nonce","role","slot","spellcheck","style","tabindex","tabIndex","title","translate"]}}},"eventNameRestrictionsDef":{"$comment":"web component event names, which become 'on<name>' attributes at runtime, cannot conflict with HTML GlobalEventHandlers","propertyNames":{"not":{"enum":["abort","animationcancel","animationend","animationiteration","animationstart","auxclick","blur","cancel","canplay","canplaythrough","change","click","close","contextmenu","copy","cuechange","cut","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop","durationchange","emptied","ended","error","focus","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadeddata","loadedmetadata","loadstart","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","paste","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","securitypolicyviolation","seeked","seeking","select","slotchange","stalled","submit","suspend","timeupdate","toggle","touchcancel","touchend","touchmove","touchstart","volumechange","waiting","wheel"]}}},"commonPropsMetadataDef":{"$comment":"definitions of common Property metadata properties: top-level, nested, or within an extension","properties":{"enumValues":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"type":{"type":"string"},"value":{"type":["array","boolean","number","null","object","string"]},"writeback":{"type":"boolean"},"binding":{"$ref":"#/definitions/bindingDef"},"description":{"type":"string"},"displayName":{"type":"string"},"dynamicSlotDef":{"type":"string"},"eventGroup":{"type":"string"},"exclusiveMaximum":{"type":["number","string"]},"exclusiveMinimum":{"type":["number","string"]},"format":{"type":"string","enum":["double","float","int32","int64","binary","byte","color","date","date-time","email","time","password","uri"]},"help":{"type":"string"},"maximum":{"type":["number","string"]},"minimum":{"type":["number","string"]},"minCapabilities":{"$ref":"#/definitions/minCapabilitiesDef"},"pattern":{"type":"string","format":"regex"},"placeholder":{"type":"string"},"propertyEditorValues":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])*$":{"type":"object","properties":{"description":{"type":"string"},"displayName":{"type":"string"},"icon":{"$ref":"#/definitions/iconsDef"}},"additionalProperties":false}},"additionalProperties":false},"propertyGroup":{"type":"string"},"required":{"type":"boolean"},"status":{"$ref":"#/definitions/statusDef"},"templateSlotRenderType":{"type":"string"},"translatable":{"type":"boolean"},"units":{"type":"string"},"visible":{"type":"boolean"}}},"extensionApiDecorationDef":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"enumValues":{"type":"array","items":{"type":"string"}},"visible":{"type":"boolean"},"properties":{"type":"object","additionalProperties":{"$ref":"#/definitions/extensionApiDecorationDef"}}}},"extensionDataProviderPropsDef":{"type":"object","$comment":"DataProvider property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"value":{"type":["array","boolean","number","null","object","string"]},"key":{"type":"boolean"},"properties":{"$ref":"#/definitions/extensionDataProviderPropsDef"}},"required":["type"]}}},"extensionDef":{"type":"object","properties":{"vbdt":{"type":"object"},"catalog":{"type":"object","properties":{"apiDecoration":{"$ref":"#/definitions/extensionApiDecorationDef"}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"},"webelement":{"$ref":"#/definitions/extensionWebElementExceptionStatusDef"}}},"extensionJetDef":{"type":"object","properties":{"unsupportedBrowsers":{"type":"array","items":{"type":"string","enum":["IE11"]}}}},"extensionThemesDef":{"type":"object","properties":{"unsupportedThemes":{"type":"array","items":{"$ref":"#/definitions/availableThemesDef"}}}},"extensionComponentDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"audits":{"type":"string"},"componentPalette":{"type":"object","properties":{"visibility":{"type":"string","enum":["visible","whenPreferred","never"]}}},"defaultColumns":{"type":["number","string"],"multipleOf":1,"minimum":1,"maximum":12},"minColumns":{"type":["number","string"],"multipleOf":1,"minimum":1,"maximum":12},"usedFor":{"type":"array","items":{"type":"string","enum":["pageContent","page","formTemplate","fieldTemplate"]}},"visibility":{"type":"string","enum":["visible","oracleInternal"]}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"}}},"extensionSubPropsDef":{"type":"object","$comment":"relaxed definition for nested extension Properties; property names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","allOf":[{"$ref":"#/definitions/commonPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonPropsMetadataDef!!","properties":{"enumValues":{},"properties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"},"readOnly":{},"type":{},"value":{},"writeback":{},"binding":{},"description":{},"displayName":{},"dynamicSlotDef":{},"eventGroup":{},"exclusiveMaximum":{},"exclusiveMinimum":{},"format":{},"help":{},"maximum":{},"minimum":{},"minCapabilities":{},"pattern":{},"placeholder":{},"propertyEditorValues":{},"propertyGroup":{},"required":{},"status":{},"templateSlotRenderType":{},"translatable":{},"units":{},"visible":{}},"required":["type"]}]}},"additionalProperties":false},"extensionPropsDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"itemProperties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}}},"catalog":{"type":"object","properties":{"apiDecoration":{"$ref":"#/definitions/extensionApiDecorationDef"},"dataProviderProperties":{"$ref":"#/definitions/extensionDataProviderPropsDef"}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"},"webelement":{"$ref":"#/definitions/extensionWebElementExceptionStatusDef"}}},"extensionKeyedPropsDef":{"type":"object","properties":{"keys":{"type":"object","properties":{"type":{"type":"string"},"enumValues":{"type":"array","items":{"type":["string","number"]}}}},"values":{"type":"object","properties":{"type":{"type":"string"},"properties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}}}}},"extensionCatalogDef":{"type":"object","properties":{"catalog":{"type":"object","properties":{"audits":{"type":"string"},"category":{"type":"string"},"coverImage":{"type":"string"},"docUrl":{"type":"string","format":"uri"},"extraInfo":{"type":"object"},"readme":{"type":"string"},"referenceModules":{"type":"array","items":{"type":"string"}},"screenshots":{"type":"object","patternProperties":{"^(0|([1-9]{1}[0-9]*))$":{"type":"string"}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string"}}}}}},"extensionWebElementDef":{"type":"object","properties":{"webelement":{"type":"object","properties":{"package":{"$comment":"WebElement npm pkg name, with optional scope","type":"string"},"version":{"$ref":"#/definitions/semverRangeDef"},"docUrl":{"type":"string","format":"uri"}}}}},"extensionWebElementExceptionStatusDef":{"type":"object","properties":{"exceptionStatus":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["deprecated","getterOnly","unsupported"]},"since":{"$ref":"#/definitions/semverExactDef"},"description":{"type":"string"}}}}}},"extensionOracleDef":{"type":"object","properties":{"oracle":{"type":"object","properties":{"businessApprovals":{"type":"object","additionalProperties":{"type":"string"}},"icon":{"type":"string"},"uxSpecs":{"type":"array","items":{"type":"string"}}}}}},"iconsDef":{"type":"object","properties":{"iconPath":{"type":"string"},"selectedIconPath":{"type":"string"},"hoverIconPath":{"type":"string"}},"additionalProperties":false},"paramsDef":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"name":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"returnDef":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"properties":{"patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}}}},"additionalProperties":false},"bindingDef":{"type":"object","properties":{"consume":{"type":"object","properties":{"name":{"type":"string"}},"additionalProperties":false},"provide":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"default":{"type":["string","number","boolean","null"]},"transform":{"type":"object","additionalProperties":{"type":["string","number","boolean","null"]}}},"required":["name"],"additionalProperties":false}}},"additionalProperties":false},"minCapabilitiesDef":{"type":"object","properties":{"filter":{"type":"object","properties":{"nestedFilter":{"type":"boolean"},"textFilter":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"propsDef":{"type":"object","$comment":"strict definition for nested Properties; property names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","allOf":[{"$ref":"#/definitions/commonPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonPropsMetadataDef!!","properties":{"enumValues":{},"properties":{"$ref":"#/definitions/propsDef"},"readOnly":{},"type":{},"value":{},"writeback":{},"binding":{},"description":{},"displayName":{},"dynamicSlotDef":{},"eventGroup":{},"exclusiveMaximum":{},"exclusiveMinimum":{},"extension":{"$ref":"#/definitions/extensionPropsDef"},"format":{},"help":{},"maximum":{},"minimum":{},"minCapabilities":{},"pattern":{},"placeholder":{},"propertyEditorValues":{},"propertyGroup":{},"required":{},"status":{},"templateSlotRenderType":{},"translatable":{},"units":{},"visible":{}},"required":["type"],"additionalProperties":false}]}},"additionalProperties":false},"methodsDef":{"type":"object","$comment":"method names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","properties":{"internalName":{"type":"string","$comment":"method internalNames cannot conflict with reserved JS keywords","not":{"enum":["await","break","case","class","catch","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","implements","import","in","instanceof","interface","let","new","null","package","private","protected","public","return","super","static","switch","this","throw","true","try","typeof","var","void","while","with","yield"]}},"description":{"type":"string"},"displayName":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"params":{"$ref":"#/definitions/paramsDef"},"return":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"eventsDef":{"type":"object","$comment":"event names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"properties":{"bubbles":{"type":"boolean"},"cancelable":{"type":"boolean"},"description":{"type":"string"},"detail":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])+$":{"type":"object","properties":{"description":{"type":"string"},"type":{"type":"string"},"enumValues":{"type":"array","items":{"type":"string"}},"eventGroup":{"type":"string"},"extension":{"$ref":"#/definitions/extensionPropsDef"},"properties":{"$ref":"#/definitions/propsDef"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}},"additionalProperties":false},"displayName":{"type":"string"},"eventGroup":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"slotDataDef":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])+$":{"type":"object","properties":{"description":{"type":"string"},"type":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"properties":{"$ref":"#/definitions/propsDef"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}},"additionalProperties":false},"slotsDef":{"type":"object","$comment":"slot names & dynamic slot definition names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]*)$":{"type":"object","properties":{"data":{"$ref":"#/definitions/slotDataDef"},"description":{"type":"string"},"displayName":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"implicitBusyContext":{"type":"boolean"},"maxItems":{"type":"number","multipleOf":1},"minItems":{"type":"number","multipleOf":1,"minimum":0},"preferredContent":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/definitions/statusDef"},"templateSlotRenderType":{"type":"string"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"pathsDef":{"type":"object","properties":{"cdn":{"type":"object","properties":{"min":{"type":"string","format":"uri"},"debug":{"type":"string","format":"uri"}},"additionalProperties":false},"npm":{"type":"object","properties":{"min":{"type":"string"},"debug":{"type":"string"}},"additionalProperties":false},"name":{"type":"string"}},"additionalProperties":false},"propertyGroupObjDef":{"type":"object","properties":{"propertyGroup":{"type":"string"},"displayName":{"type":"string"},"items":{"type":"array","items":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/propertyGroupObjDef"}]}}},"additionalProperties":false},"requirementDef":{"type":"object","properties":{"type":{"type":"string","enum":["anyOf"]},"description":{"type":"string"},"properties":{"type":"array","items":{"type":"string"}},"slots":{"type":"array","items":{"type":"string"}}},"required":["type"],"additionalProperties":false},"semverExactDef":{"type":"string","$comment":"validates an EXACT semver string -- MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD], PRERELEASE and BUILD are optional -- see https://semver.org for details","pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"},"semverRangeDef":{"type":"string","$comment":"validates a semver range -- see https://github.com/npm/node-semver#ranges, https://github.com/npm/node-semver#advanced-range-syntax for details","pattern":"^(((=|>=|<=|=>|=<|>|<|!=|~|\\^)?(0|x|X|\\*|[1-9]\\d*)(\\.(0|x|X|\\*|[1-9]\\d*)){0,2}(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(\\s|\\s\\|\\|\\s|\\s-\\s)?)+$"},"statusDef":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["antiPattern","candidate","deprecated","maintenance","production","supersedes"]},"since":{"$ref":"#/definitions/semverExactDef"},"description":{"type":"string"},"target":{"type":"string","enum":["propertyType","parameterType","returnType","propertyValue"]},"themes":{"type":"array","items":{"$ref":"#/definitions/availableThemesDef"}},"value":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"allOf":[{"if":{"$comment":"if the Status 'type' is explicitly set to anything other than 'antiPattern', then 'themes' is invalid","properties":{"type":{"not":{"const":"antiPattern"}}},"required":["type"]},"then":{"propertyNames":{"not":{"const":"themes"}}},"else":{"if":{"$comment":"otherwise if the Status 'type' is explicitly set to 'antiPattern', then 'themes' is required","properties":{"type":{"const":"antiPattern"}},"required":["type"]},"then":{"required":["themes"]}}},{"if":{"$comment":"if the Status 'type' is explicitly set to 'candidate', 'maintenance', 'production', or 'supersedes', then 'target' is invalid","properties":{"type":{"enum":["candidate","maintenance","production","supersedes"]}},"required":["type"]},"then":{"propertyNames":{"not":{"const":"target"}}}}]}},"styleClassItemDef":{"$comment":"Union of styleClass, styleSet, and styleTemplate properties, allowing for effective auto-completion in code editors","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["class","set","template"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"styleSelector":{"type":"string"},"styleItems":{"type":"array","items":{"$ref":"#/definitions/styleClassItemDef"}},"tokens":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenDef"}}}},"styleClassStrictDef":{"$comment":"Strict styleClass definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["class"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleSelector":{"type":"string"}},"required":["name","kind"],"additionalProperties":false},"styleSetStrictDef":{"$comment":"Strict styleSet definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["set"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"styleItems":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/styleClassStrictDef"},{"$ref":"#/definitions/styleSetStrictDef"},{"$ref":"#/definitions/styleTemplateStrictDef"}]}}},"required":["name","kind","styleRelation","styleItems"],"additionalProperties":false},"styleTemplateStrictDef":{"$comment":"Strict styleTemplate definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["template"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleSelector":{"type":"string"},"tokens":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenDef"}}},"required":["name","kind","tokens"],"additionalProperties":false},"styleTemplateTokenDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"values":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenValueDef"}}},"required":["name","styleRelation","values"],"additionalProperties":false},"styleTemplateTokenValueDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"}},"required":["name"],"additionalProperties":false},"deprecatedStyleGroupDef":{"$comment":"DEPRECATED IN RELEASE 8.0.0. SHOULD BE REMOVED WHEN THAT RELEASE REACHES ITS END-OF-LIFE.","type":"object","properties":{"styleGroup":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}},"additionalProperties":false},"styleVariableDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"formats":{"type":"array","items":{"type":"string","enum":["color","font_weight","length","number","percentage","rgb_values","time"]}},"help":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/definitions/statusDef"}},"required":["name"],"additionalProperties":false},"contentItemsDef":{"type":"object","properties":{"name":{"$ref":"#/definitions/jetCustomElementNameDef"},"defaultExport":{"type":"boolean"},"description":{"type":"string"},"displayName":{"type":"string"},"export":{"type":"string"},"help":{"type":"string"},"main":{"type":"string"},"readme":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string","enum":["component","resource","vdom","hook","util","vbcs-pattern","vbcs-fragment"]},"metadata":{"type":"string"}},"required":["name"],"allOf":[{"$comment":"if the content type is 'component' (default), 'resource', 'vdom', 'hook', 'vbcs-pattern', or 'vbcs-fragment' then 'defaultExport' is invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"enum":["component","resource","vdom","hook","vbcs-pattern","vbcs-fragment"]}},"required":["type"]}]},"then":{"propertyNames":{"not":{"enum":["defaultExport"]}}}},{"$comment":"if the content type is not explicitly set to 'vdom', 'hook', 'vbcs-pattern', or 'vbcs-fragment' then 'metadata' is invalid","if":{"properties":{"type":{"not":{"enum":["vdom","hook","vbcs-pattern","vbcs-fragment"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["metadata"]}}}},{"$comment":"if the content type is explicitly set to 'resource', 'vbcs-pattern', or 'vbcs-fragment' then 'export' is invalid","if":{"properties":{"type":{"enum":["resource","vbcs-pattern","vbcs-fragment"]}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["export"]}}}}],"additionalProperties":false},"contentsDef":{"type":"array","items":{"$comment":"either an @contents@ token string OR a contentItems object","oneOf":[{"const":"@contents@"},{"$ref":"#/definitions/contentItemsDef"}]}},"commonContentsPropNamesDef":{"enum":["name","type","description","displayName","defaultExport","export","main","since","status","version","jetVersion","pack","license","extension","help","icon"]},"preferredParentItemDef":{"type":"object","properties":{"parentInterface":{"type":"string"},"isDirectParent":{"type":"boolean"},"extension":{"$ref":"#/definitions/extensionDef"},"status":{"$ref":"#/definitions/statusDef"}},"required":["parentInterface"]},"availableThemesDef":{"anyOf":[{"type":"string","enum":["Alta","Redwood","Stable"]},{"type":"string"}]}},"properties":{"name":{"$ref":"#/definitions/jetCustomElementNameDef"},"version":{"$ref":"#/definitions/semverExactDef"},"jetVersion":{"$ref":"#/definitions/semverRangeDef"},"actionParams":{"$ref":"#/definitions/paramsDef"},"actionResult":{"type":"string"},"bundles":{"type":"object","patternProperties":{"^([A-Za-z0-9_/-])+$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"contents":{"$ref":"#/definitions/contentsDef"},"defaultExport":{"type":"boolean"},"demoFor":{"type":"array","items":{"type":"string"}},"dependencies":{"$comment":"either an @dependencies@ token string OR an object with key-value pairs","oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$comment":"values in 'dependencies' key-value pairs are USUALLY valid semver ranges, but JET Packs require exact semvers -- see conditional rules below","type":"string"}}]},"dependencyScope":{"type":"string","enum":["installable","provided","runtime"]},"description":{"type":"string"},"displayName":{"type":"string"},"export":{"type":"string"},"properties":{"$ref":"#/definitions/propsDef"},"methods":{"$ref":"#/definitions/methodsDef"},"events":{"$ref":"#/definitions/eventsDef"},"slots":{"$ref":"#/definitions/slotsDef"},"dynamicSlots":{"$ref":"#/definitions/slotsDef"},"extension":{"allOf":[{"$ref":"#/definitions/extensionComponentDef"},{"$ref":"#/definitions/extensionCatalogDef"},{"$ref":"#/definitions/extensionWebElementDef"},{"$ref":"#/definitions/extensionOracleDef"}]},"help":{"type":"string"},"icon":{"$ref":"#/definitions/iconsDef"},"implements":{"type":"array","items":{"type":"string"}},"license":{"type":"string"},"main":{"type":"string"},"pack":{"type":"string","pattern":"^([a-z][a-z0-9_-]*)$"},"package":{"type":"string"},"params":{"$comment":"needed for 'hook' type","$ref":"#/definitions/paramsDef"},"paths":{"oneOf":[{"$ref":"#/definitions/pathsDef"},{"type":"array","items":{"$ref":"#/definitions/pathsDef"}}]},"preferredParent":{"type":"array","items":{"$ref":"#/definitions/preferredParentItemDef"}},"propertyLayout":{"type":"array","items":{"$ref":"#/definitions/propertyGroupObjDef"}},"publicModules":{"type":"array","items":{"type":"string"}},"requirements":{"type":"array","items":{"$ref":"#/definitions/requirementDef"}},"return":{"$comment":"needed for 'hook' type","$ref":"#/definitions/returnDef"},"since":{"$ref":"#/definitions/semverExactDef"},"status":{"$ref":"#/definitions/statusDef"},"styleClasses":{"type":"array","items":{"$ref":"#/definitions/styleClassItemDef"}},"styleVariables":{"type":"array","items":{"$ref":"#/definitions/styleVariableDef"}},"subcomponentType":{"type":"string","enum":["data","patternImpl","packPrivate"]},"translationBundle":{"type":"string"},"type":{"type":"string","enum":["composite","core","pack","mono-pack","reference","resource","demo","stripe","vdom","hook","vbcs-pattern","vbcs-template","vbcs-action","vbcs-fragment"]},"typesRoot":{"type":"string"}},"patternProperties":{"^x-.+$":{"$comment":"Also allow OpenAPI extension properties at the top level."}},"required":["name"],"additionalProperties":false,"$comment":"the following 'allOf' array entries specify conditional validation rules, per JSON Schema draft-07","allOf":[{"$comment":"if the 'type' property is explicitly set to anything other than 'composite' or 'core', then 'implements','preferredParent', and 'requirements' are invalid","if":{"properties":{"type":{"not":{"enum":["core","composite"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["implements","preferredParent","requirements"]}}}},{"$comment":"if the 'type' property is explicitly set to anything other than 'composite', 'core', 'vdom' or 'hook', then 'main' is invalid","if":{"properties":{"type":{"not":{"enum":["core","composite","vdom","hook"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["main"]}}}},{"$comment":"if the component type is explicitly set to 'core', then the 'since' property is required","if":{"properties":{"type":{"const":"core"}},"required":["type"]},"then":{"required":["since"]}},{"$comment":"if optional 'styleClasses' metadata exists, then apply strict validation rules","if":{"required":["styleClasses"]},"then":{"$comment":"stricter rules for 'styleClasses' metadata for validation purposes -- this will simplify once deprecated 'styleGroup' reaches end-of-life","oneOf":[{"$comment":"EITHER an array in which all items are instances of new 'styleClasses' metadata...","properties":{"styleClasses":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/styleClassStrictDef"},{"$ref":"#/definitions/styleSetStrictDef"},{"$ref":"#/definitions/styleTemplateStrictDef"}]}}}},{"$comment":"...OR an array in which all items are instances of old, deprecated 'styleGroup' metadata","properties":{"styleClasses":{"type":"array","items":{"$ref":"#/definitions/deprecatedStyleGroupDef"}}}}]}},{"$comment":"if the component type is explicitly set to 'reference', then the 'package' property is required","if":{"properties":{"type":{"const":"reference"}},"required":["type"]},"then":{"required":["package"]},"else":{"$comment":"otherwise, if the component type is not explicitly set to 'mono-pack', then 'package' property is invalid","if":{"not":{"properties":{"type":{"const":"mono-pack"}},"required":["type"]}},"then":{"propertyNames":{"not":{"enum":["package"]}}}}},{"$comment":"if the component type is explicitly NOT 'resource', then the 'publicModules' property is invalid","if":{"properties":{"type":{"not":{"const":"resource"}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["publicModules"]}}}},{"$comment":"if the component type is explicitly set to 'pack', then values of 'dependencies' property key-value pairs must be exact semver strings AND 'pack' property is invalid (nested JET Packs not allowed)","if":{"properties":{"type":{"const":"pack"}},"required":["type"]},"then":{"properties":{"dependencies":{"oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$ref":"#/definitions/semverExactDef"}}]}},"propertyNames":{"not":{"enum":["pack"]}}},"else":{"$comment":"otherwise, the values of 'dependencies' property key-value pairs must be a semver range string","properties":{"dependencies":{"oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$ref":"#/definitions/semverRangeDef"}}]}}}},{"$comment":"if the component type is explicitly set to 'mono-pack', then the 'contents', 'jetVersion', and 'version' properties are required AND 'pack' property is invalid (nested JET Packs not allowed)","if":{"properties":{"type":{"const":"mono-pack"}},"required":["type"]},"then":{"required":["contents","jetVersion","version"],"propertyNames":{"not":{"enum":["pack"]}}},"else":{"$comment":"otherwise, the 'contents' and 'typesRoot' properties are invalid (reserved for mono-packs)","propertyNames":{"not":{"enum":["contents","typesRoot"]}}}},{"$comment":"if the component type is explicitly set to 'reference', then the 'jetVersion' property is invalid","if":{"properties":{"type":{"const":["reference"]}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["jetVersion"]}}}},{"$comment":"if the component type is explicitly neither 'mono-pack' nor 'reference', then the 'translationBundle' property is invalid","if":{"properties":{"type":{"not":{"enum":["mono-pack","reference"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["translationBundle"]}}}},{"$comment":"if the component type is explicitly set to 'vdom', then only a subset of metadata properties are supported","if":{"properties":{"type":{"const":"vdom"}},"required":["type"]},"then":{"allOf":[{"propertyNames":{"anyOf":[{"$ref":"#/definitions/commonContentsPropNamesDef"},{"enum":["properties"]}]}},{"properties":{"properties":{"$comment":"vdom (Preact) property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","$comment":"only support a subset of metadata properties for vdom (Preact) Props","propertyNames":{"enum":["type","description","required","status","value"]}}}}}}]}},{"$comment":"if the component type is explicitly set to 'hook', then only a subset of metadata properties are supported","if":{"properties":{"type":{"const":"hook"}},"required":["type"]},"then":{"propertyNames":{"anyOf":[{"$ref":"#/definitions/commonContentsPropNamesDef"},{"enum":["params","return"]}]}},"else":{"$comment":"otherwise, the 'params' and 'return' properties are invalid (reserved for 'hooks')","propertyNames":{"not":{"enum":["params","return"]}}}},{"$comment":"if the component type is explicitly neither 'vdom' nor 'hook', then the 'defaultExport' and 'export' properties are invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"not":{"enum":["vdom","hook"]}}},"required":["type"]}]},"then":{"propertyNames":{"not":{"enum":["defaultExport","export"]}}}},{"$comment":"if the component type is explicitly set to 'demo', then the 'demoFor' property is required; else the 'demoFor' property is invalid","if":{"properties":{"type":{"const":"demo"}},"required":["type"]},"then":{"required":["demoFor"]},"else":{"propertyNames":{"not":{"enum":["demoFor"]}}}},{"$comment":"if the component type is explicitly set to 'stripe', then 'pack' property is invalid (stripe components are always singletons)","if":{"properties":{"type":{"const":"stripe"}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["pack"]}}}},{"$comment":"if the component type is explicitly set to 'vbcs-action', then the 'actionParams' and 'actionResult' properties are required; otherwise they are invalid","if":{"properties":{"type":{"const":"vbcs-action"}},"required":["type"]},"then":{"required":["actionParams","actionResult"]},"else":{"propertyNames":{"not":{"enum":["actionParams","actionResult"]}}}},{"$comment":"if the component type is NOT 'vbcs-fragment', then apply additional restrictions to property, event names; otherwise 'methods' is invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"not":{"const":"vbcs-fragment"}}},"required":["type"]}]},"then":{"properties":{"properties":{"$ref":"#/definitions/propNameRestrictionsDef"},"events":{"$ref":"#/definitions/eventNameRestrictionsDef"}}},"else":{"propertyNames":{"not":{"enum":["methods"]}}}}]}
|