@iris-code/core 0.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.
Files changed (94) hide show
  1. package/README.md +38 -0
  2. package/dist/config.d.ts +147 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +550 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/csharp/analyser.d.ts +14 -0
  7. package/dist/csharp/analyser.d.ts.map +1 -0
  8. package/dist/csharp/analyser.js +436 -0
  9. package/dist/csharp/analyser.js.map +1 -0
  10. package/dist/csharp/lexer.d.ts +29 -0
  11. package/dist/csharp/lexer.d.ts.map +1 -0
  12. package/dist/csharp/lexer.js +182 -0
  13. package/dist/csharp/lexer.js.map +1 -0
  14. package/dist/duplicates.d.ts +53 -0
  15. package/dist/duplicates.d.ts.map +1 -0
  16. package/dist/duplicates.js +491 -0
  17. package/dist/duplicates.js.map +1 -0
  18. package/dist/fileAnalyser.d.ts +4 -0
  19. package/dist/fileAnalyser.d.ts.map +1 -0
  20. package/dist/fileAnalyser.js +8 -0
  21. package/dist/fileAnalyser.js.map +1 -0
  22. package/dist/fileNaming.d.ts +68 -0
  23. package/dist/fileNaming.d.ts.map +1 -0
  24. package/dist/fileNaming.js +343 -0
  25. package/dist/fileNaming.js.map +1 -0
  26. package/dist/gate.d.ts +49 -0
  27. package/dist/gate.d.ts.map +1 -0
  28. package/dist/gate.js +242 -0
  29. package/dist/gate.js.map +1 -0
  30. package/dist/go/analyser.d.ts +5 -0
  31. package/dist/go/analyser.d.ts.map +1 -0
  32. package/dist/go/analyser.js +576 -0
  33. package/dist/go/analyser.js.map +1 -0
  34. package/dist/guards.d.ts +16 -0
  35. package/dist/guards.d.ts.map +1 -0
  36. package/dist/guards.js +355 -0
  37. package/dist/guards.js.map +1 -0
  38. package/dist/index.d.ts +22 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +110 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/languages.d.ts +46 -0
  43. package/dist/languages.d.ts.map +1 -0
  44. package/dist/languages.js +155 -0
  45. package/dist/languages.js.map +1 -0
  46. package/dist/lines.d.ts +9 -0
  47. package/dist/lines.d.ts.map +1 -0
  48. package/dist/lines.js +58 -0
  49. package/dist/lines.js.map +1 -0
  50. package/dist/python/analyser.d.ts +5 -0
  51. package/dist/python/analyser.d.ts.map +1 -0
  52. package/dist/python/analyser.js +630 -0
  53. package/dist/python/analyser.js.map +1 -0
  54. package/dist/qualitySignals.d.ts +30 -0
  55. package/dist/qualitySignals.d.ts.map +1 -0
  56. package/dist/qualitySignals.js +101 -0
  57. package/dist/qualitySignals.js.map +1 -0
  58. package/dist/ruby/analyser.d.ts +5 -0
  59. package/dist/ruby/analyser.d.ts.map +1 -0
  60. package/dist/ruby/analyser.js +450 -0
  61. package/dist/ruby/analyser.js.map +1 -0
  62. package/dist/scoring.d.ts +4 -0
  63. package/dist/scoring.d.ts.map +1 -0
  64. package/dist/scoring.js +37 -0
  65. package/dist/scoring.js.map +1 -0
  66. package/dist/secrets.d.ts +5 -0
  67. package/dist/secrets.d.ts.map +1 -0
  68. package/dist/secrets.js +245 -0
  69. package/dist/secrets.js.map +1 -0
  70. package/dist/securityContext.d.ts +2 -0
  71. package/dist/securityContext.d.ts.map +1 -0
  72. package/dist/securityContext.js +16 -0
  73. package/dist/securityContext.js.map +1 -0
  74. package/dist/sfc.d.ts +32 -0
  75. package/dist/sfc.d.ts.map +1 -0
  76. package/dist/sfc.js +228 -0
  77. package/dist/sfc.js.map +1 -0
  78. package/dist/slop.d.ts +37 -0
  79. package/dist/slop.d.ts.map +1 -0
  80. package/dist/slop.js +81 -0
  81. package/dist/slop.js.map +1 -0
  82. package/dist/suppressions.d.ts +19 -0
  83. package/dist/suppressions.d.ts.map +1 -0
  84. package/dist/suppressions.js +152 -0
  85. package/dist/suppressions.js.map +1 -0
  86. package/dist/ts/analyser.d.ts +4 -0
  87. package/dist/ts/analyser.d.ts.map +1 -0
  88. package/dist/ts/analyser.js +769 -0
  89. package/dist/ts/analyser.js.map +1 -0
  90. package/dist/types.d.ts +139 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +46 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +43 -0
package/dist/config.js ADDED
@@ -0,0 +1,550 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IRIS_CONFIG_SCHEMA_URL = exports.IRIS_CONFIG_PRESETS = exports.DEFAULT_IRIS_CONFIG = exports.IRIS_INLINE_DIAGNOSTIC_KEYS = exports.IRIS_HEALTH_WEIGHT_KEYS = exports.IRIS_WARNING_TYPES = void 0;
4
+ exports.mergeIrisConfig = mergeIrisConfig;
5
+ exports.getIrisConfigPreset = getIrisConfigPreset;
6
+ exports.buildGeneratedConfig = buildGeneratedConfig;
7
+ exports.serializeGeneratedConfigJsonc = serializeGeneratedConfigJsonc;
8
+ exports.IRIS_WARNING_TYPES = [
9
+ 'file-too-long',
10
+ 'function-too-long',
11
+ 'too-many-functions',
12
+ 'too-many-imports',
13
+ 'no-exports',
14
+ 'hardcoded-secret',
15
+ 'any-usage',
16
+ 'ts-ignore',
17
+ 'unused-function',
18
+ 'unused-var',
19
+ 'console-log',
20
+ 'magic-number',
21
+ 'long-param-list',
22
+ 'todo',
23
+ 'parse-error',
24
+ 'security-smell',
25
+ 'duplicate-code',
26
+ 'file-naming',
27
+ 'method-missing',
28
+ 'mass-assignment',
29
+ 'god-class',
30
+ 'large-class',
31
+ 'catch-all-exception',
32
+ 'async-void',
33
+ 'linq-abuse',
34
+ ];
35
+ exports.IRIS_HEALTH_WEIGHT_KEYS = [
36
+ 'errorWarning',
37
+ 'warningWarning',
38
+ 'anyUsage',
39
+ 'tsIgnore',
40
+ 'consoleLog',
41
+ 'deepNesting',
42
+ 'longParamList',
43
+ 'unusedVar',
44
+ 'unusedFunction',
45
+ 'hardcodedSecret',
46
+ 'evalUsage',
47
+ 'sqlConcatenation',
48
+ 'insecureRandom',
49
+ 'unsafeRegex',
50
+ 'hardcodedLocalhost',
51
+ 'disabledTlsVerification',
52
+ 'debugFlagsEnabled',
53
+ 'weakHashing',
54
+ 'openRedirect',
55
+ 'bareSuppression',
56
+ 'duplicateCode',
57
+ 'fileNaming',
58
+ ];
59
+ exports.IRIS_INLINE_DIAGNOSTIC_KEYS = [
60
+ 'hardcodedSecrets',
61
+ 'securitySmells',
62
+ 'duplicateCode',
63
+ 'errorWarnings',
64
+ 'warningLevelWarnings',
65
+ 'tsIgnore',
66
+ 'unusedFunctions',
67
+ 'anyUsage',
68
+ 'consoleLogs',
69
+ 'magicNumbers',
70
+ 'longParamLists',
71
+ 'unusedVars',
72
+ 'todos',
73
+ 'fileNaming',
74
+ ];
75
+ exports.DEFAULT_IRIS_CONFIG = {
76
+ functionLengthThreshold: 40,
77
+ fileLengthThreshold: 300,
78
+ maxFunctionsPerFile: 10,
79
+ maxImportsPerFile: 8,
80
+ maxParameterCount: 5,
81
+ complexityThreshold: 7,
82
+ enableConsoleLogWarnings: true,
83
+ enableMagicNumberDetection: true,
84
+ enableTodoDetection: true,
85
+ enableLongParamDetection: true,
86
+ enableUnusedDetection: true,
87
+ enableMissingReturnTypeWarnings: true,
88
+ enableSecretsDetection: true,
89
+ enableSecuritySmells: true,
90
+ enableDuplicateDetection: true,
91
+ duplicateBlockMinTokens: 40,
92
+ enableCodeLens: true,
93
+ enableStatusBar: true,
94
+ severityOverrides: {},
95
+ ignoreFiles: [
96
+ '**/*.test.ts',
97
+ '**/*.spec.ts',
98
+ '**/*.test.tsx',
99
+ '**/*.spec.tsx',
100
+ '**/generated/**',
101
+ ],
102
+ ignoreFunctions: [],
103
+ testConvention: 'colocated',
104
+ sidebarFontSize: 14,
105
+ ignoreSuppressions: false,
106
+ fileNamingScope: 'new-files',
107
+ enableInlineDiagnostics: false,
108
+ inlineDiagnostics: {
109
+ hardcodedSecrets: true,
110
+ securitySmells: true,
111
+ duplicateCode: false,
112
+ errorWarnings: false,
113
+ warningLevelWarnings: false,
114
+ tsIgnore: true,
115
+ unusedFunctions: true,
116
+ anyUsage: true,
117
+ consoleLogs: false,
118
+ magicNumbers: false,
119
+ longParamLists: false,
120
+ unusedVars: false,
121
+ todos: false,
122
+ fileNaming: true,
123
+ },
124
+ healthScoreWeights: {
125
+ errorWarning: 5,
126
+ warningWarning: 3,
127
+ anyUsage: 2,
128
+ tsIgnore: 3,
129
+ consoleLog: 1,
130
+ deepNesting: 2,
131
+ longParamList: 1,
132
+ unusedVar: 1,
133
+ unusedFunction: 2,
134
+ hardcodedSecret: 10,
135
+ evalUsage: 5,
136
+ sqlConcatenation: 5,
137
+ insecureRandom: 2,
138
+ unsafeRegex: 3,
139
+ hardcodedLocalhost: 1,
140
+ disabledTlsVerification: 7,
141
+ debugFlagsEnabled: 2,
142
+ weakHashing: 5,
143
+ openRedirect: 7,
144
+ bareSuppression: 2,
145
+ duplicateCode: 3,
146
+ fileNaming: 1,
147
+ },
148
+ };
149
+ exports.IRIS_CONFIG_PRESETS = {
150
+ strict: {
151
+ id: 'strict',
152
+ label: 'Strict',
153
+ description: 'Tighter thresholds for teams that want faster warnings and a tougher gate.',
154
+ recommendedFor: ['New repos', 'active refactors', 'teams enforcing hooks'],
155
+ config: {
156
+ functionLengthThreshold: 30,
157
+ fileLengthThreshold: 220,
158
+ maxFunctionsPerFile: 8,
159
+ maxImportsPerFile: 7,
160
+ maxParameterCount: 4,
161
+ complexityThreshold: 6,
162
+ enableInlineDiagnostics: true,
163
+ inlineDiagnostics: {
164
+ hardcodedSecrets: true,
165
+ tsIgnore: true,
166
+ unusedFunctions: true,
167
+ anyUsage: true,
168
+ errorWarnings: true,
169
+ },
170
+ healthScoreWeights: {
171
+ errorWarning: 6,
172
+ warningWarning: 4,
173
+ anyUsage: 3,
174
+ tsIgnore: 4,
175
+ consoleLog: 2,
176
+ deepNesting: 3,
177
+ longParamList: 2,
178
+ unusedVar: 2,
179
+ unusedFunction: 3,
180
+ hardcodedSecret: 14,
181
+ evalUsage: 7,
182
+ sqlConcatenation: 7,
183
+ insecureRandom: 3,
184
+ unsafeRegex: 4,
185
+ hardcodedLocalhost: 2,
186
+ disabledTlsVerification: 10,
187
+ debugFlagsEnabled: 3,
188
+ weakHashing: 7,
189
+ openRedirect: 10,
190
+ bareSuppression: 3,
191
+ },
192
+ minHealthScore: 82,
193
+ trendRegressionThreshold: 3,
194
+ gateBaselineMode: true,
195
+ // Strict takes a stance on suppression volume: more than 5 iris-ignore
196
+ // suppressed findings in one file fails the gate.
197
+ gateMaxSuppressions: 5,
198
+ },
199
+ },
200
+ balanced: {
201
+ id: 'balanced',
202
+ label: 'Balanced',
203
+ description: 'A solid default that matches the shipped Iris Code defaults with a practical gate.',
204
+ recommendedFor: ['Most repos', 'mixed-language codebases', 'first-time setup'],
205
+ config: {
206
+ minHealthScore: 70,
207
+ trendRegressionThreshold: 5,
208
+ gateBaselineMode: true,
209
+ },
210
+ },
211
+ legacy: {
212
+ id: 'legacy',
213
+ label: 'Legacy',
214
+ description: 'Looser thresholds for older codebases that need a softer rollout path.',
215
+ recommendedFor: ['Large existing codebases', 'incremental adoption'],
216
+ config: {
217
+ functionLengthThreshold: 55,
218
+ fileLengthThreshold: 420,
219
+ maxFunctionsPerFile: 14,
220
+ maxImportsPerFile: 12,
221
+ maxParameterCount: 7,
222
+ complexityThreshold: 8,
223
+ enableMissingReturnTypeWarnings: false,
224
+ enableInlineDiagnostics: false,
225
+ healthScoreWeights: {
226
+ errorWarning: 4,
227
+ warningWarning: 2,
228
+ anyUsage: 1,
229
+ tsIgnore: 2,
230
+ consoleLog: 1,
231
+ deepNesting: 1,
232
+ longParamList: 1,
233
+ unusedVar: 1,
234
+ unusedFunction: 1,
235
+ hardcodedSecret: 8,
236
+ },
237
+ minHealthScore: 60,
238
+ trendRegressionThreshold: 8,
239
+ gateBaselineMode: true,
240
+ },
241
+ },
242
+ security: {
243
+ id: 'security',
244
+ label: 'Security',
245
+ description: 'Biases Iris toward secrets, debug residue, and riskier code-health regressions.',
246
+ recommendedFor: ['Security-sensitive repos', 'release hardening'],
247
+ config: {
248
+ functionLengthThreshold: 35,
249
+ fileLengthThreshold: 260,
250
+ maxFunctionsPerFile: 9,
251
+ maxImportsPerFile: 8,
252
+ maxParameterCount: 5,
253
+ complexityThreshold: 6,
254
+ enableInlineDiagnostics: true,
255
+ inlineDiagnostics: {
256
+ hardcodedSecrets: true,
257
+ consoleLogs: true,
258
+ todos: true,
259
+ errorWarnings: true,
260
+ },
261
+ severityOverrides: {
262
+ 'hardcoded-secret': 'error',
263
+ 'console-log': 'warning',
264
+ todo: 'warning',
265
+ },
266
+ healthScoreWeights: {
267
+ errorWarning: 6,
268
+ warningWarning: 4,
269
+ anyUsage: 2,
270
+ tsIgnore: 3,
271
+ consoleLog: 3,
272
+ deepNesting: 2,
273
+ longParamList: 1,
274
+ unusedVar: 1,
275
+ unusedFunction: 2,
276
+ hardcodedSecret: 18,
277
+ evalUsage: 8,
278
+ sqlConcatenation: 8,
279
+ insecureRandom: 3,
280
+ unsafeRegex: 5,
281
+ hardcodedLocalhost: 2,
282
+ disabledTlsVerification: 12,
283
+ debugFlagsEnabled: 4,
284
+ weakHashing: 8,
285
+ openRedirect: 12,
286
+ bareSuppression: 4,
287
+ },
288
+ minHealthScore: 85,
289
+ trendRegressionThreshold: 4,
290
+ gateBaselineMode: true,
291
+ // Security is the harshest on self-approval: undocumented ignores cost
292
+ // double the default, and 3 suppressions in one file fails the gate.
293
+ gateMaxSuppressions: 3,
294
+ },
295
+ },
296
+ typescript: {
297
+ id: 'typescript',
298
+ label: 'TypeScript',
299
+ description: 'Leans into exported return types, ts-ignore visibility, and TS-heavy teams.',
300
+ recommendedFor: ['TS monorepos', 'frontend apps', 'strict API packages'],
301
+ config: {
302
+ functionLengthThreshold: 35,
303
+ fileLengthThreshold: 260,
304
+ maxFunctionsPerFile: 9,
305
+ maxImportsPerFile: 9,
306
+ maxParameterCount: 5,
307
+ complexityThreshold: 6,
308
+ enableMissingReturnTypeWarnings: true,
309
+ enableInlineDiagnostics: true,
310
+ inlineDiagnostics: {
311
+ tsIgnore: true,
312
+ anyUsage: true,
313
+ unusedFunctions: true,
314
+ },
315
+ testConvention: 'both',
316
+ healthScoreWeights: {
317
+ errorWarning: 5,
318
+ warningWarning: 3,
319
+ anyUsage: 3,
320
+ tsIgnore: 4,
321
+ consoleLog: 1,
322
+ deepNesting: 2,
323
+ longParamList: 1,
324
+ unusedVar: 1,
325
+ unusedFunction: 2,
326
+ hardcodedSecret: 10,
327
+ },
328
+ minHealthScore: 76,
329
+ trendRegressionThreshold: 4,
330
+ gateBaselineMode: true,
331
+ },
332
+ },
333
+ 'ai-assisted': {
334
+ id: 'ai-assisted',
335
+ label: 'AI-assisted',
336
+ description: 'Stricter defaults for teams reviewing AI-assisted code at volume.',
337
+ recommendedFor: ['AI-assisted teams', 'high-volume review', 'agent-generated changes'],
338
+ config: {
339
+ functionLengthThreshold: 30,
340
+ fileLengthThreshold: 220,
341
+ maxFunctionsPerFile: 8,
342
+ maxImportsPerFile: 7,
343
+ maxParameterCount: 4,
344
+ complexityThreshold: 5,
345
+ enableInlineDiagnostics: true,
346
+ inlineDiagnostics: {
347
+ hardcodedSecrets: true,
348
+ securitySmells: true,
349
+ duplicateCode: true,
350
+ tsIgnore: true,
351
+ unusedFunctions: true,
352
+ anyUsage: true,
353
+ errorWarnings: true,
354
+ },
355
+ healthScoreWeights: {
356
+ errorWarning: 6,
357
+ warningWarning: 4,
358
+ anyUsage: 3,
359
+ tsIgnore: 4,
360
+ consoleLog: 2,
361
+ deepNesting: 3,
362
+ longParamList: 2,
363
+ unusedVar: 2,
364
+ unusedFunction: 3,
365
+ hardcodedSecret: 14,
366
+ evalUsage: 8,
367
+ sqlConcatenation: 8,
368
+ insecureRandom: 3,
369
+ unsafeRegex: 5,
370
+ hardcodedLocalhost: 2,
371
+ disabledTlsVerification: 10,
372
+ debugFlagsEnabled: 4,
373
+ weakHashing: 8,
374
+ openRedirect: 10,
375
+ bareSuppression: 4,
376
+ duplicateCode: 5,
377
+ fileNaming: 2,
378
+ },
379
+ minHealthScore: 82,
380
+ trendRegressionThreshold: 3,
381
+ gateBaselineMode: true,
382
+ gateMaxSuppressions: 3,
383
+ gateMaxDuplicateBlocks: 5,
384
+ // Naming conventions are team-specific. This cap becomes active after
385
+ // the user declares a per-language fileNaming policy.
386
+ gateMaxNamingViolations: 10,
387
+ },
388
+ },
389
+ };
390
+ function mergeIrisConfig(overrides = {}) {
391
+ return {
392
+ ...exports.DEFAULT_IRIS_CONFIG,
393
+ ...overrides,
394
+ inlineDiagnostics: {
395
+ ...exports.DEFAULT_IRIS_CONFIG.inlineDiagnostics,
396
+ ...(overrides.inlineDiagnostics ?? {}),
397
+ },
398
+ healthScoreWeights: {
399
+ ...exports.DEFAULT_IRIS_CONFIG.healthScoreWeights,
400
+ ...(overrides.healthScoreWeights ?? {}),
401
+ },
402
+ severityOverrides: overrides.severityOverrides ?? exports.DEFAULT_IRIS_CONFIG.severityOverrides,
403
+ ignoreFiles: overrides.ignoreFiles ?? exports.DEFAULT_IRIS_CONFIG.ignoreFiles,
404
+ ignoreFunctions: overrides.ignoreFunctions ?? exports.DEFAULT_IRIS_CONFIG.ignoreFunctions,
405
+ languages: overrides.languages ?? exports.DEFAULT_IRIS_CONFIG.languages,
406
+ fileNaming: overrides.fileNaming ?? exports.DEFAULT_IRIS_CONFIG.fileNaming,
407
+ };
408
+ }
409
+ function getIrisConfigPreset(id) {
410
+ return exports.IRIS_CONFIG_PRESETS[id];
411
+ }
412
+ function buildGeneratedConfig(presetId, overrides = {}) {
413
+ const preset = getIrisConfigPreset(presetId);
414
+ const mergedInlineDiagnostics = {
415
+ ...(preset.config.inlineDiagnostics ?? {}),
416
+ ...(overrides.inlineDiagnostics ?? {}),
417
+ };
418
+ const mergedHealthScoreWeights = {
419
+ ...(preset.config.healthScoreWeights ?? {}),
420
+ ...(overrides.healthScoreWeights ?? {}),
421
+ };
422
+ return {
423
+ presetId,
424
+ ...preset.config,
425
+ ...overrides,
426
+ inlineDiagnostics: Object.keys(mergedInlineDiagnostics).length > 0 ? mergedInlineDiagnostics : undefined,
427
+ healthScoreWeights: Object.keys(mergedHealthScoreWeights).length > 0 ? mergedHealthScoreWeights : undefined,
428
+ severityOverrides: overrides.severityOverrides ?? preset.config.severityOverrides,
429
+ ignoreFiles: overrides.ignoreFiles ?? preset.config.ignoreFiles,
430
+ ignoreFunctions: overrides.ignoreFunctions ?? preset.config.ignoreFunctions,
431
+ };
432
+ }
433
+ function formatValue(value, indent) {
434
+ if (Array.isArray(value)) {
435
+ if (value.length === 0)
436
+ return '[]';
437
+ const pad = ' '.repeat(indent);
438
+ const itemPad = ' '.repeat(indent + 2);
439
+ return `[\n${value.map((item) => `${itemPad}${formatValue(item, indent + 2)}`).join(',\n')}\n${pad}]`;
440
+ }
441
+ if (value && typeof value === 'object') {
442
+ const entries = Object.entries(value);
443
+ if (entries.length === 0)
444
+ return '{}';
445
+ const pad = ' '.repeat(indent);
446
+ const itemPad = ' '.repeat(indent + 2);
447
+ return `{\n${entries
448
+ .map(([key, item]) => `${itemPad}"${key}": ${formatValue(item, indent + 2)}`)
449
+ .join(',\n')}\n${pad}}`;
450
+ }
451
+ return JSON.stringify(value);
452
+ }
453
+ const FIELD_COMMENTS = {
454
+ presetId: 'Use a shipped Iris Code preset as the source of truth for this config.',
455
+ minHealthScore: 'Shared gate used by the CLI, git hook, and build hook.',
456
+ trendRegressionThreshold: 'Flag snapshot deltas worse than this many health-score points in the Trends table. (Pro)',
457
+ gateBaselineMode: 'When true, gate existing files against their locked baseline score. New files still use minHealthScore. (Pro)',
458
+ gateMaxSecrets: 'Gate fails if total hardcoded secrets found exceeds this count. Set to 0 to block any secrets.',
459
+ gateMaxComplexity: 'Gate fails if any file exceeds this complexity score.',
460
+ gateMaxFileLength: 'Gate fails if any file exceeds this line count.',
461
+ gateMaxSmellsPerFile: 'Gate fails if any file exceeds this total smell count.',
462
+ gateMaxSecuritySmells: 'Gate fails if total security smells found across the workspace exceeds this count.',
463
+ gateMaxSuppressions: 'Gate fails if any file carries more than this many iris-ignore suppressed findings.',
464
+ gateMaxDuplicateBlocks: 'Gate fails if total duplicate code blocks found across the scan exceeds this count.',
465
+ gateMaxNamingViolations: 'Gate fails if total file naming violations exceed this count.',
466
+ duplicateBlockMinTokens: 'Minimum normalised-token run length before two stretches of code count as a duplicate block.',
467
+ enableDuplicateDetection: 'Detect duplicated code blocks within and across files.',
468
+ ignoreSuppressions: 'Team-lead override: treat iris-ignore comments as inert so suppressed findings count as live.',
469
+ functionLengthThreshold: 'Warn when a function grows beyond this many lines.',
470
+ fileLengthThreshold: 'Warn when a file grows beyond this many lines.',
471
+ maxFunctionsPerFile: 'Warn when a file packs in too many functions.',
472
+ maxImportsPerFile: 'Warn when a file pulls in too many third-party imports.',
473
+ maxParameterCount: 'Warn when a function takes too many parameters.',
474
+ complexityThreshold: 'Warn when complexity reaches this score.',
475
+ enableConsoleLogWarnings: 'Catch debug prints left in production code.',
476
+ enableMagicNumberDetection: 'Catch raw numeric literals with no named meaning.',
477
+ enableTodoDetection: 'Collect TODO / FIXME / HACK comments.',
478
+ enableLongParamDetection: 'Flag long parameter lists in the Code Smells section.',
479
+ enableUnusedDetection: 'Flag unused vars and unused functions in-file.',
480
+ enableMissingReturnTypeWarnings: 'Flag exported TS/JS functions missing return types.',
481
+ enableSecretsDetection: 'Detect possible hardcoded secrets and tokens.',
482
+ enableSecuritySmells: 'Detect security anti-patterns: eval, SQL concatenation, insecure RNG, ReDoS-risk regex, disabled TLS, weak hashing, open redirects, and more.',
483
+ testConvention: 'Where Iris should look for related test files.',
484
+ enableInlineDiagnostics: 'Show selected Iris findings as Problems/squiggles.',
485
+ inlineDiagnostics: 'Per-category inline diagnostics toggles.',
486
+ healthScoreWeights: 'Advanced penalty weights controlling how much each finding subtracts from the base 100 health score.',
487
+ severityOverrides: 'Optional warning severity overrides.',
488
+ ignoreFiles: 'Glob patterns Iris should skip entirely.',
489
+ ignoreFunctions: 'Function names Iris should never flag.',
490
+ fileNaming: 'Free workspace naming default with absolute ignore globs and ordered path/role overrides. The last matching override wins; language policies are backward-compatible fallbacks.',
491
+ fileNamingScope: 'Default naming scope for the workspace: check only files absent from the baseline, or all files. A language may override this inside fileNaming.scope.',
492
+ languages: 'Per-language config. fileNaming is a Free fallback when no path override matches; thresholds, scoring, severities, and gate caps are Pro.',
493
+ };
494
+ /**
495
+ * Public URL of the .irisconfig.json JSON schema, written into every generated
496
+ * config as `$schema`.
497
+ *
498
+ * Editors resolve `$schema` themselves, so ONE line in the file gives completion,
499
+ * hover docs, and unknown-key validation in VS Code, JetBrains, Neovim, and
500
+ * anything else that speaks JSON schema. The alternative was per-host plumbing:
501
+ * VS Code contributes `jsonValidation`, and the JetBrains equivalent would have
502
+ * meant Java against an extension point that lives in a backend-only module in
503
+ * 2026.2, unverifiable in a remote-dev split.
504
+ *
505
+ * Versioned on purpose: a breaking config change publishes /v2 and leaves every
506
+ * existing file pointing at a schema that still describes it correctly.
507
+ * Served from Iris-landing/public/schema/v1/ - keep the two in step with
508
+ * `node scripts/copy-schema.js` in the extension repo.
509
+ */
510
+ exports.IRIS_CONFIG_SCHEMA_URL = 'https://www.iriscode.co/schema/v1/irisconfig.schema.json';
511
+ function serializeGeneratedConfigJsonc(values, presetId, options = {}) {
512
+ const entries = Object.entries(values).filter(([, value]) => value !== undefined);
513
+ const schemaUrl = options.schemaUrl ?? exports.IRIS_CONFIG_SCHEMA_URL;
514
+ // $schema goes first, where editors and readers both expect it. Its comma
515
+ // depends on whether any real values follow: the rest of this file may be
516
+ // nothing but the commented `languages` scaffold, and a dangling comma before
517
+ // `}` would break any strict JSON reader of a generated config.
518
+ const lines = [
519
+ '{',
520
+ ` "$schema": "${schemaUrl}"${entries.length > 0 ? ',' : ''}`,
521
+ // The scaffold below adds its own leading blank, so only separate when there
522
+ // are real values in between.
523
+ ...(entries.length > 0 ? [''] : []),
524
+ ];
525
+ entries.forEach(([key, value], index) => {
526
+ const comment = FIELD_COMMENTS[key];
527
+ if (comment) {
528
+ lines.push(` // ${comment}`);
529
+ }
530
+ lines.push(` "${key}": ${formatValue(value, 2)}${index === entries.length - 1 ? '' : ','}`);
531
+ if (index !== entries.length - 1) {
532
+ lines.push('');
533
+ }
534
+ });
535
+ if (presetId) {
536
+ const preset = getIrisConfigPreset(presetId);
537
+ // Index 3, not 1: the $schema line and its blank now occupy 1 and 2, and the
538
+ // preset note belongs below them rather than above the first key.
539
+ lines.splice(3, 0, ` // Generated by Iris Code using the ${preset.label} preset.`, ` // ${preset.description}`, '');
540
+ }
541
+ // Discoverability scaffold (Phase 5.10): presets take no per-language
542
+ // stance, so generated configs ship the block commented out. Uncommenting
543
+ // File naming is Free; other fields in these blocks are Pro.
544
+ if (!('languages' in values) || values.languages === undefined) {
545
+ lines.push('', ' // Role-based file naming (Free). Rules are ordered; the last matching glob wins.', ' // "fileNaming": {', ' // "convention": "kebab-case", "ignore": [],', ' // "overrides": [', ' // { "files": ["**/components/**"], "convention": "PascalCase" },', ' // { "files": ["**/hooks/**", "**/composables/**"], "convention": "camelCase" }', ' // ]', ' // },', '', ' // Per-language config. fileNaming remains a Free fallback; other fields are Pro.', ' // Keys: typescript, javascript, go, python, ruby, csharp.', ' // Vue/Svelte use javascript, or typescript when a script block declares lang="ts".', ' // "languages": {', ' // "typescript": { "fileNaming": { "convention": "kebab-case", "scope": "all", "ignore": [] } },', ' // "python": { "fileLengthThreshold": 500 }', ' // }');
546
+ }
547
+ lines.push('}');
548
+ return `${lines.join('\n')}\n`;
549
+ }
550
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { IrisConfig } from '../config';
2
+ import type { LanguageAnalysis } from '../types';
3
+ /**
4
+ * `.csproj` reports its PackageReference/FrameworkReference entries: the
5
+ * project file is the authoritative dependency list, the way a Gemfile is.
6
+ *
7
+ * A `.cs` file reports the namespaces it imports, excluding `System.*` (the
8
+ * base class library, present in every file and never a dependency signal).
9
+ * `Microsoft.*` IS counted: EF Core, ASP.NET, Extensions and the Azure SDK all
10
+ * live there and are as much a third-party dependency as anything on NuGet.
11
+ */
12
+ export declare function extractCSharpThirdPartyImports(source: string, filePath?: string): string[];
13
+ export declare function analyseCSharp(source: string, config: IrisConfig, filePath?: string): LanguageAnalysis;
14
+ //# sourceMappingURL=analyser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyser.d.ts","sourceRoot":"","sources":["../../src/csharp/analyser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAOtC,OAAO,KAAK,EAA6C,gBAAgB,EAA8B,MAAM,UAAU,CAAA;AAiIvH;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,EAAE,CA4BtF;AAuOD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,SAAK,GAAG,gBAAgB,CAqBjG"}