@primmel/primmel 1.21.0 → 1.21.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/check-allowlist.d.ts +22 -0
- package/dist/src/check-allowlist.d.ts.map +1 -1
- package/dist/src/check-allowlist.js +58 -0
- package/dist/src/check-allowlist.js.map +1 -1
- package/dist/src/check.d.ts.map +1 -1
- package/dist/src/check.js +29 -2
- package/dist/src/check.js.map +1 -1
- package/dist/src/ser-des/config/certificateTemplate.d.ts.map +1 -1
- package/dist/src/ser-des/config/certificateTemplate.js +7 -1
- package/dist/src/ser-des/config/certificateTemplate.js.map +1 -1
- package/dist/src/ser-des/config/subject.d.ts.map +1 -1
- package/dist/src/ser-des/config/subject.js +6 -0
- package/dist/src/ser-des/config/subject.js.map +1 -1
- package/dist/src/ser-des/package.d.ts +11 -0
- package/dist/src/ser-des/package.d.ts.map +1 -1
- package/dist/src/ser-des/package.js +22 -1
- package/dist/src/ser-des/package.js.map +1 -1
- package/dist/src/types/CertificateTemplate.d.ts +4 -0
- package/dist/src/types/CertificateTemplate.d.ts.map +1 -1
- package/dist/src/types/Subject.d.ts +4 -0
- package/dist/src/types/Subject.d.ts.map +1 -1
- package/dist-browser/index.mjs +17 -6
- package/dist-cli/primmel.mjs +81 -10
- package/package.json +3 -3
|
@@ -53,4 +53,26 @@ export interface AllowlistResult {
|
|
|
53
53
|
* (audit level — at the default level C51/C52 do not run).
|
|
54
54
|
*/
|
|
55
55
|
export declare function applyAllowlist(issues: CheckIssue[], allowlist: PackageAllowlist, activeRules: Set<string>): AllowlistResult;
|
|
56
|
+
/**
|
|
57
|
+
* The provider pass (composition): a consumer's check re-reports the
|
|
58
|
+
* diagnostics of every package in its `uses` closure, so the KNOWN
|
|
59
|
+
* register travels with the package — each provider's own allowlist
|
|
60
|
+
* entries apply to the issues its elements contribute, exactly as they
|
|
61
|
+
* do when the provider is checked alone. The consumer never re-authors
|
|
62
|
+
* its providers' dispositions.
|
|
63
|
+
*
|
|
64
|
+
* Attribution is by the entry's own glob: in a valid composition an
|
|
65
|
+
* element id has exactly ONE contributor (uses-no-redefine), and the
|
|
66
|
+
* entries name their elements — a provider's match on a consumer's
|
|
67
|
+
* diagnostic is the provider's own element by construction.
|
|
68
|
+
*
|
|
69
|
+
* The STALE discipline applies unchanged: a provider entry matching no
|
|
70
|
+
* issue in the consumer's check fails with C57 naming the provider
|
|
71
|
+
* (the entries are written for diagnostics that always fire when the
|
|
72
|
+
* elements are composed in, so a stale match is real drift).
|
|
73
|
+
*/
|
|
74
|
+
export declare function applyProviderAllowlists(issues: CheckIssue[], providers: ReadonlyArray<{
|
|
75
|
+
id: string;
|
|
76
|
+
dir: string;
|
|
77
|
+
}>, activeRules: Set<string>): CheckIssue[];
|
|
56
78
|
//# sourceMappingURL=check-allowlist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-allowlist.d.ts","sourceRoot":"","sources":["../../src/check-allowlist.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;uEACmE;IACnE,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;6DACyD;IACzD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAUD,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK7D;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;IAC1C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB,CA4EA;AA8DD,qEAAqE;AACrE,eAAO,MAAM,cAAc,aAA0B,CAAC;AAEtD;oEACoE;AACpE,eAAO,MAAM,mBAAmB,aAAmB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,uDAAuD;IACvD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,yDAAyD;IACzD,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,eAAe,CA2EjB"}
|
|
1
|
+
{"version":3,"file":"check-allowlist.d.ts","sourceRoot":"","sources":["../../src/check-allowlist.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;uEACmE;IACnE,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;6DACyD;IACzD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAUD,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK7D;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;IAC1C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB,CA4EA;AA8DD,qEAAqE;AACrE,eAAO,MAAM,cAAc,aAA0B,CAAC;AAEtD;oEACoE;AACpE,eAAO,MAAM,mBAAmB,aAAmB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,uDAAuD;IACvD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,yDAAyD;IACzD,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,eAAe,CA2EjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,UAAU,EAAE,CAwCd"}
|
|
@@ -49,6 +49,7 @@ exports.TEXT_BUDGETED_RULES = exports.BUDGETED_RULES = exports.ALLOWLIST_FILENAM
|
|
|
49
49
|
exports.globMatch = globMatch;
|
|
50
50
|
exports.loadAllowlist = loadAllowlist;
|
|
51
51
|
exports.applyAllowlist = applyAllowlist;
|
|
52
|
+
exports.applyProviderAllowlists = applyProviderAllowlists;
|
|
52
53
|
const fs_1 = require("fs");
|
|
53
54
|
const path_1 = require("path");
|
|
54
55
|
const tokenize_1 = require("./ser-des/tokenize");
|
|
@@ -304,4 +305,61 @@ function applyAllowlist(issues, allowlist, activeRules) {
|
|
|
304
305
|
}
|
|
305
306
|
return { issues: out, known, stale };
|
|
306
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* The provider pass (composition): a consumer's check re-reports the
|
|
310
|
+
* diagnostics of every package in its `uses` closure, so the KNOWN
|
|
311
|
+
* register travels with the package — each provider's own allowlist
|
|
312
|
+
* entries apply to the issues its elements contribute, exactly as they
|
|
313
|
+
* do when the provider is checked alone. The consumer never re-authors
|
|
314
|
+
* its providers' dispositions.
|
|
315
|
+
*
|
|
316
|
+
* Attribution is by the entry's own glob: in a valid composition an
|
|
317
|
+
* element id has exactly ONE contributor (uses-no-redefine), and the
|
|
318
|
+
* entries name their elements — a provider's match on a consumer's
|
|
319
|
+
* diagnostic is the provider's own element by construction.
|
|
320
|
+
*
|
|
321
|
+
* The STALE discipline applies unchanged: a provider entry matching no
|
|
322
|
+
* issue in the consumer's check fails with C57 naming the provider
|
|
323
|
+
* (the entries are written for diagnostics that always fire when the
|
|
324
|
+
* elements are composed in, so a stale match is real drift).
|
|
325
|
+
*/
|
|
326
|
+
function applyProviderAllowlists(issues, providers, activeRules) {
|
|
327
|
+
const out = [...issues];
|
|
328
|
+
for (const provider of providers) {
|
|
329
|
+
const { allowlist, issues: parseIssues } = loadAllowlist(provider.dir);
|
|
330
|
+
out.push(...parseIssues);
|
|
331
|
+
for (const entry of allowlist.entries) {
|
|
332
|
+
if (!activeRules.has(entry.rule)) {
|
|
333
|
+
continue; // dormant at this level, the root pass's rule
|
|
334
|
+
}
|
|
335
|
+
let matched = false;
|
|
336
|
+
for (const issue of out) {
|
|
337
|
+
if (!issue.known &&
|
|
338
|
+
issue.check === entry.rule &&
|
|
339
|
+
globMatch(entry.match, issue.message)) {
|
|
340
|
+
issue.known = true;
|
|
341
|
+
matched = true;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (!matched) {
|
|
345
|
+
// A WARNING here, never an error: a provider's entry set is
|
|
346
|
+
// validated when the PROVIDER is checked (its diagnostics fire
|
|
347
|
+
// there), but a consumer's overlay may legitimately REPLACE the
|
|
348
|
+
// element an entry was written for — the diagnostic then never
|
|
349
|
+
// fires in that closure (e.g. twin-cert's certificate-template
|
|
350
|
+
// overlay over r60-lml's). Visible, never a false gate.
|
|
351
|
+
out.push({
|
|
352
|
+
check: 'C57',
|
|
353
|
+
severity: 'warning',
|
|
354
|
+
// KNOWN: the note prints (visible) but never fails a gate,
|
|
355
|
+
// not even --strict — the entry is validated on the
|
|
356
|
+
// provider's own check, where its diagnostics fire.
|
|
357
|
+
known: true,
|
|
358
|
+
message: `provider "${provider.id}": entry [${entry.rule}] "${entry.match}" matches no issue in this composed check — the entry is stale, or a downstream overlay replaced its element (allowlist-stale)`,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return out;
|
|
364
|
+
}
|
|
307
365
|
//# sourceMappingURL=check-allowlist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-allowlist.js","sourceRoot":"","sources":["../../src/check-allowlist.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,4DAA4D;AAC5D,sEAAsE;AACtE,oEAAoE;AACpE,qEAAqE;AACrE,wEAAwE;AACxE,0CAA0C;AAC1C,EAAE;AACF,uBAAuB;AACvB,sBAAsB;AACtB,cAAc;AACd,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,2CAA2C;AAC3C,kCAAkC;AAClC,MAAM;AACN,EAAE;AACF,yEAAyE;AACzE,oEAAoE;AACpE,gBAAgB;AAChB,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,uEAAuE;AACvE,aAAa;AACb,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,oEAAoE;AACpE,uEAAuE;AACvE,4DAA4D;AAC5D,sEAAsE;AACtE,qEAAqE;AACrE,yEAAyE;AACzE,qEAAqE;AACrE,wDAAwD;AACxD,EAAE;AACF,uEAAuE;AACvE,kEAAkE;AAClE,kDAAkD;AAClD,wEAAwE;;;AAuCxE,8BAKC;AAWD,sCA+EC;AAwFD,wCA+EC;
|
|
1
|
+
{"version":3,"file":"check-allowlist.js","sourceRoot":"","sources":["../../src/check-allowlist.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,4DAA4D;AAC5D,sEAAsE;AACtE,oEAAoE;AACpE,qEAAqE;AACrE,wEAAwE;AACxE,0CAA0C;AAC1C,EAAE;AACF,uBAAuB;AACvB,sBAAsB;AACtB,cAAc;AACd,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,2CAA2C;AAC3C,kCAAkC;AAClC,MAAM;AACN,EAAE;AACF,yEAAyE;AACzE,oEAAoE;AACpE,gBAAgB;AAChB,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,uEAAuE;AACvE,aAAa;AACb,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,oEAAoE;AACpE,uEAAuE;AACvE,4DAA4D;AAC5D,sEAAsE;AACtE,qEAAqE;AACrE,yEAAyE;AACzE,qEAAqE;AACrE,wDAAwD;AACxD,EAAE;AACF,uEAAuE;AACvE,kEAAkE;AAClE,kDAAkD;AAClD,wEAAwE;;;AAuCxE,8BAKC;AAWD,sCA+EC;AAwFD,wCA+EC;AAoBD,0DA4CC;AA3WD,2BAA8C;AAC9C,+BAA4B;AAC5B,iDAA0E;AAC1E,+CAA0C;AAG1C,yEAAyE;AAC5D,QAAA,kBAAkB,GAAG,wBAAwB,CAAC;AAqB3D,MAAM,KAAK,GAAqB;IAC9B,cAAc,EAAE,IAAI;IACpB,oBAAoB,EAAE,IAAI;IAC1B,kBAAkB,EAAE,IAAI;IACxB,wBAAwB,EAAE,IAAI;IAC9B,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,2EAA2E;AAC3E,SAAgB,SAAS,CAAC,IAAY,EAAE,IAAY;IAClD,MAAM,EAAE,GAAG,IAAI,MAAM,CACnB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAChE,CAAC;IACF,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,GAAW;IAIvC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,0BAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,MAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,0BAAkB,KAAM,CAAW,CAAC,OAAO,wBAAwB;SAChF,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,SAAS,GAAqB;QAClC,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,IAAI;QAC1B,kBAAkB,EAAE,IAAI;QACxB,wBAAwB,EAAE,IAAI;QAC9B,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,iBAAiB,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,IAAA,wBAAa,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,GAAG,0BAAkB,KAAK,GAAG,KAAK,GAAG,uDAAuD;iBACtG,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;oBAC9B,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,kBAAkB,GAAG,CAAC,CAAC;gBACnC,CAAC;gBACD,gEAAgE;gBAChE,oDAAoD;gBACpD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C,MAAM,MAAM,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;wBAC9B,SAAS,CAAC,oBAAoB,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,wBAAwB,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;oBACrE,CAAC;oBACD,CAAC,EAAE,CAAC;gBACN,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAA,sBAAW,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,GAAG,0BAAkB,wBAAwB,GAAG,6FAA6F;aACvJ,CAAC,CAAC;YACH,gEAAgE;YAChE,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,KAAK,GAAmB;QAC5B,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;KACb,CAAC;IACF,MAAM,CAAC,GAAG,IAAA,kBAAQ,EAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,IAAA,wBAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAS,aAAa,CAAC,KAAqB;IAC1C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,0BAAkB,UAAU,KAAK,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,qEAAqE;SACpL,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,0BAAkB,qBAAqB,KAAK,CAAC,IAAI,iDAAiD;SAC/G,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,0BAAkB,UAAU,KAAK,sFAAsF;SACpI,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,0BAAkB,UAAU,KAAK,mGAAmG;SACjJ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qEAAqE;AACxD,QAAA,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtD;oEACoE;AACvD,QAAA,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAWpD;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAC5B,MAAoB,EACpB,SAA2B,EAC3B,WAAwB;IAExB,MAAM,GAAG,GAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS,CAAC,gDAAgD;QAC5D,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,GAAG,0BAAkB,kBAAkB,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,6EAA6E;aACzJ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IACE,SAAS,CAAC,cAAc,KAAK,IAAI;QACjC,CAAC,GAAG,sBAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACjD,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,CAAC,sBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CACzE,CAAC,MAAM,CAAC;QACT,IAAI,KAAK,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,GAAG,0BAAkB,KAAK,KAAK,mDAAmD,SAAS,CAAC,cAAc,yFAAyF;aAC7M,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,0BAAkB,qBAAqB,SAAS,CAAC,cAAc,qBAAqB,KAAK,8FAA8F;aACpM,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,uEAAuE;IACvE,+DAA+D;IAC/D,IACE,SAAS,CAAC,kBAAkB,KAAK,IAAI;QACrC,CAAC,GAAG,2BAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACtD,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,CACF,2BAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,CAAC,KAAK;YACR,CAAC,CAAC,QAAQ,KAAK,SAAS,CAC3B,CAAC,MAAM,CAAC;QACT,IAAI,KAAK,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,GAAG,0BAAkB,KAAK,KAAK,6EAA6E,SAAS,CAAC,kBAAkB,sHAAsH;aACxQ,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,0BAAkB,0BAA0B,SAAS,CAAC,kBAAkB,qBAAqB,KAAK,+GAA+G;aAC9N,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,uBAAuB,CACrC,MAAoB,EACpB,SAAqD,EACrD,WAAwB;IAExB,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACxB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvE,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,SAAS,CAAC,8CAA8C;YAC1D,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,IACE,CAAC,KAAK,CAAC,KAAK;oBACZ,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI;oBAC1B,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrC,CAAC;oBACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;oBACnB,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,4DAA4D;gBAC5D,+DAA+D;gBAC/D,gEAAgE;gBAChE,+DAA+D;gBAC/D,+DAA+D;gBAC/D,wDAAwD;gBACxD,GAAG,CAAC,IAAI,CAAC;oBACP,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,SAAS;oBACnB,2DAA2D;oBAC3D,oDAAoD;oBACpD,oDAAoD;oBACpD,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,aAAa,QAAQ,CAAC,EAAE,aAAa,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,gIAAgI;iBAC1M,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/src/check.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/check.ts"],"names":[],"mappings":"AAmYA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/check.ts"],"names":[],"mappings":"AAmYA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AA+D7C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB;yEACqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA+CD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,YAAiB,GACzB,UAAU,EAAE,CAmmNd;AAoBD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAwFjE;AA4BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAOH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CAoCvE;AAUD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CAmFnE;AAWD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CAiIlE;AAiFD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CA2GvE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CAwQnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CA+ExE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CA0EjE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CA6FhE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CAoBhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,CA8CnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,GACjB,UAAU,EAAE,CAuNd"}
|
package/dist/src/check.js
CHANGED
|
@@ -473,11 +473,13 @@ function checkPackage(dir, options = {}) {
|
|
|
473
473
|
'namespace-pin-violation': 'C119',
|
|
474
474
|
};
|
|
475
475
|
let standard;
|
|
476
|
+
let compositionProviders = [];
|
|
476
477
|
try {
|
|
477
478
|
const loaded = (0, package_1.loadPackageWithIssues)(dir, {
|
|
478
479
|
resolvePackage: options.resolvePackage,
|
|
479
480
|
});
|
|
480
481
|
standard = loaded.standard;
|
|
482
|
+
compositionProviders = loaded.composition?.providers ?? [];
|
|
481
483
|
for (const i of loaded.issues) {
|
|
482
484
|
// The deprecation report (phase 2): the parse-time issue maps to
|
|
483
485
|
// its rule.
|
|
@@ -2339,6 +2341,11 @@ function checkPackage(dir, options = {}) {
|
|
|
2339
2341
|
const instrumentIds = new Set((standard.instruments ?? []).map(i => i.id));
|
|
2340
2342
|
const instanceIds = new Set((standard.instances ?? []).map(i => i.id));
|
|
2341
2343
|
const dataclassIds = new Set((standard.dataclasses ?? []).map(c => c.id));
|
|
2344
|
+
// The BARE-PREFIX link spelling: a class's extends may name a class
|
|
2345
|
+
// without its plane segment (Organization for Organization#data —
|
|
2346
|
+
// the language's own link spelling; the pre-1.21.0 checker and the
|
|
2347
|
+
// platform linker resolve it). C156 resolves both spellings.
|
|
2348
|
+
const dataclassBareIds = new Set((standard.dataclasses ?? []).map(c => c.id.split('#')[0]));
|
|
2342
2349
|
const attrScopes = new Map((standard.attributeDefinitions ?? []).map(a => [a.id, a.scope]));
|
|
2343
2350
|
// Classification-dimension scopes, by every spelling a classification
|
|
2344
2351
|
// map may use: the instrument dimension id, the is_dimension attribute
|
|
@@ -2477,6 +2484,7 @@ function checkPackage(dir, options = {}) {
|
|
|
2477
2484
|
for (const c of standard.dataclasses ?? []) {
|
|
2478
2485
|
if (c.extends &&
|
|
2479
2486
|
!dataclassIds.has(c.extends) &&
|
|
2487
|
+
!dataclassBareIds.has(c.extends) &&
|
|
2480
2488
|
!instanceIds.has(c.extends)) {
|
|
2481
2489
|
warn('C156', `class ${c.id}: extends "${c.extends}" is not a declared class or instance (class-extends-resolves)`);
|
|
2482
2490
|
}
|
|
@@ -3361,6 +3369,13 @@ function checkPackage(dir, options = {}) {
|
|
|
3361
3369
|
}
|
|
3362
3370
|
const unitToKind = new Map(); // unit id|symbol → kind id
|
|
3363
3371
|
const unitHome = new Map(); // unit id|symbol → register id
|
|
3372
|
+
// The full entry behind each key: a redeclaration that is
|
|
3373
|
+
// IDENTICAL (same kind, factor, symbol) is idempotent under
|
|
3374
|
+
// composition — the sibling IEC packages each declare kV/degC for
|
|
3375
|
+
// standalone self-containment, and the merged register set carries
|
|
3376
|
+
// one shared entry, not a conflict. Only a CONFLICTING entry (the
|
|
3377
|
+
// same key, different meaning) is a redefinition.
|
|
3378
|
+
const unitEntry = new Map(); // key → kind|factor|symbol
|
|
3364
3379
|
const registersExist = (standard.quantityRegisters ?? []).length > 0;
|
|
3365
3380
|
for (const reg of standard.quantityRegisters ?? []) {
|
|
3366
3381
|
for (const u of reg.units) {
|
|
@@ -3370,13 +3385,17 @@ function checkPackage(dir, options = {}) {
|
|
|
3370
3385
|
}
|
|
3371
3386
|
// C33 — no cross-register redefinition: a rec EXTENDS the register
|
|
3372
3387
|
// with domain units; it never redefines an existing entry.
|
|
3388
|
+
const entry = `${u.kind}|${u.factorToSI}|${u.offsetToSI ?? ''}|${u.symbol}`;
|
|
3373
3389
|
for (const key of new Set([u.id, u.symbol].filter(s => s))) {
|
|
3374
3390
|
const prior = unitHome.get(key);
|
|
3375
3391
|
if (prior !== undefined) {
|
|
3376
|
-
|
|
3392
|
+
if (unitEntry.get(key) !== entry) {
|
|
3393
|
+
err('C33', `quantity_register ${reg.id}: unit "${u.id}" ("${key}") redefines a unit already declared by register "${prior}" — a package extends the register, it never redefines entries (quantity-coherence)`);
|
|
3394
|
+
}
|
|
3377
3395
|
}
|
|
3378
3396
|
else {
|
|
3379
3397
|
unitHome.set(key, reg.id);
|
|
3398
|
+
unitEntry.set(key, entry);
|
|
3380
3399
|
unitToKind.set(key, u.kind);
|
|
3381
3400
|
}
|
|
3382
3401
|
}
|
|
@@ -5437,7 +5456,15 @@ function checkPackage(dir, options = {}) {
|
|
|
5437
5456
|
const level = strictness === 'audit' ? 'audit' : 'normal';
|
|
5438
5457
|
const { allowlist, issues: allowlistParseIssues } = (0, check_allowlist_1.loadAllowlist)(dir);
|
|
5439
5458
|
issues.push(...allowlistParseIssues);
|
|
5440
|
-
|
|
5459
|
+
let finalized = (0, check_allowlist_1.applyAllowlist)(issues, allowlist, (0, check_rules_1.activeRuleIds)(level)).issues;
|
|
5460
|
+
// The provider pass (composition): the KNOWN register travels with
|
|
5461
|
+
// the package — every provider in the `uses` closure contributes its
|
|
5462
|
+
// own allowlist to the diagnostics its elements carry into this
|
|
5463
|
+
// check. The consumer never re-authors its providers' dispositions
|
|
5464
|
+
// (the INHERITED-entry pattern retires here).
|
|
5465
|
+
if (compositionProviders.length > 0) {
|
|
5466
|
+
finalized = (0, check_allowlist_1.applyProviderAllowlists)(finalized, compositionProviders, (0, check_rules_1.activeRuleIds)(level));
|
|
5467
|
+
}
|
|
5441
5468
|
if (options.strict) {
|
|
5442
5469
|
for (const i of finalized) {
|
|
5443
5470
|
if (i.severity !== 'warning' || i.known) {
|