stackpress
Version:
Incept is a content management framework.
55 lines (54 loc) • 2.85 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = plugin;
const Language_js_1 = __importDefault(require("./Language.js"));
function plugin(ctx) {
if (!ctx.config.get('language'))
return;
ctx.on('config', (_req, _res, ctx) => __awaiter(this, void 0, void 0, function* () {
ctx.register('language', Language_js_1.default.configure(ctx.config.path('language.key', 'locale'), ctx.config.path('language.languages', {})));
}));
ctx.on('listen', (_req, _res, ctx) => __awaiter(this, void 0, void 0, function* () {
const language = ctx.plugin('language');
ctx.on('request', (req, res, ctx) => __awaiter(this, void 0, void 0, function* () {
const key = ctx.config.path('language.key', 'locale');
const defaultLocale = ctx.config.path('language.locale', 'en_US');
let locale = req.data(key);
if (language.locales.includes(locale)) {
language.load(req, defaultLocale).update(locale, res);
}
const pathArray = req.url.pathname.split('/');
locale = pathArray[1];
if (language.locales.includes(locale)) {
language.load(req, defaultLocale).update(locale, res);
pathArray.splice(1, 1);
const request = ctx.request({
resource: req.resource,
body: req.body || undefined,
headers: Object.fromEntries(req.headers.entries()),
mimetype: req.mimetype,
data: req.data(),
method: req.method,
query: Object.fromEntries(req.query.entries()),
post: Object.fromEntries(req.post.entries()),
session: req.session.data,
url: new URL(req.url.origin + pathArray.join('/'))
});
yield ctx.resolve(req.method, pathArray.join('/'), request, res);
}
}));
}));
}
;