@foxpage/foxpage-manager
Version:
foxpage resource manager
44 lines (43 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.storeContent = exports.resolveContentPath = exports.resolveContentDir = exports.FOXPAGE_CONTENT_FILE = exports.FOXPAGE_CONTENT = void 0;
const path_1 = require("path");
const fs_extra_1 = require("fs-extra");
const common_1 = require("../common");
const locker_1 = require("./locker");
exports.FOXPAGE_CONTENT = 'contents';
exports.FOXPAGE_CONTENT_FILE = '.json';
const DIR_MARK = `${process.platform === 'win32' ? '\\' : '/'}`;
function resolveContentDir(appId, dirs) {
return (0, path_1.join)(common_1.FOXPAGE_ROOT, appId, exports.FOXPAGE_CONTENT, ...dirs);
}
exports.resolveContentDir = resolveContentDir;
function resolveContentPath(appId, dirs) {
const filename = dirs.pop();
const dir = resolveContentDir(appId, dirs);
const filePath = (0, path_1.join)(dir, `${filename}${exports.FOXPAGE_CONTENT_FILE}`);
return filePath;
}
exports.resolveContentPath = resolveContentPath;
async function storeContent(filePath, content) {
if (!content) {
return;
}
if (await (0, fs_extra_1.pathExists)(filePath)) {
return;
}
let lockStr = filePath.replace('.json', '-locked');
// TODO:
const pkgMark = `contents${DIR_MARK}packages`;
const [dir, value] = lockStr.split(pkgMark);
if (value) {
const layers = Array.from(value.split(DIR_MARK));
const last = layers.pop();
lockStr = dir + pkgMark + (layers.join(DIR_MARK) + '-' + last).replace(':', '_').replace(/\./g, '-');
}
// for record cache time
//@ts-ignore
content._lastModified = new Date().getTime();
await (0, locker_1.withLock)(lockStr, () => (0, fs_extra_1.outputJSON)(filePath, content, { spaces: 2, flag: 'wx' }));
}
exports.storeContent = storeContent;