@unispechq/unispec-core 0.3.2 → 0.3.4
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/cache/cache-factory.d.ts +2 -2
- package/dist/cache/cache-factory.js +1 -1
- package/dist/cache/cache-manager.d.ts +2 -2
- package/dist/cache/cache-manager.js +9 -7
- package/dist/cache/hash-utils.d.ts +1 -11
- package/dist/cache/hash-utils.js +1 -21
- package/dist/cache/hashing.d.ts +15 -6
- package/dist/cache/hashing.js +8 -12
- package/dist/cache/index.d.ts +6 -6
- package/dist/cache/index.js +5 -5
- package/dist/cache/lru-cache.d.ts +1 -13
- package/dist/cache/lru-cache.js +3 -24
- package/dist/cjs/cache/cache-factory.js +1 -1
- package/dist/cjs/cache/cache-manager.js +9 -7
- package/dist/cjs/cache/hash-utils.js +1 -23
- package/dist/cjs/cache/hashing.js +7 -13
- package/dist/cjs/cache/index.js +6 -8
- package/dist/cjs/cache/lru-cache.js +3 -24
- package/dist/cjs/diff/annotators.js +3 -2
- package/dist/cjs/diff/core.js +2 -2
- package/dist/cjs/diff/enhanced-diff.js +7 -21
- package/dist/cjs/diff/index.js +8 -8
- package/dist/cjs/errors/config-error.js +1 -1
- package/dist/cjs/errors/error-factory.js +7 -7
- package/dist/cjs/errors/index.js +8 -8
- package/dist/cjs/errors/loader-error.js +1 -1
- package/dist/cjs/errors/reference-error.js +1 -1
- package/dist/cjs/errors/schema-error.js +1 -1
- package/dist/cjs/errors/security-error.js +1 -1
- package/dist/cjs/errors/semantic-error.js +1 -1
- package/dist/cjs/index.js +13 -13
- package/dist/cjs/loader/index.js +4 -4
- package/dist/cjs/loader/security-validator.js +1 -1
- package/dist/cjs/loader/unispec-loader.js +3 -3
- package/dist/cjs/loader/yaml-loader.js +1 -1
- package/dist/cjs/normalizer/core.js +11 -6
- package/dist/cjs/normalizer/index.js +1 -1
- package/dist/cjs/normalizer/utils.js +23 -7
- package/dist/cjs/optimizer/core.js +35 -10
- package/dist/cjs/optimizer/index.js +3 -3
- package/dist/cjs/optimizer/optimization-functions.js +2 -2
- package/dist/cjs/schemas/dedupe.js +27 -14
- package/dist/cjs/schemas/index.js +3 -3
- package/dist/cjs/schemas/resolver.js +3 -2
- package/dist/cjs/validator/ajv-validator.js +1 -1
- package/dist/cjs/validator/config-validator-main.js +4 -4
- package/dist/cjs/validator/config-validator.js +1 -1
- package/dist/cjs/validator/index.js +7 -7
- package/dist/cjs/validator/reference-validator.js +1 -1
- package/dist/cjs/validator/tests-validator.js +2 -2
- package/dist/cjs/validator/unispec-validator.js +7 -11
- package/dist/cjs/validator/validator-factory.js +1 -1
- package/dist/diff/annotators.d.ts +1 -1
- package/dist/diff/annotators.js +3 -2
- package/dist/diff/change-reports.d.ts +1 -1
- package/dist/diff/core.d.ts +2 -2
- package/dist/diff/core.js +2 -2
- package/dist/diff/enhanced-diff.d.ts +3 -3
- package/dist/diff/enhanced-diff.js +7 -21
- package/dist/diff/impact-strategies-refactored.d.ts +2 -2
- package/dist/diff/impact-strategies.d.ts +2 -2
- package/dist/diff/index.d.ts +8 -8
- package/dist/diff/index.js +8 -8
- package/dist/diff/metrics-calculator.d.ts +1 -1
- package/dist/diff/risk-calculator.d.ts +1 -1
- package/dist/diff/suggestion-generator.d.ts +2 -2
- package/dist/errors/config-error.d.ts +1 -1
- package/dist/errors/config-error.js +1 -1
- package/dist/errors/error-factory.d.ts +7 -7
- package/dist/errors/error-factory.js +7 -7
- package/dist/errors/index.d.ts +8 -8
- package/dist/errors/index.js +8 -8
- package/dist/errors/loader-error.d.ts +1 -1
- package/dist/errors/loader-error.js +1 -1
- package/dist/errors/reference-error.d.ts +1 -1
- package/dist/errors/reference-error.js +1 -1
- package/dist/errors/schema-error.d.ts +1 -1
- package/dist/errors/schema-error.js +1 -1
- package/dist/errors/security-error.d.ts +1 -1
- package/dist/errors/security-error.js +1 -1
- package/dist/errors/semantic-error.d.ts +1 -1
- package/dist/errors/semantic-error.js +1 -1
- package/dist/index.cjs +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.js +13 -13
- package/dist/loader/index.d.ts +5 -5
- package/dist/loader/index.js +4 -4
- package/dist/loader/security-validator.d.ts +1 -1
- package/dist/loader/security-validator.js +1 -1
- package/dist/loader/unispec-loader.d.ts +2 -2
- package/dist/loader/unispec-loader.js +3 -3
- package/dist/loader/yaml-loader.d.ts +1 -1
- package/dist/loader/yaml-loader.js +1 -1
- package/dist/normalizer/core.d.ts +2 -2
- package/dist/normalizer/core.js +11 -6
- package/dist/normalizer/graphql-normalizer.d.ts +1 -1
- package/dist/normalizer/index.d.ts +2 -2
- package/dist/normalizer/index.js +1 -1
- package/dist/normalizer/rest-normalizer.d.ts +1 -1
- package/dist/normalizer/types.d.ts +1 -1
- package/dist/normalizer/utils.d.ts +6 -3
- package/dist/normalizer/utils.js +23 -7
- package/dist/normalizer/websocket-normalizer.d.ts +1 -1
- package/dist/optimizer/core.d.ts +2 -2
- package/dist/optimizer/core.js +35 -10
- package/dist/optimizer/index.d.ts +4 -4
- package/dist/optimizer/index.js +3 -3
- package/dist/optimizer/optimization-functions.d.ts +2 -2
- package/dist/optimizer/optimization-functions.js +2 -2
- package/dist/optimizer/types.d.ts +1 -1
- package/dist/schemas/dedupe.d.ts +1 -1
- package/dist/schemas/dedupe.js +27 -14
- package/dist/schemas/index.d.ts +3 -3
- package/dist/schemas/index.js +3 -3
- package/dist/schemas/resolver.d.ts +1 -1
- package/dist/schemas/resolver.js +3 -2
- package/dist/types/index.d.ts +2 -1
- package/dist/validator/ajv-validator.d.ts +1 -1
- package/dist/validator/ajv-validator.js +1 -1
- package/dist/validator/config-validator-main.d.ts +2 -2
- package/dist/validator/config-validator-main.js +4 -4
- package/dist/validator/config-validator.d.ts +1 -1
- package/dist/validator/config-validator.js +1 -1
- package/dist/validator/index.d.ts +10 -10
- package/dist/validator/index.js +7 -7
- package/dist/validator/reference-validator.d.ts +1 -1
- package/dist/validator/reference-validator.js +1 -1
- package/dist/validator/schema-references.d.ts +1 -1
- package/dist/validator/semantic-validator.d.ts +1 -1
- package/dist/validator/tests-validator.d.ts +2 -2
- package/dist/validator/tests-validator.js +2 -2
- package/dist/validator/types.d.ts +3 -3
- package/dist/validator/unispec-validator.d.ts +2 -2
- package/dist/validator/unispec-validator.js +7 -11
- package/dist/validator/validator-factory.d.ts +3 -3
- package/dist/validator/validator-factory.js +1 -1
- package/package.json +3 -3
- package/dist/cjs/src/cache/cache-factory.js +0 -72
- package/dist/cjs/src/cache/cache-manager.js +0 -128
- package/dist/cjs/src/cache/constants.js +0 -25
- package/dist/cjs/src/cache/hash-utils.js +0 -19
- package/dist/cjs/src/cache/hashing.js +0 -230
- package/dist/cjs/src/cache/index.js +0 -24
- package/dist/cjs/src/cache/lru-cache.js +0 -144
- package/dist/cjs/src/cache/types.js +0 -5
- package/dist/cjs/src/diff/annotators.js +0 -160
- package/dist/cjs/src/diff/change-reports.js +0 -369
- package/dist/cjs/src/diff/core.js +0 -158
- package/dist/cjs/src/diff/enhanced-diff.js +0 -65
- package/dist/cjs/src/diff/impact-strategies-refactored.js +0 -230
- package/dist/cjs/src/diff/impact-strategies.js +0 -219
- package/dist/cjs/src/diff/index.js +0 -27
- package/dist/cjs/src/diff/metrics-calculator.js +0 -69
- package/dist/cjs/src/diff/risk-calculator.js +0 -58
- package/dist/cjs/src/diff/suggestion-generator.js +0 -78
- package/dist/cjs/src/diff/types.js +0 -11
- package/dist/cjs/src/errors/base-error.js +0 -33
- package/dist/cjs/src/errors/config-error.js +0 -11
- package/dist/cjs/src/errors/error-factory.js +0 -48
- package/dist/cjs/src/errors/index.js +0 -19
- package/dist/cjs/src/errors/loader-error.js +0 -11
- package/dist/cjs/src/errors/reference-error.js +0 -11
- package/dist/cjs/src/errors/schema-error.js +0 -11
- package/dist/cjs/src/errors/security-error.js +0 -11
- package/dist/cjs/src/errors/semantic-error.js +0 -11
- package/dist/cjs/src/generated-schemas.js +0 -2100
- package/dist/cjs/src/index.js +0 -59
- package/dist/cjs/src/loader/index.js +0 -13
- package/dist/cjs/src/loader/security-validator.js +0 -53
- package/dist/cjs/src/loader/types.js +0 -11
- package/dist/cjs/src/loader/unispec-loader.js +0 -84
- package/dist/cjs/src/loader/yaml-loader.js +0 -76
- package/dist/cjs/src/normalizer/core.js +0 -37
- package/dist/cjs/src/normalizer/graphql-normalizer.js +0 -67
- package/dist/cjs/src/normalizer/index.js +0 -7
- package/dist/cjs/src/normalizer/rest-normalizer.js +0 -51
- package/dist/cjs/src/normalizer/types.js +0 -2
- package/dist/cjs/src/normalizer/utils.js +0 -49
- package/dist/cjs/src/normalizer/websocket-normalizer.js +0 -81
- package/dist/cjs/src/optimizer/core.js +0 -140
- package/dist/cjs/src/optimizer/index.js +0 -17
- package/dist/cjs/src/optimizer/optimization-functions.js +0 -185
- package/dist/cjs/src/optimizer/types.js +0 -2
- package/dist/cjs/src/optimizer/utils.js +0 -32
- package/dist/cjs/src/schemas/dedupe.js +0 -113
- package/dist/cjs/src/schemas/index.js +0 -14
- package/dist/cjs/src/schemas/resolver.js +0 -42
- package/dist/cjs/src/schemas/utils.js +0 -53
- package/dist/cjs/src/types/index.js +0 -2
- package/dist/cjs/src/validator/ajv-validator.js +0 -82
- package/dist/cjs/src/validator/config-validator-main.js +0 -34
- package/dist/cjs/src/validator/config-validator.js +0 -17
- package/dist/cjs/src/validator/index.js +0 -23
- package/dist/cjs/src/validator/object-traversal.js +0 -112
- package/dist/cjs/src/validator/reference-validator.js +0 -233
- package/dist/cjs/src/validator/schema-references.js +0 -116
- package/dist/cjs/src/validator/semantic-validator.js +0 -328
- package/dist/cjs/src/validator/tests-validator.js +0 -16
- package/dist/cjs/src/validator/types.js +0 -2
- package/dist/cjs/src/validator/unispec-validator.js +0 -80
- package/dist/cjs/src/validator/validator-factory.js +0 -77
- package/dist/cjs/src/versions.js +0 -147
- package/dist/cjs/tests/cache/cache.test.js +0 -274
- package/dist/cjs/tests/cache/utils.js +0 -32
- package/dist/cjs/tests/concurrency-normalizer-optimizer.test.js +0 -1
- package/dist/cjs/tests/diff/diff-annotators.test.js +0 -280
- package/dist/cjs/tests/diff/diff-comprehensive.test.js +0 -262
- package/dist/cjs/tests/diff/diff-extended.test.js +0 -235
- package/dist/cjs/tests/diff/diff.test.js +0 -189
- package/dist/cjs/tests/diff/utils.js +0 -8
- package/dist/cjs/tests/errors/errors-integration.test.js +0 -173
- package/dist/cjs/tests/errors/errors.test.js +0 -280
- package/dist/cjs/tests/errors/utils.js +0 -7
- package/dist/cjs/tests/loader/integration.test.js +0 -216
- package/dist/cjs/tests/loader/loader.test.js +0 -341
- package/dist/cjs/tests/normalizer/normalizer-comprehensive.test.js +0 -648
- package/dist/cjs/tests/normalizer/normalizer-invalid.test.js +0 -258
- package/dist/cjs/tests/normalizer/normalizer-valid.test.js +0 -238
- package/dist/cjs/tests/normalizer/utils.js +0 -47
- package/dist/cjs/tests/optimizer/compress-references.test.js +0 -304
- package/dist/cjs/tests/optimizer/deduplication.test.js +0 -132
- package/dist/cjs/tests/optimizer/integration.test.js +0 -131
- package/dist/cjs/tests/optimizer/optimization-report.test.js +0 -222
- package/dist/cjs/tests/optimizer/optimize-document.test.js +0 -187
- package/dist/cjs/tests/optimizer/orphaned-schemas.test.js +0 -194
- package/dist/cjs/tests/optimizer/sort-schemas.test.js +0 -131
- package/dist/cjs/tests/optimizer/utils.js +0 -209
- package/dist/cjs/tests/schemas/schemas-edge-cases.test.js +0 -223
- package/dist/cjs/tests/schemas/schemas.test.js +0 -400
- package/dist/cjs/tests/schemas/utils.js +0 -7
- package/dist/cjs/tests/utils.js +0 -131
- package/dist/cjs/tests/validator/config-validator.test.js +0 -78
- package/dist/cjs/tests/validator/debug-config.js +0 -1
- package/dist/cjs/tests/validator/debug-missing-service.js +0 -1
- package/dist/cjs/tests/validator/debug-other-configs.js +0 -1
- package/dist/cjs/tests/validator/debug-references.js +0 -1
- package/dist/cjs/tests/validator/unispec-validator.test.js +0 -103
- package/dist/cjs/tests/validator/utils.js +0 -25
- package/dist/src/cache/cache-factory.d.ts +0 -31
- package/dist/src/cache/cache-factory.js +0 -65
- package/dist/src/cache/cache-manager.d.ts +0 -62
- package/dist/src/cache/cache-manager.js +0 -124
- package/dist/src/cache/constants.d.ts +0 -21
- package/dist/src/cache/constants.js +0 -22
- package/dist/src/cache/hash-utils.d.ts +0 -11
- package/dist/src/cache/hash-utils.js +0 -15
- package/dist/src/cache/hashing.d.ts +0 -28
- package/dist/src/cache/hashing.js +0 -193
- package/dist/src/cache/index.d.ts +0 -6
- package/dist/src/cache/index.js +0 -10
- package/dist/src/cache/lru-cache.d.ts +0 -44
- package/dist/src/cache/lru-cache.js +0 -140
- package/dist/src/cache/types.d.ts +0 -24
- package/dist/src/cache/types.js +0 -4
- package/dist/src/diff/annotators.d.ts +0 -4
- package/dist/src/diff/annotators.js +0 -155
- package/dist/src/diff/change-reports.d.ts +0 -37
- package/dist/src/diff/change-reports.js +0 -366
- package/dist/src/diff/core.d.ts +0 -26
- package/dist/src/diff/core.js +0 -155
- package/dist/src/diff/enhanced-diff.d.ts +0 -51
- package/dist/src/diff/enhanced-diff.js +0 -62
- package/dist/src/diff/impact-strategies-refactored.d.ts +0 -69
- package/dist/src/diff/impact-strategies-refactored.js +0 -223
- package/dist/src/diff/impact-strategies.d.ts +0 -41
- package/dist/src/diff/impact-strategies.js +0 -212
- package/dist/src/diff/index.d.ts +0 -8
- package/dist/src/diff/index.js +0 -11
- package/dist/src/diff/metrics-calculator.d.ts +0 -23
- package/dist/src/diff/metrics-calculator.js +0 -65
- package/dist/src/diff/risk-calculator.d.ts +0 -23
- package/dist/src/diff/risk-calculator.js +0 -55
- package/dist/src/diff/suggestion-generator.d.ts +0 -18
- package/dist/src/diff/suggestion-generator.js +0 -74
- package/dist/src/diff/types.d.ts +0 -24
- package/dist/src/diff/types.js +0 -8
- package/dist/src/errors/base-error.d.ts +0 -20
- package/dist/src/errors/base-error.js +0 -29
- package/dist/src/errors/config-error.d.ts +0 -4
- package/dist/src/errors/config-error.js +0 -7
- package/dist/src/errors/error-factory.d.ts +0 -22
- package/dist/src/errors/error-factory.js +0 -45
- package/dist/src/errors/index.d.ts +0 -8
- package/dist/src/errors/index.js +0 -8
- package/dist/src/errors/loader-error.d.ts +0 -4
- package/dist/src/errors/loader-error.js +0 -7
- package/dist/src/errors/reference-error.d.ts +0 -4
- package/dist/src/errors/reference-error.js +0 -7
- package/dist/src/errors/schema-error.d.ts +0 -4
- package/dist/src/errors/schema-error.js +0 -7
- package/dist/src/errors/security-error.d.ts +0 -4
- package/dist/src/errors/security-error.js +0 -7
- package/dist/src/errors/semantic-error.d.ts +0 -4
- package/dist/src/errors/semantic-error.js +0 -7
- package/dist/src/generated-schemas.d.ts +0 -2073
- package/dist/src/generated-schemas.js +0 -2097
- package/dist/src/index.d.ts +0 -13
- package/dist/src/index.js +0 -43
- package/dist/src/loader/index.d.ts +0 -5
- package/dist/src/loader/index.js +0 -5
- package/dist/src/loader/security-validator.d.ts +0 -5
- package/dist/src/loader/security-validator.js +0 -50
- package/dist/src/loader/types.d.ts +0 -30
- package/dist/src/loader/types.js +0 -8
- package/dist/src/loader/unispec-loader.d.ts +0 -10
- package/dist/src/loader/unispec-loader.js +0 -81
- package/dist/src/loader/yaml-loader.d.ts +0 -10
- package/dist/src/loader/yaml-loader.js +0 -39
- package/dist/src/normalizer/core.d.ts +0 -24
- package/dist/src/normalizer/core.js +0 -34
- package/dist/src/normalizer/graphql-normalizer.d.ts +0 -8
- package/dist/src/normalizer/graphql-normalizer.js +0 -64
- package/dist/src/normalizer/index.d.ts +0 -2
- package/dist/src/normalizer/index.js +0 -3
- package/dist/src/normalizer/rest-normalizer.d.ts +0 -8
- package/dist/src/normalizer/rest-normalizer.js +0 -48
- package/dist/src/normalizer/types.d.ts +0 -7
- package/dist/src/normalizer/types.js +0 -1
- package/dist/src/normalizer/utils.d.ts +0 -17
- package/dist/src/normalizer/utils.js +0 -45
- package/dist/src/normalizer/websocket-normalizer.d.ts +0 -8
- package/dist/src/normalizer/websocket-normalizer.js +0 -78
- package/dist/src/optimizer/core.d.ts +0 -17
- package/dist/src/optimizer/core.js +0 -136
- package/dist/src/optimizer/index.d.ts +0 -4
- package/dist/src/optimizer/index.js +0 -7
- package/dist/src/optimizer/optimization-functions.d.ts +0 -32
- package/dist/src/optimizer/optimization-functions.js +0 -179
- package/dist/src/optimizer/types.d.ts +0 -28
- package/dist/src/optimizer/types.js +0 -1
- package/dist/src/optimizer/utils.d.ts +0 -7
- package/dist/src/optimizer/utils.js +0 -29
- package/dist/src/schemas/dedupe.d.ts +0 -9
- package/dist/src/schemas/dedupe.js +0 -110
- package/dist/src/schemas/index.d.ts +0 -3
- package/dist/src/schemas/index.js +0 -6
- package/dist/src/schemas/resolver.d.ts +0 -19
- package/dist/src/schemas/resolver.js +0 -38
- package/dist/src/schemas/utils.d.ts +0 -20
- package/dist/src/schemas/utils.js +0 -49
- package/dist/src/types/index.d.ts +0 -434
- package/dist/src/types/index.js +0 -1
- package/dist/src/validator/ajv-validator.d.ts +0 -15
- package/dist/src/validator/ajv-validator.js +0 -75
- package/dist/src/validator/config-validator-main.d.ts +0 -10
- package/dist/src/validator/config-validator-main.js +0 -31
- package/dist/src/validator/config-validator.d.ts +0 -5
- package/dist/src/validator/config-validator.js +0 -14
- package/dist/src/validator/index.d.ts +0 -10
- package/dist/src/validator/index.js +0 -11
- package/dist/src/validator/object-traversal.d.ts +0 -52
- package/dist/src/validator/object-traversal.js +0 -104
- package/dist/src/validator/reference-validator.d.ts +0 -31
- package/dist/src/validator/reference-validator.js +0 -230
- package/dist/src/validator/schema-references.d.ts +0 -23
- package/dist/src/validator/schema-references.js +0 -111
- package/dist/src/validator/semantic-validator.d.ts +0 -26
- package/dist/src/validator/semantic-validator.js +0 -325
- package/dist/src/validator/tests-validator.d.ts +0 -9
- package/dist/src/validator/tests-validator.js +0 -13
- package/dist/src/validator/types.d.ts +0 -29
- package/dist/src/validator/types.js +0 -1
- package/dist/src/validator/unispec-validator.d.ts +0 -15
- package/dist/src/validator/unispec-validator.js +0 -77
- package/dist/src/validator/validator-factory.d.ts +0 -10
- package/dist/src/validator/validator-factory.js +0 -73
- package/dist/src/versions.d.ts +0 -10
- package/dist/src/versions.js +0 -143
- package/dist/tests/cache/cache.test.d.ts +0 -1
- package/dist/tests/cache/cache.test.js +0 -269
- package/dist/tests/cache/utils.d.ts +0 -4
- package/dist/tests/cache/utils.js +0 -24
- package/dist/tests/concurrency-normalizer-optimizer.test.d.ts +0 -0
- package/dist/tests/concurrency-normalizer-optimizer.test.js +0 -1
- package/dist/tests/diff/diff-annotators.test.d.ts +0 -1
- package/dist/tests/diff/diff-annotators.test.js +0 -275
- package/dist/tests/diff/diff-comprehensive.test.d.ts +0 -1
- package/dist/tests/diff/diff-comprehensive.test.js +0 -257
- package/dist/tests/diff/diff-extended.test.d.ts +0 -1
- package/dist/tests/diff/diff-extended.test.js +0 -230
- package/dist/tests/diff/diff.test.d.ts +0 -1
- package/dist/tests/diff/diff.test.js +0 -184
- package/dist/tests/diff/utils.d.ts +0 -2
- package/dist/tests/diff/utils.js +0 -3
- package/dist/tests/errors/errors-integration.test.d.ts +0 -1
- package/dist/tests/errors/errors-integration.test.js +0 -168
- package/dist/tests/errors/errors.test.d.ts +0 -1
- package/dist/tests/errors/errors.test.js +0 -275
- package/dist/tests/errors/utils.d.ts +0 -2
- package/dist/tests/errors/utils.js +0 -3
- package/dist/tests/loader/integration.test.d.ts +0 -1
- package/dist/tests/loader/integration.test.js +0 -211
- package/dist/tests/loader/loader.test.d.ts +0 -1
- package/dist/tests/loader/loader.test.js +0 -336
- package/dist/tests/normalizer/normalizer-comprehensive.test.d.ts +0 -1
- package/dist/tests/normalizer/normalizer-comprehensive.test.js +0 -643
- package/dist/tests/normalizer/normalizer-invalid.test.d.ts +0 -1
- package/dist/tests/normalizer/normalizer-invalid.test.js +0 -253
- package/dist/tests/normalizer/normalizer-valid.test.d.ts +0 -1
- package/dist/tests/normalizer/normalizer-valid.test.js +0 -233
- package/dist/tests/normalizer/utils.d.ts +0 -18
- package/dist/tests/normalizer/utils.js +0 -36
- package/dist/tests/optimizer/compress-references.test.d.ts +0 -1
- package/dist/tests/optimizer/compress-references.test.js +0 -299
- package/dist/tests/optimizer/deduplication.test.d.ts +0 -1
- package/dist/tests/optimizer/deduplication.test.js +0 -127
- package/dist/tests/optimizer/integration.test.d.ts +0 -1
- package/dist/tests/optimizer/integration.test.js +0 -126
- package/dist/tests/optimizer/optimization-report.test.d.ts +0 -1
- package/dist/tests/optimizer/optimization-report.test.js +0 -217
- package/dist/tests/optimizer/optimize-document.test.d.ts +0 -1
- package/dist/tests/optimizer/optimize-document.test.js +0 -182
- package/dist/tests/optimizer/orphaned-schemas.test.d.ts +0 -1
- package/dist/tests/optimizer/orphaned-schemas.test.js +0 -189
- package/dist/tests/optimizer/sort-schemas.test.d.ts +0 -1
- package/dist/tests/optimizer/sort-schemas.test.js +0 -126
- package/dist/tests/optimizer/utils.d.ts +0 -8
- package/dist/tests/optimizer/utils.js +0 -199
- package/dist/tests/schemas/schemas-edge-cases.test.d.ts +0 -1
- package/dist/tests/schemas/schemas-edge-cases.test.js +0 -218
- package/dist/tests/schemas/schemas.test.d.ts +0 -1
- package/dist/tests/schemas/schemas.test.js +0 -395
- package/dist/tests/schemas/utils.d.ts +0 -2
- package/dist/tests/schemas/utils.js +0 -3
- package/dist/tests/utils.d.ts +0 -10
- package/dist/tests/utils.js +0 -118
- package/dist/tests/validator/config-validator.test.d.ts +0 -1
- package/dist/tests/validator/config-validator.test.js +0 -73
- package/dist/tests/validator/debug-config.d.ts +0 -0
- package/dist/tests/validator/debug-config.js +0 -1
- package/dist/tests/validator/debug-missing-service.d.ts +0 -0
- package/dist/tests/validator/debug-missing-service.js +0 -1
- package/dist/tests/validator/debug-other-configs.d.ts +0 -0
- package/dist/tests/validator/debug-other-configs.js +0 -1
- package/dist/tests/validator/debug-references.d.ts +0 -0
- package/dist/tests/validator/debug-references.js +0 -1
- package/dist/tests/validator/unispec-validator.test.d.ts +0 -1
- package/dist/tests/validator/unispec-validator.test.js +0 -98
- package/dist/tests/validator/utils.d.ts +0 -6
- package/dist/tests/validator/utils.js +0 -20
|
@@ -1,395 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert";
|
|
2
|
-
import { describe, it } from "node:test";
|
|
3
|
-
import { dedupeSchemas, registerSchema, resolveSchemaRef } from "../../src/schemas/index.js";
|
|
4
|
-
import { normalizeSchemaRef, stableStringify } from "../../src/schemas/utils.js";
|
|
5
|
-
import { getExamplePath, loadExample } from "./utils.js";
|
|
6
|
-
describe("schemas module", () => {
|
|
7
|
-
describe("normalizeSchemaRef", () => {
|
|
8
|
-
it("should handle simple name format", () => {
|
|
9
|
-
assert.strictEqual(normalizeSchemaRef("User"), "User");
|
|
10
|
-
assert.strictEqual(normalizeSchemaRef("CreateOrderRequest"), "CreateOrderRequest");
|
|
11
|
-
});
|
|
12
|
-
it("should handle JSON Pointer format", () => {
|
|
13
|
-
assert.strictEqual(normalizeSchemaRef("#/service/schemas/User"), "User");
|
|
14
|
-
assert.strictEqual(normalizeSchemaRef("#/service/schemas/CreateOrderRequest"), "CreateOrderRequest");
|
|
15
|
-
});
|
|
16
|
-
it("should handle hash format", () => {
|
|
17
|
-
assert.strictEqual(normalizeSchemaRef("#User"), "User");
|
|
18
|
-
assert.strictEqual(normalizeSchemaRef("#CreateOrderRequest"), "CreateOrderRequest");
|
|
19
|
-
});
|
|
20
|
-
it("should handle path format", () => {
|
|
21
|
-
assert.strictEqual(normalizeSchemaRef("path/to/User"), "User");
|
|
22
|
-
assert.strictEqual(normalizeSchemaRef("models/User"), "User");
|
|
23
|
-
});
|
|
24
|
-
it("should handle empty and whitespace strings", () => {
|
|
25
|
-
assert.strictEqual(normalizeSchemaRef(""), "");
|
|
26
|
-
assert.strictEqual(normalizeSchemaRef(" "), "");
|
|
27
|
-
assert.strictEqual(normalizeSchemaRef("#"), "");
|
|
28
|
-
});
|
|
29
|
-
it("should handle complex paths", () => {
|
|
30
|
-
assert.strictEqual(normalizeSchemaRef("#/service/schemas/nested/User"), "User");
|
|
31
|
-
assert.strictEqual(normalizeSchemaRef("deeply/nested/path/to/Schema"), "Schema");
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
describe("stableStringify", () => {
|
|
35
|
-
it("should create consistent strings for simple values", () => {
|
|
36
|
-
assert.strictEqual(stableStringify(null), "null");
|
|
37
|
-
assert.strictEqual(stableStringify(42), "42");
|
|
38
|
-
assert.strictEqual(stableStringify(true), "true");
|
|
39
|
-
assert.strictEqual(stableStringify("test"), '"test"');
|
|
40
|
-
});
|
|
41
|
-
it("should create consistent strings for arrays", () => {
|
|
42
|
-
assert.strictEqual(stableStringify([1, 2, 3]), "[1,2,3]");
|
|
43
|
-
assert.strictEqual(stableStringify(["b", "a"]), '["b","a"]');
|
|
44
|
-
assert.strictEqual(stableStringify([]), "[]");
|
|
45
|
-
});
|
|
46
|
-
it("should create consistent strings for objects with sorted keys", () => {
|
|
47
|
-
const obj1 = { b: 2, a: 1 };
|
|
48
|
-
const obj2 = { a: 1, b: 2 };
|
|
49
|
-
assert.strictEqual(stableStringify(obj1), stableStringify(obj2));
|
|
50
|
-
assert.strictEqual(stableStringify(obj1), '{"a":1,"b":2}');
|
|
51
|
-
});
|
|
52
|
-
it("should handle nested objects", () => {
|
|
53
|
-
const nested = {
|
|
54
|
-
outer: {
|
|
55
|
-
z: 3,
|
|
56
|
-
a: 1,
|
|
57
|
-
},
|
|
58
|
-
b: 2,
|
|
59
|
-
};
|
|
60
|
-
assert.strictEqual(stableStringify(nested), '{"b":2,"outer":{"a":1,"z":3}}');
|
|
61
|
-
});
|
|
62
|
-
it("should handle complex nested structures", () => {
|
|
63
|
-
const complex = {
|
|
64
|
-
type: "object",
|
|
65
|
-
properties: {
|
|
66
|
-
name: { type: "string" },
|
|
67
|
-
age: { type: "number" },
|
|
68
|
-
},
|
|
69
|
-
required: ["name", "age"],
|
|
70
|
-
};
|
|
71
|
-
const expected = '{"properties":{"age":{"type":"number"},"name":{"type":"string"}},"required":["name","age"],"type":"object"}';
|
|
72
|
-
assert.strictEqual(stableStringify(complex), expected);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe("registerSchema", () => {
|
|
76
|
-
it("should register a new schema in an empty document", () => {
|
|
77
|
-
const doc = {
|
|
78
|
-
unispecVersion: "1.0.0",
|
|
79
|
-
service: { name: "test-service" },
|
|
80
|
-
};
|
|
81
|
-
const jsonSchema = {
|
|
82
|
-
type: "object",
|
|
83
|
-
properties: {
|
|
84
|
-
name: { type: "string" },
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
const definition = registerSchema(doc, "User", jsonSchema);
|
|
88
|
-
assert.deepStrictEqual(definition.jsonSchema, jsonSchema);
|
|
89
|
-
assert.ok(doc.service?.schemas?.User);
|
|
90
|
-
});
|
|
91
|
-
it("should create schemas container if missing", () => {
|
|
92
|
-
const doc = {
|
|
93
|
-
unispecVersion: "1.0.0",
|
|
94
|
-
service: { name: "test-service" },
|
|
95
|
-
};
|
|
96
|
-
registerSchema(doc, "User", { type: "object" });
|
|
97
|
-
assert.ok(doc.service?.schemas);
|
|
98
|
-
assert.ok(doc.service.schemas.User);
|
|
99
|
-
});
|
|
100
|
-
it("should create service if missing", () => {
|
|
101
|
-
const doc = {
|
|
102
|
-
unispecVersion: "1.0.0",
|
|
103
|
-
};
|
|
104
|
-
registerSchema(doc, "User", { type: "object" });
|
|
105
|
-
assert.ok(doc.service);
|
|
106
|
-
assert.strictEqual(doc.service.name, "");
|
|
107
|
-
assert.ok(doc.service.schemas);
|
|
108
|
-
});
|
|
109
|
-
it("should overwrite existing schema", () => {
|
|
110
|
-
const doc = {
|
|
111
|
-
unispecVersion: "1.0.0",
|
|
112
|
-
service: {
|
|
113
|
-
name: "test-service",
|
|
114
|
-
schemas: {
|
|
115
|
-
User: {
|
|
116
|
-
jsonSchema: { type: "string" },
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
};
|
|
121
|
-
const newSchema = { type: "number" };
|
|
122
|
-
registerSchema(doc, "User", newSchema);
|
|
123
|
-
assert.deepStrictEqual(doc.service?.schemas?.User?.jsonSchema, newSchema);
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
describe("resolveSchemaRef", () => {
|
|
127
|
-
it("should resolve simple schema reference", () => {
|
|
128
|
-
const doc = loadExample(getExamplePath("valid", "spec", "mixed-complete.json"));
|
|
129
|
-
const schema = resolveSchemaRef(doc, "CreateOrderRequest");
|
|
130
|
-
assert.ok(schema);
|
|
131
|
-
assert.strictEqual(schema.jsonSchema.type, "object");
|
|
132
|
-
assert.ok(schema?.jsonSchema.properties);
|
|
133
|
-
const properties = schema.jsonSchema.properties;
|
|
134
|
-
assert.ok(properties.productIds);
|
|
135
|
-
});
|
|
136
|
-
it("should resolve JSON Pointer reference", () => {
|
|
137
|
-
const doc = loadExample(getExamplePath("valid", "spec", "mixed-complete.json"));
|
|
138
|
-
const schema = resolveSchemaRef(doc, "#/service/schemas/OrderStatusUpdate");
|
|
139
|
-
assert.ok(schema);
|
|
140
|
-
assert.strictEqual(schema.jsonSchema.type, "object");
|
|
141
|
-
assert.ok(schema?.jsonSchema.properties);
|
|
142
|
-
const properties = schema.jsonSchema.properties;
|
|
143
|
-
assert.ok(properties.status);
|
|
144
|
-
});
|
|
145
|
-
it("should resolve hash reference", () => {
|
|
146
|
-
const doc = loadExample(getExamplePath("valid", "spec", "mixed-complete.json"));
|
|
147
|
-
const schema = resolveSchemaRef(doc, "#OrderStatusUpdate");
|
|
148
|
-
assert.ok(schema);
|
|
149
|
-
assert.strictEqual(schema.jsonSchema.type, "object");
|
|
150
|
-
});
|
|
151
|
-
it("should return undefined for non-existent schema", () => {
|
|
152
|
-
const doc = loadExample(getExamplePath("valid", "spec", "mixed-complete.json"));
|
|
153
|
-
const schema = resolveSchemaRef(doc, "NonExistentSchema");
|
|
154
|
-
assert.strictEqual(schema, undefined);
|
|
155
|
-
});
|
|
156
|
-
it("should return undefined for empty reference", () => {
|
|
157
|
-
const doc = loadExample(getExamplePath("valid", "spec", "mixed-complete.json"));
|
|
158
|
-
const schema = resolveSchemaRef(doc, "");
|
|
159
|
-
assert.strictEqual(schema, undefined);
|
|
160
|
-
});
|
|
161
|
-
it("should handle document without schemas", () => {
|
|
162
|
-
const doc = loadExample(getExamplePath("valid", "spec", "rest-simple.json"));
|
|
163
|
-
const schema = resolveSchemaRef(doc, "AnySchema");
|
|
164
|
-
assert.strictEqual(schema, undefined);
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
describe("dedupeSchemas", () => {
|
|
168
|
-
it("should remove duplicate schemas and update references", () => {
|
|
169
|
-
const doc = {
|
|
170
|
-
unispecVersion: "1.0.0",
|
|
171
|
-
service: {
|
|
172
|
-
name: "test-service",
|
|
173
|
-
schemas: {
|
|
174
|
-
User: {
|
|
175
|
-
jsonSchema: {
|
|
176
|
-
type: "object",
|
|
177
|
-
properties: {
|
|
178
|
-
id: { type: "string" },
|
|
179
|
-
name: { type: "string" },
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
Person: {
|
|
184
|
-
jsonSchema: {
|
|
185
|
-
type: "object",
|
|
186
|
-
properties: {
|
|
187
|
-
id: { type: "string" },
|
|
188
|
-
name: { type: "string" },
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
protocols: {
|
|
194
|
-
rest: {
|
|
195
|
-
routes: [
|
|
196
|
-
{
|
|
197
|
-
name: "getUser",
|
|
198
|
-
path: "/user",
|
|
199
|
-
method: "GET",
|
|
200
|
-
responses: {
|
|
201
|
-
"200": {
|
|
202
|
-
description: "User found",
|
|
203
|
-
content: {
|
|
204
|
-
"application/json": {
|
|
205
|
-
schemaRef: "User",
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
name: "getPerson",
|
|
213
|
-
path: "/person",
|
|
214
|
-
method: "GET",
|
|
215
|
-
responses: {
|
|
216
|
-
"200": {
|
|
217
|
-
description: "Person found",
|
|
218
|
-
content: {
|
|
219
|
-
"application/json": {
|
|
220
|
-
schemaRef: "Person",
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
},
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
],
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
dedupeSchemas(doc);
|
|
232
|
-
// Should keep only one schema (the first one encountered)
|
|
233
|
-
const schemas = doc.service?.schemas;
|
|
234
|
-
assert.strictEqual(Object.keys(schemas || {}).length, 1);
|
|
235
|
-
assert.ok(schemas?.User);
|
|
236
|
-
assert.strictEqual(schemas?.Person, undefined);
|
|
237
|
-
// References should be updated to point to the retained schema
|
|
238
|
-
const rest = doc.service?.protocols?.rest;
|
|
239
|
-
if (rest?.routes) {
|
|
240
|
-
const userRoute = rest.routes[0];
|
|
241
|
-
const personRoute = rest.routes[1];
|
|
242
|
-
assert.strictEqual(userRoute.responses?.["200"]?.content?.["application/json"]
|
|
243
|
-
?.schemaRef, "User");
|
|
244
|
-
assert.strictEqual(personRoute.responses?.["200"]?.content?.["application/json"]
|
|
245
|
-
?.schemaRef, "User");
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
it("should handle documents without schemas", () => {
|
|
249
|
-
const doc = loadExample(getExamplePath("valid", "spec", "rest-simple.json"));
|
|
250
|
-
// Should not throw
|
|
251
|
-
dedupeSchemas(doc);
|
|
252
|
-
// Should still not have schemas
|
|
253
|
-
assert.strictEqual(doc.service?.schemas, undefined);
|
|
254
|
-
});
|
|
255
|
-
it("should handle empty schemas object", () => {
|
|
256
|
-
const doc = {
|
|
257
|
-
unispecVersion: "1.0.0",
|
|
258
|
-
service: {
|
|
259
|
-
name: "test-service",
|
|
260
|
-
schemas: {},
|
|
261
|
-
},
|
|
262
|
-
};
|
|
263
|
-
// Should not throw
|
|
264
|
-
dedupeSchemas(doc);
|
|
265
|
-
assert.deepStrictEqual(doc.service.schemas, {});
|
|
266
|
-
});
|
|
267
|
-
it("should preserve unique schemas", () => {
|
|
268
|
-
const doc = {
|
|
269
|
-
unispecVersion: "1.0.0",
|
|
270
|
-
service: {
|
|
271
|
-
name: "test-service",
|
|
272
|
-
schemas: {
|
|
273
|
-
User: {
|
|
274
|
-
jsonSchema: { type: "string" },
|
|
275
|
-
},
|
|
276
|
-
Product: {
|
|
277
|
-
jsonSchema: { type: "number" },
|
|
278
|
-
},
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
};
|
|
282
|
-
dedupeSchemas(doc);
|
|
283
|
-
// Both schemas should be preserved
|
|
284
|
-
const schemas = doc.service?.schemas;
|
|
285
|
-
assert.strictEqual(Object.keys(schemas || {}).length, 2);
|
|
286
|
-
assert.ok(schemas?.User);
|
|
287
|
-
assert.ok(schemas?.Product);
|
|
288
|
-
});
|
|
289
|
-
it("should update all types of schema references", () => {
|
|
290
|
-
const doc = {
|
|
291
|
-
unispecVersion: "1.0.0",
|
|
292
|
-
service: {
|
|
293
|
-
name: "test-service",
|
|
294
|
-
schemas: {
|
|
295
|
-
SchemaA: {
|
|
296
|
-
jsonSchema: { type: "object" },
|
|
297
|
-
},
|
|
298
|
-
SchemaB: {
|
|
299
|
-
jsonSchema: { type: "object" },
|
|
300
|
-
},
|
|
301
|
-
},
|
|
302
|
-
protocols: {
|
|
303
|
-
rest: {
|
|
304
|
-
routes: [
|
|
305
|
-
{
|
|
306
|
-
name: "test",
|
|
307
|
-
path: "/test",
|
|
308
|
-
method: "POST",
|
|
309
|
-
pathParams: [{ name: "id", schemaRef: "SchemaA" }],
|
|
310
|
-
queryParams: [{ name: "filter", schemaRef: "SchemaB" }],
|
|
311
|
-
headers: [{ name: "auth", schemaRef: "SchemaA" }],
|
|
312
|
-
requestBody: {
|
|
313
|
-
content: {
|
|
314
|
-
"application/json": { schemaRef: "SchemaB" },
|
|
315
|
-
},
|
|
316
|
-
},
|
|
317
|
-
responses: {
|
|
318
|
-
"200": {
|
|
319
|
-
content: {
|
|
320
|
-
"application/json": { schemaRef: "SchemaA" },
|
|
321
|
-
},
|
|
322
|
-
},
|
|
323
|
-
},
|
|
324
|
-
},
|
|
325
|
-
],
|
|
326
|
-
},
|
|
327
|
-
websocket: {
|
|
328
|
-
channels: [
|
|
329
|
-
{
|
|
330
|
-
name: "test",
|
|
331
|
-
messages: [{ name: "msg", schemaRef: "SchemaB" }],
|
|
332
|
-
},
|
|
333
|
-
],
|
|
334
|
-
},
|
|
335
|
-
},
|
|
336
|
-
},
|
|
337
|
-
};
|
|
338
|
-
dedupeSchemas(doc);
|
|
339
|
-
// Should keep only SchemaA
|
|
340
|
-
const schemas = doc.service?.schemas;
|
|
341
|
-
assert.strictEqual(Object.keys(schemas || {}).length, 1);
|
|
342
|
-
assert.ok(schemas?.SchemaA);
|
|
343
|
-
const rest = doc.service?.protocols?.rest;
|
|
344
|
-
if (rest?.routes) {
|
|
345
|
-
const route = rest.routes[0];
|
|
346
|
-
assert.strictEqual(route.pathParams?.[0]?.schemaRef, "SchemaA");
|
|
347
|
-
assert.strictEqual(route.queryParams?.[0]?.schemaRef, "SchemaA");
|
|
348
|
-
assert.strictEqual(route.headers?.[0]?.schemaRef, "SchemaA");
|
|
349
|
-
assert.strictEqual(route.requestBody?.content?.["application/json"]?.schemaRef, "SchemaA");
|
|
350
|
-
assert.strictEqual(route.responses?.["200"]?.content?.["application/json"]?.schemaRef, "SchemaA");
|
|
351
|
-
}
|
|
352
|
-
const ws = doc.service?.protocols?.websocket;
|
|
353
|
-
if (ws?.channels) {
|
|
354
|
-
const wsMessage = ws.channels[0].messages?.[0];
|
|
355
|
-
if (wsMessage) {
|
|
356
|
-
assert.strictEqual(wsMessage.schemaRef, "SchemaA");
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
});
|
|
361
|
-
describe("integration with real examples", () => {
|
|
362
|
-
it("should handle mixed-complete example correctly", () => {
|
|
363
|
-
const doc = loadExample(getExamplePath("valid", "spec", "mixed-complete.json"));
|
|
364
|
-
// Test resolving existing schemas
|
|
365
|
-
const createOrderSchema = resolveSchemaRef(doc, "CreateOrderRequest");
|
|
366
|
-
assert.ok(createOrderSchema?.jsonSchema.properties);
|
|
367
|
-
const createOrderProperties = createOrderSchema.jsonSchema
|
|
368
|
-
.properties;
|
|
369
|
-
assert.ok(createOrderProperties.productIds);
|
|
370
|
-
assert.ok(createOrderProperties.customerId);
|
|
371
|
-
const orderStatusSchema = resolveSchemaRef(doc, "OrderStatusUpdate");
|
|
372
|
-
assert.ok(orderStatusSchema);
|
|
373
|
-
assert.strictEqual(orderStatusSchema.jsonSchema.type, "object");
|
|
374
|
-
assert.ok(orderStatusSchema.jsonSchema.properties);
|
|
375
|
-
const orderStatusProperties = orderStatusSchema.jsonSchema
|
|
376
|
-
.properties;
|
|
377
|
-
assert.ok(orderStatusProperties.orderId);
|
|
378
|
-
assert.ok(orderStatusProperties.status);
|
|
379
|
-
// Test deduplication with no duplicates
|
|
380
|
-
const schemas = doc.service?.schemas;
|
|
381
|
-
const originalSchemaCount = Object.keys(schemas || {}).length;
|
|
382
|
-
dedupeSchemas(doc);
|
|
383
|
-
assert.strictEqual(Object.keys(schemas || {}).length, originalSchemaCount);
|
|
384
|
-
});
|
|
385
|
-
it("should handle documents without schemas gracefully", () => {
|
|
386
|
-
const doc = loadExample(getExamplePath("valid", "spec", "rest-simple.json"));
|
|
387
|
-
// Should not throw when resolving non-existent schemas
|
|
388
|
-
assert.strictEqual(resolveSchemaRef(doc, "NonExistent"), undefined);
|
|
389
|
-
// Should not throw when deduplicating
|
|
390
|
-
dedupeSchemas(doc);
|
|
391
|
-
// Should still have no schemas
|
|
392
|
-
assert.strictEqual(doc.service?.schemas, undefined);
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
});
|
package/dist/tests/utils.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { UniSpecChange } from "../src/diff/types.js";
|
|
2
|
-
import type { UniSpecDocument } from "../src/types/index.js";
|
|
3
|
-
export declare const examplesDir: string;
|
|
4
|
-
export declare function loadExample(filePath: string): UniSpecDocument;
|
|
5
|
-
export declare function getExamplePath(...parts: string[]): string;
|
|
6
|
-
export declare function createTestDocument(overrides?: Partial<UniSpecDocument>): UniSpecDocument;
|
|
7
|
-
export declare function createTestChange(overrides?: Partial<UniSpecChange>): UniSpecChange;
|
|
8
|
-
export declare function loadInvalidExample(filePath: string): unknown;
|
|
9
|
-
export declare function getValidExamplePaths(): string[];
|
|
10
|
-
export declare function getInvalidExamplePaths(): string[];
|
package/dist/tests/utils.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
export const examplesDir = path.join(process.cwd(), "node_modules", "@unispechq", "unispec-schema", "examples");
|
|
4
|
-
export function loadExample(filePath) {
|
|
5
|
-
const content = fs.readFileSync(filePath, "utf-8");
|
|
6
|
-
const parsed = JSON.parse(content);
|
|
7
|
-
return parsed;
|
|
8
|
-
}
|
|
9
|
-
export function getExamplePath(...parts) {
|
|
10
|
-
return path.join(examplesDir, ...parts);
|
|
11
|
-
}
|
|
12
|
-
export function createTestDocument(overrides = {}) {
|
|
13
|
-
const base = {
|
|
14
|
-
unispecVersion: "1.0.0",
|
|
15
|
-
service: {
|
|
16
|
-
name: "test-service",
|
|
17
|
-
description: "Test service description",
|
|
18
|
-
protocols: {
|
|
19
|
-
rest: {
|
|
20
|
-
routes: [
|
|
21
|
-
{
|
|
22
|
-
name: "getUsers",
|
|
23
|
-
summary: "Get all users",
|
|
24
|
-
path: "/users",
|
|
25
|
-
method: "GET",
|
|
26
|
-
responses: {
|
|
27
|
-
"200": { description: "Success" },
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
graphql: {
|
|
33
|
-
queries: [
|
|
34
|
-
{
|
|
35
|
-
name: "users",
|
|
36
|
-
description: "Get all users",
|
|
37
|
-
args: [],
|
|
38
|
-
returnType: "[User!]!",
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
mutations: [
|
|
42
|
-
{
|
|
43
|
-
name: "createUser",
|
|
44
|
-
description: "Create a user",
|
|
45
|
-
args: [],
|
|
46
|
-
returnType: "User!",
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
schema: "type User { id: ID! name: String! }",
|
|
50
|
-
},
|
|
51
|
-
websocket: {
|
|
52
|
-
channels: [
|
|
53
|
-
{
|
|
54
|
-
name: "notifications",
|
|
55
|
-
description: "Real-time notifications",
|
|
56
|
-
messages: [
|
|
57
|
-
{
|
|
58
|
-
name: "notification",
|
|
59
|
-
description: "Notification message",
|
|
60
|
-
direction: "subscribe",
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
// Deep merge overrides
|
|
70
|
-
return mergeDeep(base, overrides);
|
|
71
|
-
}
|
|
72
|
-
function mergeDeep(target, source) {
|
|
73
|
-
const result = { ...target };
|
|
74
|
-
for (const key in source) {
|
|
75
|
-
if (source[key] !== undefined) {
|
|
76
|
-
if (typeof source[key] === "object" &&
|
|
77
|
-
source[key] !== null &&
|
|
78
|
-
!Array.isArray(source[key])) {
|
|
79
|
-
result[key] = mergeDeep(result[key], source[key]);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
result[key] = source[key];
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return result;
|
|
87
|
-
}
|
|
88
|
-
export function createTestChange(overrides = {}) {
|
|
89
|
-
const base = {
|
|
90
|
-
path: "/test/path",
|
|
91
|
-
description: "Test change",
|
|
92
|
-
severity: "unknown",
|
|
93
|
-
};
|
|
94
|
-
return { ...base, ...overrides };
|
|
95
|
-
}
|
|
96
|
-
export function loadInvalidExample(filePath) {
|
|
97
|
-
const content = fs.readFileSync(filePath, "utf-8");
|
|
98
|
-
return JSON.parse(content);
|
|
99
|
-
}
|
|
100
|
-
export function getValidExamplePaths() {
|
|
101
|
-
const validSpecDir = path.join(examplesDir, "valid", "spec");
|
|
102
|
-
return [
|
|
103
|
-
path.join(validSpecDir, "rest-simple.json"),
|
|
104
|
-
path.join(validSpecDir, "graphql-simple.json"),
|
|
105
|
-
path.join(validSpecDir, "websocket-simple.json"),
|
|
106
|
-
path.join(validSpecDir, "mixed-complete.json"),
|
|
107
|
-
];
|
|
108
|
-
}
|
|
109
|
-
export function getInvalidExamplePaths() {
|
|
110
|
-
const invalidSpecDir = path.join(examplesDir, "invalid", "spec");
|
|
111
|
-
return [
|
|
112
|
-
path.join(invalidSpecDir, "missing-unispec-version.json"),
|
|
113
|
-
path.join(invalidSpecDir, "missing-service-name.json"),
|
|
114
|
-
path.join(invalidSpecDir, "invalid-rest-method.json"),
|
|
115
|
-
path.join(invalidSpecDir, "graphql-missing-name.json"),
|
|
116
|
-
path.join(invalidSpecDir, "invalid-identifier.json"),
|
|
117
|
-
];
|
|
118
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert";
|
|
2
|
-
import { describe, it } from "node:test";
|
|
3
|
-
import { validateUniSpecConfig } from "../../src/validator/index.js";
|
|
4
|
-
import { loadInvalidConfigExample, loadValidConfigExample } from "./utils.js";
|
|
5
|
-
describe("validateUniSpecConfig", () => {
|
|
6
|
-
describe("valid examples", () => {
|
|
7
|
-
it("should validate simple multi-service config", async () => {
|
|
8
|
-
const doc = loadValidConfigExample("simple-multi-service");
|
|
9
|
-
const result = await validateUniSpecConfig(doc);
|
|
10
|
-
assert.strictEqual(result.valid, true, "Valid multi-service config should pass validation");
|
|
11
|
-
assert.deepStrictEqual(result.errors, [], "Should have no errors");
|
|
12
|
-
});
|
|
13
|
-
it("should validate registry-based config", async () => {
|
|
14
|
-
const doc = loadValidConfigExample("registry-based");
|
|
15
|
-
const result = await validateUniSpecConfig(doc);
|
|
16
|
-
assert.strictEqual(result.valid, true, "Valid registry-based config should pass validation");
|
|
17
|
-
assert.deepStrictEqual(result.errors, [], "Should have no errors");
|
|
18
|
-
});
|
|
19
|
-
it("should validate complete enterprise config", async () => {
|
|
20
|
-
const doc = loadValidConfigExample("complete-enterprise");
|
|
21
|
-
const result = await validateUniSpecConfig(doc);
|
|
22
|
-
assert.strictEqual(result.valid, true, "Valid enterprise config should pass validation");
|
|
23
|
-
assert.deepStrictEqual(result.errors, [], "Should have no errors");
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe("invalid examples", () => {
|
|
27
|
-
it("should reject config missing services", async () => {
|
|
28
|
-
const doc = loadInvalidConfigExample("missing-services");
|
|
29
|
-
const result = await validateUniSpecConfig(doc);
|
|
30
|
-
assert.strictEqual(result.valid, false, "Config without services should fail validation");
|
|
31
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
32
|
-
// Check that error mentions missing required property
|
|
33
|
-
const hasServicesError = result.errors.some((error) => error.message?.includes("services"));
|
|
34
|
-
assert.ok(hasServicesError, "Should have error about missing services");
|
|
35
|
-
});
|
|
36
|
-
it("should reject config with empty services array", async () => {
|
|
37
|
-
const doc = loadInvalidConfigExample("empty-services-array");
|
|
38
|
-
const result = await validateUniSpecConfig(doc);
|
|
39
|
-
assert.strictEqual(result.valid, false, "Config with empty services array should fail validation");
|
|
40
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
41
|
-
});
|
|
42
|
-
it("should reject config missing version", async () => {
|
|
43
|
-
const doc = loadInvalidConfigExample("missing-version");
|
|
44
|
-
const result = await validateUniSpecConfig(doc);
|
|
45
|
-
assert.strictEqual(result.valid, false, "Config without version should fail validation");
|
|
46
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
47
|
-
});
|
|
48
|
-
it("should reject config with invalid spec reference", async () => {
|
|
49
|
-
const doc = loadInvalidConfigExample("invalid-spec-reference");
|
|
50
|
-
const result = await validateUniSpecConfig(doc);
|
|
51
|
-
assert.strictEqual(result.valid, false, "Config with invalid spec reference should fail validation");
|
|
52
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
53
|
-
});
|
|
54
|
-
it("should reject config missing service name", async () => {
|
|
55
|
-
const doc = loadInvalidConfigExample("missing-service-name");
|
|
56
|
-
const result = await validateUniSpecConfig(doc);
|
|
57
|
-
assert.strictEqual(result.valid, false, "Config without service name should fail validation");
|
|
58
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe("edge cases", () => {
|
|
62
|
-
it("should reject null input", async () => {
|
|
63
|
-
const result = await validateUniSpecConfig(null);
|
|
64
|
-
assert.strictEqual(result.valid, false, "Null input should fail validation");
|
|
65
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
66
|
-
});
|
|
67
|
-
it("should reject undefined input", async () => {
|
|
68
|
-
const result = await validateUniSpecConfig(undefined);
|
|
69
|
-
assert.strictEqual(result.valid, false, "Undefined input should fail validation");
|
|
70
|
-
assert.ok(result.errors.length > 0, "Should have validation errors");
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
});
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|