dbay
Version:
In-Process, In-Memory & File-Based Relational Data Processing with SQLite, BetterSQLite3
183 lines (161 loc) • 6.35 kB
JavaScript
(function() {
'use strict';
var FS, GUY, LFT, PATH, alert, debug, def, def_oneoff, echo, help, hide, info, inspect, log, plain, praise, rpr, shm_path, urge, warn, whisper;
//###########################################################################################################
GUY = require('guy');
({alert, debug, help, info, plain, praise, urge, warn, whisper} = GUY.trm.get_loggers('DBAY/HELPERS'));
({rpr, inspect, echo, log} = GUY.trm);
//...........................................................................................................
PATH = require('path');
FS = require('fs');
shm_path = '/dev/shm';
LFT = require('letsfreezethat');
//-----------------------------------------------------------------------------------------------------------
this.is_directory = function(path) {
var error;
try {
return (FS.statSync(path)).isDirectory();
} catch (error1) {
error = error1;
if (error.code !== 'ENOENT') {
throw error;
}
}
return false;
};
//-----------------------------------------------------------------------------------------------------------
this.is_file = function(path) {
var error;
try {
return (FS.statSync(path)).isFile();
} catch (error1) {
error = error1;
if (error.code !== 'ENOENT') {
throw error;
}
}
return false;
};
//-----------------------------------------------------------------------------------------------------------
this.unlink_file = function(path) {
var error;
try {
/* Given a `path`, unlink the associated file; in case no file is found, ignore silently. If an error
occurs, just print a warning. To be used in an exit handler, so no error handling makes sense here. */
FS.unlinkSync(path);
} catch (error1) {
error = error1;
if (error.code !== 'ENOENT') {
warn('^dbay@1^', error.message);
}
}
return null;
};
//-----------------------------------------------------------------------------------------------------------
this.autolocation = this.is_directory(shm_path) ? shm_path : (require('os')).tmpdir();
//-----------------------------------------------------------------------------------------------------------
this.SQL = function(parts, ...expressions) {
var R, expression, i, idx, len;
R = parts[0];
for (idx = i = 0, len = expressions.length; i < len; idx = ++i) {
expression = expressions[idx];
R += expression.toString() + parts[idx + 1];
}
return R;
};
//-----------------------------------------------------------------------------------------------------------
this.omit_nullish = function(d) {
var R, k, v;
R = {};
for (k in d) {
v = d[k];
if (v != null) {
R[k] = v;
}
}
return R;
};
//-----------------------------------------------------------------------------------------------------------
this.def = def = Object.defineProperty;
this.hide = hide = (object, name, value) => {
return Object.defineProperty(object, name, {
enumerable: false,
writable: true,
configurable: true,
value: value
});
};
//-----------------------------------------------------------------------------------------------------------
this._pick_with_fallback = function(d, fallback, ...keys) {
var R, i, key, len, value;
R = {};
keys = keys.flat(2e308);
for (i = 0, len = keys.length; i < len; i++) {
key = keys[i];
R[key] = (value = d[key]) === void 0 ? fallback : value;
}
return [R, keys];
};
//-----------------------------------------------------------------------------------------------------------
this.pick_with_fallback = function(d, fallback, ...keys) {
return (this._pick_with_fallback(d, fallback, keys))[0];
};
//-----------------------------------------------------------------------------------------------------------
this.pluck_with_fallback = function(d, fallback, ...keys) {
var R, i, key, len;
[R, keys] = this._pick_with_fallback(d, fallback, ...keys);
for (i = 0, len = keys.length; i < len; i++) {
key = keys[i];
delete d[key];
}
return R;
};
//-----------------------------------------------------------------------------------------------------------
this.def_oneoff = def_oneoff = (object, name, cfg, method) => {
var get;
get = function() {
var R, ref, ref1;
R = method.apply(object);
delete cfg.get;
def(object, name, {
configurable: (ref = cfg.configurable) != null ? ref : true,
enumerable: (ref1 = cfg.enumerable) != null ? ref1 : true,
value: R
});
return R;
};
def(object, name, {
enumerable: true,
configurable: true,
get
});
return null;
};
//-----------------------------------------------------------------------------------------------------------
this.configure_with_types = (self, cfg = null, types = null) => {
var clasz, defaults, props, ref, ref1, ref2;
({props} = require('..'));
clasz = self.constructor;
//.........................................................................................................
/* assign defaults object where to be found to obtain viable `cfg` object: */
defaults = (ref = (ref1 = clasz.C) != null ? (ref2 = ref1.defaults) != null ? ref2.constructor_cfg : void 0 : void 0) != null ? ref : null;
self.cfg = {...defaults, ...cfg};
//.........................................................................................................
/* procure `types` where not given; make it a non-enumerable to avoid rpr of object: */
if (types == null) {
types = new (require('intertype')).Intertype();
}
this.def(self, 'types', {
enumerable: false,
value: types
});
if (clasz.declare_types != null) {
//.........................................................................................................
/* call class method `declare_types()`; this method may perform `self.types.validate.constructor_cfg self.cfg`: */
clasz.declare_types(self);
}
self.cfg = LFT.freeze(self.cfg);
return void 0;
};
}).call(this);
//# sourceMappingURL=helpers.js.map