@eventvisor/core 0.22.0 → 0.24.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/CHANGELOG.md +22 -0
- package/lib/generate-code/index.js.map +1 -1
- package/lib/linter/conditionsSchema.d.ts +1 -301
- package/lib/linter/conditionsSchema.js +8 -14
- package/lib/linter/conditionsSchema.js.map +1 -1
- package/lib/linter/destinationSchema.d.ts +89 -1
- package/lib/linter/destinationSchema.js +0 -2
- package/lib/linter/destinationSchema.js.map +1 -1
- package/lib/linter/effectSchema.d.ts +9 -1209
- package/lib/linter/effectSchema.js +6 -3
- package/lib/linter/effectSchema.js.map +1 -1
- package/lib/linter/entitySchemas.spec.d.ts +1 -0
- package/lib/linter/entitySchemas.spec.js +169 -0
- package/lib/linter/entitySchemas.spec.js.map +1 -0
- package/lib/linter/eventSchema.js +7 -2
- package/lib/linter/eventSchema.js.map +1 -1
- package/lib/linter/lintProject.d.ts +5 -0
- package/lib/linter/lintProject.js +141 -5
- package/lib/linter/lintProject.js.map +1 -1
- package/lib/linter/lintProject.spec.d.ts +1 -0
- package/lib/linter/lintProject.spec.js +103 -0
- package/lib/linter/lintProject.spec.js.map +1 -0
- package/lib/linter/persistSchema.d.ts +4 -604
- package/lib/linter/persistSchema.js +4 -2
- package/lib/linter/persistSchema.js.map +1 -1
- package/lib/linter/printError.js +4 -0
- package/lib/linter/printError.js.map +1 -1
- package/lib/linter/sampleSchema.d.ts +13 -285
- package/lib/linter/sampleSchema.js +2 -1
- package/lib/linter/sampleSchema.js.map +1 -1
- package/lib/linter/semanticValidation.d.ts +11 -0
- package/lib/linter/semanticValidation.js +592 -0
- package/lib/linter/semanticValidation.js.map +1 -0
- package/lib/linter/semanticValidation.spec.d.ts +1 -0
- package/lib/linter/semanticValidation.spec.js +190 -0
- package/lib/linter/semanticValidation.spec.js.map +1 -0
- package/lib/linter/testSchema.d.ts +64 -3
- package/lib/linter/testSchema.js +81 -4
- package/lib/linter/testSchema.js.map +1 -1
- package/lib/linter/testSchema.spec.d.ts +1 -0
- package/lib/linter/testSchema.spec.js +260 -0
- package/lib/linter/testSchema.spec.js.map +1 -0
- package/package.json +5 -5
- package/src/generate-code/index.ts +2 -0
- package/src/linter/conditionsSchema.ts +12 -18
- package/src/linter/destinationSchema.ts +0 -3
- package/src/linter/effectSchema.ts +12 -9
- package/src/linter/entitySchemas.spec.ts +212 -0
- package/src/linter/eventSchema.ts +10 -5
- package/src/linter/lintProject.spec.ts +112 -0
- package/src/linter/lintProject.ts +134 -6
- package/src/linter/persistSchema.ts +6 -4
- package/src/linter/printError.ts +3 -0
- package/src/linter/sampleSchema.ts +3 -1
- package/src/linter/semanticValidation.spec.ts +239 -0
- package/src/linter/semanticValidation.ts +953 -0
- package/src/linter/testSchema.spec.ts +279 -0
- package/src/linter/testSchema.ts +89 -4
|
@@ -46,6 +46,7 @@ function getEffectSchema(deps) {
|
|
|
46
46
|
event_tracked: z.array(z.string()).optional(),
|
|
47
47
|
attribute_set: z.array(z.string()).optional(),
|
|
48
48
|
})
|
|
49
|
+
.strict()
|
|
49
50
|
.refine((data) => {
|
|
50
51
|
return Object.values(data).some((value) => value !== undefined);
|
|
51
52
|
}, {
|
|
@@ -53,14 +54,16 @@ function getEffectSchema(deps) {
|
|
|
53
54
|
path: ["event_tracked", "attribute_set"],
|
|
54
55
|
});
|
|
55
56
|
const effectOn = z.union([z.array(effectOnType), effectOnRecord]);
|
|
56
|
-
const step = z
|
|
57
|
+
const step = z
|
|
58
|
+
.object({
|
|
57
59
|
description: z.string().optional(),
|
|
58
60
|
handler: z.string().optional(),
|
|
59
61
|
conditions: (0, conditionsSchema_1.getConditionsSchema)(deps).optional(),
|
|
60
62
|
params: z.record(z.string(), z.any()).optional(),
|
|
61
63
|
transforms: (0, transformsSchema_1.getTransformsSchema)(deps).optional(),
|
|
62
64
|
continueOnError: z.boolean().optional(),
|
|
63
|
-
})
|
|
65
|
+
})
|
|
66
|
+
.strict();
|
|
64
67
|
return z
|
|
65
68
|
.object({
|
|
66
69
|
archived: z.boolean().optional(),
|
|
@@ -69,7 +72,7 @@ function getEffectSchema(deps) {
|
|
|
69
72
|
on: effectOn,
|
|
70
73
|
state: z.any().optional(),
|
|
71
74
|
conditions: (0, conditionsSchema_1.getConditionsSchema)(deps).optional(),
|
|
72
|
-
steps: z.array(step),
|
|
75
|
+
steps: z.array(step).optional(),
|
|
73
76
|
persist: (0, persistSchema_1.getPersistSchema)(deps).optional(),
|
|
74
77
|
})
|
|
75
78
|
.strict();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effectSchema.js","sourceRoot":"","sources":["../../src/linter/effectSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"effectSchema.js","sourceRoot":"","sources":["../../src/linter/effectSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,0CA2CC;AAnDD,uCAAyB;AAGzB,yDAAyD;AACzD,6CAA6C;AAC7C,yDAAyD;AACzD,mDAAmD;AAEnD,SAAgB,eAAe,CAAC,IAAkB;IAChD,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,CAAC;SACrB,MAAM,CAAC;QACN,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC7C,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC9C,CAAC;SACD,MAAM,EAAE;SACR,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAClE,CAAC,EACD;QACE,OAAO,EAAE,wDAAwD;QACjE,IAAI,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;KACzC,CACF,CAAC;IACJ,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,CAAC;SACX,MAAM,CAAC;QACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAChD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChD,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAChD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACxC,CAAC;SACD,MAAM,EAAE,CAAC;IAEZ,OAAO,CAAC;SACL,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,IAAA,0BAAa,EAAC,IAAI,CAAC;QAEzB,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACzB,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAChD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAC/B,OAAO,EAAE,IAAA,gCAAgB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;KAC3C,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const attributeSchema_1 = require("./attributeSchema");
|
|
4
|
+
const destinationSchema_1 = require("./destinationSchema");
|
|
5
|
+
const effectSchema_1 = require("./effectSchema");
|
|
6
|
+
const eventSchema_1 = require("./eventSchema");
|
|
7
|
+
const conditionsSchema_1 = require("./conditionsSchema");
|
|
8
|
+
const sampleSchema_1 = require("./sampleSchema");
|
|
9
|
+
function createDeps() {
|
|
10
|
+
return {
|
|
11
|
+
rootDirectoryPath: "/tmp/eventvisor",
|
|
12
|
+
projectConfig: {
|
|
13
|
+
eventsDirectoryPath: "/tmp/eventvisor/events",
|
|
14
|
+
attributesDirectoryPath: "/tmp/eventvisor/attributes",
|
|
15
|
+
destinationsDirectoryPath: "/tmp/eventvisor/destinations",
|
|
16
|
+
statesDirectoryPath: "/tmp/eventvisor/states",
|
|
17
|
+
effectsDirectoryPath: "/tmp/eventvisor/effects",
|
|
18
|
+
testsDirectoryPath: "/tmp/eventvisor/tests",
|
|
19
|
+
datafilesDirectoryPath: "/tmp/eventvisor/datafiles",
|
|
20
|
+
systemDirectoryPath: "/tmp/eventvisor/.eventvisor",
|
|
21
|
+
catalogExportDirectoryPath: "/tmp/eventvisor/out",
|
|
22
|
+
datafileNamePattern: "eventvisor-%s.json",
|
|
23
|
+
tags: ["all", "web"],
|
|
24
|
+
adapter: class {
|
|
25
|
+
},
|
|
26
|
+
plugins: [],
|
|
27
|
+
parser: { extension: "yml", parse: jest.fn(), stringify: jest.fn() },
|
|
28
|
+
prettyDatafile: false,
|
|
29
|
+
stringify: true,
|
|
30
|
+
},
|
|
31
|
+
datasource: {},
|
|
32
|
+
options: {},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
describe("entity lint schemas", () => {
|
|
36
|
+
const deps = createDeps();
|
|
37
|
+
it("accepts string and nested conditions including regexFlags", () => {
|
|
38
|
+
const schema = (0, conditionsSchema_1.getConditionsSchema)(deps);
|
|
39
|
+
expect(schema.safeParse("*").success).toBe(true);
|
|
40
|
+
expect(schema.safeParse({
|
|
41
|
+
and: [
|
|
42
|
+
"*",
|
|
43
|
+
{
|
|
44
|
+
or: [
|
|
45
|
+
{
|
|
46
|
+
payload: "url",
|
|
47
|
+
operator: "matches",
|
|
48
|
+
value: "^https://",
|
|
49
|
+
regexFlags: "i",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
}).success).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
it("accepts arrays of samples", () => {
|
|
57
|
+
const schema = (0, sampleSchema_1.getSampleSchema)(deps);
|
|
58
|
+
const result = schema.safeParse([
|
|
59
|
+
{
|
|
60
|
+
by: "userId",
|
|
61
|
+
percentage: 50,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
by: { payload: "country" },
|
|
65
|
+
range: [50, 100],
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
68
|
+
expect(result.success).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
it("requires attribute metadata", () => {
|
|
71
|
+
const schema = (0, attributeSchema_1.getAttributeSchema)(deps);
|
|
72
|
+
expect(schema.safeParse({
|
|
73
|
+
type: "string",
|
|
74
|
+
}).success).toBe(false);
|
|
75
|
+
expect(schema.safeParse({
|
|
76
|
+
description: "User ID attribute",
|
|
77
|
+
tags: ["web"],
|
|
78
|
+
type: "string",
|
|
79
|
+
}).success).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it("requires event metadata and keeps strict skipValidation/destination overrides", () => {
|
|
82
|
+
const schema = (0, eventSchema_1.getEventSchema)(deps);
|
|
83
|
+
expect(schema.safeParse({
|
|
84
|
+
description: "Page view",
|
|
85
|
+
tags: ["web"],
|
|
86
|
+
type: "object",
|
|
87
|
+
skipValidation: {
|
|
88
|
+
conditions: "*",
|
|
89
|
+
},
|
|
90
|
+
destinations: {
|
|
91
|
+
console: {
|
|
92
|
+
sample: [
|
|
93
|
+
{
|
|
94
|
+
by: "userId",
|
|
95
|
+
percentage: 50,
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
}).success).toBe(true);
|
|
101
|
+
expect(schema.safeParse({
|
|
102
|
+
description: "Page view",
|
|
103
|
+
tags: ["web"],
|
|
104
|
+
type: "object",
|
|
105
|
+
skipValidation: {
|
|
106
|
+
conditions: "*",
|
|
107
|
+
extra: true,
|
|
108
|
+
},
|
|
109
|
+
}).success).toBe(false);
|
|
110
|
+
expect(schema.safeParse({
|
|
111
|
+
type: "object",
|
|
112
|
+
}).success).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
it("requires destination metadata and rejects JSON schema-only fields", () => {
|
|
115
|
+
const schema = (0, destinationSchema_1.getDestinationSchema)(deps);
|
|
116
|
+
expect(schema.safeParse({
|
|
117
|
+
description: "Console destination",
|
|
118
|
+
tags: ["web"],
|
|
119
|
+
transport: "console",
|
|
120
|
+
type: "object",
|
|
121
|
+
}).success).toBe(false);
|
|
122
|
+
expect(schema.safeParse({
|
|
123
|
+
description: "Console destination",
|
|
124
|
+
tags: ["web"],
|
|
125
|
+
transport: "console",
|
|
126
|
+
sample: [
|
|
127
|
+
{
|
|
128
|
+
by: "userId",
|
|
129
|
+
percentage: 100,
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
}).success).toBe(true);
|
|
133
|
+
expect(schema.safeParse({
|
|
134
|
+
transport: "console",
|
|
135
|
+
}).success).toBe(false);
|
|
136
|
+
});
|
|
137
|
+
it("requires effect metadata and on, and rejects unknown step fields", () => {
|
|
138
|
+
const schema = (0, effectSchema_1.getEffectSchema)(deps);
|
|
139
|
+
expect(schema.safeParse({
|
|
140
|
+
description: "Inject cookie banner",
|
|
141
|
+
tags: ["web"],
|
|
142
|
+
on: {
|
|
143
|
+
event_tracked: ["page_view"],
|
|
144
|
+
},
|
|
145
|
+
state: {
|
|
146
|
+
injected: false,
|
|
147
|
+
},
|
|
148
|
+
}).success).toBe(true);
|
|
149
|
+
expect(schema.safeParse({
|
|
150
|
+
description: "Inject cookie banner",
|
|
151
|
+
tags: ["web"],
|
|
152
|
+
on: {
|
|
153
|
+
event_tracked: ["page_view"],
|
|
154
|
+
},
|
|
155
|
+
steps: [
|
|
156
|
+
{
|
|
157
|
+
handler: "pixel",
|
|
158
|
+
unknown: true,
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
}).success).toBe(false);
|
|
162
|
+
expect(schema.safeParse({
|
|
163
|
+
description: "Inject cookie banner",
|
|
164
|
+
tags: ["web"],
|
|
165
|
+
steps: [],
|
|
166
|
+
}).success).toBe(false);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=entitySchemas.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitySchemas.spec.js","sourceRoot":"","sources":["../../src/linter/entitySchemas.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,9 @@ function getEventSchema(deps) {
|
|
|
48
48
|
deprecated: z.boolean().optional(),
|
|
49
49
|
description: z.string(),
|
|
50
50
|
tags: (0, tagsSchema_1.getTagsSchema)(deps),
|
|
51
|
+
skipValidation: z
|
|
52
|
+
.union([z.boolean(), z.object({ conditions: (0, conditionsSchema_1.getConditionsSchema)(deps) }).strict()])
|
|
53
|
+
.optional(),
|
|
51
54
|
level: z.enum(["fatal", "error", "warning", "log", "info", "debug"]).optional(),
|
|
52
55
|
requiredAttributes: z.array(z.string()).optional(),
|
|
53
56
|
conditions: (0, conditionsSchema_1.getConditionsSchema)(deps).optional(),
|
|
@@ -57,11 +60,13 @@ function getEventSchema(deps) {
|
|
|
57
60
|
.record(z.string(), // @TODO: get real destination names here
|
|
58
61
|
z.union([
|
|
59
62
|
z.boolean(),
|
|
60
|
-
z
|
|
63
|
+
z
|
|
64
|
+
.object({
|
|
61
65
|
conditions: (0, conditionsSchema_1.getConditionsSchema)(deps).optional(),
|
|
62
66
|
sample: (0, sampleSchema_1.getSampleSchema)(deps).optional(),
|
|
63
67
|
transforms: (0, transformsSchema_1.getTransformsSchema)(deps).optional(),
|
|
64
|
-
})
|
|
68
|
+
})
|
|
69
|
+
.strict(),
|
|
65
70
|
]))
|
|
66
71
|
.optional(),
|
|
67
72
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventSchema.js","sourceRoot":"","sources":["../../src/linter/eventSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,
|
|
1
|
+
{"version":3,"file":"eventSchema.js","sourceRoot":"","sources":["../../src/linter/eventSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,wCAmCC;AA5CD,uCAAyB;AAGzB,6CAA6C;AAC7C,6CAA6C;AAC7C,yDAAyD;AACzD,yDAAyD;AACzD,iDAAiD;AAEjD,SAAgB,cAAc,CAAC,IAAkB;IAC/C,OAAO,CAAC;SACL,MAAM,CAAC;QACN,GAAG,0BAAa,CAAC,KAAK;QAEtB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,IAAA,0BAAa,EAAC,IAAI,CAAC;QAEzB,cAAc,EAAE,CAAC;aACd,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAClF,QAAQ,EAAE;QACb,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC/E,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAClD,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAChD,MAAM,EAAE,IAAA,8BAAe,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QACxC,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAChD,YAAY,EAAE,CAAC;aACZ,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,EAAE,yCAAyC;QACrD,CAAC,CAAC,KAAK,CAAC;YACN,CAAC,CAAC,OAAO,EAAE;YACX,CAAC;iBACE,MAAM,CAAC;gBACN,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAChD,MAAM,EAAE,IAAA,8BAAe,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACxC,UAAU,EAAE,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;aACjD,CAAC;iBACD,MAAM,EAAE;SACZ,CAAC,CACH;aACA,QAAQ,EAAE;KACd,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC"}
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
import { Plugin } from "../cli";
|
|
2
|
+
import { Dependencies } from "../dependencies";
|
|
3
|
+
export declare function lintProject(options: Dependencies, filterOptions?: {
|
|
4
|
+
keyPattern?: string;
|
|
5
|
+
entityType?: string;
|
|
6
|
+
}): Promise<boolean>;
|
|
2
7
|
export declare const lintPlugin: Plugin;
|
|
@@ -1,14 +1,73 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.lintPlugin = void 0;
|
|
37
|
+
exports.lintProject = lintProject;
|
|
38
|
+
const z = __importStar(require("zod"));
|
|
4
39
|
const attributeSchema_1 = require("./attributeSchema");
|
|
5
40
|
const destinationSchema_1 = require("./destinationSchema");
|
|
6
41
|
const effectSchema_1 = require("./effectSchema");
|
|
7
42
|
const eventSchema_1 = require("./eventSchema");
|
|
43
|
+
const testSchema_1 = require("./testSchema");
|
|
8
44
|
const printError_1 = require("./printError");
|
|
45
|
+
const semanticValidation_1 = require("./semanticValidation");
|
|
46
|
+
async function createLintContext(options) {
|
|
47
|
+
const { datasource } = options;
|
|
48
|
+
const [attributeNames, eventNames, destinationNames, effectNames] = await Promise.all([
|
|
49
|
+
datasource.listAttributes(),
|
|
50
|
+
datasource.listEvents(),
|
|
51
|
+
datasource.listDestinations(),
|
|
52
|
+
datasource.listEffects(),
|
|
53
|
+
]);
|
|
54
|
+
const [attributes, events, destinations, effects] = await Promise.all([
|
|
55
|
+
Promise.all(attributeNames.map(async (name) => [name, await datasource.readAttribute(name)])),
|
|
56
|
+
Promise.all(eventNames.map(async (name) => [name, await datasource.readEvent(name)])),
|
|
57
|
+
Promise.all(destinationNames.map(async (name) => [name, await datasource.readDestination(name)])),
|
|
58
|
+
Promise.all(effectNames.map(async (name) => [name, await datasource.readEffect(name)])),
|
|
59
|
+
]);
|
|
60
|
+
return {
|
|
61
|
+
attributes: Object.fromEntries(attributes),
|
|
62
|
+
events: Object.fromEntries(events),
|
|
63
|
+
destinations: Object.fromEntries(destinations),
|
|
64
|
+
effects: Object.fromEntries(effects),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
9
67
|
async function lintProject(options, filterOptions = {}) {
|
|
10
68
|
const { projectConfig, datasource } = options;
|
|
11
69
|
const { keyPattern, entityType } = filterOptions;
|
|
70
|
+
const lintContext = await createLintContext(options);
|
|
12
71
|
let hasErrors = false;
|
|
13
72
|
// attributes
|
|
14
73
|
console.log("\nLinting attributes...");
|
|
@@ -22,7 +81,7 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
22
81
|
continue;
|
|
23
82
|
}
|
|
24
83
|
const attributeContent = await datasource.readAttribute(attributeKey);
|
|
25
|
-
const result = attributeSchema.
|
|
84
|
+
const result = await attributeSchema.safeParseAsync(attributeContent);
|
|
26
85
|
if (!result.success) {
|
|
27
86
|
(0, printError_1.printError)({
|
|
28
87
|
entityType: "attribute",
|
|
@@ -31,6 +90,17 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
31
90
|
projectConfig,
|
|
32
91
|
});
|
|
33
92
|
hasErrors = true;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const semanticIssues = (0, semanticValidation_1.getSemanticIssues)("attribute", result.data, lintContext);
|
|
96
|
+
if (semanticIssues.length > 0) {
|
|
97
|
+
(0, printError_1.printError)({
|
|
98
|
+
entityType: "attribute",
|
|
99
|
+
entityKey: attributeKey,
|
|
100
|
+
error: new z.ZodError(semanticIssues),
|
|
101
|
+
projectConfig,
|
|
102
|
+
});
|
|
103
|
+
hasErrors = true;
|
|
34
104
|
}
|
|
35
105
|
}
|
|
36
106
|
// events
|
|
@@ -45,7 +115,7 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
45
115
|
continue;
|
|
46
116
|
}
|
|
47
117
|
const eventContent = await datasource.readEvent(eventKey);
|
|
48
|
-
const result = eventSchema.
|
|
118
|
+
const result = await eventSchema.safeParseAsync(eventContent);
|
|
49
119
|
if (!result.success) {
|
|
50
120
|
(0, printError_1.printError)({
|
|
51
121
|
entityType: "event",
|
|
@@ -54,6 +124,17 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
54
124
|
projectConfig,
|
|
55
125
|
});
|
|
56
126
|
hasErrors = true;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const semanticIssues = (0, semanticValidation_1.getSemanticIssues)("event", result.data, lintContext);
|
|
130
|
+
if (semanticIssues.length > 0) {
|
|
131
|
+
(0, printError_1.printError)({
|
|
132
|
+
entityType: "event",
|
|
133
|
+
entityKey: eventKey,
|
|
134
|
+
error: new z.ZodError(semanticIssues),
|
|
135
|
+
projectConfig,
|
|
136
|
+
});
|
|
137
|
+
hasErrors = true;
|
|
57
138
|
}
|
|
58
139
|
}
|
|
59
140
|
// destinations
|
|
@@ -68,7 +149,7 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
68
149
|
continue;
|
|
69
150
|
}
|
|
70
151
|
const destinationContent = await datasource.readDestination(destinationKey);
|
|
71
|
-
const result = destinationSchema.
|
|
152
|
+
const result = await destinationSchema.safeParseAsync(destinationContent);
|
|
72
153
|
if (!result.success) {
|
|
73
154
|
(0, printError_1.printError)({
|
|
74
155
|
entityType: "destination",
|
|
@@ -77,6 +158,17 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
77
158
|
projectConfig,
|
|
78
159
|
});
|
|
79
160
|
hasErrors = true;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const semanticIssues = (0, semanticValidation_1.getSemanticIssues)("destination", result.data, lintContext);
|
|
164
|
+
if (semanticIssues.length > 0) {
|
|
165
|
+
(0, printError_1.printError)({
|
|
166
|
+
entityType: "destination",
|
|
167
|
+
entityKey: destinationKey,
|
|
168
|
+
error: new z.ZodError(semanticIssues),
|
|
169
|
+
projectConfig,
|
|
170
|
+
});
|
|
171
|
+
hasErrors = true;
|
|
80
172
|
}
|
|
81
173
|
}
|
|
82
174
|
// effects
|
|
@@ -91,7 +183,7 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
91
183
|
continue;
|
|
92
184
|
}
|
|
93
185
|
const effectContent = await datasource.readEffect(effectKey);
|
|
94
|
-
const result = effectSchema.
|
|
186
|
+
const result = await effectSchema.safeParseAsync(effectContent);
|
|
95
187
|
if (!result.success) {
|
|
96
188
|
(0, printError_1.printError)({
|
|
97
189
|
entityType: "effect",
|
|
@@ -100,9 +192,53 @@ async function lintProject(options, filterOptions = {}) {
|
|
|
100
192
|
projectConfig,
|
|
101
193
|
});
|
|
102
194
|
hasErrors = true;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const semanticIssues = (0, semanticValidation_1.getSemanticIssues)("effect", result.data, lintContext);
|
|
198
|
+
if (semanticIssues.length > 0) {
|
|
199
|
+
(0, printError_1.printError)({
|
|
200
|
+
entityType: "effect",
|
|
201
|
+
entityKey: effectKey,
|
|
202
|
+
error: new z.ZodError(semanticIssues),
|
|
203
|
+
projectConfig,
|
|
204
|
+
});
|
|
205
|
+
hasErrors = true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// tests
|
|
209
|
+
console.log("\nLinting tests...");
|
|
210
|
+
const tests = await datasource.listTests();
|
|
211
|
+
const testSchema = (0, testSchema_1.getTestSchema)(options);
|
|
212
|
+
for (const testKey of tests) {
|
|
213
|
+
if (entityType && entityType !== "test") {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (keyPattern && !testKey.includes(keyPattern)) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const testContent = await datasource.readTest(testKey);
|
|
220
|
+
const result = await testSchema.safeParseAsync(testContent);
|
|
221
|
+
if (!result.success) {
|
|
222
|
+
(0, printError_1.printError)({
|
|
223
|
+
entityType: "test",
|
|
224
|
+
entityKey: testKey,
|
|
225
|
+
error: result.error,
|
|
226
|
+
projectConfig,
|
|
227
|
+
});
|
|
228
|
+
hasErrors = true;
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const semanticIssues = (0, semanticValidation_1.getSemanticIssues)("test", result.data, lintContext);
|
|
232
|
+
if (semanticIssues.length > 0) {
|
|
233
|
+
(0, printError_1.printError)({
|
|
234
|
+
entityType: "test",
|
|
235
|
+
entityKey: testKey,
|
|
236
|
+
error: new z.ZodError(semanticIssues),
|
|
237
|
+
projectConfig,
|
|
238
|
+
});
|
|
239
|
+
hasErrors = true;
|
|
103
240
|
}
|
|
104
241
|
}
|
|
105
|
-
// @TODO: tests
|
|
106
242
|
if (hasErrors) {
|
|
107
243
|
return false;
|
|
108
244
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lintProject.js","sourceRoot":"","sources":["../../src/linter/lintProject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lintProject.js","sourceRoot":"","sources":["../../src/linter/lintProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
jest.mock("chalk", () => ({
|
|
4
|
+
__esModule: true,
|
|
5
|
+
default: {
|
|
6
|
+
bold: {
|
|
7
|
+
red: {
|
|
8
|
+
underline: jest.fn((value) => value),
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
}));
|
|
13
|
+
const lintProject_1 = require("./lintProject");
|
|
14
|
+
function createDeps(testContent) {
|
|
15
|
+
return {
|
|
16
|
+
rootDirectoryPath: "/tmp/eventvisor",
|
|
17
|
+
projectConfig: {
|
|
18
|
+
eventsDirectoryPath: "/tmp/eventvisor/events",
|
|
19
|
+
attributesDirectoryPath: "/tmp/eventvisor/attributes",
|
|
20
|
+
destinationsDirectoryPath: "/tmp/eventvisor/destinations",
|
|
21
|
+
statesDirectoryPath: "/tmp/eventvisor/states",
|
|
22
|
+
effectsDirectoryPath: "/tmp/eventvisor/effects",
|
|
23
|
+
testsDirectoryPath: "/tmp/eventvisor/tests",
|
|
24
|
+
datafilesDirectoryPath: "/tmp/eventvisor/datafiles",
|
|
25
|
+
systemDirectoryPath: "/tmp/eventvisor/.eventvisor",
|
|
26
|
+
catalogExportDirectoryPath: "/tmp/eventvisor/out",
|
|
27
|
+
datafileNamePattern: "eventvisor-%s.json",
|
|
28
|
+
tags: ["all"],
|
|
29
|
+
adapter: class {
|
|
30
|
+
},
|
|
31
|
+
plugins: [],
|
|
32
|
+
parser: { extension: "yml", parse: jest.fn(), stringify: jest.fn() },
|
|
33
|
+
prettyDatafile: false,
|
|
34
|
+
stringify: true,
|
|
35
|
+
},
|
|
36
|
+
datasource: {
|
|
37
|
+
listAttributes: jest.fn().mockResolvedValue([]),
|
|
38
|
+
listEvents: jest.fn().mockResolvedValue(["page_view"]),
|
|
39
|
+
listDestinations: jest.fn().mockResolvedValue([]),
|
|
40
|
+
listEffects: jest.fn().mockResolvedValue([]),
|
|
41
|
+
listTests: jest.fn().mockResolvedValue(["events/page_view.spec"]),
|
|
42
|
+
readEvent: jest.fn().mockResolvedValue({
|
|
43
|
+
description: "Page view",
|
|
44
|
+
tags: ["all"],
|
|
45
|
+
type: "object",
|
|
46
|
+
properties: {
|
|
47
|
+
url: {
|
|
48
|
+
type: "string",
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
}),
|
|
52
|
+
readTest: jest.fn().mockResolvedValue(testContent),
|
|
53
|
+
},
|
|
54
|
+
options: {},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
describe("lintProject", () => {
|
|
58
|
+
let logSpy;
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
logSpy = jest.spyOn(console, "log").mockImplementation(() => undefined);
|
|
61
|
+
});
|
|
62
|
+
afterEach(() => {
|
|
63
|
+
logSpy.mockRestore();
|
|
64
|
+
});
|
|
65
|
+
it("includes test specs in linting", async () => {
|
|
66
|
+
const deps = createDeps({
|
|
67
|
+
event: "page_view",
|
|
68
|
+
assertions: [
|
|
69
|
+
{
|
|
70
|
+
expectedDestinationsByTag: {
|
|
71
|
+
marketing: ["console"],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
const result = await (0, lintProject_1.lintProject)(deps);
|
|
77
|
+
expect(result).toBe(false);
|
|
78
|
+
expect(deps.datasource.listTests).toHaveBeenCalled();
|
|
79
|
+
expect(deps.datasource.readTest).toHaveBeenCalledWith("events/page_view.spec");
|
|
80
|
+
});
|
|
81
|
+
it("supports filtering by entityType=test", async () => {
|
|
82
|
+
const deps = createDeps({
|
|
83
|
+
event: "page_view",
|
|
84
|
+
assertions: [
|
|
85
|
+
{
|
|
86
|
+
track: {
|
|
87
|
+
url: "https://example.com",
|
|
88
|
+
},
|
|
89
|
+
expectedToBeValid: true,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
const result = await (0, lintProject_1.lintProject)(deps, { entityType: "test" });
|
|
94
|
+
expect(result).toBe(true);
|
|
95
|
+
expect(deps.datasource.listAttributes).toHaveBeenCalled();
|
|
96
|
+
expect(deps.datasource.listEvents).toHaveBeenCalled();
|
|
97
|
+
expect(deps.datasource.listDestinations).toHaveBeenCalled();
|
|
98
|
+
expect(deps.datasource.listEffects).toHaveBeenCalled();
|
|
99
|
+
expect(deps.datasource.listTests).toHaveBeenCalled();
|
|
100
|
+
expect(deps.datasource.readTest).toHaveBeenCalledWith("events/page_view.spec");
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=lintProject.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lintProject.spec.js","sourceRoot":"","sources":["../../src/linter/lintProject.spec.ts"],"names":[],"mappings":"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"}
|