@agencebio/rosetta-cultures
Version:
Traduction des codes cultures de la CPF vers la PAC vers des nomenclatures d'organismes de certification, et vice-versa.
170 lines (169 loc) • 5.66 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromCepageCode = exports.fromCodeGeofolia = exports.fromCodeCpf = exports.fromCodePacAll = exports.fromCodePacFirst = exports.fromCodePacStrict = exports.attachPAC = exports.getCulturePAC = void 0;
/**
* Built with `npm run build`
*
* @type {{
* CPF: Array<CPFCulture>,
* PAC: Array<PacCulture>
* }}
*/
var cpf_json_1 = __importDefault(require("../data/cpf.json"));
/**
* @typedef {import('../index.js').Cepage} Cepage
*/
/**
* Built with `npm run build`
*
* @type {Object.<String, Cepage>}
*/
var cepages_json_1 = __importDefault(require("../data/cepages.json"));
/**
* @typedef {import('../index.js').UnifiedCulture} UnifiedCulture
* @typedef {import('../index.js').PacCulture} PacCulture
* @typedef {import('../index.js').CPFCulture} CPFCulture
*/
function getCulturePAC(codePac, precisionPac) {
if (precisionPac === void 0) { precisionPac = ''; }
return cpf_json_1.default.PAC.find(function (_a) {
var code = _a.code, precision = _a.precision;
return code === codePac && precision === precisionPac;
});
}
exports.getCulturePAC = getCulturePAC;
/**
* @param {CPFCulture?} culture
* @return {UnifiedCulture|undefined|null}
*/
function attachPAC(culture) {
if (culture === null)
return null;
if (!culture)
return;
return __assign(__assign({}, culture), { cultures_pac: culture.cultures_pac.map(function (_a) {
var codePac = _a[0], codePrecision = _a[1];
var culture_pac = getCulturePAC(codePac, codePrecision);
if (!culture_pac) {
throw new TypeError("Missing PAC culture ".concat(codePac, " with precision ").concat(codePrecision));
}
return culture_pac;
}) });
}
exports.attachPAC = attachPAC;
/**
* @param {String} code
* @param {String=} precision
* @returns {?UnifiedCulture}
*/
function fromCodePacStrict(code, precision) {
var _a;
var allMatchs = fromCodePacAll(code, precision);
var codes = allMatchs.map(function (_a) {
var code_cpf = _a.code_cpf;
return code_cpf;
});
var commonPrefix = codes.reduce(function (acc, code) {
var i = 0;
while (code[i] === acc[i] && i < acc.length) {
i++;
}
return code.slice(0, i);
}, (_a = codes[0]) !== null && _a !== void 0 ? _a : '').replace(/\.$/, "").split(".");
if (commonPrefix.length < 2) {
return null;
}
var commonPrefixString = commonPrefix.join(".");
return attachPAC(cpf_json_1.default.CPF.find(function (_a) {
var code_cpf = _a.code_cpf;
return code_cpf === commonPrefixString;
}));
}
exports.fromCodePacStrict = fromCodePacStrict;
/**
* @param {String} code
* @param {String=} precision
* @returns {?UnifiedCulture}
*/
function fromCodePacFirst(code, precision) {
return fromCodePacAll(code, precision)[0] || null;
}
exports.fromCodePacFirst = fromCodePacFirst;
/**
* Return all CPF codes associated to a given PAC code
*
* @param {String} code
* @param {String=} precision
* @returns {UnifiedCulture[]}
*/
function fromCodePacAll(code, precision) {
if (precision === void 0) { precision = null; }
if (precision) {
var cleanedPrecision_1 = String(precision).padStart(3, '0');
var results = cpf_json_1.default.CPF.filter(function (_a) {
var cultures_pac = _a.cultures_pac;
return cultures_pac.some(function (_a) {
var code_pac = _a[0], code_precision = _a[1];
return code_pac === code && code_precision === cleanedPrecision_1;
});
});
if (results.length) {
return results.map(attachPAC);
}
}
// otherwise, and in any case, we lookup results without precision
return cpf_json_1.default.CPF.filter(function (_a) {
var cultures_pac = _a.cultures_pac;
return cultures_pac.some(function (_a) {
var code_pac = _a[0], code_precision = _a[1];
return code_pac === code && code_precision === '';
});
}).map(attachPAC);
}
exports.fromCodePacAll = fromCodePacAll;
/**
* @param {String} code
* @returns {UnifiedCulture}
*/
function fromCodeCpf(code) {
return attachPAC(cpf_json_1.default.CPF.find(function (_a) {
var code_cpf = _a.code_cpf;
return code_cpf === code;
}));
}
exports.fromCodeCpf = fromCodeCpf;
/**
* @param {String} code
* @returns {UnifiedCulture|null}
*/
function fromCodeGeofolia(code) {
var _a;
if (typeof code !== 'string') {
return null;
}
var cleanCode = code.trim().replace(/\s+/g, ' ');
return attachPAC((_a = cpf_json_1.default.CPF.find(function (_a) {
var codes_geofolia = _a.codes_geofolia;
return codes_geofolia.includes(cleanCode);
})) !== null && _a !== void 0 ? _a : null);
}
exports.fromCodeGeofolia = fromCodeGeofolia;
function fromCepageCode(code) {
var _a;
return (_a = cepages_json_1.default[String(code)]) !== null && _a !== void 0 ? _a : null;
}
exports.fromCepageCode = fromCepageCode;