@agencebio/rosetta-cultures
Version:
Traduction des codes cultures de la CPF vers la PAC vers des nomenclatures d'organismes de certification, et vice-versa.
74 lines (73 loc) • 2.68 kB
JavaScript
;
/**
* @typedef {import('../index.js').UnifiedCulture} UnifiedCulture
* @typedef {import('../index.js').PacCulture} PacCulture
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCpfResolver = exports.toBoolean = exports.isOrganicProductionCode = void 0;
/**
* @see https://mattermost.incubateur.net/betagouv/pl/nn6psexgw3bedq16yisrpj777h
* > Oui 01 et 02 en enlevant les productions animales
* > En enlevant 01.4, 01.5 et 01.6
* > En ajoutant `08.93.1` (équivalent PAC de `MRS`/Marais salant)
*/
var CPF_ORGANIC_PRODUCTION_RE = /^(01(?!.[456][1-9]?(.\d{1,3})*).+|02(.\d{1,3})+|08.93.1)$/;
/**
*
* @param {String} code
* @returns {Boolean}
*/
function isOrganicProductionCode(code) {
return CPF_ORGANIC_PRODUCTION_RE.test(code);
}
exports.isOrganicProductionCode = isOrganicProductionCode;
/**
* Returns a JavaScript boolean from an Excel string value of '0' or '1'
*
* @param {String} excelLikeBoolean
* @returns {Boolean}
*/
function toBoolean(excelLikeBoolean) {
return Boolean(parseInt(excelLikeBoolean, 10));
}
exports.toBoolean = toBoolean;
/**
*
* @param {UnifiedCulture[]} cultures
* @returns {function(String):UnifiedCulture[]}
*/
function createCpfResolver(cultures) {
var HAS_MANY_RE = /,/g;
var HAS_GLOB_RE = /\*/g;
var filterByValues = function (parts) { return function (code_cpf) { return parts.includes(code_cpf); }; };
var filterByGlob = function (parts) { return function (code_cpf) { return parts.some(function (part) {
if (part.search(HAS_GLOB_RE) !== -1) {
return code_cpf.startsWith(part.split(HAS_GLOB_RE).at(0));
}
else {
return code_cpf === part;
}
}); }; };
/**
* We have multiple resolution strategies
* 1. one-to-one (xx.yy.zz)
* 2. one-to-explicit-many (xx.yy.z1, xx.yy.z2)
* 3. one-to-range-of-many (xx.yy.*) - correspondance_cartobio = 0
* 4. lists of all of the above (xx.yy.z1, xx.aa.*, zz.*)
*
* @param {String} selector
* @param {String=} precision
* @returns {UnifiedCulture[]}
*/
return function cpfResolver(selector, precision) {
if (precision === void 0) { precision = null; }
var parts = selector.split(HAS_MANY_RE).map(function (maybeSelector) { return maybeSelector.trim(); });
var hasGlob = selector.search(HAS_GLOB_RE) !== -1;
var strategyFn = hasGlob ? filterByGlob(parts) : filterByValues(parts);
return cultures.filter(function (_a) {
var code_cpf = _a.code_cpf;
return strategyFn(code_cpf);
});
};
}
exports.createCpfResolver = createCpfResolver;