Skip to content

Commit

Permalink
chore(core): setup package exports
Browse files Browse the repository at this point in the history
  • Loading branch information
P0lip committed Feb 14, 2022
1 parent 419dfce commit cfedd33
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 44 deletions.
15 changes: 13 additions & 2 deletions packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{
"name": "@stoplight/spectral-core",
"version": "1.10.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"sideEffects": false,
"homepage": "https://github.com/stoplightio/spectral",
"bugs": "https://github.com/stoplightio/spectral/issues",
Expand All @@ -15,6 +13,19 @@
"files": [
"dist"
],
"type": "commonjs",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"require": "./dist/index.js"
},
"./ruleset/validation": {
"types": "./dist/ruleset/validation/index.d.ts",
"require": "./dist/ruleset/validation/index.js"
}
},
"engines": {
"node": "^12.20 || >= 14.13"
},
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/ruleset/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ export { getDiagnosticSeverity } from './utils';
export { createRulesetFunction, SchemaDefinition as RulesetFunctionSchemaDefinition } from './function';
export { Format } from './format';
export { RulesetDefinition, RuleDefinition, ParserOptions, HumanReadableDiagnosticSeverity } from './types';
export { Ruleset } from './ruleset';
export { Rule } from './rule';
export { Ruleset, StringifiedRuleset } from './ruleset';
export { Rule, StringifiedRule } from './rule';
2 changes: 1 addition & 1 deletion packages/core/src/ruleset/mergers/rules.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Optional } from '@stoplight/types';
import { assertValidRule } from '../validation/index';
import { assertValidRule } from '../validation/assertions';
import { Rule } from '../rule';
import type { Ruleset } from '../ruleset';
import { FileRuleDefinition } from '../types';
Expand Down
34 changes: 34 additions & 0 deletions packages/core/src/ruleset/validation/assertions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { isPlainObject } from '@stoplight/json';
import { createValidator } from './ajv';
import { convertAjvErrors, RulesetValidationError } from './errors';
import type { FileRuleDefinition, RuleDefinition, RulesetDefinition } from '../types';
import AggregateError from 'es-aggregate-error';

export function assertValidRuleset(
ruleset: unknown,
format: 'js' | 'json' = 'js',
): asserts ruleset is RulesetDefinition {
if (!isPlainObject(ruleset)) {
throw new RulesetValidationError('Provided ruleset is not an object', []);
}

if (!('rules' in ruleset) && !('extends' in ruleset) && !('overrides' in ruleset)) {
throw new RulesetValidationError('Ruleset must have rules or extends or overrides defined', []);
}

const validate = createValidator(format);

if (!validate(ruleset)) {
throw new AggregateError(convertAjvErrors(validate.errors ?? []));
}
}

function isRuleDefinition(rule: FileRuleDefinition): rule is RuleDefinition {
return typeof rule === 'object' && rule !== null && !Array.isArray(rule) && ('given' in rule || 'then' in rule);
}

export function assertValidRule(rule: FileRuleDefinition, name: string): asserts rule is RuleDefinition {
if (!isRuleDefinition(rule)) {
throw new RulesetValidationError('Rule definition expected', ['rules', name]);
}
}
41 changes: 2 additions & 39 deletions packages/core/src/ruleset/validation/index.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,2 @@
import { isPlainObject } from '@stoplight/json';
import AggregateError = require('es-aggregate-error');

import type { FileRuleDefinition, RuleDefinition, RulesetDefinition } from '../types';
import { createValidator } from './ajv';
import { convertAjvErrors } from './errors';

import { RulesetValidationError } from './errors';

export { RulesetValidationError };

export function assertValidRuleset(
ruleset: unknown,
format: 'js' | 'json' = 'js',
): asserts ruleset is RulesetDefinition {
if (!isPlainObject(ruleset)) {
throw new RulesetValidationError('Provided ruleset is not an object', []);
}

if (!('rules' in ruleset) && !('extends' in ruleset) && !('overrides' in ruleset)) {
throw new RulesetValidationError('Ruleset must have rules or extends or overrides defined', []);
}

const validate = createValidator(format);

if (!validate(ruleset)) {
throw new AggregateError(convertAjvErrors(validate.errors ?? []));
}
}

function isRuleDefinition(rule: FileRuleDefinition): rule is RuleDefinition {
return typeof rule === 'object' && rule !== null && !Array.isArray(rule) && ('given' in rule || 'then' in rule);
}

export function assertValidRule(rule: FileRuleDefinition, name: string): asserts rule is RuleDefinition {
if (!isRuleDefinition(rule)) {
throw new RulesetValidationError('Rule definition expected', ['rules', name]);
}
}
export { RulesetValidationError } from './errors';
export { assertValidRuleset } from './assertions';

0 comments on commit cfedd33

Please sign in to comment.