Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: export schemas #105

Merged
merged 1 commit into from
Jun 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
// Namespace exports
// Schemas must be exported first.

/**
* All schemas used to validate the components.
*/
export * as schemas from './lib/Schemas';

/**
* Reusable components are an extension of base components
Expand Down
4 changes: 4 additions & 0 deletions src/lib/Components/Commands/schemas/Native/Cache/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import RestoreSchema from './Restore.schema';
import SaveSchema from './Save.schema';

export { RestoreSchema, SaveSchema };
4 changes: 4 additions & 0 deletions src/lib/Components/Commands/schemas/Native/Workspace/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import AttachWorkspaceSchema from './Attach.schema';
import PersistSchema from './Persist.schema';

export { AttachWorkspaceSchema, PersistSchema };
4 changes: 4 additions & 0 deletions src/lib/Components/Commands/schemas/Reusable/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import CustomCommandSchema from './CustomCommand.schema';
import ReusableCommandSchema from './ReusableCommand.schema';

export { CustomCommandSchema, ReusableCommandSchema };
23 changes: 23 additions & 0 deletions src/lib/Components/Commands/schemas/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import AddSSHKeysSchema from './Native/AddSSHKeys.schema';
import * as cache from './Native/Cache';
import CheckoutSchema from './Native/Checkout.schema';
import RunSchema from './Native/Run.schema';
import SetupRemoteDockerSchema from './Native/SetupRemoteDocker.schema';
import StoreArtifactsSchema from './Native/StoreArtifacts.schema';
import StoreTestResultsSchema from './Native/StoreTestResults.schema';
import * as workspace from './Native/Workspace';
import * as steps from './Steps.schema';
import * as reusable from './Reusable';

export {
cache,
workspace,
steps,
reusable,
AddSSHKeysSchema,
CheckoutSchema,
RunSchema,
SetupRemoteDockerSchema,
StoreArtifactsSchema,
StoreTestResultsSchema,
};
15 changes: 15 additions & 0 deletions src/lib/Components/Executors/schemas/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import DockerExecutableSchema from './DockerExecutable.schema';
import ExecutorSchema from './Executor.schema';
import MachineExecutableSchema from './MachineExecutable.schema';
import MacOSExecutableSchema from './MacosExecutable.schema';
import WindowsExecutableSchema from './WindowsExecutable.schema';
import * as reusable from './ReusableExecutable.schema';

export {
reusable,
DockerExecutableSchema,
ExecutorSchema,
MachineExecutableSchema,
MacOSExecutableSchema,
WindowsExecutableSchema,
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
import { SchemaObject } from 'ajv';
import { genParameterListSchema } from '.';

const genParameterListSchema = (type: string): SchemaObject => {
return {
$id: `#/parameters/${type}ParameterList`,
type: 'object',
description:
'https://circleci.com/docs/2.0/reusing-config/#using-the-parameters-declaration\n\nA map of parameter keys.',
patternProperties: {
'^[a-z][a-z0-9_-]+$': { $ref: `#/parameters/${type}Parameters` },
},
};
};

const JobParameterListSchema: SchemaObject = genParameterListSchema('Job');
const CommandParameterListSchema: SchemaObject =
Expand Down
26 changes: 13 additions & 13 deletions src/lib/Components/Parameters/schemas/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { SchemaObject } from 'ajv';
import ExecutorParametersSchema from './ExecutorParameters.schema';
import JobParametersSchema from './JobParameters.schema';
import CommandParametersSchema from './CommandParameters.schema';
import PipelineParametersSchema from './PipelineParameters.schema';
import * as lists from './ComponentParameterLists.schema';
import * as types from './ParameterTypes.schema';

const genParameterListSchema = (type: string): SchemaObject => {
return {
$id: `#/parameters/${type}ParameterList`,
type: 'object',
description:
'https://circleci.com/docs/2.0/reusing-config/#using-the-parameters-declaration\n\nA map of parameter keys.',
patternProperties: {
'^[a-z][a-z0-9_-]+$': { $ref: `#/parameters/${type}Parameters` },
},
};
export {
lists,
types,
ExecutorParametersSchema,
JobParametersSchema,
CommandParametersSchema,
PipelineParametersSchema,
};

export { genParameterListSchema };
4 changes: 4 additions & 0 deletions src/lib/Components/Workflow/schemas/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import WorkflowSchema from './Workflow.schema';
import WorkflowJobSchema from './WorkflowJob.schema';

export { WorkflowSchema, WorkflowJobSchema };
149 changes: 57 additions & 92 deletions src/lib/Config/exports/Validator.ts
Original file line number Diff line number Diff line change
@@ -1,54 +1,5 @@
import Ajv, { ErrorObject, SchemaObject } from 'ajv';
import ajvMergePatch from 'ajv-merge-patch';
import AddSSHKeysSchema from '../../Components/Commands/schemas/Native/AddSSHKeys.schema';
import RestoreSchema from '../../Components/Commands/schemas/Native/Cache/Restore.schema';
import SaveSchema from '../../Components/Commands/schemas/Native/Cache/Save.schema';
import CheckoutSchema from '../../Components/Commands/schemas/Native/Checkout.schema';
import RunSchema from '../../Components/Commands/schemas/Native/Run.schema';
import SetupRemoteDockerSchema from '../../Components/Commands/schemas/Native/SetupRemoteDocker.schema';
import StoreArtifactsSchema from '../../Components/Commands/schemas/Native/StoreArtifacts.schema';
import StoreTestResultsSchema from '../../Components/Commands/schemas/Native/StoreTestResults.schema';
import AttachWorkspaceSchema from '../../Components/Commands/schemas/Native/Workspace/Attach.schema';
import PersistSchema from '../../Components/Commands/schemas/Native/Workspace/Persist.schema';
import CustomCommandSchema from '../../Components/Commands/schemas/Reusable/CustomCommand.schema';
import ReusableCommandSchema from '../../Components/Commands/schemas/Reusable/ReusableCommand.schema';
import {
StepSchema,
StepsSchema,
} from '../../Components/Commands/schemas/Steps.schema';
import DockerExecutableSchema from '../../Components/Executors/schemas/DockerExecutable.schema';
import ExecutorSchema from '../../Components/Executors/schemas/Executor.schema';
import MachineExecutableSchema from '../../Components/Executors/schemas/MachineExecutable.schema';
import MacOSExecutableSchema from '../../Components/Executors/schemas/MacosExecutable.schema';
import {
ReusableExecutorUsageSchema,
ReusableExecutorsListSchema,
ReusableExecutorSchema,
} from '../../Components/Executors/schemas/ReusableExecutable.schema';
import WindowsExecutableSchema from '../../Components/Executors/schemas/WindowsExecutable.schema';
import JobSchema from '../../Components/Job/schemas/Job.schema';
import CommandParametersSchema from '../../Components/Parameters/schemas/CommandParameters.schema';
import {
CommandParameterListSchema,
ExecutorParameterListSchema,
JobParameterListSchema,
PipelineParameterListSchema,
} from '../../Components/Parameters/schemas/ComponentParameterLists.schema';
import ExecutorParametersSchema from '../../Components/Parameters/schemas/ExecutorParameters.schema';
import JobParametersSchema from '../../Components/Parameters/schemas/JobParameters.schema';
import {
BooleanParameterSchema,
EnumParameterSchema,
EnvVarNameParameterSchema,
ExecutorParameterSchema,
IntegerParameterSchema,
StepsParameterSchema,
StringParameterSchema,
} from '../../Components/Parameters/schemas/ParameterTypes.schema';
import PipelineParametersSchema from '../../Components/Parameters/schemas/PipelineParameters.schema';
import WorkflowSchema from '../../Components/Workflow/schemas/Workflow.schema';
import WorkflowJobSchema from '../../Components/Workflow/schemas/WorkflowJob.schema';
import ConfigSchema from '../schemas/Config.schema';
import { GenerableSubtypes } from '../types/Mapping.types';
import { ValidationMap, ValidationResult } from '../types/Validator.types';
import {
Expand All @@ -57,57 +8,71 @@ import {
ParameterSubtype,
} from './Mapping';
import validationError from 'better-ajv-errors';
import { schemas } from '../../..';

const schemaRegistry: ValidationMap = {
[GenerableType.CONFIG]: ConfigSchema,
[GenerableType.REUSABLE_COMMAND]: ReusableCommandSchema,
[GenerableType.CUSTOM_COMMAND]: CustomCommandSchema,
[GenerableType.RESTORE]: RestoreSchema,
[GenerableType.SAVE]: SaveSchema,
[GenerableType.ATTACH]: AttachWorkspaceSchema,
[GenerableType.PERSIST]: PersistSchema,
[GenerableType.ADD_SSH_KEYS]: AddSSHKeysSchema,
[GenerableType.CHECKOUT]: CheckoutSchema,
[GenerableType.RUN]: RunSchema,
[GenerableType.SETUP_REMOTE_DOCKER]: SetupRemoteDockerSchema,
[GenerableType.STORE_ARTIFACTS]: StoreArtifactsSchema,
[GenerableType.STORE_TEST_RESULTS]: StoreTestResultsSchema,

[GenerableType.ANY_EXECUTOR]: ExecutorSchema,
[GenerableType.DOCKER_EXECUTOR]: DockerExecutableSchema,
[GenerableType.MACHINE_EXECUTOR]: MachineExecutableSchema,
[GenerableType.MACOS_EXECUTOR]: MacOSExecutableSchema,
[GenerableType.WINDOWS_EXECUTOR]: WindowsExecutableSchema,
[GenerableType.REUSABLE_EXECUTOR]: ReusableExecutorSchema,
[GenerableType.REUSABLE_EXECUTOR_LIST]: ReusableExecutorsListSchema,
[GenerableType.REUSED_EXECUTOR]: ReusableExecutorUsageSchema,

[GenerableType.STEP]: StepSchema,
[GenerableType.STEP_LIST]: StepsSchema,
[GenerableType.JOB]: JobSchema,
[GenerableType.WORKFLOW_JOB]: WorkflowJobSchema,
[GenerableType.WORKFLOW]: WorkflowSchema,
[GenerableType.CONFIG]: schemas.ConfigSchema,
[GenerableType.REUSABLE_COMMAND]:
schemas.command.reusable.ReusableCommandSchema,
[GenerableType.CUSTOM_COMMAND]: schemas.command.reusable.CustomCommandSchema,
[GenerableType.RESTORE]: schemas.command.cache.RestoreSchema,
[GenerableType.SAVE]: schemas.command.cache.SaveSchema,
[GenerableType.ATTACH]: schemas.command.workspace.AttachWorkspaceSchema,
[GenerableType.PERSIST]: schemas.command.workspace.PersistSchema,
[GenerableType.ADD_SSH_KEYS]: schemas.command.AddSSHKeysSchema,
[GenerableType.CHECKOUT]: schemas.command.CheckoutSchema,
[GenerableType.RUN]: schemas.command.RunSchema,
[GenerableType.SETUP_REMOTE_DOCKER]: schemas.command.SetupRemoteDockerSchema,
[GenerableType.STORE_ARTIFACTS]: schemas.command.StoreArtifactsSchema,
[GenerableType.STORE_TEST_RESULTS]: schemas.command.StoreTestResultsSchema,

[GenerableType.ANY_EXECUTOR]: schemas.executor.ExecutorSchema,
[GenerableType.DOCKER_EXECUTOR]: schemas.executor.DockerExecutableSchema,
[GenerableType.MACHINE_EXECUTOR]: schemas.executor.MachineExecutableSchema,
[GenerableType.MACOS_EXECUTOR]: schemas.executor.MacOSExecutableSchema,
[GenerableType.WINDOWS_EXECUTOR]: schemas.executor.WindowsExecutableSchema,
[GenerableType.REUSABLE_EXECUTOR]:
schemas.executor.reusable.ReusableExecutorSchema,
[GenerableType.REUSABLE_EXECUTOR_LIST]:
schemas.executor.reusable.ReusableExecutorsListSchema,
[GenerableType.REUSED_EXECUTOR]:
schemas.executor.reusable.ReusableExecutorUsageSchema,

[GenerableType.STEP]: schemas.command.steps.StepSchema,
[GenerableType.STEP_LIST]: schemas.command.steps.StepsSchema,
[GenerableType.JOB]: schemas.JobSchema,
[GenerableType.WORKFLOW_JOB]: schemas.workflow.WorkflowJobSchema,
[GenerableType.WORKFLOW]: schemas.workflow.WorkflowSchema,

[GenerableType.CUSTOM_PARAMETER]: {
/* Custom Parameter Config Components */
[ParameterizedComponent.JOB]: JobParametersSchema,
[ParameterizedComponent.COMMAND]: CommandParametersSchema,
[ParameterizedComponent.EXECUTOR]: ExecutorParametersSchema,
[ParameterizedComponent.PIPELINE]: PipelineParametersSchema,
[ParameterizedComponent.JOB]: schemas.parameter.JobParametersSchema,
[ParameterizedComponent.COMMAND]: schemas.parameter.CommandParametersSchema,
[ParameterizedComponent.EXECUTOR]:
schemas.parameter.ExecutorParametersSchema,
[ParameterizedComponent.PIPELINE]:
schemas.parameter.PipelineParametersSchema,
/** Custom Parameter Generics */
[ParameterSubtype.STRING]: StringParameterSchema,
[ParameterSubtype.BOOLEAN]: BooleanParameterSchema,
[ParameterSubtype.INTEGER]: IntegerParameterSchema,
[ParameterSubtype.EXECUTOR]: ExecutorParameterSchema,
[ParameterSubtype.STEPS]: StepsParameterSchema,
[ParameterSubtype.ENV_VAR_NAME]: EnvVarNameParameterSchema,
[ParameterSubtype.STRING]: schemas.parameter.types.StringParameterSchema,
[ParameterSubtype.BOOLEAN]: schemas.parameter.types.BooleanParameterSchema,
[ParameterSubtype.INTEGER]: schemas.parameter.types.IntegerParameterSchema,
[ParameterSubtype.EXECUTOR]:
schemas.parameter.types.ExecutorParameterSchema,
[ParameterSubtype.STEPS]: schemas.parameter.types.StepsParameterSchema,
[ParameterSubtype.ENV_VAR_NAME]:
schemas.parameter.types.EnvVarNameParameterSchema,
},
[GenerableType.CUSTOM_ENUM_PARAMETER]: EnumParameterSchema,
[GenerableType.CUSTOM_ENUM_PARAMETER]:
schemas.parameter.types.EnumParameterSchema,
[GenerableType.CUSTOM_PARAMETERS_LIST]: {
[ParameterizedComponent.JOB]: JobParameterListSchema,
[ParameterizedComponent.COMMAND]: CommandParameterListSchema,
[ParameterizedComponent.EXECUTOR]: ExecutorParameterListSchema,
[ParameterizedComponent.PIPELINE]: PipelineParameterListSchema,
[ParameterizedComponent.JOB]:
schemas.parameter.lists.JobParameterListSchema,
[ParameterizedComponent.COMMAND]:
schemas.parameter.lists.CommandParameterListSchema,
[ParameterizedComponent.EXECUTOR]:
schemas.parameter.lists.ExecutorParameterListSchema,
[ParameterizedComponent.PIPELINE]:
schemas.parameter.lists.PipelineParameterListSchema,
},

[GenerableType.WHEN]: {},
Expand Down
8 changes: 8 additions & 0 deletions src/lib/Schemas/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import JobSchema from '../Components/Job/schemas/Job.schema';
import ConfigSchema from '../Config/schemas/Config.schema';

export * as parameter from '../Components/Parameters/schemas';
export * as executor from '../Components/Executors/schemas';
export * as command from '../Components/Commands/schemas';
export * as workflow from '../Components/Workflow/schemas';
export { JobSchema, ConfigSchema };