@oracle/oraclejet-audit 11.1.3 → 12.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/LICENSE.md +1 -1
- package/jaf-amd.js +6 -6
- package/jaf.js +2 -2
- package/jafapi.js +2 -2
- package/lib/AST.js +1 -1
- package/lib/AST_Ts.js +2 -2
- package/lib/AstJson.js +1 -1
- package/lib/AstMd.js +6 -0
- package/lib/AstNodeTypes.js +2 -2
- package/lib/Comments.js +1 -1
- package/lib/ComponentSvcs.js +1 -1
- package/lib/Components.js +2 -2
- package/lib/Config.js +2 -2
- package/lib/ConfigLib.js +2 -2
- package/lib/CssLib.js +1 -1
- package/lib/CssUtils.js +1 -1
- package/lib/DomUtils.js +2 -2
- package/lib/FileIndex.js +1 -1
- package/lib/FileSet.js +1 -1
- package/lib/FsUtils.js +2 -2
- package/lib/Histo.js +2 -2
- package/lib/HtmlTree.js +2 -2
- package/lib/HtmlUtils.js +1 -1
- package/lib/Issue.js +2 -2
- package/lib/JafEvents.js +1 -1
- package/lib/JafLib.js +2 -2
- package/lib/Json.js +2 -2
- package/lib/JsonLoader.js +2 -2
- package/lib/Md.js +6 -0
- package/lib/MetaLib.js +2 -2
- package/lib/NetUtils.js +1 -1
- package/lib/NodeTypes.js +1 -1
- package/lib/Parser.js +2 -2
- package/lib/RegTypes.js +2 -2
- package/lib/Registry.js +2 -2
- package/lib/Reporter.js +2 -2
- package/lib/RuleContext.js +1 -1
- package/lib/RulePack.js +1 -1
- package/lib/RuleSet.js +2 -2
- package/lib/Rules.js +2 -2
- package/lib/Scope.js +2 -2
- package/lib/SemVer.js +1 -1
- package/lib/Server.js +1 -1
- package/lib/SevLib.js +1 -1
- package/lib/Severity.js +1 -1
- package/lib/Stats.js +1 -1
- package/lib/Ts.js +2 -2
- package/lib/Utils.js +2 -2
- package/lib/Watch.js +1 -1
- package/lib/Writer.js +1 -1
- package/lib/ZipUtils.js +1 -1
- package/lib/api.js +2 -2
- package/lib/builtinpacks.js +6 -0
- package/lib/cliStats.js +2 -2
- package/lib/clone.js +2 -2
- package/lib/cmdline.js +2 -2
- package/lib/colors.js +2 -2
- package/lib/defaults.js +6 -0
- package/lib/deflist.js +6 -0
- package/lib/dislist.js +6 -0
- package/lib/exportRules.js +1 -1
- package/lib/extends.js +2 -2
- package/lib/filetypes.js +2 -2
- package/lib/grouplist.js +6 -0
- package/lib/groups.js +2 -2
- package/lib/help.js +2 -2
- package/lib/jetver.js +2 -2
- package/lib/macros.js +1 -1
- package/lib/manual.js +6 -0
- package/lib/metaLoader.js +1 -1
- package/lib/metahist.js +1 -1
- package/lib/msgidLoader.js +1 -1
- package/lib/ns.js +2 -2
- package/lib/nslist.js +1 -1
- package/lib/outFormat.js +1 -1
- package/lib/outfile.js +1 -1
- package/lib/ruleLoader.js +1 -1
- package/lib/scaffold.js +2 -2
- package/lib/scaffoldRule.js +2 -2
- package/lib/schema.js +2 -2
- package/lib/scopewalker.js +2 -2
- package/lib/spinner.js +2 -2
- package/lib/spinnernoop.js +1 -1
- package/lib/tabs.js +1 -1
- package/libext/expparser.js +1 -1
- package/meta/11.1.0/jetauditmeta.js +1 -1
- package/meta/12.0.0/jetauditmeta.js +9 -0
- package/meta/12.1.0/jetauditmeta.js +9 -0
- package/meta/metaverlist.json +1 -1
- package/package.json +72 -68
- package/rulepacks/csp/csp-html-script-unsafe-inline.js +1 -1
- package/rulepacks/csp/csp-html-style-unsafe-inline.js +1 -1
- package/rulepacks/csp/csp-html-unsafe-expr.js +1 -1
- package/rulepacks/csp/csp-js-script-unsafe-eval.js +1 -1
- package/rulepacks/csp/csp-js-style-unsafe-inline.js +1 -1
- package/rulepacks/csp/csp-ts-script-unsafe-eval.js +1 -1
- package/rulepacks/csp/csp-ts-style-unsafe-inline.js +1 -1
- package/rulepacks/csp/msgid.json +1 -1
- package/rulepacks/csp/rules.json +1 -1
- package/rulepacks/jetwc/jetwc-absolute-jetversion.js +2 -2
- package/rulepacks/jetwc/jetwc-aria-redefinition.js +2 -2
- package/rulepacks/jetwc/jetwc-bootstrap.js +2 -2
- package/rulepacks/jetwc/jetwc-compjson-bp-ar.js +2 -2
- package/rulepacks/jetwc/jetwc-compjson-bp-obj.js +2 -2
- package/rulepacks/jetwc/jetwc-component-dependencies.js +2 -2
- package/rulepacks/jetwc/jetwc-component-displayname.js +2 -2
- package/rulepacks/jetwc/jetwc-component-foldername.js +2 -2
- package/rulepacks/jetwc/jetwc-component-location.js +2 -2
- package/rulepacks/jetwc/jetwc-component-type.js +2 -2
- package/rulepacks/jetwc/jetwc-css-oj-complete.js +6 -0
- package/rulepacks/jetwc/jetwc-data-property-prefix.js +2 -2
- package/rulepacks/jetwc/jetwc-deprecated-lifecycle.js +2 -2
- package/rulepacks/jetwc/jetwc-disabled-property.js +2 -2
- package/rulepacks/jetwc/jetwc-displayname.js +2 -2
- package/rulepacks/jetwc/jetwc-dynamic-slot-context.js +2 -2
- package/rulepacks/jetwc/jetwc-dynamic-slots-naming.js +2 -2
- package/rulepacks/jetwc/jetwc-event-displayname.js +2 -2
- package/rulepacks/jetwc/jetwc-events.js +2 -2
- package/rulepacks/jetwc/jetwc-jet-version.js +2 -2
- package/rulepacks/jetwc/jetwc-loader-file.js +2 -2
- package/rulepacks/jetwc/jetwc-markdown-link.js +6 -0
- package/rulepacks/jetwc/jetwc-method-displayname.js +2 -2
- package/rulepacks/jetwc/jetwc-methods.js +2 -2
- package/rulepacks/jetwc/jetwc-namespace.js +2 -2
- package/rulepacks/jetwc/jetwc-nested-defaults.js +2 -2
- package/rulepacks/jetwc/jetwc-nls-languages.js +2 -2
- package/rulepacks/jetwc/jetwc-nls-root.js +2 -2
- package/rulepacks/jetwc/jetwc-oj-register.js +2 -2
- package/rulepacks/jetwc/jetwc-ojcss.js +2 -2
- package/rulepacks/jetwc/jetwc-pack-children.js +2 -2
- package/rulepacks/jetwc/jetwc-packable-components.js +2 -2
- package/rulepacks/jetwc/jetwc-prerelease-dependencies.js +2 -2
- package/rulepacks/jetwc/jetwc-prerelease-pattern.js +2 -2
- package/rulepacks/jetwc/jetwc-prerelease-version.js +2 -2
- package/rulepacks/jetwc/jetwc-property-changed.js +2 -2
- package/rulepacks/jetwc/jetwc-property-displayname.js +2 -2
- package/rulepacks/jetwc/jetwc-property-nesting.js +2 -2
- package/rulepacks/jetwc/jetwc-public-modules.js +2 -2
- package/rulepacks/jetwc/jetwc-register-css.js +2 -2
- package/rulepacks/jetwc/jetwc-register-with-promises.js +2 -2
- package/rulepacks/jetwc/jetwc-require-paths.js +2 -2
- package/rulepacks/jetwc/jetwc-required-subproperty.js +2 -2
- package/rulepacks/jetwc/jetwc-reserved-property.js +2 -2
- package/rulepacks/jetwc/jetwc-schema.js +2 -2
- package/rulepacks/jetwc/jetwc-semantic-version.js +2 -2
- package/rulepacks/jetwc/jetwc-slot-displayname.js +2 -2
- package/rulepacks/jetwc/jetwc-slots.js +2 -2
- package/rulepacks/jetwc/jetwc-standard-files.js +2 -2
- package/rulepacks/jetwc/jetwc-subproperty-writeback.js +2 -2
- package/rulepacks/jetwc/jetwc-template-slots.js +2 -2
- package/rulepacks/jetwc/jetwc-unused-events.js +2 -2
- package/rulepacks/jetwc/jetwc-unused-slots.js +2 -2
- package/rulepacks/jetwc/jetwc-vb-category.js +2 -2
- package/rulepacks/jetwc/jetwc-vb-icon.js +2 -2
- package/rulepacks/jetwc/jetwc-vcomponent-jetversion.js +6 -0
- package/rulepacks/jetwc/jetwc-vcomponent-loader.js +6 -0
- package/rulepacks/jetwc/jetwc-vcomponent-version.js +6 -0
- package/rulepacks/jetwc/jetwc-version-openrange.js +2 -2
- package/rulepacks/jetwc/jetwc-writeback-required.js +2 -2
- package/rulepacks/jetwc/msgid.json +2 -2
- package/rulepacks/jetwc/rules.json +2 -2
- package/rulepacks/jetwc-lib/jetwcutils-auditComponentCacheManager.js +6 -0
- package/rulepacks/jetwc-lib/jetwcutils-commonListenerImpls.js +6 -0
- package/rulepacks/jetwc-lib/jetwcutils-componentAuditUtils.js +6 -0
- package/rulepacks/jetwc-lib/jetwcutils-componentFinder.js +6 -0
- package/rulepacks/jetwc-lib/jetwcutils-preCompiler.js +6 -0
- package/rulepacks/jetwc-lib/jetwcutils-tsxUtils.js +6 -0
- package/rulepacks/jetwco/jetwco-bootstrap.js +2 -2
- package/rulepacks/jetwco/jetwco-cacc-auditConstraints.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-dependencies.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-dynamicSlots.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-eventBubbles.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-eventCancelable.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-eventPayload.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-events.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-helpers.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-jetVer.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-methodParamTypes.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-methodParams.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-methodReturnType.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-methods.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-packBundle.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-packBundleContent.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-packContent.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-properties.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-propertyDefault.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-propertyEnumeration.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-propertyReadOnly.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-propertyRequired.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-propertyType.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-propertyWriteback.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-publicModules.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-slotDataVariable.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-slotDataVariableType.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-slots.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-styleClasses.js +6 -0
- package/rulepacks/jetwco/jetwco-cacc-styleVariables.js +6 -0
- package/rulepacks/jetwco/jetwco-compjson-ns-reg.js +2 -2
- package/rulepacks/jetwco/jetwco-component-api-baseline-changes.js +2 -2
- package/rulepacks/jetwco/jetwco-component-api-changes.js +2 -2
- package/rulepacks/jetwco/jetwco-component-api-controlled-changes.js +6 -0
- package/rulepacks/jetwco/jetwco-component-cdn.js +2 -2
- package/rulepacks/jetwco/jetwco-description-standards.js +6 -0
- package/rulepacks/jetwco/jetwco-displayname-standards.js +6 -0
- package/rulepacks/jetwco/jetwco-exchange-version-check.js +2 -2
- package/rulepacks/jetwco/jetwco-license-info.js +2 -2
- package/rulepacks/jetwco/jetwco-prerelease-cdn.js +2 -2
- package/rulepacks/jetwco/jetwco-thirdparty-ba.js +2 -2
- package/rulepacks/jetwco/msgid.json +2 -2
- package/rulepacks/jetwco/rules.json +2 -2
- package/rulepacks/spoc/msgid.json +1 -1
- package/rulepacks/spoc/rules.json +1 -1
- package/rulepacks/spoc/spoc-dom-manip-inv-tag.js +1 -1
- package/rulepacks/spoc/spoc-dom-manip-tag-pos.js +1 -1
- package/rulepacks/spoc/spoc-dom-manip.js +1 -1
- package/rulepacks/wdt/msgid.json +6 -0
- package/rulepacks/wdt/rules.json +6 -0
- package/rulepacks/wdt/wd-driver-sleep.js +6 -0
- package/rulepacks/wdt/wd-xpath.js +6 -0
- package/rules/jaf/jaf-css-diagnose.js +1 -1
- package/rules/jaf/jaf-html-diagnose.js +1 -1
- package/rules/jaf/jaf-init-schema.js +1 -1
- package/rules/jaf/jaf-js-diagnose.js +1 -1
- package/rules/jaf/jaf-ts-diagnose.js +1 -1
- package/rules/jaf/jaf-ts-walk.js +6 -0
- package/rules/jaf/msgid.json +2 -2
- package/rules/jaf/rules.json +2 -2
- package/rules/jet/helpers/acc-aria-label.js +1 -1
- package/rules/jet/helpers/bp-checkPropType.js +1 -1
- package/rules/jet/helpers/cssHelper.js +1 -1
- package/rules/jet/helpers/extractStylesFromClass.js +1 -1
- package/rules/jet/helpers/has-slot-name.js +2 -2
- package/rules/jet/helpers/has-slot.js +1 -1
- package/rules/jet/helpers/json-prop-pos.js +1 -1
- package/rules/jet/helpers/json-propname-pos.js +1 -1
- package/rules/jet/helpers/style-selector.js +1 -1
- package/rules/jet/helpers/valid-attr.js +1 -1
- package/rules/jet/helpers/vartrack.js +1 -1
- package/rules/jet/jet-css-ojselector.js +1 -1
- package/rules/jet/msgid.json +2 -2
- package/rules/jet/oj-acc-aria-labelledby.js +1 -1
- package/rules/jet/oj-acc-aria-prop.js +2 -2
- package/rules/jet/oj-acc-avatar-aria-role.js +2 -2
- package/rules/jet/oj-acc-combobox-aria-label.js +2 -2
- package/rules/jet/oj-acc-film-strip-aria-label.js +2 -2
- package/rules/jet/oj-acc-input-aria-label.js +2 -2
- package/rules/jet/oj-acc-select-aria-label.js +2 -2
- package/rules/jet/oj-cca-compjson-bp-ar.js +1 -1
- package/rules/jet/oj-cca-compjson-bp-dsplyname.js +1 -1
- package/rules/jet/oj-cca-compjson-bp-jetver.js +1 -1
- package/rules/jet/oj-cca-compjson-bp-obj.js +1 -1
- package/rules/jet/oj-cca-compjson-ns-reg.js +1 -1
- package/rules/jet/oj-css-bp-border-color.js +1 -1
- package/rules/jet/oj-css-bp-dir-flow.js +1 -1
- package/rules/jet/oj-css-bp-float.js +1 -1
- package/rules/jet/oj-css-bp-textalign.js +1 -1
- package/rules/jet/oj-css-style-abs-units.js +2 -2
- package/rules/jet/oj-css-style-bp-color.js +1 -1
- package/rules/jet/oj-css-style-bp-display.js +1 -1
- package/rules/jet/oj-css-style-bp-font-family.js +1 -1
- package/rules/jet/oj-css-style-bp-font.js +1 -1
- package/rules/jet/oj-css-style-deprecated.js +1 -1
- package/rules/jet/oj-css-style-override.js +2 -2
- package/rules/jet/oj-css-var-override.js +1 -1
- package/rules/jet/oj-form-maxcols.js +2 -2
- package/rules/jet/oj-html-5-attr-obs.js +1 -1
- package/rules/jet/oj-html-5-tag-obs.js +1 -1
- package/rules/jet/oj-html-alta-deprecated.js +6 -0
- package/rules/jet/oj-html-attr-$unique.js +1 -1
- package/rules/jet/oj-html-attr-2def.js +1 -1
- package/rules/jet/oj-html-attr-json.js +1 -1
- package/rules/jet/oj-html-attr-prefix-expr.js +1 -1
- package/rules/jet/oj-html-attr-prefix-ro.js +1 -1
- package/rules/jet/oj-html-attr-req.js +1 -1
- package/rules/jet/oj-html-bindforeach-data.js +2 -2
- package/rules/jet/oj-html-bindif-test.js +2 -2
- package/rules/jet/oj-html-binding-attr.js +2 -2
- package/rules/jet/oj-html-cca-count.js +1 -1
- package/rules/jet/oj-html-cca-tagname.js +2 -2
- package/rules/jet/oj-html-cdn.js +1 -1
- package/rules/jet/oj-html-combo-converter.js +1 -1
- package/rules/jet/oj-html-cspexpr.js +1 -1
- package/rules/jet/oj-html-databind-all.js +1 -1
- package/rules/jet/oj-html-dlg-title.js +2 -2
- package/rules/jet/oj-html-file-pick-accept.js +2 -2
- package/rules/jet/oj-html-form-bindif.js +1 -1
- package/rules/jet/oj-html-form-layout-maxcols.js +2 -2
- package/rules/jet/oj-html-form-noflex.js +1 -1
- package/rules/jet/oj-html-input-isodate.js +2 -2
- package/rules/jet/oj-html-invalid-doctype.js +2 -2
- package/rules/jet/oj-html-jq-databind.js +2 -2
- package/rules/jet/oj-html-ko-comment.js +1 -1
- package/rules/jet/oj-html-ko-databind.js +2 -2
- package/rules/jet/oj-html-label-for-prefix.js +1 -1
- package/rules/jet/oj-html-missing-doctype.js +1 -1
- package/rules/jet/oj-html-msgs-cat-text.js +6 -0
- package/rules/jet/oj-html-no-style-tag.js +6 -0
- package/rules/jet/oj-html-notag-style.js +6 -0
- package/rules/jet/oj-html-oj-lib.js +1 -1
- package/rules/jet/oj-html-ojattr-520.js +1 -1
- package/rules/jet/oj-html-ojattr-deprecated.js +2 -2
- package/rules/jet/oj-html-ojattr-enum-deprecated.js +2 -2
- package/rules/jet/oj-html-ojattr-evt-syntax.js +2 -2
- package/rules/jet/oj-html-ojattr-value.js +1 -1
- package/rules/jet/oj-html-ojattr.js +2 -2
- package/rules/jet/oj-html-ojevent.js +2 -2
- package/rules/jet/oj-html-ojslot.js +2 -2
- package/rules/jet/oj-html-ojstyle.js +1 -1
- package/rules/jet/oj-html-ojtag-datacmd.js +2 -2
- package/rules/jet/oj-html-ojtag-datactx.js +1 -1
- package/rules/jet/oj-html-ojtag-deprecated.js +2 -2
- package/rules/jet/oj-html-ojtag-globattr-noprefix.js +2 -2
- package/rules/jet/oj-html-ojtag-id.js +1 -1
- package/rules/jet/oj-html-ojtag-nonglobattr-prefix.js +2 -2
- package/rules/jet/oj-html-ojtag-ns.js +1 -1
- package/rules/jet/oj-html-picker-attrs.js +2 -2
- package/rules/jet/oj-html-redwood-cssnovars.js +1 -1
- package/rules/jet/oj-html-redwood-cssvars.js +1 -1
- package/rules/jet/oj-html-self-close.js +1 -1
- package/rules/jet/oj-html-slot-item-minmax.js +1 -1
- package/rules/jet/oj-html-slot-name.js +2 -2
- package/rules/jet/oj-html-slot-pref-content.js +2 -2
- package/rules/jet/oj-html-style-abs-units.js +1 -1
- package/rules/jet/oj-html-style-bp-color.js +1 -1
- package/rules/jet/oj-html-style-bp-display.js +1 -1
- package/rules/jet/oj-html-style-bp-font-family.js +1 -1
- package/rules/jet/oj-html-style-bp-font.js +1 -1
- package/rules/jet/oj-html-style-deprecated.js +2 -2
- package/rules/jet/oj-html-style.js +1 -1
- package/rules/jet/oj-html-stylesel.js +1 -1
- package/rules/jet/oj-html-tag-attr-noprefix.js +2 -2
- package/rules/jet/oj-html-template-index.js +2 -2
- package/rules/jet/oj-html-unsup-theme.js +1 -1
- package/rules/jet/oj-html-wctag-$props.js +1 -1
- package/rules/jet/oj-html-wctag-arialabelledby.js +1 -1
- package/rules/jet/oj-html-wctag-for.js +1 -1
- package/rules/jet/oj-html-wctag-id.js +2 -2
- package/rules/jet/oj-html-wctag-nested.js +6 -0
- package/rules/jet/oj-html-wctag-packprivate.js +1 -1
- package/rules/jet/oj-js-comp-attr-deprecated.js +2 -2
- package/rules/jet/oj-js-comp-meth-deprecated.js +2 -2
- package/rules/jet/oj-js-no-ext-final.js +1 -1
- package/rules/jet/oj-js-noconsole.js +1 -1
- package/rules/jet/oj-js-ojcomp-deprecated.js +2 -2
- package/rules/jet/oj-js-ojcomp-exist.js +1 -1
- package/rules/jet/oj-js-ojcomp-new.js +1 -1
- package/rules/jet/oj-js-poly-promise.js +1 -1
- package/rules/jet/oj-js-var-undef.js +1 -1
- package/rules/jet/oj-json-syntax.js +1 -1
- package/rules/jet/oj-ts-comp-attr-deprecated.js +2 -2
- package/rules/jet/oj-ts-comp-meth-deprecated.js +2 -2
- package/rules/jet/oj-ts-no-ext-final.js +1 -1
- package/rules/jet/oj-ts-noconsole.js +1 -1
- package/rules/jet/oj-ts-ojcomp-deprecated.js +2 -2
- package/rules/jet/oj-ts-ojcomp-exist.js +1 -1
- package/rules/jet/oj-ts-ojcomp-new.js +1 -1
- package/rules/jet/oj-ts-poly-promise.js +1 -1
- package/rules/jet/rules.json +2 -2
- package/schema/component-schema.json +4 -1
- package/src/JafCore.js +2 -2
- package/types/index.d.ts +122 -82
- package/lib/imanual.js +0 -6
- package/lib/xmanual.js +0 -6
- package/rulepacks/jetwc-lib/component-audit-utils.js +0 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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{LENGTH_PROP_SET}=require("./helpers/cssHelper");const RULENAME="oj-css-style-abs-units";const DESCRIPTION="In general it is preferable to use relative length units in place of absolute units. "+"Specifically, 'rem' units are recommended because they proportionately adjust to the root "+"font size. 'rem' can be used for anything that takes a length unit - e.g. font-size, line-height, "+"width, height, padding, margin, etc. However, there are cases where absolute units are "+"required. To ignore certain selectors, use the 'ignore'/'accept' sub-properties of the "+"configuration property 'ruleMods'.<br><br>"+"e.g. <em>\"ruleMods\" : { \"ignore\" : [\"-image$\"] }</em><br><br>"+"this will ignore all selectors ending with <em>\"-image$\"</em>";const SHORT_DESCRIPTION="In general it is preferable to use relative length units in place of absolute units.";const ABS_UNITS=["px","cm","mm","in","pt","pc","all"];const SELECTORLIST="SelectorList";const SELECTOR="Selector";const CLASS_SELECTOR="ClassSelector";const ID_SELECTOR="IdSelector";const FUNCTION="Function";const DIMENSION="Dimension";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(regCtx){if(!this._checkRuleOptions(regCtx)){return false}this._CssUtils=regCtx.utils.CssUtils;return{"css-rule":this._onRule}}_onRule(ruleCtx,rule){var block,decl,i;block=rule.block.children;for(i=0;i<block.length;i++){decl=block[i];if(decl.type==="Declaration"&&LENGTH_PROP_SET.has(decl.property)){if(!_isCssVar(decl)){this._prop(ruleCtx,rule,decl)}}}}_prop(ruleCtx,rule,decl){if(decl.value&&decl.value.type==="Value"&&decl.value.children){this._children(ruleCtx,rule,decl.property,decl.value.children)}}_children(ruleCtx,rule,prop,childs){var ch,i;for(i=0;i<childs.length;i++){ch=childs[i];if(ch.type===DIMENSION&&ABS_UNITS.includes(ch.unit)&&this._okPropFail(rule,ch)){this._emitIssue(ruleCtx,prop,ch)}else if(ch.type===FUNCTION&&!_isColorFunc(ch.name)){this._func(ruleCtx,rule,prop,ch)}}}_func(ruleCtx,rule,prop,fnNode){var a,decl,i;a=fnNode.children;for(i=0;i<a.length;i++){decl=a[i];if(decl.type===DIMENSION&&ABS_UNITS.includes(decl.unit)&&this._okPropFail(rule,decl)){this._emitIssue(ruleCtx,prop,decl)}}}_emitIssue(ruleCtx,prop,dim){var val,issue;val=parseInt(dim.value);if(val){issue=new ruleCtx.Issue(`CSS value '${val}${dim.unit}' (${prop}) : - best practices: replace absolute unit '${dim.unit}' with a relative unit (e.g. 'rem' or '%')`)}else{issue=new ruleCtx.Issue(`CSS value '0${dim.unit}' (${prop}) : - best practices: remove '${dim.unit}' for zero quantity`);issue.setMsgKey(RULENAME+"_1");issue.setSeverity("minor")}issue.setPosition(this._CssUtils.getPosition(ruleCtx,dim.loc));ruleCtx.reporter.addIssue(issue,ruleCtx)}_okPropFail(rule,decl){var unit,val,sels,list,b,i,j;val=typeof decl.value==="string"?parseInt(decl.value):val;if(this._unitOpts){unit=this._unitOpts[decl.unit];if(unit===undefined){unit=this._unitOpts["all"]}b=typeof unit==="number"?val===0?true:Math.abs(val)>unit:false}else{b=true}if(b&&(this._ignore||this._accept)){sels=_getSelectors(rule);if(sels){list=this._ignore||this._accept;for(i=0;i<list.length;i++){for(j=0;j<sels.length;j++){if(list[i].test(sels[j])){return this._accept?b:false}}}}return!this._accept}return b}_checkRuleOptions(regCtx){var units,sels,accept,ign,unit,th,b;units=regCtx.ruleOpts["absunits"];if(units){if(!regCtx.utils.utils.isObject(units)){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'absunits' is not an object`);this._fail=true;return false}for(unit in units){if(!ABS_UNITS.includes(unit)){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'absunits' value '${unit}' is not absolute`);b=true;continue}if(units.hasOwnProperty(unit)){th=units[unit];if(typeof th!=="number"){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'absunits' threshold '${th}' is not a number`);b=true}}}this._unitOpts=units}sels=regCtx.ruleOpts["selectors"];if(sels){if(!regCtx.utils.utils.isObject(sels)){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'selectors' is not an object`);this._fail=true;return false}accept=sels.accept;ign=sels.ignore;if(accept&&ign){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'selectors' - sub-properties 'accept' and 'ignore are mutually exclusive`);b=true}if(!b){if(accept){this.
|
|
6
|
+
const{LENGTH_PROP_SET}=require("./helpers/cssHelper");const RULENAME="oj-css-style-abs-units";const DESCRIPTION="In general it is preferable to use relative length units in place of absolute units. "+"Specifically, 'rem' units are recommended because they proportionately adjust to the root "+"font size. 'rem' can be used for anything that takes a length unit - e.g. font-size, line-height, "+"width, height, padding, margin, etc. However, there are cases where absolute units are "+"required. To ignore certain selectors, use the 'ignore'/'accept' sub-properties of the "+"configuration property 'ruleMods'.<br><br>"+"e.g. <em>\"ruleMods\" : { \"ignore\" : [\"-image$\"] }</em><br><br>"+"this will ignore all selectors ending with <em>\"-image$\"</em>";const SHORT_DESCRIPTION="In general it is preferable to use relative length units in place of absolute units.";const ABS_UNITS=["px","cm","mm","in","pt","pc","all"];const SELECTORLIST="SelectorList";const SELECTOR="Selector";const CLASS_SELECTOR="ClassSelector";const ID_SELECTOR="IdSelector";const FUNCTION="Function";const DIMENSION="Dimension";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(regCtx){if(!this._checkRuleOptions(regCtx)){return false}this._CssUtils=regCtx.utils.CssUtils;return{"css-rule":this._onRule}}_onRule(ruleCtx,rule){var block,decl,i;block=rule.block.children;for(i=0;i<block.length;i++){decl=block[i];if(decl.type==="Declaration"&&LENGTH_PROP_SET.has(decl.property)){if(!_isCssVar(decl)){this._prop(ruleCtx,rule,decl)}}}}_prop(ruleCtx,rule,decl){if(decl.value&&decl.value.type==="Value"&&decl.value.children){this._children(ruleCtx,rule,decl.property,decl.value.children)}}_children(ruleCtx,rule,prop,childs){var ch,i;for(i=0;i<childs.length;i++){ch=childs[i];if(ch.type===DIMENSION&&ABS_UNITS.includes(ch.unit)&&this._okPropFail(rule,ch)){this._emitIssue(ruleCtx,prop,ch)}else if(ch.type===FUNCTION&&!_isColorFunc(ch.name)){this._func(ruleCtx,rule,prop,ch)}}}_func(ruleCtx,rule,prop,fnNode){var a,decl,i;a=fnNode.children;for(i=0;i<a.length;i++){decl=a[i];if(decl.type===DIMENSION&&ABS_UNITS.includes(decl.unit)&&this._okPropFail(rule,decl)){this._emitIssue(ruleCtx,prop,decl)}}}_emitIssue(ruleCtx,prop,dim){var val,issue;val=parseInt(dim.value);if(val){issue=new ruleCtx.Issue(`CSS value '${val}${dim.unit}' (${prop}) : - best practices: replace absolute unit '${dim.unit}' with a relative unit (e.g. 'rem' or '%')`)}else{issue=new ruleCtx.Issue(`CSS value '0${dim.unit}' (${prop}) : - best practices: remove '${dim.unit}' for zero quantity`);issue.setMsgKey(RULENAME+"_1");issue.setSeverity("minor")}issue.setPosition(this._CssUtils.getPosition(ruleCtx,dim.loc));ruleCtx.reporter.addIssue(issue,ruleCtx)}_okPropFail(rule,decl){var unit,val,sels,list,b,i,j;val=typeof decl.value==="string"?parseInt(decl.value):val;if(this._unitOpts){unit=this._unitOpts[decl.unit];if(unit===undefined){unit=this._unitOpts["all"]}b=typeof unit==="number"?val===0?true:Math.abs(val)>unit:false}else{b=true}if(b&&(this._ignore||this._accept)){sels=_getSelectors(rule);if(sels){list=this._ignore||this._accept;for(i=0;i<list.length;i++){for(j=0;j<sels.length;j++){if(list[i].test(sels[j])){return this._accept?b:false}}}}return!this._accept}return b}_checkRuleOptions(regCtx){var units,sels,accept,ign,unit,th,b;units=regCtx.ruleOpts["absunits"];if(units){if(!regCtx.utils.utils.isObject(units)){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'absunits' is not an object`);this._fail=true;return false}for(unit in units){if(!ABS_UNITS.includes(unit)){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'absunits' value '${unit}' is not absolute`);b=true;continue}if(units.hasOwnProperty(unit)){th=units[unit];if(typeof th!=="number"){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'absunits' threshold '${th}' is not a number`);b=true}}}this._unitOpts=units}sels=regCtx.ruleOpts["selectors"];if(sels){if(!regCtx.utils.utils.isObject(sels)){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'selectors' is not an object`);this._fail=true;return false}accept=sels.accept;ign=sels.ignore;if(accept&&ign){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} : option 'selectors' - sub-properties 'accept' and 'ignore are mutually exclusive`);b=true}if(!b){if(accept){this._accept=this._getOptionSels(regCtx,"accept",accept)}else if(ign){this._ignore=this._getOptionSels(regCtx,"ignore",ign)}}}return this._fail?false:!b}_getOptionSels(regCtx,prop,val){var i;if(typeof val==="string"){val=[val]}else if(!Array.isArray(val)){return null}for(i=0;i<val.length;i++){if(typeof val[i]==="string"){try{val[i]=new RegExp(val[i])}catch(e){regCtx.utils.msgLib.error(`Rule ${regCtx.ruleName} '${prop}' : invalid reg. expression '${val[i]}' at position ${i}`);this._fail=true}}}return this._fail?null:val}}function _getSelectors(rule){var sels,sel,ch,selch,prel,i,j;prel=rule.prelude;if(prel&&prel.type===SELECTORLIST&&prel.children){ch=prel.children;for(i=0;i<ch.length;i++){sel=ch[i];if(sel.type===SELECTOR&&sel.children){selch=sel.children;for(j=0;j<selch.length;j++){sel=selch[j];if(sel.type===CLASS_SELECTOR||sel.type===ID_SELECTOR){if(!sels){sels=[]}sels.push(sel.name)}}}}}return sels};function _isCssVar(decl){var c,v;c=decl.value.children;if(c){v=c[0];return v.name==="var"}return false};function _isColorFunc(fnName){fnName=fnName.toLowerCase();return fnName.startsWith("rgb")||fnName.startsWith("hsl")};module.exports=Rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-css-style-override";const SHORT_DESCRIPT="JET CSS style classes should not be overridden";const DESCRIPT=SHORT_DESCRIPT;const
|
|
6
|
+
const RULE_NAME="oj-css-style-override";const SHORT_DESCRIPT="JET CSS style classes should not be overridden";const DESCRIPT=SHORT_DESCRIPT;const SELECTOR_LIST="SelectorList";const CLASS_SELECTOR="ClassSelector";const TYPE_SELECTOR="TypeSelector";const PSEUDO_CLASS_SELECTOR="PseudoClassSelector";const NUMBER="number";const STRING="string";const NOT_CLASSES=["oj-complete"];const OVERRIDE_LIST=["oj-buttonset-one","oj-buttonset-many","oj-color-invert","oj-badge-sm","oj-navigationlist-vertical","oj-navigationlist-horizontal","oj-navigationlist-icon-only","oj-navigationlist-stack-icon-label","oj-input-search-hero","oj-avatar-bg-purple","oj-avatar-bg-orange","oj-avatar-bg-teal","oj-avatar-bg-green","oj-avatar-bg-pink","oj-avatar-bg-slate","oj-avatar-bg-blue","oj-avatar-bg-lilac","oj-avatar-bg-gray","oj-avatar-xxs","oj-avatar-xs","oj-avatar-sm","oj-avatar-lg","oj-avatar-xl","oj-avatar-xxl","oj-tabbar-vertical","oj-tabbar-horizontal","oj-tabbar-icon-only","oj-tabbar-stack-icon-label","oj-invalid-drop"];const OVERRIDE_LIST_PREFIX=["oj-animate-inline-"];const NO_OVERRIDE=["oj-removable"];function Rule(){this._checkList=null;this._isAccept=false};Rule.prototype.getName=function(){return RULE_NAME};Rule.prototype.getShortDescription=function(){return SHORT_DESCRIPT};Rule.prototype.getDescription=function(){return DESCRIPT};Rule.prototype.register=function(regCtx){if(!this._checkAcceptRejectOption(regCtx)){return false}this._metaLib=regCtx.utils.metaLib;if(!this._metaLib.hasJetStylePrefixes()){return false}return{"css-rule":this._onRule}};Rule.prototype._onRule=function(ruleCtx,rule){var sels,sel,emit,t,i;sels=this._getOjSelectors(rule,this._metaLib);if(!sels.length){return}for(i=0;i<sels.length;i+=3){sel=sels[i];t=sels[i+1];if(_isBuiltinOverride(sel)){continue}emit=false;if(this._checkList){if(this._isSelAccepted(sel)){emit=true}}else if(t===CLASS_SELECTOR||t===TYPE_SELECTOR&&this._metaLib.isJetTag(sel)){emit=true}if(emit){this._emitIssue(ruleCtx,t,sel,sels[i+2])}};};Rule.prototype._emitIssue=function(ruleCtx,type,sel,loc){var tag,issue;if(type===TYPE_SELECTOR){issue=new ruleCtx.Issue(`type Selector '${sel}' must not be overridden.`);issue.setMsgKey(ruleCtx.ruleName+"_2")}else{tag=ruleCtx.utils.metaLib.getJetTagFromStyle(sel);issue=new ruleCtx.Issue(`class selector '.${sel}' ${tag?"(for <"+tag+">) ":""}must not be overridden.`);issue.setMsgKey(ruleCtx.ruleName+"_1")}issue.setPosition(ruleCtx.utils.CssUtils.getPosition(ruleCtx,loc));ruleCtx.reporter.addIssue(issue,ruleCtx)};Rule.prototype._getOjSelectors=function(rule){var sels,sel,a,c,i,j,ret=[];if(!(rule.prelude&&rule.prelude.children)||rule.prelude.type!=="SelectorList"){return ret}a=rule.prelude.children;for(i=0;i<a.length;i++){sels=a[i];if(sels.type==="Selector"){c=sels.children;for(j=0;j<c.length;j++){sel=c[j];if(sel.type===CLASS_SELECTOR&&(this._metaLib.isJetStylePrefix(sel.name)||NO_OVERRIDE.includes(sel.name))||sel.type===TYPE_SELECTOR&&this._metaLib.isJetTag(sel.name)){ret.push(sel.name);ret.push(sel.type);ret.push(sel.loc)}else if(sel.type===PSEUDO_CLASS_SELECTOR){this._evalPseudoClassSelector(sel,ret,sel.name)}}}}return ret};Rule.prototype._evalPseudoClassSelector=function(sel,a,pseudo){var c,o,l,e,i,j;if(!(c=sel.children)){return}for(i=0;i<c.length;i++){o=c[i];if(o.type==="Selector"){if(l=o.children){for(j=0;j<l.length;j++){e=l[j];if(e.type===CLASS_SELECTOR&&this._metaLib.isJetStylePrefix(e.name)||e.type===TYPE_SELECTOR&&this._metaLib.isJetTag(e.name)){if(!_checkNotClasses(e.name)){a.push(e.name);a.push(e.type);a.push(e.loc)}}}}continue}else{if(o.type!==SELECTOR_LIST){continue}}this._evalPseudoClassSelector(o,a,pseudo)}};Rule.prototype._isSelAccepted=function(sel){if(this._checkList){for(let i=0;i<this._checkList.length;i++){if(this._checkList[i].test(sel)){return this._isAccept}}return!this._isAccept}return true};Rule.prototype._checkAcceptRejectOption=function(regCtx){var accept=regCtx.ruleOpts["accept"];var reject=regCtx.ruleOpts["reject"];if(accept||reject){if(accept&&reject){regCtx.utils.msgLib.error(`Rule ${RULE_NAME}: override options 'accept' and 'reject' are mutually exclusive`);return false}if(accept){this._checkList=accept;this._isAccept=true}else{this._checkList=reject}if(!Array.isArray(this._checkList)){regCtx.utils.msgLib.error(`Rule ${RULE_NAME}: option '${accept?"accept":"reject"}' is not an array`);return false}for(let i=0;i<this._checkList.length;i++){if(typeof this._checkList[i]===STRING){if(!(this._checkList[i]=this._makeRegExp(regCtx,this._checkList[i].trim(),i))){return false}}}}return true};Rule.prototype._makeRegExp=function(ruleCtx,s,x){var re;try{re=new RegExp(s.trim())}catch(e){re=null}if(!re){var s=typeof x===NUMBER?`element ${x} `:"";ruleCtx.utils.msgLib.error(`Rule ${RULE_NAME}: in override option '${this._isAccept?"accept":"reject"}' element ${x} is not a valid regular expression`)}return re};function _isBuiltinOverride(sel){if(OVERRIDE_LIST.includes(sel)){return true}for(let i=0;i<OVERRIDE_LIST_PREFIX.length;i++){if(sel.startsWith(OVERRIDE_LIST_PREFIX[i])){return true}}return false};function _checkNotClasses(name){return NOT_CLASSES.includes(name)};module.exports=Rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-form-maxcols";const DESCRIPTION="Prior to JET 10.0.0, maxColumns in 'row' direction was not responsive, so that the "+"number of columns was exactly equal to maxColumns. In JET 10.0.0 and later, maxColumns "+"<b>is</b> responsive, so that the actual number of columns may now be less, depending on the "+"space available to the form.<br>If the app needs to preserve the old fixed-columns behavior, "+"then it should remove any 'max-columns' attribute (which is deprecated in dynamic UI 10.0.0) "+"from <oj-dynamic-form>, and set the new 'columns' property in the layout.";const SHORT_DESCRIPTION="The 'max-columns' attribute for <oj-dynamic-form>, or the 'maxColumns' property for layout, may have a behavioral change in JET 10.0.0.";var path;const LAYOUT_JSON="layout.json";const FORM="form";const LAYOUTS="layouts";const
|
|
6
|
+
const RULE_NAME="oj-form-maxcols";const DESCRIPTION="Prior to JET 10.0.0, maxColumns in 'row' direction was not responsive, so that the "+"number of columns was exactly equal to maxColumns. In JET 10.0.0 and later, maxColumns "+"<b>is</b> responsive, so that the actual number of columns may now be less, depending on the "+"space available to the form.<br>If the app needs to preserve the old fixed-columns behavior, "+"then it should remove any 'max-columns' attribute (which is deprecated in dynamic UI 10.0.0) "+"from <oj-dynamic-form>, and set the new 'columns' property in the layout.";const SHORT_DESCRIPTION="The 'max-columns' attribute for <oj-dynamic-form>, or the 'maxColumns' property for layout, may have a behavioral change in JET 10.0.0.";var path;const LAYOUT_JSON="layout.json";const FORM="form";const LAYOUTS="layouts";const MAX_COLUMNS="max-columns";const COLUMN="column";const DIRECTION="direction";const ID="id";const SEV_CRITICAL="critical";const ISSUE="<@tag@id> with 'max-columns' may have a behavior change in JET 10.0.0.";class Rule{getName(){return RULE_NAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){path=require("path");return{"json":this._onJson,"<oj-dynamic-form>":this._onTag}}_onJson(ruleCtx){var json,layouts,name,obj,layouts,layout,olayouts,issue,pos;if(path.basename(ruleCtx.filepath)!==LAYOUT_JSON){return}json=ruleCtx.suppData.obj;if(ruleCtx.suppData.msg){if(!ruleCtx.rulePack.isRuleEnabled("oj-json-syntax","JET")){issue=new ruleCtx.Issue(ruleCtx.suppData.msg);issue.setPosition(ruleCtx.suppData.line,ruleCtx.suppData.col,ruleCtx.suppData.position,ruleCtx.suppData.position+3);issue.setMsgKey(RULE_NAME+"_2");issue.setSeverity(SEV_CRITICAL);ruleCtx.reporter.addIssue(issue,ruleCtx);return}}if(!(layouts=json.layouts)){return}for(name in layouts){obj=layouts[name];if(obj.layoutType!==FORM){continue}if(!(olayouts=obj.layouts)){continue}for(layout in olayouts){obj=olayouts[layout];if(obj.layoutType===FORM&&obj.layout){if(obj.layout.maxColumns>1){if(!obj.layout.columns||obj.layout.direction!==COLUMN){issue=new ruleCtx.Issue(`layout '${name}' : '${layout}' with maxColumns may have behavior change in JET 10.0.x.`);if(pos=_getPos(ruleCtx.suppData.ast,name,layout)){issue.setPosition(pos.row,pos.col,pos.start,pos.end)}issue.setMsgKey(RULE_NAME+"_1");ruleCtx.reporter.addIssue(issue,ruleCtx)}}}}}}_onTag(ruleCtx,tag){if(_isGT(_getTagAttr(ruleCtx,MAX_COLUMNS),1)&&_getTagAttr(ruleCtx,DIRECTION)!==COLUMN){let id=_getTagAttr(ruleCtx,ID);id=id?" id='"+id+"'":"";let msg=ISSUE.replace("@tag",tag).replace("@id",id);let issue=new ruleCtx.Issue(msg);let pos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.node,MAX_COLUMNS);issue.setPosition(pos.row,pos.col,pos.start,pos.end);ruleCtx.reporter.addIssue(issue,ruleCtx)}}}function _getLayout(member,name,layoutName){var layouts,mems,mem,lo,ar,i,j,k;layouts=member.value.members;for(i=0;i<layouts.length;i++){if(layouts[i].name===name){lo=layouts[i];if(lo.value&&lo.value.type==="Object"){mems=lo.value.members;if(mems){for(j=0;j<mems.length;j++){mem=mems[j];if(mem.name===LAYOUTS){if(mem.value.type==="Object"){ar=mem.value.members;for(k=0;k<ar.length;k++){if(ar[k].name===layoutName){return ar[k]}}}}}}}}}};function _getPos(ast,name,layoutName){var members,member,layout,mems,pos,i,j;members=ast.members;for(i=0;i<members.length;i++){member=members[i];if(member.name===LAYOUTS&&member.value){if(layout=_getLayout(member,name,layoutName)){if(layout&&layout.value&&layout.value.type==="Object"){mems=layout.value.members;for(j=0;j<mems.length;j++){if(mems[j].name==="layout"){pos=mems[j].pos;return{row:pos.row,col:pos.col,start:pos.index,end:pos.index+layoutName.length}}}}}}}return null};function _getTagAttr(ruleCtx,attr){var attrs=ruleCtx.tagNode.attribs;return attrs?attrs[attr]:null}function _isGT(val,n){val=parseInt(val);return!isNaN(val)&&val>n}module.exports=Rule;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2018, 2022, 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 RULENAME="oj-html-alta-deprecated";const DESCRIPTION="Starting from JET 10, the Alta theme is deprecated and and use of this theme, or of "+"a custom theme such as the ApplicationsCloudUI theme, which extends it, should be "+"replaced with either the Redwood theme or a custom theme that extends the Redwood "+"theme or the Stable theme. The Alta theme will be removed all together in JET 13 "+"and must be replaced before then.";const SHORT_DESCRIPTION="Detect the use of the deprecated Alta theme";const RE_ALTA_MIN=/.*\/alta\/(oj-alta-min.css|oj-alta.css)/;const RE_APP_CLOUD=/.*\/web\/ApplicationsCloudUI.css/;const RE_INJECT_THEME=/\s*vb:inject\s.*theme="[a-zA-Z0-9\.\/]*ApplicationsCloudUI.css"/;const RE_INJECT=/\s*vb:inject id="headContent"\s*/;const STYLESHEET="stylesheet";const VER_12_0_0="12.0.0";const CRITICAL="critical";const HREF="href";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(regCtx){let jetVer=regCtx.utils.metaLib.getMetaVers().runver;let semver=regCtx.utils.semVerUtils;this._jetVerGte12=semver.gte(jetVer,VER_12_0_0);return{link:this._onLink,comment:this._onComment}}_onLink(ruleCtx){var href;if(!_isStyleSheetLink(ruleCtx)||!(href=ruleCtx.tagNode.attribs.href)){return}if(RE_ALTA_MIN.test(href)||RE_APP_CLOUD.test(href)){this._emitIssue(ruleCtx,1)}}_onComment(ruleCtx,comment){var emit,stack;if((stack=ruleCtx.elemStack)&&stack.length){stack=stack[stack.length-1];if(stack.type==="tag"&&stack.name==="head"){if(!(emit=RE_INJECT_THEME.test(comment))){if(RE_INJECT.test(comment)){emit=comment.indexOf(" theme=")<0}}if(emit){this._emitIssue(ruleCtx,2,comment)}}}}_emitIssue(ruleCtx,type,comment){var issue,msg,node;msg=type===1?"Stylesheet <link> refers to deprecated Alta theme or a theme that extends it":"vb:inject theme : Alta theme is deprecated";issue=new ruleCtx.Issue(msg);if(type===1){issue.setPosition(ruleCtx.utils.DomUtils.getAttrValuePosition(ruleCtx.data,ruleCtx.node,HREF))}else{node=ruleCtx.node;let x=comment.indexOf("theme=");if(x>=0){x+=node.startIndex;issue.setPosition(null,null,node.startIndex+5,node.endIndex)}else{issue.setPosition(null,null,node.startIndex,node.endIndex)}}if(this._jetVerGte12){issue.setSeverity(CRITICAL)}ruleCtx.reporter.addIssue(issue,ruleCtx)}}function _isStyleSheetLink(ruleCtx){var attribs,ret;if(attribs=ruleCtx.tagNode.attribs){ret=attribs.rel===STYLESHEET}return ret?ret:false}module.exports=Rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-bindforeach-data";const SHORT_DESCRIPT="The 'data' attribute of an <oj-bind-for-each> must be a '[[...]]' expression";const LONG_DESCRIPT="The 'data' attribute of an <oj-bind-for-each> tag must be a '[[...]]' expression and not a literal.";const
|
|
6
|
+
const RULE_NAME="oj-html-bindforeach-data";const SHORT_DESCRIPT="The 'data' attribute of an <oj-bind-for-each> must be a '[[...]]' expression";const LONG_DESCRIPT="The 'data' attribute of an <oj-bind-for-each> tag must be a '[[...]]' expression and not a literal.";const ATTRNAME="data";const PREFIX_ATTRNAME=":data";const PREFERRED="preferred";const EXPECTED="expected";const MSG="<oj-bind-for-each> 'data' attribute : read-only '[[...]]' expression ";var what;function getName(){return RULE_NAME};function getShortDescription(){return SHORT_DESCRIPT};function getDescription(){return LONG_DESCRIPT};function register(){return{"<oj-bind-for-each>":_fnTag}};function _fnTag(ruleCtx){var attribs,val,valType,attrName,attrPos,issue;if(ruleCtx.tagNode.attribs){attribs=ruleCtx.tagNode.attribs;val=attribs[ATTRNAME];valType=typeof val;if(valType!=="undefined"){attrName=ATTRNAME}else{val=attribs[PREFIX_ATTRNAME];valType=typeof val;if(valType!=="undefined"){attrName=PREFIX_ATTRNAME}}if(valType==="undefined"){issue=new ruleCtx.Issue("<oj-bind-for-each> 'data' attribute missing");ruleCtx.reporter.addIssue(issue,ruleCtx);return}if(valType==="string"&&val.startsWith("[[")){return}what=valType==="string"&&val.startsWith("{{")?PREFERRED:EXPECTED;issue=new ruleCtx.Issue(MSG+what);attrPos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.tagNode,attrName);issue.setPosition(attrPos.row,attrPos.col,attrPos.start,attrPos.end);if(what===PREFERRED){issue.setSeverity("minor")}ruleCtx.reporter.addIssue(issue,ruleCtx)}};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-bindif-test";const SHORT_DESCRIPT="'test' attribute of an <oj-bind-if> must be a '[[...]]' expression";const LONG_DESCRIPT="The 'test' attribute of an <oj-bind-if> tag must be a '[[...]]' expression and not a literal.";const
|
|
6
|
+
const RULE_NAME="oj-html-bindif-test";const SHORT_DESCRIPT="'test' attribute of an <oj-bind-if> must be a '[[...]]' expression";const LONG_DESCRIPT="The 'test' attribute of an <oj-bind-if> tag must be a '[[...]]' expression and not a literal.";const ATTRNAME="test";const PREFIX_ATTRNAME=":test";const PREFERRED="preferred";const EXPECTED="expected";const MSG="<oj-bind-if> 'test' attribute : read-only '[[...]]' expression ";function getName(){return RULE_NAME};function getShortDescription(){return SHORT_DESCRIPT};function getDescription(){return LONG_DESCRIPT};function register(){return{"<oj-bind-if>":_onBindIf}};function _onBindIf(ruleCtx){var attribs,val,valType,attrName,attrPos,issue,what;if(ruleCtx.tagNode.attribs){attribs=ruleCtx.tagNode.attribs;val=attribs[ATTRNAME];valType=typeof val;if(valType!=="undefined"){attrName=ATTRNAME}else{val=attribs[PREFIX_ATTRNAME];valType=typeof val;if(valType!=="undefined"){attrName=PREFIX_ATTRNAME}}if(valType==="undefined"){issue=new ruleCtx.Issue("<oj-bind-if> 'test' attribute missing");ruleCtx.reporter.addIssue(issue,ruleCtx);return}if(valType==="string"){if(val.startsWith("[[")||val==="true"||val==="false"){return}what=val.startsWith("{{")?PREFERRED:EXPECTED}issue=new ruleCtx.Issue(MSG+what);attrPos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.tagNode,attrName);issue.setPosition(attrPos.row,attrPos.col,attrPos.start,attrPos.end);if(what===PREFERRED){issue.setSeverity("minor")}ruleCtx.reporter.addIssue(issue,ruleCtx)}};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-binding-attr";const SHORT_DESCRIPT="JET binding elements should not use global attributes";const LONG_DESCRIPT="The binding elements in JET (e.g. <b><i>oj-bind-for-each</i></b>, <b><i>oj-bind-if</i></b>, <b><i>oj-bind-slot</i></b>, <b><i>oj-bind-text</i></b>) are run through "+"a preprocessor and replaced with comment nodes when bindings are applied. As a result, the global HTML "+"attributes which are typically supported on all elements (e.g. <i>style</i>, <i>id</i>, etc.) are meaningless when applied "+"to binding elements.";function getName(){return RULE_NAME};function getShortDescription(){return SHORT_DESCRIPT};function getDescription(){return LONG_DESCRIPT};function register(){return{
|
|
6
|
+
const RULE_NAME="oj-html-binding-attr";const SHORT_DESCRIPT="JET binding elements should not use global attributes";const LONG_DESCRIPT="The binding elements in JET (e.g. <b><i>oj-bind-for-each</i></b>, <b><i>oj-bind-if</i></b>, <b><i>oj-bind-slot</i></b>, <b><i>oj-bind-text</i></b>) are run through "+"a preprocessor and replaced with comment nodes when bindings are applied. As a result, the global HTML "+"attributes which are typically supported on all elements (e.g. <i>style</i>, <i>id</i>, etc.) are meaningless when applied "+"to binding elements.";function getName(){return RULE_NAME};function getShortDescription(){return SHORT_DESCRIPT};function getDescription(){return LONG_DESCRIPT};function register(){return{bindingtag:_onBind}};function _onBind(ruleCtx,tagName){var attribs,attrib,issue,attrPos;attribs=ruleCtx.node.attribs;if(!attribs){return}for(attrib in attribs){if(ruleCtx.utils.DomUtils.isCommonAttr(attrib)||attrib.startsWith("aria")){issue=new ruleCtx.Issue("Use of attribute '"+attrib+"' is meaningless for binding element <"+tagName+">");attrPos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.node,attrib);issue.setPosition(attrPos.row,attrPos.col,attrPos.start,attrPos.end);ruleCtx.reporter.addIssue(issue,ruleCtx)}}};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-cca-tagname";const SHORT_DESCRIPT="Web component element names must be defined";const LONG_DESCRIPT="This web component is unknown
|
|
6
|
+
const RULE_NAME="oj-html-cca-tagname";const SHORT_DESCRIPT="Web component element names must be defined";const LONG_DESCRIPT="This web component is unknown to JAF. Check the element spelling. For non-JET core components, check that the component metadata has been declared to JAF via the 'component's configuration property.";const IGNORE_LIST=["oj-slot","oj-dynamic-form"];function Rule(){this._ignoreList=null}Rule.prototype.getName=function(){return RULE_NAME};Rule.prototype.getShortDescription=function(){return SHORT_DESCRIPT};Rule.prototype.getDescription=function(){return LONG_DESCRIPT};Rule.prototype.register=function(regCtx){if(!this._getIgnoreOverrides(regCtx)){return false}return{"tag":this._handleTag,"ojtag":this._handleTag}};Rule.prototype._handleTag=function(ruleCtx,tagName){if(ruleCtx.utils.DomUtils.isCommonElem(tagName)||ruleCtx.utils.DomUtils.isHtml5ObsoleteElem(tagName)||tagName==="template"||_isSvg(ruleCtx,tagName)){return}if(!ruleCtx.utils.metaLib.isWCTag(tagName)&&!IGNORE_LIST.includes(tagName)&&!this._checkOverrides(tagName)){let b=tagName.includes("-");let s=b?"web component":"tag";var issue=new ruleCtx.Issue(`<${ruleCtx.tag}> is not a known ${s}`);if(b){issue.setMsgKey(RULE_NAME+"_1")}ruleCtx.reporter.addIssue(issue,ruleCtx)}};Rule.prototype._checkOverrides=function(tag){if(tag.startsWith("oj-what-is-")){var jj=42}if(this._ignoreList){for(let i=0;i<this._ignoreList.length;i++){if(this._ignoreList[i].test(tag)){return true}}}return false};Rule.prototype._getIgnoreOverrides=function(regCtx){var ignore;if(ignore=regCtx.ruleOpts["ignore"]){if(!Array.isArray(ignore)){regCtx.utils.msgLib.error(`Rule ${RULE_NAME} : config option 'ignore' is not an array`);return false}this._ignoreList=[];for(let i=0;i<ignore.length;i++){if(typeof ignore[i]==="string"){try{this._ignoreList[i]=new RegExp(ignore[i].trim())}catch(e){regCtx.utils.msgLib.error(`Config 'ruleMods' ${RULE_NAME} 'ignore' entry [${i}]: ${e.message}`);return false}}}}return true};function _isSvg(ruleCtx,elem){var ret=false,n;if(elem==="svg"){return true}if(ruleCtx.utils.DomUtils.isSvgElem(elem)){n=ruleCtx.tagNode;while(n){n=n.parent;if(!n){break}if(n.name&&n.name==="svg"){ret=true;break}}}return ret};module.exports=Rule;
|
package/rules/jet/oj-html-cdn.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-dlg-title";const SHORT_DESCR="Check that <oj-dialog> attribute is not specified";const LONG_DESCR="<oj-dialog> : 'title' attribute should not be used - use 'dialog-title' instead.";const
|
|
6
|
+
const RULE_NAME="oj-html-dlg-title";const SHORT_DESCR="Check that <oj-dialog> attribute is not specified";const LONG_DESCR="<oj-dialog> : 'title' attribute should not be used - use 'dialog-title' instead.";const MSG="<oj-dialog> attribute 'title' should be replaced with 'dialog-title'";function getName(){return RULE_NAME};function getShortDescription(){return SHORT_DESCR};function getDescription(){return LONG_DESCR};function register(){return{"<oj-dialog>":_onDlg}};function _onDlg(ruleCtx){let attribs,attrName;if(attribs=ruleCtx.tagNode.attribs){for(attrName in attribs){if(attrName==="title"||attrName===":title"){let issue=new ruleCtx.Issue(MSG);let attrPos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.tagNode,attrName);issue.setPosition(attrPos.row,attrPos.col,attrPos.start,attrPos.end);ruleCtx.reporter.addIssue(issue,ruleCtx)}}}};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-file-pick-accept";const DESCRIPTION="Valid array entries for the 'accept' attribute of <oj-file-picker> are:<p>"+"1) a file suffix beginning with a period, e.g. \".xxx\"<br>"+"2) an empty string<br>"+"3) an audio, video, or image file, e.g. \"image/*\" or \"audio/*\", or \"video/*\".";const SHORT_DESCRIPTION="Array entries for <oj-file-picker accept=' . . .'> attribute should be valid file strings.";const BASE_MSG="<oj-file-picker> attribute 'accept'";const FILE_PICKER="oj-file-picker";const ACCEPT="accept";const RO_EXPR="[[";const RW_EXPR="{{";const ARRAY_LEFT="[";const ARRAY_RIGHT="]";const GOOD_VALS=[".","audio/","video/","image/"];class Rule{getName(){return RULE_NAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{
|
|
6
|
+
const RULE_NAME="oj-html-file-pick-accept";const DESCRIPTION="Valid array entries for the 'accept' attribute of <oj-file-picker> are:<p>"+"1) a file suffix beginning with a period, e.g. \".xxx\"<br>"+"2) an empty string<br>"+"3) an audio, video, or image file, e.g. \"image/*\" or \"audio/*\", or \"video/*\".";const SHORT_DESCRIPTION="Array entries for <oj-file-picker accept=' . . .'> attribute should be valid file strings.";const BASE_MSG="<oj-file-picker> attribute 'accept'";const FILE_PICKER="oj-file-picker";const ACCEPT="accept";const RO_EXPR="[[";const RW_EXPR="{{";const ARRAY_LEFT="[";const ARRAY_RIGHT="]";const GOOD_VALS=[".","audio/","video/","image/"];class Rule{getName(){return RULE_NAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<oj-file-picker>":this._onTag}}_onTag(ruleCtx){let accept;accept=ruleCtx.tagNode.attribs;accept=accept?accept[ACCEPT]:null;if(accept){let avals=this._checkAttr(ruleCtx,accept);if(avals){this._checkArray(ruleCtx,avals)}}}_emitIssue(ruleCtx,msgNum,info,val){var msg,issue;switch(msgNum){case 0:msg=`${BASE_MSG} is not an array of strings`;break;case 1:msg=`${BASE_MSG} syntax : ${info.msg} at index ${info.startIndex}`;break;case 2:msg=`${BASE_MSG} : invalid array entry \"${val}\"`;break;}if(msg){issue=new ruleCtx.Issue(msg);if(msgNum){issue.setMsgKey(RULE_NAME+"_"+msgNum)}let pos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.node,ACCEPT);issue.setPosition(pos.row,pos.col,pos.start,pos.end);ruleCtx.reporter.addIssue(issue,ruleCtx)}}_checkArray(ruleCtx,avals){var v,i,j;for(i=0;i<avals.length;i++){v=avals[i];if(typeof v!=="string"){this._emitIssue(ruleCtx,2,null,v);continue}for(j=0;j<GOOD_VALS.length;j++){if(v.startsWith(GOOD_VALS[j])||v===""){break}}if(j>=GOOD_VALS.length){this._emitIssue(ruleCtx,2,i,v)}}}_checkAttr(ruleCtx,s){if(s.startsWith(RO_EXPR)||s.startsWith(RW_EXPR)){return}if(s.charAt(0)!==ARRAY_LEFT&&s.charAt(s.length-1)!==ARRAY_RIGHT){this._emitIssue(ruleCtx,0);return}let o=ruleCtx.utils.utils.parseJson(s,false);if(o.msg){this._emitIssue(ruleCtx,1,o);return}return o.obj}}module.exports=Rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-form-layout-maxcols";const DESCRIPTION="Prior to JET 10.0.0, maxColumns in 'row' direction was not responsive, so that the "+"number of columns was exactly equal to maxColumns. In JET 10.0.0 and later, maxColumns "+"<b>is</b> responsive, so that the actual number of columns may now be less, depending on the "+"space available to the form.<br>If the app needs to preserve the old fixed-columns behavior, "+"then the <oj-form-layout> 'max-columns' attribute should be replaced with the new "+"'columns' attribute.";const SHORT_DESCRIPTION="For <oj-form-layout>, the 'max-columns' attribute may have a behavioral change in JET 10.0.0.";const
|
|
6
|
+
const RULE_NAME="oj-html-form-layout-maxcols";const DESCRIPTION="Prior to JET 10.0.0, maxColumns in 'row' direction was not responsive, so that the "+"number of columns was exactly equal to maxColumns. In JET 10.0.0 and later, maxColumns "+"<b>is</b> responsive, so that the actual number of columns may now be less, depending on the "+"space available to the form.<br>If the app needs to preserve the old fixed-columns behavior, "+"then the <oj-form-layout> 'max-columns' attribute should be replaced with the new "+"'columns' attribute.";const SHORT_DESCRIPTION="For <oj-form-layout>, the 'max-columns' attribute may have a behavioral change in JET 10.0.0.";const MAX_COLUMNS="max-columns";const COLUMNS="columns";const COLUMN="column";const DIRECTION="direction";const ISSUE="<oj-form-layout> with 'max-columns' may have a behavior change in JET 10.0.0.";class Rule{getName(){return RULE_NAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<oj-form-layout>":this._onTag}}_onTag(ruleCtx){if(_isGT(_getTagAttr(ruleCtx,MAX_COLUMNS),1)){if(!_hasTagAttr(ruleCtx,COLUMNS)||_getTagAttr(ruleCtx,DIRECTION)===COLUMN){let issue=new ruleCtx.Issue(ISSUE);let pos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.node,MAX_COLUMNS);issue.setPosition(pos.row,pos.col,pos.start,pos.end);ruleCtx.reporter.addIssue(issue,ruleCtx)}}}}function _hasTagAttr(ruleCtx,attr){var attrs=ruleCtx.tagNode.attribs;return attrs?attrs.hasOwnProperty(attr):false}function _getTagAttr(ruleCtx,attr){var attrs=ruleCtx.tagNode.attribs;return attrs?attrs[attr]:null}function _isGT(val,n){val=parseInt(val);return!isNaN(val)&&val>n}module.exports=Rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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-input-isodate";const DESCRIPTION="Date/time strings used in the 'value', 'min, and 'max' attributes of web components "+"<oj-input-date>, oj-input-date-time>, <oj-input-time>, <oj-date-picker>, and <oj-date-time-picker>, "+"must be valid ISO-8061 strings, and have the same format type - zulu, offset, or local. ";const SHORT_DESCRIPTION="Date/time strings used in the 'value', 'min, and 'max' attributes of <oj-date-*> and <oj-input-date-*>, "+"must have the same format type - zulu, offset, or local. ";const ISO_DATE_REGEXP=/^[+-]?\d{4}(?:-\d{2}(?:-\d{2})?)?(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(Z|[+-]\d{2}(?::?\d{2})?)?)?$|^T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(Z|[+-]\d{2}(?::?\d{2})?)?$/;
|
|
6
|
+
const RULENAME="oj-html-input-isodate";const DESCRIPTION="Date/time strings used in the 'value', 'min, and 'max' attributes of web components "+"<oj-input-date>, oj-input-date-time>, <oj-input-time>, <oj-date-picker>, and <oj-date-time-picker>, "+"must be valid ISO-8061 strings, and have the same format type - zulu, offset, or local. ";const SHORT_DESCRIPTION="Date/time strings used in the 'value', 'min, and 'max' attributes of <oj-date-*> and <oj-input-date-*>, "+"must have the same format type - zulu, offset, or local. ";const ISO_DATE_REGEXP=/^[+-]?\d{4}(?:-\d{2}(?:-\d{2})?)?(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(Z|[+-]\d{2}(?::?\d{2})?)?)?$|^T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(Z|[+-]\d{2}(?::?\d{2})?)?$/;class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<oj-input-date>":this._onOjTag,"<oj-input-date-time>":this._onOjTag,"<oj-input-time>":this._onOjTag,"<oj-date-picker>":this._onOjTag,"<oj-date-time-picker>":this._onOjTag}}_onOjTag(ruleCtx){let min,max,value;this._isErr=this._isValExpr=this._isMinExpr=this._isMaxExpr=false;value=_getAttrib(ruleCtx,"value");min=_getAttrib(ruleCtx,"min");max=_getAttrib(ruleCtx,"max");this._isValid(ruleCtx,value,min,max)}_isValid(ruleCtx,value,min,max){if(value){this._isValExpr=_isExpr(value);if(!this._isValExpr&&!ISO_DATE_REGEXP.test(value)){this._emitIssue(ruleCtx,"value",value,1)}}if(min){this._isMinExpr=_isExpr(min);if(!this._isMinExpr&&!ISO_DATE_REGEXP.test(min)){this._emitIssue(ruleCtx,"min",min,2)}}if(max){this._isMaxExpr=_isExpr(max);if(!this._isMaxExpr&&!ISO_DATE_REGEXP.test(max)){this._emitIssue(ruleCtx,"max",max,3)}}if(this._isErr){return}this._checkZone(ruleCtx,value,min,max);if(!this._isErr){this._isMinGtMax(ruleCtx,min,max);this._isTimeOnlyValue(ruleCtx,value,min,max)}}_checkZone(ruleCtx,value,min,max){var fmtValue,fmtMin,fmtMax,fmtErr;if(value&&!this._isValExpr){fmtValue=this._getISOStrFormatType(value);if(fmtValue===null){fmtErr="value"}}if(min&&!this._isMinExpr){fmtMin=this._getISOStrFormatType(min);if(fmtMin===null){fmtErr="min"}}if(max&&!this._isMaxExpr){fmtMax=this._getISOStrFormatType(max);if(fmtMax===null){fmtErr="max"}}if(fmtErr){this._emitIssue(ruleCtx,fmtErr,null,9);return}if(value&&fmtValue){if(min&&fmtMin&&max&&fmtMax&&!(fmtValue===fmtMin&&fmtValue===fmtMax)){this._emitIssue(ruleCtx,fmtValue,null,5)}else{if(min&&fmtMin&&!(fmtValue===fmtMin)){this._emitIssue(ruleCtx,fmtValue,null,6)}if(max&&fmtMax&&!(fmtValue===fmtMax)){this._emitIssue(ruleCtx,fmtValue,null,7)}}}if(min&&fmtMin&&max&&fmtMax&&!(fmtMin===fmtMax)){this._emitIssue(ruleCtx,fmtValue,fmtMax,8)}}_isTimeOnlyValue(ruleCtx,value,min,max){if(value&&!this._isValExpr&&value.startsWith("T")){if(min&&!this._isMinExpr&&!min.startsWith("T")){this._emitIssue(ruleCtx,"min",null,10)}if(max&&!this._isMaxExpr&&!min.startsWith("T")){this._emitIssue(ruleCtx,"max",null,10)}}}_isMinGtMax(ruleCtx,min,max){if(min&&!this._isMinExpr&&max&&!this._isMaxExpr){if(_compareISODates(max,min)<=0){this._emitIssue(ruleCtx,null,null,4)}}}_getISOStrFormatType(isoStr){let format=null;var exe=ISO_DATE_REGEXP.exec(isoStr);if(exe){if(exe[1]===undefined&&exe[2]===undefined){format="local"}else{let timeZone=exe[1]!==undefined?exe[1]:exe[2];format=timeZone==="Z"?"zulu":"offset"}}return format}_emitIssue(ruleCtx,str,val,id){var issue,attrPos;switch(id){case 1:case 2:case 3:issue=new ruleCtx.Issue(`Attrib '${str}' : Invalid ISO-8601 time/date string`);attrPos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,ruleCtx.node,str);issue.setPosition(attrPos.row,attrPos.col,attrPos.start,attrPos.end);break;case 4:issue=new ruleCtx.Issue(`min' attribute value is greater than 'max'`);break;case 5:issue=new ruleCtx.Issue(`'min' and 'max' must be same ISO string format as 'value' (${str})`);break;case 6:issue=new ruleCtx.Issue(`'min' must be same ISO string format as 'value' (${str})`);break;case 7:issue=new ruleCtx.Issue(`'max' must be same ISO string format as 'value' (${str}))`);break;case 8:issue=new ruleCtx.Issue(`'min' and 'max' must be same ISO string format. 'min'= ${str}, 'max'=${val}`);break;case 9:issue=new ruleCtx.Issue(`Error determining ISO string format of '${str}'`);break;case 10:issue=new ruleCtx.Issue(`value' is a time-only string, but '${str}' includes a date`);break;}if(issue){this._isErr=true;if(id>1){issue.setMsgKey(RULENAME+"_"+(id-1))}ruleCtx.reporter.addIssue(issue,ruleCtx)}}}function _isExpr(s){return s.startsWith("[[")||s.startsWith("{{")};function _compareISODates(maxIso,minIso){const today=new Date;const month=today.getMonth()+1;let monthStr=_zeroPad(month.toString(),2);const day=today.getDate();let dayStr=_zeroPad(day.toString(),2);const todayIsoDate=today.getFullYear()+"-"+monthStr+"-"+dayStr;let isoString1=maxIso;let isoString2=minIso;const maxStartsWithT=maxIso.indexOf("T")===0;const minStartsWithT=minIso.indexOf("T")===0;const maxHasNoT=maxIso.indexOf("T")===-1;const minHasNoT=minIso.indexOf("T")===-1;const zeroTime="T00:00:00";if(maxStartsWithT){isoString1=todayIsoDate+isoString1}else if(maxHasNoT){isoString1+=zeroTime}if(minStartsWithT){isoString2=todayIsoDate+isoString2}else if(minHasNoT){isoString2+=zeroTime}const dateMax=new Date(isoString1);const dateMin=new Date(isoString2);return dateMax.getTime()-dateMin.getTime()};function _getAttrib(ruleCtx,attr){return _getNodeAttrib(ruleCtx,ruleCtx.node,attr)};function _getNodeAttrib(ruleCtx,node,attr){var du=ruleCtx.utils.DomUtils;return du.getAttribValue(node,attr)||du.getAttribValue(node,":"+attr)};function _zeroPad(s,n){s=s.trim(s);if(s.length<n){s="0".repeat(n-s.length)+s}return s};module.exports=Rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-invalid-doctype";function getName(){return RULE_NAME};function getShortDescription(){return"HTML page should specify 'html' in the <!doctype> declaration"};function getDescription(){return"JET requires HTML5 standards mode. To ensure that this mode is enabled in every browser, you should specify 'html' in the <!doctype> declaration"};function register(){return{"file":_handleFile}};function _handleFile(ruleCtx){var node,siblings,
|
|
6
|
+
const RULE_NAME="oj-html-invalid-doctype";function getName(){return RULE_NAME};function getShortDescription(){return"HTML page should specify 'html' in the <!doctype> declaration"};function getDescription(){return"JET requires HTML5 standards mode. To ensure that this mode is enabled in every browser, you should specify 'html' in the <!doctype> declaration"};function register(){return{"file":_handleFile}};function _handleFile(ruleCtx){var node,siblings,i;var DomUtils=ruleCtx.utils.DomUtils;var NodeType=ruleCtx.NodeTypes;node=ruleCtx.node;if(node.type===NodeType.DIRECTIVE){if(_isGoodDirective(ruleCtx,node)){return}}siblings=DomUtils.getSiblings(node);for(i=0;i<siblings.length;i++){node=siblings[i];if(node.type===NodeType.DIRECTIVE){if(_isGoodDirective(ruleCtx,node)){return}}if(node.type===NodeType.TAG||node.type===NodeType.SCRIPT){break}}};function _isGoodDirective(ruleCtx,node){var ret=false;if(_isDocType(node.data)){if(ruleCtx.utils.DomUtils.isNonFragmentJetPage(ruleCtx)){_isDocTypeHtml(ruleCtx,node);ret=true}}return ret};function _emitIssue(ruleCtx,node,id){var issue,pos,msg;ruleCtx.clearPosition();switch(id){case 1:msg="<!doctype> does not specify 'html'";break;case 2:msg="Unexpected white space between ! and 'doctype'";break;}issue=new ruleCtx.Issue(msg);pos=_applyfix(ruleCtx,node);issue.setPosition(null,null,pos,pos+7);if(id===2){issue.setMsgKey(RULE_NAME+"_1")}ruleCtx.reporter.addIssue(issue,ruleCtx)};function _isDocTypeHtml(ruleCtx,node){var data=node.data.toLowerCase();if(!data.startsWith("!d")){_emitIssue(ruleCtx,node,2)}if(_getNodeData(data)!=="html"){_emitIssue(ruleCtx,node,1)}};function _isDocType(s){s=s?s.substr(1).trim().toLowerCase():s;return s.startsWith("doctype")};function _getNodeData(s){if(s){s=s.replace(/!/g,"").trim().substr(7).trim().toLowerCase()}return s};function _applyfix(ruleCtx,node){var x,i,d;x=node.startIndex;d=ruleCtx.rawData;x=ruleCtx.utils.utils.eatWhitespace(d,x);d=d.substring(x);for(i=0;i<d.length;i++){if(d.charAt(i)==="!"){return x+i}}return node.startIndex};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-jq-databind";const OJ_PREFIX="oj.";function getName(){return RULE_NAME};function getShortDescription(){return"Discontinue instantiation of JET JQUI components using 'data-bind'"};function getDescription(){return"Discontinue instantiation of JET JQUI components using '<i>data-bind</i>'. For example, in place of <i>oj.ojButton</i>, use JET custom component syntax <i><oj-button></i>."};function register(){return{"
|
|
6
|
+
const RULE_NAME="oj-html-jq-databind";const OJ_PREFIX="oj.";function getName(){return RULE_NAME};function getShortDescription(){return"Discontinue instantiation of JET JQUI components using 'data-bind'"};function getDescription(){return"Discontinue instantiation of JET JQUI components using '<i>data-bind</i>'. For example, in place of <i>oj.ojButton</i>, use JET custom component syntax <i><oj-button></i>."};function register(){return{"<data-bind=>":_onDataBind}};function _onDataBind(ruleCtx,attrName,attrValue){var issue,componentName,status,suggestion,since,ojElem,fullClass,msg;if(attrValue.indexOf("ojComponent")<0){return}componentName=ruleCtx.utils.DomUtils.extractComponentFromDataBind(attrValue);fullClass=OJ_PREFIX+componentName;if(componentName){if(status=ruleCtx.utils.metaLib.isClassDeprecated(fullClass)){suggestion=status[0].description;since=status[0].since;since=since?"(since"+since+") ":""}}if(componentName){ojElem=ruleCtx.utils.metaLib.getTagFromClass(fullClass);msg="JQUI data-bind instantiation of "+componentName+" found in <"+ruleCtx.tag+">";if(ojElem){if(ojElem==="oj-tree"){ojElem="oj-tree-view"}msg+=". Use <"+ojElem+">."}issue=new ruleCtx.Issue(msg);issue.setMsgKey(RULE_NAME+"_1")}else{issue=new ruleCtx.Issue(`JQUI data-bind invocation of unknown JET component found in <${ruleCtx.tag}>`);issue.setMsgKey(RULE_NAME+"_2")}if(issue){ruleCtx.reporter.addIssue(issue,ruleCtx)}if(suggestion){issue=new ruleCtx.Issue(`JQUI data-bind invocation for deprecated ${since}JET component '${componentName}'. ${suggestion}`);issue.setMsgKey(RULE_NAME+"_3");ruleCtx.reporter.addIssue(issue,ruleCtx)}};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018,
|
|
2
|
+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
|
|
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 RULE_NAME="oj-html-ko-databind";function getName(){return RULE_NAME};function getShortDescription(){return"Jet binding elements should be used in place of Knockout 'data-bind' bindings"};function getDescription(){return"JET binding elements should be used in place of Knockout 'data-bind' bindings wherever possible."};function register(){return{"
|
|
6
|
+
const RULE_NAME="oj-html-ko-databind";function getName(){return RULE_NAME};function getShortDescription(){return"Jet binding elements should be used in place of Knockout 'data-bind' bindings"};function getDescription(){return"JET binding elements should be used in place of Knockout 'data-bind' bindings wherever possible."};function register(){return{"<data-bind=>":_onDataBind}};function _onDataBind(ruleCtx,attrName,attrValue){var aBindings,binding,i,x,suggest;attrValue=attrValue.trim();if(attrValue.length===0){return}attrValue=attrValue.toLowerCase();aBindings=attrValue.split(",");for(i=0;i<aBindings.length;i++){binding=aBindings[i].trim();x=binding.indexOf(":");if(x<0){continue}binding=binding.substring(0,x).trim();suggest=_getSuggested(binding);if(suggest){let issue=new ruleCtx.Issue("Knockout data-bind \""+binding+":\" binding found. Use of JET "+suggest+" recommended.");ruleCtx.reporter.addIssue(issue,ruleCtx)}}};function _getSuggested(binding){var suggest;if(binding==="foreach"){suggest="<oj-bind-for-each>"}else if(binding==="if"||binding==="ifnot"){suggest="<oj-bind-if>"}else if(binding==="text"){suggest="<oj-bind-text>"}else if(binding==="css"){suggest=":class binding"}return suggest};module.exports={getName,getDescription,getShortDescription,register};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2018, 2022, 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 RULENAME="oj-html-msgs-cat-text";const DESCRIPTION="For theme 'Redwood', the UX specification for Messages does not include category text."+"By default, the component renders the category text based on the severity. Redwood themed "+"applications should explicitly set the 'display-options.category' attribute to 'none' so "+"that the category text will not be rendered, and messages will match the UX "+"specificatiopn.";const SHORT_DESCRIPTION="Redwood themed applications should explicitly set the 'display-options.category' attribute to 'none'";const DISP_OPTS_CATEGORY="display-options.category";const OJ_MESSAGE="oj-message";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<oj-messages>":this._onOjMessages}}_onOjMessages(ruleCtx){var msgs,val;var node=ruleCtx.tagNode;var attribs=node.attribs;var attr=attribs[DISP_OPTS_CATEGORY];var template=_hasMessageTemplate(node);if(template){if(msgs=_getMessages(template)){msgs.forEach(msg=>{val=undefined;if(msg.attribs){if((val=msg.attribs[DISP_OPTS_CATEGORY])!==undefined){if(val==="none"||val!=="auto"&&val!=="header"){return}}}this._emitIssue(ruleCtx,val!==undefined?1:2,msg,val)})}else{this._emitIssue(ruleCtx,3)}}else{if(attr!=="none"){this._emitIssue(ruleCtx,4,node,attr)}}}_emitIssue(ruleCtx,id,node,val){var issue;switch(id){case 1:issue=new ruleCtx.Issue(`<oj-message> attrib 'display-options.category' set to '${val}' - expected 'none'`);break;case 2:issue=new ruleCtx.Issue(`<oj-message> attrib 'display-options.category' missing or not set to 'none'`);break;case 3:issue=new ruleCtx.Issue("<template> with <oj-message> children expected");break;case 4:issue=new ruleCtx.Issue(`<oj-messages> attrib 'display-options.category' missing or not set to 'none'`);break;}if((id===1||id===4)&&val){let attrPos=ruleCtx.utils.DomUtils.getAttrPosition(ruleCtx.data,node,DISP_OPTS_CATEGORY);issue.setPosition(attrPos.row,attrPos.col,attrPos.start,attrPos.end)}else if(id===2){issue.setPosition(null,null,node.startIndex,node.startIndex+OJ_MESSAGE.length)}if(id>1){issue.setMsgKey(RULENAME+"_"+(id-1))}ruleCtx.reporter.addIssue(issue,ruleCtx)}};function _hasMessageTemplate(node){var ch,n,i;if((ch=node.children)&&ch.length){for(i=0;i<ch.length;i++){n=ch[i];if(n.type==="tag"&&n.name==="template"){if(n.attribs&&n.attribs.slot==="messageTemplate"){return n}}}}return null};function _getMessages(node){var ch,msgs=null;if((ch=node.children)&&ch.length){ch.forEach(n=>{if(n.type==="tag"&&n.name==="oj-message"){if(!msgs){msgs=[]}msgs.push(n)}})}return msgs};module.exports=Rule;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2018, 2022, 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 RULENAME="oj-html-no-style-tag";const DESCRIPTION="In-line CSS in a <style> section is not permitted and should be declared in a CSS file.";const SHORT_DESCRIPTION="In-line CSS should be in a CSS file, not in a <style> section";class Rule{getName(){return RULENAME}getDescription(){return DESCRIPTION}getShortDescription(){return SHORT_DESCRIPTION}register(){return{"<style>":this._onStyle}}_onStyle(ruleCtx){if(!ruleCtx.rulePack.isRuleEnabled("csp-html-style-unsafe-inline","CSP")){let issue=new ruleCtx.Issue("In-line CSS in a <style> section is not permitted - use a .css file");ruleCtx.reporter.addIssue(issue,ruleCtx)}}}module.exports=Rule;
|