@angelmsger/fx 0.14.0 → 0.16.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 +25 -0
- package/README.md +4 -0
- package/defaults/tools.yaml +17 -0
- package/dist/adapters/channel/wecom-channel-cli/provider.js +27 -0
- package/dist/adapters/channel/wecom-channel-cli/provider.js.map +1 -0
- package/dist/adapters/git/system-git.js +24 -4
- package/dist/adapters/git/system-git.js.map +1 -1
- package/dist/adapters/im/wecom-chat-cli/provider.js +52 -0
- package/dist/adapters/im/wecom-chat-cli/provider.js.map +1 -0
- package/dist/adapters/manifest-source/git-repo.js +8 -5
- package/dist/adapters/manifest-source/git-repo.js.map +1 -1
- package/dist/application/manifest/lint.js +6 -1
- package/dist/application/manifest/lint.js.map +1 -1
- package/dist/application/member/list.js +4 -23
- package/dist/application/member/list.js.map +1 -1
- package/dist/application/member/show.js +9 -2
- package/dist/application/member/show.js.map +1 -1
- package/dist/application/skill/tool-skills.js +1 -1
- package/dist/application/skill/tool-skills.js.map +1 -1
- package/dist/application/sync/index.js +29 -15
- package/dist/application/sync/index.js.map +1 -1
- package/dist/application/workspace/health.js +3 -0
- package/dist/application/workspace/health.js.map +1 -1
- package/dist/cli/commands/member/list.js +10 -5
- package/dist/cli/commands/member/list.js.map +1 -1
- package/dist/cli/commands/member/scope-flags.js +10 -0
- package/dist/cli/commands/member/scope-flags.js.map +1 -0
- package/dist/cli/commands/member/show.js +11 -3
- package/dist/cli/commands/member/show.js.map +1 -1
- package/dist/cli/render/exceptional.js +1 -0
- package/dist/cli/render/exceptional.js.map +1 -1
- package/dist/cli/render/tone.js +1 -0
- package/dist/cli/render/tone.js.map +1 -1
- package/dist/composition/registry.js +4 -0
- package/dist/composition/registry.js.map +1 -1
- package/dist/domain/capability.js +2 -0
- package/dist/domain/capability.js.map +1 -1
- package/dist/domain/fuzzy.js +13 -4
- package/dist/domain/fuzzy.js.map +1 -1
- package/dist/domain/manifest/members.schema.js +37 -0
- package/dist/domain/manifest/members.schema.js.map +1 -1
- package/dist/domain/manifest/rules/member-classifications.js +112 -0
- package/dist/domain/manifest/rules/member-classifications.js.map +1 -0
- package/dist/domain/manifest/rules/members.js +2 -1
- package/dist/domain/manifest/rules/members.js.map +1 -1
- package/dist/domain/manifest/tools.schema.js +2 -2
- package/dist/domain/manifest/tools.schema.js.map +1 -1
- package/dist/domain/manifest/versioning.js +1 -1
- package/dist/domain/manifest/versioning.js.map +1 -1
- package/dist/domain/members/account-collisions.js +37 -0
- package/dist/domain/members/account-collisions.js.map +1 -0
- package/dist/domain/members/classify.js +158 -0
- package/dist/domain/members/classify.js.map +1 -0
- package/dist/domain/members/owners.js +2 -0
- package/dist/domain/members/owners.js.map +1 -1
- package/dist/domain/members/resolve.js +27 -13
- package/dist/domain/members/resolve.js.map +1 -1
- package/dist/domain/semver.js +3 -28
- package/dist/domain/semver.js.map +1 -1
- package/dist/domain/toolchain/resolve.js +1 -1
- package/dist/domain/toolchain/resolve.js.map +1 -1
- package/dist/domain/workspace/state.js +11 -1
- package/dist/domain/workspace/state.js.map +1 -1
- package/dist/ports/git.js +2 -1
- package/dist/ports/git.js.map +1 -1
- package/package.json +1 -1
- package/skills/fx-workspace/SKILL.md +1 -1
- package/skills/fx-workspace/references/commands.md +4 -1
- package/skills/fx-workspace/references/workspace-tasks.md +3 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Schema 2 adds stable business selectors and dated, evidence-backed edges.
|
|
2
|
+
// Check references by scope so a scenario in another area cannot satisfy an assignment.
|
|
3
|
+
import { atLeast } from '../../semver.js';
|
|
4
|
+
export function classificationRules(doc) {
|
|
5
|
+
const problems = [];
|
|
6
|
+
const add = (path, message) => {
|
|
7
|
+
problems.push({ path, message });
|
|
8
|
+
};
|
|
9
|
+
const register = (set, id, path) => {
|
|
10
|
+
if (set.has(id))
|
|
11
|
+
add(path, 'duplicate identifier');
|
|
12
|
+
set.add(id);
|
|
13
|
+
};
|
|
14
|
+
const areas = doc.areas ?? [];
|
|
15
|
+
if (doc.schema_version === 1) {
|
|
16
|
+
checkLegacy(doc, add);
|
|
17
|
+
return problems;
|
|
18
|
+
}
|
|
19
|
+
if (!atLeast(doc.min_cli ?? '', '0.16.0'))
|
|
20
|
+
add('min_cli', 'members schema 2 requires a floor of at least 0.16.0');
|
|
21
|
+
const teams = new Set();
|
|
22
|
+
const functions = new Set();
|
|
23
|
+
doc.teams?.forEach((entry, i) => register(teams, entry.id, `teams[${i}].id`));
|
|
24
|
+
doc.functions?.forEach((entry, i) => register(functions, entry.id, `functions[${i}].id`));
|
|
25
|
+
const people = new Set(doc.people.map((p) => p.id));
|
|
26
|
+
doc.people.forEach((p, i) => {
|
|
27
|
+
if (p.id === 'all')
|
|
28
|
+
add(`people[${i}].id`, 'reserved collective id');
|
|
29
|
+
});
|
|
30
|
+
const areaSelectors = new Set();
|
|
31
|
+
const scenariosByArea = new Map();
|
|
32
|
+
const checkScope = (scope, path, ids) => {
|
|
33
|
+
if (!scope.id)
|
|
34
|
+
add(`${path}.id`, 'required in members schema 2');
|
|
35
|
+
else
|
|
36
|
+
register(ids, scope.id, `${path}.id`);
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
scope.responsible_teams?.forEach((team, i) => {
|
|
39
|
+
const at = `${path}.responsible_teams[${i}]`;
|
|
40
|
+
if (!teams.has(team))
|
|
41
|
+
add(at, 'unknown team id');
|
|
42
|
+
register(seen, team, at);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
areas.forEach((area, i) => {
|
|
46
|
+
const at = `areas[${i}]`;
|
|
47
|
+
checkScope(area, at, areaSelectors);
|
|
48
|
+
if (area.group !== area.id)
|
|
49
|
+
register(areaSelectors, area.group, `${at}.group`);
|
|
50
|
+
const scenarios = new Set();
|
|
51
|
+
if (area.id)
|
|
52
|
+
scenariosByArea.set(area.id, scenarios);
|
|
53
|
+
area.scenarios?.forEach((s, j) => checkScope(s, `${at}.scenarios[${j}]`, scenarios));
|
|
54
|
+
});
|
|
55
|
+
checkRelationships(doc, { people, teams, functions, scenariosByArea }, add);
|
|
56
|
+
return problems;
|
|
57
|
+
}
|
|
58
|
+
function checkLegacy(doc, add) {
|
|
59
|
+
for (const key of ['teams', 'functions', 'memberships', 'assignments'])
|
|
60
|
+
if (doc[key] !== undefined)
|
|
61
|
+
add(key, 'requires members schema 2');
|
|
62
|
+
doc.areas?.forEach((area, i) => {
|
|
63
|
+
for (const [path, scope] of [
|
|
64
|
+
[`areas[${i}]`, area],
|
|
65
|
+
...(area.scenarios ?? []).map((s, j) => [`areas[${i}].scenarios[${j}]`, s]),
|
|
66
|
+
])
|
|
67
|
+
for (const key of ['id', 'responsible_teams'])
|
|
68
|
+
if (scope[key] !== undefined)
|
|
69
|
+
add(`${path}.${key}`, 'requires members schema 2');
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function checkRelationships(doc, vocabulary, add) {
|
|
73
|
+
const { people, teams, functions, scenariosByArea } = vocabulary;
|
|
74
|
+
for (const kind of ['memberships', 'assignments']) {
|
|
75
|
+
const seen = new Set();
|
|
76
|
+
doc[kind]?.forEach((r, i) => {
|
|
77
|
+
const at = `${kind}[${i}]`;
|
|
78
|
+
if (!people.has(r.person) && !(kind === 'assignments' && r.person === 'all'))
|
|
79
|
+
add(`${at}.person`, 'unknown person id');
|
|
80
|
+
if (r.person === 'all' && !r.team)
|
|
81
|
+
add(`${at}.team`, 'a collective assignment needs an explicit team');
|
|
82
|
+
if (!r.team && !r.function)
|
|
83
|
+
add(at, 'declare a team or function');
|
|
84
|
+
if (r.team && !teams.has(r.team))
|
|
85
|
+
add(`${at}.team`, 'unknown team id');
|
|
86
|
+
if (r.function && !functions.has(r.function))
|
|
87
|
+
add(`${at}.function`, 'unknown function id');
|
|
88
|
+
if (r.status === 'confirmed' && !r.verified_at)
|
|
89
|
+
add(`${at}.verified_at`, 'required for a confirmed relationship');
|
|
90
|
+
if (r.valid_from && r.valid_until && r.valid_from >= r.valid_until)
|
|
91
|
+
add(`${at}.valid_until`, 'must follow valid_from');
|
|
92
|
+
const scope = kind === 'assignments' ? doc.assignments?.[i] : undefined;
|
|
93
|
+
if (scope && !scenariosByArea.has(scope.area))
|
|
94
|
+
add(`${at}.area`, 'unknown area id');
|
|
95
|
+
if (scope?.scenario && !scenariosByArea.get(scope.area)?.has(scope.scenario))
|
|
96
|
+
add(`${at}.scenario`, 'unknown scenario in this area');
|
|
97
|
+
const key = JSON.stringify([
|
|
98
|
+
r.person,
|
|
99
|
+
r.team,
|
|
100
|
+
r.function,
|
|
101
|
+
scope?.area,
|
|
102
|
+
scope?.scenario,
|
|
103
|
+
r.valid_from,
|
|
104
|
+
r.valid_until,
|
|
105
|
+
]);
|
|
106
|
+
if (seen.has(key))
|
|
107
|
+
add(at, 'duplicate relationship for the same validity interval');
|
|
108
|
+
seen.add(key);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=member-classifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-classifications.js","sourceRoot":"","sources":["../../../../src/domain/manifest/rules/member-classifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// reference to a person resolves. The reserved id "all" means the whole
|
|
3
3
|
// team and is never listed under people.
|
|
4
4
|
import { isSemver } from '../../semver.js';
|
|
5
|
+
import { classificationRules } from './member-classifications.js';
|
|
5
6
|
const ALL = 'all';
|
|
6
7
|
export function membersRules(doc) {
|
|
7
|
-
const problems =
|
|
8
|
+
const problems = classificationRules(doc);
|
|
8
9
|
if (doc.min_cli !== undefined && !isSemver(doc.min_cli)) {
|
|
9
10
|
problems.push({ path: 'min_cli', message: 'must be a semantic version' });
|
|
10
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../src/domain/manifest/rules/members.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wEAAwE;AACxE,yCAAyC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAc,
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../src/domain/manifest/rules/members.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wEAAwE;AACxE,yCAAyC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAc,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS;YACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,GAAG,EAAE,CAAC,CAAC;;YAChF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAsB,EAAQ,EAAE;QAC3D,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IACF,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACpC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC;YACzC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -20,7 +20,7 @@ export const installMethod = z
|
|
|
20
20
|
.describe('one way to install a tool');
|
|
21
21
|
export const skillCommand = z
|
|
22
22
|
.strictObject({
|
|
23
|
-
command: commandVector.describe('arguments that install the companion Skill; empty
|
|
23
|
+
command: commandVector.describe('arguments that install the companion Skill; empty disables automatic Skill installation'),
|
|
24
24
|
agent_flag: z
|
|
25
25
|
.string()
|
|
26
26
|
.optional()
|
|
@@ -33,7 +33,7 @@ export const skillCommand = z
|
|
|
33
33
|
.describe('how a tool installs its own companion Skill');
|
|
34
34
|
export const authCommand = z
|
|
35
35
|
.strictObject({
|
|
36
|
-
command: commandVector.describe('arguments that report credential status; empty
|
|
36
|
+
command: commandVector.describe('arguments that report credential status; empty disables the standalone credential check'),
|
|
37
37
|
json: jsonExpectation
|
|
38
38
|
.optional()
|
|
39
39
|
.describe('a JSON result the status must also report; exit zero alone is otherwise enough'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.schema.js","sourceRoot":"","sources":["../../../src/domain/manifest/tools.schema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AAEzE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,YAAY,CAAC;IACZ,GAAG,EAAE,CAAC;SACH,IAAI,CAAC,UAAU,CAAC;SAChB,QAAQ,CAAC,wEAAwE,CAAC;IACrF,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4FAA4F,CAC7F;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC;KACD,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,YAAY,CAAC;IACZ,OAAO,EAAE,aAAa,CAAC,QAAQ,CAC7B,
|
|
1
|
+
{"version":3,"file":"tools.schema.js","sourceRoot":"","sources":["../../../src/domain/manifest/tools.schema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AAEzE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,YAAY,CAAC;IACZ,GAAG,EAAE,CAAC;SACH,IAAI,CAAC,UAAU,CAAC;SAChB,QAAQ,CAAC,wEAAwE,CAAC;IACrF,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4FAA4F,CAC7F;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC;KACD,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,YAAY,CAAC;IACZ,OAAO,EAAE,aAAa,CAAC,QAAQ,CAC7B,yFAAyF,CAC1F;IACD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,iFAAiF,CAAC;IAC9F,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC;KACD,QAAQ,CAAC,6CAA6C,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,YAAY,CAAC;IACZ,OAAO,EAAE,aAAa,CAAC,QAAQ,CAC7B,yFAAyF,CAC1F;IACD,IAAI,EAAE,eAAe;SAClB,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;IAC7F,KAAK,EAAE,aAAa;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,0GAA0G,CAC3G;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACvE,CAAC;KACD,QAAQ,CAAC,iDAAiD,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,KAAK,CAAC;IACL,CAAC,CAAC,YAAY,CAAC;QACb,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QAC/E,IAAI,EAAE,eAAe;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,6EAA6E,CAAC;KAC3F,CAAC;IACF,CAAC,CAAC,YAAY,CAAC;QACb,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,2FAA2F,CAC5F;KACJ,CAAC;IACF,CAAC,CAAC,YAAY,CAAC;QACb,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACjF,CAAC;CACH,CAAC;KACD,QAAQ,CAAC,sDAAsD,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;KACvB,YAAY,CAAC;IACZ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACtF,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC/B,QAAQ,CACP,oFAAoF,CACrF;IACH,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;SACjC,QAAQ,EAAE;SACV,QAAQ,CACP,wGAAwG,CACzG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACvE,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACtF,OAAO,EAAE,CAAC;SACP,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;SACpF,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACvF,CAAC;KACD,QAAQ,CAAC,yDAAyD,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,YAAY,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACjF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;IAChF,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;IACrF,YAAY,EAAE,aAAa;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,oFAAoF,CACrF;IACH,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,0FAA0F,CAC3F;IACH,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,aAAa,CAAC;SACpB,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACrF,CAAC;KACD,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,YAAY,CAAC;IACZ,cAAc,EAAE,aAAa;IAC7B,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,CAAC;SACR,YAAY,CAAC;QACZ,YAAY,EAAE,aAAa;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;QAC3D,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uEAAuE,CAAC;QACpF,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,aAAa,CAAC;aACpB,QAAQ,EAAE;aACV,QAAQ,CAAC,+CAA+C,CAAC;QAC5D,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;QAC5B,eAAe,EAAE,CAAC;aACf,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wEAAwE,CAAC;KACtF,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACjF,CAAC;KACD,QAAQ,CACP,mGAAmG,CACpG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../../src/domain/manifest/versioning.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,qFAAqF;AACrF,mFAAmF;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI5D,MAAM,CAAC,MAAM,SAAS,GAAsD;IAC1E,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC,CAAC;IACV,OAAO,EAAE,CAAC,CAAC,CAAC;IACZ,OAAO,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../../src/domain/manifest/versioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function accountCollisions(doc) {
|
|
2
|
+
const systems = new Map();
|
|
3
|
+
const findings = [];
|
|
4
|
+
doc.people.forEach((p, person) => {
|
|
5
|
+
for (const [system, account] of Object.entries(p.accounts ?? {})) {
|
|
6
|
+
const buckets = systems.get(system) ?? new Map();
|
|
7
|
+
systems.set(system, buckets);
|
|
8
|
+
const { username, id } = typeof account === 'string' ? { username: account, id: undefined } : account;
|
|
9
|
+
const shared = new Set();
|
|
10
|
+
for (const [value, opaque] of [
|
|
11
|
+
[username, false],
|
|
12
|
+
[id, true],
|
|
13
|
+
]) {
|
|
14
|
+
if (value === undefined)
|
|
15
|
+
continue;
|
|
16
|
+
const key = value.toLowerCase();
|
|
17
|
+
const previous = buckets.get(key) ?? [];
|
|
18
|
+
for (const h of previous) {
|
|
19
|
+
if (h.person !== person &&
|
|
20
|
+
(!opaque || !h.opaque || h.value === value || doc.schema_version === 1))
|
|
21
|
+
shared.add(h.person);
|
|
22
|
+
}
|
|
23
|
+
previous.push({ value, opaque, person });
|
|
24
|
+
buckets.set(key, previous);
|
|
25
|
+
}
|
|
26
|
+
for (const first of shared)
|
|
27
|
+
findings.push({
|
|
28
|
+
kind: 'members',
|
|
29
|
+
code: 'AMBIGUOUS_ACCOUNT',
|
|
30
|
+
path: `people[${person}].accounts`,
|
|
31
|
+
message: `A handle in the same system also matches people[${first}].`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return findings;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=account-collisions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-collisions.js","sourceRoot":"","sources":["../../../src/domain/members/account-collisions.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;IACzD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GACpB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;YACjC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI;gBAC5B,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACjB,CAAC,EAAE,EAAE,IAAI,CAAC;aACF,EAAE,CAAC;gBACX,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IACE,CAAC,CAAC,MAAM,KAAK,MAAM;wBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,CAAC;wBAEvE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,UAAU,MAAM,YAAY;oBAClC,OAAO,EAAE,mDAAmD,KAAK,IAAI;iBACtE,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// Resolve business selectors once per query. Each result carries the original
|
|
2
|
+
// evidence and interval from the single edge that satisfied all selectors.
|
|
3
|
+
import { DevkitError } from '../errors.js';
|
|
4
|
+
import { nearest, suggestionHint } from '../fuzzy.js';
|
|
5
|
+
function checkSelector(kind, value, choices) {
|
|
6
|
+
if (value === undefined || choices.includes(value))
|
|
7
|
+
return;
|
|
8
|
+
throw new DevkitError('not_found', `${kind.toUpperCase()}_NOT_FOUND`, `Unknown ${kind} "${value}"`, {
|
|
9
|
+
hint: suggestionHint(nearest(value, choices), `Available ${kind} selectors: ${choices.join(', ') || '(none configured)'}.`),
|
|
10
|
+
nextSteps: ['fx member list --help'],
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function scopeOf(doc, input, today) {
|
|
14
|
+
const areas = doc.areas ?? [];
|
|
15
|
+
checkSelector('area', input.area, areas.flatMap((a) => (a.id ? [a.id, a.group] : [a.group])));
|
|
16
|
+
const area = areas.find((a) => input.area !== undefined && (a.id === input.area || a.group === input.area));
|
|
17
|
+
if (input.scenario && !area)
|
|
18
|
+
throw new DevkitError('usage', 'SCENARIO_REQUIRES_AREA', '--scenario requires --area', {
|
|
19
|
+
nextSteps: ['fx member list --help'],
|
|
20
|
+
});
|
|
21
|
+
const scenarios = area?.scenarios ?? [];
|
|
22
|
+
checkSelector('scenario', input.scenario, scenarios.map((s) => s.id ?? s.name));
|
|
23
|
+
const scenario = scenarios.find((s) => (s.id ?? s.name) === input.scenario);
|
|
24
|
+
checkSelector('team', input.team, (doc.teams ?? []).map((t) => t.id));
|
|
25
|
+
checkSelector('function', input.function, (doc.functions ?? []).map((f) => f.id));
|
|
26
|
+
const asOf = input.asOf ?? today;
|
|
27
|
+
const date = new Date(asOf + 'T00:00:00Z');
|
|
28
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(asOf) ||
|
|
29
|
+
Number.isNaN(date.getTime()) ||
|
|
30
|
+
!date.toISOString().startsWith(asOf + 'T'))
|
|
31
|
+
throw new DevkitError('usage', 'INVALID_AS_OF', 'Expected a calendar date in YYYY-MM-DD form', {
|
|
32
|
+
nextSteps: ['fx member show --help'],
|
|
33
|
+
});
|
|
34
|
+
return { area, scenario, asOf };
|
|
35
|
+
}
|
|
36
|
+
function responsibilities(areas) {
|
|
37
|
+
return areas.flatMap((area) => {
|
|
38
|
+
const areaId = area.id ?? area.group;
|
|
39
|
+
const records = (person, role, scope) => person === undefined ? [] : [{ person, role, area: areaId, scenario: scope }];
|
|
40
|
+
return [
|
|
41
|
+
...records(area.lead, 'lead', null),
|
|
42
|
+
...(area.scenarios ?? []).flatMap((s) => {
|
|
43
|
+
const id = s.id ?? s.name;
|
|
44
|
+
return [
|
|
45
|
+
...records(s.dev_lead, 'dev_lead', id),
|
|
46
|
+
...Object.entries(s.roles ?? {}).flatMap(([role, people]) => people.flatMap((p) => records(p, role, id))),
|
|
47
|
+
];
|
|
48
|
+
}),
|
|
49
|
+
];
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function prepareView(doc, input, today) {
|
|
53
|
+
const { area, scenario, asOf } = scopeOf(doc, input, today);
|
|
54
|
+
const teamNames = new Map(doc.teams?.map((t) => [t.id, t.name]));
|
|
55
|
+
const functionNames = new Map(doc.functions?.map((f) => [f.id, f.name]));
|
|
56
|
+
const context = {
|
|
57
|
+
area: area?.id ?? area?.group ?? null,
|
|
58
|
+
scenario: scenario?.id ?? scenario?.name ?? null,
|
|
59
|
+
as_of: asOf,
|
|
60
|
+
};
|
|
61
|
+
const applies = (r) => (!r.valid_from || r.valid_from <= asOf) && (!r.valid_until || asOf < r.valid_until);
|
|
62
|
+
const label = (r) => ({
|
|
63
|
+
...r,
|
|
64
|
+
team_name: teamNames.get(r.team ?? '') ?? null,
|
|
65
|
+
function_name: functionNames.get(r.function ?? '') ?? null,
|
|
66
|
+
});
|
|
67
|
+
const memberships = (doc.memberships ?? [])
|
|
68
|
+
.filter(applies)
|
|
69
|
+
.map((r) => ({ kind: 'membership', ...label(r) }));
|
|
70
|
+
const inScope = (r) => (!area || r.area === area.id) && (!scenario || !r.scenario || r.scenario === scenario.id);
|
|
71
|
+
const activeAssignments = (doc.assignments ?? []).filter(applies);
|
|
72
|
+
const assignments = activeAssignments
|
|
73
|
+
.filter(inScope)
|
|
74
|
+
.map((r) => ({ kind: 'assignment', ...label(r) }));
|
|
75
|
+
const allRoles = responsibilities(doc.areas ?? []);
|
|
76
|
+
const roles = allRoles.filter((r) => (!area || r.area === context.area) &&
|
|
77
|
+
(!scenario || r.scenario === null || r.scenario === context.scenario));
|
|
78
|
+
const collective = {
|
|
79
|
+
roles: roles.filter((r) => r.person === 'all'),
|
|
80
|
+
assignments: assignments.filter((r) => r.person === 'all'),
|
|
81
|
+
};
|
|
82
|
+
const responsibleTeams = (scope, level) => (scope?.responsible_teams ?? []).map((team) => ({
|
|
83
|
+
team,
|
|
84
|
+
name: teamNames.get(team),
|
|
85
|
+
level,
|
|
86
|
+
scope: scope?.id,
|
|
87
|
+
}));
|
|
88
|
+
const owners = [...responsibleTeams(area, 'area'), ...responsibleTeams(scenario, 'scenario')];
|
|
89
|
+
return {
|
|
90
|
+
context,
|
|
91
|
+
memberships,
|
|
92
|
+
assignments,
|
|
93
|
+
activeAssignments,
|
|
94
|
+
roles,
|
|
95
|
+
allRoles,
|
|
96
|
+
owners,
|
|
97
|
+
collective,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function classificationState(assignments, configured, ambiguous) {
|
|
101
|
+
if (ambiguous)
|
|
102
|
+
return 'identity_ambiguous';
|
|
103
|
+
const affiliations = assignments.filter((r) => r.team !== undefined);
|
|
104
|
+
if (affiliations.some((r) => r.status === 'confirmed'))
|
|
105
|
+
return 'confirmed';
|
|
106
|
+
const candidates = new Set(affiliations.map((r) => JSON.stringify([r.team, r.function, r.area, r.scenario])));
|
|
107
|
+
if (candidates.size > 1)
|
|
108
|
+
return 'multiple_candidates';
|
|
109
|
+
if (candidates.size === 1)
|
|
110
|
+
return 'candidate';
|
|
111
|
+
return configured ? 'not_covered' : 'not_configured';
|
|
112
|
+
}
|
|
113
|
+
function describePerson(facts, id, configured, ambiguous) {
|
|
114
|
+
const assignments = facts.assignments.filter((r) => r.person === id);
|
|
115
|
+
return {
|
|
116
|
+
context: facts.context,
|
|
117
|
+
memberships: facts.memberships.filter((r) => r.person === id),
|
|
118
|
+
responsible_teams: facts.owners,
|
|
119
|
+
assignments,
|
|
120
|
+
classification: classificationState(assignments, configured, ambiguous),
|
|
121
|
+
legacy_roles: facts.roles.filter((r) => r.person === id),
|
|
122
|
+
collective: facts.collective,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function listPerson(doc, facts, input, person) {
|
|
126
|
+
const { memberships, assignments, roles, allRoles, context, activeAssignments } = facts;
|
|
127
|
+
const matches = (r) => (!input.team || r.team === input.team) && (!input.function || r.function === input.function);
|
|
128
|
+
const personal = memberships.filter((r) => r.person === person.id);
|
|
129
|
+
const collaboration = assignments.filter((r) => r.person === person.id);
|
|
130
|
+
const relationships = [...(context.area !== null ? [] : personal), ...collaboration].filter(matches);
|
|
131
|
+
const legacy = roles.filter((r) => r.person === person.id);
|
|
132
|
+
if (input.status && input.status !== (person.status ?? 'active'))
|
|
133
|
+
return undefined;
|
|
134
|
+
if ((input.team || input.function) && !relationships.length)
|
|
135
|
+
return undefined;
|
|
136
|
+
if (context.area !== null && !relationships.length && !legacy.length)
|
|
137
|
+
return undefined;
|
|
138
|
+
return {
|
|
139
|
+
id: person.id,
|
|
140
|
+
display: person.display ?? null,
|
|
141
|
+
status: person.status ?? 'active',
|
|
142
|
+
areas: (doc.areas ?? [])
|
|
143
|
+
.filter((a) => allRoles.some((r) => r.person === person.id && r.area === (a.id ?? a.group)) ||
|
|
144
|
+
activeAssignments.some((r) => r.person === person.id && r.area === a.id))
|
|
145
|
+
.map((a) => a.group),
|
|
146
|
+
...(doc.schema_version === 1 && !input.asOf && !input.scenario
|
|
147
|
+
? {}
|
|
148
|
+
: { context, relationships }),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export function memberView(doc, input, today) {
|
|
152
|
+
const facts = prepareView(doc, input, today);
|
|
153
|
+
return {
|
|
154
|
+
describe: (id, ambiguous) => describePerson(facts, id, doc.assignments !== undefined, ambiguous),
|
|
155
|
+
list: (person) => listPerson(doc, facts, input, person),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/domain/members/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export function ownersOf(members, repo) {
|
|
|
13
13
|
continue;
|
|
14
14
|
owners.push({
|
|
15
15
|
area: area.group,
|
|
16
|
+
...(area.id ? { area_id: area.id } : {}),
|
|
17
|
+
...(scenario.id ? { scenario_id: scenario.id } : {}),
|
|
16
18
|
lead: area.lead === undefined ? null : ref(area.lead),
|
|
17
19
|
scenario: scenario.name,
|
|
18
20
|
devLead: scenario.dev_lead === undefined ? null : ref(scenario.dev_lead),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owners.js","sourceRoot":"","sources":["../../../src/domain/members/owners.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,oEAAoE;AACpE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"owners.js","sourceRoot":"","sources":["../../../src/domain/members/owners.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,oEAAoE;AACpE,uBAAuB;AAsBvB,MAAM,UAAU,QAAQ,CAAC,OAAgB,EAAE,IAAY;IACrD,MAAM,GAAG,GAAG,CAAC,EAAU,EAAa,EAAE;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;IAC7E,CAAC,CAAC;IACF,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACvC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrD,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,OAAO,EAAE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACxE,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAChF;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,QAAgB;IACxD,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACzB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACtE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,KAAa;IAC1D,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC5C,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,KAAK,MAAM,EAAE,IAAI,MAAM;gBAAE,IAAI,EAAE,KAAK,KAAK;oBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1,35 +1,46 @@
|
|
|
1
1
|
// Who is meant by a name. Identifiers are matched exactly and in a fixed
|
|
2
2
|
// order of trust — an email address is unambiguous, a display name is not —
|
|
3
3
|
// and only when nothing matches exactly does spelling distance get a say.
|
|
4
|
-
import { nearest } from '../fuzzy.js';
|
|
4
|
+
import { nearest, nearestMatches } from '../fuzzy.js';
|
|
5
5
|
const ORDER = ['email', 'id', 'account', 'display', 'git_name'];
|
|
6
|
-
export function findPeople(members, query) {
|
|
6
|
+
export function findPeople(members, query, system) {
|
|
7
7
|
const q = query.trim().toLowerCase();
|
|
8
8
|
const matches = [];
|
|
9
9
|
for (const person of members.people) {
|
|
10
|
-
|
|
10
|
+
if (system !== undefined) {
|
|
11
|
+
const account = person.accounts?.[system];
|
|
12
|
+
if (account !== undefined && accountMatches(account, query.trim(), false))
|
|
13
|
+
matches.push({ person, matchedBy: 'account', via: system });
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const hit = exactMatch(person, query.trim(), members.schema_version === 1);
|
|
11
17
|
if (hit !== undefined)
|
|
12
18
|
matches.push(hit);
|
|
13
19
|
}
|
|
14
20
|
if (matches.length > 0)
|
|
15
21
|
return matches.sort((a, b) => ORDER.indexOf(a.matchedBy) - ORDER.indexOf(b.matchedBy));
|
|
22
|
+
if (system !== undefined)
|
|
23
|
+
return [];
|
|
16
24
|
const candidates = members.people.flatMap((p) => [
|
|
17
25
|
p.id,
|
|
18
26
|
...(p.display === undefined ? [] : [p.display]),
|
|
19
27
|
]);
|
|
20
|
-
const near =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
const near = new Set(nearestMatches(q, candidates.map((c) => c.toLowerCase()), 2));
|
|
29
|
+
return members.people.flatMap((person) => {
|
|
30
|
+
const via = [person.id, person.display].find((name) => name !== undefined && near.has(name.toLowerCase()));
|
|
31
|
+
return via === undefined
|
|
32
|
+
? []
|
|
33
|
+
: [{ person, matchedBy: 'fuzzy', via: via.toLowerCase() }];
|
|
34
|
+
});
|
|
25
35
|
}
|
|
26
|
-
function exactMatch(person,
|
|
36
|
+
function exactMatch(person, query, legacy) {
|
|
37
|
+
const q = query.toLowerCase();
|
|
27
38
|
if (person.email?.toLowerCase() === q)
|
|
28
39
|
return { person, matchedBy: 'email' };
|
|
29
40
|
if (person.id.toLowerCase() === q)
|
|
30
41
|
return { person, matchedBy: 'id' };
|
|
31
42
|
for (const [system, account] of Object.entries(person.accounts ?? {})) {
|
|
32
|
-
if (
|
|
43
|
+
if (accountMatches(account, query, legacy))
|
|
33
44
|
return { person, matchedBy: 'account', via: system };
|
|
34
45
|
}
|
|
35
46
|
if (person.display !== undefined && person.display.toLowerCase().includes(q))
|
|
@@ -39,10 +50,13 @@ function exactMatch(person, q) {
|
|
|
39
50
|
return { person, matchedBy: 'git_name', via: gitName };
|
|
40
51
|
return undefined;
|
|
41
52
|
}
|
|
42
|
-
function
|
|
53
|
+
function accountMatches(account, query, legacy) {
|
|
54
|
+
const username = typeof account === 'string' ? account : account.username;
|
|
55
|
+
if (username?.toLowerCase() === query.toLowerCase())
|
|
56
|
+
return true;
|
|
43
57
|
if (typeof account === 'string')
|
|
44
|
-
return
|
|
45
|
-
return
|
|
58
|
+
return false;
|
|
59
|
+
return legacy ? account.id?.toLowerCase() === query.toLowerCase() : account.id === query;
|
|
46
60
|
}
|
|
47
61
|
// A commit author is attributed only on an exact git name or display
|
|
48
62
|
// name; there is no fuzzy step, and two people sharing a name means nobody.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/domain/members/resolve.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/domain/members/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/semver.js
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
// @ts-check
|
|
2
1
|
// Just enough semver for version floors: parse, compare, and tell a release
|
|
3
2
|
// from a development build. A prerelease or 0.0.0 is a development build.
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
* @typedef {{ major: number, minor: number, patch: number, prerelease?: string }} Semver
|
|
7
|
-
*/
|
|
3
|
+
// Lenient on purpose: tools print `v1.2.3` or `1.2.3+build`. The release gate
|
|
4
|
+
// does not use it, because a release tag must be exactly `v<version>`.
|
|
8
5
|
const PATTERN = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
|
|
9
|
-
/**
|
|
10
|
-
* @param {string} text
|
|
11
|
-
* @returns {Semver | undefined}
|
|
12
|
-
*/
|
|
13
6
|
export function parseSemver(text) {
|
|
14
7
|
const m = PATTERN.exec(text.trim());
|
|
15
8
|
if (m === null)
|
|
@@ -17,20 +10,11 @@ export function parseSemver(text) {
|
|
|
17
10
|
const base = { major: Number(m[1]), minor: Number(m[2]), patch: Number(m[3]) };
|
|
18
11
|
return m[4] === undefined ? base : { ...base, prerelease: m[4] };
|
|
19
12
|
}
|
|
20
|
-
/**
|
|
21
|
-
* @param {string} text
|
|
22
|
-
* @returns {boolean}
|
|
23
|
-
*/
|
|
24
13
|
export function isSemver(text) {
|
|
25
14
|
return parseSemver(text) !== undefined;
|
|
26
15
|
}
|
|
27
|
-
/**
|
|
28
|
-
* @param {Semver} a
|
|
29
|
-
* @param {Semver} b
|
|
30
|
-
* @returns {number}
|
|
31
|
-
*/
|
|
32
16
|
export function compareSemver(a, b) {
|
|
33
|
-
for (const part of
|
|
17
|
+
for (const part of ['major', 'minor', 'patch']) {
|
|
34
18
|
if (a[part] !== b[part])
|
|
35
19
|
return a[part] < b[part] ? -1 : 1;
|
|
36
20
|
}
|
|
@@ -42,19 +26,10 @@ export function compareSemver(a, b) {
|
|
|
42
26
|
return -1;
|
|
43
27
|
return a.prerelease < b.prerelease ? -1 : 1;
|
|
44
28
|
}
|
|
45
|
-
/**
|
|
46
|
-
* @param {string} text
|
|
47
|
-
* @returns {boolean}
|
|
48
|
-
*/
|
|
49
29
|
export function isRelease(text) {
|
|
50
30
|
const v = parseSemver(text);
|
|
51
31
|
return v !== undefined && v.prerelease === undefined && (v.major | v.minor | v.patch) !== 0;
|
|
52
32
|
}
|
|
53
|
-
/**
|
|
54
|
-
* @param {string} version
|
|
55
|
-
* @param {string} floor
|
|
56
|
-
* @returns {boolean}
|
|
57
|
-
*/
|
|
58
33
|
export function atLeast(version, floor) {
|
|
59
34
|
const v = parseSemver(version);
|
|
60
35
|
const f = parseSemver(floor);
|