59 lines
2.1 KiB
JavaScript
59 lines
2.1 KiB
JavaScript
![]() |
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
const ensureEndingSlash_1 = __importDefault(require("./ensureEndingSlash"));
|
||
|
const ensureLeadingSlash_1 = __importDefault(require("./ensureLeadingSlash"));
|
||
|
function removeLeadingSlash(path) {
|
||
|
return path.replace(/^\//, '');
|
||
|
}
|
||
|
function toUtcTime(date) {
|
||
|
let year = 1970;
|
||
|
let month = 0;
|
||
|
let day = 1;
|
||
|
if (typeof date === 'string') {
|
||
|
const [yearStr, monthStr, dayStr] = date.split('-');
|
||
|
year = parseInt(yearStr, 10);
|
||
|
month = parseInt(monthStr, 10) - 1;
|
||
|
day = parseInt(dayStr, 10);
|
||
|
}
|
||
|
else if (date instanceof Date) {
|
||
|
// If `date` is an instance of Date,
|
||
|
// it's because it was parsed from the frontmatter
|
||
|
// by js-yaml, which always assumes UTC
|
||
|
return date.getTime();
|
||
|
}
|
||
|
return Date.UTC(year, month, day);
|
||
|
}
|
||
|
function addTzOffset(utc) {
|
||
|
const utcDate = new Date(utc);
|
||
|
return new Date(utc + utcDate.getTimezoneOffset() * 60 * 1000);
|
||
|
}
|
||
|
module.exports = function getPermalink({ pattern, slug, date, regularPath, localePath = '/' }) {
|
||
|
if (!pattern) {
|
||
|
return;
|
||
|
}
|
||
|
slug = encodeURI(slug);
|
||
|
const d = addTzOffset(toUtcTime(date));
|
||
|
const year = d.getFullYear();
|
||
|
const iMonth = d.getMonth() + 1;
|
||
|
const iDay = d.getDate();
|
||
|
const minutes = d.getMinutes();
|
||
|
const seconds = d.getSeconds();
|
||
|
const month = iMonth < 10 ? `0${iMonth}` : iMonth;
|
||
|
const day = iDay < 10 ? `0${iDay}` : iDay;
|
||
|
pattern = removeLeadingSlash(pattern);
|
||
|
const link = localePath
|
||
|
+ pattern
|
||
|
.replace(/:year/, String(year))
|
||
|
.replace(/:month/, String(month))
|
||
|
.replace(/:i_month/, String(iMonth))
|
||
|
.replace(/:i_day/, String(iDay))
|
||
|
.replace(/:day/, String(day))
|
||
|
.replace(/:minutes/, String(minutes))
|
||
|
.replace(/:seconds/, String(seconds))
|
||
|
.replace(/:slug/, slug)
|
||
|
.replace(/:regular/, removeLeadingSlash(regularPath));
|
||
|
return ensureLeadingSlash_1.default(ensureEndingSlash_1.default(link));
|
||
|
};
|