@memberjunction/react-test-harness 5.28.0 → 5.30.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/README.md +140 -153
- package/dist/__tests__/setup/vitest-setup.d.ts +11 -0
- package/dist/__tests__/setup/vitest-setup.d.ts.map +1 -0
- package/dist/__tests__/setup/vitest-setup.js +73 -0
- package/dist/__tests__/setup/vitest-setup.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/component-linter.d.ts +10 -13
- package/dist/lib/component-linter.d.ts.map +1 -1
- package/dist/lib/component-linter.js +96 -8552
- package/dist/lib/component-linter.js.map +1 -1
- package/dist/lib/component-runner.d.ts.map +1 -1
- package/dist/lib/component-runner.js +34 -10
- package/dist/lib/component-runner.js.map +1 -1
- package/dist/lib/lint-rule.d.ts +70 -0
- package/dist/lib/lint-rule.d.ts.map +1 -0
- package/dist/lib/lint-rule.js +41 -0
- package/dist/lib/lint-rule.js.map +1 -0
- package/dist/lib/lint-utils.d.ts +131 -0
- package/dist/lib/lint-utils.d.ts.map +1 -0
- package/dist/lib/lint-utils.js +358 -0
- package/dist/lib/lint-utils.js.map +1 -0
- package/dist/lib/prop-value-extractor.d.ts +2 -2
- package/dist/lib/prop-value-extractor.js +2 -2
- package/dist/lib/runtime-rules/ai-tools-availability-check.d.ts +9 -0
- package/dist/lib/runtime-rules/ai-tools-availability-check.d.ts.map +1 -0
- package/dist/lib/runtime-rules/ai-tools-availability-check.js +223 -0
- package/dist/lib/runtime-rules/ai-tools-availability-check.js.map +1 -0
- package/dist/lib/runtime-rules/callback-event-validation.d.ts +22 -0
- package/dist/lib/runtime-rules/callback-event-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/callback-event-validation.js +561 -0
- package/dist/lib/runtime-rules/callback-event-validation.js.map +1 -0
- package/dist/lib/runtime-rules/chart-field-validation.d.ts +10 -0
- package/dist/lib/runtime-rules/chart-field-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/chart-field-validation.js +270 -0
- package/dist/lib/runtime-rules/chart-field-validation.js.map +1 -0
- package/dist/lib/runtime-rules/child-component-prop-validation.d.ts +10 -0
- package/dist/lib/runtime-rules/child-component-prop-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/child-component-prop-validation.js +447 -0
- package/dist/lib/runtime-rules/child-component-prop-validation.js.map +1 -0
- package/dist/lib/runtime-rules/component-name-mismatch.d.ts +19 -0
- package/dist/lib/runtime-rules/component-name-mismatch.d.ts.map +1 -0
- package/dist/lib/runtime-rules/component-name-mismatch.js +82 -0
- package/dist/lib/runtime-rules/component-name-mismatch.js.map +1 -0
- package/dist/lib/runtime-rules/component-not-in-dependencies.d.ts +20 -0
- package/dist/lib/runtime-rules/component-not-in-dependencies.d.ts.map +1 -0
- package/dist/lib/runtime-rules/component-not-in-dependencies.js +92 -0
- package/dist/lib/runtime-rules/component-not-in-dependencies.js.map +1 -0
- package/dist/lib/runtime-rules/component-props-validation.d.ts +25 -0
- package/dist/lib/runtime-rules/component-props-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/component-props-validation.js +228 -0
- package/dist/lib/runtime-rules/component-props-validation.js.map +1 -0
- package/dist/lib/runtime-rules/component-usage-without-destructuring.d.ts +20 -0
- package/dist/lib/runtime-rules/component-usage-without-destructuring.d.ts.map +1 -0
- package/dist/lib/runtime-rules/component-usage-without-destructuring.js +124 -0
- package/dist/lib/runtime-rules/component-usage-without-destructuring.js.map +1 -0
- package/dist/lib/runtime-rules/data-result-validation.d.ts +9 -0
- package/dist/lib/runtime-rules/data-result-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/data-result-validation.js +763 -0
- package/dist/lib/runtime-rules/data-result-validation.js.map +1 -0
- package/dist/lib/runtime-rules/datagrid-field-validation.d.ts +10 -0
- package/dist/lib/runtime-rules/datagrid-field-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/datagrid-field-validation.js +245 -0
- package/dist/lib/runtime-rules/datagrid-field-validation.js.map +1 -0
- package/dist/lib/runtime-rules/dependency-shadowing.d.ts +20 -0
- package/dist/lib/runtime-rules/dependency-shadowing.d.ts.map +1 -0
- package/dist/lib/runtime-rules/dependency-shadowing.js +147 -0
- package/dist/lib/runtime-rules/dependency-shadowing.js.map +1 -0
- package/dist/lib/runtime-rules/entity-field-access-validation.d.ts +12 -0
- package/dist/lib/runtime-rules/entity-field-access-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/entity-field-access-validation.js +304 -0
- package/dist/lib/runtime-rules/entity-field-access-validation.js.map +1 -0
- package/dist/lib/runtime-rules/event-parameter-validation.d.ts +22 -0
- package/dist/lib/runtime-rules/event-parameter-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/event-parameter-validation.js +406 -0
- package/dist/lib/runtime-rules/event-parameter-validation.js.map +1 -0
- package/dist/lib/runtime-rules/index.d.ts +59 -0
- package/dist/lib/runtime-rules/index.d.ts.map +1 -0
- package/dist/lib/runtime-rules/index.js +60 -0
- package/dist/lib/runtime-rules/index.js.map +1 -0
- package/dist/lib/runtime-rules/library-variable-names.d.ts +24 -0
- package/dist/lib/runtime-rules/library-variable-names.d.ts.map +1 -0
- package/dist/lib/runtime-rules/library-variable-names.js +88 -0
- package/dist/lib/runtime-rules/library-variable-names.js.map +1 -0
- package/dist/lib/runtime-rules/no-child-implementation.d.ts +18 -0
- package/dist/lib/runtime-rules/no-child-implementation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-child-implementation.js +57 -0
- package/dist/lib/runtime-rules/no-child-implementation.js.map +1 -0
- package/dist/lib/runtime-rules/no-data-prop.d.ts +22 -0
- package/dist/lib/runtime-rules/no-data-prop.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-data-prop.js +111 -0
- package/dist/lib/runtime-rules/no-data-prop.js.map +1 -0
- package/dist/lib/runtime-rules/no-export-statements.d.ts +18 -0
- package/dist/lib/runtime-rules/no-export-statements.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-export-statements.js +143 -0
- package/dist/lib/runtime-rules/no-export-statements.js.map +1 -0
- package/dist/lib/runtime-rules/no-iife-wrapper.d.ts +18 -0
- package/dist/lib/runtime-rules/no-iife-wrapper.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-iife-wrapper.js +217 -0
- package/dist/lib/runtime-rules/no-iife-wrapper.js.map +1 -0
- package/dist/lib/runtime-rules/no-import-statements.d.ts +18 -0
- package/dist/lib/runtime-rules/no-import-statements.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-import-statements.js +65 -0
- package/dist/lib/runtime-rules/no-import-statements.js.map +1 -0
- package/dist/lib/runtime-rules/no-react-destructuring.d.ts +18 -0
- package/dist/lib/runtime-rules/no-react-destructuring.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-react-destructuring.js +60 -0
- package/dist/lib/runtime-rules/no-react-destructuring.js.map +1 -0
- package/dist/lib/runtime-rules/no-require-statements.d.ts +18 -0
- package/dist/lib/runtime-rules/no-require-statements.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-require-statements.js +109 -0
- package/dist/lib/runtime-rules/no-require-statements.js.map +1 -0
- package/dist/lib/runtime-rules/no-return-component.d.ts +18 -0
- package/dist/lib/runtime-rules/no-return-component.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-return-component.js +106 -0
- package/dist/lib/runtime-rules/no-return-component.js.map +1 -0
- package/dist/lib/runtime-rules/no-use-reducer.d.ts +19 -0
- package/dist/lib/runtime-rules/no-use-reducer.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-use-reducer.js +78 -0
- package/dist/lib/runtime-rules/no-use-reducer.js.map +1 -0
- package/dist/lib/runtime-rules/no-window-access.d.ts +23 -0
- package/dist/lib/runtime-rules/no-window-access.d.ts.map +1 -0
- package/dist/lib/runtime-rules/no-window-access.js +136 -0
- package/dist/lib/runtime-rules/no-window-access.js.map +1 -0
- package/dist/lib/runtime-rules/noisy-settings-updates.d.ts +18 -0
- package/dist/lib/runtime-rules/noisy-settings-updates.d.ts.map +1 -0
- package/dist/lib/runtime-rules/noisy-settings-updates.js +110 -0
- package/dist/lib/runtime-rules/noisy-settings-updates.js.map +1 -0
- package/dist/lib/runtime-rules/pass-standard-props.d.ts +19 -0
- package/dist/lib/runtime-rules/pass-standard-props.d.ts.map +1 -0
- package/dist/lib/runtime-rules/pass-standard-props.js +82 -0
- package/dist/lib/runtime-rules/pass-standard-props.js.map +1 -0
- package/dist/lib/runtime-rules/prefer-async-await.d.ts +17 -0
- package/dist/lib/runtime-rules/prefer-async-await.d.ts.map +1 -0
- package/dist/lib/runtime-rules/prefer-async-await.js +52 -0
- package/dist/lib/runtime-rules/prefer-async-await.js.map +1 -0
- package/dist/lib/runtime-rules/prefer-jsx-syntax.d.ts +17 -0
- package/dist/lib/runtime-rules/prefer-jsx-syntax.d.ts.map +1 -0
- package/dist/lib/runtime-rules/prefer-jsx-syntax.js +51 -0
- package/dist/lib/runtime-rules/prefer-jsx-syntax.js.map +1 -0
- package/dist/lib/runtime-rules/prop-state-sync.d.ts +19 -0
- package/dist/lib/runtime-rules/prop-state-sync.d.ts.map +1 -0
- package/dist/lib/runtime-rules/prop-state-sync.js +76 -0
- package/dist/lib/runtime-rules/prop-state-sync.js.map +1 -0
- package/dist/lib/runtime-rules/property-name-consistency.d.ts +20 -0
- package/dist/lib/runtime-rules/property-name-consistency.d.ts.map +1 -0
- package/dist/lib/runtime-rules/property-name-consistency.js +172 -0
- package/dist/lib/runtime-rules/property-name-consistency.js.map +1 -0
- package/dist/lib/runtime-rules/query-result-field-access-validation.d.ts +10 -0
- package/dist/lib/runtime-rules/query-result-field-access-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/query-result-field-access-validation.js +304 -0
- package/dist/lib/runtime-rules/query-result-field-access-validation.js.map +1 -0
- package/dist/lib/runtime-rules/react-component-naming.d.ts +19 -0
- package/dist/lib/runtime-rules/react-component-naming.d.ts.map +1 -0
- package/dist/lib/runtime-rules/react-component-naming.js +72 -0
- package/dist/lib/runtime-rules/react-component-naming.js.map +1 -0
- package/dist/lib/runtime-rules/react-hooks-rules.d.ts +27 -0
- package/dist/lib/runtime-rules/react-hooks-rules.d.ts.map +1 -0
- package/dist/lib/runtime-rules/react-hooks-rules.js +223 -0
- package/dist/lib/runtime-rules/react-hooks-rules.js.map +1 -0
- package/dist/lib/runtime-rules/required-queries-not-called.d.ts +19 -0
- package/dist/lib/runtime-rules/required-queries-not-called.d.ts.map +1 -0
- package/dist/lib/runtime-rules/required-queries-not-called.js +146 -0
- package/dist/lib/runtime-rules/required-queries-not-called.js.map +1 -0
- package/dist/lib/runtime-rules/runquery-call-validation.d.ts +11 -0
- package/dist/lib/runtime-rules/runquery-call-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/runquery-call-validation.js +886 -0
- package/dist/lib/runtime-rules/runquery-call-validation.js.map +1 -0
- package/dist/lib/runtime-rules/runview-call-validation.d.ts +10 -0
- package/dist/lib/runtime-rules/runview-call-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/runview-call-validation.js +336 -0
- package/dist/lib/runtime-rules/runview-call-validation.js.map +1 -0
- package/dist/lib/runtime-rules/saved-user-settings-pattern.d.ts +19 -0
- package/dist/lib/runtime-rules/saved-user-settings-pattern.d.ts.map +1 -0
- package/dist/lib/runtime-rules/saved-user-settings-pattern.js +90 -0
- package/dist/lib/runtime-rules/saved-user-settings-pattern.js.map +1 -0
- package/dist/lib/runtime-rules/search-availability-check.d.ts +9 -0
- package/dist/lib/runtime-rules/search-availability-check.d.ts.map +1 -0
- package/dist/lib/runtime-rules/search-availability-check.js +220 -0
- package/dist/lib/runtime-rules/search-availability-check.js.map +1 -0
- package/dist/lib/runtime-rules/search-call-validation.d.ts +9 -0
- package/dist/lib/runtime-rules/search-call-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/search-call-validation.js +336 -0
- package/dist/lib/runtime-rules/search-call-validation.js.map +1 -0
- package/dist/lib/runtime-rules/server-reload-on-client-operation.d.ts +18 -0
- package/dist/lib/runtime-rules/server-reload-on-client-operation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/server-reload-on-client-operation.js +107 -0
- package/dist/lib/runtime-rules/server-reload-on-client-operation.js.map +1 -0
- package/dist/lib/runtime-rules/single-function-only.d.ts +18 -0
- package/dist/lib/runtime-rules/single-function-only.d.ts.map +1 -0
- package/dist/lib/runtime-rules/single-function-only.js +103 -0
- package/dist/lib/runtime-rules/single-function-only.js.map +1 -0
- package/dist/lib/runtime-rules/string-replace-all-occurrences.d.ts +19 -0
- package/dist/lib/runtime-rules/string-replace-all-occurrences.d.ts.map +1 -0
- package/dist/lib/runtime-rules/string-replace-all-occurrences.js +109 -0
- package/dist/lib/runtime-rules/string-replace-all-occurrences.js.map +1 -0
- package/dist/lib/runtime-rules/string-template-validation.d.ts +22 -0
- package/dist/lib/runtime-rules/string-template-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/string-template-validation.js +163 -0
- package/dist/lib/runtime-rules/string-template-validation.js.map +1 -0
- package/dist/lib/runtime-rules/styles-validation.d.ts +10 -0
- package/dist/lib/runtime-rules/styles-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/styles-validation.js +153 -0
- package/dist/lib/runtime-rules/styles-validation.js.map +1 -0
- package/dist/lib/runtime-rules/type-inference-errors.d.ts +23 -0
- package/dist/lib/runtime-rules/type-inference-errors.d.ts.map +1 -0
- package/dist/lib/runtime-rules/type-inference-errors.js +53 -0
- package/dist/lib/runtime-rules/type-inference-errors.js.map +1 -0
- package/dist/lib/runtime-rules/type-mismatch-operation.d.ts +23 -0
- package/dist/lib/runtime-rules/type-mismatch-operation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/type-mismatch-operation.js +141 -0
- package/dist/lib/runtime-rules/type-mismatch-operation.js.map +1 -0
- package/dist/lib/runtime-rules/undefined-component-usage.d.ts +20 -0
- package/dist/lib/runtime-rules/undefined-component-usage.d.ts.map +1 -0
- package/dist/lib/runtime-rules/undefined-component-usage.js +138 -0
- package/dist/lib/runtime-rules/undefined-component-usage.js.map +1 -0
- package/dist/lib/runtime-rules/undefined-jsx-component.d.ts +25 -0
- package/dist/lib/runtime-rules/undefined-jsx-component.d.ts.map +1 -0
- package/dist/lib/runtime-rules/undefined-jsx-component.js +269 -0
- package/dist/lib/runtime-rules/undefined-jsx-component.js.map +1 -0
- package/dist/lib/runtime-rules/unsafe-array-operations.d.ts +25 -0
- package/dist/lib/runtime-rules/unsafe-array-operations.d.ts.map +1 -0
- package/dist/lib/runtime-rules/unsafe-array-operations.js +347 -0
- package/dist/lib/runtime-rules/unsafe-array-operations.js.map +1 -0
- package/dist/lib/runtime-rules/unsafe-formatting-methods.d.ts +24 -0
- package/dist/lib/runtime-rules/unsafe-formatting-methods.d.ts.map +1 -0
- package/dist/lib/runtime-rules/unsafe-formatting-methods.js +277 -0
- package/dist/lib/runtime-rules/unsafe-formatting-methods.js.map +1 -0
- package/dist/lib/runtime-rules/unused-component-dependencies.d.ts +19 -0
- package/dist/lib/runtime-rules/unused-component-dependencies.d.ts.map +1 -0
- package/dist/lib/runtime-rules/unused-component-dependencies.js +90 -0
- package/dist/lib/runtime-rules/unused-component-dependencies.js.map +1 -0
- package/dist/lib/runtime-rules/unused-libraries.d.ts +19 -0
- package/dist/lib/runtime-rules/unused-libraries.d.ts.map +1 -0
- package/dist/lib/runtime-rules/unused-libraries.js +127 -0
- package/dist/lib/runtime-rules/unused-libraries.js.map +1 -0
- package/dist/lib/runtime-rules/use-function-declaration.d.ts +18 -0
- package/dist/lib/runtime-rules/use-function-declaration.d.ts.map +1 -0
- package/dist/lib/runtime-rules/use-function-declaration.js +127 -0
- package/dist/lib/runtime-rules/use-function-declaration.js.map +1 -0
- package/dist/lib/runtime-rules/use-unwrap-components.d.ts +19 -0
- package/dist/lib/runtime-rules/use-unwrap-components.d.ts.map +1 -0
- package/dist/lib/runtime-rules/use-unwrap-components.js +84 -0
- package/dist/lib/runtime-rules/use-unwrap-components.js.map +1 -0
- package/dist/lib/runtime-rules/useeffect-unstable-dependencies.d.ts +23 -0
- package/dist/lib/runtime-rules/useeffect-unstable-dependencies.d.ts.map +1 -0
- package/dist/lib/runtime-rules/useeffect-unstable-dependencies.js +215 -0
- package/dist/lib/runtime-rules/useeffect-unstable-dependencies.js.map +1 -0
- package/dist/lib/runtime-rules/utilities-api-validation.d.ts +24 -0
- package/dist/lib/runtime-rules/utilities-api-validation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/utilities-api-validation.js +121 -0
- package/dist/lib/runtime-rules/utilities-api-validation.js.map +1 -0
- package/dist/lib/runtime-rules/utilities-no-direct-instantiation.d.ts +20 -0
- package/dist/lib/runtime-rules/utilities-no-direct-instantiation.d.ts.map +1 -0
- package/dist/lib/runtime-rules/utilities-no-direct-instantiation.js +58 -0
- package/dist/lib/runtime-rules/utilities-no-direct-instantiation.js.map +1 -0
- package/dist/lib/runtime-rules/validate-component-references.d.ts +19 -0
- package/dist/lib/runtime-rules/validate-component-references.d.ts.map +1 -0
- package/dist/lib/runtime-rules/validate-component-references.js +255 -0
- package/dist/lib/runtime-rules/validate-component-references.js.map +1 -0
- package/dist/lib/schema-validation/component-prop-rule.d.ts +125 -0
- package/dist/lib/schema-validation/component-prop-rule.d.ts.map +1 -0
- package/dist/lib/schema-validation/component-prop-rule.js +630 -0
- package/dist/lib/schema-validation/component-prop-rule.js.map +1 -0
- package/dist/lib/schema-validation/index.d.ts +26 -0
- package/dist/lib/schema-validation/index.d.ts.map +1 -0
- package/dist/lib/schema-validation/index.js +26 -0
- package/dist/lib/schema-validation/index.js.map +1 -0
- package/dist/lib/schema-validation/semantic-validators/index.d.ts +23 -0
- package/dist/lib/schema-validation/semantic-validators/index.d.ts.map +1 -0
- package/dist/lib/schema-validation/semantic-validators/index.js +23 -0
- package/dist/lib/schema-validation/semantic-validators/index.js.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/required-when-validator.d.ts +2 -2
- package/dist/lib/schema-validation/semantic-validators/required-when-validator.d.ts.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/required-when-validator.js +3 -3
- package/dist/lib/schema-validation/semantic-validators/required-when-validator.js.map +1 -0
- package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.d.ts +122 -0
- package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.d.ts.map +1 -0
- package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.js +166 -0
- package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.js.map +1 -0
- package/dist/lib/{constraint-validators/base-constraint-validator.d.ts → schema-validation/semantic-validators/semantic-validator.d.ts} +12 -11
- package/dist/lib/schema-validation/semantic-validators/semantic-validator.d.ts.map +1 -0
- package/dist/lib/{constraint-validators/base-constraint-validator.js → schema-validation/semantic-validators/semantic-validator.js} +11 -10
- package/dist/lib/schema-validation/semantic-validators/semantic-validator.js.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/sql-where-clause-validator.d.ts +2 -2
- package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.d.ts.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/sql-where-clause-validator.js +8 -4
- package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.js.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/subset-of-entity-fields-validator.d.ts +2 -2
- package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.d.ts.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/subset-of-entity-fields-validator.js +3 -3
- package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.js.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/validation-context.d.ts +14 -5
- package/dist/lib/schema-validation/semantic-validators/validation-context.d.ts.map +1 -0
- package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/validation-context.js +1 -1
- package/dist/lib/schema-validation/semantic-validators/validation-context.js.map +1 -0
- package/dist/lib/type-context.d.ts.map +1 -1
- package/dist/lib/type-context.js +16 -1
- package/dist/lib/type-context.js.map +1 -1
- package/dist/lib/type-inference-engine.d.ts +13 -0
- package/dist/lib/type-inference-engine.d.ts.map +1 -1
- package/dist/lib/type-inference-engine.js +144 -22
- package/dist/lib/type-inference-engine.js.map +1 -1
- package/dist/lib/type-rules/type-compatibility-rule.d.ts +79 -0
- package/dist/lib/type-rules/type-compatibility-rule.d.ts.map +1 -0
- package/dist/lib/type-rules/type-compatibility-rule.js +211 -0
- package/dist/lib/type-rules/type-compatibility-rule.js.map +1 -0
- package/package.json +15 -11
- package/dist/lib/constraint-validators/base-constraint-validator.d.ts.map +0 -1
- package/dist/lib/constraint-validators/base-constraint-validator.js.map +0 -1
- package/dist/lib/constraint-validators/index.d.ts +0 -21
- package/dist/lib/constraint-validators/index.d.ts.map +0 -1
- package/dist/lib/constraint-validators/index.js +0 -21
- package/dist/lib/constraint-validators/index.js.map +0 -1
- package/dist/lib/constraint-validators/required-when-validator.d.ts.map +0 -1
- package/dist/lib/constraint-validators/required-when-validator.js.map +0 -1
- package/dist/lib/constraint-validators/sql-where-clause-validator.d.ts.map +0 -1
- package/dist/lib/constraint-validators/sql-where-clause-validator.js.map +0 -1
- package/dist/lib/constraint-validators/subset-of-entity-fields-validator.d.ts.map +0 -1
- package/dist/lib/constraint-validators/subset-of-entity-fields-validator.js.map +0 -1
- package/dist/lib/constraint-validators/validation-context.d.ts.map +0 -1
- package/dist/lib/constraint-validators/validation-context.js.map +0 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Validation Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive schema validation for interactive components,
|
|
5
|
+
* including semantic validation of prop values against business rules and constraints.
|
|
6
|
+
*
|
|
7
|
+
* Key Components:
|
|
8
|
+
* - **Semantic Validators**: Check business rules beyond type safety
|
|
9
|
+
* (e.g., field names exist on entities, SQL clauses are valid)
|
|
10
|
+
* - **Validation Context**: Provides access to component spec, entities, queries
|
|
11
|
+
* - **Validator Registry**: Plugin system for registering custom validators
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { SemanticValidator, ValidationContext } from './schema-validation';
|
|
16
|
+
*
|
|
17
|
+
* // Get a validator from the registry
|
|
18
|
+
* const registry = SemanticValidatorRegistry.getInstance();
|
|
19
|
+
* const validator = registry.get('subset-of-entity-fields');
|
|
20
|
+
*
|
|
21
|
+
* // Run validation
|
|
22
|
+
* const violations = validator.validate(context, constraint);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export * from './semantic-validators/index.js';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/schema-validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Validation Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive schema validation for interactive components,
|
|
5
|
+
* including semantic validation of prop values against business rules and constraints.
|
|
6
|
+
*
|
|
7
|
+
* Key Components:
|
|
8
|
+
* - **Semantic Validators**: Check business rules beyond type safety
|
|
9
|
+
* (e.g., field names exist on entities, SQL clauses are valid)
|
|
10
|
+
* - **Validation Context**: Provides access to component spec, entities, queries
|
|
11
|
+
* - **Validator Registry**: Plugin system for registering custom validators
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { SemanticValidator, ValidationContext } from './schema-validation';
|
|
16
|
+
*
|
|
17
|
+
* // Get a validator from the registry
|
|
18
|
+
* const registry = SemanticValidatorRegistry.getInstance();
|
|
19
|
+
* const validator = registry.get('subset-of-entity-fields');
|
|
20
|
+
*
|
|
21
|
+
* // Run validation
|
|
22
|
+
* const violations = validator.validate(context, constraint);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export * from './semantic-validators/index.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/schema-validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Validators Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides the infrastructure for semantic validation of component props.
|
|
5
|
+
* Semantic validators check business rules and constraints beyond basic type checking,
|
|
6
|
+
* such as verifying field names exist on entities or SQL clauses reference valid columns.
|
|
7
|
+
*
|
|
8
|
+
* Validators use MemberJunction's @RegisterClass decorator for automatic discovery.
|
|
9
|
+
* Each validator is registered with SemanticValidator and its constraint type as the key.
|
|
10
|
+
*
|
|
11
|
+
* Key exports:
|
|
12
|
+
* - SemanticValidator: Abstract base class for all semantic validators
|
|
13
|
+
* - ValidationContext: Context passed to validators
|
|
14
|
+
* - Entity/Query metadata types
|
|
15
|
+
* - Concrete validator implementations (auto-registered via @RegisterClass)
|
|
16
|
+
*/
|
|
17
|
+
export * from './semantic-validator.js';
|
|
18
|
+
export * from './semantic-validator-registry.js';
|
|
19
|
+
export * from './validation-context.js';
|
|
20
|
+
export * from './subset-of-entity-fields-validator.js';
|
|
21
|
+
export * from './sql-where-clause-validator.js';
|
|
22
|
+
export * from './required-when-validator.js';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Validators Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides the infrastructure for semantic validation of component props.
|
|
5
|
+
* Semantic validators check business rules and constraints beyond basic type checking,
|
|
6
|
+
* such as verifying field names exist on entities or SQL clauses reference valid columns.
|
|
7
|
+
*
|
|
8
|
+
* Validators use MemberJunction's @RegisterClass decorator for automatic discovery.
|
|
9
|
+
* Each validator is registered with SemanticValidator and its constraint type as the key.
|
|
10
|
+
*
|
|
11
|
+
* Key exports:
|
|
12
|
+
* - SemanticValidator: Abstract base class for all semantic validators
|
|
13
|
+
* - ValidationContext: Context passed to validators
|
|
14
|
+
* - Entity/Query metadata types
|
|
15
|
+
* - Concrete validator implementations (auto-registered via @RegisterClass)
|
|
16
|
+
*/
|
|
17
|
+
export * from './semantic-validator.js';
|
|
18
|
+
export * from './semantic-validator-registry.js';
|
|
19
|
+
export * from './validation-context.js';
|
|
20
|
+
export * from './subset-of-entity-fields-validator.js';
|
|
21
|
+
export * from './sql-where-clause-validator.js';
|
|
22
|
+
export * from './required-when-validator.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC"}
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
import { PropertyConstraint, ConstraintViolation } from '@memberjunction/interactive-component-types';
|
|
24
|
-
import {
|
|
24
|
+
import { SemanticValidator } from './semantic-validator.js';
|
|
25
25
|
import { ValidationContext } from './validation-context.js';
|
|
26
|
-
export declare class RequiredWhenValidator extends
|
|
26
|
+
export declare class RequiredWhenValidator extends SemanticValidator {
|
|
27
27
|
/**
|
|
28
28
|
* Get description of this validator
|
|
29
29
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"required-when-validator.d.ts","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/required-when-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAEtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBACa,qBAAsB,SAAQ,iBAAiB;IAC1D;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,GAAG,mBAAmB,EAAE;CAmD5F"}
|
|
@@ -27,8 +27,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
27
27
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
28
28
|
};
|
|
29
29
|
import { RegisterClass } from '@memberjunction/global';
|
|
30
|
-
import {
|
|
31
|
-
let RequiredWhenValidator = class RequiredWhenValidator extends
|
|
30
|
+
import { SemanticValidator } from './semantic-validator.js';
|
|
31
|
+
let RequiredWhenValidator = class RequiredWhenValidator extends SemanticValidator {
|
|
32
32
|
/**
|
|
33
33
|
* Get description of this validator
|
|
34
34
|
*/
|
|
@@ -88,7 +88,7 @@ let RequiredWhenValidator = class RequiredWhenValidator extends BaseConstraintVa
|
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
90
|
RequiredWhenValidator = __decorate([
|
|
91
|
-
RegisterClass(
|
|
91
|
+
RegisterClass(SemanticValidator, 'required-when')
|
|
92
92
|
], RequiredWhenValidator);
|
|
93
93
|
export { RequiredWhenValidator };
|
|
94
94
|
//# sourceMappingURL=required-when-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"required-when-validator.js","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/required-when-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIlD,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,iBAAiB;IAC1D;;OAEG;IACH,cAAc;QACZ,OAAO,wGAAwG,CAAC;IAClH,CAAC;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAA0B,EAAE,UAA8B;QACjE,MAAM,UAAU,GAA0B,EAAE,CAAC;QAE7C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC,CAAC,sCAAsC;QAC3D,CAAC;QAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE1E,2DAA2D;QAC3D,IAAI,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACpE,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC;QAC/C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,wDAAwD,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YAC7F,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,yBAAyB;QACzB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACvC,mCAAmC;YACnC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,SAAS,IAAI,EAAE,KAAK,CAAC,CAAC;YACjF,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,yDAAyD;QACzD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS;gBACpC,OAAO,CAAC,aAAa,KAAK,IAAI;gBAC9B,OAAO,CAAC,aAAa,KAAK,EAAE,CAAC;YAE7C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa;oBACtC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBAC3F,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,qBAAqB,UAAU,CAAC,SAAS,OAAO,kBAAkB,EAAE,CAAC;gBAEhG,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,OAAO,EAAE,MAAM,CAAC,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAA;AArEY,qBAAqB;IADjC,aAAa,CAAC,iBAAiB,EAAE,eAAe,CAAC;GACrC,qBAAqB,CAqEjC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Validator Registry
|
|
3
|
+
*
|
|
4
|
+
* Centralized registry for semantic validators that provides a plugin system
|
|
5
|
+
* for registering and retrieving validators by their constraint type.
|
|
6
|
+
*
|
|
7
|
+
* This registry uses the singleton pattern to ensure validators are only
|
|
8
|
+
* registered once across the application.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Get the singleton instance
|
|
13
|
+
* const registry = SemanticValidatorRegistry.getInstance();
|
|
14
|
+
*
|
|
15
|
+
* // Register a custom validator
|
|
16
|
+
* registry.register(new MyCustomValidator());
|
|
17
|
+
*
|
|
18
|
+
* // Retrieve a validator by type
|
|
19
|
+
* const validator = registry.get('subset-of-entity-fields');
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Built-in validators are automatically registered on first access:
|
|
23
|
+
* - subset-of-entity-fields
|
|
24
|
+
* - sql-where-clause
|
|
25
|
+
* - required-when
|
|
26
|
+
*/
|
|
27
|
+
import { SemanticValidator } from './semantic-validator.js';
|
|
28
|
+
/**
|
|
29
|
+
* Registry for semantic validators
|
|
30
|
+
*
|
|
31
|
+
* Provides plugin system for validation constraints with singleton pattern
|
|
32
|
+
* to ensure validators are only instantiated once.
|
|
33
|
+
*/
|
|
34
|
+
export declare class SemanticValidatorRegistry {
|
|
35
|
+
private static instance;
|
|
36
|
+
private validators;
|
|
37
|
+
/**
|
|
38
|
+
* Private constructor to enforce singleton pattern
|
|
39
|
+
*/
|
|
40
|
+
private constructor();
|
|
41
|
+
/**
|
|
42
|
+
* Get the singleton instance of the registry
|
|
43
|
+
*
|
|
44
|
+
* @returns The singleton registry instance
|
|
45
|
+
*/
|
|
46
|
+
static getInstance(): SemanticValidatorRegistry;
|
|
47
|
+
/**
|
|
48
|
+
* Register built-in semantic validators
|
|
49
|
+
*
|
|
50
|
+
* Called automatically during construction.
|
|
51
|
+
* Registers the core validators that ship with the linter.
|
|
52
|
+
*/
|
|
53
|
+
private registerBuiltInValidators;
|
|
54
|
+
/**
|
|
55
|
+
* Register a semantic validator
|
|
56
|
+
*
|
|
57
|
+
* Validators are keyed by the constraint type they handle.
|
|
58
|
+
* If a validator for the same type already exists, it will be overridden.
|
|
59
|
+
*
|
|
60
|
+
* @param validator - Validator instance to register
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const registry = SemanticValidatorRegistry.getInstance();
|
|
65
|
+
* registry.register(new MyCustomValidator());
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
register(validator: SemanticValidator): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get validator type from validator instance
|
|
71
|
+
*
|
|
72
|
+
* Extracts the constraint type by checking the @RegisterClass metadata.
|
|
73
|
+
* Falls back to deriving from class name if metadata is not available.
|
|
74
|
+
*
|
|
75
|
+
* @param validator - Validator instance
|
|
76
|
+
* @returns Constraint type string
|
|
77
|
+
*/
|
|
78
|
+
private getValidatorType;
|
|
79
|
+
/**
|
|
80
|
+
* Get a validator by constraint type
|
|
81
|
+
*
|
|
82
|
+
* @param type - Constraint type (e.g., 'subset-of-entity-fields')
|
|
83
|
+
* @returns Validator instance, or undefined if not registered
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* const validator = registry.get('subset-of-entity-fields');
|
|
88
|
+
* if (validator) {
|
|
89
|
+
* const violations = validator.validate(context, constraint);
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
get(type: string): SemanticValidator | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Get all registered validators
|
|
96
|
+
*
|
|
97
|
+
* @returns Map of constraint type to validator instance
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const allValidators = registry.getAll();
|
|
102
|
+
* for (const [type, validator] of allValidators) {
|
|
103
|
+
* console.log(`${type}: ${validator.getDescription()}`);
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
getAll(): Map<string, SemanticValidator>;
|
|
108
|
+
/**
|
|
109
|
+
* Check if a validator is registered for a constraint type
|
|
110
|
+
*
|
|
111
|
+
* @param type - Constraint type to check
|
|
112
|
+
* @returns True if a validator is registered
|
|
113
|
+
*/
|
|
114
|
+
has(type: string): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Get list of all registered constraint types
|
|
117
|
+
*
|
|
118
|
+
* @returns Array of constraint type strings
|
|
119
|
+
*/
|
|
120
|
+
getTypes(): string[];
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=semantic-validator-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-validator-registry.d.ts","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/semantic-validator-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKzD;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,UAAU,CAAiC;IAEnD;;OAEG;IACH,OAAO;IAKP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAMjC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAQ5C;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIhD;;;;;;;;;;;;OAYG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAIxC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;;;OAIG;IACH,QAAQ,IAAI,MAAM,EAAE;CAGrB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Validator Registry
|
|
3
|
+
*
|
|
4
|
+
* Centralized registry for semantic validators that provides a plugin system
|
|
5
|
+
* for registering and retrieving validators by their constraint type.
|
|
6
|
+
*
|
|
7
|
+
* This registry uses the singleton pattern to ensure validators are only
|
|
8
|
+
* registered once across the application.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Get the singleton instance
|
|
13
|
+
* const registry = SemanticValidatorRegistry.getInstance();
|
|
14
|
+
*
|
|
15
|
+
* // Register a custom validator
|
|
16
|
+
* registry.register(new MyCustomValidator());
|
|
17
|
+
*
|
|
18
|
+
* // Retrieve a validator by type
|
|
19
|
+
* const validator = registry.get('subset-of-entity-fields');
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Built-in validators are automatically registered on first access:
|
|
23
|
+
* - subset-of-entity-fields
|
|
24
|
+
* - sql-where-clause
|
|
25
|
+
* - required-when
|
|
26
|
+
*/
|
|
27
|
+
import { SubsetOfEntityFieldsValidator } from './subset-of-entity-fields-validator.js';
|
|
28
|
+
import { SqlWhereClauseValidator } from './sql-where-clause-validator.js';
|
|
29
|
+
import { RequiredWhenValidator } from './required-when-validator.js';
|
|
30
|
+
/**
|
|
31
|
+
* Registry for semantic validators
|
|
32
|
+
*
|
|
33
|
+
* Provides plugin system for validation constraints with singleton pattern
|
|
34
|
+
* to ensure validators are only instantiated once.
|
|
35
|
+
*/
|
|
36
|
+
export class SemanticValidatorRegistry {
|
|
37
|
+
/**
|
|
38
|
+
* Private constructor to enforce singleton pattern
|
|
39
|
+
*/
|
|
40
|
+
constructor() {
|
|
41
|
+
this.validators = new Map();
|
|
42
|
+
this.registerBuiltInValidators();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the singleton instance of the registry
|
|
46
|
+
*
|
|
47
|
+
* @returns The singleton registry instance
|
|
48
|
+
*/
|
|
49
|
+
static getInstance() {
|
|
50
|
+
if (!SemanticValidatorRegistry.instance) {
|
|
51
|
+
SemanticValidatorRegistry.instance = new SemanticValidatorRegistry();
|
|
52
|
+
}
|
|
53
|
+
return SemanticValidatorRegistry.instance;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Register built-in semantic validators
|
|
57
|
+
*
|
|
58
|
+
* Called automatically during construction.
|
|
59
|
+
* Registers the core validators that ship with the linter.
|
|
60
|
+
*/
|
|
61
|
+
registerBuiltInValidators() {
|
|
62
|
+
this.register(new SubsetOfEntityFieldsValidator());
|
|
63
|
+
this.register(new SqlWhereClauseValidator());
|
|
64
|
+
this.register(new RequiredWhenValidator());
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Register a semantic validator
|
|
68
|
+
*
|
|
69
|
+
* Validators are keyed by the constraint type they handle.
|
|
70
|
+
* If a validator for the same type already exists, it will be overridden.
|
|
71
|
+
*
|
|
72
|
+
* @param validator - Validator instance to register
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const registry = SemanticValidatorRegistry.getInstance();
|
|
77
|
+
* registry.register(new MyCustomValidator());
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
register(validator) {
|
|
81
|
+
// Get the constraint type from the validator's @RegisterClass decorator
|
|
82
|
+
// For now, we extract it from the class name by convention
|
|
83
|
+
// In the future, this could be read from metadata
|
|
84
|
+
const type = this.getValidatorType(validator);
|
|
85
|
+
this.validators.set(type, validator);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get validator type from validator instance
|
|
89
|
+
*
|
|
90
|
+
* Extracts the constraint type by checking the @RegisterClass metadata.
|
|
91
|
+
* Falls back to deriving from class name if metadata is not available.
|
|
92
|
+
*
|
|
93
|
+
* @param validator - Validator instance
|
|
94
|
+
* @returns Constraint type string
|
|
95
|
+
*/
|
|
96
|
+
getValidatorType(validator) {
|
|
97
|
+
// Type is stored in MJGlobal.Instance.ClassFactory during @RegisterClass
|
|
98
|
+
// For built-in validators, we know the types:
|
|
99
|
+
if (validator instanceof SubsetOfEntityFieldsValidator) {
|
|
100
|
+
return 'subset-of-entity-fields';
|
|
101
|
+
}
|
|
102
|
+
if (validator instanceof SqlWhereClauseValidator) {
|
|
103
|
+
return 'sql-where-clause';
|
|
104
|
+
}
|
|
105
|
+
if (validator instanceof RequiredWhenValidator) {
|
|
106
|
+
return 'required-when';
|
|
107
|
+
}
|
|
108
|
+
// Fallback: derive from class name (e.g., SubsetOfEntityFieldsValidator -> subset-of-entity-fields)
|
|
109
|
+
const className = validator.constructor.name;
|
|
110
|
+
return className
|
|
111
|
+
.replace(/Validator$/, '') // Remove "Validator" suffix
|
|
112
|
+
.replace(/([A-Z])/g, (match, p1, offset) => (offset > 0 ? '-' : '') + p1.toLowerCase())
|
|
113
|
+
.replace(/^-/, ''); // Remove leading dash if present
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get a validator by constraint type
|
|
117
|
+
*
|
|
118
|
+
* @param type - Constraint type (e.g., 'subset-of-entity-fields')
|
|
119
|
+
* @returns Validator instance, or undefined if not registered
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const validator = registry.get('subset-of-entity-fields');
|
|
124
|
+
* if (validator) {
|
|
125
|
+
* const violations = validator.validate(context, constraint);
|
|
126
|
+
* }
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
get(type) {
|
|
130
|
+
return this.validators.get(type);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get all registered validators
|
|
134
|
+
*
|
|
135
|
+
* @returns Map of constraint type to validator instance
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const allValidators = registry.getAll();
|
|
140
|
+
* for (const [type, validator] of allValidators) {
|
|
141
|
+
* console.log(`${type}: ${validator.getDescription()}`);
|
|
142
|
+
* }
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
getAll() {
|
|
146
|
+
return new Map(this.validators);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Check if a validator is registered for a constraint type
|
|
150
|
+
*
|
|
151
|
+
* @param type - Constraint type to check
|
|
152
|
+
* @returns True if a validator is registered
|
|
153
|
+
*/
|
|
154
|
+
has(type) {
|
|
155
|
+
return this.validators.has(type);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get list of all registered constraint types
|
|
159
|
+
*
|
|
160
|
+
* @returns Array of constraint type strings
|
|
161
|
+
*/
|
|
162
|
+
getTypes() {
|
|
163
|
+
return Array.from(this.validators.keys());
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=semantic-validator-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-validator-registry.js","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/semantic-validator-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IAIpC;;OAEG;IACH;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YACxC,yBAAyB,CAAC,QAAQ,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACvE,CAAC;QACD,OAAO,yBAAyB,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACK,yBAAyB;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,6BAA6B,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,SAA4B;QACnC,wEAAwE;QACxE,2DAA2D;QAC3D,kDAAkD;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACK,gBAAgB,CAAC,SAA4B;QACnD,yEAAyE;QACzE,8CAA8C;QAC9C,IAAI,SAAS,YAAY,6BAA6B,EAAE,CAAC;YACvD,OAAO,yBAAyB,CAAC;QACnC,CAAC;QACD,IAAI,SAAS,YAAY,uBAAuB,EAAE,CAAC;YACjD,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QACD,IAAI,SAAS,YAAY,qBAAqB,EAAE,CAAC;YAC/C,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,oGAAoG;QACpG,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;QAC7C,OAAO,SAAS;aACb,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,4BAA4B;aACtD,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;aACtF,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;IACzD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM;QACJ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Semantic Validator
|
|
3
3
|
*
|
|
4
|
-
* Abstract base class for all
|
|
5
|
-
*
|
|
4
|
+
* Abstract base class for all semantic validators.
|
|
5
|
+
* Semantic validators implement business logic for validating prop values at lint-time.
|
|
6
|
+
* They check semantic correctness beyond type checking (e.g., field names exist on entities).
|
|
6
7
|
*
|
|
7
8
|
* Key Concepts:
|
|
8
9
|
* - **Validators = Code**: Implemented as TypeScript classes
|
|
@@ -12,8 +13,8 @@
|
|
|
12
13
|
* Example:
|
|
13
14
|
* ```typescript
|
|
14
15
|
* // Validator implementation (code)
|
|
15
|
-
* class SubsetOfEntityFieldsValidator extends
|
|
16
|
-
*
|
|
16
|
+
* class SubsetOfEntityFieldsValidator extends SemanticValidator {
|
|
17
|
+
* validate(context, constraint) {
|
|
17
18
|
* // Implementation...
|
|
18
19
|
* }
|
|
19
20
|
* }
|
|
@@ -27,13 +28,13 @@
|
|
|
27
28
|
*/
|
|
28
29
|
import { PropertyConstraint, ConstraintViolation } from '@memberjunction/interactive-component-types';
|
|
29
30
|
import { ValidationContext } from './validation-context.js';
|
|
30
|
-
import { DynamicValue } from '
|
|
31
|
+
import { DynamicValue } from '../../prop-value-extractor.js';
|
|
31
32
|
/**
|
|
32
|
-
* Abstract base class for
|
|
33
|
+
* Abstract base class for semantic validators
|
|
33
34
|
*
|
|
34
|
-
* All
|
|
35
|
+
* All semantic validators must extend this class and implement the validate() method.
|
|
35
36
|
*/
|
|
36
|
-
export declare abstract class
|
|
37
|
+
export declare abstract class SemanticValidator {
|
|
37
38
|
/**
|
|
38
39
|
* Validate a prop value against a constraint
|
|
39
40
|
*
|
|
@@ -50,7 +51,7 @@ export declare abstract class BaseConstraintValidator {
|
|
|
50
51
|
*
|
|
51
52
|
* @example
|
|
52
53
|
* ```typescript
|
|
53
|
-
* class MyValidator extends
|
|
54
|
+
* class MyValidator extends SemanticValidator {
|
|
54
55
|
* validate(context: ValidationContext, constraint: PropertyConstraint): ConstraintViolation[] {
|
|
55
56
|
* const violations: ConstraintViolation[] = [];
|
|
56
57
|
*
|
|
@@ -256,4 +257,4 @@ export declare abstract class BaseConstraintValidator {
|
|
|
256
257
|
*/
|
|
257
258
|
protected includesCaseInsensitive(arr: string[], value: string): boolean;
|
|
258
259
|
}
|
|
259
|
-
//# sourceMappingURL=
|
|
260
|
+
//# sourceMappingURL=semantic-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-validator.d.ts","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/semantic-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAsB,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9E;;;;GAIG;AACH,8BAAsB,iBAAiB;IACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,QAAQ,CAAC,QAAQ,CACf,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,kBAAkB,GAC7B,mBAAmB,EAAE;IAExB;;;;;;;OAOG;IACH,OAAO,IAAI,MAAM;IAIjB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAMjC;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,YAAY;IAI3D;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,SAAS,CAAC,eAAe,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAc,EACzD,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,mBAAmB;IAUtB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,kBAAkB,GAC7B,GAAG;IAkBN;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM;IAcvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,SAAS,CAAC,kBAAkB,CAC1B,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,iBAAiB,EAC1B,cAAc,EAAE,MAAM,EACtB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GACrC,MAAM;IAwBT;;;;;;;;OAQG;IACH,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IA+B3D;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,GAAE,MAAU,EACtB,WAAW,GAAE,MAAU,GACtB,MAAM,EAAE;IAYX;;;;;;OAMG;IACH,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAI9D;;;;;;OAMG;IACH,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAGzE"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Semantic Validator
|
|
3
3
|
*
|
|
4
|
-
* Abstract base class for all
|
|
5
|
-
*
|
|
4
|
+
* Abstract base class for all semantic validators.
|
|
5
|
+
* Semantic validators implement business logic for validating prop values at lint-time.
|
|
6
|
+
* They check semantic correctness beyond type checking (e.g., field names exist on entities).
|
|
6
7
|
*
|
|
7
8
|
* Key Concepts:
|
|
8
9
|
* - **Validators = Code**: Implemented as TypeScript classes
|
|
@@ -12,8 +13,8 @@
|
|
|
12
13
|
* Example:
|
|
13
14
|
* ```typescript
|
|
14
15
|
* // Validator implementation (code)
|
|
15
|
-
* class SubsetOfEntityFieldsValidator extends
|
|
16
|
-
*
|
|
16
|
+
* class SubsetOfEntityFieldsValidator extends SemanticValidator {
|
|
17
|
+
* validate(context, constraint) {
|
|
17
18
|
* // Implementation...
|
|
18
19
|
* }
|
|
19
20
|
* }
|
|
@@ -25,13 +26,13 @@
|
|
|
25
26
|
* }
|
|
26
27
|
* ```
|
|
27
28
|
*/
|
|
28
|
-
import { PropValueExtractor } from '
|
|
29
|
+
import { PropValueExtractor } from '../../prop-value-extractor.js';
|
|
29
30
|
/**
|
|
30
|
-
* Abstract base class for
|
|
31
|
+
* Abstract base class for semantic validators
|
|
31
32
|
*
|
|
32
|
-
* All
|
|
33
|
+
* All semantic validators must extend this class and implement the validate() method.
|
|
33
34
|
*/
|
|
34
|
-
export class
|
|
35
|
+
export class SemanticValidator {
|
|
35
36
|
/**
|
|
36
37
|
* Get the name of this validator
|
|
37
38
|
*
|
|
@@ -297,4 +298,4 @@ export class BaseConstraintValidator {
|
|
|
297
298
|
return arr.some((item) => this.equalsCaseInsensitive(item, value));
|
|
298
299
|
}
|
|
299
300
|
}
|
|
300
|
-
//# sourceMappingURL=
|
|
301
|
+
//# sourceMappingURL=semantic-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-validator.js","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/semantic-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
38
|
import { PropertyConstraint, ConstraintViolation } from '@memberjunction/interactive-component-types';
|
|
39
|
-
import {
|
|
39
|
+
import { SemanticValidator } from './semantic-validator.js';
|
|
40
40
|
import { ValidationContext } from './validation-context.js';
|
|
41
41
|
/**
|
|
42
42
|
* Validates SQL WHERE clauses for syntax and field references
|
|
@@ -51,7 +51,7 @@ import { ValidationContext } from './validation-context.js';
|
|
|
51
51
|
* **Implementation**: Uses SQLParser for accurate AST-based validation
|
|
52
52
|
* with regex fallback for edge cases.
|
|
53
53
|
*/
|
|
54
|
-
export declare class SqlWhereClauseValidator extends
|
|
54
|
+
export declare class SqlWhereClauseValidator extends SemanticValidator {
|
|
55
55
|
/**
|
|
56
56
|
* SQL keywords that are not field references
|
|
57
57
|
* Used in regex fallback when AST parsing fails
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-where-clause-validator.d.ts","sourceRoot":"","sources":["../../../../src/lib/schema-validation/semantic-validators/sql-where-clause-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AASzD;;;;;;;;;;;;GAYG;AACH,qBACa,uBAAwB,SAAQ,iBAAiB;IAC5D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAajC;IAEH;;;;;;OAMG;IACH,QAAQ,CACN,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,kBAAkB,GAC7B,mBAAmB,EAAE;IA0ExB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,eAAe;IAiHvB;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IA6GzB;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
|
|
@@ -43,8 +43,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
43
43
|
};
|
|
44
44
|
var SqlWhereClauseValidator_1;
|
|
45
45
|
import { RegisterClass } from '@memberjunction/global';
|
|
46
|
-
import {
|
|
46
|
+
import { SemanticValidator } from './semantic-validator.js';
|
|
47
47
|
import { SQLParser } from '@memberjunction/sql-parser';
|
|
48
|
+
import { GetDialect } from '@memberjunction/sql-dialect';
|
|
49
|
+
/** Default SQL dialect when none is provided via ValidationContext */
|
|
50
|
+
const DEFAULT_DIALECT = GetDialect('sqlserver');
|
|
48
51
|
/**
|
|
49
52
|
* Validates SQL WHERE clauses for syntax and field references
|
|
50
53
|
*
|
|
@@ -58,7 +61,7 @@ import { SQLParser } from '@memberjunction/sql-parser';
|
|
|
58
61
|
* **Implementation**: Uses SQLParser for accurate AST-based validation
|
|
59
62
|
* with regex fallback for edge cases.
|
|
60
63
|
*/
|
|
61
|
-
let SqlWhereClauseValidator = class SqlWhereClauseValidator extends
|
|
64
|
+
let SqlWhereClauseValidator = class SqlWhereClauseValidator extends SemanticValidator {
|
|
62
65
|
static { SqlWhereClauseValidator_1 = this; }
|
|
63
66
|
/**
|
|
64
67
|
* SQL keywords that are not field references
|
|
@@ -148,7 +151,8 @@ let SqlWhereClauseValidator = class SqlWhereClauseValidator extends BaseConstrai
|
|
|
148
151
|
validateWithAST(whereClause, entityName, fieldNames, fieldNamesLower, caseSensitive, context, constraint) {
|
|
149
152
|
const violations = [];
|
|
150
153
|
// Parse WHERE clause using SQLParser (wraps node-sql-parser with FOR XML workaround)
|
|
151
|
-
const
|
|
154
|
+
const dialect = context.dialect ?? DEFAULT_DIALECT;
|
|
155
|
+
const ast = SQLParser.ParseSQL(`SELECT * FROM t WHERE ${whereClause}`, dialect);
|
|
152
156
|
if (!ast) {
|
|
153
157
|
throw new Error('Failed to parse WHERE clause');
|
|
154
158
|
}
|
|
@@ -371,7 +375,7 @@ let SqlWhereClauseValidator = class SqlWhereClauseValidator extends BaseConstrai
|
|
|
371
375
|
}
|
|
372
376
|
};
|
|
373
377
|
SqlWhereClauseValidator = SqlWhereClauseValidator_1 = __decorate([
|
|
374
|
-
RegisterClass(
|
|
378
|
+
RegisterClass(SemanticValidator, 'sql-where-clause')
|
|
375
379
|
], SqlWhereClauseValidator);
|
|
376
380
|
export { SqlWhereClauseValidator };
|
|
377
381
|
//# sourceMappingURL=sql-where-clause-validator.js.map
|