nds-core
Version:
nds-core functionality for nds
405 lines (404 loc) • 22.7 kB
JavaScript
/**
* Nds Core
* @author Copyright(c) 2021 by Restu wahyu saputra
* MIT Licensed
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "fs", "os", "path", "is-any-type", "js-base64", "msgpack-lite", "jsonpack", "../utils/msgpack", "../utils/checking", "../utils/nodeAsync", "../utils/getFiles", "../utils/delay"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NDSCore = void 0;
const fs_1 = __importDefault(require("fs"));
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const is_any_type_1 = require("is-any-type");
const js_base64_1 = require("js-base64");
const msgpack_lite_1 = __importDefault(require("msgpack-lite"));
const jsonpack_1 = __importDefault(require("jsonpack"));
const msgpack_1 = require("../utils/msgpack");
const checking_1 = require("../utils/checking");
const nodeAsync_1 = require("../utils/nodeAsync");
const getFiles_1 = require("../utils/getFiles");
const delay_1 = require("../utils/delay");
process.env.TMP_LIN = `${os_1.default.homedir()}/`;
process.env.TMP_WIN = `${os_1.default.homedir()}/`;
(function () {
if (process.platform === 'win32') {
const isDir = fs_1.default.existsSync(path_1.default.resolve(process.env.TMP_WIN, '.nds'));
if (!isDir) {
fs_1.default.access(path_1.default.resolve(process.env.TMP_WIN), (err) => err);
fs_1.default.mkdir(path_1.default.resolve(process.env.TMP_WIN, '.nds'), (err) => err);
}
}
else {
const isDir = fs_1.default.existsSync(path_1.default.resolve(process.env.TMP_LIN, '.nds'));
if (!isDir) {
fs_1.default.access(path_1.default.resolve(process.env.TMP_LIN), (err) => err);
fs_1.default.mkdir(path_1.default.resolve(process.env.TMP_LIN, '.nds'), (err) => err);
}
}
})();
// overwrite default environtment
process.env.TMP_LIN = process.env.TMP_LIN + '.nds';
process.env.TMP_WIN = process.env.TMP_WIN + '.nds';
class NDSCore {
set(items) {
return new Promise((resolve) => {
items.forEach(async (v) => {
const pack = await Promise.resolve(jsonpack_1.default.pack);
const encodeURI = await Promise.resolve(js_base64_1.Base64.encodeURI);
if (process.platform === 'win32') {
const isDir = await nodeAsync_1.NodeAsync.existsAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN));
if (isDir) {
if ((0, js_base64_1.isValid)(v) === false) {
const key = await encodeURI(v.key);
const toString = await pack({ data: v.value });
const value = await encodeURI(toString);
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN, `.${key}.tmp`);
const writeStream = await nodeAsync_1.NodeAsync.createWriteStreamAsync(dir);
const createEncodeStream = await Promise.resolve(msgpack_lite_1.default.createEncodeStream);
const encodeStream = createEncodeStream();
encodeStream.pipe(writeStream);
encodeStream.write(await msgpack_1.Msgpack.pack({ data: value }));
encodeStream.end();
resolve(true);
}
else {
const key = await encodeURI(v.key);
const toString = await pack({ data: v.value });
const value = await encodeURI(toString);
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN));
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN, `.${key}.tmp`);
const writeStream = await nodeAsync_1.NodeAsync.createWriteStreamAsync(dir);
const createEncodeStream = await Promise.resolve(msgpack_lite_1.default.createEncodeStream);
const encodeStream = createEncodeStream();
encodeStream.pipe(writeStream);
encodeStream.write(await msgpack_1.Msgpack.pack({ data: value }));
encodeStream.end();
resolve(true);
}
}
else {
resolve(false);
}
}
else {
const isDir = await nodeAsync_1.NodeAsync.existsAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN));
if (isDir === true) {
if ((0, js_base64_1.isValid)(v) === false) {
const key = await encodeURI(v.key);
const toString = await pack({ data: v.value });
const value = await encodeURI(toString);
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN));
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN, `.${key}.tmp`);
const writeStream = await nodeAsync_1.NodeAsync.createWriteStreamAsync(dir);
const createEncodeStream = await Promise.resolve(msgpack_lite_1.default.createEncodeStream);
const encodeStream = createEncodeStream();
encodeStream.pipe(writeStream);
encodeStream.write(await msgpack_1.Msgpack.pack({ data: value }));
encodeStream.end();
resolve(true);
}
else {
const key = await encodeURI(v.key);
const toString = await pack({ data: v.value });
const value = await encodeURI(toString);
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN));
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN, `.${key}.tmp`);
const writeStream = fs_1.default.createWriteStream(dir);
const createEncodeStream = await Promise.resolve(msgpack_lite_1.default.createEncodeStream);
const encodeStream = createEncodeStream();
encodeStream.pipe(writeStream);
encodeStream.write(await msgpack_1.Msgpack.pack({ data: value }));
encodeStream.end();
resolve(true);
}
}
else {
resolve(false);
}
}
});
});
}
async get(key) {
await (0, delay_1.delay)();
return new Promise(async (resolve) => {
const keys = await (0, checking_1.keysCheck)(key);
const exist = await (0, checking_1.existCheck)(key);
const unpack = await Promise.resolve(jsonpack_1.default.unpack);
const decode = await Promise.resolve(js_base64_1.Base64.decode);
if (is_any_type_1.assert.isBoolean(exist)) {
if (process.platform === 'win32') {
let mergeBuffer = Buffer.alloc(0);
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN));
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN, `${keys}.tmp`);
const readStream = await nodeAsync_1.NodeAsync.createReadStreamAsync(dir);
const createDecodeStream = await Promise.resolve(msgpack_lite_1.default.createDecodeStream);
const decodeStream = createDecodeStream();
readStream.pipe(decodeStream).on('data', (chunk) => (mergeBuffer = Buffer.concat([mergeBuffer, chunk])));
readStream.on('end', async () => {
const unpacking = await unpack(await decode((await msgpack_1.Msgpack.unpack(mergeBuffer)).data))['data'];
resolve(unpacking);
});
}
else {
let mergeBuffer = Buffer.alloc(0);
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN));
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN, `${keys}.tmp`);
const readStream = await nodeAsync_1.NodeAsync.createReadStreamAsync(dir);
const createDecodeStream = await Promise.resolve(msgpack_lite_1.default.createDecodeStream);
const decodeStream = createDecodeStream();
readStream.pipe(decodeStream).on('data', (chunk) => (mergeBuffer = Buffer.concat([mergeBuffer, chunk])));
readStream.on('end', async () => {
const unpacking = await unpack(await decode((await msgpack_1.Msgpack.unpack(mergeBuffer)).data))['data'];
resolve(unpacking);
});
}
}
else {
resolve(undefined);
}
});
}
async remove(key) {
await (0, delay_1.delay)();
return new Promise(async (resolve) => {
const keys = await (0, checking_1.keysCheck)(key);
const exist = await (0, checking_1.existCheck)(key);
if (is_any_type_1.assert.isBoolean(exist)) {
if (process.platform === 'win32') {
const isDir = await nodeAsync_1.NodeAsync.existsAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN));
if (isDir) {
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN));
await nodeAsync_1.NodeAsync.unlinkAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN, `${keys}.tmp`));
resolve(true);
}
else {
resolve(false);
}
}
else {
const isDir = await nodeAsync_1.NodeAsync.existsAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN));
if (isDir) {
await nodeAsync_1.NodeAsync.accessAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN));
await nodeAsync_1.NodeAsync.unlinkAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN, `${keys}.tmp`));
resolve(true);
}
else {
resolve(false);
}
}
}
else {
resolve(false);
}
});
}
async clear() {
await (0, delay_1.delay)();
return new Promise(async (resolve) => {
const match = await (0, checking_1.matchCheck)();
if (match === true) {
if (process.platform === 'win32') {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
await files.forEach(async (v) => {
const data = v.replace(/^.*[/]|(.tmp)+$/gi, '');
await nodeAsync_1.NodeAsync.unlinkAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN, `${data}.tmp`));
});
resolve(true);
}
else {
resolve(false);
}
}
else {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
await files.forEach(async (v) => {
const data = v.replace(/^.*[/]|(.tmp)+$/gi, '');
await nodeAsync_1.NodeAsync.unlinkAsync(await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN, `${data}.tmp`));
});
resolve(true);
}
else {
resolve(false);
}
}
}
else {
resolve(false);
}
});
}
async allKeys() {
await (0, delay_1.delay)();
return new Promise(async (resolve) => {
const match = await (0, checking_1.matchCheck)();
if (match === true) {
if (process.platform === 'win32') {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
const res = files.map((v) => js_base64_1.Base64.decode(v.replace(/^.*[/]|(.tmp)+$/gi, '')));
resolve(res !== undefined ? res : []);
}
else {
resolve([]);
}
}
else {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
const res = files.map((v) => js_base64_1.Base64.decode(v.replace(/^.*[/]|(.tmp)+$/gi, '')));
resolve(res !== undefined ? res : []);
}
else {
resolve([]);
}
}
}
else {
resolve([]);
}
});
}
async exist(key) {
await (0, delay_1.delay)();
return new Promise(async (resolve) => {
const keys = await (0, checking_1.keysCheck)(key);
if (is_any_type_1.assert.isString(keys)) {
if (process.platform === 'win32') {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
resolve(files.length > 0 ? true : false);
}
else {
resolve(false);
}
}
else {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
resolve(files.length > 0 ? true : false);
}
else {
resolve(false);
}
}
}
else {
resolve(false);
}
});
}
async keys(key) {
await (0, delay_1.delay)();
return new Promise(async (resolve) => {
const match = await (0, checking_1.matchCheck)();
if (match === true) {
if (process.platform === 'win32') {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
const res = files.map((v) => v.replace(/^.*[/]|(.tmp)+$/gi, '')).find((v) => js_base64_1.Base64.decode(v) === key);
resolve(js_base64_1.Base64.decode(res) !== undefined ? js_base64_1.Base64.decode(res) : undefined);
}
else {
resolve(undefined);
}
}
else {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN);
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (isDir) {
const files = await (0, getFiles_1.getFiles)(dir);
const res = files.map((v) => v.replace(/^.*[/]|(.tmp)+$/gi, '')).find((v) => js_base64_1.Base64.decode(v) === key);
resolve(js_base64_1.Base64.decode(res) !== undefined ? js_base64_1.Base64.decode(res) : undefined);
}
else {
resolve(undefined);
}
}
}
else {
resolve(undefined);
}
});
}
async match() {
return new Promise(async (resolve) => {
if (process.platform === 'win32') {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_WIN);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (!isDir) {
fs_1.default.access(path_1.default.resolve(process.env.TMP_WIN), (err) => err);
fs_1.default.mkdir(path_1.default.resolve(process.env.TMP_WIN), (err) => err);
}
if (isDir) {
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isExist = await (0, getFiles_1.getFiles)(dir);
if (isExist.length > 0)
resolve(true);
else
resolve(false);
}
else {
resolve(false);
}
}
else {
const dir = await nodeAsync_1.NodeAsync.resolveAsync(process.env.TMP_LIN);
const isDir = await nodeAsync_1.NodeAsync.existsAsync(dir);
if (!isDir) {
fs_1.default.access(path_1.default.resolve(process.env.TMP_LIN), (err) => err);
fs_1.default.mkdir(path_1.default.resolve(process.env.TMP_LIN), (err) => err);
}
if (isDir) {
await nodeAsync_1.NodeAsync.accessAsync(dir);
const isExist = await (0, getFiles_1.getFiles)(dir);
if (isExist.length > 0)
resolve(true);
else
resolve(false);
}
else {
resolve(false);
}
}
});
}
}
exports.NDSCore = NDSCore;
});