enefel 2.11.16 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/2025/newSkills.ts CHANGED
@@ -181,7 +181,7 @@ export const newSkills: NewSkill[] = [
181
181
  family: "Devious",
182
182
  mode: "Active",
183
183
  summary:
184
- "Gagne des SPP quand une action spéciale effectuée par ce joueur cause une sortie.",
184
+ "Gagne des PSP quand une Action Spéciale de ce joueur cause une Élimination. Réservé aux joueurs ayant un Trait d'Action Spéciale.",
185
185
  },
186
186
  {
187
187
  name: "Block",
@@ -4,32 +4,27 @@ import { getRaceFromCareer, getRaceSpecialSkills } from "../race";
4
4
  import { isSpecialSkill, SKILL_NAMES } from "../skill";
5
5
 
6
6
  describe("getRaceSpecialSkills", () => {
7
- it("devrait retourner les compétences spéciales communes à une race", () => {
7
+ it("devrait retourner un tableau de compétences spéciales (ou vide)", () => {
8
8
  const imperialSkills = getRaceSpecialSkills(RACE.IMPERIAL);
9
9
 
10
- // Imperial devrait avoir 'specialist' car 3/5 carrières l'ont
11
- expect(imperialSkills).toContain("specialist");
12
- expect(imperialSkills.length).toBeGreaterThan(0);
13
-
14
- // Vérifier que toutes les compétences retournées sont bien spéciales
10
+ // Toutes les compétences retournées doivent être spéciales
15
11
  imperialSkills.forEach((skill) => {
16
12
  expect(isSpecialSkill(skill as SKILL_NAMES)).toBe(true);
17
13
  });
18
14
  });
19
15
 
20
- it("devrait retourner 'star' pour Vampire", () => {
21
- const vampireSkills = getRaceSpecialSkills(RACE.VAMPIRE);
22
- expect(vampireSkills).toContain("star");
23
- });
24
-
25
- it("devrait retourner 'specialist' pour Amazon", () => {
26
- const amazonSkills = getRaceSpecialSkills(RACE.AMAZON);
27
- expect(amazonSkills).toContain("specialist");
16
+ it("ne devrait jamais retourner 'specialist' ou 'big-guy' (traits individuels, pas raciaux)", () => {
17
+ // Tester sur plusieurs races
18
+ const races = [RACE.IMPERIAL, RACE.VAMPIRE, RACE.AMAZON, RACE.HUMAN, RACE.ORC];
19
+ races.forEach((race) => {
20
+ const skills = getRaceSpecialSkills(race);
21
+ expect(skills).not.toContain("specialist");
22
+ expect(skills).not.toContain("big-guy");
23
+ });
28
24
  });
29
25
 
30
26
  it("devrait retourner un tableau vide pour une race sans compétences spéciales communes", () => {
31
27
  const humanSkills = getRaceSpecialSkills(RACE.HUMAN);
32
- // Human n'a pas de compétences spéciales communes à toutes les carrières
33
28
  expect(Array.isArray(humanSkills)).toBe(true);
34
29
  });
35
30
 
@@ -40,19 +35,26 @@ describe("getRaceSpecialSkills", () => {
40
35
  expect(race).toBe(RACE.IMPERIAL);
41
36
 
42
37
  const skills = getRaceSpecialSkills(race!);
43
- expect(skills.length).toBeGreaterThan(0);
44
- expect(skills).toContain("specialist");
38
+ expect(Array.isArray(skills)).toBe(true);
39
+ // Toutes les compétences retournées sont spéciales
40
+ skills.forEach((skill) => {
41
+ expect(isSpecialSkill(skill as SKILL_NAMES)).toBe(true);
42
+ });
45
43
  });
46
44
 
47
- it("devrait retourner les compétences qui apparaissent dans au moins 50% des carrières", () => {
45
+ it("ne devrait retourner que les compétences présentes dans au moins 50% des carrières", () => {
48
46
  const imperialSkills = getRaceSpecialSkills(RACE.IMPERIAL);
49
47
 
50
- // Imperial a 5 carrières, donc le seuil est 3 (50% de 5 = 2.5, arrondi à 3)
51
- // 'specialist' apparaît dans 3 carrières (thrower, blitzer, bodyguard)
52
- // Donc 'specialist' devrait être retourné
53
- expect(imperialSkills).toContain("specialist");
54
-
55
48
  // 'big-guy' apparaît seulement dans 1 carrière (ogre), donc ne devrait pas être retourné
56
49
  expect(imperialSkills).not.toContain("big-guy");
50
+ // 'specialist' est toujours filtré
51
+ expect(imperialSkills).not.toContain("specialist");
52
+ });
53
+
54
+ it("devrait retourner un tableau (pas undefined/null) pour toutes les races", () => {
55
+ Object.values(RACE).forEach((race) => {
56
+ const skills = getRaceSpecialSkills(race as RACE);
57
+ expect(Array.isArray(skills)).toBe(true);
58
+ });
57
59
  });
58
60
  });
@@ -145,7 +145,7 @@ exports.newSkills = [
145
145
  name: "Violent Innovator",
146
146
  family: "Devious",
147
147
  mode: "Active",
148
- summary: "Gagne des SPP quand une action spéciale effectuée par ce joueur cause une sortie.",
148
+ summary: "Gagne des PSP quand une Action Spéciale de ce joueur cause une Élimination. Réservé aux joueurs ayant un Trait d'Action Spéciale.",
149
149
  },
150
150
  {
151
151
  name: "Block",
@@ -5,27 +5,24 @@ const career_1 = require("../career");
5
5
  const race_1 = require("../race");
6
6
  const skill_1 = require("../skill");
7
7
  (0, globals_1.describe)("getRaceSpecialSkills", () => {
8
- (0, globals_1.it)("devrait retourner les compétences spéciales communes à une race", () => {
8
+ (0, globals_1.it)("devrait retourner un tableau de compétences spéciales (ou vide)", () => {
9
9
  const imperialSkills = (0, race_1.getRaceSpecialSkills)(career_1.RACE.IMPERIAL);
10
- // Imperial devrait avoir 'specialist' car 3/5 carrières l'ont
11
- (0, globals_1.expect)(imperialSkills).toContain("specialist");
12
- (0, globals_1.expect)(imperialSkills.length).toBeGreaterThan(0);
13
- // Vérifier que toutes les compétences retournées sont bien spéciales
10
+ // Toutes les compétences retournées doivent être spéciales
14
11
  imperialSkills.forEach((skill) => {
15
12
  (0, globals_1.expect)((0, skill_1.isSpecialSkill)(skill)).toBe(true);
16
13
  });
17
14
  });
18
- (0, globals_1.it)("devrait retourner 'star' pour Vampire", () => {
19
- const vampireSkills = (0, race_1.getRaceSpecialSkills)(career_1.RACE.VAMPIRE);
20
- (0, globals_1.expect)(vampireSkills).toContain("star");
21
- });
22
- (0, globals_1.it)("devrait retourner 'specialist' pour Amazon", () => {
23
- const amazonSkills = (0, race_1.getRaceSpecialSkills)(career_1.RACE.AMAZON);
24
- (0, globals_1.expect)(amazonSkills).toContain("specialist");
15
+ (0, globals_1.it)("ne devrait jamais retourner 'specialist' ou 'big-guy' (traits individuels, pas raciaux)", () => {
16
+ // Tester sur plusieurs races
17
+ const races = [career_1.RACE.IMPERIAL, career_1.RACE.VAMPIRE, career_1.RACE.AMAZON, career_1.RACE.HUMAN, career_1.RACE.ORC];
18
+ races.forEach((race) => {
19
+ const skills = (0, race_1.getRaceSpecialSkills)(race);
20
+ (0, globals_1.expect)(skills).not.toContain("specialist");
21
+ (0, globals_1.expect)(skills).not.toContain("big-guy");
22
+ });
25
23
  });
26
24
  (0, globals_1.it)("devrait retourner un tableau vide pour une race sans compétences spéciales communes", () => {
27
25
  const humanSkills = (0, race_1.getRaceSpecialSkills)(career_1.RACE.HUMAN);
28
- // Human n'a pas de compétences spéciales communes à toutes les carrières
29
26
  (0, globals_1.expect)(Array.isArray(humanSkills)).toBe(true);
30
27
  });
31
28
  (0, globals_1.it)("devrait fonctionner avec un RACE obtenu depuis un CAREER_ID", () => {
@@ -33,16 +30,23 @@ const skill_1 = require("../skill");
33
30
  const race = (0, race_1.getRaceFromCareer)(careerId);
34
31
  (0, globals_1.expect)(race).toBe(career_1.RACE.IMPERIAL);
35
32
  const skills = (0, race_1.getRaceSpecialSkills)(race);
36
- (0, globals_1.expect)(skills.length).toBeGreaterThan(0);
37
- (0, globals_1.expect)(skills).toContain("specialist");
33
+ (0, globals_1.expect)(Array.isArray(skills)).toBe(true);
34
+ // Toutes les compétences retournées sont spéciales
35
+ skills.forEach((skill) => {
36
+ (0, globals_1.expect)((0, skill_1.isSpecialSkill)(skill)).toBe(true);
37
+ });
38
38
  });
39
- (0, globals_1.it)("devrait retourner les compétences qui apparaissent dans au moins 50% des carrières", () => {
39
+ (0, globals_1.it)("ne devrait retourner que les compétences présentes dans au moins 50% des carrières", () => {
40
40
  const imperialSkills = (0, race_1.getRaceSpecialSkills)(career_1.RACE.IMPERIAL);
41
- // Imperial a 5 carrières, donc le seuil est 3 (50% de 5 = 2.5, arrondi à 3)
42
- // 'specialist' apparaît dans 3 carrières (thrower, blitzer, bodyguard)
43
- // Donc 'specialist' devrait être retourné
44
- (0, globals_1.expect)(imperialSkills).toContain("specialist");
45
41
  // 'big-guy' apparaît seulement dans 1 carrière (ogre), donc ne devrait pas être retourné
46
42
  (0, globals_1.expect)(imperialSkills).not.toContain("big-guy");
43
+ // 'specialist' est toujours filtré
44
+ (0, globals_1.expect)(imperialSkills).not.toContain("specialist");
45
+ });
46
+ (0, globals_1.it)("devrait retourner un tableau (pas undefined/null) pour toutes les races", () => {
47
+ Object.values(career_1.RACE).forEach((race) => {
48
+ const skills = (0, race_1.getRaceSpecialSkills)(race);
49
+ (0, globals_1.expect)(Array.isArray(skills)).toBe(true);
50
+ });
47
51
  });
48
52
  });
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "enefel",
3
- "version": "2.11.16",
3
+ "version": "2.13.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "enefel",
9
- "version": "2.11.16",
9
+ "version": "2.13.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "csv-parse": "^6.1.0",
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enefel",
3
- "version": "2.11.16",
3
+ "version": "2.13.0",
4
4
  "description": "Fantasy Football game engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/dist/skill.d.ts CHANGED
@@ -103,6 +103,7 @@ declare enum SKILL_NAMES {
103
103
  UNCHANNELLED_FURY = "unchannelled-fury",
104
104
  UNSTEADY = "unsteady",
105
105
  VERY_LONG_LEGS = "very-long-legs",
106
+ VIOLENT_INNOVATOR = "violent-innovator",
106
107
  WRESTLE = "wrestle",
107
108
  DIVING_CATCH = "diving-catch"
108
109
  }
package/dist/skill.js CHANGED
@@ -146,7 +146,7 @@ var SKILL_NAMES;
146
146
  SKILL_NAMES["UNCHANNELLED_FURY"] = "unchannelled-fury";
147
147
  SKILL_NAMES["UNSTEADY"] = "unsteady";
148
148
  SKILL_NAMES["VERY_LONG_LEGS"] = "very-long-legs";
149
- // VIOLENT_INNOVATOR = "violent-innovator",
149
+ SKILL_NAMES["VIOLENT_INNOVATOR"] = "violent-innovator";
150
150
  SKILL_NAMES["WRESTLE"] = "wrestle";
151
151
  SKILL_NAMES["DIVING_CATCH"] = "diving-catch";
152
152
  })(SKILL_NAMES || (exports.SKILL_NAMES = SKILL_NAMES = {}));
@@ -281,7 +281,7 @@ const SKILL_DEVIOUS = [
281
281
  // SKILL_NAMES.SABOTEUR,
282
282
  SKILL_NAMES.SHADOWING,
283
283
  SKILL_NAMES.SNEAKY_GIT,
284
- // SKILL_NAMES.VIOLENT_INNOVATOR,
284
+ SKILL_NAMES.VIOLENT_INNOVATOR,
285
285
  ];
286
286
  const SKILL_SPECIAL = [
287
287
  SKILL_NAMES.BIG_GUY,
package/npm-publish.sh CHANGED
@@ -74,7 +74,14 @@ npm publish
74
74
  # Vérifier si la publication a réussi
75
75
  if [ $? -eq 0 ]; then
76
76
  echo -e "${GREEN}Package publié avec succès !${NC}"
77
-
77
+
78
+ # Tag git pour marquer la version publiée (utilisé par build.sh pour détecter les changements)
79
+ PUBLISHED_VERSION=$(node -p "require('./package.json').version")
80
+ cd ..
81
+ git tag "enefel-v${PUBLISHED_VERSION}"
82
+ echo -e "${GREEN}Tag git enefel-v${PUBLISHED_VERSION} créé${NC}"
83
+ cd enefel
84
+
78
85
  # Afficher les informations sur le package
79
86
  echo -e "${BLUE}Informations sur le package :${NC}"
80
87
  npm view
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enefel",
3
- "version": "2.11.16",
3
+ "version": "2.13.0",
4
4
  "description": "Fantasy Football game engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/skill.ts CHANGED
@@ -133,7 +133,7 @@ enum SKILL_NAMES {
133
133
  UNCHANNELLED_FURY = "unchannelled-fury",
134
134
  UNSTEADY = "unsteady",
135
135
  VERY_LONG_LEGS = "very-long-legs",
136
- // VIOLENT_INNOVATOR = "violent-innovator",
136
+ VIOLENT_INNOVATOR = "violent-innovator",
137
137
  WRESTLE = "wrestle",
138
138
  DIVING_CATCH = "diving-catch",
139
139
  }
@@ -275,7 +275,7 @@ const SKILL_DEVIOUS: SKILL_NAMES[] = [
275
275
  // SKILL_NAMES.SABOTEUR,
276
276
  SKILL_NAMES.SHADOWING,
277
277
  SKILL_NAMES.SNEAKY_GIT,
278
- // SKILL_NAMES.VIOLENT_INNOVATOR,
278
+ SKILL_NAMES.VIOLENT_INNOVATOR,
279
279
  ];
280
280
 
281
281
  const SKILL_SPECIAL: SKILL_NAMES[] = [