@memberjunction/react-linter 0.0.1 → 5.38.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/dist/component-linter.d.ts +77 -0
- package/dist/component-linter.d.ts.map +1 -0
- package/dist/component-linter.js +1206 -0
- package/dist/component-linter.js.map +1 -0
- package/dist/control-flow-analyzer.d.ts +184 -0
- package/dist/control-flow-analyzer.d.ts.map +1 -0
- package/dist/control-flow-analyzer.js +798 -0
- package/dist/control-flow-analyzer.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/library-lint-cache.d.ts +50 -0
- package/dist/library-lint-cache.d.ts.map +1 -0
- package/dist/library-lint-cache.js +173 -0
- package/dist/library-lint-cache.js.map +1 -0
- package/dist/lint-rule.d.ts +70 -0
- package/dist/lint-rule.d.ts.map +1 -0
- package/dist/lint-rule.js +30 -0
- package/dist/lint-rule.js.map +1 -0
- package/dist/lint-utils.d.ts +131 -0
- package/dist/lint-utils.d.ts.map +1 -0
- package/dist/lint-utils.js +358 -0
- package/dist/lint-utils.js.map +1 -0
- package/dist/linter-options.d.ts +51 -0
- package/dist/linter-options.d.ts.map +1 -0
- package/dist/linter-options.js +2 -0
- package/dist/linter-options.js.map +1 -0
- package/dist/prop-value-extractor.d.ts +147 -0
- package/dist/prop-value-extractor.d.ts.map +1 -0
- package/dist/prop-value-extractor.js +472 -0
- package/dist/prop-value-extractor.js.map +1 -0
- package/dist/runtime-rules/ai-tools-availability-check.d.ts +9 -0
- package/dist/runtime-rules/ai-tools-availability-check.d.ts.map +1 -0
- package/dist/runtime-rules/ai-tools-availability-check.js +223 -0
- package/dist/runtime-rules/ai-tools-availability-check.js.map +1 -0
- package/dist/runtime-rules/callback-event-validation.d.ts +22 -0
- package/dist/runtime-rules/callback-event-validation.d.ts.map +1 -0
- package/dist/runtime-rules/callback-event-validation.js +561 -0
- package/dist/runtime-rules/callback-event-validation.js.map +1 -0
- package/dist/runtime-rules/chart-field-validation.d.ts +10 -0
- package/dist/runtime-rules/chart-field-validation.d.ts.map +1 -0
- package/dist/runtime-rules/chart-field-validation.js +270 -0
- package/dist/runtime-rules/chart-field-validation.js.map +1 -0
- package/dist/runtime-rules/child-component-prop-validation.d.ts +11 -0
- package/dist/runtime-rules/child-component-prop-validation.d.ts.map +1 -0
- package/dist/runtime-rules/child-component-prop-validation.js +443 -0
- package/dist/runtime-rules/child-component-prop-validation.js.map +1 -0
- package/dist/runtime-rules/component-name-mismatch.d.ts +19 -0
- package/dist/runtime-rules/component-name-mismatch.d.ts.map +1 -0
- package/dist/runtime-rules/component-name-mismatch.js +82 -0
- package/dist/runtime-rules/component-name-mismatch.js.map +1 -0
- package/dist/runtime-rules/component-not-in-dependencies.d.ts +20 -0
- package/dist/runtime-rules/component-not-in-dependencies.d.ts.map +1 -0
- package/dist/runtime-rules/component-not-in-dependencies.js +92 -0
- package/dist/runtime-rules/component-not-in-dependencies.js.map +1 -0
- package/dist/runtime-rules/component-props-validation.d.ts +25 -0
- package/dist/runtime-rules/component-props-validation.d.ts.map +1 -0
- package/dist/runtime-rules/component-props-validation.js +228 -0
- package/dist/runtime-rules/component-props-validation.js.map +1 -0
- package/dist/runtime-rules/component-usage-without-destructuring.d.ts +20 -0
- package/dist/runtime-rules/component-usage-without-destructuring.d.ts.map +1 -0
- package/dist/runtime-rules/component-usage-without-destructuring.js +124 -0
- package/dist/runtime-rules/component-usage-without-destructuring.js.map +1 -0
- package/dist/runtime-rules/data-result-validation.d.ts +9 -0
- package/dist/runtime-rules/data-result-validation.d.ts.map +1 -0
- package/dist/runtime-rules/data-result-validation.js +763 -0
- package/dist/runtime-rules/data-result-validation.js.map +1 -0
- package/dist/runtime-rules/datagrid-field-validation.d.ts +10 -0
- package/dist/runtime-rules/datagrid-field-validation.d.ts.map +1 -0
- package/dist/runtime-rules/datagrid-field-validation.js +249 -0
- package/dist/runtime-rules/datagrid-field-validation.js.map +1 -0
- package/dist/runtime-rules/dependency-shadowing.d.ts +20 -0
- package/dist/runtime-rules/dependency-shadowing.d.ts.map +1 -0
- package/dist/runtime-rules/dependency-shadowing.js +147 -0
- package/dist/runtime-rules/dependency-shadowing.js.map +1 -0
- package/dist/runtime-rules/entity-field-access-validation.d.ts +12 -0
- package/dist/runtime-rules/entity-field-access-validation.d.ts.map +1 -0
- package/dist/runtime-rules/entity-field-access-validation.js +304 -0
- package/dist/runtime-rules/entity-field-access-validation.js.map +1 -0
- package/dist/runtime-rules/event-parameter-validation.d.ts +22 -0
- package/dist/runtime-rules/event-parameter-validation.d.ts.map +1 -0
- package/dist/runtime-rules/event-parameter-validation.js +406 -0
- package/dist/runtime-rules/event-parameter-validation.js.map +1 -0
- package/dist/runtime-rules/index.d.ts +61 -0
- package/dist/runtime-rules/index.d.ts.map +1 -0
- package/dist/runtime-rules/index.js +62 -0
- package/dist/runtime-rules/index.js.map +1 -0
- package/dist/runtime-rules/library-variable-names.d.ts +24 -0
- package/dist/runtime-rules/library-variable-names.d.ts.map +1 -0
- package/dist/runtime-rules/library-variable-names.js +88 -0
- package/dist/runtime-rules/library-variable-names.js.map +1 -0
- package/dist/runtime-rules/no-child-implementation.d.ts +18 -0
- package/dist/runtime-rules/no-child-implementation.d.ts.map +1 -0
- package/dist/runtime-rules/no-child-implementation.js +57 -0
- package/dist/runtime-rules/no-child-implementation.js.map +1 -0
- package/dist/runtime-rules/no-data-prop.d.ts +22 -0
- package/dist/runtime-rules/no-data-prop.d.ts.map +1 -0
- package/dist/runtime-rules/no-data-prop.js +111 -0
- package/dist/runtime-rules/no-data-prop.js.map +1 -0
- package/dist/runtime-rules/no-export-statements.d.ts +18 -0
- package/dist/runtime-rules/no-export-statements.d.ts.map +1 -0
- package/dist/runtime-rules/no-export-statements.js +143 -0
- package/dist/runtime-rules/no-export-statements.js.map +1 -0
- package/dist/runtime-rules/no-iife-wrapper.d.ts +18 -0
- package/dist/runtime-rules/no-iife-wrapper.d.ts.map +1 -0
- package/dist/runtime-rules/no-iife-wrapper.js +217 -0
- package/dist/runtime-rules/no-iife-wrapper.js.map +1 -0
- package/dist/runtime-rules/no-import-statements.d.ts +18 -0
- package/dist/runtime-rules/no-import-statements.d.ts.map +1 -0
- package/dist/runtime-rules/no-import-statements.js +65 -0
- package/dist/runtime-rules/no-import-statements.js.map +1 -0
- package/dist/runtime-rules/no-react-destructuring.d.ts +18 -0
- package/dist/runtime-rules/no-react-destructuring.d.ts.map +1 -0
- package/dist/runtime-rules/no-react-destructuring.js +60 -0
- package/dist/runtime-rules/no-react-destructuring.js.map +1 -0
- package/dist/runtime-rules/no-require-statements.d.ts +18 -0
- package/dist/runtime-rules/no-require-statements.d.ts.map +1 -0
- package/dist/runtime-rules/no-require-statements.js +109 -0
- package/dist/runtime-rules/no-require-statements.js.map +1 -0
- package/dist/runtime-rules/no-return-component.d.ts +18 -0
- package/dist/runtime-rules/no-return-component.d.ts.map +1 -0
- package/dist/runtime-rules/no-return-component.js +106 -0
- package/dist/runtime-rules/no-return-component.js.map +1 -0
- package/dist/runtime-rules/no-unwrap-utility-libs.d.ts +20 -0
- package/dist/runtime-rules/no-unwrap-utility-libs.d.ts.map +1 -0
- package/dist/runtime-rules/no-unwrap-utility-libs.js +75 -0
- package/dist/runtime-rules/no-unwrap-utility-libs.js.map +1 -0
- package/dist/runtime-rules/no-use-reducer.d.ts +19 -0
- package/dist/runtime-rules/no-use-reducer.d.ts.map +1 -0
- package/dist/runtime-rules/no-use-reducer.js +78 -0
- package/dist/runtime-rules/no-use-reducer.js.map +1 -0
- package/dist/runtime-rules/no-window-access.d.ts +23 -0
- package/dist/runtime-rules/no-window-access.d.ts.map +1 -0
- package/dist/runtime-rules/no-window-access.js +136 -0
- package/dist/runtime-rules/no-window-access.js.map +1 -0
- package/dist/runtime-rules/noisy-settings-updates.d.ts +18 -0
- package/dist/runtime-rules/noisy-settings-updates.d.ts.map +1 -0
- package/dist/runtime-rules/noisy-settings-updates.js +110 -0
- package/dist/runtime-rules/noisy-settings-updates.js.map +1 -0
- package/dist/runtime-rules/overflow-hidden-on-layout-container.d.ts +30 -0
- package/dist/runtime-rules/overflow-hidden-on-layout-container.d.ts.map +1 -0
- package/dist/runtime-rules/overflow-hidden-on-layout-container.js +220 -0
- package/dist/runtime-rules/overflow-hidden-on-layout-container.js.map +1 -0
- package/dist/runtime-rules/pass-standard-props.d.ts +19 -0
- package/dist/runtime-rules/pass-standard-props.d.ts.map +1 -0
- package/dist/runtime-rules/pass-standard-props.js +82 -0
- package/dist/runtime-rules/pass-standard-props.js.map +1 -0
- package/dist/runtime-rules/prefer-async-await.d.ts +17 -0
- package/dist/runtime-rules/prefer-async-await.d.ts.map +1 -0
- package/dist/runtime-rules/prefer-async-await.js +52 -0
- package/dist/runtime-rules/prefer-async-await.js.map +1 -0
- package/dist/runtime-rules/prefer-jsx-syntax.d.ts +17 -0
- package/dist/runtime-rules/prefer-jsx-syntax.d.ts.map +1 -0
- package/dist/runtime-rules/prefer-jsx-syntax.js +51 -0
- package/dist/runtime-rules/prefer-jsx-syntax.js.map +1 -0
- package/dist/runtime-rules/prop-state-sync.d.ts +19 -0
- package/dist/runtime-rules/prop-state-sync.d.ts.map +1 -0
- package/dist/runtime-rules/prop-state-sync.js +76 -0
- package/dist/runtime-rules/prop-state-sync.js.map +1 -0
- package/dist/runtime-rules/property-name-consistency.d.ts +20 -0
- package/dist/runtime-rules/property-name-consistency.d.ts.map +1 -0
- package/dist/runtime-rules/property-name-consistency.js +172 -0
- package/dist/runtime-rules/property-name-consistency.js.map +1 -0
- package/dist/runtime-rules/query-result-field-access-validation.d.ts +10 -0
- package/dist/runtime-rules/query-result-field-access-validation.d.ts.map +1 -0
- package/dist/runtime-rules/query-result-field-access-validation.js +304 -0
- package/dist/runtime-rules/query-result-field-access-validation.js.map +1 -0
- package/dist/runtime-rules/react-component-naming.d.ts +19 -0
- package/dist/runtime-rules/react-component-naming.d.ts.map +1 -0
- package/dist/runtime-rules/react-component-naming.js +72 -0
- package/dist/runtime-rules/react-component-naming.js.map +1 -0
- package/dist/runtime-rules/react-hooks-rules.d.ts +27 -0
- package/dist/runtime-rules/react-hooks-rules.d.ts.map +1 -0
- package/dist/runtime-rules/react-hooks-rules.js +223 -0
- package/dist/runtime-rules/react-hooks-rules.js.map +1 -0
- package/dist/runtime-rules/required-queries-not-called.d.ts +19 -0
- package/dist/runtime-rules/required-queries-not-called.d.ts.map +1 -0
- package/dist/runtime-rules/required-queries-not-called.js +146 -0
- package/dist/runtime-rules/required-queries-not-called.js.map +1 -0
- package/dist/runtime-rules/runquery-call-validation.d.ts +11 -0
- package/dist/runtime-rules/runquery-call-validation.d.ts.map +1 -0
- package/dist/runtime-rules/runquery-call-validation.js +886 -0
- package/dist/runtime-rules/runquery-call-validation.js.map +1 -0
- package/dist/runtime-rules/runview-call-validation.d.ts +10 -0
- package/dist/runtime-rules/runview-call-validation.d.ts.map +1 -0
- package/dist/runtime-rules/runview-call-validation.js +336 -0
- package/dist/runtime-rules/runview-call-validation.js.map +1 -0
- package/dist/runtime-rules/saved-user-settings-pattern.d.ts +19 -0
- package/dist/runtime-rules/saved-user-settings-pattern.d.ts.map +1 -0
- package/dist/runtime-rules/saved-user-settings-pattern.js +90 -0
- package/dist/runtime-rules/saved-user-settings-pattern.js.map +1 -0
- package/dist/runtime-rules/search-availability-check.d.ts +9 -0
- package/dist/runtime-rules/search-availability-check.d.ts.map +1 -0
- package/dist/runtime-rules/search-availability-check.js +220 -0
- package/dist/runtime-rules/search-availability-check.js.map +1 -0
- package/dist/runtime-rules/search-call-validation.d.ts +9 -0
- package/dist/runtime-rules/search-call-validation.d.ts.map +1 -0
- package/dist/runtime-rules/search-call-validation.js +336 -0
- package/dist/runtime-rules/search-call-validation.js.map +1 -0
- package/dist/runtime-rules/server-reload-on-client-operation.d.ts +18 -0
- package/dist/runtime-rules/server-reload-on-client-operation.d.ts.map +1 -0
- package/dist/runtime-rules/server-reload-on-client-operation.js +107 -0
- package/dist/runtime-rules/server-reload-on-client-operation.js.map +1 -0
- package/dist/runtime-rules/single-function-only.d.ts +18 -0
- package/dist/runtime-rules/single-function-only.d.ts.map +1 -0
- package/dist/runtime-rules/single-function-only.js +103 -0
- package/dist/runtime-rules/single-function-only.js.map +1 -0
- package/dist/runtime-rules/string-replace-all-occurrences.d.ts +19 -0
- package/dist/runtime-rules/string-replace-all-occurrences.d.ts.map +1 -0
- package/dist/runtime-rules/string-replace-all-occurrences.js +109 -0
- package/dist/runtime-rules/string-replace-all-occurrences.js.map +1 -0
- package/dist/runtime-rules/string-template-validation.d.ts +22 -0
- package/dist/runtime-rules/string-template-validation.d.ts.map +1 -0
- package/dist/runtime-rules/string-template-validation.js +163 -0
- package/dist/runtime-rules/string-template-validation.js.map +1 -0
- package/dist/runtime-rules/styles-validation.d.ts +10 -0
- package/dist/runtime-rules/styles-validation.d.ts.map +1 -0
- package/dist/runtime-rules/styles-validation.js +153 -0
- package/dist/runtime-rules/styles-validation.js.map +1 -0
- package/dist/runtime-rules/type-inference-errors.d.ts +23 -0
- package/dist/runtime-rules/type-inference-errors.d.ts.map +1 -0
- package/dist/runtime-rules/type-inference-errors.js +53 -0
- package/dist/runtime-rules/type-inference-errors.js.map +1 -0
- package/dist/runtime-rules/type-mismatch-operation.d.ts +23 -0
- package/dist/runtime-rules/type-mismatch-operation.d.ts.map +1 -0
- package/dist/runtime-rules/type-mismatch-operation.js +145 -0
- package/dist/runtime-rules/type-mismatch-operation.js.map +1 -0
- package/dist/runtime-rules/undefined-component-usage.d.ts +20 -0
- package/dist/runtime-rules/undefined-component-usage.d.ts.map +1 -0
- package/dist/runtime-rules/undefined-component-usage.js +138 -0
- package/dist/runtime-rules/undefined-component-usage.js.map +1 -0
- package/dist/runtime-rules/undefined-jsx-component.d.ts +25 -0
- package/dist/runtime-rules/undefined-jsx-component.d.ts.map +1 -0
- package/dist/runtime-rules/undefined-jsx-component.js +269 -0
- package/dist/runtime-rules/undefined-jsx-component.js.map +1 -0
- package/dist/runtime-rules/unsafe-array-operations.d.ts +25 -0
- package/dist/runtime-rules/unsafe-array-operations.d.ts.map +1 -0
- package/dist/runtime-rules/unsafe-array-operations.js +347 -0
- package/dist/runtime-rules/unsafe-array-operations.js.map +1 -0
- package/dist/runtime-rules/unsafe-formatting-methods.d.ts +24 -0
- package/dist/runtime-rules/unsafe-formatting-methods.d.ts.map +1 -0
- package/dist/runtime-rules/unsafe-formatting-methods.js +277 -0
- package/dist/runtime-rules/unsafe-formatting-methods.js.map +1 -0
- package/dist/runtime-rules/unused-component-dependencies.d.ts +19 -0
- package/dist/runtime-rules/unused-component-dependencies.d.ts.map +1 -0
- package/dist/runtime-rules/unused-component-dependencies.js +90 -0
- package/dist/runtime-rules/unused-component-dependencies.js.map +1 -0
- package/dist/runtime-rules/unused-libraries.d.ts +19 -0
- package/dist/runtime-rules/unused-libraries.d.ts.map +1 -0
- package/dist/runtime-rules/unused-libraries.js +127 -0
- package/dist/runtime-rules/unused-libraries.js.map +1 -0
- package/dist/runtime-rules/use-function-declaration.d.ts +18 -0
- package/dist/runtime-rules/use-function-declaration.d.ts.map +1 -0
- package/dist/runtime-rules/use-function-declaration.js +127 -0
- package/dist/runtime-rules/use-function-declaration.js.map +1 -0
- package/dist/runtime-rules/use-unwrap-components.d.ts +19 -0
- package/dist/runtime-rules/use-unwrap-components.d.ts.map +1 -0
- package/dist/runtime-rules/use-unwrap-components.js +84 -0
- package/dist/runtime-rules/use-unwrap-components.js.map +1 -0
- package/dist/runtime-rules/useeffect-unstable-dependencies.d.ts +23 -0
- package/dist/runtime-rules/useeffect-unstable-dependencies.d.ts.map +1 -0
- package/dist/runtime-rules/useeffect-unstable-dependencies.js +215 -0
- package/dist/runtime-rules/useeffect-unstable-dependencies.js.map +1 -0
- package/dist/runtime-rules/utilities-api-validation.d.ts +24 -0
- package/dist/runtime-rules/utilities-api-validation.d.ts.map +1 -0
- package/dist/runtime-rules/utilities-api-validation.js +121 -0
- package/dist/runtime-rules/utilities-api-validation.js.map +1 -0
- package/dist/runtime-rules/utilities-no-direct-instantiation.d.ts +20 -0
- package/dist/runtime-rules/utilities-no-direct-instantiation.d.ts.map +1 -0
- package/dist/runtime-rules/utilities-no-direct-instantiation.js +58 -0
- package/dist/runtime-rules/utilities-no-direct-instantiation.js.map +1 -0
- package/dist/runtime-rules/validate-component-references.d.ts +19 -0
- package/dist/runtime-rules/validate-component-references.d.ts.map +1 -0
- package/dist/runtime-rules/validate-component-references.js +255 -0
- package/dist/runtime-rules/validate-component-references.js.map +1 -0
- package/dist/schema-validation/component-prop-rule.d.ts +131 -0
- package/dist/schema-validation/component-prop-rule.d.ts.map +1 -0
- package/dist/schema-validation/component-prop-rule.js +625 -0
- package/dist/schema-validation/component-prop-rule.js.map +1 -0
- package/dist/schema-validation/index.d.ts +26 -0
- package/dist/schema-validation/index.d.ts.map +1 -0
- package/dist/schema-validation/index.js +26 -0
- package/dist/schema-validation/index.js.map +1 -0
- package/dist/schema-validation/semantic-validators/index.d.ts +23 -0
- package/dist/schema-validation/semantic-validators/index.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/index.js +23 -0
- package/dist/schema-validation/semantic-validators/index.js.map +1 -0
- package/dist/schema-validation/semantic-validators/required-when-validator.d.ts +43 -0
- package/dist/schema-validation/semantic-validators/required-when-validator.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/required-when-validator.js +94 -0
- package/dist/schema-validation/semantic-validators/required-when-validator.js.map +1 -0
- package/dist/schema-validation/semantic-validators/semantic-validator-registry.d.ts +122 -0
- package/dist/schema-validation/semantic-validators/semantic-validator-registry.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/semantic-validator-registry.js +166 -0
- package/dist/schema-validation/semantic-validators/semantic-validator-registry.js.map +1 -0
- package/dist/schema-validation/semantic-validators/semantic-validator.d.ts +260 -0
- package/dist/schema-validation/semantic-validators/semantic-validator.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/semantic-validator.js +301 -0
- package/dist/schema-validation/semantic-validators/semantic-validator.js.map +1 -0
- package/dist/schema-validation/semantic-validators/sql-where-clause-validator.d.ts +115 -0
- package/dist/schema-validation/semantic-validators/sql-where-clause-validator.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/sql-where-clause-validator.js +381 -0
- package/dist/schema-validation/semantic-validators/sql-where-clause-validator.js.map +1 -0
- package/dist/schema-validation/semantic-validators/subset-of-entity-fields-validator.d.ts +60 -0
- package/dist/schema-validation/semantic-validators/subset-of-entity-fields-validator.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/subset-of-entity-fields-validator.js +195 -0
- package/dist/schema-validation/semantic-validators/subset-of-entity-fields-validator.js.map +1 -0
- package/dist/schema-validation/semantic-validators/validation-context.d.ts +335 -0
- package/dist/schema-validation/semantic-validators/validation-context.d.ts.map +1 -0
- package/dist/schema-validation/semantic-validators/validation-context.js +13 -0
- package/dist/schema-validation/semantic-validators/validation-context.js.map +1 -0
- package/dist/styles-type-analyzer.d.ts +64 -0
- package/dist/styles-type-analyzer.d.ts.map +1 -0
- package/dist/styles-type-analyzer.js +242 -0
- package/dist/styles-type-analyzer.js.map +1 -0
- package/dist/type-context.d.ts +184 -0
- package/dist/type-context.d.ts.map +1 -0
- package/dist/type-context.js +415 -0
- package/dist/type-context.js.map +1 -0
- package/dist/type-inference-engine.d.ts +181 -0
- package/dist/type-inference-engine.d.ts.map +1 -0
- package/dist/type-inference-engine.js +1151 -0
- package/dist/type-inference-engine.js.map +1 -0
- package/dist/type-rules/type-compatibility-rule.d.ts +85 -0
- package/dist/type-rules/type-compatibility-rule.d.ts.map +1 -0
- package/dist/type-rules/type-compatibility-rule.js +211 -0
- package/dist/type-rules/type-compatibility-rule.js.map +1 -0
- package/package.json +35 -7
- package/README.md +0 -45
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility functions and constants for component linter rules.
|
|
3
|
+
*
|
|
4
|
+
* All commonly-used patterns are consolidated here to avoid duplication
|
|
5
|
+
* across rule files. Rules should import from this module rather than
|
|
6
|
+
* reimplementing these helpers.
|
|
7
|
+
*/
|
|
8
|
+
import _traverse from '@babel/traverse';
|
|
9
|
+
import * as t from '@babel/types';
|
|
10
|
+
import * as parser from '@babel/parser';
|
|
11
|
+
export const traverse = ((_traverse.default) ?? _traverse);
|
|
12
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
13
|
+
// Violation Helpers
|
|
14
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15
|
+
/**
|
|
16
|
+
* Creates a violation object with consistent structure.
|
|
17
|
+
*/
|
|
18
|
+
export function createViolation(rule, severity, node, message, code, suggestion) {
|
|
19
|
+
return {
|
|
20
|
+
rule,
|
|
21
|
+
severity,
|
|
22
|
+
line: node?.loc?.start.line || 0,
|
|
23
|
+
column: node?.loc?.start.column || 0,
|
|
24
|
+
message,
|
|
25
|
+
code,
|
|
26
|
+
suggestion,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Truncates code to a maximum length for display in violations.
|
|
31
|
+
*/
|
|
32
|
+
export function truncateCode(code, maxLength = 100) {
|
|
33
|
+
if (code.length <= maxLength)
|
|
34
|
+
return code;
|
|
35
|
+
return code.substring(0, maxLength) + '...';
|
|
36
|
+
}
|
|
37
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
38
|
+
// String Similarity
|
|
39
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
40
|
+
/**
|
|
41
|
+
* Levenshtein distance between two strings (case-insensitive).
|
|
42
|
+
*/
|
|
43
|
+
export function levenshteinDistance(a, b) {
|
|
44
|
+
const al = a.toLowerCase();
|
|
45
|
+
const bl = b.toLowerCase();
|
|
46
|
+
const m = al.length;
|
|
47
|
+
const n = bl.length;
|
|
48
|
+
const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
|
|
49
|
+
for (let i = 0; i <= m; i++)
|
|
50
|
+
dp[i][0] = i;
|
|
51
|
+
for (let j = 0; j <= n; j++)
|
|
52
|
+
dp[0][j] = j;
|
|
53
|
+
for (let i = 1; i <= m; i++) {
|
|
54
|
+
for (let j = 1; j <= n; j++) {
|
|
55
|
+
const cost = al[i - 1] === bl[j - 1] ? 0 : 1;
|
|
56
|
+
dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return dp[m][n];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Find the closest matching string from a list of candidates using Levenshtein distance.
|
|
63
|
+
* Returns null if no match is within the maximum allowed distance.
|
|
64
|
+
*/
|
|
65
|
+
export function findClosestMatch(target, candidates, maxDistance) {
|
|
66
|
+
let bestMatch = null;
|
|
67
|
+
let bestDistance = Infinity;
|
|
68
|
+
const max = maxDistance ?? Math.max(3, Math.floor(target.length * 0.5));
|
|
69
|
+
for (const candidate of candidates) {
|
|
70
|
+
const dist = levenshteinDistance(target, candidate);
|
|
71
|
+
if (dist < bestDistance && dist > 0 && dist <= max) {
|
|
72
|
+
bestDistance = dist;
|
|
73
|
+
bestMatch = candidate;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return bestMatch;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Find a case-insensitive match that differs only in casing.
|
|
80
|
+
*/
|
|
81
|
+
export function findCaseMismatch(target, candidates) {
|
|
82
|
+
for (const candidate of candidates) {
|
|
83
|
+
if (candidate.toLowerCase() === target.toLowerCase() && candidate !== target) {
|
|
84
|
+
return candidate;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
90
|
+
// AST Type Checking Helpers
|
|
91
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
92
|
+
/** Checks if a node is null or undefined literal */
|
|
93
|
+
export function isNullOrUndefined(node) {
|
|
94
|
+
return t.isNullLiteral(node) || (t.isIdentifier(node) && node.name === 'undefined');
|
|
95
|
+
}
|
|
96
|
+
/** Checks if a node is likely a string value (literal, template, identifier, call, etc.) */
|
|
97
|
+
export function isStringLike(node, depth = 0) {
|
|
98
|
+
if (depth > 3)
|
|
99
|
+
return false;
|
|
100
|
+
if (t.isConditionalExpression(node)) {
|
|
101
|
+
const consequentOk = isStringLike(node.consequent, depth + 1) || isNullOrUndefined(node.consequent);
|
|
102
|
+
const alternateOk = isStringLike(node.alternate, depth + 1) || isNullOrUndefined(node.alternate);
|
|
103
|
+
return consequentOk && alternateOk;
|
|
104
|
+
}
|
|
105
|
+
if (t.isObjectExpression(node) || t.isArrayExpression(node))
|
|
106
|
+
return false;
|
|
107
|
+
return (t.isStringLiteral(node) ||
|
|
108
|
+
t.isTemplateLiteral(node) ||
|
|
109
|
+
t.isBinaryExpression(node) ||
|
|
110
|
+
t.isIdentifier(node) ||
|
|
111
|
+
t.isCallExpression(node) ||
|
|
112
|
+
t.isMemberExpression(node));
|
|
113
|
+
}
|
|
114
|
+
/** Checks if a node is likely a number value */
|
|
115
|
+
export function isNumberLike(node) {
|
|
116
|
+
return (t.isNumericLiteral(node) ||
|
|
117
|
+
t.isBinaryExpression(node) ||
|
|
118
|
+
t.isUnaryExpression(node) ||
|
|
119
|
+
t.isConditionalExpression(node) ||
|
|
120
|
+
t.isIdentifier(node) ||
|
|
121
|
+
t.isCallExpression(node) ||
|
|
122
|
+
t.isMemberExpression(node));
|
|
123
|
+
}
|
|
124
|
+
/** Checks if a node is likely an array value */
|
|
125
|
+
export function isArrayLike(node) {
|
|
126
|
+
return (t.isArrayExpression(node) ||
|
|
127
|
+
t.isIdentifier(node) ||
|
|
128
|
+
t.isCallExpression(node) ||
|
|
129
|
+
t.isMemberExpression(node) ||
|
|
130
|
+
t.isConditionalExpression(node));
|
|
131
|
+
}
|
|
132
|
+
/** Checks if a node is likely an object value (not array) */
|
|
133
|
+
export function isObjectLike(node) {
|
|
134
|
+
if (t.isArrayExpression(node))
|
|
135
|
+
return false;
|
|
136
|
+
return (t.isObjectExpression(node) ||
|
|
137
|
+
t.isIdentifier(node) ||
|
|
138
|
+
t.isCallExpression(node) ||
|
|
139
|
+
t.isMemberExpression(node) ||
|
|
140
|
+
t.isConditionalExpression(node) ||
|
|
141
|
+
t.isSpreadElement(node));
|
|
142
|
+
}
|
|
143
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
144
|
+
// Object Property Extraction
|
|
145
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
146
|
+
/**
|
|
147
|
+
* Extract a string literal value from an ObjectExpression property by key name.
|
|
148
|
+
* Returns null if the property doesn't exist or its value isn't a string literal.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* // For: { QueryName: 'My Query', MaxRows: 100 }
|
|
153
|
+
* getStringProperty(objectExpr, 'QueryName') // → 'My Query'
|
|
154
|
+
* getStringProperty(objectExpr, 'MaxRows') // → null (not a string)
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export function getStringProperty(objectExpr, propName) {
|
|
158
|
+
for (const prop of objectExpr.properties) {
|
|
159
|
+
if (t.isObjectProperty(prop) && t.isIdentifier(prop.key) &&
|
|
160
|
+
prop.key.name === propName && t.isStringLiteral(prop.value)) {
|
|
161
|
+
return prop.value.value;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get the AST node for a specific property value in an ObjectExpression.
|
|
168
|
+
* Returns the ObjectProperty if found, null otherwise.
|
|
169
|
+
*/
|
|
170
|
+
export function getObjectProperty(objectExpr, propName) {
|
|
171
|
+
for (const prop of objectExpr.properties) {
|
|
172
|
+
if (t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === propName) {
|
|
173
|
+
return prop;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all property names from an ObjectExpression.
|
|
180
|
+
*/
|
|
181
|
+
export function getPropertyNames(objectExpr) {
|
|
182
|
+
return objectExpr.properties
|
|
183
|
+
.filter((prop) => t.isObjectProperty(prop) && t.isIdentifier(prop.key))
|
|
184
|
+
.map((prop) => prop.key.name);
|
|
185
|
+
}
|
|
186
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
187
|
+
// Utility Method Call Detection
|
|
188
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
189
|
+
/**
|
|
190
|
+
* Check if a CallExpression callee matches the pattern `utilities.<service>.<method>`.
|
|
191
|
+
* Returns the service and method names if matched, null otherwise.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* // For: utilities.rv.RunView(...)
|
|
196
|
+
* getUtilitiesCallInfo(callee) // → { service: 'rv', method: 'RunView' }
|
|
197
|
+
*
|
|
198
|
+
* // For: utilities.rq.RunQuery(...)
|
|
199
|
+
* getUtilitiesCallInfo(callee) // → { service: 'rq', method: 'RunQuery' }
|
|
200
|
+
*
|
|
201
|
+
* // For: utilities.search?.Search(...)
|
|
202
|
+
* getUtilitiesCallInfo(callee) // → { service: 'search', method: 'Search' }
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
export function getUtilitiesCallInfo(callee) {
|
|
206
|
+
// Standard: utilities.rv.RunView(...)
|
|
207
|
+
if (t.isMemberExpression(callee) &&
|
|
208
|
+
t.isMemberExpression(callee.object) &&
|
|
209
|
+
t.isIdentifier(callee.object.object) &&
|
|
210
|
+
callee.object.object.name === 'utilities' &&
|
|
211
|
+
t.isIdentifier(callee.object.property) &&
|
|
212
|
+
t.isIdentifier(callee.property)) {
|
|
213
|
+
return { service: callee.object.property.name, method: callee.property.name };
|
|
214
|
+
}
|
|
215
|
+
// Optional chaining: utilities.search?.Search(...)
|
|
216
|
+
if (t.isMemberExpression(callee) &&
|
|
217
|
+
t.isOptionalMemberExpression(callee.object) &&
|
|
218
|
+
t.isIdentifier(callee.object.object) &&
|
|
219
|
+
callee.object.object.name === 'utilities' &&
|
|
220
|
+
t.isIdentifier(callee.object.property) &&
|
|
221
|
+
t.isIdentifier(callee.property)) {
|
|
222
|
+
return {
|
|
223
|
+
service: callee.object.property.name,
|
|
224
|
+
method: callee.property.name,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
/** Check if a CallExpression callee is `utilities.rv.RunView` or `utilities.rv.RunViews` */
|
|
230
|
+
export function isRunViewCall(callee) {
|
|
231
|
+
const info = getUtilitiesCallInfo(callee);
|
|
232
|
+
return info !== null && info.service === 'rv' && (info.method === 'RunView' || info.method === 'RunViews');
|
|
233
|
+
}
|
|
234
|
+
/** Check if a CallExpression callee is `utilities.rq.RunQuery` */
|
|
235
|
+
export function isRunQueryCall(callee) {
|
|
236
|
+
const info = getUtilitiesCallInfo(callee);
|
|
237
|
+
return info !== null && info.service === 'rq' && info.method === 'RunQuery';
|
|
238
|
+
}
|
|
239
|
+
/** Check if a CallExpression callee is `utilities.search.Search` or `PreviewSearch` */
|
|
240
|
+
export function isSearchCall(callee) {
|
|
241
|
+
const info = getUtilitiesCallInfo(callee);
|
|
242
|
+
return info !== null && info.service === 'search' && (info.method === 'Search' || info.method === 'PreviewSearch');
|
|
243
|
+
}
|
|
244
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
245
|
+
// Child Component Code Analysis
|
|
246
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
247
|
+
/**
|
|
248
|
+
* Parse component code and extract QueryName values from RunQuery calls.
|
|
249
|
+
* Uses full AST analysis to avoid false positives from comments or string literals.
|
|
250
|
+
*/
|
|
251
|
+
export function extractRunQueryNamesFromCode(code) {
|
|
252
|
+
const queryNames = new Set();
|
|
253
|
+
try {
|
|
254
|
+
const ast = parser.parse(code, {
|
|
255
|
+
sourceType: 'module',
|
|
256
|
+
plugins: ['jsx', 'typescript'],
|
|
257
|
+
errorRecovery: true,
|
|
258
|
+
});
|
|
259
|
+
traverse(ast, {
|
|
260
|
+
CallExpression(path) {
|
|
261
|
+
if (isRunQueryCall(path.node.callee)) {
|
|
262
|
+
const arg = path.node.arguments[0];
|
|
263
|
+
if (t.isObjectExpression(arg)) {
|
|
264
|
+
const queryName = getStringProperty(arg, 'QueryName');
|
|
265
|
+
if (queryName)
|
|
266
|
+
queryNames.add(queryName);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// If parsing fails, return empty set
|
|
274
|
+
}
|
|
275
|
+
return queryNames;
|
|
276
|
+
}
|
|
277
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
278
|
+
// Shared Constants
|
|
279
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
280
|
+
/** Standard array iteration method names */
|
|
281
|
+
export const ARRAY_METHODS = new Set([
|
|
282
|
+
'map', 'filter', 'forEach', 'reduce', 'find', 'some', 'every',
|
|
283
|
+
'sort', 'concat', 'flatMap', 'flat', 'slice', 'reverse',
|
|
284
|
+
]);
|
|
285
|
+
/** Functions that expect array arguments */
|
|
286
|
+
export const ARRAY_EXPECTING_FUNCS = new Set([
|
|
287
|
+
'map', 'filter', 'forEach', 'reduce', 'sort', 'concat',
|
|
288
|
+
'processChartData', 'processData', 'transformData',
|
|
289
|
+
'setData', 'setItems', 'setResults', 'setRows',
|
|
290
|
+
]);
|
|
291
|
+
/** Functions that coerce values to numbers */
|
|
292
|
+
export const NUMERIC_COERCION_FUNCTIONS = new Set(['parseInt', 'parseFloat', 'Number']);
|
|
293
|
+
/**
|
|
294
|
+
* Common DOM/React/JS properties that should never be validated as entity fields.
|
|
295
|
+
* Used to prevent false positives when scope resolution picks up a variable name
|
|
296
|
+
* collision (e.g., `e` used as both a .map() callback param and an onChange event param).
|
|
297
|
+
*/
|
|
298
|
+
export const NON_ENTITY_PROPERTIES = new Set([
|
|
299
|
+
// DOM event properties
|
|
300
|
+
'target', 'currentTarget', 'preventDefault', 'stopPropagation', 'nativeEvent',
|
|
301
|
+
'type', 'bubbles', 'cancelable', 'defaultPrevented', 'eventPhase', 'isTrusted',
|
|
302
|
+
// DOM element properties
|
|
303
|
+
'value', 'checked', 'selectedIndex', 'innerHTML', 'textContent', 'className',
|
|
304
|
+
'style', 'classList', 'dataset', 'children', 'parentNode', 'parentElement',
|
|
305
|
+
'offsetWidth', 'offsetHeight', 'scrollTop', 'scrollLeft', 'clientWidth', 'clientHeight',
|
|
306
|
+
// React/JS common
|
|
307
|
+
'current', 'then', 'catch', 'finally', 'prototype', 'constructor', 'length',
|
|
308
|
+
'map', 'filter', 'reduce', 'forEach', 'find', 'some', 'every', 'includes',
|
|
309
|
+
'push', 'pop', 'shift', 'unshift', 'splice', 'slice', 'concat', 'join',
|
|
310
|
+
'keys', 'values', 'entries', 'toString', 'valueOf', 'hasOwnProperty',
|
|
311
|
+
]);
|
|
312
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
313
|
+
// JSX Helpers
|
|
314
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
315
|
+
/** Extracts the name of a JSX element (handles member expressions like Antd.Button) */
|
|
316
|
+
export function getJSXElementName(node) {
|
|
317
|
+
if (t.isJSXIdentifier(node.name)) {
|
|
318
|
+
return node.name.name;
|
|
319
|
+
}
|
|
320
|
+
else if (t.isJSXMemberExpression(node.name)) {
|
|
321
|
+
const parts = [];
|
|
322
|
+
let current = node.name;
|
|
323
|
+
while (t.isJSXMemberExpression(current)) {
|
|
324
|
+
if (t.isJSXIdentifier(current.property))
|
|
325
|
+
parts.unshift(current.property.name);
|
|
326
|
+
current = current.object;
|
|
327
|
+
}
|
|
328
|
+
if (t.isJSXIdentifier(current))
|
|
329
|
+
parts.unshift(current.name);
|
|
330
|
+
return parts.join('.');
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
/** Checks if a JSX element has a specific attribute */
|
|
335
|
+
export function hasJSXAttribute(element, attributeName) {
|
|
336
|
+
return element.attributes.some((attr) => t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name) && attr.name.name === attributeName);
|
|
337
|
+
}
|
|
338
|
+
/** Gets a JSX attribute by name */
|
|
339
|
+
export function getJSXAttribute(element, attributeName) {
|
|
340
|
+
const attr = element.attributes.find((a) => t.isJSXAttribute(a) && t.isJSXIdentifier(a.name) && a.name.name === attributeName);
|
|
341
|
+
return t.isJSXAttribute(attr) ? attr : null;
|
|
342
|
+
}
|
|
343
|
+
/** Checks if a function parameter is destructuring props */
|
|
344
|
+
export function isPropsDestructuring(param) {
|
|
345
|
+
return t.isObjectPattern(param);
|
|
346
|
+
}
|
|
347
|
+
/** Extracts property names from an object pattern (destructuring) */
|
|
348
|
+
export function extractDestructuredProps(pattern) {
|
|
349
|
+
return pattern.properties
|
|
350
|
+
.filter((prop) => t.isObjectProperty(prop))
|
|
351
|
+
.filter((prop) => t.isIdentifier(prop.key))
|
|
352
|
+
.map((prop) => prop.key.name);
|
|
353
|
+
}
|
|
354
|
+
/** Checks if a node is at the top level of the program */
|
|
355
|
+
export function isTopLevel(path) {
|
|
356
|
+
return path.getFunctionParent() === null || path.scope.path.type === 'Program';
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=lint-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-utils.js","sourceRoot":"","sources":["../src/lint-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { UserInfo } from '@memberjunction/core';
|
|
2
|
+
import type { ComponentSpec, ComponentUtilities, SimpleEntityInfo } from '@memberjunction/interactive-component-types';
|
|
3
|
+
/**
|
|
4
|
+
* Options accepted by the linter and individual lint rules at runtime.
|
|
5
|
+
*
|
|
6
|
+
* This is a strict subset of the fields the linter actually reads — the
|
|
7
|
+
* companion `@memberjunction/react-test-harness` package extends this
|
|
8
|
+
* interface with browser-execution-specific fields (Playwright timeouts,
|
|
9
|
+
* onPageReady callbacks, etc.) that are irrelevant to static analysis.
|
|
10
|
+
*
|
|
11
|
+
* Keeping the linter's surface narrow avoids dragging Playwright-shaped
|
|
12
|
+
* options into server-side action callers that only want static checks.
|
|
13
|
+
*/
|
|
14
|
+
export interface LinterOptions {
|
|
15
|
+
/** Component spec being analyzed (linter walks `code`, `dataRequirements`, etc.). */
|
|
16
|
+
componentSpec?: ComponentSpec;
|
|
17
|
+
/** Auth/context — required by rules that resolve entity metadata. */
|
|
18
|
+
contextUser?: UserInfo;
|
|
19
|
+
/**
|
|
20
|
+
* Optional array of entity metadata providing complete field lists per entity.
|
|
21
|
+
* Used by the linter to validate field usage with two-tier severity:
|
|
22
|
+
* - Medium: Field exists in entity but not declared in dataRequirements
|
|
23
|
+
* - Critical: Field does not exist in entity at all
|
|
24
|
+
*
|
|
25
|
+
* If not provided, linter only checks against dataRequirements.fieldMetadata
|
|
26
|
+
* which may cause false-positive critical errors for valid but undeclared fields.
|
|
27
|
+
*/
|
|
28
|
+
entityMetadata?: SimpleEntityInfo[];
|
|
29
|
+
/**
|
|
30
|
+
* Runtime utility hub forwarded to rules that need live metadata access
|
|
31
|
+
* (e.g. utilities.md.Entities). Optional — rules guard against absence.
|
|
32
|
+
*/
|
|
33
|
+
utilities?: ComponentUtilities;
|
|
34
|
+
/**
|
|
35
|
+
* Optional resolver for dependency components referenced by name (+ optional
|
|
36
|
+
* namespace + registry). Lint rules call this when a dep is `location:
|
|
37
|
+
* 'registry'` and the parent spec didn't denormalize the dep's props/events
|
|
38
|
+
* inline — most commonly to verify props passed to a child component match
|
|
39
|
+
* the child's declared property contract.
|
|
40
|
+
*
|
|
41
|
+
* The linter never does I/O itself; it asks this resolver. Callers wire it
|
|
42
|
+
* however suits their side of the wire:
|
|
43
|
+
* - server-side: close over `ComponentMetadataEngineServer.Instance.FindComponent(...)?.spec`
|
|
44
|
+
* - client-side: close over a pre-loaded array or a GQL cache
|
|
45
|
+
*
|
|
46
|
+
* If absent, rules that rely on registry lookup degrade gracefully
|
|
47
|
+
* (they simply skip the cross-component check).
|
|
48
|
+
*/
|
|
49
|
+
componentResolver?: (name: string, namespace?: string, registry?: string) => ComponentSpec | undefined;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=linter-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linter-options.d.ts","sourceRoot":"","sources":["../src/linter-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,6CAA6C,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,qEAAqE;IACrE,WAAW,CAAC,EAAE,QAAQ,CAAC;IAEvB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEpC;;;OAGG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAAC,EAAE,CAClB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,KACd,aAAa,GAAG,SAAS,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linter-options.js","sourceRoot":"","sources":["../src/linter-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prop Value Extractor Utility
|
|
3
|
+
*
|
|
4
|
+
* Extracts static values from JSX attribute AST nodes for validation purposes.
|
|
5
|
+
* This utility is foundational for semantic validation - it converts AST nodes
|
|
6
|
+
* into analyzable values that semantic validators can work with.
|
|
7
|
+
*
|
|
8
|
+
* Supported Extractions:
|
|
9
|
+
* - Literal values: strings, numbers, booleans, null
|
|
10
|
+
* - Arrays of literals
|
|
11
|
+
* - Object literals (nested)
|
|
12
|
+
* - Identifies dynamic values (identifiers/expressions) that can't be extracted
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const value = PropValueExtractor.extract(jsxAttribute);
|
|
17
|
+
* if (value._type === 'identifier') {
|
|
18
|
+
* // Can't validate statically - skip with warning
|
|
19
|
+
* } else {
|
|
20
|
+
* // Can validate - proceed with constraint checking
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import * as t from '@babel/types';
|
|
25
|
+
/**
|
|
26
|
+
* Represents a value that couldn't be extracted statically
|
|
27
|
+
*/
|
|
28
|
+
export interface DynamicValue {
|
|
29
|
+
_type: 'identifier' | 'expression';
|
|
30
|
+
name?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Union type for extracted values
|
|
35
|
+
*/
|
|
36
|
+
export type ExtractedValue = string | number | boolean | null | undefined | ExtractedValue[] | {
|
|
37
|
+
[key: string]: ExtractedValue;
|
|
38
|
+
} | DynamicValue;
|
|
39
|
+
/**
|
|
40
|
+
* Utility class for extracting static values from JSX attribute AST nodes
|
|
41
|
+
*/
|
|
42
|
+
export declare class PropValueExtractor {
|
|
43
|
+
/**
|
|
44
|
+
* Extract a value from a JSX attribute
|
|
45
|
+
*
|
|
46
|
+
* @param attr - The JSX attribute node
|
|
47
|
+
* @returns The extracted value, or a DynamicValue object if it can't be extracted statically
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* // Boolean shorthand: <Component show />
|
|
52
|
+
* PropValueExtractor.extract(attr) // => true
|
|
53
|
+
*
|
|
54
|
+
* // String literal: <Component name="test" />
|
|
55
|
+
* PropValueExtractor.extract(attr) // => "test"
|
|
56
|
+
*
|
|
57
|
+
* // Expression: <Component count={42} />
|
|
58
|
+
* PropValueExtractor.extract(attr) // => 42
|
|
59
|
+
*
|
|
60
|
+
* // Array: <Component items={['a', 'b']} />
|
|
61
|
+
* PropValueExtractor.extract(attr) // => ['a', 'b']
|
|
62
|
+
*
|
|
63
|
+
* // Dynamic: <Component name={userName} />
|
|
64
|
+
* PropValueExtractor.extract(attr) // => { _type: 'identifier', name: 'userName' }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
static extract(attr: t.JSXAttribute): ExtractedValue;
|
|
68
|
+
/**
|
|
69
|
+
* Extract a value from an expression node
|
|
70
|
+
*
|
|
71
|
+
* @param expr - The expression node
|
|
72
|
+
* @returns The extracted value
|
|
73
|
+
*/
|
|
74
|
+
private static extractExpression;
|
|
75
|
+
/**
|
|
76
|
+
* Extract template literal if it's static
|
|
77
|
+
*
|
|
78
|
+
* @param node - Template literal node
|
|
79
|
+
* @returns Concatenated string if all expressions are literals, otherwise DynamicValue
|
|
80
|
+
*/
|
|
81
|
+
private static extractTemplateLiteral;
|
|
82
|
+
/**
|
|
83
|
+
* Extract array expression
|
|
84
|
+
*
|
|
85
|
+
* @param node - Array expression node
|
|
86
|
+
* @returns Array of extracted values
|
|
87
|
+
*/
|
|
88
|
+
private static extractArray;
|
|
89
|
+
/**
|
|
90
|
+
* Extract object literal
|
|
91
|
+
*
|
|
92
|
+
* @param node - Object expression node
|
|
93
|
+
* @returns Object with extracted property values
|
|
94
|
+
*/
|
|
95
|
+
private static extractObjectLiteral;
|
|
96
|
+
/**
|
|
97
|
+
* Get property key as string
|
|
98
|
+
*
|
|
99
|
+
* @param key - Property key node
|
|
100
|
+
* @param computed - Whether the property is computed
|
|
101
|
+
* @returns String key or null if can't be extracted
|
|
102
|
+
*/
|
|
103
|
+
private static getPropertyKey;
|
|
104
|
+
/**
|
|
105
|
+
* Extract unary expression if operand is static
|
|
106
|
+
*
|
|
107
|
+
* @param node - Unary expression node
|
|
108
|
+
* @returns Computed value or DynamicValue
|
|
109
|
+
*/
|
|
110
|
+
private static extractUnaryExpression;
|
|
111
|
+
/**
|
|
112
|
+
* Extract binary expression if both operands are static
|
|
113
|
+
*
|
|
114
|
+
* @param node - Binary expression node
|
|
115
|
+
* @returns Computed value or DynamicValue
|
|
116
|
+
*/
|
|
117
|
+
private static extractBinaryExpression;
|
|
118
|
+
/**
|
|
119
|
+
* Extract conditional expression (ternary) if all parts are static
|
|
120
|
+
*
|
|
121
|
+
* @param node - Conditional expression node
|
|
122
|
+
* @returns Value of the taken branch or DynamicValue
|
|
123
|
+
*/
|
|
124
|
+
private static extractConditionalExpression;
|
|
125
|
+
/**
|
|
126
|
+
* Check if a value is a DynamicValue (can't be validated statically)
|
|
127
|
+
*
|
|
128
|
+
* @param value - The extracted value
|
|
129
|
+
* @returns True if the value is dynamic
|
|
130
|
+
*/
|
|
131
|
+
static isDynamicValue(value: ExtractedValue): value is DynamicValue;
|
|
132
|
+
/**
|
|
133
|
+
* Check if an array contains any dynamic values
|
|
134
|
+
*
|
|
135
|
+
* @param arr - The array to check
|
|
136
|
+
* @returns True if any element is dynamic
|
|
137
|
+
*/
|
|
138
|
+
static hasAnyDynamicValue(arr: ExtractedValue[]): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Get a human-readable description of the value
|
|
141
|
+
*
|
|
142
|
+
* @param value - The extracted value
|
|
143
|
+
* @returns Description string
|
|
144
|
+
*/
|
|
145
|
+
static describe(value: ExtractedValue): string;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=prop-value-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prop-value-extractor.d.ts","sourceRoot":"","sources":["../src/prop-value-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,GAAG,YAAY,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,cAAc,EAAE,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,GACjC,YAAY,CAAC;AAEjB;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,GAAG,cAAc;IAkCpD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA4EhC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAkCrC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAyB3B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAsCnC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA2B7B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA6BrC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA6EtC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAkB3C;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,IAAI,YAAY;IASnE;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,OAAO;IAWzD;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;CA0B/C"}
|