ac-storage 0.10.0

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 (41) hide show
  1. package/_TESTPATH/ac-drop/.acstorage +8 -0
  2. package/dist/bundle.cjs +1784 -0
  3. package/dist/bundle.cjs.map +1 -0
  4. package/dist/bundle.mjs +1746 -0
  5. package/dist/bundle.mjs.map +1 -0
  6. package/dist/features/StorageAccess/StorageAccess.d.ts +14 -0
  7. package/dist/features/StorageAccess/index.d.ts +3 -0
  8. package/dist/features/StorageAccess/types.d.ts +20 -0
  9. package/dist/features/StorageAccessControl/StorageAccessControl.d.ts +22 -0
  10. package/dist/features/StorageAccessControl/errors.d.ts +13 -0
  11. package/dist/features/StorageAccessControl/index.d.ts +4 -0
  12. package/dist/features/StorageAccessControl/types.d.ts +15 -0
  13. package/dist/features/TreeExplorer/TreeExplorer.d.ts +14 -0
  14. package/dist/features/TreeExplorer/TreeExplorer.test.d.ts +1 -0
  15. package/dist/features/TreeExplorer/index.d.ts +2 -0
  16. package/dist/features/accessors/BinaryAccessor.d.ts +13 -0
  17. package/dist/features/accessors/JSONAccessor/JSONAccessor.d.ts +30 -0
  18. package/dist/features/accessors/JSONAccessor/JSONAccessor.test.d.ts +1 -0
  19. package/dist/features/accessors/JSONAccessor/MemJSONAccessor.d.ts +9 -0
  20. package/dist/features/accessors/JSONAccessor/index.d.ts +2 -0
  21. package/dist/features/accessors/MemBinaryAccessor.d.ts +12 -0
  22. package/dist/features/accessors/MemTextAccessor.d.ts +11 -0
  23. package/dist/features/accessors/TextAccessor.d.ts +12 -0
  24. package/dist/features/accessors/errors.d.ts +3 -0
  25. package/dist/features/accessors/index.d.ts +7 -0
  26. package/dist/features/accessors/types.d.ts +25 -0
  27. package/dist/features/storage/FSStorage.d.ts +28 -0
  28. package/dist/features/storage/IStorage.d.ts +20 -0
  29. package/dist/features/storage/MemStorage.d.ts +7 -0
  30. package/dist/features/storage/errors.d.ts +3 -0
  31. package/dist/features/storage/index.d.ts +4 -0
  32. package/dist/index.d.ts +282 -0
  33. package/dist/test/entry.test.d.ts +1 -0
  34. package/dist/test/storage-access-control.test.d.ts +1 -0
  35. package/dist/test/storage-accessor.test.d.ts +1 -0
  36. package/dist/test/storage-fs.test.d.ts +1 -0
  37. package/dist/test/storage.test.d.ts +1 -0
  38. package/dist/test-utils/index.d.ts +1 -0
  39. package/dist/types/json.d.ts +13 -0
  40. package/dist/types/storage-access.d.ts +20 -0
  41. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.cjs","sources":["../node_modules/@hve/json-accessor/dist/bundle.mjs","../src/features/accessors/JSONAccessor/JSONAccessorManager.ts","../src/features/accessors/errors.ts","../src/features/accessors/BinaryAccessor/BinaryAccessor.ts","../src/features/accessors/BinaryAccessor/MemBinaryAccessor.ts","../src/features/accessors/BinaryAccessor/BinaryAccessorManager.ts","../src/features/accessors/TextAccessor/TextAccessor.ts","../src/features/accessors/TextAccessor/MemTextAccessor.ts","../src/features/accessors/TextAccessor/TextAccessorManager.ts","../src/errors/AccessorManagerError.ts","../src/features/accessors/CustomAccessor/CustomAccessorManager.ts","../src/features/accessors/MetaAccessor/RootAccessorManager.ts","../node_modules/fast-deep-equal/index.js","../src/features/accessors/MetaAccessor/DirectoryAccessor.ts","../src/features/accessors/MetaAccessor/MemDirectoryAccessor.ts","../src/features/accessors/MetaAccessor/DirectoryAccessorManager.ts","../node_modules/tree-navigate/dist/bundle.mjs","../src/features/storage/errors.ts","../src/features/StorageAccessControl/errors.ts","../src/features/StorageAccessControl/StorageAccessControl.ts","../src/features/storage/ACSubStorage.ts","../src/features/storage/ACStorage.ts","../src/features/storage/MemACStorage.ts","../src/features/StorageAccess/StorageAccess.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport * as fs from 'node:fs/promises';\n\nclass e extends Error{constructor(e){super(e),this.name=\"TreeNavigateError\";}}const t=\"--tree-leaf\";var i;class r{#e={};#t=\".\";#i=false;#r=true;constructor(){}static from(e,t={}){const r=new i;return r.#e=e,r.#t=t.delimiter??\".\",r.#i=t.allowWildcard??false,r.#r=t.allowRecursiveWildcard??true,r}subtree(t){const r=t.split(this.#t),a=this.#a(r,this.#e);if(!a)throw new e(`Path '${t}' does not exist`);if(i.#l(a.value)||i.#s(a.value))throw new e(`Path '${t}' is not a subtree`);const l=a.path.reduce(((e,t)=>e[t]),this.#e),s=new i;return s.#e=l,s.#t=this.#t,s.#i=this.#i,s}get(e,t){return this.walk(e,t)?.value??null}walk(e,t={}){if(\"\"===e)return t.allowIntermediate?{value:this.#e,path:[]}:null;const r=e.split(this.#t),a=this.#a(r,this.#e);if(!a)return null;const l=a.value;return i.#l(l)?a:i.#s(l)?{value:l.value,path:a.path}:t.allowIntermediate?a:null}trace(e){const t=e.split(this.#t),r={treePath:[]},a=this.#a(t,this.#e,r);let l,s;if(a){const e=a.value;return i.#l(e)?(l=true,s=e):i.#s(e)?(l=true,s=e.value):(l=false,s=e),{find:true,isLeaf:l,value:s,nodePath:a?.path??[],tracePath:r.treePath,untracePath:t}}return {find:false,isLeaf:false,value:void 0,nodePath:[],tracePath:r.treePath,untracePath:t}}#a(e,t,r={treePath:[]}){const{treePath:a}=r,l=e.shift();if(null==l)return {value:t,path:[]};if(\"object\"!=typeof t||i.#s(t))return e.unshift(l),null;if(a.push(l),l in t){const i=this.#a(e,t[l],r);if(i)return {value:i.value,path:[l,...i.path]}}else if(this.#i){if(\"*\"in t){const i=this.#a(e,t[\"*\"],r);if(i)return {value:i.value,path:[\"*\",...i.path]}}if(this.#r&&\"**/*\"in t)return {value:t[\"**/*\"],path:[\"**/*\"]}}return null}static#l(e){return null==e||\"object\"!=typeof e}static#s(e){return 1==e[t]}}i=r;\n\nclass JSONAccessorError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AccessorError';\n }\n}\n\nconst JSON_TYPE_FLAG = '--json-type';\n\nclass BaseJSONTypeLeaf {\n [t] = true;\n value;\n constructor(type) {\n this.value = {\n [JSON_TYPE_FLAG]: true,\n type,\n default_value: undefined,\n nullable: false\n };\n }\n nullable() {\n this.value.nullable = true;\n return this;\n }\n toJSON() {\n return {\n [t]: true,\n value: this.value\n };\n }\n}\n\nclass NumberJSONTypeLeaf extends BaseJSONTypeLeaf {\n constructor() {\n super('number');\n }\n default_value(value) {\n this.value.default_value = value;\n return this;\n }\n}\nclass StringJSONTypeLeaf extends BaseJSONTypeLeaf {\n constructor() {\n super('string');\n }\n default_value(value) {\n this.value.default_value = value;\n return this;\n }\n}\nclass BooleanJSONTypeLeaf extends BaseJSONTypeLeaf {\n constructor() {\n super('boolean');\n this.value.default_value = false;\n }\n default_value(value) {\n this.value.default_value = value;\n return this;\n }\n}\n\nclass StructJSONTypeLeaf extends BaseJSONTypeLeaf {\n constructor() {\n super('struct');\n // this.value.struct = jsonTree;\n }\n}\n\nclass ArrayJSONTypeLeaf extends BaseJSONTypeLeaf {\n constructor(jsonTree) {\n super('array');\n this.value['struct'] = jsonTree;\n }\n}\n\nclass UnionJSONTypeLeaf extends BaseJSONTypeLeaf {\n constructor(...candidates) {\n super('union');\n this.value['candidates'] = candidates.map((candidate) => {\n if (candidate instanceof BaseJSONTypeLeaf) {\n return candidate.value;\n }\n else {\n return candidate;\n }\n });\n }\n default_value(value) {\n this.value.default_value = value;\n return this;\n }\n}\n\nfunction isJSONTypeData(target) {\n return target != null && typeof target === 'object' && target[JSON_TYPE_FLAG] === true;\n}\nconst JSONType = {\n Union: (...candidates) => new UnionJSONTypeLeaf(...candidates),\n String: () => new StringJSONTypeLeaf(),\n Number: () => new NumberJSONTypeLeaf(),\n Bool: () => new BooleanJSONTypeLeaf(),\n Struct: () => new StructJSONTypeLeaf(),\n Array: (jsonTree) => new ArrayJSONTypeLeaf(jsonTree),\n Any: () => new BaseJSONTypeLeaf('any'),\n};\n\nfunction getJSONTypeName(value) {\n if (Array.isArray(value))\n return 'array';\n const typeName = typeof value;\n switch (typeName) {\n case 'string':\n case 'boolean':\n case 'number':\n return typeName;\n case 'object':\n return 'struct';\n default:\n return null;\n }\n}\nfunction isDataTypeCompatible(target, jsonTypeData) {\n if (typeof jsonTypeData === 'object') {\n const targetType = getJSONTypeName(target);\n if (targetType === null) {\n return false;\n }\n else if (targetType === 'null') {\n return jsonTypeData.nullable;\n }\n else if (jsonTypeData.type === 'any') {\n return true;\n }\n else if (jsonTypeData.type === 'union') {\n for (const candidate of jsonTypeData.candidates) {\n if (isDataTypeCompatible(target, candidate)) {\n return true;\n }\n }\n return false;\n }\n else {\n return (targetType === jsonTypeData.type);\n }\n }\n else {\n return target === jsonTypeData;\n }\n}\n/**\n * 중첩된 객체의 경로를 찾아, 마지막 객체와 키를 반환\n *\n * @param contents 객체\n * @param target \".\"로 구분되는 경로 문자열. 예) \"layer1.layer2.item\"\n * @param createIfMissing 경로 중간에 객체가 없을 경우, 생성할지 여부. false인 경우 undefined 반환\n * @returns\n */\nfunction resolveNestedRef(contents, target, createIfMissing = false) {\n if (target === '')\n return undefined;\n const keys = target.split('.');\n let ref = contents;\n const size = keys.length - 1;\n for (let i = 0; i < size; i++) {\n const key = keys[i];\n if (!(key in ref)) {\n if (!createIfMissing)\n return undefined;\n ref[key] = {};\n }\n ref = ref[key];\n }\n return {\n parent: ref,\n key: keys[size],\n };\n}\n\nvar _a;\nclass ObjectFlatter {\n #treeNavigate;\n #structTreeNavigates = {};\n #delimiter = '.';\n constructor(jsonTreeNavigate) {\n this.#treeNavigate = jsonTreeNavigate;\n }\n /**\n * [string, any] 형식의 데이터에 대한 유효성 검사 후 변환.\n *\n * 현 구현에서는 입력 값 그대로 반환되며 유효성 검사만 진행됨.\n *\n * @param data [key, value] 형식의 배열\n * @returns\n */\n transform(data) {\n return data.flatMap(([key, value]) => {\n if (this.#treeNavigate) {\n return this.#transform({\n key: key,\n value: value,\n navigator: this.#treeNavigate,\n });\n }\n else {\n return [[key, value]];\n }\n });\n }\n #transform({ key, value, navigator }) {\n if (key === '') {\n throw new JSONAccessorError(`Invalid path: ${key}`);\n }\n if (this.#treeNavigate == null)\n return [[key, value]];\n const traceResult = this.#treeNavigate.trace(key);\n if (traceResult.find) {\n if (traceResult.isLeaf) {\n const node = traceResult.value;\n _a.#checkDataCompatible(key, value, node);\n if (node.type === 'struct') {\n // struct 형식인 value에 대한 구조 검사\n this.#flatInStruct({\n target: value,\n prefix: key,\n structData: node,\n });\n }\n return [[key, value]];\n }\n else {\n if (!_a.#isObject(value)) {\n throw new JSONAccessorError(`Field '${key}' is not allowed to be set`);\n }\n return this.#flat({\n target: value,\n prefix: key,\n navigator: this.#treeNavigate,\n });\n }\n }\n else {\n const { tracePath } = traceResult;\n const reached = tracePath.join(this.#delimiter);\n const node = this.#treeNavigate.get(reached);\n if (!node || (node.type !== 'struct' && node.type !== 'any')) {\n throw new JSONAccessorError(`Field '${key}' is not allowed to be set`);\n }\n return [[key, value]];\n }\n }\n ;\n /**\n * nested object 구조를 [[key, value], ...] 형식으로 변환하고 tree 구조에 대한 유효성 검사 수행\n *\n * @param target\n */\n flat(target) {\n if (this.#treeNavigate) {\n return this.#flat({\n target: target,\n prefix: '',\n navigator: this.#treeNavigate,\n });\n }\n else {\n return this.#flatWithoutNavigate({\n target: target,\n prefix: '',\n });\n }\n }\n #flat({ target, prefix, navigator }) {\n return Object.entries(target).flatMap(([key, value]) => {\n const newKey = _a.#joinKey(prefix, key);\n const node = navigator.get(newKey, { allowIntermediate: true });\n if (node == null) {\n throw new JSONAccessorError(`Field '${newKey}' is not allowed to be set`);\n }\n else if (isJSONTypeData(node)) {\n _a.#checkDataCompatible(newKey, value, node);\n // @TODO : 배열 타입에 대한 세부 처리 필요\n // 현재는 배열 경로까지만 flat이 이루어지므로\n // get/set 시 배열 전체를 가져오거나 덮어쓰게됨\n if (node.type === 'any') {\n return this.#flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n else if (node.type === 'struct') {\n return this.#flatInStruct({\n target: value,\n prefix: newKey,\n structData: node,\n });\n }\n else {\n return [[newKey, value]];\n }\n }\n else if (_a.#isObject(value)) {\n return this.#flat({\n target: value,\n prefix: newKey,\n navigator: navigator,\n });\n }\n else {\n throw new JSONAccessorError(`Logic error: ${newKey}`);\n }\n });\n }\n #flatWithoutNavigate({ target, prefix }) {\n return Object.entries(target).flatMap(([key, value]) => {\n const newKey = _a.#joinKey(prefix, key);\n if (_a.#isObject(value)) {\n return this.#flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n else {\n return [[newKey, value]];\n }\n });\n }\n #flatInStruct({ target, prefix, structData }) {\n let navigate = this.#getStructNavigator(prefix, structData);\n return Object.entries(target).flatMap(([key, value]) => {\n const newKey = _a.#joinKey(prefix, key);\n if (navigate) {\n return this.#flat({\n target: value,\n prefix: newKey,\n navigator: navigate,\n });\n }\n else {\n return this.#flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n });\n }\n #getStructNavigator(path, node) {\n if (node.struct == null) {\n return null;\n }\n else if (path in this.#structTreeNavigates) {\n return this.#structTreeNavigates[path];\n }\n else {\n const navigate = r.from(node.struct);\n this.#structTreeNavigates[path] = navigate;\n return navigate;\n }\n }\n static #isObject(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n static #joinKey(prefix, key) {\n return prefix ? `${prefix}.${key}` : key;\n }\n static #checkDataCompatible(key, value, typeData) {\n if (!isDataTypeCompatible(value, typeData)) {\n const typeName = getJSONTypeName(value);\n if (typeName == null) {\n throw new JSONAccessorError(`Invalid data type: ${typeName} in '${key}'`);\n }\n else if (typeName === 'null') {\n throw new JSONAccessorError(`Field '${key}' is not nullable`);\n }\n else {\n throw new JSONAccessorError(`Field '${key}' must be a '${typeData.type}' but ${typeName}`);\n }\n }\n }\n}\n_a = ObjectFlatter;\n\nclass JSONFS {\n async read(filename) {\n let contents;\n if (existsSync(filename)) {\n const jsonText = await fs.readFile(filename, 'utf8');\n try {\n contents = JSON.parse(jsonText);\n }\n catch {\n contents = {};\n }\n }\n else {\n contents = {};\n }\n return contents;\n }\n async write(filename, contents) {\n const jsonString = JSON.stringify(contents, null, 4);\n await fs.writeFile(filename, jsonString, 'utf8');\n }\n async rm(filename) {\n try {\n await fs.rm(filename);\n }\n catch (error) {\n }\n }\n async exists(filename) {\n if (!existsSync(filename))\n return false;\n return (await fs.stat(filename)).isFile();\n }\n}\n\nclass MockJSONFS {\n async read(filename) {\n return {};\n }\n async write(filename, contents) {\n }\n async rm(filename) {\n }\n async exists(filename) {\n return false;\n }\n}\n\nclass JSONAccessor {\n static anyJSONType = JSONType.Any().nullable().value;\n filePath;\n explorer = null;\n contents;\n jsonFS = new JSONFS();\n #tree = null;\n #flatter;\n #isDropped = false;\n #changed = true;\n constructor(filePath, tree = null) {\n this.filePath = filePath;\n this.contents = {};\n if (tree) {\n this.#tree = tree;\n this.explorer = r.from(tree, { delimiter: '.', allowWildcard: true, allowRecursiveWildcard: false });\n this.#flatter = new ObjectFlatter(this.explorer);\n }\n else {\n this.#flatter = new ObjectFlatter();\n }\n }\n get tree() {\n return this.#tree;\n }\n async load() {\n this.contents = await this.jsonFS?.read(this.filePath) ?? {};\n }\n async save(force = false) {\n this.#ensureNotDropped();\n if (!this.#changed && !force) {\n return;\n }\n this.#changed = false;\n await this.jsonFS?.write(this.filePath, this.contents);\n }\n async drop() {\n if (this.dropped)\n return;\n this.#isDropped = true;\n await this.jsonFS?.rm(this.filePath);\n }\n get dropped() {\n return this.#isDropped;\n }\n async hasExistingData() {\n return await this.jsonFS?.exists(this.filePath) ?? false;\n }\n setOne(key, value) {\n this.#ensureNotDropped();\n this.set([[key, value]]);\n }\n set(data) {\n this.#ensureNotDropped();\n this.#changed = true;\n let setterList = [];\n if (Array.isArray(data)) {\n setterList = this.#flatter.transform(data);\n }\n else {\n setterList = this.#flatter.flat(data);\n }\n let names = [];\n for (const [key, value] of setterList) {\n names.push(key);\n this.#setData(key, value);\n }\n return names;\n }\n getOne(key) {\n this.#ensureNotDropped();\n return this.#getData(key);\n }\n get(...keys) {\n this.#ensureNotDropped();\n const result = {};\n for (const key of keys) {\n const value = this.#getData(key);\n const resolved = resolveNestedRef(result, key, true);\n resolved.parent[resolved.key] = value;\n }\n return result;\n }\n getAll() {\n this.#ensureNotDropped();\n return structuredClone(this.contents);\n }\n removeOne(key) {\n this.#ensureNotDropped();\n this.#changed = true;\n this.#removeData(key);\n }\n remove(keys) {\n this.#ensureNotDropped();\n this.#changed = true;\n for (const key of keys) {\n this.#removeData(key);\n }\n }\n existsOne(key) {\n this.#ensureNotDropped();\n const value = this.#getData(key);\n return value !== undefined;\n }\n exists(keys) {\n this.#ensureNotDropped();\n return keys.map((key) => {\n const value = this.#getData(key);\n return value !== undefined;\n });\n }\n #setData(key, value) {\n const resolved = resolveNestedRef(this.contents, key, true);\n if (resolved) {\n resolved.parent[resolved.key] = value;\n }\n }\n #getData(key) {\n const resolved = resolveNestedRef(this.contents, key);\n if (resolved) {\n return resolved.parent[resolved.key];\n }\n else {\n return undefined;\n }\n }\n #removeData(key) {\n const resolved = resolveNestedRef(this.contents, key);\n if (resolved)\n delete resolved.parent[resolved.key];\n }\n #ensureNotDropped() {\n if (this.dropped) {\n throw new JSONAccessorError('This accessor has been dropped');\n }\n }\n}\n\nclass MemJSONAccessor extends JSONAccessor {\n jsonFS = new MockJSONFS();\n constructor(tree = null) {\n super('', tree);\n }\n}\n\nexport { JSONAccessor, JSONType, MemJSONAccessor };\n//# sourceMappingURL=bundle.mjs.map\n","import {\r\n type IJSONAccessor,\r\n type JSONTree,\r\n JSONAccessor,\r\n MemJSONAccessor,\r\n} from '@hve/json-accessor';\r\nimport { IAccessorManager } from '../types';\r\n\r\nclass JSONAccessorManager implements IAccessorManager<IJSONAccessor> {\r\n accessor : IJSONAccessor;\r\n dependent = new Set<string>();\r\n dependency = new Set<string>();\r\n \r\n static fromFS(actualPath:string, tree?:JSONTree) {\r\n return new JSONAccessorManager(new JSONAccessor(actualPath, tree));\r\n }\r\n\r\n static fromMemory(tree?:JSONTree) {\r\n return new JSONAccessorManager(new MemJSONAccessor(tree));\r\n }\r\n\r\n private constructor(accessor:IJSONAccessor) {\r\n this.accessor = accessor;\r\n }\r\n\r\n async create() {\r\n \r\n }\r\n async load() {\r\n await this.accessor.load();\r\n }\r\n async exists() {\r\n return await this.accessor.hasExistingData();\r\n }\r\n async move(acm:IAccessorManager<IJSONAccessor>) {\r\n const newAC = await this.copy(acm);\r\n await Promise.all([\r\n acm.commit(),\r\n this.drop()\r\n ]);\r\n \r\n return newAC;\r\n }\r\n async copy(acm:IAccessorManager<IJSONAccessor>) {\r\n if (this.isDropped()) {\r\n throw new Error(`This accessor is already dropped.`);\r\n }\r\n \r\n acm.accessor.set(this.accessor.getAll());\r\n }\r\n\r\n isCompatible(other: IAccessorManager<unknown>): other is JSONAccessorManager {\r\n if (!(other instanceof JSONAccessorManager)) {\r\n return false;\r\n }\r\n \r\n return this.#isEqualJsonTree(this.accessor.tree, other.accessor.tree);\r\n }\r\n\r\n #isEqualJsonTree(a:JSONTree|null, b:JSONTree|null):boolean {\r\n if (a == null && b == null) {\r\n return true;\r\n }\r\n else if (a == null || b == null) {\r\n return false;\r\n }\r\n else if (typeof a !== typeof b) {\r\n return false;\r\n }\r\n else if (typeof a === 'object') {\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n for (const key of aKeys) {\r\n const aValue = a[key];\r\n const bValue = b[key];\r\n\r\n if (typeof aValue !== typeof bValue) {\r\n return false;\r\n }\r\n else if (typeof aValue === 'number') {\r\n return aValue === bValue;\r\n }\r\n else if (!this.#isEqualJsonTree(aValue as JSONTree, bValue as JSONTree)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return a == b;\r\n }\r\n \r\n async drop() {\r\n await this.accessor.drop();\r\n }\r\n async commit() {\r\n await this.accessor.save();\r\n }\r\n isDropped() {\r\n return this.accessor.dropped;\r\n }\r\n}\r\n\r\nexport default JSONAccessorManager;","export class AccessorError extends Error {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'AccessorError';\r\n }\r\n}","import { existsSync } from 'node:fs';\r\nimport * as fs from 'node:fs/promises';\r\nimport type { IBinaryAccessor } from './types';\r\nimport { AccessorError } from '../errors';\r\n\r\nclass BinaryAccessor implements IBinaryAccessor {\r\n #filePath:string;\r\n #dropped:boolean = false;\r\n\r\n constructor(filePath:string) {\r\n this.#filePath = filePath;\r\n }\r\n \r\n hasExistingData() {\r\n return existsSync(this.#filePath);\r\n }\r\n async write(buffer:Buffer) {\r\n this.#ensureNotDropped();\r\n \r\n await fs.writeFile(this.#filePath, buffer);\r\n }\r\n async read():Promise<Buffer> {\r\n this.#ensureNotDropped();\r\n \r\n if (existsSync(this.#filePath)) {\r\n return await fs.readFile(this.#filePath);\r\n }\r\n else {\r\n return Buffer.from('');\r\n }\r\n }\r\n async writeBase64(data:string) {\r\n this.#ensureNotDropped();\r\n\r\n const buffer = Buffer.from(data, 'base64');\r\n this.write(buffer);\r\n }\r\n async readBase64():Promise<string> {\r\n this.#ensureNotDropped();\r\n\r\n const buffer = await this.read();\r\n return buffer.toString('base64');\r\n }\r\n async drop() {\r\n this.#ensureNotDropped();\r\n\r\n if (existsSync(this.#filePath)) {\r\n fs.rm(this.#filePath, { force: true });\r\n }\r\n }\r\n async commit() {\r\n this.#ensureNotDropped();\r\n // nothing to do\r\n }\r\n \r\n get dropped() {\r\n return this.#dropped;\r\n }\r\n #ensureNotDropped() {\r\n if (this.dropped) {\r\n throw new AccessorError('This accessor has been dropped');\r\n }\r\n }\r\n \r\n}\r\n\r\nexport default BinaryAccessor;","import type { IBinaryAccessor } from './types';\r\n\r\nclass MemBinaryAccessor implements IBinaryAccessor {\r\n #dropped:boolean = false;\r\n #buffer:Buffer = Buffer.from('');\r\n \r\n hasExistingData() {\r\n return false;\r\n }\r\n async write(buffer:Buffer) {\r\n this.#buffer = buffer;\r\n }\r\n async read():Promise<Buffer> {\r\n return this.#buffer;\r\n }\r\n async writeBase64(data:string) {\r\n const buffer = Buffer.from(data, 'base64');\r\n await this.write(buffer);\r\n }\r\n async readBase64():Promise<string> {\r\n const buffer = await this.read();\r\n return buffer.toString('base64');\r\n }\r\n\r\n async commit() {}\r\n async drop() { this.#dropped = true; }\r\n get dropped() { return this.#dropped; }\r\n}\r\n\r\nexport default MemBinaryAccessor;","import BinaryAccessor from './BinaryAccessor';\r\nimport { IAccessorManager } from '../types';\r\nimport { type IBinaryAccessor } from './types';\r\nimport MemBinaryAccessor from './MemBinaryAccessor';\r\n\r\nclass BinaryAccessorManager implements IAccessorManager<IBinaryAccessor> {\r\n accessor : IBinaryAccessor;\r\n dependent = new Set<string>();\r\n dependency = new Set<string>();\r\n \r\n static fromFS(actualPath:string) {\r\n return new BinaryAccessorManager(new BinaryAccessor(actualPath));\r\n }\r\n\r\n static fromMemory() {\r\n return new BinaryAccessorManager(new MemBinaryAccessor());\r\n }\r\n\r\n private constructor(accessor:IBinaryAccessor) {\r\n this.accessor = accessor;\r\n }\r\n\r\n async create() {\r\n \r\n }\r\n async load() {\r\n \r\n }\r\n async exists() {\r\n return this.accessor.hasExistingData();\r\n }\r\n async move(acm:IAccessorManager<IBinaryAccessor>) {\r\n const newAC = await this.copy(acm);\r\n await acm.commit();\r\n await this.drop();\r\n \r\n \r\n return newAC;\r\n }\r\n async copy(ac:IAccessorManager<IBinaryAccessor>) {\r\n if (this.isDropped()) {\r\n throw new Error(`This accessor is already dropped.`);\r\n }\r\n\r\n ac.accessor.write(await this.accessor.read());\r\n }\r\n\r\n isCompatible(other:IAccessorManager<unknown>):other is BinaryAccessorManager {\r\n return other instanceof BinaryAccessorManager;\r\n }\r\n \r\n async drop() {\r\n await this.accessor.drop();\r\n }\r\n async commit() {\r\n await this.accessor.commit();\r\n }\r\n isDropped() {\r\n return this.accessor.dropped;\r\n }\r\n}\r\n\r\nexport default BinaryAccessorManager;","import { existsSync } from 'node:fs';\r\nimport * as fs from 'node:fs/promises';\r\nimport type { ITextAccessor } from './types';\r\nimport { AccessorError } from '../errors';\r\n\r\nclass TextAccessor implements ITextAccessor {\r\n #filePath:string;\r\n #dropped:boolean = false;\r\n\r\n constructor(filePath:string) {\r\n this.#filePath = filePath;\r\n }\r\n \r\n async hasExistingData() {\r\n return (\r\n existsSync(this.#filePath)\r\n && (await fs.stat(this.#filePath)).isFile()\r\n )\r\n }\r\n async write(text:string) {\r\n this.#ensureNotDropped();\r\n await fs.writeFile(this.#filePath, text);\r\n }\r\n async append(text:string) {\r\n this.#ensureNotDropped();\r\n await fs.appendFile(this.#filePath, text);\r\n }\r\n async read():Promise<string> {\r\n this.#ensureNotDropped();\r\n\r\n if (existsSync(this.#filePath)) {\r\n return (await fs.readFile(this.#filePath)).toString();\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n\r\n async save() {\r\n this.#ensureNotDropped();\r\n\r\n if (!existsSync(this.#filePath)) {\r\n await fs.writeFile(this.#filePath, '');\r\n }\r\n }\r\n\r\n async drop() {\r\n if (this.dropped) return;\r\n \r\n await fs.rm(this.#filePath, { force: true });\r\n this.#dropped = true;\r\n }\r\n get dropped() {\r\n return this.#dropped;\r\n }\r\n #ensureNotDropped() {\r\n if (this.dropped) {\r\n throw new AccessorError('This accessor has been dropped');\r\n }\r\n }\r\n}\r\n\r\nexport default TextAccessor;","\r\nimport { type ITextAccessor } from './types';\r\n\r\nclass MemTextAccessor implements ITextAccessor {\r\n #dropped:boolean = false;\r\n #contents:string = '';\r\n\r\n async hasExistingData() {\r\n return false;\r\n }\r\n async write(text:string) {\r\n this.#contents = text;\r\n }\r\n async append(text:string) {\r\n this.#contents += text;\r\n }\r\n async read() {\r\n return this.#contents;\r\n }\r\n\r\n async save() {}\r\n get dropped() { return this.#dropped; }\r\n async drop() { this.#dropped = true; }\r\n}\r\n\r\nexport default MemTextAccessor;","import TextAccessor from './TextAccessor';\r\nimport MemTextAccessor from './MemTextAccessor';\r\nimport { IAccessorManager } from '../types';\r\nimport { ITextAccessor } from './types';\r\n\r\nclass TextAccessorManager implements IAccessorManager<ITextAccessor> {\r\n accessor : ITextAccessor;\r\n dependent = new Set<string>();\r\n dependency = new Set<string>();\r\n \r\n static fromFS(actualPath:string) {\r\n return new TextAccessorManager(new TextAccessor(actualPath));\r\n }\r\n\r\n static fromMemory() {\r\n return new TextAccessorManager(new MemTextAccessor());\r\n }\r\n\r\n private constructor(accessor:ITextAccessor) {\r\n this.accessor = accessor;\r\n }\r\n\r\n async create() {\r\n // nothing to do\r\n }\r\n async load() {\r\n\r\n }\r\n exists() {\r\n return this.accessor.hasExistingData();\r\n }\r\n\r\n async move(acm:IAccessorManager<ITextAccessor>) {\r\n const newAC = this.copy(acm);\r\n await acm.commit();\r\n await this.drop();\r\n \r\n return newAC;\r\n }\r\n async copy(acm:IAccessorManager<ITextAccessor>) {\r\n if (this.isDropped()) {\r\n throw new Error(`This accessor is already dropped.`);\r\n }\r\n acm.accessor.write(await this.accessor.read());\r\n }\r\n\r\n isCompatible(other:IAccessorManager<unknown>):other is TextAccessorManager {\r\n return other instanceof TextAccessorManager;\r\n }\r\n \r\n async drop() {\r\n await this.accessor.drop();\r\n }\r\n async commit() {\r\n await this.accessor.save();\r\n }\r\n isDropped() {\r\n return this.accessor.dropped;\r\n }\r\n}\r\n\r\nexport default TextAccessorManager;","class AccessorManagerError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AccessorManagerError';\r\n }\r\n}\r\n\r\nexport default AccessorManagerError;","import { AccessorEvent } from 'types';\r\nimport { IAccessorManager } from '../types';\r\nimport { AccessorManagerError } from 'errors';\r\n\r\ntype CustomAccessorArgs<AC> = {\r\n customId:string;\r\n event:AccessorEvent<AC>;\r\n actualPath:string;\r\n customArgs:any[];\r\n}\r\n\r\nclass CustomAccessorManager<AC> implements IAccessorManager<AC> {\r\n #customId:string;\r\n #customArgs:any[];\r\n #accessor : AC|null;\r\n #actualPath : string;\r\n dependent = new Set<string>();\r\n dependency = new Set<string>();\r\n\r\n #event:Omit<AccessorEvent<AC>, 'init'>;\r\n \r\n static from<AC>(ac:AC, args:CustomAccessorArgs<AC>) {\r\n return new CustomAccessorManager<AC>(ac, args);\r\n }\r\n\r\n private constructor(ac:AC, args:CustomAccessorArgs<AC>) {\r\n const { customId, event, actualPath, customArgs } = args;\r\n this.#accessor = ac;\r\n this.#customId = customId;\r\n this.#customArgs = customArgs;\r\n this.#actualPath = actualPath;\r\n this.#event = event;\r\n }\r\n\r\n get accessor() {\r\n if (!this.#accessor) {\r\n throw new AccessorManagerError('Accessor is dropped');\r\n }\r\n\r\n return this.#accessor;\r\n }\r\n\r\n async create() {\r\n if (this.#event.create) await this.#event.create(this.accessor, this.#actualPath, ...this.#customArgs);\r\n }\r\n\r\n async load() {\r\n if (this.#event.load) await this.#event.load(this.accessor, this.#actualPath, ...this.#customArgs);\r\n }\r\n async exists() {\r\n if (this.#event.exists) {\r\n return await this.#event.exists(this.accessor, this.#actualPath, ...this.#customArgs);\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n async move(ac:IAccessorManager<AC>) {\r\n if (this.#event.move) {\r\n await this.#event.move(this.accessor, ac.accessor);\r\n }\r\n else if (this.#event.copy) {\r\n await this.#event.copy(this.accessor, ac.accessor);\r\n }\r\n else {\r\n throw new AccessorManagerError('This accessor does not support move operation.');\r\n }\r\n\r\n this.drop();\r\n }\r\n async copy(ac:IAccessorManager<AC>) {\r\n if (this.#event.copy) {\r\n await this.#event.copy(this.accessor, ac.accessor);\r\n }\r\n else {\r\n throw new AccessorManagerError('This accessor does not support copy operation.');\r\n }\r\n }\r\n\r\n isCompatible(other: IAccessorManager<unknown>): boolean {\r\n if (!(other instanceof CustomAccessorManager)) {\r\n return false;\r\n }\r\n else if (this.#customId !== other.#customId) {\r\n return false;\r\n }\r\n else if (!this.#event.isCompatible) {\r\n return true;\r\n }\r\n else {\r\n return this.#event.isCompatible(this.accessor, other.accessor);\r\n }\r\n }\r\n \r\n async drop() {\r\n if (this.#accessor == null) return;\r\n if (this.#event.destroy) await this.#event.destroy(this.accessor, this.#actualPath, ...this.#customArgs);\r\n\r\n this.#accessor = null;\r\n }\r\n async commit() {\r\n if (this.#event.save) await this.#event.save(this.accessor, this.#actualPath, ...this.#customArgs);\r\n }\r\n isDropped() {\r\n return this.#accessor == null;\r\n }\r\n}\r\n\r\nexport default CustomAccessorManager;","import { IAccessorManager } from '../types';\r\n\r\nclass RootAccessorManager implements IAccessorManager<unknown> {\r\n accessor : unknown = {} as unknown;\r\n dependent = new Set<string>();\r\n dependency = new Set<string>();\r\n tree : any = {};\r\n \r\n static fromFS() {\r\n return new RootAccessorManager();\r\n }\r\n\r\n private constructor() {}\r\n\r\n async create() {}\r\n async load() {}\r\n async exists() { return false; }\r\n async move(ac:IAccessorManager<never>) {}\r\n async copy(ac:IAccessorManager<never>) {}\r\n\r\n isCompatible(other:IAccessorManager<unknown>) { return false; }\r\n async drop() {}\r\n async commit() {}\r\n isDropped() { return false; }\r\n}\r\n\r\nexport default RootAccessorManager;","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import * as fs from 'fs';\r\nimport { IDirectoryAccessor } from './types';\r\n\r\nclass DirectoryAccessor implements IDirectoryAccessor {\r\n private actualPath:string;\r\n\r\n constructor(actualPath:string) {\r\n this.actualPath = actualPath;\r\n }\r\n\r\n create() {\r\n if (!fs.existsSync(this.actualPath)) {\r\n fs.mkdirSync(this.actualPath, { recursive: true });\r\n }\r\n }\r\n\r\n exists() {\r\n try {\r\n if (!fs.existsSync(this.actualPath)) return false;\r\n\r\n const stat = fs.statSync(this.actualPath);\r\n return stat.isDirectory();\r\n }\r\n catch {\r\n return false;\r\n }\r\n }\r\n\r\n copy(other:DirectoryAccessor) {\r\n fs.cpSync(this.actualPath, other.actualPath, { recursive: true, force: true });\r\n }\r\n\r\n move(other:DirectoryAccessor) {\r\n fs.renameSync(this.actualPath, other.actualPath);\r\n }\r\n\r\n drop() {\r\n try {\r\n fs.rmSync(this.actualPath, { recursive: true });\r\n }\r\n catch {\r\n\r\n }\r\n }\r\n}\r\n\r\nexport default DirectoryAccessor;","import * as fs from 'fs';\r\nimport { IDirectoryAccessor } from './types';\r\n\r\nclass MemDirectoryAccessor implements IDirectoryAccessor {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n create() {}\r\n exists(): boolean {\r\n return true; \r\n }\r\n copy(other:MemDirectoryAccessor) {}\r\n move(other:MemDirectoryAccessor) {}\r\n drop() {}\r\n}\r\n\r\nexport default MemDirectoryAccessor;","import deepEqual from 'fast-deep-equal';\r\n\r\nimport { IAccessorManager } from '../types';\r\nimport DirectoryAccessor from './DirectoryAccessor';\r\nimport MemDirectoryAccessor from './MemDirectoryAccessor';\r\nimport { IDirectoryAccessor } from './types';\r\n\r\nclass DirectoryAccessorManager implements IAccessorManager<IDirectoryAccessor> {\r\n accessor : IDirectoryAccessor;\r\n dependent = new Set<string>();\r\n dependency = new Set<string>();\r\n tree : any = {};\r\n \r\n static fromFS(actualPath:string, tree:any) {\r\n return new DirectoryAccessorManager(new DirectoryAccessor(actualPath), tree);\r\n }\r\n\r\n static fromMemory(tree:any) {\r\n return new DirectoryAccessorManager(new MemDirectoryAccessor(), tree);\r\n }\r\n\r\n private constructor(ac:IDirectoryAccessor, tree:any={}) {\r\n this.accessor = ac;\r\n this.tree = tree;\r\n }\r\n\r\n async create() {\r\n this.accessor.create();\r\n }\r\n async load() {\r\n \r\n }\r\n async exists() {\r\n return this.accessor.exists();\r\n }\r\n async move(acm:IAccessorManager<DirectoryAccessor>) {\r\n const newAC = this.copy(acm);\r\n await acm.commit();\r\n await this.drop();\r\n \r\n return newAC;\r\n }\r\n async copy(ac:IAccessorManager<DirectoryAccessor>) {\r\n this.accessor.copy(ac.accessor);\r\n }\r\n\r\n isCompatible(other:IAccessorManager<unknown>):other is DirectoryAccessorManager {\r\n if (!(other instanceof DirectoryAccessorManager)) return false;\r\n \r\n return deepEqual(this.tree, other.tree);\r\n }\r\n \r\n async drop() {\r\n this.accessor.drop();\r\n }\r\n async commit() {\r\n \r\n }\r\n isDropped() {\r\n return !this.accessor.exists();\r\n }\r\n}\r\n\r\nexport default DirectoryAccessorManager;","class e extends Error{constructor(e){super(e),this.name=\"TreeNavigateError\"}}const t=\"--tree-leaf\";var i;class r{#e={};#t=\".\";#i=!0;constructor(){}static from(e,t={}){const r=new i;return r.#e=e,r.#t=t.delimiter??\".\",r.#i=t.allowWildcard??!0,r}subtree(t){const r=t.split(this.#t),l=this.#r(r,this.#e);if(!l)throw new e(`Path '${t}' does not exist`);if(i.#l(l.value)||i.#a(l.value))throw new e(`Path '${t}' is not a subtree`);const a=l.path.reduce(((e,t)=>e[t]),this.#e),s=new i;return s.#e=a,s.#t=this.#t,s.#i=this.#i,s}get(e,t){return this.walk(e,t)?.value??null}walk(e,t={}){const r=e.split(this.#t),l=\"\"===e?{value:this.#e,path:[]}:this.#r(r,this.#e);if(!l)return null;const a=l.value;return i.#l(a)?l:i.#a(a)?{value:a.value,path:l.path}:t.allowIntermediate?l:null}#r(e,t){if(0===e.length)return{value:t,path:[]};if(\"object\"!=typeof t||i.#a(t))return null;const r=e.splice(0,1)[0];if(r in t){const i=this.#r(e,t[r]);if(i)return{value:i.value,path:[r,...i.path]}}else if(this.#i){if(\"*\"in t){const i=this.#r(e,t[\"*\"]);if(i)return{value:i.value,path:[\"*\",...i.path]}}if(\"**/*\"in t)return{value:t[\"**/*\"],path:[\"**/*\"]}}return null}static#l(e){return null==e||\"object\"!=typeof e}static#a(e){return 1==e[t]}}function l(e){return{[t]:!0,value:e}}i=r;export{t as TREE_LEAF_FLAG,r as default,l as leaf};\n","export class StorageError extends Error {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'StorageError';\r\n }\r\n}","import { StorageError } from '../storage/errors';\r\n\r\nexport class StorageAccessError extends StorageError {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'StorageAccessError';\r\n }\r\n}\r\n\r\nexport class NotRegisterError extends StorageError {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'NotRegisteredError';\r\n }\r\n}\r\n\r\nexport class AccessDeniedError extends StorageError {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'AccessDeniedError';\r\n }\r\n}\r\n\r\nexport class DirectoryAccessError extends StorageError {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'DirectoryAccessError';\r\n }\r\n}\r\n\r\nexport class UncompatibleAccessorError extends StorageError {\r\n constructor(message:string) {\r\n super(message);\r\n this.name = 'UncompatibleError';\r\n }\r\n}","import { IAccessorManager } from 'features/accessors'\r\nimport { Accesses, AccessType } from 'features/StorageAccess'\r\nimport TreeNavigate from 'tree-navigate';\r\n\r\nimport { AccessTree, StorageAccessControlEvent } from './types';\r\n\r\nimport { AccessDeniedError, DirectoryAccessError, NotRegisterError, StorageAccessError, UncompatibleAccessorError } from './errors';\r\n\r\nclass StorageAccessControl {\r\n #events:StorageAccessControlEvent;\r\n #rawTree:AccessTree = {};\r\n private accessTree:TreeNavigate;\r\n\r\n constructor(events:StorageAccessControlEvent) {\r\n this.#events = events;\r\n this.accessTree = TreeNavigate.from({}, { delimiter: ':', allowWildcard:true });\r\n }\r\n\r\n register(tree:AccessTree) {\r\n this.#rawTree = tree;\r\n this.accessTree = TreeNavigate.from(tree, { delimiter: ':', allowWildcard:true });\r\n }\r\n\r\n async copy(oldIdentifier:string, newIdentifier:string, accessType:string) {\r\n const oldACM = await this.#getAccessorManager(oldIdentifier, accessType, true);\r\n const newACM = await this.#getAccessorManager(newIdentifier, accessType, true);\r\n\r\n if (!newACM.isCompatible(oldACM)) {\r\n throw new UncompatibleAccessorError(`'${oldIdentifier}' and '${newIdentifier}' are not compatible.`);\r\n }\r\n \r\n await oldACM.copy(newACM);\r\n }\r\n\r\n async move(oldIdentifier:string, newIdentifier:string, accessType:string) {\r\n const oldACM = await this.#getAccessorManager(oldIdentifier, accessType, true);\r\n const newACM = await this.#getAccessorManager(newIdentifier, accessType, true);\r\n\r\n if (!newACM.isCompatible(oldACM)) {\r\n throw new UncompatibleAccessorError(`'${oldIdentifier}' and '${newIdentifier}' are not compatible.`);\r\n }\r\n \r\n await oldACM.move(newACM);\r\n }\r\n \r\n async access(identifier:string, accessType:string):Promise<unknown> {\r\n const acm = await this.#getAccessorManager(identifier, accessType);\r\n \r\n return acm.accessor;\r\n }\r\n\r\n async #getAccessorManager(identifier:string, accessType:string, allowDirectory:boolean=false):Promise<IAccessorManager<unknown>> {\r\n const walked = this.accessTree.walk(identifier, { allowIntermediate:true });\r\n if (!walked) {\r\n throw new NotRegisterError(`'${identifier}' is not registered.`);\r\n }\r\n if (!allowDirectory && this.checkAccessIsDirectory(walked.value)) {\r\n throw new DirectoryAccessError(`'${identifier}' is directory.`);\r\n }\r\n // 접근 권한 확인\r\n const resolvedAccess = this.validateAndResolveAccess(walked.value, accessType, identifier);\r\n \r\n // 실제 접근\r\n const splited = identifier.split(':');\r\n const length = walked.path.length;\r\n\r\n let prevACC = '';\r\n let acc = '';\r\n const addAcc = (id:string) => {\r\n prevACC = acc;\r\n acc = (acc === '' ? id : `${acc}:${id}`);\r\n };\r\n const chainDependency = () => {\r\n this.#events.onChainDependency(prevACC, acc);\r\n }\r\n let subtree = this.#rawTree;\r\n for (let i = 0; i < length-1; i++) {\r\n addAcc(splited[i]);\r\n subtree = subtree[walked.path[i]] as AccessTree;\r\n \r\n await this.#events.onAccess(acc, {\r\n accessType : 'directory',\r\n tree : subtree\r\n });\r\n chainDependency();\r\n }\r\n addAcc(splited[length-1]);\r\n\r\n const ac = await this.#events.onAccess(acc, resolvedAccess);\r\n chainDependency();\r\n \r\n return ac;\r\n }\r\n\r\n async release(identifier:string) {\r\n const walked = this.accessTree.walk(identifier);\r\n if (!walked) {\r\n throw new NotRegisterError(`'${identifier}' is not registered.`);\r\n }\r\n\r\n if (this.checkAccessIsDirectory(walked.value)) {\r\n throw new DirectoryAccessError(`> '${identifier}' is directory.`);\r\n }\r\n await this.#events.onRelease(identifier);\r\n }\r\n\r\n async releaseDir(identifier:string) {\r\n this.validateDirectoryPath(identifier);\r\n \r\n await this.#events.onRelease(identifier);\r\n }\r\n\r\n getAccessType(identifier:string):string[] {\r\n const getAT = (access:Accesses):string => {\r\n return (\r\n access.accessType === 'custom'\r\n ? access.id\r\n : access.accessType\r\n )\r\n }\r\n const access:Accesses|null = this.accessTree.get(identifier, { allowIntermediate:true });\r\n\r\n if (access == null) {\r\n return [];\r\n }\r\n else if (this.checkAccessIsDirectory(access)) {\r\n return ['directory'];\r\n }\r\n else {\r\n if (access.accessType === 'union') {\r\n return access.accesses.map((ac)=>getAT(ac));\r\n }\r\n else {\r\n return [getAT(access)];\r\n }\r\n }\r\n }\r\n\r\n validateDirectoryPath(identifier:string) {\r\n const walked = this.accessTree.walk(identifier, { allowIntermediate:true });\r\n if (!walked || !this.checkAccessIsDirectory(walked.value)) {\r\n throw new NotRegisterError(`'${identifier}' is not directory.`);\r\n }\r\n }\r\n\r\n private validateAndResolveAccess(access:Accesses, targetAccessType:string, identifier:string):Accesses {\r\n const resolved = this.resolveAccess(access, targetAccessType);\r\n if (!resolved) {\r\n throw new AccessDeniedError(`'${identifier}' is not accessible. '${access.accessType}'`);\r\n }\r\n return resolved;\r\n }\r\n\r\n /**\r\n * target이 Access와 일치 시 Access 반환, 아닐 시 null 반환\r\n * \r\n * UnionAccess의 경우, target에 해당하는 Access를 찾아 반환\r\n */\r\n private resolveAccess(access:Accesses, targetAccessType:string):Accesses|null {\r\n if (!('accessType' in access)) {\r\n return {\r\n accessType : 'directory',\r\n tree : access as AccessTree\r\n }\r\n }\r\n else if (access.accessType !== 'union') {\r\n if (access.accessType === targetAccessType) {\r\n return access;\r\n }\r\n else if (access.accessType === 'custom' && access.id === targetAccessType) {\r\n return access;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n for (const ac of access.accesses) {\r\n if (ac.accessType === targetAccessType) {\r\n return ac;\r\n }\r\n else if (ac.accessType === 'custom' && ac.id === targetAccessType) {\r\n return ac;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n return null;\r\n }\r\n private checkAccessIsDirectory(access:Accesses) {\r\n return !('accessType' in access);\r\n }\r\n}\r\n\r\nexport default StorageAccessControl;","import { IBinaryAccessor, IJSONAccessor, ITextAccessor } from '@/features/accessors';\r\n\r\nimport { IACSubStorage } from './types';\r\n\r\nclass ACSubStorage implements IACSubStorage {\r\n #master:IACSubStorage;\r\n #prefix:string;\r\n\r\n constructor(master:IACSubStorage, prefix:string) {\r\n this.#master = master;\r\n this.#prefix = prefix;\r\n }\r\n \r\n subStorage(identifier:string):IACSubStorage {\r\n return this.#master.subStorage(this.#prefix + ':' + identifier);\r\n }\r\n\r\n async access(identifier:string, accessType:string):Promise<unknown> {\r\n return await this.#master.access(this.#prefix + ':' + identifier, accessType);\r\n }\r\n async accessAsJSON(identifier:string):Promise<IJSONAccessor> {\r\n return await this.access(identifier, 'json') as IJSONAccessor;\r\n }\r\n async accessAsText(identifier:string):Promise<ITextAccessor> {\r\n return await this.access(identifier, 'text') as ITextAccessor;\r\n }\r\n async accessAsBinary(identifier:string):Promise<IBinaryAccessor> {\r\n return await this.access(identifier, 'binary') as IBinaryAccessor;\r\n }\r\n async copy(oldIdentifier:string, newIdentifier:string) {\r\n await this.#master.copy(this.#prefix + ':' + oldIdentifier, this.#prefix + ':' + newIdentifier);\r\n }\r\n async move(oldIdentifier:string, newIdentifier:string) {\r\n await this.#master.move(this.#prefix + ':' + oldIdentifier, this.#prefix + ':' + newIdentifier);\r\n }\r\n\r\n async dropDir(identifier:string) {\r\n await this.dropDir(this.#prefix + ':' + identifier);\r\n }\r\n\r\n async drop(identifier:string) {\r\n await this.drop(this.#prefix + ':' + identifier);\r\n }\r\n \r\n async dropAll() {\r\n await this.dropDir(this.#prefix);\r\n }\r\n\r\n async commit(identifier:string='') {\r\n await this.#master.commit(this.#prefix + ':' + identifier);\r\n }\r\n\r\n async commitAll() {\r\n await this.#master.commit(this.#prefix);\r\n }\r\n}\r\n\r\nexport default ACSubStorage;","import * as fs from 'node:fs';\r\nimport * as path from 'node:path';\r\nimport { AccessorEvent } from 'types';\r\n\r\nimport { IAccessorManager, BinaryAccessorManager, JSONAccessorManager, TextAccessorManager, CustomAccessorManager, ICustomAccessor } from 'features/accessors';\r\nimport StorageAccessControl, { AccessTree } from 'features/StorageAccessControl';\r\nimport { Accesses, AccessType } from 'features/StorageAccess';\r\nimport { IBinaryAccessor, IJSONAccessor, ITextAccessor } from '@/features/accessors';\r\nimport {\r\n DirectoryAccessorManager,\r\n RootAccessorManager,\r\n} from 'features/accessors';\r\n\r\nimport ACSubStorage from './ACSubStorage';\r\nimport { StorageError } from './errors';\r\nimport { IACStorage, IACSubStorage } from './types';\r\n\r\ninterface ACStorageOption {\r\n cacheName?:string;\r\n noCache?:boolean;\r\n}\r\n\r\nclass ACStorage implements IACStorage {\r\n protected eventListeners:{\r\n access?: Function,\r\n access_dir?: Function,\r\n release?: Function,\r\n release_dir?: Function,\r\n } = {};\r\n\r\n protected cachePath:string;\r\n protected noCache:boolean;\r\n protected cacheName:string;\r\n \r\n protected basePath: string;\r\n protected customAccessEvents: Record<string, AccessorEvent<unknown>> = {};\r\n protected accessors:Map<string, IAccessorManager<unknown>> = new Map();\r\n\r\n protected accessControl:StorageAccessControl;\r\n protected accessCache:Record<string, string> = {};\r\n\r\n constructor(basePath:string, option:ACStorageOption={}) {\r\n this.basePath = basePath;\r\n this.accessControl = this.initAccessControl();\r\n \r\n this.noCache = option.noCache ?? false;\r\n this.cacheName = option.cacheName ?? '.acstorage';\r\n\r\n this.cachePath = path.join(this.basePath, '.acstorage');\r\n \r\n this.accessors.set('', RootAccessorManager.fromFS());\r\n\r\n if (!this.noCache) this.loadCache();\r\n }\r\n\r\n protected loadCache() {\r\n try {\r\n const cacheData = fs.readFileSync(this.cachePath, 'utf8');\r\n\r\n this.accessCache = JSON.parse(cacheData);\r\n }\r\n catch {\r\n ;\r\n }\r\n }\r\n\r\n protected saveCache() {\r\n const cacheData = JSON.stringify(this.accessCache, null, 4);\r\n\r\n fs.writeFileSync(this.cachePath, cacheData, 'utf8');\r\n }\r\n\r\n protected initAccessControl():StorageAccessControl {\r\n const onAccess = async (identifier:string, sa:Accesses) => {\r\n const targetPath = path.join(this.basePath, identifier.replaceAll(':', '/'));\r\n this.eventListeners.access?.(identifier, sa);\r\n\r\n let item = this.accessors.get(identifier);\r\n if (item != undefined && !item.isDropped()) {\r\n return item;\r\n }\r\n \r\n let acm:IAccessorManager<unknown>;\r\n switch(sa.accessType) {\r\n case 'directory':\r\n acm = DirectoryAccessorManager.fromFS(targetPath, sa.tree);\r\n break;\r\n case 'json':\r\n acm = JSONAccessorManager.fromFS(targetPath, sa.structure);\r\n break;\r\n case 'binary':\r\n acm = BinaryAccessorManager.fromFS(targetPath);\r\n break;\r\n case 'text':\r\n acm = TextAccessorManager.fromFS(targetPath);\r\n break;\r\n case 'custom':\r\n const event = this.customAccessEvents[sa.id];\r\n if (!event) {\r\n throw new StorageError('Invalid access type');\r\n }\r\n const ac = await event.init(targetPath, ...sa.args);\r\n acm = CustomAccessorManager.from(ac, {\r\n customId: sa.id,\r\n event,\r\n actualPath: targetPath,\r\n customArgs: sa.args,\r\n });\r\n break;\r\n default:\r\n // 기본 타입 이외에는 custom 타입으로 wrap되기 때문에 이 경우가 발생하지 않음\r\n throw new StorageError('Invalid access type');\r\n break;\r\n }\r\n if (!await acm.exists()) await acm.create();\r\n else await acm.load();\r\n \r\n this.accessCache[identifier] = sa.accessType !== 'custom' ? sa.accessType : sa.id;\r\n this.accessors.set(identifier, acm);\r\n return acm;\r\n }\r\n const onRelease = async (identifier:string) => {\r\n const accessor = this.accessors.get(identifier);\r\n if (!accessor) return;\r\n\r\n for (const child of accessor.dependent) {\r\n await onRelease(child);\r\n }\r\n if (identifier === '') return;\r\n this.eventListeners.release?.(identifier);\r\n\r\n if (!accessor.isDropped()) await accessor.drop();\r\n\r\n delete this.accessCache[identifier];\r\n this.accessors.delete(identifier);\r\n };\r\n const onChainDependency = (dependentId:string, dependencyId:string) => {\r\n const dependent = this.accessors.get(dependentId);\r\n\r\n if (dependent) {\r\n dependent.dependent.add(dependencyId);\r\n }\r\n }\r\n \r\n return new StorageAccessControl({\r\n onAccess,\r\n onRelease,\r\n onChainDependency,\r\n });\r\n }\r\n\r\n addListener(event: 'release'|'access', listener: Function): void {\r\n switch(event) {\r\n case 'access':\r\n this.eventListeners.access = listener;\r\n break;\r\n case 'release':\r\n this.eventListeners.release = listener;\r\n break;\r\n }\r\n }\r\n\r\n register(tree:AccessTree) {\r\n this.accessControl.register(tree);\r\n }\r\n\r\n addAccessEvent<T extends string, AC>(customId:(T extends AccessType ? never : T), event:AccessorEvent<AC>) {\r\n this.customAccessEvents[customId] = event as AccessorEvent<unknown>;\r\n }\r\n\r\n subStorage(identifier:string):IACSubStorage {\r\n const accessType = this.accessControl.getAccessType(identifier);\r\n if (accessType.length !== 1 && accessType[0] !== 'directory') {\r\n throw new StorageError(`Cannot infer the access type of ${identifier}`);\r\n }\r\n\r\n return new ACSubStorage(this, identifier);\r\n }\r\n\r\n async access(identifier:string, accessType:string):Promise<unknown> {\r\n return await this.accessControl.access(identifier, accessType);\r\n }\r\n async accessAsJSON(identifier:string):Promise<IJSONAccessor> {\r\n return await this.access(identifier, 'json') as IJSONAccessor;\r\n }\r\n async accessAsText(identifier:string):Promise<ITextAccessor> {\r\n return await this.access(identifier, 'text') as ITextAccessor;\r\n }\r\n async accessAsBinary(identifier:string):Promise<IBinaryAccessor> {\r\n return await this.access(identifier, 'binary') as IBinaryAccessor;\r\n }\r\n async copy(oldIdentifier:string, newIdentifier:string) {\r\n const accessType = this.validateAndGetAccessTypePair(oldIdentifier, newIdentifier);\r\n await this.commit(oldIdentifier);\r\n\r\n await this.accessControl.copy(oldIdentifier, newIdentifier, accessType);\r\n }\r\n async move(oldIdentifier:string, newIdentifier:string) {\r\n const accessType = this.validateAndGetAccessTypePair(oldIdentifier, newIdentifier);\r\n await this.commit(oldIdentifier);\r\n \r\n await this.accessControl.move(oldIdentifier, newIdentifier, accessType);\r\n }\r\n \r\n protected validateAndGetAccessTypePair(oldIdentifier:string, newIdentifier:string) {\r\n /*\r\n accessControl에서 작업 수행 전, cache를 통한 검증을 진행\r\n\r\n 1. oldIdentifier에 대한 accessType이 캐시에 존재하는 경우\r\n - noCahce 설정이 false 라면 예외 발생\r\n - noCache 설정이 true 라면 accessControl에서 직접 확인\r\n - accessType이 1개가 아니라면 예외 발생\r\n 2. oldIdentifier, newIdentifier의 accessType을 비교\r\n - newIdentifier의 accessType이 존재하지 않다면 진행\r\n - 실제로 accessor가 적절한지는 AccessControl에서 검증\r\n 3. accessControl에게 copy 요청\r\n - oldIdentifier의 accessor를 newIdentifier로 복사\r\n */\r\n const oldAT:string = this.accessCache[oldIdentifier];\r\n const newAT = this.accessCache[newIdentifier];\r\n\r\n if (oldAT == null) {\r\n if (this.noCache) {\r\n const atCandidates = this.accessControl.getAccessType(oldIdentifier);\r\n\r\n if (atCandidates.length !== 1) {\r\n throw new StorageError(`Cannot infer the access type of ${oldIdentifier}`);\r\n }\r\n return atCandidates[0];\r\n }\r\n else {\r\n throw new StorageError(`The accessor for '${oldIdentifier}' is not initialized.`);\r\n }\r\n }\r\n else if (newAT != null && oldAT !== newAT) {\r\n throw new StorageError(`The accessors '${oldIdentifier}'(${oldAT}) and '${newIdentifier}'(${newAT}) are not compatible.`); \r\n }\r\n\r\n return oldAT;\r\n }\r\n\r\n async dropDir(identifier:string) {\r\n if (identifier === '') {\r\n throw new StorageError('Cannot drop the root directory. use dropAll() instead.');\r\n }\r\n \r\n await this.accessControl.releaseDir(identifier);\r\n }\r\n\r\n async drop(identifier:string) {\r\n await this.accessControl.release(identifier);\r\n }\r\n \r\n async dropAll() {\r\n await this.accessControl.releaseDir('');\r\n }\r\n\r\n async commit(identifier:string='') {\r\n await this.#commitRecursive(identifier);\r\n \r\n if (!this.noCache) this.saveCache();\r\n }\r\n\r\n async commitAll() {\r\n await this.commit('');\r\n }\r\n\r\n async #commitRecursive(identifier:string) {\r\n const accessor = this.accessors.get(identifier);\r\n if (!accessor) return;\r\n\r\n for (const childIdentifier of accessor.dependent) {\r\n await this.#commitRecursive(childIdentifier);\r\n }\r\n\r\n if (!accessor.isDropped()) await accessor.commit();\r\n }\r\n}\r\n\r\nexport default ACStorage;","import { BinaryAccessorManager, CustomAccessorManager, DirectoryAccessorManager, IAccessorManager, JSONAccessorManager, TextAccessorManager } from 'features/accessors';\r\nimport { Accesses } from 'features/StorageAccess';\r\nimport StorageAccessControl from 'features/StorageAccessControl';\r\nimport { StorageError } from './errors';\r\nimport ACStorage from './ACStorage';\r\n\r\nclass MemACStorage extends ACStorage {\r\n constructor() {\r\n super('', { noCache: true });\r\n }\r\n\r\n override initAccessControl() {\r\n const onAccess = async (identifier:string, sa:Accesses) => {\r\n this.eventListeners.access?.(identifier, sa);\r\n\r\n let item = this.accessors.get(identifier);\r\n if (item != undefined && !item.isDropped()) {\r\n return item;\r\n }\r\n \r\n let acm:IAccessorManager<unknown>;\r\n switch(sa.accessType) {\r\n case 'directory':\r\n acm = DirectoryAccessorManager.fromMemory(sa.tree);\r\n break;\r\n case 'json':\r\n acm = JSONAccessorManager.fromMemory(sa.structure);\r\n break;\r\n case 'binary':\r\n acm = BinaryAccessorManager.fromMemory();\r\n break;\r\n case 'text':\r\n acm = TextAccessorManager.fromMemory();\r\n break;\r\n case 'custom':\r\n const event = this.customAccessEvents[sa.id];\r\n if (!event) {\r\n throw new StorageError('Invalid access type');\r\n }\r\n const ac = await event.init(null as any, ...sa.args);\r\n acm = CustomAccessorManager.from(ac, {\r\n customId: sa.id,\r\n event,\r\n actualPath: null as any,\r\n customArgs: sa.args,\r\n });\r\n break;\r\n default:\r\n // 기본 타입 이외에는 custom 타입으로 wrap되기 때문에 이 경우가 발생하지 않음\r\n throw new StorageError('Logic Error : Invalid access type');\r\n break;\r\n }\r\n if (!acm.exists()) acm.create();\r\n else acm.load();\r\n \r\n this.accessCache[identifier] = sa.accessType !== 'custom' ? sa.accessType : sa.id;\r\n this.accessors.set(identifier, acm);\r\n return acm;\r\n }\r\n const onRelease = async (identifier:string) => {\r\n const accessor = this.accessors.get(identifier);\r\n if (!accessor) return;\r\n\r\n for (const child of accessor.dependent) {\r\n await onRelease(child);\r\n }\r\n if (identifier === '') return;\r\n this.eventListeners.release?.(identifier);\r\n\r\n if (!accessor.isDropped()) accessor.drop();\r\n\r\n delete this.accessCache[identifier];\r\n this.accessors.delete(identifier);\r\n };\r\n const onChainDependency = (dependentId:string, dependencyId:string) => {\r\n const dependent = this.accessors.get(dependentId);\r\n\r\n if (dependent) {\r\n dependent.dependent.add(dependencyId);\r\n }\r\n };\r\n\r\n return new StorageAccessControl({\r\n onAccess,\r\n onRelease,\r\n onChainDependency,\r\n });\r\n }\r\n}\r\n\r\nexport default MemACStorage;","import { JSONTree } from '@hve/json-accessor';\r\nimport type { Accesses, NonUnionAccesses, UnionAccess } from './types';\r\nimport { leaf, type Leaf } from 'tree-navigate';\r\n\r\nclass StorageAccess {\r\n static Nothing():Leaf<Accesses> { return leaf({accessType : 'nothing' }) };\r\n static Text():Leaf<Accesses> { return leaf({accessType : 'text'}) };\r\n static Binary():Leaf<Accesses> { return leaf({accessType : 'binary' }) };\r\n static JSON(structure?:JSONTree):Leaf<Accesses> {\r\n return leaf({ accessType : 'json', structure });\r\n };\r\n static Custom(id:string, ...args:any[]):Leaf<Accesses> {\r\n return leaf({ accessType : 'custom', args, id });\r\n }\r\n static Union(...accesses:Leaf<Accesses>[]):Leaf<UnionAccess> {\r\n return leaf({ accessType : 'union', accesses : accesses.map(leaf=>leaf.value) });\r\n }\r\n}\r\n\r\nexport default StorageAccess;"],"names":["t","i","e","r","existsSync","fs","TreeNavigate","path","leaf"],"mappings":"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","x_google_ignoreList":[0,12,16]}