@featurevisor/core 2.11.0 → 2.13.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.
Files changed (106) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/coverage/clover.xml +1410 -11
  3. package/coverage/coverage-final.json +21 -2
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  8. package/coverage/lcov-report/builder/index.html +1 -1
  9. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  10. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  11. package/coverage/lcov-report/config/index.html +116 -0
  12. package/coverage/lcov-report/config/projectConfig.ts.html +676 -0
  13. package/coverage/lcov-report/datasource/adapter.ts.html +235 -0
  14. package/coverage/lcov-report/datasource/datasource.ts.html +862 -0
  15. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +1354 -0
  16. package/coverage/lcov-report/datasource/index.html +161 -0
  17. package/coverage/lcov-report/datasource/index.ts.html +94 -0
  18. package/coverage/lcov-report/index.html +80 -20
  19. package/coverage/lcov-report/linter/attributeSchema.ts.html +175 -0
  20. package/coverage/lcov-report/linter/checkCircularDependency.ts.html +220 -0
  21. package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +268 -0
  22. package/coverage/lcov-report/linter/conditionSchema.ts.html +775 -0
  23. package/coverage/lcov-report/linter/featureSchema.ts.html +4924 -0
  24. package/coverage/lcov-report/linter/groupSchema.ts.html +226 -0
  25. package/coverage/lcov-report/linter/index.html +266 -0
  26. package/coverage/lcov-report/linter/lintProject.ts.html +1840 -0
  27. package/coverage/lcov-report/linter/printError.ts.html +238 -0
  28. package/coverage/lcov-report/linter/schema.ts.html +1471 -0
  29. package/coverage/lcov-report/linter/segmentSchema.ts.html +130 -0
  30. package/coverage/lcov-report/linter/testSchema.ts.html +550 -0
  31. package/coverage/lcov-report/list/index.html +1 -1
  32. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  33. package/coverage/lcov-report/parsers/index.html +20 -5
  34. package/coverage/lcov-report/parsers/index.ts.html +151 -0
  35. package/coverage/lcov-report/parsers/json.ts.html +2 -2
  36. package/coverage/lcov-report/parsers/yml.ts.html +6 -6
  37. package/coverage/lcov-report/tester/cliFormat.ts.html +103 -0
  38. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  39. package/coverage/lcov-report/tester/index.html +20 -5
  40. package/coverage/lcov-report/utils/git.ts.html +481 -0
  41. package/coverage/lcov-report/utils/index.html +116 -0
  42. package/coverage/lcov.info +2798 -7
  43. package/lib/builder/buildDatafile.js +15 -1
  44. package/lib/builder/buildDatafile.js.map +1 -1
  45. package/lib/config/projectConfig.d.ts +2 -0
  46. package/lib/config/projectConfig.js +3 -1
  47. package/lib/config/projectConfig.js.map +1 -1
  48. package/lib/datasource/datasource.d.ts +6 -1
  49. package/lib/datasource/datasource.js +16 -0
  50. package/lib/datasource/datasource.js.map +1 -1
  51. package/lib/datasource/filesystemAdapter.js +10 -0
  52. package/lib/datasource/filesystemAdapter.js.map +1 -1
  53. package/lib/generate-code/typescript.js +280 -46
  54. package/lib/generate-code/typescript.js.map +1 -1
  55. package/lib/linter/conditionSchema.spec.d.ts +1 -0
  56. package/lib/linter/conditionSchema.spec.js +331 -0
  57. package/lib/linter/conditionSchema.spec.js.map +1 -0
  58. package/lib/linter/featureSchema.d.ts +129 -20
  59. package/lib/linter/featureSchema.js +489 -48
  60. package/lib/linter/featureSchema.js.map +1 -1
  61. package/lib/linter/featureSchema.spec.d.ts +1 -0
  62. package/lib/linter/featureSchema.spec.js +978 -0
  63. package/lib/linter/featureSchema.spec.js.map +1 -0
  64. package/lib/linter/lintProject.d.ts +17 -1
  65. package/lib/linter/lintProject.js +228 -169
  66. package/lib/linter/lintProject.js.map +1 -1
  67. package/lib/linter/lintProject.spec.d.ts +1 -0
  68. package/lib/linter/lintProject.spec.js +86 -0
  69. package/lib/linter/lintProject.spec.js.map +1 -0
  70. package/lib/linter/printError.d.ts +7 -0
  71. package/lib/linter/printError.js +30 -15
  72. package/lib/linter/printError.js.map +1 -1
  73. package/lib/linter/schema.d.ts +42 -0
  74. package/lib/linter/schema.js +417 -0
  75. package/lib/linter/schema.js.map +1 -0
  76. package/lib/linter/schema.spec.d.ts +1 -0
  77. package/lib/linter/schema.spec.js +483 -0
  78. package/lib/linter/schema.spec.js.map +1 -0
  79. package/lib/linter/segmentSchema.spec.d.ts +1 -0
  80. package/lib/linter/segmentSchema.spec.js +231 -0
  81. package/lib/linter/segmentSchema.spec.js.map +1 -0
  82. package/lib/tester/testFeature.js +5 -3
  83. package/lib/tester/testFeature.js.map +1 -1
  84. package/lib/utils/git.js +3 -0
  85. package/lib/utils/git.js.map +1 -1
  86. package/package.json +5 -5
  87. package/src/builder/buildDatafile.ts +17 -1
  88. package/src/config/projectConfig.ts +3 -0
  89. package/src/datasource/datasource.ts +23 -0
  90. package/src/datasource/filesystemAdapter.ts +7 -0
  91. package/src/generate-code/typescript.ts +330 -49
  92. package/src/linter/conditionSchema.spec.ts +446 -0
  93. package/src/linter/featureSchema.spec.ts +1218 -0
  94. package/src/linter/featureSchema.ts +671 -69
  95. package/src/linter/lintProject.spec.ts +115 -0
  96. package/src/linter/lintProject.ts +303 -217
  97. package/src/linter/printError.ts +40 -16
  98. package/src/linter/schema.spec.ts +617 -0
  99. package/src/linter/schema.ts +462 -0
  100. package/src/linter/segmentSchema.spec.ts +273 -0
  101. package/src/tester/testFeature.ts +5 -3
  102. package/src/utils/git.ts +2 -0
  103. package/lib/linter/propertySchema.d.ts +0 -5
  104. package/lib/linter/propertySchema.js +0 -43
  105. package/lib/linter/propertySchema.js.map +0 -1
  106. package/src/linter/propertySchema.ts +0 -47
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featureSchema.spec.js","sourceRoot":"","sources":["../../src/linter/featureSchema.spec.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,25 @@
1
1
  import { Dependencies } from "../dependencies";
2
2
  import { Plugin } from "../cli";
3
+ export type LintEntityType = "attribute" | "segment" | "feature" | "group" | "schema" | "test";
3
4
  export interface LintProjectOptions {
4
5
  keyPattern?: string;
5
6
  entityType?: string;
6
7
  authors?: boolean;
8
+ json?: boolean;
9
+ pretty?: boolean;
7
10
  }
8
- export declare function lintProject(deps: Dependencies, options?: LintProjectOptions): Promise<boolean>;
11
+ export interface LintErrorItem {
12
+ filePath: string;
13
+ entityType: LintEntityType;
14
+ key: string;
15
+ message: string;
16
+ path: (string | number)[];
17
+ code?: string;
18
+ value?: unknown;
19
+ }
20
+ export interface LintResult {
21
+ hasError: boolean;
22
+ errors: LintErrorItem[];
23
+ }
24
+ export declare function lintProject(deps: Dependencies, options?: LintProjectOptions): Promise<LintResult>;
9
25
  export declare const lintPlugin: Plugin;
@@ -9,6 +9,7 @@ const conditionSchema_1 = require("./conditionSchema");
9
9
  const segmentSchema_1 = require("./segmentSchema");
10
10
  const groupSchema_1 = require("./groupSchema");
11
11
  const featureSchema_1 = require("./featureSchema");
12
+ const schema_1 = require("./schema");
12
13
  const testSchema_1 = require("./testSchema");
13
14
  const checkCircularDependency_1 = require("./checkCircularDependency");
14
15
  const checkPercentageExceedingSlot_1 = require("./checkPercentageExceedingSlot");
@@ -25,7 +26,13 @@ async function getAuthorsOfEntity(datasource, entityType, entityKey) {
25
26
  }
26
27
  async function lintProject(deps, options = {}) {
27
28
  const { projectConfig, datasource } = deps;
28
- let hasError = false;
29
+ const isJsonMode = options.json === true;
30
+ const errors = [];
31
+ function log(...args) {
32
+ if (!isJsonMode) {
33
+ console.log(...args);
34
+ }
35
+ }
29
36
  function getFullPathFromKey(type, key, relative = false) {
30
37
  const fileName = `${key}.${datasource.getExtension()}`;
31
38
  let fullPath = "";
@@ -41,22 +48,88 @@ async function lintProject(deps, options = {}) {
41
48
  else if (type === "group") {
42
49
  fullPath = path.join(projectConfig.groupsDirectoryPath, fileName);
43
50
  }
44
- else if (type === "test") {
45
- fullPath = path.join(projectConfig.testsDirectoryPath, fileName);
51
+ else if (type === "schema") {
52
+ fullPath = path.join(projectConfig.schemasDirectoryPath, fileName);
46
53
  }
47
54
  else {
48
- throw new Error(`Unknown type: ${type}`);
55
+ fullPath = path.join(projectConfig.testsDirectoryPath, fileName);
49
56
  }
50
57
  if (relative) {
51
58
  fullPath = path.relative(process.cwd(), fullPath);
52
59
  }
53
60
  return fullPath;
54
61
  }
62
+ async function printEntityHeader(entityType, key, fullPath) {
63
+ if (isJsonMode) {
64
+ return;
65
+ }
66
+ console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
67
+ if (options.authors) {
68
+ const authors = await getAuthorsOfEntity(datasource, entityType, key);
69
+ console.log(` Authors: ${authors.join(", ")}\n`);
70
+ }
71
+ }
72
+ function recordError(error) {
73
+ errors.push(error);
74
+ }
75
+ async function reportSimpleError({ entityType, key, fullPath, message, detail, pathParts = [], code, value, }) {
76
+ recordError({
77
+ filePath: path.relative(process.cwd(), fullPath),
78
+ entityType,
79
+ key,
80
+ message,
81
+ path: pathParts,
82
+ code,
83
+ value,
84
+ });
85
+ if (!isJsonMode) {
86
+ await printEntityHeader(entityType, key, fullPath);
87
+ console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: ${message}`);
88
+ if (detail) {
89
+ console.log(cliFormat_1.CLI_FORMAT_RED, ` ${detail}`);
90
+ }
91
+ console.log("");
92
+ }
93
+ }
94
+ async function reportThrownError(entityType, key, fullPath, error) {
95
+ const message = error instanceof Error ? error.message : String(error);
96
+ recordError({
97
+ filePath: path.relative(process.cwd(), fullPath),
98
+ entityType,
99
+ key,
100
+ message,
101
+ path: [],
102
+ code: error instanceof Error ? error.name : undefined,
103
+ });
104
+ if (!isJsonMode) {
105
+ await printEntityHeader(entityType, key, fullPath);
106
+ console.log("");
107
+ console.log(error);
108
+ }
109
+ }
110
+ async function reportZodValidationError(entityType, key, fullPath, error) {
111
+ const issues = (0, printError_1.getLintIssuesFromZodError)(error);
112
+ issues.forEach((issue) => {
113
+ recordError({
114
+ filePath: path.relative(process.cwd(), fullPath),
115
+ entityType,
116
+ key,
117
+ message: issue.message,
118
+ path: issue.path,
119
+ code: issue.code,
120
+ value: issue.value,
121
+ });
122
+ });
123
+ if (!isJsonMode) {
124
+ await printEntityHeader(entityType, key, fullPath);
125
+ (0, printError_1.printZodError)(error);
126
+ }
127
+ }
55
128
  const keyPattern = options.keyPattern ? new RegExp(options.keyPattern) : null;
56
129
  if (keyPattern) {
57
- console.log("");
58
- console.log(`Linting only keys matching pattern: ${keyPattern}`);
59
- console.log("");
130
+ log("");
131
+ log(`Linting only keys matching pattern: ${keyPattern}`);
132
+ log("");
60
133
  }
61
134
  // lint attributes
62
135
  const attributes = await datasource.listAttributes();
@@ -66,45 +139,29 @@ async function lintProject(deps, options = {}) {
66
139
  ? attributes
67
140
  : attributes.filter((key) => keyPattern.test(key));
68
141
  if (filteredKeys.length > 0) {
69
- console.log(`Linting ${filteredKeys.length} attributes...\n`);
142
+ log(`Linting ${filteredKeys.length} attributes...\n`);
70
143
  }
71
144
  for (const key of filteredKeys) {
72
145
  const fullPath = getFullPathFromKey("attribute", key);
73
146
  if (!ATTRIBUTE_NAME_REGEX.test(key)) {
74
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
75
- if (options.authors) {
76
- const authors = await getAuthorsOfEntity(datasource, "attribute", key);
77
- console.log(` Authors: ${authors.join(", ")}\n`);
78
- }
79
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: Invalid name: "${key}"`);
80
- console.log(cliFormat_1.CLI_FORMAT_RED, ` ${ATTRIBUTE_NAME_REGEX_ERROR}`);
81
- console.log("");
82
- hasError = true;
147
+ await reportSimpleError({
148
+ entityType: "attribute",
149
+ key,
150
+ fullPath,
151
+ message: `Invalid name: "${key}"`,
152
+ detail: ATTRIBUTE_NAME_REGEX_ERROR,
153
+ code: "invalid_name",
154
+ });
83
155
  }
84
156
  try {
85
157
  const parsed = await datasource.readAttribute(key);
86
158
  const result = attributeZodSchema.safeParse(parsed);
87
- if (!result.success) {
88
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
89
- if (options.authors) {
90
- const authors = await getAuthorsOfEntity(datasource, "attribute", key);
91
- console.log(` Authors: ${authors.join(", ")}\n`);
92
- }
93
- if ("error" in result) {
94
- (0, printError_1.printZodError)(result.error);
95
- }
96
- hasError = true;
159
+ if (!result.success && "error" in result) {
160
+ await reportZodValidationError("attribute", key, fullPath, result.error);
97
161
  }
98
162
  }
99
- catch (e) {
100
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
101
- if (options.authors) {
102
- const authors = await getAuthorsOfEntity(datasource, "attribute", key);
103
- console.log(` Authors: ${authors.join(", ")}\n`);
104
- }
105
- console.log("");
106
- console.log(e);
107
- hasError = true;
163
+ catch (error) {
164
+ await reportThrownError("attribute", key, fullPath, error);
108
165
  }
109
166
  }
110
167
  }
@@ -116,107 +173,86 @@ async function lintProject(deps, options = {}) {
116
173
  if (!options.entityType || options.entityType === "segment") {
117
174
  const filteredKeys = !keyPattern ? segments : segments.filter((key) => keyPattern.test(key));
118
175
  if (filteredKeys.length > 0) {
119
- console.log(`Linting ${filteredKeys.length} segments...\n`);
176
+ log(`Linting ${filteredKeys.length} segments...\n`);
120
177
  }
121
178
  for (const key of filteredKeys) {
122
179
  const fullPath = getFullPathFromKey("segment", key);
123
180
  if (!ENTITY_NAME_REGEX.test(key)) {
124
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
125
- if (options.authors) {
126
- const authors = await getAuthorsOfEntity(datasource, "segment", key);
127
- console.log(` Authors: ${authors.join(", ")}\n`);
128
- }
129
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: Invalid name: "${key}"`);
130
- console.log(cliFormat_1.CLI_FORMAT_RED, ` ${ENTITY_NAME_REGEX_ERROR}`);
131
- console.log("");
132
- hasError = true;
181
+ await reportSimpleError({
182
+ entityType: "segment",
183
+ key,
184
+ fullPath,
185
+ message: `Invalid name: "${key}"`,
186
+ detail: ENTITY_NAME_REGEX_ERROR,
187
+ code: "invalid_name",
188
+ });
133
189
  }
134
190
  try {
135
191
  const parsed = await datasource.readSegment(key);
136
192
  const result = segmentZodSchema.safeParse(parsed);
137
- if (!result.success) {
138
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
139
- if (options.authors) {
140
- const authors = await getAuthorsOfEntity(datasource, "segment", key);
141
- console.log(` Authors: ${authors.join(", ")}\n`);
142
- }
143
- if ("error" in result) {
144
- (0, printError_1.printZodError)(result.error);
145
- }
146
- hasError = true;
193
+ if (!result.success && "error" in result) {
194
+ await reportZodValidationError("segment", key, fullPath, result.error);
147
195
  }
148
196
  }
149
- catch (e) {
150
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
151
- if (options.authors) {
152
- const authors = await getAuthorsOfEntity(datasource, "segment", key);
153
- console.log(` Authors: ${authors.join(", ")}\n`);
154
- }
155
- console.log("");
156
- console.log(e);
157
- hasError = true;
197
+ catch (error) {
198
+ await reportThrownError("segment", key, fullPath, error);
158
199
  }
159
200
  }
160
201
  }
202
+ // List schemas and load parsed schemas for feature variable validation (schema references)
203
+ const schemas = await datasource.listSchemas();
204
+ const schemasByKey = {};
205
+ for (const key of schemas) {
206
+ try {
207
+ schemasByKey[key] = await datasource.readSchema(key);
208
+ }
209
+ catch {
210
+ // Schema file may be invalid; skip for feature variable resolution
211
+ }
212
+ }
161
213
  // lint features
162
214
  const features = await datasource.listFeatures();
163
- const featureZodSchema = (0, featureSchema_1.getFeatureZodSchema)(projectConfig, conditionsZodSchema, flattenedAttributes, segments, features);
215
+ const featureZodSchema = (0, featureSchema_1.getFeatureZodSchema)(projectConfig, conditionsZodSchema, flattenedAttributes, segments, features, schemas, schemasByKey);
164
216
  if (!options.entityType || options.entityType === "feature") {
165
217
  const filteredKeys = !keyPattern ? features : features.filter((key) => keyPattern.test(key));
166
218
  if (filteredKeys.length > 0) {
167
- console.log(`Linting ${filteredKeys.length} features...\n`);
219
+ log(`Linting ${filteredKeys.length} features...\n`);
168
220
  }
169
221
  for (const key of filteredKeys) {
170
222
  const fullPath = getFullPathFromKey("feature", key);
171
223
  if (!ENTITY_NAME_REGEX.test(key)) {
172
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
173
- if (options.authors) {
174
- const authors = await getAuthorsOfEntity(datasource, "feature", key);
175
- console.log(` Authors: ${authors.join(", ")}\n`);
176
- }
177
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: Invalid name: "${key}"`);
178
- console.log(cliFormat_1.CLI_FORMAT_RED, ` ${ENTITY_NAME_REGEX_ERROR}`);
179
- console.log("");
180
- hasError = true;
224
+ await reportSimpleError({
225
+ entityType: "feature",
226
+ key,
227
+ fullPath,
228
+ message: `Invalid name: "${key}"`,
229
+ detail: ENTITY_NAME_REGEX_ERROR,
230
+ code: "invalid_name",
231
+ });
181
232
  }
182
233
  let parsed;
183
234
  try {
184
235
  parsed = await datasource.readFeature(key);
185
236
  const result = featureZodSchema.safeParse(parsed);
186
- if (!result.success) {
187
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
188
- if (options.authors) {
189
- const authors = await getAuthorsOfEntity(datasource, "feature", key);
190
- console.log(` Authors: ${authors.join(", ")}\n`);
191
- }
192
- if ("error" in result) {
193
- (0, printError_1.printZodError)(result.error);
194
- }
195
- hasError = true;
237
+ if (!result.success && "error" in result) {
238
+ await reportZodValidationError("feature", key, fullPath, result.error);
196
239
  }
197
240
  }
198
- catch (e) {
199
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
200
- if (options.authors) {
201
- const authors = await getAuthorsOfEntity(datasource, "feature", key);
202
- console.log(` Authors: ${authors.join(", ")}\n`);
203
- }
204
- console.log("");
205
- console.log(e);
206
- hasError = true;
241
+ catch (error) {
242
+ await reportThrownError("feature", key, fullPath, error);
207
243
  }
208
244
  if (parsed && parsed.required) {
209
245
  try {
210
246
  await (0, checkCircularDependency_1.checkForCircularDependencyInRequired)(datasource, key, parsed.required);
211
247
  }
212
- catch (e) {
213
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
214
- if (options.authors) {
215
- const authors = await getAuthorsOfEntity(datasource, "feature", key);
216
- console.log(` Authors: ${authors.join(", ")}\n`);
217
- }
218
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: ${e.message}`);
219
- hasError = true;
248
+ catch (error) {
249
+ await reportSimpleError({
250
+ entityType: "feature",
251
+ key,
252
+ fullPath,
253
+ message: error instanceof Error ? error.message : String(error),
254
+ code: error instanceof Error ? error.name : "error",
255
+ });
220
256
  }
221
257
  }
222
258
  }
@@ -227,116 +263,121 @@ async function lintProject(deps, options = {}) {
227
263
  if (!options.entityType || options.entityType === "group") {
228
264
  const filteredKeys = !keyPattern ? groups : groups.filter((key) => keyPattern.test(key));
229
265
  if (filteredKeys.length > 0) {
230
- console.log(`Linting ${filteredKeys.length} groups...\n`);
266
+ log(`Linting ${filteredKeys.length} groups...\n`);
231
267
  }
232
268
  for (const key of filteredKeys) {
233
269
  const fullPath = getFullPathFromKey("group", key);
234
270
  if (!ENTITY_NAME_REGEX.test(key)) {
235
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
236
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: Invalid name: "${key}"`);
237
- if (options.authors) {
238
- const authors = await getAuthorsOfEntity(datasource, "group", key);
239
- console.log(` Authors: ${authors.join(", ")}\n`);
240
- }
241
- console.log(cliFormat_1.CLI_FORMAT_RED, ` ${ENTITY_NAME_REGEX_ERROR}`);
242
- console.log("");
243
- hasError = true;
271
+ await reportSimpleError({
272
+ entityType: "group",
273
+ key,
274
+ fullPath,
275
+ message: `Invalid name: "${key}"`,
276
+ detail: ENTITY_NAME_REGEX_ERROR,
277
+ code: "invalid_name",
278
+ });
244
279
  }
245
280
  let parsed;
246
281
  try {
247
282
  parsed = await datasource.readGroup(key);
248
283
  const result = groupZodSchema.safeParse(parsed);
249
- if (!result.success) {
250
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
251
- if (options.authors) {
252
- const authors = await getAuthorsOfEntity(datasource, "group", key);
253
- console.log(` Authors: ${authors.join(", ")}\n`);
254
- }
255
- if ("error" in result) {
256
- (0, printError_1.printZodError)(result.error);
257
- }
258
- hasError = true;
284
+ if (!result.success && "error" in result) {
285
+ await reportZodValidationError("group", key, fullPath, result.error);
259
286
  }
260
287
  }
261
- catch (e) {
262
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
263
- if (options.authors) {
264
- const authors = await getAuthorsOfEntity(datasource, "group", key);
265
- console.log(` Authors: ${authors.join(", ")}\n`);
266
- }
267
- console.log("");
268
- console.log(e);
269
- hasError = true;
288
+ catch (error) {
289
+ await reportThrownError("group", key, fullPath, error);
270
290
  }
271
291
  if (parsed) {
272
292
  try {
273
293
  await (0, checkPercentageExceedingSlot_1.checkForFeatureExceedingGroupSlotPercentage)(datasource, parsed, features);
274
294
  }
275
- catch (e) {
276
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
277
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: ${e.message}`);
278
- hasError = true;
295
+ catch (error) {
296
+ await reportSimpleError({
297
+ entityType: "group",
298
+ key,
299
+ fullPath,
300
+ message: error instanceof Error ? error.message : String(error),
301
+ code: error instanceof Error ? error.name : "error",
302
+ });
279
303
  }
280
304
  }
281
305
  }
282
306
  }
283
307
  // @TODO: feature cannot exist in multiple groups
308
+ // lint schemas (schemas and schemasByKey already loaded above for feature linting)
309
+ const schemaZodSchema = (0, schema_1.getSchemaZodSchema)(schemas);
310
+ if (!options.entityType || options.entityType === "schema") {
311
+ const filteredKeys = !keyPattern ? schemas : schemas.filter((key) => keyPattern.test(key));
312
+ if (filteredKeys.length > 0) {
313
+ log(`Linting ${filteredKeys.length} schemas...\n`);
314
+ }
315
+ for (const key of filteredKeys) {
316
+ const fullPath = getFullPathFromKey("schema", key);
317
+ if (!ENTITY_NAME_REGEX.test(key)) {
318
+ await reportSimpleError({
319
+ entityType: "schema",
320
+ key,
321
+ fullPath,
322
+ message: `Invalid name: "${key}"`,
323
+ detail: ENTITY_NAME_REGEX_ERROR,
324
+ code: "invalid_name",
325
+ });
326
+ }
327
+ try {
328
+ const parsed = await datasource.readSchema(key);
329
+ const result = schemaZodSchema.safeParse(parsed);
330
+ if (!result.success && "error" in result) {
331
+ await reportZodValidationError("schema", key, fullPath, result.error);
332
+ }
333
+ }
334
+ catch (error) {
335
+ await reportThrownError("schema", key, fullPath, error);
336
+ }
337
+ }
338
+ }
284
339
  // lint tests
285
340
  const tests = await datasource.listTests();
286
341
  const testsZodSchema = (0, testSchema_1.getTestsZodSchema)(projectConfig, features, segments);
287
342
  if (!options.entityType || options.entityType === "test") {
288
343
  const filteredKeys = !keyPattern ? tests : tests.filter((key) => keyPattern.test(key));
289
344
  if (filteredKeys.length > 0) {
290
- console.log(`Linting ${filteredKeys.length} tests...\n`);
345
+ log(`Linting ${filteredKeys.length} tests...\n`);
291
346
  }
292
347
  for (const key of filteredKeys) {
293
348
  const fullPath = getFullPathFromKey("test", key);
294
349
  if (!ENTITY_NAME_REGEX.test(key)) {
295
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
296
- if (options.authors) {
297
- const authors = await getAuthorsOfEntity(datasource, "test", key);
298
- console.log(` Authors: ${authors.join(", ")}\n`);
299
- }
300
- console.log(cliFormat_1.CLI_FORMAT_RED, ` => Error: Invalid name: "${key}"`);
301
- console.log(cliFormat_1.CLI_FORMAT_RED, ` ${ENTITY_NAME_REGEX_ERROR}`);
302
- console.log("");
303
- hasError = true;
350
+ await reportSimpleError({
351
+ entityType: "test",
352
+ key,
353
+ fullPath,
354
+ message: `Invalid name: "${key}"`,
355
+ detail: ENTITY_NAME_REGEX_ERROR,
356
+ code: "invalid_name",
357
+ });
304
358
  }
305
359
  try {
306
360
  const parsed = await datasource.readTest(key);
307
361
  const result = testsZodSchema.safeParse(parsed);
308
- if (!result.success) {
309
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
310
- if (options.authors) {
311
- const authors = await getAuthorsOfEntity(datasource, "test", key);
312
- console.log(` Authors: ${authors.join(", ")}\n`);
313
- }
314
- if ("error" in result) {
315
- (0, printError_1.printZodError)(result.error);
316
- process.exit(1);
317
- }
318
- hasError = true;
362
+ if (!result.success && "error" in result) {
363
+ await reportZodValidationError("test", key, fullPath, result.error);
319
364
  }
320
365
  }
321
- catch (e) {
322
- console.log(cliFormat_1.CLI_FORMAT_BOLD_UNDERLINE, fullPath);
323
- if (options.authors) {
324
- const authors = await getAuthorsOfEntity(datasource, "test", key);
325
- console.log(` Authors: ${authors.join(", ")}\n`);
326
- }
327
- console.log("");
328
- console.log(e);
329
- hasError = true;
366
+ catch (error) {
367
+ await reportThrownError("test", key, fullPath, error);
330
368
  }
331
369
  }
332
370
  }
333
- return hasError;
371
+ return {
372
+ hasError: errors.length > 0,
373
+ errors,
374
+ };
334
375
  }
335
376
  exports.lintPlugin = {
336
377
  command: "lint",
337
378
  handler: async function (options) {
338
379
  const { rootDirectoryPath, projectConfig, datasource, parsed } = options;
339
- const hasError = await lintProject({
380
+ const result = await lintProject({
340
381
  rootDirectoryPath,
341
382
  projectConfig,
342
383
  datasource,
@@ -345,8 +386,14 @@ exports.lintPlugin = {
345
386
  keyPattern: parsed.keyPattern,
346
387
  entityType: parsed.entityType,
347
388
  authors: parsed.authors,
389
+ json: parsed.json,
390
+ pretty: parsed.pretty,
348
391
  });
349
- if (hasError) {
392
+ if (parsed.json) {
393
+ const payload = { errors: result.errors };
394
+ console.log(parsed.pretty ? JSON.stringify(payload, null, 2) : JSON.stringify(payload));
395
+ }
396
+ if (result.hasError) {
350
397
  return false;
351
398
  }
352
399
  },
@@ -367,6 +414,10 @@ exports.lintPlugin = {
367
414
  command: "lint --entityType=group",
368
415
  description: "lint only groups",
369
416
  },
417
+ {
418
+ command: "lint --entityType=schema",
419
+ description: "lint only schemas",
420
+ },
370
421
  {
371
422
  command: "lint --entityType=test",
372
423
  description: "lint only tests",
@@ -375,6 +426,14 @@ exports.lintPlugin = {
375
426
  command: 'lint --keyPattern="abc"',
376
427
  description: `lint only entities with keys containing "abc"`,
377
428
  },
429
+ {
430
+ command: "lint --json",
431
+ description: "print lint errors as JSON",
432
+ },
433
+ {
434
+ command: "lint --json --pretty",
435
+ description: "print lint errors as pretty JSON",
436
+ },
378
437
  ],
379
438
  };
380
439
  //# sourceMappingURL=lintProject.js.map