eslint-plugin-conventions 5.3.0 → 5.3.2

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/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-conventions" target="blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/interlace-dark.svg"><img src="https://eslint.interlace.tools/logos/interlace-light.svg" alt="Interlace" height="90" /></picture></a>
2
+ <a href="https://eslint.interlace.tools/docs/quality/plugin-conventions?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-conventions" target="blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/interlace-dark.svg"><img src="https://eslint.interlace.tools/logos/interlace-light.svg" alt="Interlace" height="90" /></picture></a>
3
3
  &nbsp;&nbsp;
4
4
  <a href="https://oxc.rs" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/oxlint-dark.svg"><img src="https://eslint.interlace.tools/logos/oxlint-light.svg" alt="oxlint" height="90" /></picture></a>
5
5
  &nbsp;&nbsp;
@@ -174,5 +174,5 @@ MIT © [Ofri Peretz](https://github.com/ofri-peretz)
174
174
  </p>
175
175
 
176
176
  <p align="center">
177
- <a href="https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-conventions" target="blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/interlace-dark.svg"><img src="https://eslint.interlace.tools/logos/interlace-light.svg" alt="Interlace" height="70" /></picture></a>
177
+ <a href="https://eslint.interlace.tools/docs/quality/plugin-conventions?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-conventions" target="blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/interlace-dark.svg"><img src="https://eslint.interlace.tools/logos/interlace-light.svg" alt="Interlace" height="70" /></picture></a>
178
178
  </p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-conventions",
3
- "version": "5.3.0",
3
+ "version": "5.3.2",
4
4
  "description": "ESLint plugin for team code conventions — enforces filename case, magic-number bans, commented-out code, expiring TODOs, and deprecated-API usage.",
5
5
  "type": "commonjs",
6
6
  "main": "./src/index.js",
@@ -50,7 +50,7 @@
50
50
  "node": ">=18.0.0"
51
51
  },
52
52
  "dependencies": {
53
- "@interlace/eslint-devkit": "^1.19.0"
53
+ "@interlace/eslint-devkit": "^1.19.1"
54
54
  },
55
55
  "repository": {
56
56
  "type": "git",
@@ -67,5 +67,11 @@
67
67
  "funding": {
68
68
  "type": "github",
69
69
  "url": "git+https://github.com/ofri-peretz/eslint.git"
70
+ },
71
+ "interlace": {
72
+ "surface": {
73
+ "kind": "language",
74
+ "note": "Project conventions over plain JS/TS. No external SDK is being analysed."
75
+ }
70
76
  }
71
77
  }
package/src/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.configs=exports.plugin=exports.rules=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");exports.rules={get"no-commented-code"(){return require("./rules/conventions/no-commented-code").noCommentedCode},get"expiring-todo-comments"(){return require("./rules/conventions/expiring-todo-comments").expiringTodoComments},get"prefer-code-point"(){return require("./rules/conventions/prefer-code-point").preferCodePoint},get"prefer-dom-node-text-content"(){return require("./rules/conventions/prefer-dom-node-text-content").preferDomNodeTextContent},get"no-console-spaces"(){return require("./rules/conventions/no-console-spaces").noConsoleSpaces},get"no-deprecated-api"(){return require("./rules/deprecation/no-deprecated-api").noDeprecatedApi},get"prefer-dependency-version-strategy"(){return require("./rules/conventions/prefer-dependency-version-strategy").preferDependencyVersionStrategy},get"filename-case"(){return require("./rules/conventions/filename-case").filenameCase},get"consistent-existence-index-check"(){return require("./rules/conventions/consistent-existence-index-check").consistentExistenceIndexCheck},get"no-json-schema-tags"(){return require("./rules/conventions/no-json-schema-tags").noJsonSchemaTags},get"require-data-testid"(){return require("./rules/conventions/require-data-testid").requireDataTestId},get"utm-taxonomy"(){return require("./rules/conventions/utm-taxonomy").utmTaxonomy},get"no-raw-cross-property-href"(){return require("./rules/conventions/no-raw-cross-property-href").noRawCrossPropertyHref},get"analytics-event-naming"(){return require("./rules/conventions/analytics-event-naming").analyticsEventNaming},get"no-magic-numbers"(){return require("./rules/conventions/no-magic-numbers").noMagicNumbers}};(0,eslint_devkit_1.withCanonicalDocsUrls)("plugin-conventions",exports.rules);exports.plugin={meta:{name:"eslint-plugin-conventions",version:"5.3.0"},rules:exports.rules};exports.configs={recommended:{plugins:{conventions:exports.plugin},rules:{"conventions/no-commented-code":"warn","conventions/expiring-todo-comments":"warn","conventions/no-deprecated-api":"warn","conventions/utm-taxonomy":"error","conventions/no-raw-cross-property-href":"error","conventions/analytics-event-naming":"error"}}};exports.default=exports.plugin;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.configs=exports.plugin=exports.rules=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");exports.rules={get"no-commented-code"(){return require("./rules/conventions/no-commented-code").noCommentedCode},get"expiring-todo-comments"(){return require("./rules/conventions/expiring-todo-comments").expiringTodoComments},get"prefer-code-point"(){return require("./rules/conventions/prefer-code-point").preferCodePoint},get"prefer-dom-node-text-content"(){return require("./rules/conventions/prefer-dom-node-text-content").preferDomNodeTextContent},get"no-console-spaces"(){return require("./rules/conventions/no-console-spaces").noConsoleSpaces},get"no-deprecated-api"(){return require("./rules/deprecation/no-deprecated-api").noDeprecatedApi},get"prefer-dependency-version-strategy"(){return require("./rules/conventions/prefer-dependency-version-strategy").preferDependencyVersionStrategy},get"filename-case"(){return require("./rules/conventions/filename-case").filenameCase},get"consistent-existence-index-check"(){return require("./rules/conventions/consistent-existence-index-check").consistentExistenceIndexCheck},get"no-json-schema-tags"(){return require("./rules/conventions/no-json-schema-tags").noJsonSchemaTags},get"require-data-testid"(){return require("./rules/conventions/require-data-testid").requireDataTestId},get"utm-taxonomy"(){return require("./rules/conventions/utm-taxonomy").utmTaxonomy},get"no-raw-cross-property-href"(){return require("./rules/conventions/no-raw-cross-property-href").noRawCrossPropertyHref},get"analytics-event-naming"(){return require("./rules/conventions/analytics-event-naming").analyticsEventNaming},get"no-magic-numbers"(){return require("./rules/conventions/no-magic-numbers").noMagicNumbers}};(0,eslint_devkit_1.withCanonicalDocsUrls)("plugin-conventions",exports.rules);exports.plugin={meta:{name:"eslint-plugin-conventions",version:"5.3.2"},rules:exports.rules};exports.configs={recommended:{plugins:{conventions:exports.plugin},rules:{"conventions/no-commented-code":"warn","conventions/expiring-todo-comments":"warn","conventions/no-deprecated-api":"warn","conventions/utm-taxonomy":"error","conventions/no-raw-cross-property-href":"error","conventions/analytics-event-naming":"error"}}};exports.default=exports.plugin;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.utmTaxonomy=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const eslint_devkit_2=require("@interlace/eslint-devkit");const VALID_UTM_SOURCES=new Set(["ofriperetz_dev","interlace","eslint_docs","serverless_docs","ds","storybook","devto","github","npm","x","linkedin","email"]);const VALID_UTM_MEDIUMS=new Set(["article","blog","docs","landing","social","email","referral","cli"]);const UTM_PARAM_RE=/[?&](utm_source|utm_medium)=([^&#]+)/g;exports.utmTaxonomy=(0,eslint_devkit_1.createRule)({name:"utm-taxonomy",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-conventions/docs/rules/utm-taxonomy.md",description:"Validate utm_source and utm_medium values against the fixed taxonomy in UTM_PHILOSOPHY.md"},fixable:void 0,hasSuggestions:false,messages:{invalidUtmSource:(0,eslint_devkit_2.formatLLMMessage)({icon:eslint_devkit_2.MessageIcons.WARNING,issueName:"Invalid utm_source",description:'utm_source="{{value}}" is not in the fixed taxonomy. Allowed: {{allowed}}',severity:"HIGH",fix:"Use one of the allowed values, or extend the taxonomy in UTM_PHILOSOPHY.md and this rule together.",documentationLink:"https://github.com/ofri-peretz/interlace/blob/main/docs/philosophies/UTM_PHILOSOPHY.md"}),invalidUtmMedium:(0,eslint_devkit_2.formatLLMMessage)({icon:eslint_devkit_2.MessageIcons.WARNING,issueName:"Invalid utm_medium",description:'utm_medium="{{value}}" is not in the fixed taxonomy. Allowed: {{allowed}}',severity:"HIGH",fix:"Use one of the allowed values, or extend the taxonomy in UTM_PHILOSOPHY.md and this rule together.",documentationLink:"https://github.com/ofri-peretz/interlace/blob/main/docs/philosophies/UTM_PHILOSOPHY.md"})},schema:[]},defaultOptions:[],create(context){function checkString(node,value){UTM_PARAM_RE.lastIndex=0;let match;while((match=UTM_PARAM_RE.exec(value))!==null){const[,key,raw]=match;const decoded=decodeURIComponent(raw);if(key==="utm_source"&&!VALID_UTM_SOURCES.has(decoded)){context.report({node,messageId:"invalidUtmSource",data:{value:decoded,allowed:[...VALID_UTM_SOURCES].join(", ")}})}else if(key==="utm_medium"&&!VALID_UTM_MEDIUMS.has(decoded)){context.report({node,messageId:"invalidUtmMedium",data:{value:decoded,allowed:[...VALID_UTM_MEDIUMS].join(", ")}})}}}return{Literal(node){if(typeof node.value==="string"&&node.value.includes("utm_")){checkString(node,node.value)}},TemplateLiteral(node){for(const quasi of node.quasis){if(quasi.value.cooked&&quasi.value.cooked.includes("utm_")){checkString(quasi,quasi.value.cooked)}}}}}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.utmTaxonomy=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const eslint_devkit_2=require("@interlace/eslint-devkit");const VALID_UTM_SOURCES=new Set(["ofriperetz_dev","interlace","eslint_docs","serverless_docs","ds","storybook","devto","github","npm","x","linkedin","email"]);const VALID_UTM_MEDIUMS=new Set(["article","blog","docs","landing","social","email","referral","cli"]);const UTM_PARAM_RE=/[?&](utm_source|utm_medium)=([^&#]+)/g;function safeDecode(value){try{return decodeURIComponent(value)}catch{return value}}exports.utmTaxonomy=(0,eslint_devkit_1.createRule)({name:"utm-taxonomy",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-conventions/docs/rules/utm-taxonomy.md",description:"Validate utm_source and utm_medium values against the fixed taxonomy in UTM_PHILOSOPHY.md"},fixable:void 0,hasSuggestions:false,messages:{invalidUtmSource:(0,eslint_devkit_2.formatLLMMessage)({icon:eslint_devkit_2.MessageIcons.WARNING,issueName:"Invalid utm_source",description:'utm_source="{{value}}" is not in the fixed taxonomy. Allowed: {{allowed}}',severity:"HIGH",fix:"Use one of the allowed values, or extend the taxonomy in UTM_PHILOSOPHY.md and this rule together.",documentationLink:"https://github.com/ofri-peretz/interlace/blob/main/docs/philosophies/UTM_PHILOSOPHY.md"}),invalidUtmMedium:(0,eslint_devkit_2.formatLLMMessage)({icon:eslint_devkit_2.MessageIcons.WARNING,issueName:"Invalid utm_medium",description:'utm_medium="{{value}}" is not in the fixed taxonomy. Allowed: {{allowed}}',severity:"HIGH",fix:"Use one of the allowed values, or extend the taxonomy in UTM_PHILOSOPHY.md and this rule together.",documentationLink:"https://github.com/ofri-peretz/interlace/blob/main/docs/philosophies/UTM_PHILOSOPHY.md"})},schema:[]},defaultOptions:[],create(context){function checkString(node,value){UTM_PARAM_RE.lastIndex=0;let match;while((match=UTM_PARAM_RE.exec(value))!==null){const[,key,raw]=match;const decoded=safeDecode(raw);if(key==="utm_source"&&!VALID_UTM_SOURCES.has(decoded)){context.report({node,messageId:"invalidUtmSource",data:{value:decoded,allowed:[...VALID_UTM_SOURCES].join(", ")}})}else if(key==="utm_medium"&&!VALID_UTM_MEDIUMS.has(decoded)){context.report({node,messageId:"invalidUtmMedium",data:{value:decoded,allowed:[...VALID_UTM_MEDIUMS].join(", ")}})}}}return{Literal(node){if(typeof node.value==="string"&&node.value.includes("utm_")){checkString(node,node.value)}},TemplateLiteral(node){for(const quasi of node.quasis){const text=quasi.value.cooked??quasi.value.raw;if(text.includes("utm_")){checkString(quasi,text)}}}}}});