@socialgouv/modeles-social 4.104.2 → 4.105.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 CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.105.0](https://github.com/SocialGouv/code-du-travail-numerique/compare/v4.104.2...v4.105.0) (2023-07-17)
7
+
8
+ ### Features
9
+
10
+ - **simulator:** ajout d'un singleton pour charger les modèles ([#5251](https://github.com/SocialGouv/code-du-travail-numerique/issues/5251)) ([40faea2](https://github.com/SocialGouv/code-du-travail-numerique/commit/40faea2edd819f40efac5a7391d779c6ef189255))
11
+
6
12
  ## [4.104.2](https://github.com/SocialGouv/code-du-travail-numerique/compare/v4.104.1...v4.104.2) (2023-07-06)
7
13
 
8
14
  **Note:** Version bump only for package @socialgouv/modeles-social
@@ -0,0 +1,13 @@
1
+ import type { PublicodesInstance } from ".";
2
+ import { PublicodesSimulator } from ".";
3
+ declare class SingletonPublicodesHelper<T extends PublicodesSimulator> {
4
+ private static readonly instances;
5
+ private readonly publicodesInstances;
6
+ private readonly simulator;
7
+ private readonly idcc?;
8
+ private constructor();
9
+ static getInstance<T extends PublicodesSimulator>(simulator: PublicodesSimulator, idcc?: string): PublicodesInstance<T>;
10
+ private readonly createPublicodesInstance;
11
+ private readonly loadPublicodesRules;
12
+ }
13
+ export default SingletonPublicodesHelper;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var __1 = require("..");
4
+ var _1 = require(".");
5
+ var SingletonPublicodesHelper = /** @class */ (function () {
6
+ function SingletonPublicodesHelper(simulator, idcc) {
7
+ var _this = this;
8
+ this.createPublicodesInstance = function (simulator, idcc) {
9
+ var rules = _this.loadPublicodesRules(simulator);
10
+ switch (simulator) {
11
+ case _1.PublicodesSimulator.PREAVIS_RETRAITE:
12
+ return new _1.PreavisRetraitePublicodes(__1.preavisRetraiteModeles);
13
+ case _1.PublicodesSimulator.INDEMNITE_LICENCIEMENT:
14
+ return new _1.IndemniteLicenciementPublicodes(rules, idcc);
15
+ default:
16
+ throw new Error("Simulator not supported");
17
+ }
18
+ };
19
+ this.loadPublicodesRules = function (simulator) {
20
+ switch (simulator) {
21
+ case _1.PublicodesSimulator.PREAVIS_RETRAITE:
22
+ return __1.preavisRetraiteModeles;
23
+ case _1.PublicodesSimulator.INDEMNITE_LICENCIEMENT:
24
+ return __1.indemniteLicenciementModeles;
25
+ default:
26
+ throw new Error("Simulator not supported");
27
+ }
28
+ };
29
+ this.simulator = simulator;
30
+ this.idcc = idcc;
31
+ this.publicodesInstances = this.createPublicodesInstance(simulator, idcc);
32
+ }
33
+ SingletonPublicodesHelper.getInstance = function (simulator, idcc) {
34
+ var existingInstance = SingletonPublicodesHelper.instances.find(function (instance) { return instance.simulator === simulator && instance.idcc === idcc; });
35
+ if (existingInstance) {
36
+ return existingInstance.publicodesInstances;
37
+ }
38
+ var newInstance = new SingletonPublicodesHelper(simulator, idcc);
39
+ SingletonPublicodesHelper.instances.push(newInstance);
40
+ return newInstance.publicodesInstances;
41
+ };
42
+ SingletonPublicodesHelper.instances = [];
43
+ return SingletonPublicodesHelper;
44
+ }());
45
+ exports.default = SingletonPublicodesHelper;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var SingletonPublicodesHelper_1 = __importDefault(require("../SingletonPublicodesHelper"));
7
+ var types_1 = require("../types");
8
+ describe("SingletonPublicodesHelper", function () {
9
+ describe("getInstance", function () {
10
+ it("should return the same instance for the same simulator and idcc", function () {
11
+ var simulator = types_1.PublicodesSimulator.INDEMNITE_LICENCIEMENT;
12
+ var idcc = "1234";
13
+ var instance1 = SingletonPublicodesHelper_1.default.getInstance(simulator, idcc);
14
+ var instance2 = SingletonPublicodesHelper_1.default.getInstance(simulator, idcc);
15
+ expect(instance1).toBe(instance2);
16
+ });
17
+ it("should return different instances for different simulators", function () {
18
+ var instance1 = SingletonPublicodesHelper_1.default.getInstance(types_1.PublicodesSimulator.INDEMNITE_LICENCIEMENT);
19
+ var instance2 = SingletonPublicodesHelper_1.default.getInstance(types_1.PublicodesSimulator.PREAVIS_RETRAITE);
20
+ expect(instance1).not.toBe(instance2);
21
+ });
22
+ it("should return different instances for different idcc", function () {
23
+ var simulator = types_1.PublicodesSimulator.INDEMNITE_LICENCIEMENT;
24
+ var instance1 = SingletonPublicodesHelper_1.default.getInstance(simulator, "1234");
25
+ var instance2 = SingletonPublicodesHelper_1.default.getInstance(simulator, "5678");
26
+ expect(instance1).not.toBe(instance2);
27
+ });
28
+ it("should throw an error for unsupported simulators", function () {
29
+ expect(function () {
30
+ return SingletonPublicodesHelper_1.default.getInstance("unsupported");
31
+ }).toThrow("Simulator not supported");
32
+ });
33
+ });
34
+ });
@@ -1,4 +1,5 @@
1
1
  export { default as IndemniteLicenciementPublicodes } from "./IndemniteLicenciementPublicodes";
2
2
  export { default as PreavisRetraitePublicodes } from "./PreavisRetraitePublicodes";
3
3
  export * from "./Publicodes";
4
+ export { default as SingletonPublicodesHelper } from "./SingletonPublicodesHelper";
4
5
  export * from "./types";
@@ -17,10 +17,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.PreavisRetraitePublicodes = exports.IndemniteLicenciementPublicodes = void 0;
20
+ exports.SingletonPublicodesHelper = exports.PreavisRetraitePublicodes = exports.IndemniteLicenciementPublicodes = void 0;
21
21
  var IndemniteLicenciementPublicodes_1 = require("./IndemniteLicenciementPublicodes");
22
22
  Object.defineProperty(exports, "IndemniteLicenciementPublicodes", { enumerable: true, get: function () { return __importDefault(IndemniteLicenciementPublicodes_1).default; } });
23
23
  var PreavisRetraitePublicodes_1 = require("./PreavisRetraitePublicodes");
24
24
  Object.defineProperty(exports, "PreavisRetraitePublicodes", { enumerable: true, get: function () { return __importDefault(PreavisRetraitePublicodes_1).default; } });
25
25
  __exportStar(require("./Publicodes"), exports);
26
+ var SingletonPublicodesHelper_1 = require("./SingletonPublicodesHelper");
27
+ Object.defineProperty(exports, "SingletonPublicodesHelper", { enumerable: true, get: function () { return __importDefault(SingletonPublicodesHelper_1).default; } });
26
28
  __exportStar(require("./types"), exports);
@@ -2,6 +2,7 @@
2
2
  import type Engine from "publicodes";
3
3
  import type { Evaluation, Rule as PubliRule, RuleNode as PubliRuleNode, Unit } from "publicodes";
4
4
  import type { Notification, References } from "../modeles/common";
5
+ import type { IndemniteLicenciementPublicodes, PreavisRetraitePublicodes } from ".";
5
6
  export type OldReference = {
6
7
  ref: string | null;
7
8
  refUrl: string | null;
@@ -95,3 +96,4 @@ export type PublicodesContextType = {
95
96
  situation: SituationElement[];
96
97
  setSituation: (values: Record<string, string>) => void;
97
98
  };
99
+ export type PublicodesInstance<T extends PublicodesSimulator> = T extends PublicodesSimulator.PREAVIS_RETRAITE ? PreavisRetraitePublicodes : T extends PublicodesSimulator.INDEMNITE_LICENCIEMENT ? IndemniteLicenciementPublicodes : never;
@@ -0,0 +1,13 @@
1
+ import type { PublicodesInstance } from ".";
2
+ import { PublicodesSimulator } from ".";
3
+ declare class SingletonPublicodesHelper<T extends PublicodesSimulator> {
4
+ private static readonly instances;
5
+ private readonly publicodesInstances;
6
+ private readonly simulator;
7
+ private readonly idcc?;
8
+ private constructor();
9
+ static getInstance<T extends PublicodesSimulator>(simulator: PublicodesSimulator, idcc?: string): PublicodesInstance<T>;
10
+ private readonly createPublicodesInstance;
11
+ private readonly loadPublicodesRules;
12
+ }
13
+ export default SingletonPublicodesHelper;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var __1 = require("..");
4
+ var _1 = require(".");
5
+ var SingletonPublicodesHelper = /** @class */ (function () {
6
+ function SingletonPublicodesHelper(simulator, idcc) {
7
+ var _this = this;
8
+ this.createPublicodesInstance = function (simulator, idcc) {
9
+ var rules = _this.loadPublicodesRules(simulator);
10
+ switch (simulator) {
11
+ case _1.PublicodesSimulator.PREAVIS_RETRAITE:
12
+ return new _1.PreavisRetraitePublicodes(__1.preavisRetraiteModeles);
13
+ case _1.PublicodesSimulator.INDEMNITE_LICENCIEMENT:
14
+ return new _1.IndemniteLicenciementPublicodes(rules, idcc);
15
+ default:
16
+ throw new Error("Simulator not supported");
17
+ }
18
+ };
19
+ this.loadPublicodesRules = function (simulator) {
20
+ switch (simulator) {
21
+ case _1.PublicodesSimulator.PREAVIS_RETRAITE:
22
+ return __1.preavisRetraiteModeles;
23
+ case _1.PublicodesSimulator.INDEMNITE_LICENCIEMENT:
24
+ return __1.indemniteLicenciementModeles;
25
+ default:
26
+ throw new Error("Simulator not supported");
27
+ }
28
+ };
29
+ this.simulator = simulator;
30
+ this.idcc = idcc;
31
+ this.publicodesInstances = this.createPublicodesInstance(simulator, idcc);
32
+ }
33
+ SingletonPublicodesHelper.getInstance = function (simulator, idcc) {
34
+ var existingInstance = SingletonPublicodesHelper.instances.find(function (instance) { return instance.simulator === simulator && instance.idcc === idcc; });
35
+ if (existingInstance) {
36
+ return existingInstance.publicodesInstances;
37
+ }
38
+ var newInstance = new SingletonPublicodesHelper(simulator, idcc);
39
+ SingletonPublicodesHelper.instances.push(newInstance);
40
+ return newInstance.publicodesInstances;
41
+ };
42
+ SingletonPublicodesHelper.instances = [];
43
+ return SingletonPublicodesHelper;
44
+ }());
45
+ exports.default = SingletonPublicodesHelper;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var SingletonPublicodesHelper_1 = __importDefault(require("../SingletonPublicodesHelper"));
7
+ var types_1 = require("../types");
8
+ describe("SingletonPublicodesHelper", function () {
9
+ describe("getInstance", function () {
10
+ it("should return the same instance for the same simulator and idcc", function () {
11
+ var simulator = types_1.PublicodesSimulator.INDEMNITE_LICENCIEMENT;
12
+ var idcc = "1234";
13
+ var instance1 = SingletonPublicodesHelper_1.default.getInstance(simulator, idcc);
14
+ var instance2 = SingletonPublicodesHelper_1.default.getInstance(simulator, idcc);
15
+ expect(instance1).toBe(instance2);
16
+ });
17
+ it("should return different instances for different simulators", function () {
18
+ var instance1 = SingletonPublicodesHelper_1.default.getInstance(types_1.PublicodesSimulator.INDEMNITE_LICENCIEMENT);
19
+ var instance2 = SingletonPublicodesHelper_1.default.getInstance(types_1.PublicodesSimulator.PREAVIS_RETRAITE);
20
+ expect(instance1).not.toBe(instance2);
21
+ });
22
+ it("should return different instances for different idcc", function () {
23
+ var simulator = types_1.PublicodesSimulator.INDEMNITE_LICENCIEMENT;
24
+ var instance1 = SingletonPublicodesHelper_1.default.getInstance(simulator, "1234");
25
+ var instance2 = SingletonPublicodesHelper_1.default.getInstance(simulator, "5678");
26
+ expect(instance1).not.toBe(instance2);
27
+ });
28
+ it("should throw an error for unsupported simulators", function () {
29
+ expect(function () {
30
+ return SingletonPublicodesHelper_1.default.getInstance("unsupported");
31
+ }).toThrow("Simulator not supported");
32
+ });
33
+ });
34
+ });
@@ -1,4 +1,5 @@
1
1
  export { default as IndemniteLicenciementPublicodes } from "./IndemniteLicenciementPublicodes";
2
2
  export { default as PreavisRetraitePublicodes } from "./PreavisRetraitePublicodes";
3
3
  export * from "./Publicodes";
4
+ export { default as SingletonPublicodesHelper } from "./SingletonPublicodesHelper";
4
5
  export * from "./types";
@@ -17,10 +17,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.PreavisRetraitePublicodes = exports.IndemniteLicenciementPublicodes = void 0;
20
+ exports.SingletonPublicodesHelper = exports.PreavisRetraitePublicodes = exports.IndemniteLicenciementPublicodes = void 0;
21
21
  var IndemniteLicenciementPublicodes_1 = require("./IndemniteLicenciementPublicodes");
22
22
  Object.defineProperty(exports, "IndemniteLicenciementPublicodes", { enumerable: true, get: function () { return __importDefault(IndemniteLicenciementPublicodes_1).default; } });
23
23
  var PreavisRetraitePublicodes_1 = require("./PreavisRetraitePublicodes");
24
24
  Object.defineProperty(exports, "PreavisRetraitePublicodes", { enumerable: true, get: function () { return __importDefault(PreavisRetraitePublicodes_1).default; } });
25
25
  __exportStar(require("./Publicodes"), exports);
26
+ var SingletonPublicodesHelper_1 = require("./SingletonPublicodesHelper");
27
+ Object.defineProperty(exports, "SingletonPublicodesHelper", { enumerable: true, get: function () { return __importDefault(SingletonPublicodesHelper_1).default; } });
26
28
  __exportStar(require("./types"), exports);
@@ -2,6 +2,7 @@
2
2
  import type Engine from "publicodes";
3
3
  import type { Evaluation, Rule as PubliRule, RuleNode as PubliRuleNode, Unit } from "publicodes";
4
4
  import type { Notification, References } from "../modeles/common";
5
+ import type { IndemniteLicenciementPublicodes, PreavisRetraitePublicodes } from ".";
5
6
  export type OldReference = {
6
7
  ref: string | null;
7
8
  refUrl: string | null;
@@ -95,3 +96,4 @@ export type PublicodesContextType = {
95
96
  situation: SituationElement[];
96
97
  setSituation: (values: Record<string, string>) => void;
97
98
  };
99
+ export type PublicodesInstance<T extends PublicodesSimulator> = T extends PublicodesSimulator.PREAVIS_RETRAITE ? PreavisRetraitePublicodes : T extends PublicodesSimulator.INDEMNITE_LICENCIEMENT ? IndemniteLicenciementPublicodes : never;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public",
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
7
- "version": "4.104.2",
7
+ "version": "4.105.0",
8
8
  "description": "Les règles publicodes des simulateurs de code du travail numérique",
9
9
  "main": "./lib/index.js",
10
10
  "types": "./lib/index.d.ts",
@@ -50,5 +50,5 @@
50
50
  "yarn lint --fix --quiet"
51
51
  ]
52
52
  },
53
- "gitHead": "c37d48ba01df43e072e195e345fc893dcf062a1f"
53
+ "gitHead": "3e0ee9d4a4f8b245b0c78da31b407e8381228580"
54
54
  }
@@ -0,0 +1,75 @@
1
+ import { indemniteLicenciementModeles, preavisRetraiteModeles } from "..";
2
+ import type { PublicodesInstance } from ".";
3
+ import {
4
+ IndemniteLicenciementPublicodes,
5
+ PreavisRetraitePublicodes,
6
+ PublicodesSimulator,
7
+ } from ".";
8
+
9
+ class SingletonPublicodesHelper<T extends PublicodesSimulator> {
10
+ private static readonly instances: SingletonPublicodesHelper<PublicodesSimulator>[] =
11
+ [];
12
+
13
+ private readonly publicodesInstances: PublicodesInstance<T>;
14
+
15
+ private readonly simulator: T;
16
+
17
+ private readonly idcc?: string;
18
+
19
+ private constructor(simulator: T, idcc?: string) {
20
+ this.simulator = simulator;
21
+ this.idcc = idcc;
22
+ this.publicodesInstances = this.createPublicodesInstance(
23
+ simulator,
24
+ idcc
25
+ ) as PublicodesInstance<T>;
26
+ }
27
+
28
+ public static getInstance<T extends PublicodesSimulator>(
29
+ simulator: PublicodesSimulator,
30
+ idcc?: string
31
+ ): PublicodesInstance<T> {
32
+ const existingInstance = SingletonPublicodesHelper.instances.find(
33
+ (instance) => instance.simulator === simulator && instance.idcc === idcc
34
+ );
35
+
36
+ if (existingInstance) {
37
+ return existingInstance.publicodesInstances as PublicodesInstance<T>;
38
+ }
39
+
40
+ const newInstance = new SingletonPublicodesHelper(simulator, idcc);
41
+ SingletonPublicodesHelper.instances.push(newInstance);
42
+
43
+ return newInstance.publicodesInstances as PublicodesInstance<T>;
44
+ }
45
+
46
+ private readonly createPublicodesInstance = (
47
+ simulator: PublicodesSimulator,
48
+ idcc?: string
49
+ ) => {
50
+ const rules = this.loadPublicodesRules(simulator);
51
+ switch (simulator) {
52
+ case PublicodesSimulator.PREAVIS_RETRAITE:
53
+ return new PreavisRetraitePublicodes(preavisRetraiteModeles);
54
+ case PublicodesSimulator.INDEMNITE_LICENCIEMENT:
55
+ return new IndemniteLicenciementPublicodes(rules, idcc);
56
+ default:
57
+ throw new Error("Simulator not supported");
58
+ }
59
+ };
60
+
61
+ private readonly loadPublicodesRules = (
62
+ simulator: PublicodesSimulator
63
+ ): any => {
64
+ switch (simulator) {
65
+ case PublicodesSimulator.PREAVIS_RETRAITE:
66
+ return preavisRetraiteModeles;
67
+ case PublicodesSimulator.INDEMNITE_LICENCIEMENT:
68
+ return indemniteLicenciementModeles;
69
+ default:
70
+ throw new Error("Simulator not supported");
71
+ }
72
+ };
73
+ }
74
+
75
+ export default SingletonPublicodesHelper;
@@ -0,0 +1,51 @@
1
+ import SingletonPublicodesHelper from "../SingletonPublicodesHelper";
2
+ import { PublicodesSimulator } from "../types";
3
+
4
+ describe("SingletonPublicodesHelper", () => {
5
+ describe("getInstance", () => {
6
+ it("should return the same instance for the same simulator and idcc", () => {
7
+ const simulator = PublicodesSimulator.INDEMNITE_LICENCIEMENT;
8
+ const idcc = "1234";
9
+ const instance1 = SingletonPublicodesHelper.getInstance<typeof simulator>(
10
+ simulator,
11
+ idcc
12
+ );
13
+ const instance2 = SingletonPublicodesHelper.getInstance<typeof simulator>(
14
+ simulator,
15
+ idcc
16
+ );
17
+ expect(instance1).toBe(instance2);
18
+ });
19
+
20
+ it("should return different instances for different simulators", () => {
21
+ const instance1 =
22
+ SingletonPublicodesHelper.getInstance<PublicodesSimulator.INDEMNITE_LICENCIEMENT>(
23
+ PublicodesSimulator.INDEMNITE_LICENCIEMENT
24
+ );
25
+ const instance2 =
26
+ SingletonPublicodesHelper.getInstance<PublicodesSimulator.PREAVIS_RETRAITE>(
27
+ PublicodesSimulator.PREAVIS_RETRAITE
28
+ );
29
+ expect(instance1).not.toBe(instance2);
30
+ });
31
+
32
+ it("should return different instances for different idcc", () => {
33
+ const simulator = PublicodesSimulator.INDEMNITE_LICENCIEMENT;
34
+ const instance1 = SingletonPublicodesHelper.getInstance<typeof simulator>(
35
+ simulator,
36
+ "1234"
37
+ );
38
+ const instance2 = SingletonPublicodesHelper.getInstance<typeof simulator>(
39
+ simulator,
40
+ "5678"
41
+ );
42
+ expect(instance1).not.toBe(instance2);
43
+ });
44
+
45
+ it("should throw an error for unsupported simulators", () => {
46
+ expect(() =>
47
+ SingletonPublicodesHelper.getInstance<any>("unsupported" as any)
48
+ ).toThrow("Simulator not supported");
49
+ });
50
+ });
51
+ });
@@ -1,4 +1,5 @@
1
1
  export { default as IndemniteLicenciementPublicodes } from "./IndemniteLicenciementPublicodes";
2
2
  export { default as PreavisRetraitePublicodes } from "./PreavisRetraitePublicodes";
3
3
  export * from "./Publicodes";
4
+ export { default as SingletonPublicodesHelper } from "./SingletonPublicodesHelper";
4
5
  export * from "./types";
@@ -7,6 +7,10 @@ import type {
7
7
  } from "publicodes";
8
8
 
9
9
  import type { Notification, References } from "../modeles/common";
10
+ import type {
11
+ IndemniteLicenciementPublicodes,
12
+ PreavisRetraitePublicodes,
13
+ } from ".";
10
14
 
11
15
  export type OldReference = {
12
16
  ref: string | null;
@@ -125,3 +129,10 @@ export type PublicodesContextType = {
125
129
  situation: SituationElement[];
126
130
  setSituation: (values: Record<string, string>) => void;
127
131
  };
132
+
133
+ export type PublicodesInstance<T extends PublicodesSimulator> =
134
+ T extends PublicodesSimulator.PREAVIS_RETRAITE
135
+ ? PreavisRetraitePublicodes
136
+ : T extends PublicodesSimulator.INDEMNITE_LICENCIEMENT
137
+ ? IndemniteLicenciementPublicodes
138
+ : never;