@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 +6 -0
- package/bin/publicodes/SingletonPublicodesHelper.d.ts +13 -0
- package/bin/publicodes/SingletonPublicodesHelper.js +45 -0
- package/bin/publicodes/__tests__/SingletonPublicodesHelper.test.d.ts +1 -0
- package/bin/publicodes/__tests__/SingletonPublicodesHelper.test.js +34 -0
- package/bin/publicodes/index.d.ts +1 -0
- package/bin/publicodes/index.js +3 -1
- package/bin/publicodes/types.d.ts +2 -0
- package/lib/publicodes/SingletonPublicodesHelper.d.ts +13 -0
- package/lib/publicodes/SingletonPublicodesHelper.js +45 -0
- package/lib/publicodes/__tests__/SingletonPublicodesHelper.test.d.ts +1 -0
- package/lib/publicodes/__tests__/SingletonPublicodesHelper.test.js +34 -0
- package/lib/publicodes/index.d.ts +1 -0
- package/lib/publicodes/index.js +3 -1
- package/lib/publicodes/types.d.ts +2 -0
- package/package.json +2 -2
- package/src/publicodes/SingletonPublicodesHelper.ts +75 -0
- package/src/publicodes/__tests__/SingletonPublicodesHelper.test.ts +51 -0
- package/src/publicodes/index.ts +1 -0
- package/src/publicodes/types.ts +11 -0
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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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";
|
package/bin/publicodes/index.js
CHANGED
|
@@ -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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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";
|
package/lib/publicodes/index.js
CHANGED
|
@@ -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.
|
|
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": "
|
|
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
|
+
});
|
package/src/publicodes/index.ts
CHANGED
|
@@ -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";
|
package/src/publicodes/types.ts
CHANGED
|
@@ -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;
|