UNPKG

@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
"use strict"; /** * @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;