@prismatic-io/spectral 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +55 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +73 -0
- package/dist/testing.d.ts +72 -0
- package/dist/testing.js +130 -0
- package/dist/types/ActionDefinition.d.ts +25 -0
- package/dist/types/ActionDefinition.js +2 -0
- package/dist/types/ActionInputParameters.d.ts +24 -0
- package/dist/types/ActionInputParameters.js +2 -0
- package/dist/types/ActionLogger.d.ts +20 -0
- package/dist/types/ActionLogger.js +8 -0
- package/dist/types/ActionPerformFunction.d.ts +14 -0
- package/dist/types/ActionPerformFunction.js +2 -0
- package/dist/types/AuthorizationDefinition.d.ts +14 -0
- package/dist/types/AuthorizationDefinition.js +19 -0
- package/dist/types/Credential.d.ts +58 -0
- package/dist/types/Credential.js +8 -0
- package/dist/types/DisplayDefinition.d.ts +26 -0
- package/dist/types/DisplayDefinition.js +5 -0
- package/dist/types/InputFieldType.d.ts +12 -0
- package/dist/types/InputFieldType.js +2 -0
- package/dist/types/Inputs.d.ts +37 -0
- package/dist/types/Inputs.js +2 -0
- package/dist/types/PerformReturn.d.ts +19 -0
- package/dist/types/PerformReturn.js +2 -0
- package/dist/types/conditional-logic.d.ts +91 -0
- package/dist/types/conditional-logic.js +67 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.js +27 -0
- package/dist/types/server-types.d.ts +135 -0
- package/dist/types/server-types.js +8 -0
- package/dist/util.d.ts +33 -0
- package/dist/util.js +337 -0
- package/dist/util.test.d.ts +1 -0
- package/dist/util.test.js +286 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fast_check_1 = __importDefault(require("fast-check"));
|
|
7
|
+
const util_1 = __importDefault(require("./util"));
|
|
8
|
+
describe("util", () => {
|
|
9
|
+
const bufferArbitrary = fast_check_1.default
|
|
10
|
+
.base64String()
|
|
11
|
+
.map((v) => Buffer.from(v, "base64"));
|
|
12
|
+
const uint8ArrayArbitrary = bufferArbitrary.map((b) => new Uint8Array(b));
|
|
13
|
+
const unknowns = () => fast_check_1.default.constantFrom(undefined);
|
|
14
|
+
const emptyStrings = () => fast_check_1.default.constantFrom("");
|
|
15
|
+
describe("boolean", () => {
|
|
16
|
+
const booleanStringValues = {
|
|
17
|
+
truthy: ["true", "t", "T", "yes", "y", "Y"],
|
|
18
|
+
falsy: ["false", "f", "F", "no", "n", "N", ""],
|
|
19
|
+
};
|
|
20
|
+
const truthy = () => fast_check_1.default.constantFrom(true, ...booleanStringValues.truthy);
|
|
21
|
+
const falsy = () => fast_check_1.default.constantFrom(false, ...booleanStringValues.falsy);
|
|
22
|
+
const invalidValues = fast_check_1.default.oneof(fast_check_1.default.integer(), fast_check_1.default
|
|
23
|
+
.string()
|
|
24
|
+
.filter((v) => !booleanStringValues.truthy.includes(v) &&
|
|
25
|
+
!booleanStringValues.falsy.includes(v)), fast_check_1.default.float(), fast_check_1.default.double());
|
|
26
|
+
it("detects boolean value", () => {
|
|
27
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.boolean(), (v) => expect(util_1.default.types.isBool(v)).toStrictEqual(true)));
|
|
28
|
+
});
|
|
29
|
+
it("detects non-boolean value", () => {
|
|
30
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(util_1.default.types.isBool(v)).toStrictEqual(false)));
|
|
31
|
+
});
|
|
32
|
+
it("coerces truthy values to true", () => {
|
|
33
|
+
fast_check_1.default.assert(fast_check_1.default.property(truthy(), (v) => expect(util_1.default.types.toBool(v)).toStrictEqual(true)));
|
|
34
|
+
});
|
|
35
|
+
it("coerces falsy values to false", () => {
|
|
36
|
+
fast_check_1.default.assert(fast_check_1.default.property(falsy(), (v) => expect(util_1.default.types.toBool(v)).toStrictEqual(false)));
|
|
37
|
+
});
|
|
38
|
+
it("allows for boolean default to false for undefined inputs and undefined default", () => {
|
|
39
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => expect(util_1.default.types.toBool(v)).toStrictEqual(false)));
|
|
40
|
+
});
|
|
41
|
+
it("allows for boolean default of false for undefined inputs", () => {
|
|
42
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => expect(util_1.default.types.toBool(v, false)).toStrictEqual(false)));
|
|
43
|
+
});
|
|
44
|
+
it("allows for boolean default of true for undefined inputs", () => {
|
|
45
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => expect(util_1.default.types.toBool(v, true)).toStrictEqual(true)));
|
|
46
|
+
});
|
|
47
|
+
it("allows for boolean default to false for empty string inputs and undefined default", () => {
|
|
48
|
+
fast_check_1.default.assert(fast_check_1.default.property(emptyStrings(), (v) => expect(util_1.default.types.toBool(v)).toStrictEqual(false)));
|
|
49
|
+
});
|
|
50
|
+
it("allows for boolean default of false for empty string inputs", () => {
|
|
51
|
+
fast_check_1.default.assert(fast_check_1.default.property(emptyStrings(), (v) => expect(util_1.default.types.toBool(v, false)).toStrictEqual(false)));
|
|
52
|
+
});
|
|
53
|
+
it("allows for boolean default of true for empty string inputs", () => {
|
|
54
|
+
fast_check_1.default.assert(fast_check_1.default.property(emptyStrings(), (v) => expect(util_1.default.types.toBool(v, true)).toStrictEqual(true)));
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("integer", () => {
|
|
58
|
+
const invalidValues = fast_check_1.default.oneof(fast_check_1.default.string().filter((v) => Number.isNaN(Number.parseInt(v)) && v !== ""));
|
|
59
|
+
it("detects integer value", () => {
|
|
60
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.integer(), (v) => expect(util_1.default.types.isInt(v)).toStrictEqual(true)));
|
|
61
|
+
});
|
|
62
|
+
it("detects non-integer value", () => {
|
|
63
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(util_1.default.types.isInt(v)).toStrictEqual(false)));
|
|
64
|
+
});
|
|
65
|
+
it("coerces integer values", () => {
|
|
66
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.integer(), (v) => expect(util_1.default.types.toInt(v.toString())).toStrictEqual(v)));
|
|
67
|
+
});
|
|
68
|
+
it("coerces a float to an int", () => {
|
|
69
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.float(), (v) => expect(util_1.default.types.toInt(v)).toStrictEqual(~~v)));
|
|
70
|
+
});
|
|
71
|
+
it("throws when coercing non-integer values", () => {
|
|
72
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(() => util_1.default.types.toInt(v)).toThrow("cannot be coerced to int")));
|
|
73
|
+
});
|
|
74
|
+
it("Allows for default value of 0 when value is undefined", () => {
|
|
75
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => expect(util_1.default.types.toInt(v)).toStrictEqual(0)));
|
|
76
|
+
});
|
|
77
|
+
it("Allows for default values when value is undefined", () => {
|
|
78
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => expect(util_1.default.types.toInt(v, 20)).toStrictEqual(20)));
|
|
79
|
+
});
|
|
80
|
+
it("Allows for default value of 0 when value is empty string", () => {
|
|
81
|
+
fast_check_1.default.assert(fast_check_1.default.property(emptyStrings(), (v) => expect(util_1.default.types.toInt(v)).toStrictEqual(0)));
|
|
82
|
+
});
|
|
83
|
+
it("Allows for default values when value is empty string", () => {
|
|
84
|
+
fast_check_1.default.assert(fast_check_1.default.property(emptyStrings(), (v) => expect(util_1.default.types.toInt(v, 20)).toStrictEqual(20)));
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("number", () => {
|
|
88
|
+
const validValues = fast_check_1.default.string().filter((v) => !Number.isNaN(Number(v)));
|
|
89
|
+
const invalidValues = fast_check_1.default.string().filter((v) => Number.isNaN(Number(v)));
|
|
90
|
+
it("detects things that can be cast to a number", () => {
|
|
91
|
+
fast_check_1.default.assert(fast_check_1.default.property(validValues, (v) => expect(util_1.default.types.isNumber(v)).toStrictEqual(true)));
|
|
92
|
+
});
|
|
93
|
+
it("detects things that cannot be cast to a number", () => {
|
|
94
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(util_1.default.types.isNumber(v)).toStrictEqual(false)));
|
|
95
|
+
});
|
|
96
|
+
it("returns a number when given a number", () => {
|
|
97
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.float(), (v) => expect(util_1.default.types.toNumber(v)).toStrictEqual(v)));
|
|
98
|
+
});
|
|
99
|
+
it("returns a number when given something that can be cast to number", () => {
|
|
100
|
+
fast_check_1.default.assert(fast_check_1.default.property(validValues, (v) => expect(util_1.default.types.toNumber(v)).toStrictEqual(Number(v))));
|
|
101
|
+
});
|
|
102
|
+
it("throws when coercing non-number values", () => {
|
|
103
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(() => util_1.default.types.toNumber(v)).toThrow("cannot be coerced to a number")));
|
|
104
|
+
});
|
|
105
|
+
it("returns the default value when a value is missing", () => {
|
|
106
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => expect(util_1.default.types.toNumber(v, 5.5)).toStrictEqual(5.5)));
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe("bigint", () => {
|
|
110
|
+
const invalidValues = fast_check_1.default.string().filter((v) => {
|
|
111
|
+
try {
|
|
112
|
+
BigInt(v);
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
it("detects bigint value", () => {
|
|
120
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.bigInt(), (v) => expect(util_1.default.types.isBigInt(v)).toStrictEqual(true)));
|
|
121
|
+
});
|
|
122
|
+
it("detects non-bigint value", () => {
|
|
123
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(util_1.default.types.isBigInt(v)).toStrictEqual(false)));
|
|
124
|
+
});
|
|
125
|
+
it("coerces bigint values", () => {
|
|
126
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.bigInt(), (v) => expect(util_1.default.types.toBigInt(v.toString())).toStrictEqual(v)));
|
|
127
|
+
});
|
|
128
|
+
it("throws when coercing non-bigint values", () => {
|
|
129
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(() => util_1.default.types.toBigInt(v)).toThrow("cannot be coerced to bigint")));
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe("date", () => {
|
|
133
|
+
const invalidValues = fast_check_1.default.oneof(
|
|
134
|
+
// Filter out numerical strings as many of those are valid enough for ISO
|
|
135
|
+
// TODO: Figure out if this is fine or if we should only accept specific formats
|
|
136
|
+
fast_check_1.default.string().filter((v) => !Number.parseInt(v)));
|
|
137
|
+
it("detects date value", () => {
|
|
138
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.date(), (v) => expect(util_1.default.types.isDate(v)).toStrictEqual(true)));
|
|
139
|
+
});
|
|
140
|
+
it("detects non-date value", () => {
|
|
141
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(util_1.default.types.isDate(v)).toStrictEqual(false)));
|
|
142
|
+
});
|
|
143
|
+
it("coerces date values", () => {
|
|
144
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.date(), (v) => expect(util_1.default.types.toDate(v.toISOString())).toStrictEqual(v)));
|
|
145
|
+
});
|
|
146
|
+
it("throws when coercing non-date values", () => {
|
|
147
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(() => util_1.default.types.toDate(v)).toThrow("cannot be coerced to date")));
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe("url", () => {
|
|
151
|
+
const invalidValues = fast_check_1.default.oneof(fast_check_1.default.string());
|
|
152
|
+
it("detects url value", () => {
|
|
153
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.oneof(fast_check_1.default.webUrl(), fast_check_1.default.domain().map((v) => `https://${v}`)), (v) => expect(util_1.default.types.isUrl(v)).toStrictEqual(true)));
|
|
154
|
+
});
|
|
155
|
+
it("detects non-url value", () => {
|
|
156
|
+
fast_check_1.default.assert(fast_check_1.default.property(invalidValues, (v) => expect(util_1.default.types.isUrl(v)).toStrictEqual(false)));
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe("buffer data payload", () => {
|
|
160
|
+
it("detects buffer data payload", () => {
|
|
161
|
+
const payloadTypes = fast_check_1.default.record({
|
|
162
|
+
data: bufferArbitrary,
|
|
163
|
+
contentType: fast_check_1.default.string(),
|
|
164
|
+
});
|
|
165
|
+
fast_check_1.default.assert(fast_check_1.default.property(payloadTypes, (v) => {
|
|
166
|
+
expect(util_1.default.types.isBufferDataPayload(v)).toStrictEqual(true);
|
|
167
|
+
}));
|
|
168
|
+
});
|
|
169
|
+
it("coerces string to plain text buffer", () => {
|
|
170
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.string(), (v) => {
|
|
171
|
+
expect(util_1.default.types.toBufferDataPayload(v)).toMatchObject({
|
|
172
|
+
data: Buffer.from(v, "utf-8"),
|
|
173
|
+
contentType: "text/plain",
|
|
174
|
+
});
|
|
175
|
+
}));
|
|
176
|
+
});
|
|
177
|
+
it("serializes data to JSON and coerces to json text buffer", () => {
|
|
178
|
+
const jsonTypes = fast_check_1.default.oneof(fast_check_1.default.array(fast_check_1.default.anything()), fast_check_1.default.object());
|
|
179
|
+
fast_check_1.default.assert(fast_check_1.default.property(jsonTypes, (v) => expect(util_1.default.types.toBufferDataPayload(v)).toMatchObject({
|
|
180
|
+
data: Buffer.from(JSON.stringify(v), "utf-8"),
|
|
181
|
+
contentType: "application/json",
|
|
182
|
+
})));
|
|
183
|
+
});
|
|
184
|
+
it("directly returns DataPayload", () => {
|
|
185
|
+
const payloadTypes = fast_check_1.default.record({
|
|
186
|
+
data: bufferArbitrary,
|
|
187
|
+
contentType: fast_check_1.default.string(),
|
|
188
|
+
suggestedExtension: fast_check_1.default.oneof(fast_check_1.default.constant(undefined), fast_check_1.default.string()),
|
|
189
|
+
});
|
|
190
|
+
fast_check_1.default.assert(fast_check_1.default.property(payloadTypes, (v) => expect(util_1.default.types.toBufferDataPayload(v)).toStrictEqual(v)));
|
|
191
|
+
});
|
|
192
|
+
it("returns buffer with unknown content type", () => {
|
|
193
|
+
fast_check_1.default.assert(fast_check_1.default.property(bufferArbitrary, (v) => expect(util_1.default.types.toBufferDataPayload(v)).toMatchObject({
|
|
194
|
+
data: v,
|
|
195
|
+
contentType: "application/octet-stream",
|
|
196
|
+
})));
|
|
197
|
+
});
|
|
198
|
+
it("handles Uint8Array as a Buffer", () => {
|
|
199
|
+
fast_check_1.default.assert(fast_check_1.default.property(uint8ArrayArbitrary, (v) => expect(util_1.default.types.toBufferDataPayload(v)).toMatchObject({
|
|
200
|
+
data: Buffer.from(v),
|
|
201
|
+
contentType: "application/octet-stream",
|
|
202
|
+
})));
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe("data", () => {
|
|
206
|
+
it("detects data payload", () => {
|
|
207
|
+
const payloadTypes = fast_check_1.default.record({
|
|
208
|
+
data: bufferArbitrary,
|
|
209
|
+
contentType: fast_check_1.default.string(),
|
|
210
|
+
});
|
|
211
|
+
fast_check_1.default.assert(fast_check_1.default.property(payloadTypes, (v) => {
|
|
212
|
+
expect(util_1.default.types.isData(v)).toStrictEqual(true);
|
|
213
|
+
}));
|
|
214
|
+
});
|
|
215
|
+
it("coerces string to plain text buffer", () => {
|
|
216
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.string(), (v) => {
|
|
217
|
+
expect(util_1.default.types.toData(v)).toMatchObject({
|
|
218
|
+
data: Buffer.from(v, "utf-8"),
|
|
219
|
+
contentType: "text/plain",
|
|
220
|
+
});
|
|
221
|
+
}));
|
|
222
|
+
});
|
|
223
|
+
it("serializes data to JSON and coerces to json text buffer", () => {
|
|
224
|
+
const jsonTypes = fast_check_1.default.oneof(fast_check_1.default.array(fast_check_1.default.anything()), fast_check_1.default.object());
|
|
225
|
+
fast_check_1.default.assert(fast_check_1.default.property(jsonTypes, (v) => expect(util_1.default.types.toData(v)).toMatchObject({
|
|
226
|
+
data: Buffer.from(JSON.stringify(v), "utf-8"),
|
|
227
|
+
contentType: "application/json",
|
|
228
|
+
})));
|
|
229
|
+
});
|
|
230
|
+
it("directly returns DataPayload", () => {
|
|
231
|
+
const payloadTypes = fast_check_1.default.record({
|
|
232
|
+
data: bufferArbitrary,
|
|
233
|
+
contentType: fast_check_1.default.string(),
|
|
234
|
+
suggestedExtension: fast_check_1.default.oneof(fast_check_1.default.constant(undefined), fast_check_1.default.string()),
|
|
235
|
+
});
|
|
236
|
+
fast_check_1.default.assert(fast_check_1.default.property(payloadTypes, (v) => expect(util_1.default.types.toData(v)).toStrictEqual(v)));
|
|
237
|
+
});
|
|
238
|
+
it("returns buffer with unknown content type", () => {
|
|
239
|
+
fast_check_1.default.assert(fast_check_1.default.property(bufferArbitrary, (v) => expect(util_1.default.types.toData(v)).toMatchObject({
|
|
240
|
+
data: v,
|
|
241
|
+
contentType: "application/octet-stream",
|
|
242
|
+
})));
|
|
243
|
+
});
|
|
244
|
+
it("handles Uint8Array as a Buffer", () => {
|
|
245
|
+
fast_check_1.default.assert(fast_check_1.default.property(uint8ArrayArbitrary, (v) => expect(util_1.default.types.toData(v)).toMatchObject({
|
|
246
|
+
data: Buffer.from(v),
|
|
247
|
+
contentType: "application/octet-stream",
|
|
248
|
+
})));
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
describe("string", () => {
|
|
252
|
+
it("coerces plain text buffer to string", () => {
|
|
253
|
+
fast_check_1.default.assert(fast_check_1.default.property(bufferArbitrary, (v) => {
|
|
254
|
+
expect(util_1.default.types.toString(v)).toStrictEqual(v.toString());
|
|
255
|
+
}));
|
|
256
|
+
});
|
|
257
|
+
it("coerces unknown value to empty string", () => {
|
|
258
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => {
|
|
259
|
+
expect(util_1.default.types.toString(v)).toStrictEqual("");
|
|
260
|
+
}));
|
|
261
|
+
});
|
|
262
|
+
it("coerces unknown value to given default string", () => {
|
|
263
|
+
fast_check_1.default.assert(fast_check_1.default.property(unknowns(), (v) => {
|
|
264
|
+
expect(util_1.default.types.toString(v, "hello, world")).toStrictEqual("hello, world");
|
|
265
|
+
}));
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
//TODO add an arbitrary for KeyValueList to test unique values
|
|
269
|
+
describe("KeyValueList", () => {
|
|
270
|
+
it("coerces KeyValueList to object", () => {
|
|
271
|
+
fast_check_1.default.assert(fast_check_1.default.property(bufferArbitrary, () => {
|
|
272
|
+
const fakeData = [
|
|
273
|
+
{ key: "foo", value: "bar" },
|
|
274
|
+
{ key: "myKey", value: "myValue" },
|
|
275
|
+
];
|
|
276
|
+
const expectedData = { foo: "bar", myKey: "myValue" };
|
|
277
|
+
expect(util_1.default.types.keyValPairListToObject(fakeData)).toStrictEqual(expectedData);
|
|
278
|
+
}));
|
|
279
|
+
});
|
|
280
|
+
it("handles KeyValueList as undefined", () => {
|
|
281
|
+
fast_check_1.default.assert(fast_check_1.default.property(bufferArbitrary, () => {
|
|
282
|
+
expect(util_1.default.types.keyValPairListToObject(undefined)).toStrictEqual({});
|
|
283
|
+
}));
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@prismatic-io/spectral",
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "Utility library for building Prismatic components",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"prismatic"
|
|
7
|
+
],
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"homepage": "https://prismatic.io",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/prismatic-io/spectral"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/prismatic-io/spectral.git"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"scripts": {
|
|
20
|
+
"clean": "rm -rf dist",
|
|
21
|
+
"build": "yarn run format && yarn run lint && yarn run clean && tsc",
|
|
22
|
+
"prepack": "yarn run build",
|
|
23
|
+
"format": "yarn run lint-fix && prettier --loglevel error --write 'src/**/*.ts' '*.{ts,js,json}' '!sidebars.{js,jse}'",
|
|
24
|
+
"check-format": "prettier --check 'src/**/*.ts' '*.{ts,js,json}' '!sidebars.{js,jse}'",
|
|
25
|
+
"check": "yarn run check-format && yarn run lint",
|
|
26
|
+
"lint": "eslint --ext .ts,.js src/",
|
|
27
|
+
"lint-fix": "eslint --fix --ext .ts,.js src/",
|
|
28
|
+
"test": "jest --maxWorkers=4",
|
|
29
|
+
"docs": "rm -f sidebars.{js,jse} && typedoc"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist/"
|
|
33
|
+
],
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"date-fns": "2.17.0",
|
|
36
|
+
"jest-mock": "27.0.3",
|
|
37
|
+
"valid-url": "1.0.9"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/jest": "26.0.23",
|
|
41
|
+
"@types/node": "14.14.35",
|
|
42
|
+
"@types/valid-url": "1.0.3",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "4.27.0",
|
|
44
|
+
"@typescript-eslint/parser": "4.27.0",
|
|
45
|
+
"eslint": "7.28.0",
|
|
46
|
+
"eslint-config-prettier": "8.3.0",
|
|
47
|
+
"eslint-plugin-jest": "24.3.6",
|
|
48
|
+
"eslint-plugin-prettier": "3.4.0",
|
|
49
|
+
"fast-check": "2.16.0",
|
|
50
|
+
"jest": "27.0.4",
|
|
51
|
+
"prettier": "2.3.1",
|
|
52
|
+
"ts-jest": "27.0.3",
|
|
53
|
+
"typedoc": "0.17.7",
|
|
54
|
+
"typedoc-plugin-markdown": "2.4.2",
|
|
55
|
+
"typedoc-plugin-remove-references": "0.0.5",
|
|
56
|
+
"typescript": "4.3.4"
|
|
57
|
+
},
|
|
58
|
+
"eslintConfig": {
|
|
59
|
+
"root": true,
|
|
60
|
+
"parser": "@typescript-eslint/parser",
|
|
61
|
+
"env": {
|
|
62
|
+
"node": true
|
|
63
|
+
},
|
|
64
|
+
"parserOptions": {
|
|
65
|
+
"project": [
|
|
66
|
+
"./tsconfig.json"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"plugins": [
|
|
70
|
+
"@typescript-eslint"
|
|
71
|
+
],
|
|
72
|
+
"extends": [
|
|
73
|
+
"eslint:recommended",
|
|
74
|
+
"plugin:@typescript-eslint/eslint-recommended",
|
|
75
|
+
"plugin:@typescript-eslint/recommended",
|
|
76
|
+
"plugin:@typescript-eslint/recommended-requiring-type-checking",
|
|
77
|
+
"prettier"
|
|
78
|
+
],
|
|
79
|
+
"rules": {
|
|
80
|
+
"@typescript-eslint/explicit-function-return-type": "off",
|
|
81
|
+
"@typescript-eslint/restrict-template-expressions": "off"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|