@imranbarbhuiya/oxc-config 0.2.0 → 0.2.1

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.
@@ -331,6 +331,10 @@ const preferReadOnlyProps = defineRule({
331
331
  else checkType(resolved, seen);
332
332
  }
333
333
  return {
334
+ before() {
335
+ types.clear();
336
+ jsxFns.clear();
337
+ },
334
338
  TSTypeAliasDeclaration(node) {
335
339
  types.set(node.id.name, node.typeAnnotation);
336
340
  },
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","names":[],"sources":["../../src/plugins/react.ts"],"sourcesContent":["import { definePlugin, defineRule } from '@oxlint/plugins';\n\nimport type { ESTree } from '@oxlint/plugins';\n\nconst REL_TAGS = new Set(['a', 'area', 'form', 'link']);\n\nconst REL_VALUES = new Map<string, Set<string>>([\n\t['alternate', new Set(['link', 'area', 'a'])],\n\t['apple-touch-icon', new Set(['link'])],\n\t['apple-touch-startup-image', new Set(['link'])],\n\t['author', new Set(['link', 'area', 'a'])],\n\t['bookmark', new Set(['area', 'a'])],\n\t['canonical', new Set(['link'])],\n\t['dns-prefetch', new Set(['link'])],\n\t['external', new Set(['area', 'a', 'form'])],\n\t['help', new Set(['link', 'area', 'a', 'form'])],\n\t['icon', new Set(['link'])],\n\t['license', new Set(['link', 'area', 'a', 'form'])],\n\t['manifest', new Set(['link'])],\n\t['mask-icon', new Set(['link'])],\n\t['modulepreload', new Set(['link'])],\n\t['next', new Set(['link', 'area', 'a', 'form'])],\n\t['nofollow', new Set(['area', 'a', 'form'])],\n\t['noopener', new Set(['area', 'a', 'form'])],\n\t['noreferrer', new Set(['area', 'a', 'form'])],\n\t['opener', new Set(['area', 'a', 'form'])],\n\t['pingback', new Set(['link'])],\n\t['preconnect', new Set(['link'])],\n\t['prefetch', new Set(['link'])],\n\t['preload', new Set(['link'])],\n\t['prerender', new Set(['link'])],\n\t['prev', new Set(['link', 'area', 'a', 'form'])],\n\t['search', new Set(['link', 'area', 'a', 'form'])],\n\t['shortcut', new Set(['link'])],\n\t['shortcut icon', new Set(['link'])],\n\t['stylesheet', new Set(['link'])],\n\t['tag', new Set(['area', 'a'])],\n]);\n\nfunction isJsxSibling(node: ESTree.JSXChild) {\n\treturn node.type === 'JSXElement' || node.type === 'JSXExpressionContainer';\n}\n\nfunction isFunction(node: ESTree.Node): node is ESTree.Function | ESTree.ArrowFunctionExpression {\n\treturn (\n\t\tnode.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression'\n\t);\n}\n\nfunction attrName(attribute: ESTree.JSXAttribute) {\n\tif (attribute.name.type === 'JSXIdentifier') return attribute.name.name;\n\treturn `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n}\n\nfunction memberName(member: ESTree.TSPropertySignature) {\n\tif (member.key.type === 'Identifier') return member.key.name;\n\tif (member.key.type === 'Literal' && typeof member.key.value === 'string') return member.key.value;\n\treturn 'unknown';\n}\n\nfunction patternType(pattern: ESTree.Node): ESTree.TSType | undefined {\n\tif (!('typeAnnotation' in pattern)) return undefined;\n\tconst annotation = pattern.typeAnnotation;\n\tif (annotation === undefined || annotation === null || typeof annotation !== 'object') return undefined;\n\tif (!('type' in annotation) || annotation.type !== 'TSTypeAnnotation') return undefined;\n\treturn annotation.typeAnnotation;\n}\n\nfunction paramType(fn: ESTree.Function | ESTree.ArrowFunctionExpression) {\n\tif (fn.params.length === 0) return undefined;\n\tconst param = fn.params[0];\n\tif (param.type === 'TSParameterProperty') return patternType(param.parameter);\n\tif (param.type === 'RestElement') return undefined;\n\tif (param.type === 'AssignmentPattern') return patternType(param.left);\n\treturn patternType(param);\n}\n\nfunction unwrapType(type: ESTree.TSType): ESTree.TSType {\n\tlet current = type;\n\twhile (current.type === 'TSParenthesizedType') current = current.typeAnnotation;\n\treturn current;\n}\n\nfunction isReadonlyWrapper(type: ESTree.TSType) {\n\treturn type.type === 'TSTypeReference' && type.typeName.type === 'Identifier' && type.typeName.name === 'Readonly';\n}\n\nfunction enclosingFunction(node: ESTree.Node) {\n\tlet current: ESTree.Node | null | undefined = node.parent;\n\twhile (current) {\n\t\tif (isFunction(current)) return current;\n\t\tcurrent = current.parent;\n\t}\n\treturn undefined;\n}\n\nconst jsxNewline = defineRule({\n\tmeta: {\n\t\ttype: 'layout',\n\t\tdocs: {\n\t\t\tdescription: 'Prevent blank lines between adjacent JSX siblings',\n\t\t},\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\tprevent: 'JSX element should not start in a new line',\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\tfunction check(children: ESTree.JSXChild[]) {\n\t\t\tfor (let index = 0; index < children.length - 2; index++) {\n\t\t\t\tconst current = children[index];\n\t\t\t\tconst between = children[index + 1];\n\t\t\t\tconst next = children[index + 2];\n\t\t\t\tif (!isJsxSibling(current) || !isJsxSibling(next) || between.type !== 'JSXText') continue;\n\t\t\t\tif (!/\\n\\s*\\n/.test(between.value)) continue;\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: next,\n\t\t\t\t\tmessageId: 'prevent',\n\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\treturn fixer.replaceText(between, context.sourceCode.getText(between).replace(/\\n\\s*\\n/, '\\n'));\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tJSXElement(node) {\n\t\t\t\tcheck(node.children);\n\t\t\t},\n\t\t\tJSXFragment(node) {\n\t\t\t\tcheck(node.children);\n\t\t\t},\n\t\t};\n\t},\n});\n\nconst jsxSortProps = defineRule({\n\tmeta: {\n\t\ttype: 'layout',\n\t\tdocs: {\n\t\t\tdescription: 'Sort JSX props alphabetically',\n\t\t},\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\tsortPropsByAlpha: 'Props should be sorted alphabetically',\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\treturn {\n\t\t\tJSXOpeningElement(node) {\n\t\t\t\tlet group: ESTree.JSXAttribute[] = [];\n\t\t\t\tfunction flush() {\n\t\t\t\t\tif (group.length < 2) {\n\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst sorted = group.toSorted((left, right) => {\n\t\t\t\t\t\tconst leftName = attrName(left);\n\t\t\t\t\t\tconst rightName = attrName(right);\n\t\t\t\t\t\tif (leftName === rightName) return 0;\n\t\t\t\t\t\treturn leftName < rightName ? -1 : 1;\n\t\t\t\t\t});\n\t\t\t\t\tif (group.every((attribute, index) => attribute === sorted[index])) {\n\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst texts = sorted.map((attribute) => context.sourceCode.getText(attribute));\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: group[0],\n\t\t\t\t\t\tmessageId: 'sortPropsByAlpha',\n\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\treturn group.map((attribute, index) => fixer.replaceText(attribute, texts[index] ?? ''));\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tgroup = [];\n\t\t\t\t}\n\t\t\t\tfor (const attribute of node.attributes) {\n\t\t\t\t\tif (attribute.type === 'JSXSpreadAttribute') {\n\t\t\t\t\t\tflush();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tgroup.push(attribute);\n\t\t\t\t}\n\t\t\t\tflush();\n\t\t\t},\n\t\t};\n\t},\n});\n\nconst noInvalidHtmlAttribute = defineRule({\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow invalid HTML rel attribute values',\n\t\t},\n\t\tmessages: {\n\t\t\temptyIsMeaningless: 'An empty “rel” attribute is meaningless.',\n\t\t\tneverValid: '“{{value}}” is never a valid “rel” attribute value.',\n\t\t\tnotAlone: '“shortcut” must be directly followed by “icon”.',\n\t\t\tnotValidFor: '“{{value}}” is not a valid “rel” attribute value for <{{tag}}>.',\n\t\t\tonlyMeaningfulFor: 'The “rel” attribute only has meaning on the tags: \"<link>\", \"<a>\", \"<area>\", \"<form>\"',\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\treturn {\n\t\t\tJSXAttribute(node) {\n\t\t\t\tif (node.name.type !== 'JSXIdentifier' || node.name.name !== 'rel') return;\n\t\t\t\tif (node.parent.type !== 'JSXOpeningElement' || node.parent.name.type !== 'JSXIdentifier') return;\n\t\t\t\tconst tag = node.parent.name.name;\n\t\t\t\tif (tag !== tag.toLowerCase()) return;\n\t\t\t\tif (!REL_TAGS.has(tag)) {\n\t\t\t\t\tcontext.report({ node: node.name, messageId: 'onlyMeaningfulFor' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (node.value === null) {\n\t\t\t\t\tcontext.report({ node: node.name, messageId: 'emptyIsMeaningless' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet literal: ESTree.StringLiteral | undefined;\n\t\t\t\tif (node.value.type === 'Literal' && typeof node.value.value === 'string') literal = node.value;\n\t\t\t\tif (\n\t\t\t\t\tnode.value.type === 'JSXExpressionContainer' &&\n\t\t\t\t\tnode.value.expression.type === 'Literal' &&\n\t\t\t\t\ttypeof node.value.expression.value === 'string'\n\t\t\t\t) {\n\t\t\t\t\tliteral = node.value.expression;\n\t\t\t\t}\n\t\t\t\tif (literal === undefined) return;\n\t\t\t\tif (!literal.value.trim()) {\n\t\t\t\t\tcontext.report({ node: literal, messageId: 'emptyIsMeaningless' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst values = literal.value.trim().split(/\\s+/);\n\t\t\t\tfor (const value of values) {\n\t\t\t\t\tconst allowed = REL_VALUES.get(value);\n\t\t\t\t\tif (allowed === undefined) {\n\t\t\t\t\t\tcontext.report({ node: literal, messageId: 'neverValid', data: { value } });\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!allowed.has(tag)) {\n\t\t\t\t\t\tcontext.report({ node: literal, messageId: 'notValidFor', data: { value, tag } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (values.includes('shortcut') && !values.includes('icon')) {\n\t\t\t\t\tcontext.report({ node: literal, messageId: 'notAlone' });\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n});\n\nconst preferReadOnlyProps = defineRule({\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Require component props type members to be readonly',\n\t\t},\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\treadOnlyProp: \"Prop '{{name}}' should be read-only.\",\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\tconst types = new Map<string, ESTree.TSType | ESTree.TSInterfaceBody>();\n\t\tconst jsxFns = new Set<ESTree.Function | ESTree.ArrowFunctionExpression>();\n\t\tfunction checkMembers(members: ESTree.TSSignature[]) {\n\t\t\tfor (const member of members) {\n\t\t\t\tif (member.type !== 'TSPropertySignature' || member.readonly) continue;\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: member,\n\t\t\t\t\tmessageId: 'readOnlyProp',\n\t\t\t\t\tdata: { name: memberName(member) },\n\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\treturn fixer.insertTextBefore(member, 'readonly ');\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfunction checkType(type: ESTree.TSType, seen = new Set<string>()) {\n\t\t\tconst current = unwrapType(type);\n\t\t\tif (isReadonlyWrapper(current)) return;\n\t\t\tif (current.type === 'TSTypeLiteral') {\n\t\t\t\tcheckMembers(current.members);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (current.type === 'TSIntersectionType') {\n\t\t\t\tfor (const item of current.types) checkType(item, seen);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (current.type !== 'TSTypeReference' || current.typeName.type !== 'Identifier') return;\n\t\t\tconst name = current.typeName.name;\n\t\t\tif (seen.has(name)) return;\n\t\t\tseen.add(name);\n\t\t\tconst resolved = types.get(name);\n\t\t\tif (resolved === undefined) return;\n\t\t\tif (resolved.type === 'TSInterfaceBody') checkMembers(resolved.body);\n\t\t\telse checkType(resolved, seen);\n\t\t}\n\t\treturn {\n\t\t\tTSTypeAliasDeclaration(node) {\n\t\t\t\ttypes.set(node.id.name, node.typeAnnotation);\n\t\t\t},\n\t\t\tTSInterfaceDeclaration(node) {\n\t\t\t\ttypes.set(node.id.name, node.body);\n\t\t\t},\n\t\t\tJSXElement(node) {\n\t\t\t\tconst fn = enclosingFunction(node);\n\t\t\t\tif (fn) jsxFns.add(fn);\n\t\t\t},\n\t\t\tJSXFragment(node) {\n\t\t\t\tconst fn = enclosingFunction(node);\n\t\t\t\tif (fn) jsxFns.add(fn);\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tfor (const fn of jsxFns) {\n\t\t\t\t\tconst type = paramType(fn);\n\t\t\t\t\tif (type) checkType(type);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n});\n\nexport default definePlugin({\n\tmeta: {\n\t\tname: 'eslint-plugin-mahir-react',\n\t},\n\trules: {\n\t\t'jsx-newline': jsxNewline,\n\t\t'jsx-sort-props': jsxSortProps,\n\t\t'no-invalid-html-attribute': noInvalidHtmlAttribute,\n\t\t'prefer-read-only-props': preferReadOnlyProps,\n\t},\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"react.js","names":[],"sources":["../../src/plugins/react.ts"],"sourcesContent":["import { definePlugin, defineRule } from '@oxlint/plugins';\n\nimport type { ESTree } from '@oxlint/plugins';\n\nconst REL_TAGS = new Set(['a', 'area', 'form', 'link']);\n\nconst REL_VALUES = new Map<string, Set<string>>([\n\t['alternate', new Set(['link', 'area', 'a'])],\n\t['apple-touch-icon', new Set(['link'])],\n\t['apple-touch-startup-image', new Set(['link'])],\n\t['author', new Set(['link', 'area', 'a'])],\n\t['bookmark', new Set(['area', 'a'])],\n\t['canonical', new Set(['link'])],\n\t['dns-prefetch', new Set(['link'])],\n\t['external', new Set(['area', 'a', 'form'])],\n\t['help', new Set(['link', 'area', 'a', 'form'])],\n\t['icon', new Set(['link'])],\n\t['license', new Set(['link', 'area', 'a', 'form'])],\n\t['manifest', new Set(['link'])],\n\t['mask-icon', new Set(['link'])],\n\t['modulepreload', new Set(['link'])],\n\t['next', new Set(['link', 'area', 'a', 'form'])],\n\t['nofollow', new Set(['area', 'a', 'form'])],\n\t['noopener', new Set(['area', 'a', 'form'])],\n\t['noreferrer', new Set(['area', 'a', 'form'])],\n\t['opener', new Set(['area', 'a', 'form'])],\n\t['pingback', new Set(['link'])],\n\t['preconnect', new Set(['link'])],\n\t['prefetch', new Set(['link'])],\n\t['preload', new Set(['link'])],\n\t['prerender', new Set(['link'])],\n\t['prev', new Set(['link', 'area', 'a', 'form'])],\n\t['search', new Set(['link', 'area', 'a', 'form'])],\n\t['shortcut', new Set(['link'])],\n\t['shortcut icon', new Set(['link'])],\n\t['stylesheet', new Set(['link'])],\n\t['tag', new Set(['area', 'a'])],\n]);\n\nfunction isJsxSibling(node: ESTree.JSXChild) {\n\treturn node.type === 'JSXElement' || node.type === 'JSXExpressionContainer';\n}\n\nfunction isFunction(node: ESTree.Node): node is ESTree.Function | ESTree.ArrowFunctionExpression {\n\treturn (\n\t\tnode.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression'\n\t);\n}\n\nfunction attrName(attribute: ESTree.JSXAttribute) {\n\tif (attribute.name.type === 'JSXIdentifier') return attribute.name.name;\n\treturn `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n}\n\nfunction memberName(member: ESTree.TSPropertySignature) {\n\tif (member.key.type === 'Identifier') return member.key.name;\n\tif (member.key.type === 'Literal' && typeof member.key.value === 'string') return member.key.value;\n\treturn 'unknown';\n}\n\nfunction patternType(pattern: ESTree.Node): ESTree.TSType | undefined {\n\tif (!('typeAnnotation' in pattern)) return undefined;\n\tconst annotation = pattern.typeAnnotation;\n\tif (annotation === undefined || annotation === null || typeof annotation !== 'object') return undefined;\n\tif (!('type' in annotation) || annotation.type !== 'TSTypeAnnotation') return undefined;\n\treturn annotation.typeAnnotation;\n}\n\nfunction paramType(fn: ESTree.Function | ESTree.ArrowFunctionExpression) {\n\tif (fn.params.length === 0) return undefined;\n\tconst param = fn.params[0];\n\tif (param.type === 'TSParameterProperty') return patternType(param.parameter);\n\tif (param.type === 'RestElement') return undefined;\n\tif (param.type === 'AssignmentPattern') return patternType(param.left);\n\treturn patternType(param);\n}\n\nfunction unwrapType(type: ESTree.TSType): ESTree.TSType {\n\tlet current = type;\n\twhile (current.type === 'TSParenthesizedType') current = current.typeAnnotation;\n\treturn current;\n}\n\nfunction isReadonlyWrapper(type: ESTree.TSType) {\n\treturn type.type === 'TSTypeReference' && type.typeName.type === 'Identifier' && type.typeName.name === 'Readonly';\n}\n\nfunction enclosingFunction(node: ESTree.Node) {\n\tlet current: ESTree.Node | null | undefined = node.parent;\n\twhile (current) {\n\t\tif (isFunction(current)) return current;\n\t\tcurrent = current.parent;\n\t}\n\treturn undefined;\n}\n\nconst jsxNewline = defineRule({\n\tmeta: {\n\t\ttype: 'layout',\n\t\tdocs: {\n\t\t\tdescription: 'Prevent blank lines between adjacent JSX siblings',\n\t\t},\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\tprevent: 'JSX element should not start in a new line',\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\tfunction check(children: ESTree.JSXChild[]) {\n\t\t\tfor (let index = 0; index < children.length - 2; index++) {\n\t\t\t\tconst current = children[index];\n\t\t\t\tconst between = children[index + 1];\n\t\t\t\tconst next = children[index + 2];\n\t\t\t\tif (!isJsxSibling(current) || !isJsxSibling(next) || between.type !== 'JSXText') continue;\n\t\t\t\tif (!/\\n\\s*\\n/.test(between.value)) continue;\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: next,\n\t\t\t\t\tmessageId: 'prevent',\n\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\treturn fixer.replaceText(between, context.sourceCode.getText(between).replace(/\\n\\s*\\n/, '\\n'));\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tJSXElement(node) {\n\t\t\t\tcheck(node.children);\n\t\t\t},\n\t\t\tJSXFragment(node) {\n\t\t\t\tcheck(node.children);\n\t\t\t},\n\t\t};\n\t},\n});\n\nconst jsxSortProps = defineRule({\n\tmeta: {\n\t\ttype: 'layout',\n\t\tdocs: {\n\t\t\tdescription: 'Sort JSX props alphabetically',\n\t\t},\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\tsortPropsByAlpha: 'Props should be sorted alphabetically',\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\treturn {\n\t\t\tJSXOpeningElement(node) {\n\t\t\t\tlet group: ESTree.JSXAttribute[] = [];\n\t\t\t\tfunction flush() {\n\t\t\t\t\tif (group.length < 2) {\n\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst sorted = group.toSorted((left, right) => {\n\t\t\t\t\t\tconst leftName = attrName(left);\n\t\t\t\t\t\tconst rightName = attrName(right);\n\t\t\t\t\t\tif (leftName === rightName) return 0;\n\t\t\t\t\t\treturn leftName < rightName ? -1 : 1;\n\t\t\t\t\t});\n\t\t\t\t\tif (group.every((attribute, index) => attribute === sorted[index])) {\n\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst texts = sorted.map((attribute) => context.sourceCode.getText(attribute));\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: group[0],\n\t\t\t\t\t\tmessageId: 'sortPropsByAlpha',\n\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\treturn group.map((attribute, index) => fixer.replaceText(attribute, texts[index] ?? ''));\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tgroup = [];\n\t\t\t\t}\n\t\t\t\tfor (const attribute of node.attributes) {\n\t\t\t\t\tif (attribute.type === 'JSXSpreadAttribute') {\n\t\t\t\t\t\tflush();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tgroup.push(attribute);\n\t\t\t\t}\n\t\t\t\tflush();\n\t\t\t},\n\t\t};\n\t},\n});\n\nconst noInvalidHtmlAttribute = defineRule({\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow invalid HTML rel attribute values',\n\t\t},\n\t\tmessages: {\n\t\t\temptyIsMeaningless: 'An empty “rel” attribute is meaningless.',\n\t\t\tneverValid: '“{{value}}” is never a valid “rel” attribute value.',\n\t\t\tnotAlone: '“shortcut” must be directly followed by “icon”.',\n\t\t\tnotValidFor: '“{{value}}” is not a valid “rel” attribute value for <{{tag}}>.',\n\t\t\tonlyMeaningfulFor: 'The “rel” attribute only has meaning on the tags: \"<link>\", \"<a>\", \"<area>\", \"<form>\"',\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\treturn {\n\t\t\tJSXAttribute(node) {\n\t\t\t\tif (node.name.type !== 'JSXIdentifier' || node.name.name !== 'rel') return;\n\t\t\t\tif (node.parent.type !== 'JSXOpeningElement' || node.parent.name.type !== 'JSXIdentifier') return;\n\t\t\t\tconst tag = node.parent.name.name;\n\t\t\t\tif (tag !== tag.toLowerCase()) return;\n\t\t\t\tif (!REL_TAGS.has(tag)) {\n\t\t\t\t\tcontext.report({ node: node.name, messageId: 'onlyMeaningfulFor' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (node.value === null) {\n\t\t\t\t\tcontext.report({ node: node.name, messageId: 'emptyIsMeaningless' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet literal: ESTree.StringLiteral | undefined;\n\t\t\t\tif (node.value.type === 'Literal' && typeof node.value.value === 'string') literal = node.value;\n\t\t\t\tif (\n\t\t\t\t\tnode.value.type === 'JSXExpressionContainer' &&\n\t\t\t\t\tnode.value.expression.type === 'Literal' &&\n\t\t\t\t\ttypeof node.value.expression.value === 'string'\n\t\t\t\t) {\n\t\t\t\t\tliteral = node.value.expression;\n\t\t\t\t}\n\t\t\t\tif (literal === undefined) return;\n\t\t\t\tif (!literal.value.trim()) {\n\t\t\t\t\tcontext.report({ node: literal, messageId: 'emptyIsMeaningless' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst values = literal.value.trim().split(/\\s+/);\n\t\t\t\tfor (const value of values) {\n\t\t\t\t\tconst allowed = REL_VALUES.get(value);\n\t\t\t\t\tif (allowed === undefined) {\n\t\t\t\t\t\tcontext.report({ node: literal, messageId: 'neverValid', data: { value } });\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!allowed.has(tag)) {\n\t\t\t\t\t\tcontext.report({ node: literal, messageId: 'notValidFor', data: { value, tag } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (values.includes('shortcut') && !values.includes('icon')) {\n\t\t\t\t\tcontext.report({ node: literal, messageId: 'notAlone' });\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n});\n\nconst preferReadOnlyProps = defineRule({\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Require component props type members to be readonly',\n\t\t},\n\t\tfixable: 'code',\n\t\tmessages: {\n\t\t\treadOnlyProp: \"Prop '{{name}}' should be read-only.\",\n\t\t},\n\t},\n\tcreateOnce(context) {\n\t\tconst types = new Map<string, ESTree.TSType | ESTree.TSInterfaceBody>();\n\t\tconst jsxFns = new Set<ESTree.Function | ESTree.ArrowFunctionExpression>();\n\t\tfunction checkMembers(members: ESTree.TSSignature[]) {\n\t\t\tfor (const member of members) {\n\t\t\t\tif (member.type !== 'TSPropertySignature' || member.readonly) continue;\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: member,\n\t\t\t\t\tmessageId: 'readOnlyProp',\n\t\t\t\t\tdata: { name: memberName(member) },\n\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\treturn fixer.insertTextBefore(member, 'readonly ');\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfunction checkType(type: ESTree.TSType, seen = new Set<string>()) {\n\t\t\tconst current = unwrapType(type);\n\t\t\tif (isReadonlyWrapper(current)) return;\n\t\t\tif (current.type === 'TSTypeLiteral') {\n\t\t\t\tcheckMembers(current.members);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (current.type === 'TSIntersectionType') {\n\t\t\t\tfor (const item of current.types) checkType(item, seen);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (current.type !== 'TSTypeReference' || current.typeName.type !== 'Identifier') return;\n\t\t\tconst name = current.typeName.name;\n\t\t\tif (seen.has(name)) return;\n\t\t\tseen.add(name);\n\t\t\tconst resolved = types.get(name);\n\t\t\tif (resolved === undefined) return;\n\t\t\tif (resolved.type === 'TSInterfaceBody') checkMembers(resolved.body);\n\t\t\telse checkType(resolved, seen);\n\t\t}\n\t\treturn {\n\t\t\tbefore() {\n\t\t\t\ttypes.clear();\n\t\t\t\tjsxFns.clear();\n\t\t\t},\n\t\t\tTSTypeAliasDeclaration(node) {\n\t\t\t\ttypes.set(node.id.name, node.typeAnnotation);\n\t\t\t},\n\t\t\tTSInterfaceDeclaration(node) {\n\t\t\t\ttypes.set(node.id.name, node.body);\n\t\t\t},\n\t\t\tJSXElement(node) {\n\t\t\t\tconst fn = enclosingFunction(node);\n\t\t\t\tif (fn) jsxFns.add(fn);\n\t\t\t},\n\t\t\tJSXFragment(node) {\n\t\t\t\tconst fn = enclosingFunction(node);\n\t\t\t\tif (fn) jsxFns.add(fn);\n\t\t\t},\n\t\t\t'Program:exit'() {\n\t\t\t\tfor (const fn of jsxFns) {\n\t\t\t\t\tconst type = paramType(fn);\n\t\t\t\t\tif (type) checkType(type);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n});\n\nexport default definePlugin({\n\tmeta: {\n\t\tname: 'eslint-plugin-mahir-react',\n\t},\n\trules: {\n\t\t'jsx-newline': jsxNewline,\n\t\t'jsx-sort-props': jsxSortProps,\n\t\t'no-invalid-html-attribute': noInvalidHtmlAttribute,\n\t\t'prefer-read-only-props': preferReadOnlyProps,\n\t},\n});\n"],"mappings":";;;AAIA,MAAM,2BAAW,IAAI,IAAI;CAAC;CAAK;CAAQ;CAAQ;AAAM,CAAC;AAEtD,MAAM,6BAAa,IAAI,IAAyB;CAC/C,CAAC,6BAAa,IAAI,IAAI;EAAC;EAAQ;EAAQ;CAAG,CAAC,CAAC;CAC5C,CAAC,oCAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CACtC,CAAC,6CAA6B,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC/C,CAAC,0BAAU,IAAI,IAAI;EAAC;EAAQ;EAAQ;CAAG,CAAC,CAAC;CACzC,CAAC,4BAAY,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;CACnC,CAAC,6BAAa,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC,gCAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC,4BAAY,IAAI,IAAI;EAAC;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC3C,CAAC,wBAAQ,IAAI,IAAI;EAAC;EAAQ;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC/C,CAAC,wBAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC1B,CAAC,2BAAW,IAAI,IAAI;EAAC;EAAQ;EAAQ;EAAK;CAAM,CAAC,CAAC;CAClD,CAAC,4BAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC,6BAAa,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC,iCAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC,wBAAQ,IAAI,IAAI;EAAC;EAAQ;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC/C,CAAC,4BAAY,IAAI,IAAI;EAAC;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC3C,CAAC,4BAAY,IAAI,IAAI;EAAC;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC3C,CAAC,8BAAc,IAAI,IAAI;EAAC;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC7C,CAAC,0BAAU,IAAI,IAAI;EAAC;EAAQ;EAAK;CAAM,CAAC,CAAC;CACzC,CAAC,4BAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC,8BAAc,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC,4BAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC,2BAAW,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,6BAAa,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC,wBAAQ,IAAI,IAAI;EAAC;EAAQ;EAAQ;EAAK;CAAM,CAAC,CAAC;CAC/C,CAAC,0BAAU,IAAI,IAAI;EAAC;EAAQ;EAAQ;EAAK;CAAM,CAAC,CAAC;CACjD,CAAC,4BAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC,iCAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC,8BAAc,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC,uBAAO,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,MAAuB;CAC5C,OAAO,KAAK,SAAS,gBAAgB,KAAK,SAAS;AACpD;AAEA,SAAS,WAAW,MAA6E;CAChG,OACC,KAAK,SAAS,yBAAyB,KAAK,SAAS,wBAAwB,KAAK,SAAS;AAE7F;AAEA,SAAS,SAAS,WAAgC;CACjD,IAAI,UAAU,KAAK,SAAS,iBAAiB,OAAO,UAAU,KAAK;CACnE,OAAO,GAAG,UAAU,KAAK,UAAU,KAAK,GAAG,UAAU,KAAK,KAAK;AAChE;AAEA,SAAS,WAAW,QAAoC;CACvD,IAAI,OAAO,IAAI,SAAS,cAAc,OAAO,OAAO,IAAI;CACxD,IAAI,OAAO,IAAI,SAAS,aAAa,OAAO,OAAO,IAAI,UAAU,UAAU,OAAO,OAAO,IAAI;CAC7F,OAAO;AACR;AAEA,SAAS,YAAY,SAAiD;CACrE,IAAI,EAAE,oBAAoB,UAAU,OAAO;CAC3C,MAAM,aAAa,QAAQ;CAC3B,IAAI,eAAe,UAAa,eAAe,QAAQ,OAAO,eAAe,UAAU,OAAO;CAC9F,IAAI,EAAE,UAAU,eAAe,WAAW,SAAS,oBAAoB,OAAO;CAC9E,OAAO,WAAW;AACnB;AAEA,SAAS,UAAU,IAAsD;CACxE,IAAI,GAAG,OAAO,WAAW,GAAG,OAAO;CACnC,MAAM,QAAQ,GAAG,OAAO;CACxB,IAAI,MAAM,SAAS,uBAAuB,OAAO,YAAY,MAAM,SAAS;CAC5E,IAAI,MAAM,SAAS,eAAe,OAAO;CACzC,IAAI,MAAM,SAAS,qBAAqB,OAAO,YAAY,MAAM,IAAI;CACrE,OAAO,YAAY,KAAK;AACzB;AAEA,SAAS,WAAW,MAAoC;CACvD,IAAI,UAAU;CACd,OAAO,QAAQ,SAAS,uBAAuB,UAAU,QAAQ;CACjE,OAAO;AACR;AAEA,SAAS,kBAAkB,MAAqB;CAC/C,OAAO,KAAK,SAAS,qBAAqB,KAAK,SAAS,SAAS,gBAAgB,KAAK,SAAS,SAAS;AACzG;AAEA,SAAS,kBAAkB,MAAmB;CAC7C,IAAI,UAA0C,KAAK;CACnD,OAAO,SAAS;EACf,IAAI,WAAW,OAAO,GAAG,OAAO;EAChC,UAAU,QAAQ;CACnB;AAED;AAEA,MAAM,aAAa,WAAW;CAC7B,MAAM;EACL,MAAM;EACN,MAAM,EACL,aAAa,oDACd;EACA,SAAS;EACT,UAAU,EACT,SAAS,6CACV;CACD;CACA,WAAW,SAAS;EACnB,SAAS,MAAM,UAA6B;GAC3C,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,SAAS,GAAG,SAAS;IACzD,MAAM,UAAU,SAAS;IACzB,MAAM,UAAU,SAAS,QAAQ;IACjC,MAAM,OAAO,SAAS,QAAQ;IAC9B,IAAI,CAAC,aAAa,OAAO,KAAK,CAAC,aAAa,IAAI,KAAK,QAAQ,SAAS,WAAW;IACjF,IAAI,CAAC,UAAU,KAAK,QAAQ,KAAK,GAAG;IACpC,QAAQ,OAAO;KACd,MAAM;KACN,WAAW;KACX,IAAI,OAAO;MACV,OAAO,MAAM,YAAY,SAAS,QAAQ,WAAW,QAAQ,OAAO,CAAC,CAAC,QAAQ,WAAW,IAAI,CAAC;KAC/F;IACD,CAAC;GACF;EACD;EACA,OAAO;GACN,WAAW,MAAM;IAChB,MAAM,KAAK,QAAQ;GACpB;GACA,YAAY,MAAM;IACjB,MAAM,KAAK,QAAQ;GACpB;EACD;CACD;AACD,CAAC;AAED,MAAM,eAAe,WAAW;CAC/B,MAAM;EACL,MAAM;EACN,MAAM,EACL,aAAa,gCACd;EACA,SAAS;EACT,UAAU,EACT,kBAAkB,wCACnB;CACD;CACA,WAAW,SAAS;EACnB,OAAO,EACN,kBAAkB,MAAM;GACvB,IAAI,QAA+B,CAAC;GACpC,SAAS,QAAQ;IAChB,IAAI,MAAM,SAAS,GAAG;KACrB,QAAQ,CAAC;KACT;IACD;IACA,MAAM,SAAS,MAAM,UAAU,MAAM,UAAU;KAC9C,MAAM,WAAW,SAAS,IAAI;KAC9B,MAAM,YAAY,SAAS,KAAK;KAChC,IAAI,aAAa,WAAW,OAAO;KACnC,OAAO,WAAW,YAAY,KAAK;IACpC,CAAC;IACD,IAAI,MAAM,OAAO,WAAW,UAAU,cAAc,OAAO,MAAM,GAAG;KACnE,QAAQ,CAAC;KACT;IACD;IACA,MAAM,QAAQ,OAAO,KAAK,cAAc,QAAQ,WAAW,QAAQ,SAAS,CAAC;IAC7E,QAAQ,OAAO;KACd,MAAM,MAAM;KACZ,WAAW;KACX,IAAI,OAAO;MACV,OAAO,MAAM,KAAK,WAAW,UAAU,MAAM,YAAY,WAAW,MAAM,UAAU,EAAE,CAAC;KACxF;IACD,CAAC;IACD,QAAQ,CAAC;GACV;GACA,KAAK,MAAM,aAAa,KAAK,YAAY;IACxC,IAAI,UAAU,SAAS,sBAAsB;KAC5C,MAAM;KACN;IACD;IACA,MAAM,KAAK,SAAS;GACrB;GACA,MAAM;EACP,EACD;CACD;AACD,CAAC;AAED,MAAM,yBAAyB,WAAW;CACzC,MAAM;EACL,MAAM;EACN,MAAM,EACL,aAAa,6CACd;EACA,UAAU;GACT,oBAAoB;GACpB,YAAY;GACZ,UAAU;GACV,aAAa;GACb,mBAAmB;EACpB;CACD;CACA,WAAW,SAAS;EACnB,OAAO,EACN,aAAa,MAAM;GAClB,IAAI,KAAK,KAAK,SAAS,mBAAmB,KAAK,KAAK,SAAS,OAAO;GACpE,IAAI,KAAK,OAAO,SAAS,uBAAuB,KAAK,OAAO,KAAK,SAAS,iBAAiB;GAC3F,MAAM,MAAM,KAAK,OAAO,KAAK;GAC7B,IAAI,QAAQ,IAAI,YAAY,GAAG;GAC/B,IAAI,CAAC,SAAS,IAAI,GAAG,GAAG;IACvB,QAAQ,OAAO;KAAE,MAAM,KAAK;KAAM,WAAW;IAAoB,CAAC;IAClE;GACD;GACA,IAAI,KAAK,UAAU,MAAM;IACxB,QAAQ,OAAO;KAAE,MAAM,KAAK;KAAM,WAAW;IAAqB,CAAC;IACnE;GACD;GACA,IAAI;GACJ,IAAI,KAAK,MAAM,SAAS,aAAa,OAAO,KAAK,MAAM,UAAU,UAAU,UAAU,KAAK;GAC1F,IACC,KAAK,MAAM,SAAS,4BACpB,KAAK,MAAM,WAAW,SAAS,aAC/B,OAAO,KAAK,MAAM,WAAW,UAAU,UAEvC,UAAU,KAAK,MAAM;GAEtB,IAAI,YAAY,QAAW;GAC3B,IAAI,CAAC,QAAQ,MAAM,KAAK,GAAG;IAC1B,QAAQ,OAAO;KAAE,MAAM;KAAS,WAAW;IAAqB,CAAC;IACjE;GACD;GACA,MAAM,SAAS,QAAQ,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK;GAC/C,KAAK,MAAM,SAAS,QAAQ;IAC3B,MAAM,UAAU,WAAW,IAAI,KAAK;IACpC,IAAI,YAAY,QAAW;KAC1B,QAAQ,OAAO;MAAE,MAAM;MAAS,WAAW;MAAc,MAAM,EAAE,MAAM;KAAE,CAAC;KAC1E;IACD;IACA,IAAI,CAAC,QAAQ,IAAI,GAAG,GACnB,QAAQ,OAAO;KAAE,MAAM;KAAS,WAAW;KAAe,MAAM;MAAE;MAAO;KAAI;IAAE,CAAC;GAElF;GACA,IAAI,OAAO,SAAS,UAAU,KAAK,CAAC,OAAO,SAAS,MAAM,GACzD,QAAQ,OAAO;IAAE,MAAM;IAAS,WAAW;GAAW,CAAC;EAEzD,EACD;CACD;AACD,CAAC;AAED,MAAM,sBAAsB,WAAW;CACtC,MAAM;EACL,MAAM;EACN,MAAM,EACL,aAAa,sDACd;EACA,SAAS;EACT,UAAU,EACT,cAAc,uCACf;CACD;CACA,WAAW,SAAS;EACnB,MAAM,wBAAQ,IAAI,IAAoD;EACtE,MAAM,yBAAS,IAAI,IAAsD;EACzE,SAAS,aAAa,SAA+B;GACpD,KAAK,MAAM,UAAU,SAAS;IAC7B,IAAI,OAAO,SAAS,yBAAyB,OAAO,UAAU;IAC9D,QAAQ,OAAO;KACd,MAAM;KACN,WAAW;KACX,MAAM,EAAE,MAAM,WAAW,MAAM,EAAE;KACjC,IAAI,OAAO;MACV,OAAO,MAAM,iBAAiB,QAAQ,WAAW;KAClD;IACD,CAAC;GACF;EACD;EACA,SAAS,UAAU,MAAqB,uBAAO,IAAI,IAAY,GAAG;GACjE,MAAM,UAAU,WAAW,IAAI;GAC/B,IAAI,kBAAkB,OAAO,GAAG;GAChC,IAAI,QAAQ,SAAS,iBAAiB;IACrC,aAAa,QAAQ,OAAO;IAC5B;GACD;GACA,IAAI,QAAQ,SAAS,sBAAsB;IAC1C,KAAK,MAAM,QAAQ,QAAQ,OAAO,UAAU,MAAM,IAAI;IACtD;GACD;GACA,IAAI,QAAQ,SAAS,qBAAqB,QAAQ,SAAS,SAAS,cAAc;GAClF,MAAM,OAAO,QAAQ,SAAS;GAC9B,IAAI,KAAK,IAAI,IAAI,GAAG;GACpB,KAAK,IAAI,IAAI;GACb,MAAM,WAAW,MAAM,IAAI,IAAI;GAC/B,IAAI,aAAa,QAAW;GAC5B,IAAI,SAAS,SAAS,mBAAmB,aAAa,SAAS,IAAI;QAC9D,UAAU,UAAU,IAAI;EAC9B;EACA,OAAO;GACN,SAAS;IACR,MAAM,MAAM;IACZ,OAAO,MAAM;GACd;GACA,uBAAuB,MAAM;IAC5B,MAAM,IAAI,KAAK,GAAG,MAAM,KAAK,cAAc;GAC5C;GACA,uBAAuB,MAAM;IAC5B,MAAM,IAAI,KAAK,GAAG,MAAM,KAAK,IAAI;GAClC;GACA,WAAW,MAAM;IAChB,MAAM,KAAK,kBAAkB,IAAI;IACjC,IAAI,IAAI,OAAO,IAAI,EAAE;GACtB;GACA,YAAY,MAAM;IACjB,MAAM,KAAK,kBAAkB,IAAI;IACjC,IAAI,IAAI,OAAO,IAAI,EAAE;GACtB;GACA,iBAAiB;IAChB,KAAK,MAAM,MAAM,QAAQ;KACxB,MAAM,OAAO,UAAU,EAAE;KACzB,IAAI,MAAM,UAAU,IAAI;IACzB;GACD;EACD;CACD;AACD,CAAC;AAED,oBAAe,aAAa;CAC3B,MAAM,EACL,MAAM,4BACP;CACA,OAAO;EACN,eAAe;EACf,kBAAkB;EAClB,6BAA6B;EAC7B,0BAA0B;CAC3B;AACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imranbarbhuiya/oxc-config",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Shared Oxlint and Oxfmt configs for JavaScript and TypeScript projects",
5
5
  "keywords": [
6
6
  "config",