loopback4-slug
Version:
Slug generator for LoopBack 4
37 lines • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SlugRepositoryMixin = exports.debug = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@loopback/core");
const slugify_1 = tslib_1.__importDefault(require("slugify"));
const keys_1 = require("../keys");
const debug_1 = tslib_1.__importDefault(require("debug"));
exports.debug = (0, debug_1.default)('loopback:slug');
/* eslint-disable @typescript-eslint/ban-ts-comment */
function SlugRepositoryMixin() {
return function (superClass) {
class SlugRepository extends superClass {
definePersistedModel(entityClass) {
(0, exports.debug)('Execute method "definePersistedModel()"');
// @ts-ignore
const modelClass = super.definePersistedModel(entityClass);
// @ts-ignore
modelClass.observe('before save', async (ctx) => {
var _a;
if (ctx.instance) {
(0, exports.debug)('Run "before save" script');
const propertyMap = (_a = core_1.MetadataInspector.getAllPropertyMetadata(keys_1.MODEL_SLUG_KEY, entityClass.prototype)) !== null && _a !== void 0 ? _a : {};
for (const [propName, propDef] of Object.entries(propertyMap)) {
(0, exports.debug)('Generate slug from field "%s" to field "%s"', propDef.field, propName);
ctx.instance[propName] = (0, slugify_1.default)(ctx.instance[propDef.field], propDef.options);
}
}
});
return modelClass;
}
}
return SlugRepository;
};
}
exports.SlugRepositoryMixin = SlugRepositoryMixin;
//# sourceMappingURL=slug.repository.js.map