@prismatic-io/spectral 8.0.0-preview7 → 8.0.0-preview8

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/index.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * authors create inputs, actions, and components that can
4
4
  * be processed by the Prismatic API.
5
5
  */
6
- import { ActionDefinition, InputFieldDefinition, ComponentDefinition, DefaultConnectionDefinition, OAuth2ConnectionDefinition, Inputs, TriggerDefinition, ActionPerformReturn, TriggerResult, DataSourceDefinition, IntegrationDefinition, Flow, ConfigPage } from "./types";
6
+ import { ActionDefinition, InputFieldDefinition, ComponentDefinition, DefaultConnectionDefinition, OAuth2ConnectionDefinition, Inputs, TriggerDefinition, ActionPerformReturn, TriggerResult, DataSourceDefinition, IntegrationDefinition, Flow, ConfigPage, StandardConfigVar, ConnectionConfigVar, ConnectionRefConfigVar } from "./types";
7
7
  import { convertComponent, convertIntegration } from "./serverTypes/convert";
8
8
  /**
9
9
  * This function creates a Integration object that can be
@@ -28,6 +28,27 @@ export declare const flow: <T extends Flow>(definition: T) => T;
28
28
  * @returns This function returns a config page object that has the shape the Prismatic API expects.
29
29
  */
30
30
  export declare const configPage: <T extends ConfigPage>(definition: T) => T;
31
+ /**
32
+ * For information on writing Code Native Integrations, see
33
+ * https://prismatic.io/docs/code-native-integrations/#adding-config-vars.
34
+ * @param definition A Config Var type object.
35
+ * @returns This function returns a standard config var object that has the shape the Prismatic API expects.
36
+ */
37
+ export declare const configVar: <T extends StandardConfigVar>(definition: T) => T;
38
+ /**
39
+ * For information on writing Code Native Integrations, see
40
+ * https://prismatic.io/docs/code-native-integrations/#adding-config-vars.
41
+ * @param definition A Connection Config Var type object.
42
+ * @returns This function returns a connection config var object that has the shape the Prismatic API expects.
43
+ */
44
+ export declare const connectionConfigVar: <T extends ConnectionConfigVar>(definition: T) => T;
45
+ /**
46
+ * For information on writing Code Native Integrations, see
47
+ * https://prismatic.io/docs/code-native-integrations/#adding-config-vars.
48
+ * @param definition A Connection Reference Config Var type object.
49
+ * @returns This function returns a connection reference config var object that has the shape the Prismatic API expects.
50
+ */
51
+ export declare const connectionRefConfigVar: <T extends ConnectionRefConfigVar>(definition: T) => T;
31
52
  /**
32
53
  * This function creates a component object that can be
33
54
  * imported into the Prismatic API. For information on using
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.testing = exports.util = exports.oauth2Connection = exports.connection = exports.input = exports.dataSource = exports.trigger = exports.action = exports.component = exports.configPage = exports.flow = exports.integration = void 0;
25
+ exports.testing = exports.util = exports.oauth2Connection = exports.connection = exports.input = exports.dataSource = exports.trigger = exports.action = exports.component = exports.connectionRefConfigVar = exports.connectionConfigVar = exports.configVar = exports.configPage = exports.flow = exports.integration = void 0;
26
26
  const convert_1 = require("./serverTypes/convert");
27
27
  /**
28
28
  * This function creates a Integration object that can be
@@ -50,6 +50,30 @@ exports.flow = flow;
50
50
  */
51
51
  const configPage = (definition) => definition;
52
52
  exports.configPage = configPage;
53
+ /**
54
+ * For information on writing Code Native Integrations, see
55
+ * https://prismatic.io/docs/code-native-integrations/#adding-config-vars.
56
+ * @param definition A Config Var type object.
57
+ * @returns This function returns a standard config var object that has the shape the Prismatic API expects.
58
+ */
59
+ const configVar = (definition) => definition;
60
+ exports.configVar = configVar;
61
+ /**
62
+ * For information on writing Code Native Integrations, see
63
+ * https://prismatic.io/docs/code-native-integrations/#adding-config-vars.
64
+ * @param definition A Connection Config Var type object.
65
+ * @returns This function returns a connection config var object that has the shape the Prismatic API expects.
66
+ */
67
+ const connectionConfigVar = (definition) => definition;
68
+ exports.connectionConfigVar = connectionConfigVar;
69
+ /**
70
+ * For information on writing Code Native Integrations, see
71
+ * https://prismatic.io/docs/code-native-integrations/#adding-config-vars.
72
+ * @param definition A Connection Reference Config Var type object.
73
+ * @returns This function returns a connection reference config var object that has the shape the Prismatic API expects.
74
+ */
75
+ const connectionRefConfigVar = (definition) => definition;
76
+ exports.connectionRefConfigVar = connectionRefConfigVar;
53
77
  /**
54
78
  * This function creates a component object that can be
55
79
  * imported into the Prismatic API. For information on using
@@ -135,17 +135,22 @@ const codeNativeIntegrationYaml = ({ name, description, category, documentation,
135
135
  /** Converts a Flow into the structure necessary for YAML generation. */
136
136
  const convertFlow = (flow, referenceKey) => {
137
137
  const result = Object.assign({}, flow);
138
+ delete result.onTrigger;
138
139
  delete result.trigger;
139
- delete result.action;
140
+ delete result.onInstanceDeploy;
141
+ delete result.onInstanceDelete;
142
+ delete result.onExecution;
140
143
  delete result.preprocessFlowConfig;
144
+ delete result.errorConfig;
141
145
  const triggerStep = {
142
- name: "trigger",
146
+ name: `${flow.name} - onTrigger`,
147
+ description: "The function that will be executed by the flow to return an HTTP response.",
143
148
  isTrigger: true,
144
- errorConfig: "errorConfig" in flow.trigger ? flow.trigger.errorConfig : undefined,
149
+ errorConfig: "errorConfig" in flow ? Object.assign({}, flow.errorConfig) : undefined,
145
150
  };
146
- if ("perform" in flow.trigger) {
151
+ if ("onTrigger" in flow) {
147
152
  triggerStep.action = {
148
- key: flowFunctionKey(flow.name, "trigger"),
153
+ key: flowFunctionKey(flow.name, "onTrigger"),
149
154
  component: { key: referenceKey, version: "LATEST", isPublic: false },
150
155
  };
151
156
  }
@@ -154,10 +159,9 @@ const convertFlow = (flow, referenceKey) => {
154
159
  key: flow.trigger.key,
155
160
  component: flow.trigger.component,
156
161
  };
157
- }
158
- if ("inputs" in flow.trigger) {
159
- triggerStep.inputs = flow.trigger.inputs;
160
- delete result.inputs;
162
+ if ("inputs" in flow.trigger) {
163
+ triggerStep.inputs = flow.trigger.inputs;
164
+ }
161
165
  }
162
166
  if ("schedule" in flow && typeof flow.schedule === "object") {
163
167
  triggerStep.schedule = {
@@ -176,34 +180,77 @@ const convertFlow = (flow, referenceKey) => {
176
180
  }
177
181
  const actionStep = {
178
182
  action: {
179
- key: flowFunctionKey(flow.name, "action"),
183
+ key: flowFunctionKey(flow.name, "onExecution"),
180
184
  component: { key: referenceKey, version: "LATEST", isPublic: false },
181
185
  },
182
- name: "action",
183
- errorConfig: "errorConfig" in flow.action ? flow.action.errorConfig : undefined,
186
+ name: `${flow.name} - onExecution`,
187
+ description: "The function that will be executed by the flow.",
188
+ errorConfig: "errorConfig" in flow ? Object.assign({}, flow.errorConfig) : undefined,
184
189
  };
185
190
  result.steps = [triggerStep, actionStep];
186
191
  return result;
187
192
  };
188
193
  /** Converts a Config Var into the structure necessary for YAML generation. */
189
194
  const convertConfigVar = (configVar, referenceKey) => {
190
- const result = Object.assign(Object.assign({}, configVar), { meta: {} });
195
+ // This is unfortunate but we need to strip out some fields that are not
196
+ // relevant to config vars.
197
+ const fields = [
198
+ "key",
199
+ "description",
200
+ "orgOnly",
201
+ "inputs",
202
+ "defaultValue",
203
+ "dataType",
204
+ "pickList",
205
+ "scheduleType",
206
+ "timeZone",
207
+ "codeLanguage",
208
+ "collectionType",
209
+ "dataSource",
210
+ ];
211
+ const result = Object.entries(configVar).reduce((result, [key, value]) => {
212
+ if (!fields.includes(key)) {
213
+ return result;
214
+ }
215
+ return Object.assign(Object.assign({}, result), { [key]: value });
216
+ }, { meta: {} });
191
217
  // Handle some non-standard fields.
192
- if ("visibleToOrgDeployer" in result) {
193
- result.meta.visibleToOrgDeployer = result.visibleToOrgDeployer;
194
- delete result.visibleToOrgDeployer;
218
+ if ("visibleToOrgDeployer" in configVar) {
219
+ result.meta.visibleToOrgDeployer = configVar.visibleToOrgDeployer;
195
220
  }
196
- if ("visibleToCustomerDeployer" in result) {
197
- result.meta.visibleToCustomerDeployer = result.visibleToCustomerDeployer;
198
- delete result.visibleToCustomerDeployer;
221
+ if ("visibleToCustomerDeployer" in configVar) {
222
+ result.meta.visibleToCustomerDeployer = configVar.visibleToCustomerDeployer;
199
223
  }
200
- if ("connection" in result && typeof result.connection === "string") {
201
- result.connection = {
202
- key: result.connection,
203
- component: { key: referenceKey, version: "LATEST", isPublic: false },
204
- };
224
+ // Handle connections.
225
+ if ("label" in configVar || "component" in configVar) {
226
+ result.dataType = "connection";
227
+ if ("component" in configVar) {
228
+ // This is a reference to another Component's connection.
229
+ result.connection = {
230
+ key: configVar.key,
231
+ component: configVar.component,
232
+ };
233
+ }
234
+ else {
235
+ // This refers to a connection we are creating.
236
+ result.connection = {
237
+ key: configVar.key,
238
+ component: { key: referenceKey, version: "LATEST", isPublic: false },
239
+ };
240
+ result.description = configVar.label;
241
+ // Convert connection inputs to the inputs expected in the YAML.
242
+ // FIXME: This is just a placeholder for now.
243
+ result.inputs = Object.keys(configVar.inputs).reduce((result, key) => {
244
+ return Object.assign(Object.assign({}, result), { [key]: {
245
+ type: types_1.SimpleInputValueType.Value,
246
+ value: "",
247
+ } });
248
+ }, {});
249
+ }
205
250
  }
251
+ // Handle data source references.
206
252
  if ("dataSource" in result && typeof result.dataSource === "string") {
253
+ // This is a reference to a data source we are creating.
207
254
  result.dataSource = {
208
255
  key: result.dataSource,
209
256
  component: { key: referenceKey, version: "LATEST", isPublic: false },
@@ -238,19 +285,50 @@ const flowFunctionKey = (flowName, functionName) => {
238
285
  };
239
286
  /** Creates the structure necessary to import a Component as part of a
240
287
  * Code Native integration. */
241
- const codeNativeIntegrationComponent = ({ name, iconPath, description, flows = [], dataSources = {}, connections = [], }, referenceKey) => {
242
- const convertedActions = flows.reduce((result, { name, action }) => {
243
- const actionKey = flowFunctionKey(name, "action");
244
- return Object.assign(Object.assign({}, result), { [actionKey]: convertAction(actionKey, Object.assign(Object.assign({}, action), { display: { label: "action", description: "" }, inputs: {} })) });
288
+ const codeNativeIntegrationComponent = ({ name, iconPath, description, flows = [], dataSources = {}, configVars = [], }, referenceKey) => {
289
+ const convertedActions = flows.reduce((result, { name, onExecution }) => {
290
+ const actionKey = flowFunctionKey(name, "onExecution");
291
+ return Object.assign(Object.assign({}, result), { [actionKey]: convertAction(actionKey, {
292
+ display: {
293
+ label: `${name} - onExecution`,
294
+ description: "The function that will be executed by the flow.",
295
+ },
296
+ perform: onExecution,
297
+ inputs: {},
298
+ }) });
245
299
  }, {});
246
- const convertedTriggers = flows.reduce((result, { name, trigger }) => {
300
+ const convertedTriggers = flows.reduce((result, flow) => {
247
301
  // Filter out TriggerReferences.
248
- if (typeof trigger !== "object" || !("perform" in trigger))
302
+ if ("trigger" in flow)
249
303
  return result;
250
- const triggerKey = flowFunctionKey(name, "trigger");
251
- return Object.assign(Object.assign({}, result), { [triggerKey]: convertTrigger(triggerKey, Object.assign(Object.assign({}, trigger), { display: { label: "trigger", description: "" }, inputs: {}, scheduleSupport: "valid", synchronousResponseSupport: "valid" })) });
304
+ const { name, onTrigger, onInstanceDeploy, onInstanceDelete } = flow;
305
+ const triggerKey = flowFunctionKey(name, "onTrigger");
306
+ return Object.assign(Object.assign({}, result), { [triggerKey]: convertTrigger(triggerKey, {
307
+ display: {
308
+ label: `${name} - onTrigger`,
309
+ description: "The function that will be executed by the flow to return an HTTP response.",
310
+ },
311
+ perform: onTrigger,
312
+ onInstanceDeploy: onInstanceDeploy,
313
+ onInstanceDelete: onInstanceDelete,
314
+ inputs: {},
315
+ scheduleSupport: "valid",
316
+ synchronousResponseSupport: "valid",
317
+ }) });
252
318
  }, {});
253
319
  const convertedDataSources = Object.entries(dataSources).reduce((result, [dataSourceKey, dataSource]) => (Object.assign(Object.assign({}, result), { [dataSourceKey]: convertDataSource(dataSourceKey, Object.assign(Object.assign({}, dataSource), { inputs: {} })) })), {});
320
+ const convertedConnections = configVars.reduce((result, configVar) => {
321
+ if (!("label" in configVar)) {
322
+ return result;
323
+ }
324
+ // Remove a few fields that are not relevant to connections.
325
+ const {
326
+ /* eslint-disable @typescript-eslint/no-unused-vars */
327
+ orgOnly, visibleToOrgDeployer, visibleToCustomerDeployer } = configVar,
328
+ /* eslint-enable @typescript-eslint/no-unused-vars */
329
+ connection = __rest(configVar, ["orgOnly", "visibleToOrgDeployer", "visibleToCustomerDeployer"]);
330
+ return [...result, convertConnection(connection)];
331
+ }, []);
254
332
  return {
255
333
  key: referenceKey,
256
334
  display: {
@@ -258,7 +336,7 @@ const codeNativeIntegrationComponent = ({ name, iconPath, description, flows = [
258
336
  iconPath,
259
337
  description: description || name,
260
338
  },
261
- connections: connections.map(convertConnection),
339
+ connections: convertedConnections,
262
340
  actions: convertedActions,
263
341
  triggers: convertedTriggers,
264
342
  dataSources: convertedDataSources,
package/dist/testing.d.ts CHANGED
@@ -60,7 +60,7 @@ export declare const invokeDataSource: <TInputs extends Inputs, TDataSourceType
60
60
  * Invokes specified Flow of a Code Native Integration using supplied params.
61
61
  * Runs the Trigger and then the Action function and returns the result of the Action.
62
62
  */
63
- export declare const invokeFlow: ({ trigger, action }: Flow, context?: Partial<ActionContext> | undefined, payload?: TriggerPayload | undefined) => Promise<InvokeReturn<InvokeActionPerformReturn<false, unknown>>>;
63
+ export declare const invokeFlow: (flow: Flow, context?: Partial<ActionContext> | undefined, payload?: TriggerPayload | undefined) => Promise<InvokeReturn<InvokeActionPerformReturn<false, unknown>>>;
64
64
  export declare class ComponentTestHarness<TComponent extends Component> {
65
65
  component: TComponent;
66
66
  constructor(component: TComponent);
package/dist/testing.js CHANGED
@@ -199,15 +199,15 @@ exports.invokeDataSource = invokeDataSource;
199
199
  * Invokes specified Flow of a Code Native Integration using supplied params.
200
200
  * Runs the Trigger and then the Action function and returns the result of the Action.
201
201
  */
202
- const invokeFlow = ({ trigger, action }, context, payload) => __awaiter(void 0, void 0, void 0, function* () {
202
+ const invokeFlow = (flow, context, payload) => __awaiter(void 0, void 0, void 0, function* () {
203
203
  const realizedContext = Object.assign(Object.assign({}, baseActionContext), context);
204
204
  const realizedPayload = Object.assign(Object.assign({}, (0, exports.defaultTriggerPayload)()), payload);
205
205
  const params = {};
206
- if (typeof trigger === "object" && "perform" in trigger) {
207
- const triggerResult = yield trigger.perform(realizedContext, realizedPayload, params);
206
+ if ("onTrigger" in flow) {
207
+ const triggerResult = yield flow.onTrigger(realizedContext, realizedPayload, params);
208
208
  params.trigger = triggerResult;
209
209
  }
210
- const result = yield action.perform(realizedContext, params);
210
+ const result = yield flow.onExecution(realizedContext, params);
211
211
  return {
212
212
  result,
213
213
  loggerMock: realizedContext.logger,
@@ -1,4 +1,4 @@
1
- import { DataSourceDefinition, ConnectionDefinition, ActionDefinition, ActionPerformReturn, TriggerDefinition, Inputs, TriggerResult, DataSourceType } from ".";
1
+ import { DataSourceDefinition, ConnectionDefinition, ActionPerformFunction, ActionPerformReturn, TriggerEventFunction, TriggerPerformFunction, Inputs, TriggerResult, DataSourceType } from ".";
2
2
  /** Defines attributes of a Code-Native Integration. */
3
3
  export declare type IntegrationDefinition = {
4
4
  /** The unique name for this Integration. */
@@ -30,11 +30,9 @@ export declare type IntegrationDefinition = {
30
30
  configPages?: ConfigPage[];
31
31
  /** Specifies any Data Sources that are defined as part of this Integration. */
32
32
  dataSources?: Record<string, CodeNativeDataSource>;
33
- /** Specifies any Connections that are defined as part of this Integration. */
34
- connections?: ConnectionDefinition[];
35
33
  };
36
- /** Defines attributes of a Flow of a Code-Native Integration. */
37
- export declare type Flow = {
34
+ /** Defines common attributes of a Flow of a Code-Native Integration. */
35
+ declare type BaseFlow = {
38
36
  /** The unique name for this Flow. */
39
37
  name: string;
40
38
  /** Optional description for this Flow. */
@@ -51,23 +49,29 @@ export declare type Flow = {
51
49
  organizationApiKeys?: string[];
52
50
  /** Optional schedule configuration that defines the frequency with which this Flow will be automatically executed. */
53
51
  schedule?: FlowSchedule;
54
- /** Specifies the trigger for this Flow. */
55
- trigger: (CodeNativeTrigger | TriggerReference) & {
56
- /** Optional error handling configuration. */
57
- errorConfig?: StepErrorConfig;
58
- };
59
- /** Specifies the main function for this Flow. */
60
- action: CodeNativeAction;
61
- };
62
- /** Defines attributes of a Data Source that is defined as part of a Code Native Integration. */
63
- export declare type CodeNativeDataSource = Pick<DataSourceDefinition<Inputs, DataSourceType>, "display" | "perform" | "dataSourceType" | "detailDataSource">;
64
- /** Defines attributes of a Trigger that is defined as part of a Code Native Integration. */
65
- export declare type CodeNativeTrigger = Pick<TriggerDefinition<Inputs, false, TriggerResult<false>>, "display" | "perform" | "onInstanceDeploy" | "onInstanceDelete">;
66
- /** Defines attributes of an CodeNativeAction, which is the main function that will be executed for a Flow of a Code Native Integration. */
67
- export declare type CodeNativeAction = Pick<ActionDefinition<Inputs, false, ActionPerformReturn<false, unknown>>, "display" | "perform"> & {
68
52
  /** Optional error handling configuration. */
69
53
  errorConfig?: StepErrorConfig;
54
+ /** Specifies the main function for this Flow */
55
+ onExecution: ActionPerformFunction<Inputs, false, ActionPerformReturn<false, unknown>>;
56
+ };
57
+ /** Defines attributes of a Flow that will have custom Trigger logic. */
58
+ declare type CustomTriggerFlow = BaseFlow & {
59
+ /** Specifies the trigger function for this Flow, which returns a payload and optional HTTP response. */
60
+ onTrigger: TriggerPerformFunction<Inputs, false, TriggerResult<false>>;
61
+ /** Specifies the function to execute when an Instance of this Integration is deployed. */
62
+ onInstanceDeploy?: TriggerEventFunction<Inputs>;
63
+ /** Specifies the function to execute when an Instance of an Integration is deleted. */
64
+ onInstanceDelete?: TriggerEventFunction<Inputs>;
70
65
  };
66
+ /** Defines attributes of a Flow that will use a Trigger from an existing Component. */
67
+ declare type PrebuiltTriggerFlow = BaseFlow & {
68
+ /** Specifies the prebuilt Trigger that will run when this Flow executes. */
69
+ trigger: TriggerReference;
70
+ };
71
+ /** Defines attributes of a Flow of a Code-Native Integration. */
72
+ export declare type Flow = CustomTriggerFlow | PrebuiltTriggerFlow;
73
+ /** Defines attributes of a Data Source that is defined as part of a Code Native Integration. */
74
+ export declare type CodeNativeDataSource = Pick<DataSourceDefinition<Inputs, DataSourceType>, "display" | "perform" | "dataSourceType" | "detailDataSource">;
71
75
  /** Defines attributes of a reference to an existing Trigger. */
72
76
  export declare type TriggerReference = {
73
77
  /** Attributes of the referenced Component. */
@@ -84,13 +88,6 @@ export declare type DataSourceReference = {
84
88
  /** The unique key that identifies the Data Source within the Component. */
85
89
  key: string;
86
90
  };
87
- /** Defines attributes of a reference to an existing Connection. */
88
- export declare type ConnectionReference = {
89
- /** Attributes of the referenced Component. */
90
- component: ComponentReference;
91
- /** The unique key that identifies the Connection within the Component. */
92
- key: string;
93
- };
94
91
  /** Defines attributes of a reference to a member of an existing Component. */
95
92
  export declare type ComponentReference = {
96
93
  /** The unique key that identifies the Component. */
@@ -116,7 +113,7 @@ declare type BaseConfigVar = {
116
113
  visibleToCustomerDeployer?: boolean;
117
114
  };
118
115
  /** Defines attributes of a standard Config Var. */
119
- declare type StandardConfigVar = BaseConfigVar & {
116
+ export declare type StandardConfigVar = BaseConfigVar & {
120
117
  /** Optional default value for the Config Var. */
121
118
  defaultValue?: string;
122
119
  /** The data type of the Config Var. */
@@ -138,16 +135,12 @@ declare type StandardConfigVar = BaseConfigVar & {
138
135
  dataSource?: string | DataSourceReference;
139
136
  };
140
137
  /** Defines attributes of a Config Var that represents a Connection. */
141
- declare type ConnectionConfigVar = BaseConfigVar & {
142
- dataType: "connection";
143
- /** Optional value to specify the Data Source where the Config Var sources
144
- * its values. If it's a string then it's expected to be the key of a
145
- * Connection defined in the Code Native Integration. Otherwise it is
146
- * expected to be a reference to an existing Connection. */
147
- connection: string | ConnectionReference;
138
+ export declare type ConnectionConfigVar = Omit<BaseConfigVar, "description" | "inputs"> & ConnectionDefinition;
139
+ export declare type ConnectionRefConfigVar = BaseConfigVar & {
140
+ /** Attributes of the referenced Component. */
141
+ component: ComponentReference;
148
142
  };
149
- /** Defines attributes of a Config Var whose value is configured as part of deploying an Instance of an Integration. */
150
- export declare type ConfigVar = StandardConfigVar | ConnectionConfigVar;
143
+ export declare type ConfigVar = StandardConfigVar | ConnectionConfigVar | ConnectionRefConfigVar;
151
144
  /** Defines attributes of a Config Wizard Page used when deploying an Instance of an Integration. */
152
145
  export declare type ConfigPage = {
153
146
  /** The unique name for this Config Page. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismatic-io/spectral",
3
- "version": "8.0.0-preview7",
3
+ "version": "8.0.0-preview8",
4
4
  "description": "Utility library for building Prismatic components",
5
5
  "keywords": [
6
6
  "prismatic"