mirror of
https://github.com/flynx/pWiki.git
synced 2025-10-29 01:50:07 +00:00
FileStore seems to be mostly working...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
e8ea046652
commit
4cb65861e7
91
pwiki2.js
91
pwiki2.js
@ -573,8 +573,10 @@ function(meth, drop_cache=false, post){
|
||||
var res =
|
||||
store == null ?
|
||||
object.parentCall(MetaStore, meth, this, path, ...args)
|
||||
//: this.data[store][meth](path.slice(store.length), ...args)
|
||||
: this.data[store][target](path.slice(store.length), ...args)
|
||||
: this.data[store][target](
|
||||
// NOTE: we are normalizing for root/non-root paths...
|
||||
path.slice(path.indexOf(store)+store.length),
|
||||
...args)
|
||||
|
||||
if(drop_cache){
|
||||
delete this.__substores }
|
||||
@ -601,9 +603,13 @@ module.MetaStore = {
|
||||
return path })) },
|
||||
substore: function(path){
|
||||
path = module.path.normalize(path, 'string')
|
||||
var root = path[0] == '/'
|
||||
var store = this.substores
|
||||
.filter(function(p){
|
||||
return path.startsWith(p) })
|
||||
return path.startsWith(
|
||||
root ?
|
||||
'/'+p
|
||||
: p) })
|
||||
.sort(function(a, b){
|
||||
return a.length - b.length })
|
||||
.pop()
|
||||
@ -628,14 +634,14 @@ module.MetaStore = {
|
||||
.flat() },
|
||||
// XXX revise...
|
||||
__exists__: metaProxy('__exists__',
|
||||
// normalize path...
|
||||
function(res, store, path){
|
||||
return (res && store) ?
|
||||
// XXX which way should we go???
|
||||
//module.path.join(store, res)
|
||||
return (store && res) ?
|
||||
path
|
||||
: res }),
|
||||
__get__: metaProxy('__get__'),
|
||||
__delete__: metaProxy('__delete__', true),
|
||||
// XXX BUG: this does not create stuff in sub-store...
|
||||
__update__: metaProxy('__update__', true),
|
||||
|
||||
json: function(asstring=false){
|
||||
@ -722,12 +728,14 @@ var exists =
|
||||
module.exists =
|
||||
async function(base, sub, options={index: '.index'}){
|
||||
if(typeof(sub) != 'string'){
|
||||
options = sub
|
||||
options = sub ?? options
|
||||
sub = base
|
||||
base = '' }
|
||||
base = null }
|
||||
var {index} = options
|
||||
|
||||
var target = module.path.join(base, sub)
|
||||
var target = base ?
|
||||
module.path.join(base, sub)
|
||||
: sub
|
||||
if(!fs.existsSync(target)){
|
||||
return false }
|
||||
var stat = await fs.promises.stat(target)
|
||||
@ -738,12 +746,14 @@ var read =
|
||||
module.read =
|
||||
async function(base, sub, options={index: '.index'}){
|
||||
if(typeof(sub) != 'string'){
|
||||
options = sub
|
||||
options = sub ?? options
|
||||
sub = base
|
||||
base = '' }
|
||||
base = null }
|
||||
var {index} = options
|
||||
|
||||
var target = module.path.join(base, sub)
|
||||
var target = base ?
|
||||
module.path.join(base, sub)
|
||||
: sub
|
||||
if(!fs.existsSync(target)){
|
||||
return undefined }
|
||||
// handle dir text...
|
||||
@ -759,14 +769,16 @@ var mkdir =
|
||||
module.mkdir =
|
||||
async function(base, sub, options={index: '.index'}){
|
||||
if(typeof(sub) != 'string'){
|
||||
options = sub
|
||||
sub = base
|
||||
base = '' }
|
||||
options = sub ?? options
|
||||
sub = base
|
||||
base = null }
|
||||
var {index} = options
|
||||
|
||||
var levels = module.path.split(sub)
|
||||
for(var level of levels){
|
||||
base = module.path.join(base, level)
|
||||
base = base == null ?
|
||||
level
|
||||
: module.path.join(base, level)
|
||||
// nothing exists -- create dir and continue...
|
||||
if(!fs.existsSync(base)){
|
||||
await fs.promises.mkdir(base, {recursive: true})
|
||||
@ -787,25 +799,35 @@ async function(base, sub, options={index: '.index'}){
|
||||
var update =
|
||||
module.update =
|
||||
async function(base, sub, data, options={index: '.index'}){
|
||||
if(typeof(sub) != 'string'){
|
||||
options = sub
|
||||
if(typeof(data) != 'string'){
|
||||
options = data ?? options
|
||||
data = sub
|
||||
sub = base
|
||||
base = '' }
|
||||
base = null }
|
||||
var {index} = options
|
||||
|
||||
var target = base ?
|
||||
module.path.join(base, sub)
|
||||
: sub
|
||||
// path already exists...
|
||||
if(fs.existsSync(module.path.join(base, sub))){
|
||||
var stat = await fs.promises.stat(base)
|
||||
if(fs.existsSync(target)){
|
||||
var stat = await fs.promises.stat(target)
|
||||
if(stat.isDirectory()){
|
||||
sub = module.path.join(sub, index) }
|
||||
target = module.path.join(target, index) }
|
||||
// create path / parts of path...
|
||||
} else {
|
||||
var levels = module.path.split(sub)
|
||||
var basename = levels.pop()
|
||||
var levels = module.path.split(target)
|
||||
levels.pop()
|
||||
// ensure the parent dir exists...
|
||||
await module.mkdir(base, levels, index) }
|
||||
await module.mkdir(
|
||||
...(base ?
|
||||
// NOTE: we are keeping this separate here to avoid creating
|
||||
// anything above it...
|
||||
[base]
|
||||
: []),
|
||||
levels,
|
||||
options) }
|
||||
// write the data...
|
||||
var target = module.path.join(base, sub)
|
||||
var f = await fs.promises.open(target, 'w')
|
||||
await f.writeFile(data)
|
||||
f.close()
|
||||
@ -814,13 +836,15 @@ var clear =
|
||||
module.clear =
|
||||
async function(base, sub, options={index: '.index'}){
|
||||
if(typeof(sub) != 'string'){
|
||||
options = sub
|
||||
options = sub ?? options
|
||||
sub = base
|
||||
base = '' }
|
||||
var {index} = options
|
||||
|
||||
// remove leaf...
|
||||
var target = module.path.join(base, sub)
|
||||
var target = base == '' ?
|
||||
sub
|
||||
: module.path.join(base, sub)
|
||||
// dir...
|
||||
if(fs.existsSync(target)){
|
||||
var stat = await fs.promises.stat(target)
|
||||
@ -853,6 +877,12 @@ async function(base, sub, options={index: '.index'}){
|
||||
fs.promises.rmdir(cur) } }
|
||||
levels.pop() }
|
||||
return target }
|
||||
// XXX cleanup all sub-paths...
|
||||
var cleanup =
|
||||
module.cleanup =
|
||||
async function(base){
|
||||
// XXX
|
||||
}
|
||||
|
||||
|
||||
// XXX add monitor API...
|
||||
@ -882,7 +912,7 @@ module.FileStore = {
|
||||
return path
|
||||
.slice(that.__path__.length) })) }) }) },
|
||||
__exists__: async function(path){
|
||||
return module.exists(this.__path__, path, {index: this.__directory_text__})
|
||||
return await module.exists(this.__path__, path, {index: this.__directory_text__})
|
||||
&& path },
|
||||
__get__: async function(path){
|
||||
var p = module.path.join(this.__path__, path)
|
||||
@ -891,8 +921,9 @@ module.FileStore = {
|
||||
atime: atimeMs,
|
||||
mtime: mtimeMs,
|
||||
ctime: ctimeMs,
|
||||
text: module.read(p, {index: this.__directory_text__})
|
||||
text: await module.read(p, {index: this.__directory_text__})
|
||||
} },
|
||||
// XXX BUG: meta-store: writing to this creates a root path rather than a file...
|
||||
// XXX do we write all the data or only the .text???
|
||||
__update__: async function(path, data, mode='update'){
|
||||
return module.update(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user