@live-change/filesystem-plugin 0.1.1 → 0.5.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/index.js +43 -29
  3. package/package.json +5 -4
package/README.md CHANGED
@@ -1 +1 @@
1
- # session-service
1
+ # filesystem-plugin
package/index.js CHANGED
@@ -77,51 +77,58 @@ async function getContent(filename) {
77
77
  return fs.promises.readFile(filename, { encoding: 'utf8' })
78
78
  }
79
79
 
80
- async function observableContent(filename) {
81
- return observableFile(filename, (name, stat) => fs.promises.readFile(name, { encoding: 'utf8' }))
80
+ async function observableContent(filename, decoder = x=>x) {
81
+ return observableFile(filename,
82
+ (name, stat) => fs.promises.readFile(name, { encoding: 'utf8' })
83
+ .then(result => decoder(result))
84
+ )
82
85
  }
83
86
 
84
87
  const entryCompare = (a,b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0
85
88
 
86
- async function getList(dir, filter) {
89
+ async function getList(dir, filter, mapper) {
87
90
  const list = await fs.promises.readdir(dir, { withFileTypes: true })
88
- const entries = await Promise.all(list.map(async entry => ({
91
+ let entries = await Promise.all(list.map(async entry => ({
89
92
  name: entry.name,
90
93
  isDirectory: entry.isDirectory(),
91
94
  stat: await fs.promises.stat(path.resolve(dir, entry.name))
92
95
  })))
93
- return entries.filter(filter).sort(entryCompare)
96
+ if(mapper) entries = await Promise.all(entries.map(entry => mapper(entry)))
97
+ if(filter) entries = entries.filter(filter)
98
+ return entries.sort(entryCompare)
94
99
  }
95
100
 
96
- async function observableList(dir, filter) {
101
+ async function observableList(dir, filter, mapper) {
97
102
  const observable = new Dao.ObservableList()
98
103
  let watcher
99
104
  const oldDispose = observable.dispose
100
105
  const oldRespawn = observable.respawn
101
106
  const watch = async () => {
102
107
  if(watcher) watcher.close()
103
- const list = await getList(dir, filter)
108
+ const list = await getList(dir, filter, mapper)
104
109
  observable.set(list)
105
110
  watcher = chokidar.watch(dir, { depth: 0, alwaysStat: true })
106
111
  watcher.on('add', async (name, stat) => {
107
112
  if(path.dirname(name) != dir) return
108
113
  name = path.relative(dir, name)
109
- const entry = {
114
+ let entry = {
110
115
  name,
111
116
  isDirectory: false,
112
117
  stat
113
118
  }
114
- if(filter(entry)) observable.putByField('name', name, entry)
119
+ if(mapper) entry = await mapper(entry)
120
+ if(filter && filter(entry)) observable.putByField('name', name, entry)
115
121
  })
116
122
  watcher.on('change', async (name, stat) => {
117
123
  if(path.dirname(name) != dir) return
118
124
  name = path.relative(dir, name)
119
- const entry = {
125
+ let entry = {
120
126
  name,
121
127
  isDirectory: false,
122
128
  stat
123
129
  }
124
- if(fitler(entry)) observable.putByField('name', name, entry)
130
+ if(mapper) entry = await mapper(entry)
131
+ if(filter && fitler(entry)) observable.putByField('name', name, entry)
125
132
  })
126
133
  watcher.on('unlink', async (name) => {
127
134
  if(path.dirname(name) != dir) return
@@ -131,12 +138,13 @@ async function observableList(dir, filter) {
131
138
  watcher.on('addDir', async (name, stat) => {
132
139
  if(path.dirname(name) != dir) return
133
140
  name = path.relative(dir, name)
134
- const entry = {
141
+ let entry = {
135
142
  name,
136
143
  isDirectory: true,
137
144
  stat
138
145
  }
139
- if(filter(entry)) observable.putByField('name', name, entry)
146
+ if(mapper) entry = await mapper(entry)
147
+ if(filter && filter(entry)) observable.putByField('name', name, entry)
140
148
  })
141
149
  watcher.on('unlinkDir', async (name, stat) => {
142
150
  if(path.dirname(name) != dir) return
@@ -157,7 +165,7 @@ async function observableList(dir, filter) {
157
165
  return observable
158
166
  }
159
167
 
160
- async function getTree(dir, prefix = '', filter) {
168
+ async function getTree(dir, prefix = '', filter, mapper) {
161
169
  const list = await fs.promises.readdir(dir, { withFileTypes: true })
162
170
  const entriesLists = await Promise.all(list.map(async entry => {
163
171
  if(entry.isDirectory()) {
@@ -175,38 +183,43 @@ async function getTree(dir, prefix = '', filter) {
175
183
  }
176
184
  }
177
185
  }))
178
- return entriesLists.flat().filter(filter).sort(entryCompare)
186
+ let entries = entriesLists.flat()
187
+ if(mapper) entries = await Promise.all(entries.map(entry => mapper(entry)))
188
+ if(filter) entries = entries.filter(filter)
189
+ return entries.sort(entryCompare)
179
190
  }
180
191
 
181
- async function observableTree(dir, filter) {
192
+ async function observableTree(dir, filter, mapper) {
182
193
  const observable = new Dao.ObservableList()
183
194
  let watcher
184
195
  const oldDispose = observable.dispose
185
196
  const oldRespawn = observable.respawn
186
197
  const watch = async () => {
187
198
  if(watcher) watcher.close()
188
- const list = await getTree(dir, filter)
199
+ const list = await getTree(dir, filter, mapper)
189
200
  observable.set(list)
190
201
  watcher = chokidar.watch(dir, { depth: 99, alwaysStat: true })
191
202
  watcher.on('add', async (name, stat) => {
192
203
  if(path.dirname(name) != dir) return
193
204
  name = path.relative(dir, name)
194
- const entry = {
205
+ let entry = {
195
206
  name,
196
207
  isDirectory: false,
197
208
  stat
198
209
  }
199
- if(filter(entry)) observable.putByField('name', name, entry)
210
+ if(mapper) entry = await mapper(entry)
211
+ if(filter && filter(entry)) observable.putByField('name', name, entry)
200
212
  })
201
213
  watcher.on('change', async (name, stat) => {
202
214
  if(path.dirname(name) != dir) return
203
215
  name = path.relative(dir, name)
204
- const entry = {
216
+ let entry = {
205
217
  name,
206
218
  isDirectory: false,
207
219
  stat
208
220
  }
209
- if(filter(entry)) observable.putByField('name', name, entry)
221
+ if(mapper) entry = await mapper(entry)
222
+ if(filter && filter(entry)) observable.putByField('name', name, entry)
210
223
  })
211
224
  watcher.on('unlink', async (name) => {
212
225
  if(path.dirname(name) != dir) return
@@ -216,12 +229,13 @@ async function observableTree(dir, filter) {
216
229
  watcher.on('addDir', async (name, stat) => {
217
230
  if(path.dirname(name) != dir) return
218
231
  name = path.relative(dir, name)
219
- const entry = {
232
+ let entry = {
220
233
  name,
221
234
  isDir: true,
222
235
  stat
223
236
  }
224
- if(filter(entry)) observable.putByField('name', name, entry)
237
+ if(mapper) entry = await mapper(entry)
238
+ if(filter && filter(entry)) observable.putByField('name', name, entry)
225
239
  })
226
240
  watcher.on('unlinkDir', async (name, stat) => {
227
241
  if(path.dirname(name) != dir) return
@@ -249,16 +263,16 @@ const filesystemDao = new Dao.SimpleDao({
249
263
  observable: (filename) => observableStat(filename)
250
264
  },
251
265
  content: {
252
- get: (filename) => getContent(filename),
253
- observable: (filename) => observableContent(filename)
266
+ get: (filename, decoder = x=>x ) => getContent(filename, decoder),
267
+ observable: (filename, decoder = x=>x ) => observableContent(filename, decoder)
254
268
  },
255
269
  list: {
256
- get: (dir, filterSpec) => getList(dir, createFilter(filterSpec)),
257
- observable: (dir, filterSpec) => observableList(dir, createFilter(filterSpec))
270
+ get: (dir, filterSpec, mapper) => getList(dir, createFilter(filterSpec), mapper),
271
+ observable: (dir, filterSpec, mapper) => observableList(dir, createFilter(filterSpec), mapper)
258
272
  },
259
273
  tree: {
260
- get: (dir, filterSpec) => getTree(dir, '', createFilter(filterSpec)),
261
- observable: (dir, filterSpec) => observableTree(dir, createFilter(filterSpec))
274
+ get: (dir, filterSpec, mapper) => getTree(dir, '', createFilter(filterSpec), mapper),
275
+ observable: (dir, filterSpec, mapper) => observableTree(dir, createFilter(filterSpec), mapper)
262
276
  }
263
277
  },
264
278
  methods: {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/filesystem-plugin",
3
- "version": "0.1.1",
3
+ "version": "0.5.19",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -21,7 +21,8 @@
21
21
  "url": "https://www.viamage.com/"
22
22
  },
23
23
  "dependencies": {
24
- "chokidar": "^3.5.2",
25
- "blue-tape": "^1.0.0"
26
- }
24
+ "blue-tape": "^1.0.0",
25
+ "chokidar": "^3.5.2"
26
+ },
27
+ "gitHead": "2c25ed68487762fe4ca36208b708ac7aa7506852"
27
28
  }