ac-storage 0.16.1 → 0.16.2
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.
- package/dist/bundle.cjs.map +1 -1
- package/dist/bundle.mjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/package.json +1 -1
package/dist/bundle.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.mjs","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';\nimport * as path from 'node:path';\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}\nclass UnserializableTypeError extends JSONAccessorError {\n constructor(key, value) {\n super(`Unserializable data: '${value}' for field '${key}'`);\n this.name = 'UnserializableTypeError';\n }\n}\nclass IncompatibleTypeError extends JSONAccessorError {\n constructor(message) {\n super(message);\n this.name = 'IncompatibleTypeError';\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 __brand = 'struct';\n constructor(tree) {\n super('struct');\n this.value['struct'] = tree;\n this.value['strict'] = false;\n }\n strict() {\n this.value['strict'] = true;\n return this;\n }\n}\n\nclass ArrayJSONTypeLeaf extends BaseJSONTypeLeaf {\n __brand = 'array';\n constructor(element) {\n super('array');\n this.value['strict'] = false;\n if (element == null) {\n this.value['element'] = undefined;\n }\n else if (t in element) {\n this.value['element'] = element.value;\n }\n else {\n const obj = new StructJSONTypeLeaf(element);\n this.value['element'] = obj.strict().value;\n }\n }\n strict() {\n this.value['strict'] = true;\n return this;\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 &&\n typeof target === 'object' &&\n 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: (tree) => new StructJSONTypeLeaf(tree),\n Array: (jsonTree) => new ArrayJSONTypeLeaf(jsonTree),\n Any: () => new BaseJSONTypeLeaf('any'),\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}\nfunction isObject(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * 경로 문자열을 연결하여 반환\n */\nfunction dotJoin(prefix, key) {\n return (prefix != null && prefix.length > 0) ? `${prefix}.${key}` : key;\n}\n/**\n * 값이 json-accessor 호환 가능 타입인지 확인하고 타입명 반환, 호환 불가능할 경우 null 반환\n */\nfunction getJSONTypeName(value) {\n if (value == null)\n return 'null';\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}\n\nconst DELIMITER = '.';\nclass Flattener {\n navigate;\n typeChecker;\n constructor(navigate, typeChecker) {\n this.navigate = navigate;\n this.typeChecker = typeChecker;\n }\n /**\n * key-value 쌍에 대한 경로 유효성 검사후 `Array<[key, value]>` 형태로 반환\n *\n * @param key - dot(.)으로 구분된 경로 문자열\n * @param value - 유효성 검사를 위한 값\n * @return 인자를 [[key, value]] 형태로 반환\n */\n transform(key, value) {\n // [[key, value]] 를 그대로 반환하는건 flat()과의 호환을 위함\n // 추후 구현에서 한 key에서 여러 결과를 리턴하는 등의 확장 가능성이 있음\n if (key === '') {\n // 루트 경로는 비허용\n throw new JSONAccessorError(`Invalid path: ${key}`);\n }\n if (this.navigate == null) {\n return [[key, value]];\n }\n const traceResult = this.navigate.trace(key);\n if (traceResult.find) {\n if (traceResult.isLeaf) {\n const node = traceResult.value;\n this.typeChecker.check(key, value, node);\n if (value != null && node.type === 'struct') {\n // struct 형식인 value에 대한 구조 검사\n this.flatStruct({\n target: value,\n prefix: key,\n structData: node,\n });\n }\n return [[key, value]];\n }\n else {\n // 경로는 존재하지만 노드의 중간인 경우\n // value가 object 형태라면 flat()을 통해 유효성 검사를 진행\n if (!isObject(value)) {\n throw new JSONAccessorError(`Field '${key}' is not allowed`);\n }\n return this.flat({\n target: value,\n prefix: key,\n });\n }\n }\n // 경로상 존재하지 않는 경우\n else if (traceResult.tracePath.length === 0) {\n throw new JSONAccessorError(`Field '${key}' is not allowed`);\n }\n // 중간 경로까지는 존재하는 경우\n else {\n const { tracePath } = traceResult;\n const reached = tracePath.join(DELIMITER);\n const node = this.navigate.get(reached);\n // 닿을 수 있는 마지막 노드의 타입이 struct, any 라면 허용됨\n if (!node || (node.type !== 'struct' && node.type !== 'any')) {\n throw new JSONAccessorError(`Field '${key}' is not allowed`);\n }\n return [[key, value]];\n }\n }\n /**\n * 객체를 평탄화하여 `Array<[key, value]>`로 반환\n *\n * 유효성 검증을 포함함\n */\n flat({ target, prefix }) {\n if (!this.navigate) {\n return this.flatWithoutNavigate({ target, prefix });\n }\n const navigate = this.navigate;\n return Object.entries(target)\n .flatMap(([key, value]) => {\n const newKey = dotJoin(prefix, key);\n const node = navigate.get(newKey, { allowIntermediate: true });\n if (node == null) {\n throw new JSONAccessorError(`Field '${newKey}' is not allowed`);\n }\n else if (isJSONTypeData(node)) {\n this.typeChecker.check(newKey, value, node);\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.flatStruct({\n target: value,\n prefix: newKey,\n structData: node,\n });\n }\n else if (node.type === 'array') {\n // @TODO : 배열 타입에 대한 세부 처리 필요\n // 현재는 배열 경로까지만 flat이 이루어지므로\n // get/set 시 배열 전체를 가져오거나 덮어쓰게됨\n return [[newKey, value]];\n }\n else {\n return [[newKey, value]];\n }\n }\n else if (isObject(value)) {\n return this.flat({\n target: value,\n prefix: newKey,\n });\n }\n else {\n // 가져온 값이 JSONTypeData(탐색한 노드의 끝) 도 아니고\n // 일반 object(중간 노드)도 아닌 다른 타입인 경우\n //\n // TreeNavigate<JSONTypeData> 에서 가져온 결과에선 나올 수 없으므로 데이터 오염이라고 판단\n throw new JSONAccessorError(`Data corrupted: unexpected node type encountered. key: '${newKey}', value: ${value} (${typeof value})`);\n }\n });\n }\n /**\n * struct 노드에 대한 flatten 수행\n */\n flatStruct({ target, prefix, structData }) {\n // struct는 내부 구조에 대한 구조 검증이 없으므로 유효성 검증 없이 단순 평탄화\n return Object.entries(target)\n .flatMap(([key, value]) => {\n const newKey = dotJoin(prefix, key);\n if (isObject(value)) {\n return this.flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n else {\n return [[newKey, value]];\n }\n });\n }\n /**\n * 유효성 검증 없이 평탄화 수행\n */\n flatWithoutNavigate({ target, prefix }) {\n return Object.entries(target)\n .flatMap(([key, value]) => {\n const newKey = dotJoin(prefix, key);\n if (isObject(value)) {\n return this.flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n else {\n return [[newKey, value]];\n }\n });\n }\n}\n\nclass CompatibilityChecker {\n constructor() {\n }\n check(key, value, typeData) {\n if (!this.isCompatible(value, typeData)) {\n const typeName = getJSONTypeName(value);\n if (typeName == null) {\n throw new UnserializableTypeError(key, value);\n }\n else if (typeName === 'null') {\n throw new IncompatibleTypeError(`Incompatible type for field '${key}': expected '${typeData.type}' and not nullable, received null`);\n }\n else if (typeName === 'array' && typeData.type === 'array') {\n throw new IncompatibleTypeError(`Incompatible array structure for field '${key}'`);\n }\n else if (typeData.type === 'union') {\n const expected = this.getUnionTypeNames(typeData);\n throw new IncompatibleTypeError(`Incompatible type for field '${key}': expected one of (${expected.join(' | ')}), received ${value} ('${typeName}')`);\n }\n else {\n throw new IncompatibleTypeError(`Incompatible type for field '${key}': expected '${typeData.type}', received '${typeName}'`);\n }\n }\n }\n isCompatible(target, jsonTypeData) {\n // jsonTypeData 타입이 primitive 인 경우\n // union 타입 검사 시 isCompatible() 가 다시 호출된 경우 발생\n if (typeof jsonTypeData !== 'object') {\n return target === jsonTypeData;\n }\n else {\n const targetType = getJSONTypeName(target);\n if (targetType === null) {\n return false;\n }\n else if (jsonTypeData.type === 'any') {\n return true;\n }\n else if (targetType === 'null') {\n return jsonTypeData.nullable;\n }\n else if (jsonTypeData.type === 'union') {\n for (const candidate of jsonTypeData.candidates) {\n if (this.isCompatible(target, candidate)) {\n return true;\n }\n }\n return false;\n }\n else if (targetType === jsonTypeData.type) {\n switch (jsonTypeData.type) {\n case 'array':\n return this.isArrayCompatible(target, jsonTypeData);\n case 'struct':\n return this.isStructCompatible(target, jsonTypeData);\n default:\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n isArrayCompatible(array, arrayTypeData) {\n if (!arrayTypeData.strict || !arrayTypeData.element)\n return true;\n for (const ele of array) {\n if (!this.isCompatible(ele, arrayTypeData.element)) {\n return false;\n }\n }\n return true;\n }\n isStructCompatible(struct, structTypeData) {\n if (!structTypeData.strict)\n return true;\n if (!structTypeData.struct)\n return true;\n const navigate = r.from(structTypeData.struct);\n const flattener = new Flattener(navigate, this);\n try {\n flattener.flat({ target: struct, prefix: '' });\n return true;\n }\n catch (e) {\n return false;\n }\n }\n getUnionTypeNames(union) {\n return union.candidates.map((c) => {\n if (typeof c === 'object') {\n return c.type;\n }\n else {\n return c.toString();\n }\n });\n }\n}\n\nclass SchemaFlattener {\n flattener;\n checker;\n constructor(navigate) {\n this.checker = new CompatibilityChecker();\n this.flattener = new Flattener(navigate, this.checker);\n }\n flat(target) {\n return this.flattener.flat({\n target,\n prefix: '',\n });\n }\n transform(data) {\n return data.flatMap(([key, value]) => {\n return this.flattener.transform(key, value);\n });\n }\n}\n\nclass JSONFS {\n #writeLock = Promise.resolve();\n async read(filename) {\n if (!existsSync(filename)) {\n return {};\n }\n const jsonText = await fs.readFile(filename, 'utf8');\n if (jsonText.trim() === '') {\n throw new Error(`JSON file is empty: \"${filename}\"`);\n }\n try {\n return JSON.parse(jsonText);\n }\n catch (error) {\n throw new Error(`Failed to parse JSON from \"${filename}\": ` +\n `${error instanceof Error ? error.message : String(error)}. ` +\n `Content preview: \"${jsonText.substring(0, 100)}...\"`);\n }\n }\n async write(filename, contents) {\n // Serialize writes using a lock chain\n const previousLock = this.#writeLock;\n let releaseLock;\n this.#writeLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n try {\n // Wait for previous write to complete\n await previousLock;\n // Perform atomic write\n await this.#atomicWrite(filename, contents);\n }\n finally {\n releaseLock();\n }\n }\n async #atomicWrite(filename, contents) {\n const jsonString = JSON.stringify(contents, null, 4);\n const dir = path.dirname(filename);\n // Generate unique temp file name\n const tempFile = `${filename}.tmp.${Date.now()}.${Math.random().toString(36).substring(2)}`;\n try {\n // Ensure parent directory exists (create if needed)\n await fs.mkdir(dir, { recursive: true });\n // Write to temp file\n await fs.writeFile(tempFile, jsonString, 'utf8');\n // Atomic rename (this is atomic on POSIX systems)\n await fs.rename(tempFile, filename);\n }\n catch (error) {\n // Clean up temp file on failure\n try {\n if (existsSync(tempFile)) {\n await fs.rm(tempFile);\n }\n }\n catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n }\n async rm(filename) {\n try {\n await fs.rm(filename);\n }\n catch {\n // Ignore errors (file might not exist)\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 DefaultValueProvider {\n #navigate;\n constructor(navigate = null) {\n this.#navigate = navigate;\n }\n get(key) {\n if (this.#navigate == null) {\n return undefined;\n }\n const result = this.#navigate.walk(key, { allowIntermediate: true });\n if (result == null) {\n return undefined;\n }\n else if (isJSONTypeData(result.value)) {\n const defaultValue = result.value.default_value;\n return ((defaultValue != null)\n ? defaultValue\n : undefined);\n }\n else {\n // for (const [key, value] of Object.entries(result.value)) {\n // console.log(key, value);\n // }\n return this.#getDefaultData(result.value);\n }\n }\n #getDefaultData(typeData) {\n if (t in typeData) {\n if (typeData.value.default_value != null) {\n return typeData.value.default_value;\n }\n return undefined;\n }\n else {\n let hasKey = false;\n const result = {};\n for (const [key, value] of Object.entries(typeData)) {\n const defaultValue = this.#getDefaultData(value);\n if (defaultValue !== undefined) {\n result[key] = defaultValue;\n hasKey = true;\n }\n }\n return (hasKey\n ? result\n : undefined);\n }\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 #defaultValueProvider;\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 SchemaFlattener(this.explorer);\n this.#defaultValueProvider = new DefaultValueProvider(this.explorer);\n }\n else {\n this.#flatter = new SchemaFlattener();\n this.#defaultValueProvider = new DefaultValueProvider();\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 let value = this.#getData(key);\n if (value == null) {\n value = this.#defaultValueProvider.get(key);\n }\n return value;\n }\n get(...keys) {\n this.#ensureNotDropped();\n const result = {};\n for (const key of keys) {\n let value = this.#getData(key);\n if (value == null) {\n value = this.#defaultValueProvider.get(key);\n }\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 {\n type IJSONAccessor,\n type JSONTree,\n JSONAccessor,\n MemJSONAccessor,\n} from '@hve/json-accessor';\nimport { IAccessorManager } from '../types';\n\nclass JSONAccessorManager implements IAccessorManager<IJSONAccessor> {\n accessor : IJSONAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n \n static fromFS(actualPath:string, tree?:JSONTree) {\n return new JSONAccessorManager(new JSONAccessor(actualPath, tree));\n }\n\n static fromMemory(tree?:JSONTree) {\n return new JSONAccessorManager(new MemJSONAccessor(tree));\n }\n\n private constructor(accessor:IJSONAccessor) {\n this.accessor = accessor;\n }\n\n async create() {\n \n }\n async load() {\n await this.accessor.load();\n }\n async exists() {\n return await this.accessor.hasExistingData();\n }\n async move(acm:IAccessorManager<IJSONAccessor>) {\n const newAC = await this.copy(acm);\n await Promise.all([\n acm.commit(),\n this.drop()\n ]);\n \n return newAC;\n }\n async copy(acm:IAccessorManager<IJSONAccessor>) {\n if (this.isDropped()) {\n throw new Error(`This accessor is already dropped.`);\n }\n \n acm.accessor.set(this.accessor.getAll());\n }\n\n isCompatible(other: IAccessorManager<unknown>): other is JSONAccessorManager {\n if (!(other instanceof JSONAccessorManager)) {\n return false;\n }\n \n return this.#isEqualJsonTree(this.accessor.tree, other.accessor.tree);\n }\n\n #isEqualJsonTree(a:JSONTree|null, b:JSONTree|null):boolean {\n if (a == null && b == null) {\n return true;\n }\n else if (a == null || b == null) {\n return false;\n }\n else if (typeof a !== typeof b) {\n return false;\n }\n else if (typeof a === 'object') {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n const aValue = a[key];\n const bValue = b[key];\n\n if (typeof aValue !== typeof bValue) {\n return false;\n }\n else if (typeof aValue === 'number') {\n return aValue === bValue;\n }\n else if (!this.#isEqualJsonTree(aValue as JSONTree, bValue as JSONTree)) {\n return false;\n }\n }\n return true;\n }\n return a == b;\n }\n \n async drop() {\n await this.accessor.drop();\n }\n async commit() {\n await this.accessor.save();\n }\n isDropped() {\n return this.accessor.dropped;\n }\n}\n\nexport default JSONAccessorManager;","export class AccessorError extends Error {\n constructor(message:string) {\n super(message);\n this.name = 'AccessorError';\n }\n}","import { existsSync } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport type { IBinaryAccessor } from './types';\nimport { AccessorError } from '../errors';\n\nclass BinaryAccessor implements IBinaryAccessor {\n #filePath:string;\n #dropped:boolean = false;\n\n constructor(filePath:string) {\n this.#filePath = filePath;\n }\n \n hasExistingData() {\n return existsSync(this.#filePath);\n }\n async write(buffer:Buffer) {\n this.#ensureNotDropped();\n \n await fs.writeFile(this.#filePath, buffer);\n }\n async read():Promise<Buffer> {\n this.#ensureNotDropped();\n \n if (existsSync(this.#filePath)) {\n return await fs.readFile(this.#filePath);\n }\n else {\n return Buffer.from('');\n }\n }\n async writeBase64(data:string) {\n this.#ensureNotDropped();\n\n const buffer = Buffer.from(data, 'base64');\n await this.write(buffer);\n }\n async readBase64():Promise<string> {\n this.#ensureNotDropped();\n\n const buffer = await this.read();\n return buffer.toString('base64');\n }\n async drop() {\n if (this.#dropped) return;\n\n this.#dropped = true;\n if (existsSync(this.#filePath)) {\n await fs.rm(this.#filePath, { force: true });\n }\n }\n async commit() {\n this.#ensureNotDropped();\n // nothing to do\n }\n \n get dropped() {\n return this.#dropped;\n }\n #ensureNotDropped() {\n if (this.dropped) {\n throw new AccessorError('This accessor has been dropped');\n }\n }\n \n}\n\nexport default BinaryAccessor;","import type { IBinaryAccessor } from './types';\n\nclass MemBinaryAccessor implements IBinaryAccessor {\n #dropped:boolean = false;\n #buffer:Buffer = Buffer.from('');\n \n hasExistingData() {\n return false;\n }\n async write(buffer:Buffer) {\n this.#buffer = buffer;\n }\n async read():Promise<Buffer> {\n return this.#buffer;\n }\n async writeBase64(data:string) {\n const buffer = Buffer.from(data, 'base64');\n await this.write(buffer);\n }\n async readBase64():Promise<string> {\n const buffer = await this.read();\n return buffer.toString('base64');\n }\n\n async commit() {}\n async drop() { this.#dropped = true; }\n get dropped() { return this.#dropped; }\n}\n\nexport default MemBinaryAccessor;","import BinaryAccessor from './BinaryAccessor';\nimport { IAccessorManager } from '../types';\nimport { type IBinaryAccessor } from './types';\nimport MemBinaryAccessor from './MemBinaryAccessor';\n\nclass BinaryAccessorManager implements IAccessorManager<IBinaryAccessor> {\n accessor : IBinaryAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n \n static fromFS(actualPath:string) {\n return new BinaryAccessorManager(new BinaryAccessor(actualPath));\n }\n\n static fromMemory() {\n return new BinaryAccessorManager(new MemBinaryAccessor());\n }\n\n private constructor(accessor:IBinaryAccessor) {\n this.accessor = accessor;\n }\n\n async create() {\n \n }\n async load() {\n \n }\n async exists() {\n return this.accessor.hasExistingData();\n }\n async move(acm:IAccessorManager<IBinaryAccessor>) {\n const newAC = await this.copy(acm);\n await acm.commit();\n await this.drop();\n \n \n return newAC;\n }\n async copy(ac:IAccessorManager<IBinaryAccessor>) {\n if (this.isDropped()) {\n throw new Error(`This accessor is already dropped.`);\n }\n\n ac.accessor.write(await this.accessor.read());\n }\n\n isCompatible(other:IAccessorManager<unknown>):other is BinaryAccessorManager {\n return other instanceof BinaryAccessorManager;\n }\n \n async drop() {\n await this.accessor.drop();\n }\n async commit() {\n await this.accessor.commit();\n }\n isDropped() {\n return this.accessor.dropped;\n }\n}\n\nexport default BinaryAccessorManager;","import { existsSync } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport type { ITextAccessor } from './types';\nimport { AccessorError } from '../errors';\n\nclass TextAccessor implements ITextAccessor {\n #filePath:string;\n #dropped:boolean = false;\n\n constructor(filePath:string) {\n this.#filePath = filePath;\n }\n \n async hasExistingData() {\n return (\n existsSync(this.#filePath)\n && (await fs.stat(this.#filePath)).isFile()\n )\n }\n async write(text:string) {\n this.#ensureNotDropped();\n await fs.writeFile(this.#filePath, text);\n }\n async append(text:string) {\n this.#ensureNotDropped();\n await fs.appendFile(this.#filePath, text);\n }\n async read():Promise<string> {\n this.#ensureNotDropped();\n\n if (existsSync(this.#filePath)) {\n return (await fs.readFile(this.#filePath)).toString();\n }\n else {\n return '';\n }\n }\n\n async save() {\n this.#ensureNotDropped();\n\n if (!existsSync(this.#filePath)) {\n await fs.writeFile(this.#filePath, '');\n }\n }\n\n async drop() {\n if (this.dropped) return;\n \n await fs.rm(this.#filePath, { force: true });\n this.#dropped = true;\n }\n get dropped() {\n return this.#dropped;\n }\n #ensureNotDropped() {\n if (this.dropped) {\n throw new AccessorError('This accessor has been dropped');\n }\n }\n}\n\nexport default TextAccessor;","\nimport { type ITextAccessor } from './types';\n\nclass MemTextAccessor implements ITextAccessor {\n #dropped:boolean = false;\n #contents:string = '';\n\n async hasExistingData() {\n return false;\n }\n async write(text:string) {\n this.#contents = text;\n }\n async append(text:string) {\n this.#contents += text;\n }\n async read() {\n return this.#contents;\n }\n\n async save() {}\n get dropped() { return this.#dropped; }\n async drop() { this.#dropped = true; }\n}\n\nexport default MemTextAccessor;","import TextAccessor from './TextAccessor';\nimport MemTextAccessor from './MemTextAccessor';\nimport { IAccessorManager } from '../types';\nimport { ITextAccessor } from './types';\n\nclass TextAccessorManager implements IAccessorManager<ITextAccessor> {\n accessor : ITextAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n \n static fromFS(actualPath:string) {\n return new TextAccessorManager(new TextAccessor(actualPath));\n }\n\n static fromMemory() {\n return new TextAccessorManager(new MemTextAccessor());\n }\n\n private constructor(accessor:ITextAccessor) {\n this.accessor = accessor;\n }\n\n async create() {\n // nothing to do\n }\n async load() {\n\n }\n exists() {\n return this.accessor.hasExistingData();\n }\n\n async move(acm:IAccessorManager<ITextAccessor>) {\n const newAC = this.copy(acm);\n await acm.commit();\n await this.drop();\n \n return newAC;\n }\n async copy(acm:IAccessorManager<ITextAccessor>) {\n if (this.isDropped()) {\n throw new Error(`This accessor is already dropped.`);\n }\n acm.accessor.write(await this.accessor.read());\n }\n\n isCompatible(other:IAccessorManager<unknown>):other is TextAccessorManager {\n return other instanceof TextAccessorManager;\n }\n \n async drop() {\n await this.accessor.drop();\n }\n async commit() {\n await this.accessor.save();\n }\n isDropped() {\n return this.accessor.dropped;\n }\n}\n\nexport default TextAccessorManager;","class AccessorManagerError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AccessorManagerError';\n }\n}\n\nexport default AccessorManagerError;","import { AccessorEvent } from 'types';\nimport { IAccessorManager } from '../types';\nimport { AccessorManagerError } from 'errors';\n\ntype CustomAccessorArgs<AC> = {\n customId:string;\n event:AccessorEvent<AC>;\n actualPath:string;\n customArgs:any[];\n}\n\nclass CustomAccessorManager<AC> implements IAccessorManager<AC> {\n #customId:string;\n #customArgs:any[];\n #accessor : AC|null;\n #actualPath : string;\n dependent = new Set<string>();\n dependency = new Set<string>();\n\n #event:Omit<AccessorEvent<AC>, 'init'>;\n \n static from<AC>(ac:AC, args:CustomAccessorArgs<AC>) {\n return new CustomAccessorManager<AC>(ac, args);\n }\n\n private constructor(ac:AC, args:CustomAccessorArgs<AC>) {\n const { customId, event, actualPath, customArgs } = args;\n this.#accessor = ac;\n this.#customId = customId;\n this.#customArgs = customArgs;\n this.#actualPath = actualPath;\n this.#event = event;\n }\n\n get accessor() {\n if (!this.#accessor) {\n throw new AccessorManagerError('Accessor is dropped');\n }\n\n return this.#accessor;\n }\n\n async create() {\n if (this.#event.create) await this.#event.create(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n\n async load() {\n if (this.#event.load) await this.#event.load(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n async exists() {\n if (this.#event.exists) {\n return await this.#event.exists(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n else {\n return false;\n }\n }\n\n async move(ac:IAccessorManager<AC>) {\n if (this.#event.move) {\n await this.#event.move(this.accessor, ac.accessor);\n }\n else if (this.#event.copy) {\n await this.#event.copy(this.accessor, ac.accessor);\n }\n else {\n throw new AccessorManagerError('This accessor does not support move operation.');\n }\n\n this.drop();\n }\n async copy(ac:IAccessorManager<AC>) {\n if (this.#event.copy) {\n await this.#event.copy(this.accessor, ac.accessor);\n }\n else {\n throw new AccessorManagerError('This accessor does not support copy operation.');\n }\n }\n\n isCompatible(other: IAccessorManager<unknown>): boolean {\n if (!(other instanceof CustomAccessorManager)) {\n return false;\n }\n else if (this.#customId !== other.#customId) {\n return false;\n }\n else if (!this.#event.isCompatible) {\n return true;\n }\n else {\n return this.#event.isCompatible(this.accessor, other.accessor);\n }\n }\n \n async drop() {\n if (this.#accessor == null) return;\n if (this.#event.destroy) await this.#event.destroy(this.accessor, this.#actualPath, ...this.#customArgs);\n\n this.#accessor = null;\n }\n async commit() {\n if (this.#event.save) await this.#event.save(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n isDropped() {\n return this.#accessor == null;\n }\n}\n\nexport default CustomAccessorManager;","import { IAccessorManager } from '../types';\n\nclass RootAccessorManager implements IAccessorManager<unknown> {\n accessor : unknown = {} as unknown;\n dependent = new Set<string>();\n dependency = new Set<string>();\n tree : any = {};\n \n static fromFS() {\n return new RootAccessorManager();\n }\n\n private constructor() {}\n\n async create() {}\n async load() {}\n async exists() { return false; }\n async move(ac:IAccessorManager<never>) {}\n async copy(ac:IAccessorManager<never>) {}\n\n isCompatible(other:IAccessorManager<unknown>) { return false; }\n async drop() {}\n async commit() {}\n isDropped() { return false; }\n}\n\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';\nimport { IDirectoryAccessor } from './types';\n\nclass DirectoryAccessor implements IDirectoryAccessor {\n private actualPath:string;\n\n constructor(actualPath:string) {\n this.actualPath = actualPath;\n }\n\n create() {\n if (!fs.existsSync(this.actualPath)) {\n fs.mkdirSync(this.actualPath, { recursive: true });\n }\n }\n\n exists() {\n try {\n if (!fs.existsSync(this.actualPath)) return false;\n\n const stat = fs.statSync(this.actualPath);\n return stat.isDirectory();\n }\n catch {\n return false;\n }\n }\n\n copy(other:DirectoryAccessor) {\n fs.cpSync(this.actualPath, other.actualPath, { recursive: true, force: true });\n }\n\n move(other:DirectoryAccessor) {\n fs.renameSync(this.actualPath, other.actualPath);\n }\n\n drop() {\n try {\n fs.rmSync(this.actualPath, { recursive: true });\n }\n catch {\n\n }\n }\n}\n\nexport default DirectoryAccessor;","import * as fs from 'fs';\nimport { IDirectoryAccessor } from './types';\n\nclass MemDirectoryAccessor implements IDirectoryAccessor {\n\n constructor() {\n\n }\n\n create() {}\n exists(): boolean {\n return true; \n }\n copy(other:MemDirectoryAccessor) {}\n move(other:MemDirectoryAccessor) {}\n drop() {}\n}\n\nexport default MemDirectoryAccessor;","import deepEqual from 'fast-deep-equal';\n\nimport { IAccessorManager } from '../types';\nimport DirectoryAccessor from './DirectoryAccessor';\nimport MemDirectoryAccessor from './MemDirectoryAccessor';\nimport { IDirectoryAccessor } from './types';\n\nclass DirectoryAccessorManager implements IAccessorManager<IDirectoryAccessor> {\n accessor : IDirectoryAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n tree : any = {};\n \n static fromFS(actualPath:string, tree:any) {\n return new DirectoryAccessorManager(new DirectoryAccessor(actualPath), tree);\n }\n\n static fromMemory(tree:any) {\n return new DirectoryAccessorManager(new MemDirectoryAccessor(), tree);\n }\n\n private constructor(ac:IDirectoryAccessor, tree:any={}) {\n this.accessor = ac;\n this.tree = tree;\n }\n\n async create() {\n this.accessor.create();\n }\n async load() {\n \n }\n async exists() {\n return this.accessor.exists();\n }\n async move(acm:IAccessorManager<DirectoryAccessor>) {\n const newAC = this.copy(acm);\n await acm.commit();\n await this.drop();\n \n return newAC;\n }\n async copy(ac:IAccessorManager<DirectoryAccessor>) {\n this.accessor.copy(ac.accessor);\n }\n\n isCompatible(other:IAccessorManager<unknown>):other is DirectoryAccessorManager {\n if (!(other instanceof DirectoryAccessorManager)) return false;\n \n return deepEqual(this.tree, other.tree);\n }\n \n async drop() {\n this.accessor.drop();\n }\n async commit() {\n \n }\n isDropped() {\n return !this.accessor.exists();\n }\n}\n\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 {\n constructor(message:string) {\n super(message);\n this.name = 'StorageError';\n }\n}","import { StorageError } from '../storage/errors';\n\nexport class StorageAccessError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'StorageAccessError';\n }\n}\n\nexport class NotRegisterError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'NotRegisteredError';\n }\n}\n\nexport class AccessDeniedError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'AccessDeniedError';\n }\n}\n\nexport class DirectoryAccessError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'DirectoryAccessError';\n }\n}\n\nexport class UncompatibleAccessorError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'UncompatibleError';\n }\n}","import { IAccessorManager } from 'features/accessors'\nimport { Accesses, AccessType } from 'features/StorageAccess'\nimport TreeNavigate from 'tree-navigate';\n\nimport { AccessTree, StorageAccessControlEvent } from './types';\n\nimport { AccessDeniedError, DirectoryAccessError, NotRegisterError, StorageAccessError, UncompatibleAccessorError } from './errors';\n\nclass StorageAccessControl {\n #events:StorageAccessControlEvent;\n #rawTree:AccessTree = {};\n private accessTree:TreeNavigate;\n\n constructor(events:StorageAccessControlEvent) {\n this.#events = events;\n this.accessTree = TreeNavigate.from({}, { delimiter: ':', allowWildcard:true });\n }\n\n register(tree:AccessTree) {\n this.#rawTree = tree;\n this.accessTree = TreeNavigate.from(tree, { delimiter: ':', allowWildcard:true });\n }\n\n async copy(oldIdentifier:string, newIdentifier:string, accessType:string) {\n const oldACM = await this.#getAccessorManager(oldIdentifier, accessType, true);\n const newACM = await this.#getAccessorManager(newIdentifier, accessType, true);\n\n if (!newACM.isCompatible(oldACM)) {\n throw new UncompatibleAccessorError(`'${oldIdentifier}' and '${newIdentifier}' are not compatible.`);\n }\n \n await oldACM.copy(newACM);\n }\n\n async move(oldIdentifier:string, newIdentifier:string, accessType:string) {\n const oldACM = await this.#getAccessorManager(oldIdentifier, accessType, true);\n const newACM = await this.#getAccessorManager(newIdentifier, accessType, true);\n\n if (!newACM.isCompatible(oldACM)) {\n throw new UncompatibleAccessorError(`'${oldIdentifier}' and '${newIdentifier}' are not compatible.`);\n }\n \n await oldACM.move(newACM);\n }\n \n async access(identifier:string, accessType:string):Promise<unknown> {\n const acm = await this.#getAccessorManager(identifier, accessType);\n \n return acm.accessor;\n }\n\n async #getAccessorManager(identifier:string, accessType:string, allowDirectory:boolean=false):Promise<IAccessorManager<unknown>> {\n const walked = this.accessTree.walk(identifier, { allowIntermediate:true });\n if (!walked) {\n throw new NotRegisterError(`'${identifier}' is not registered.`);\n }\n if (!allowDirectory && this.checkAccessIsDirectory(walked.value)) {\n throw new DirectoryAccessError(`'${identifier}' is directory.`);\n }\n // 접근 권한 확인\n const resolvedAccess = this.validateAndResolveAccess(walked.value, accessType, identifier);\n \n // 실제 접근\n const splited = identifier.split(':');\n const length = walked.path.length;\n\n let prevACC = '';\n let acc = '';\n const addAcc = (id:string) => {\n prevACC = acc;\n acc = (acc === '' ? id : `${acc}:${id}`);\n };\n const chainDependency = () => {\n this.#events.onChainDependency(prevACC, acc);\n }\n let subtree = this.#rawTree;\n for (let i = 0; i < length-1; i++) {\n addAcc(splited[i]);\n subtree = subtree[walked.path[i]] as AccessTree;\n \n await this.#events.onAccess(acc, {\n accessType : 'directory',\n tree : subtree\n });\n chainDependency();\n }\n addAcc(splited[length-1]);\n\n const ac = await this.#events.onAccess(acc, resolvedAccess);\n chainDependency();\n \n return ac;\n }\n\n async destroy(identifier:string) {\n const walked = this.accessTree.walk(identifier);\n if (!walked) {\n throw new NotRegisterError(`'${identifier}' is not registered.`);\n }\n\n if (this.checkAccessIsDirectory(walked.value)) {\n throw new DirectoryAccessError(`> '${identifier}' is directory.`);\n }\n await this.#events.onDestroy(identifier);\n }\n\n async destroyDir(identifier:string) {\n this.validateDirectoryPath(identifier);\n \n await this.#events.onDestroy(identifier);\n }\n\n getAccessType(identifier:string):string[] {\n const getAT = (access:Accesses):string => {\n return (\n access.accessType === 'custom'\n ? access.id\n : access.accessType\n )\n }\n const access:Accesses|null = this.accessTree.get(identifier, { allowIntermediate:true });\n\n if (access == null) {\n return [];\n }\n else if (this.checkAccessIsDirectory(access)) {\n return ['directory'];\n }\n else {\n if (access.accessType === 'union') {\n return access.accesses.map((ac)=>getAT(ac));\n }\n else {\n return [getAT(access)];\n }\n }\n }\n\n validateAccess(identifier: string, accessType: string): Accesses {\n const walked = this.accessTree.walk(identifier, { allowIntermediate: true });\n if (!walked) {\n throw new NotRegisterError(`'${identifier}' is not registered.`);\n }\n if (this.checkAccessIsDirectory(walked.value)) {\n throw new DirectoryAccessError(`'${identifier}' is directory.`);\n }\n return this.validateAndResolveAccess(walked.value, accessType, identifier);\n }\n\n validateDirectoryPath(identifier:string) {\n const walked = this.accessTree.walk(identifier, { allowIntermediate:true });\n if (!walked || !this.checkAccessIsDirectory(walked.value)) {\n throw new NotRegisterError(`'${identifier}' is not directory.`);\n }\n }\n\n private validateAndResolveAccess(access:Accesses, targetAccessType:string, identifier:string):Accesses {\n const resolved = this.resolveAccess(access, targetAccessType);\n if (!resolved) {\n throw new AccessDeniedError(`'${identifier}' is not accessible. '${access.accessType}'`);\n }\n return resolved;\n }\n\n /**\n * target이 Access와 일치 시 Access 반환, 아닐 시 null 반환\n * \n * UnionAccess의 경우, target에 해당하는 Access를 찾아 반환\n */\n private resolveAccess(access:Accesses, targetAccessType:string):Accesses|null {\n if (!('accessType' in access)) {\n return {\n accessType : 'directory',\n tree : access as AccessTree\n }\n }\n else if (access.accessType !== 'union') {\n if (access.accessType === targetAccessType) {\n return access;\n }\n else if (access.accessType === 'custom' && access.id === targetAccessType) {\n return access;\n }\n else {\n return null;\n }\n }\n else {\n for (const ac of access.accesses) {\n if (ac.accessType === targetAccessType) {\n return ac;\n }\n else if (ac.accessType === 'custom' && ac.id === targetAccessType) {\n return ac;\n }\n }\n return null;\n }\n\n return null;\n }\n private checkAccessIsDirectory(access:Accesses) {\n return !('accessType' in access);\n }\n}\n\nexport default StorageAccessControl;","import { IBinaryAccessor, IJSONAccessor, ITextAccessor } from '@/features/accessors';\n\nimport { IACSubStorage } from './types';\n\nclass ACSubStorage implements IACSubStorage {\n #master:IACSubStorage;\n #prefix:string;\n\n constructor(master:IACSubStorage, prefix:string) {\n this.#master = master;\n this.#prefix = prefix;\n }\n \n subStorage(identifier:string):IACSubStorage {\n return this.#master.subStorage(this.#prefix + ':' + identifier);\n }\n\n async access(identifier:string, accessType:string):Promise<unknown> {\n return await this.#master.access(this.#prefix + ':' + identifier, accessType);\n }\n async accessAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.access(identifier, 'json') as IJSONAccessor;\n }\n async accessAsText(identifier:string):Promise<ITextAccessor> {\n return await this.access(identifier, 'text') as ITextAccessor;\n }\n async accessAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.access(identifier, 'binary') as IBinaryAccessor;\n }\n\n async create(identifier:string, accessType:string):Promise<unknown> {\n return await this.#master.create(this.#prefix + ':' + identifier, accessType);\n }\n async createAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.create(identifier, 'json') as IJSONAccessor;\n }\n async createAsText(identifier:string):Promise<ITextAccessor> {\n return await this.create(identifier, 'text') as ITextAccessor;\n }\n async createAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.create(identifier, 'binary') as IBinaryAccessor;\n }\n\n async open(identifier:string, accessType:string):Promise<unknown> {\n return await this.#master.open(this.#prefix + ':' + identifier, accessType);\n }\n async openAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.open(identifier, 'json') as IJSONAccessor;\n }\n async openAsText(identifier:string):Promise<ITextAccessor> {\n return await this.open(identifier, 'text') as ITextAccessor;\n }\n async openAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.open(identifier, 'binary') as IBinaryAccessor;\n }\n\n async copy(oldIdentifier:string, newIdentifier:string) {\n await this.#master.copy(this.#prefix + ':' + oldIdentifier, this.#prefix + ':' + newIdentifier);\n }\n async move(oldIdentifier:string, newIdentifier:string) {\n await this.#master.move(this.#prefix + ':' + oldIdentifier, this.#prefix + ':' + newIdentifier);\n }\n\n async dropDir(identifier:string) {\n await this.#master.dropDir(this.#prefix + ':' + identifier);\n }\n\n async drop(identifier:string) {\n await this.#master.drop(this.#prefix + ':' + identifier);\n }\n \n async dropAll() {\n await this.#master.dropDir(this.#prefix);\n }\n\n async release(identifier:string) {\n await this.#master.release(this.#prefix + ':' + identifier);\n }\n\n async releaseDir(identifier:string) {\n await this.#master.releaseDir(this.#prefix + ':' + identifier);\n }\n\n async releaseAll() {\n await this.#master.releaseDir(this.#prefix);\n }\n\n async commit(identifier:string='') {\n await this.#master.commit(this.#prefix + ':' + identifier);\n }\n\n async commitAll() {\n await this.#master.commit(this.#prefix);\n }\n}\n\nexport default ACSubStorage;","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { AccessorEvent } from 'types';\n\nimport { IAccessorManager, BinaryAccessorManager, JSONAccessorManager, TextAccessorManager, CustomAccessorManager, ICustomAccessor } from 'features/accessors';\nimport StorageAccessControl, { AccessTree } from 'features/StorageAccessControl';\nimport { Accesses, AccessType } from 'features/StorageAccess';\nimport { IBinaryAccessor, IJSONAccessor, ITextAccessor } from '@/features/accessors';\nimport {\n DirectoryAccessorManager,\n RootAccessorManager,\n} from 'features/accessors';\n\nimport ACSubStorage from './ACSubStorage';\nimport { StorageError } from './errors';\nimport { IACStorage, IACSubStorage } from './types';\n\ninterface ACStorageOption {\n cacheName?:string;\n noCache?:boolean;\n}\n\nclass ACStorage implements IACStorage {\n protected eventListeners:{\n access?: Function,\n access_dir?: Function,\n destroy?: Function,\n destroy_dir?: Function,\n } = {};\n\n protected cachePath:string;\n protected noCache:boolean;\n protected cacheName:string;\n \n protected basePath: string;\n protected customAccessEvents: Record<string, AccessorEvent<unknown>> = {};\n protected accessors:Map<string, IAccessorManager<unknown>> = new Map();\n\n protected accessControl:StorageAccessControl;\n protected accessCache:Record<string, string> = {};\n\n constructor(basePath:string, option:ACStorageOption={}) {\n this.basePath = basePath;\n this.accessControl = this.initAccessControl();\n \n this.noCache = option.noCache ?? false;\n this.cacheName = option.cacheName ?? '.acstorage';\n\n this.cachePath = path.join(this.basePath, '.acstorage');\n \n this.accessors.set('', RootAccessorManager.fromFS());\n\n if (!this.noCache) this.loadCache();\n }\n\n protected loadCache() {\n try {\n const cacheData = fs.readFileSync(this.cachePath, 'utf8');\n\n this.accessCache = JSON.parse(cacheData);\n }\n catch {\n ;\n }\n }\n\n protected saveCache() {\n const cacheData = JSON.stringify(this.accessCache, null, 4);\n\n fs.writeFileSync(this.cachePath, cacheData, 'utf8');\n }\n\n protected async getOrCreateAccessorFromAccess(\n identifier: string,\n sa: Accesses,\n mode: 'create' | 'open' | 'access'\n ): Promise<IAccessorManager<unknown>> {\n const targetPath = path.join(this.basePath, identifier.replaceAll(':', '/'));\n this.eventListeners.access?.(identifier, sa);\n\n let item = this.accessors.get(identifier);\n if (item != undefined && !item.isDropped()) {\n if (mode === 'create') {\n throw new StorageError(`File '${identifier}' already exists in memory`);\n }\n return item;\n }\n \n let acm:IAccessorManager<unknown>;\n switch(sa.accessType) {\n case 'directory':\n acm = DirectoryAccessorManager.fromFS(targetPath, sa.tree);\n break;\n case 'json':\n acm = JSONAccessorManager.fromFS(targetPath, sa.structure);\n break;\n case 'binary':\n acm = BinaryAccessorManager.fromFS(targetPath);\n break;\n case 'text':\n acm = TextAccessorManager.fromFS(targetPath);\n break;\n case 'custom':\n const event = this.customAccessEvents[sa.id];\n if (!event) {\n throw new StorageError('Invalid access type');\n }\n const ac = await event.init(targetPath, ...sa.args);\n acm = CustomAccessorManager.from(ac, {\n customId: sa.id,\n event,\n actualPath: targetPath,\n customArgs: sa.args,\n });\n break;\n default:\n throw new StorageError('Invalid access type');\n break;\n }\n\n const exists = await acm.exists();\n\n if (mode === 'create') {\n if (exists) {\n throw new StorageError(`File '${identifier}' already exists on disk`);\n }\n await acm.create();\n } else if (mode === 'open') {\n if (!exists) {\n throw new StorageError(`File '${identifier}' does not exist`);\n }\n await acm.load();\n } else {\n if (!exists) await acm.create();\n else await acm.load();\n }\n \n this.accessCache[identifier] = sa.accessType !== 'custom' ? sa.accessType : sa.id;\n this.accessors.set(identifier, acm);\n return acm;\n }\n\n protected async getOrCreateAccessor(\n identifier: string,\n accessType: string,\n mode: 'create' | 'open' | 'access'\n ): Promise<IAccessorManager<unknown>> {\n const sa = this.accessControl.validateAccess(identifier, accessType);\n return await this.getOrCreateAccessorFromAccess(identifier, sa, mode);\n }\n\n protected initAccessControl():StorageAccessControl {\n const onAccess = async (identifier:string, sa:Accesses) => {\n return await this.getOrCreateAccessorFromAccess(identifier, sa, 'access');\n }\n const onDestroy = async (identifier:string) => {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await onDestroy(child);\n }\n if (identifier === '') return;\n this.eventListeners.destroy?.(identifier);\n\n if (!accessor.isDropped()) await accessor.drop();\n\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n };\n const onChainDependency = (dependentId:string, dependencyId:string) => {\n const dependent = this.accessors.get(dependentId);\n\n if (dependent) {\n dependent.dependent.add(dependencyId);\n }\n }\n \n return new StorageAccessControl({\n onAccess,\n onDestroy,\n onChainDependency,\n });\n }\n\n addListener(event: 'destroy'|'access', listener: Function): void {\n switch(event) {\n case 'access':\n this.eventListeners.access = listener;\n break;\n case 'destroy':\n this.eventListeners.destroy = listener;\n break;\n }\n }\n\n register(tree:AccessTree) {\n this.accessControl.register(tree);\n }\n\n addAccessEvent<T extends string, AC>(customId:(T extends AccessType ? never : T), event:AccessorEvent<AC>) {\n this.customAccessEvents[customId] = event as AccessorEvent<unknown>;\n }\n\n subStorage(identifier:string):IACSubStorage {\n const accessType = this.accessControl.getAccessType(identifier);\n if (accessType.length !== 1 && accessType[0] !== 'directory') {\n throw new StorageError(`Cannot infer the access type of ${identifier}`);\n }\n\n return new ACSubStorage(this, identifier);\n }\n\n async access(identifier:string, accessType:string):Promise<unknown> {\n return await this.accessControl.access(identifier, accessType);\n }\n async accessAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.access(identifier, 'json') as IJSONAccessor;\n }\n async accessAsText(identifier:string):Promise<ITextAccessor> {\n return await this.access(identifier, 'text') as ITextAccessor;\n }\n async accessAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.access(identifier, 'binary') as IBinaryAccessor;\n }\n\n async create(identifier:string, accessType:string):Promise<unknown> {\n const acm = await this.getOrCreateAccessor(identifier, accessType, 'create');\n return acm.accessor;\n }\n async createAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.create(identifier, 'json') as IJSONAccessor;\n }\n async createAsText(identifier:string):Promise<ITextAccessor> {\n return await this.create(identifier, 'text') as ITextAccessor;\n }\n async createAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.create(identifier, 'binary') as IBinaryAccessor;\n }\n\n async open(identifier:string, accessType:string):Promise<unknown> {\n const acm = await this.getOrCreateAccessor(identifier, accessType, 'open');\n return acm.accessor;\n }\n async openAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.open(identifier, 'json') as IJSONAccessor;\n }\n async openAsText(identifier:string):Promise<ITextAccessor> {\n return await this.open(identifier, 'text') as ITextAccessor;\n }\n async openAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.open(identifier, 'binary') as IBinaryAccessor;\n }\n\n async copy(oldIdentifier:string, newIdentifier:string) {\n const accessType = this.validateAndGetAccessTypePair(oldIdentifier, newIdentifier);\n await this.commit(oldIdentifier);\n\n await this.accessControl.copy(oldIdentifier, newIdentifier, accessType);\n }\n async move(oldIdentifier:string, newIdentifier:string) {\n const accessType = this.validateAndGetAccessTypePair(oldIdentifier, newIdentifier);\n await this.commit(oldIdentifier);\n \n await this.accessControl.move(oldIdentifier, newIdentifier, accessType);\n }\n \n protected validateAndGetAccessTypePair(oldIdentifier:string, newIdentifier:string) {\n /*\n accessControl에서 작업 수행 전, cache를 통한 검증을 진행\n\n 1. oldIdentifier에 대한 accessType이 캐시에 존재하는 경우\n - noCahce 설정이 false 라면 예외 발생\n - noCache 설정이 true 라면 accessControl에서 직접 확인\n - accessType이 1개가 아니라면 예외 발생\n 2. oldIdentifier, newIdentifier의 accessType을 비교\n - newIdentifier의 accessType이 존재하지 않다면 진행\n - 실제로 accessor가 적절한지는 AccessControl에서 검증\n 3. accessControl에게 copy 요청\n - oldIdentifier의 accessor를 newIdentifier로 복사\n */\n const oldAT:string = this.accessCache[oldIdentifier];\n const newAT = this.accessCache[newIdentifier];\n\n if (oldAT == null) {\n if (this.noCache) {\n const atCandidates = this.accessControl.getAccessType(oldIdentifier);\n\n if (atCandidates.length !== 1) {\n throw new StorageError(`Cannot infer the access type of ${oldIdentifier}`);\n }\n return atCandidates[0];\n }\n else {\n throw new StorageError(`The accessor for '${oldIdentifier}' is not initialized.`);\n }\n }\n else if (newAT != null && oldAT !== newAT) {\n throw new StorageError(`The accessors '${oldIdentifier}'(${oldAT}) and '${newIdentifier}'(${newAT}) are not compatible.`); \n }\n\n return oldAT;\n }\n\n async dropDir(identifier:string) {\n if (identifier === '') {\n throw new StorageError('Cannot drop the root directory. use dropAll() instead.');\n }\n \n await this.accessControl.destroyDir(identifier);\n }\n\n async drop(identifier:string) {\n await this.accessControl.destroy(identifier);\n }\n \n async dropAll() {\n await this.accessControl.destroyDir('');\n }\n\n async release(identifier:string) {\n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n async releaseDir(identifier:string) {\n if (identifier === '') {\n throw new StorageError('Cannot release the root directory. use releaseAll() instead.');\n }\n \n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n async releaseAll() {\n await this.commitAll();\n await this.#unloadFromMemory('');\n }\n\n async #unloadFromMemory(identifier:string) {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await this.#unloadFromMemory(child);\n }\n\n if (identifier !== '') {\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n }\n }\n\n async commit(identifier:string='') {\n await this.#commitRecursive(identifier);\n \n if (!this.noCache) this.saveCache();\n }\n\n async commitAll() {\n await this.commit('');\n }\n\n async #commitRecursive(identifier:string) {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const childIdentifier of accessor.dependent) {\n await this.#commitRecursive(childIdentifier);\n }\n\n if (!accessor.isDropped()) await accessor.commit();\n }\n}\n\nexport default ACStorage;","import { BinaryAccessorManager, CustomAccessorManager, DirectoryAccessorManager, IAccessorManager, JSONAccessorManager, TextAccessorManager } from 'features/accessors';\nimport { Accesses } from 'features/StorageAccess';\nimport StorageAccessControl from 'features/StorageAccessControl';\nimport { StorageError } from './errors';\nimport ACStorage from './ACStorage';\n\nclass MemACStorage extends ACStorage {\n constructor() {\n super('', { noCache: true });\n }\n\n override async getOrCreateAccessorFromAccess(\n identifier: string,\n sa: Accesses,\n mode: 'create' | 'open' | 'access'\n ): Promise<IAccessorManager<unknown>> {\n this.eventListeners.access?.(identifier, sa);\n\n let item = this.accessors.get(identifier);\n if (item != undefined && !item.isDropped()) {\n if (mode === 'create') {\n throw new StorageError(`File '${identifier}' already exists in memory`);\n }\n return item;\n }\n \n let acm:IAccessorManager<unknown>;\n switch(sa.accessType) {\n case 'directory':\n acm = DirectoryAccessorManager.fromMemory(sa.tree);\n break;\n case 'json':\n acm = JSONAccessorManager.fromMemory(sa.structure);\n break;\n case 'binary':\n acm = BinaryAccessorManager.fromMemory();\n break;\n case 'text':\n acm = TextAccessorManager.fromMemory();\n break;\n case 'custom':\n const event = this.customAccessEvents[sa.id];\n if (!event) {\n throw new StorageError('Invalid access type');\n }\n const ac = await event.init(null as any, ...sa.args);\n acm = CustomAccessorManager.from(ac, {\n customId: sa.id,\n event,\n actualPath: null as any,\n customArgs: sa.args,\n });\n break;\n default:\n throw new StorageError('Logic Error : Invalid access type');\n break;\n }\n\n const exists = await acm.exists();\n\n if (mode === 'create') {\n if (exists) {\n throw new StorageError(`File '${identifier}' already exists in memory`);\n }\n await acm.create();\n } else if (mode === 'open') {\n if (!exists) {\n throw new StorageError(`File '${identifier}' does not exist`);\n }\n await acm.load();\n } else {\n if (!exists) await acm.create();\n else await acm.load();\n }\n \n this.accessCache[identifier] = sa.accessType !== 'custom' ? sa.accessType : sa.id;\n this.accessors.set(identifier, acm);\n return acm;\n }\n\n override initAccessControl() {\n const onAccess = async (identifier:string, sa:Accesses) => {\n return await this.getOrCreateAccessorFromAccess(identifier, sa, 'access');\n }\n const onDestroy = async (identifier:string) => {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await onDestroy(child);\n }\n if (identifier === '') return;\n this.eventListeners.destroy?.(identifier);\n\n if (!accessor.isDropped()) accessor.drop();\n\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n };\n const onChainDependency = (dependentId:string, dependencyId:string) => {\n const dependent = this.accessors.get(dependentId);\n\n if (dependent) {\n dependent.dependent.add(dependencyId);\n }\n };\n\n return new StorageAccessControl({\n onAccess,\n onDestroy,\n onChainDependency,\n });\n }\n\n override async release(identifier:string) {\n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n override async releaseDir(identifier:string) {\n if (identifier === '') {\n throw new StorageError('Cannot release the root directory. use releaseAll() instead.');\n }\n \n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n override async releaseAll() {\n await this.commitAll();\n await this.#unloadFromMemory('');\n }\n\n async #unloadFromMemory(identifier:string) {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await this.#unloadFromMemory(child);\n }\n\n if (identifier !== '') {\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n }\n }\n}\n\nexport default MemACStorage;","import { JSONTree } from '@hve/json-accessor';\nimport type { Accesses, NonUnionAccesses, UnionAccess } from './types';\nimport { leaf, type Leaf } from 'tree-navigate';\n\nclass StorageAccess {\n static Nothing():Leaf<Accesses> { return leaf({accessType : 'nothing' }) };\n static Text():Leaf<Accesses> { return leaf({accessType : 'text'}) };\n static Binary():Leaf<Accesses> { return leaf({accessType : 'binary' }) };\n static JSON(structure?:JSONTree):Leaf<Accesses> {\n return leaf({ accessType : 'json', structure });\n };\n static Custom(id:string, ...args:any[]):Leaf<Accesses> {\n return leaf({ accessType : 'custom', args, id });\n }\n static Union(...accesses:Leaf<Accesses>[]):Leaf<UnionAccess> {\n return leaf({ accessType : 'union', accesses : accesses.map(leaf=>leaf.value) });\n }\n}\n\nexport default StorageAccess;"],"names":["t","i","e","r","fs","TreeNavigate","leaf"],"mappings":"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","x_google_ignoreList":[0,12,16]}
|
|
1
|
+
{"version":3,"file":"bundle.mjs","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';\nimport * as path from 'node:path';\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}\nclass UnserializableTypeError extends JSONAccessorError {\n constructor(key, value) {\n super(`Unserializable data: '${value}' for field '${key}'`);\n this.name = 'UnserializableTypeError';\n }\n}\nclass IncompatibleTypeError extends JSONAccessorError {\n constructor(message) {\n super(message);\n this.name = 'IncompatibleTypeError';\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 __brand = 'struct';\n constructor(tree) {\n super('struct');\n this.value['struct'] = tree;\n this.value['strict'] = false;\n }\n strict() {\n this.value['strict'] = true;\n return this;\n }\n}\n\nclass ArrayJSONTypeLeaf extends BaseJSONTypeLeaf {\n __brand = 'array';\n constructor(element) {\n super('array');\n this.value['strict'] = false;\n if (element == null) {\n this.value['element'] = undefined;\n }\n else if (t in element) {\n this.value['element'] = element.value;\n }\n else {\n const obj = new StructJSONTypeLeaf(element);\n this.value['element'] = obj.strict().value;\n }\n }\n strict() {\n this.value['strict'] = true;\n return this;\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 &&\n typeof target === 'object' &&\n 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: (tree) => new StructJSONTypeLeaf(tree),\n Array: (jsonTree) => new ArrayJSONTypeLeaf(jsonTree),\n Any: () => new BaseJSONTypeLeaf('any'),\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}\nfunction isObject(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * 경로 문자열을 연결하여 반환\n */\nfunction dotJoin(prefix, key) {\n return (prefix != null && prefix.length > 0) ? `${prefix}.${key}` : key;\n}\n/**\n * 값이 json-accessor 호환 가능 타입인지 확인하고 타입명 반환, 호환 불가능할 경우 null 반환\n */\nfunction getJSONTypeName(value) {\n if (value == null)\n return 'null';\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}\n\nconst DELIMITER = '.';\nclass Flattener {\n navigate;\n typeChecker;\n constructor(navigate, typeChecker) {\n this.navigate = navigate;\n this.typeChecker = typeChecker;\n }\n /**\n * key-value 쌍에 대한 경로 유효성 검사후 `Array<[key, value]>` 형태로 반환\n *\n * @param key - dot(.)으로 구분된 경로 문자열\n * @param value - 유효성 검사를 위한 값\n * @return 인자를 [[key, value]] 형태로 반환\n */\n transform(key, value) {\n // [[key, value]] 를 그대로 반환하는건 flat()과의 호환을 위함\n // 추후 구현에서 한 key에서 여러 결과를 리턴하는 등의 확장 가능성이 있음\n if (key === '') {\n // 루트 경로는 비허용\n throw new JSONAccessorError(`Invalid path: ${key}`);\n }\n if (this.navigate == null) {\n return [[key, value]];\n }\n const traceResult = this.navigate.trace(key);\n if (traceResult.find) {\n if (traceResult.isLeaf) {\n const node = traceResult.value;\n this.typeChecker.check(key, value, node);\n if (value != null && node.type === 'struct') {\n // struct 형식인 value에 대한 구조 검사\n this.flatStruct({\n target: value,\n prefix: key,\n structData: node,\n });\n }\n return [[key, value]];\n }\n else {\n // 경로는 존재하지만 노드의 중간인 경우\n // value가 object 형태라면 flat()을 통해 유효성 검사를 진행\n if (!isObject(value)) {\n throw new JSONAccessorError(`Field '${key}' is not allowed`);\n }\n return this.flat({\n target: value,\n prefix: key,\n });\n }\n }\n // 경로상 존재하지 않는 경우\n else if (traceResult.tracePath.length === 0) {\n throw new JSONAccessorError(`Field '${key}' is not allowed`);\n }\n // 중간 경로까지는 존재하는 경우\n else {\n const { tracePath } = traceResult;\n const reached = tracePath.join(DELIMITER);\n const node = this.navigate.get(reached);\n // 닿을 수 있는 마지막 노드의 타입이 struct, any 라면 허용됨\n if (!node || (node.type !== 'struct' && node.type !== 'any')) {\n throw new JSONAccessorError(`Field '${key}' is not allowed`);\n }\n return [[key, value]];\n }\n }\n /**\n * 객체를 평탄화하여 `Array<[key, value]>`로 반환\n *\n * 유효성 검증을 포함함\n */\n flat({ target, prefix }) {\n if (!this.navigate) {\n return this.flatWithoutNavigate({ target, prefix });\n }\n const navigate = this.navigate;\n return Object.entries(target)\n .flatMap(([key, value]) => {\n const newKey = dotJoin(prefix, key);\n const node = navigate.get(newKey, { allowIntermediate: true });\n if (node == null) {\n throw new JSONAccessorError(`Field '${newKey}' is not allowed`);\n }\n else if (isJSONTypeData(node)) {\n this.typeChecker.check(newKey, value, node);\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.flatStruct({\n target: value,\n prefix: newKey,\n structData: node,\n });\n }\n else if (node.type === 'array') {\n // @TODO : 배열 타입에 대한 세부 처리 필요\n // 현재는 배열 경로까지만 flat이 이루어지므로\n // get/set 시 배열 전체를 가져오거나 덮어쓰게됨\n return [[newKey, value]];\n }\n else {\n return [[newKey, value]];\n }\n }\n else if (isObject(value)) {\n return this.flat({\n target: value,\n prefix: newKey,\n });\n }\n else {\n // 가져온 값이 JSONTypeData(탐색한 노드의 끝) 도 아니고\n // 일반 object(중간 노드)도 아닌 다른 타입인 경우\n //\n // TreeNavigate<JSONTypeData> 에서 가져온 결과에선 나올 수 없으므로 데이터 오염이라고 판단\n throw new JSONAccessorError(`Data corrupted: unexpected node type encountered. key: '${newKey}', value: ${value} (${typeof value})`);\n }\n });\n }\n /**\n * struct 노드에 대한 flatten 수행\n */\n flatStruct({ target, prefix, structData }) {\n // struct는 내부 구조에 대한 구조 검증이 없으므로 유효성 검증 없이 단순 평탄화\n return Object.entries(target)\n .flatMap(([key, value]) => {\n const newKey = dotJoin(prefix, key);\n if (isObject(value)) {\n return this.flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n else {\n return [[newKey, value]];\n }\n });\n }\n /**\n * 유효성 검증 없이 평탄화 수행\n */\n flatWithoutNavigate({ target, prefix }) {\n return Object.entries(target)\n .flatMap(([key, value]) => {\n const newKey = dotJoin(prefix, key);\n if (isObject(value)) {\n return this.flatWithoutNavigate({\n target: value,\n prefix: newKey,\n });\n }\n else {\n return [[newKey, value]];\n }\n });\n }\n}\n\nclass CompatibilityChecker {\n constructor() {\n }\n check(key, value, typeData) {\n if (!this.isCompatible(value, typeData)) {\n const typeName = getJSONTypeName(value);\n if (typeName == null) {\n throw new UnserializableTypeError(key, value);\n }\n else if (typeName === 'null') {\n throw new IncompatibleTypeError(`Incompatible type for field '${key}': expected '${typeData.type}' and not nullable, received null`);\n }\n else if (typeName === 'array' && typeData.type === 'array') {\n throw new IncompatibleTypeError(`Incompatible array structure for field '${key}'`);\n }\n else if (typeData.type === 'union') {\n const expected = this.getUnionTypeNames(typeData);\n throw new IncompatibleTypeError(`Incompatible type for field '${key}': expected one of (${expected.join(' | ')}), received ${value} ('${typeName}')`);\n }\n else {\n throw new IncompatibleTypeError(`Incompatible type for field '${key}': expected '${typeData.type}', received '${typeName}'`);\n }\n }\n }\n isCompatible(target, jsonTypeData) {\n // jsonTypeData 타입이 primitive 인 경우\n // union 타입 검사 시 isCompatible() 가 다시 호출된 경우 발생\n if (typeof jsonTypeData !== 'object') {\n return target === jsonTypeData;\n }\n else {\n const targetType = getJSONTypeName(target);\n if (targetType === null) {\n return false;\n }\n else if (jsonTypeData.type === 'any') {\n return true;\n }\n else if (targetType === 'null') {\n return jsonTypeData.nullable;\n }\n else if (jsonTypeData.type === 'union') {\n for (const candidate of jsonTypeData.candidates) {\n if (this.isCompatible(target, candidate)) {\n return true;\n }\n }\n return false;\n }\n else if (targetType === jsonTypeData.type) {\n switch (jsonTypeData.type) {\n case 'array':\n return this.isArrayCompatible(target, jsonTypeData);\n case 'struct':\n return this.isStructCompatible(target, jsonTypeData);\n default:\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n isArrayCompatible(array, arrayTypeData) {\n if (!arrayTypeData.strict || !arrayTypeData.element)\n return true;\n for (const ele of array) {\n if (!this.isCompatible(ele, arrayTypeData.element)) {\n return false;\n }\n }\n return true;\n }\n isStructCompatible(struct, structTypeData) {\n if (!structTypeData.strict)\n return true;\n if (!structTypeData.struct)\n return true;\n const navigate = r.from(structTypeData.struct);\n const flattener = new Flattener(navigate, this);\n try {\n flattener.flat({ target: struct, prefix: '' });\n return true;\n }\n catch (e) {\n return false;\n }\n }\n getUnionTypeNames(union) {\n return union.candidates.map((c) => {\n if (typeof c === 'object') {\n return c.type;\n }\n else {\n return c.toString();\n }\n });\n }\n}\n\nclass SchemaFlattener {\n flattener;\n checker;\n constructor(navigate) {\n this.checker = new CompatibilityChecker();\n this.flattener = new Flattener(navigate, this.checker);\n }\n flat(target) {\n return this.flattener.flat({\n target,\n prefix: '',\n });\n }\n transform(data) {\n return data.flatMap(([key, value]) => {\n return this.flattener.transform(key, value);\n });\n }\n}\n\nclass JSONFS {\n #writeLock = Promise.resolve();\n async read(filename) {\n if (!existsSync(filename)) {\n return {};\n }\n const jsonText = await fs.readFile(filename, 'utf8');\n if (jsonText.trim() === '') {\n throw new Error(`JSON file is empty: \"${filename}\"`);\n }\n try {\n return JSON.parse(jsonText);\n }\n catch (error) {\n throw new Error(`Failed to parse JSON from \"${filename}\": ` +\n `${error instanceof Error ? error.message : String(error)}. ` +\n `Content preview: \"${jsonText.substring(0, 100)}...\"`);\n }\n }\n async write(filename, contents) {\n // Serialize writes using a lock chain\n const previousLock = this.#writeLock;\n let releaseLock;\n this.#writeLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n try {\n // Wait for previous write to complete\n await previousLock;\n // Perform atomic write\n await this.#atomicWrite(filename, contents);\n }\n finally {\n releaseLock();\n }\n }\n async #atomicWrite(filename, contents) {\n const jsonString = JSON.stringify(contents, null, 4);\n const dir = path.dirname(filename);\n // Generate unique temp file name\n const tempFile = `${filename}.tmp.${Date.now()}.${Math.random().toString(36).substring(2)}`;\n try {\n // Ensure parent directory exists (create if needed)\n await fs.mkdir(dir, { recursive: true });\n // Write to temp file\n await fs.writeFile(tempFile, jsonString, 'utf8');\n // Atomic rename (this is atomic on POSIX systems)\n await fs.rename(tempFile, filename);\n }\n catch (error) {\n // Clean up temp file on failure\n try {\n if (existsSync(tempFile)) {\n await fs.rm(tempFile);\n }\n }\n catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n }\n async rm(filename) {\n try {\n await fs.rm(filename);\n }\n catch {\n // Ignore errors (file might not exist)\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 DefaultValueProvider {\n #navigate;\n constructor(navigate = null) {\n this.#navigate = navigate;\n }\n get(key) {\n if (this.#navigate == null) {\n return undefined;\n }\n const result = this.#navigate.walk(key, { allowIntermediate: true });\n if (result == null) {\n return undefined;\n }\n else if (isJSONTypeData(result.value)) {\n const defaultValue = result.value.default_value;\n return ((defaultValue != null)\n ? defaultValue\n : undefined);\n }\n else {\n // for (const [key, value] of Object.entries(result.value)) {\n // console.log(key, value);\n // }\n return this.#getDefaultData(result.value);\n }\n }\n #getDefaultData(typeData) {\n if (t in typeData) {\n if (typeData.value.default_value != null) {\n return typeData.value.default_value;\n }\n return undefined;\n }\n else {\n let hasKey = false;\n const result = {};\n for (const [key, value] of Object.entries(typeData)) {\n const defaultValue = this.#getDefaultData(value);\n if (defaultValue !== undefined) {\n result[key] = defaultValue;\n hasKey = true;\n }\n }\n return (hasKey\n ? result\n : undefined);\n }\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 #defaultValueProvider;\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 SchemaFlattener(this.explorer);\n this.#defaultValueProvider = new DefaultValueProvider(this.explorer);\n }\n else {\n this.#flatter = new SchemaFlattener();\n this.#defaultValueProvider = new DefaultValueProvider();\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 let value = this.#getData(key);\n if (value == null) {\n value = this.#defaultValueProvider.get(key);\n }\n return value;\n }\n get(...keys) {\n this.#ensureNotDropped();\n const result = {};\n for (const key of keys) {\n let value = this.#getData(key);\n if (value == null) {\n value = this.#defaultValueProvider.get(key);\n }\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 {\n type IJSONAccessor,\n type JSONTree,\n JSONAccessor,\n MemJSONAccessor,\n} from '@hve/json-accessor';\nimport { IAccessorManager } from '../types';\n\nclass JSONAccessorManager implements IAccessorManager<IJSONAccessor> {\n accessor : IJSONAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n \n static fromFS(actualPath:string, tree?:JSONTree) {\n return new JSONAccessorManager(new JSONAccessor(actualPath, tree));\n }\n\n static fromMemory(tree?:JSONTree) {\n return new JSONAccessorManager(new MemJSONAccessor(tree));\n }\n\n private constructor(accessor:IJSONAccessor) {\n this.accessor = accessor;\n }\n\n async create() {\n \n }\n async load() {\n await this.accessor.load();\n }\n async exists() {\n return await this.accessor.hasExistingData();\n }\n async move(acm:IAccessorManager<IJSONAccessor>) {\n const newAC = await this.copy(acm);\n await Promise.all([\n acm.commit(),\n this.drop()\n ]);\n \n return newAC;\n }\n async copy(acm:IAccessorManager<IJSONAccessor>) {\n if (this.isDropped()) {\n throw new Error(`This accessor is already dropped.`);\n }\n \n acm.accessor.set(this.accessor.getAll());\n }\n\n isCompatible(other: IAccessorManager<unknown>): other is JSONAccessorManager {\n if (!(other instanceof JSONAccessorManager)) {\n return false;\n }\n \n return this.#isEqualJsonTree(this.accessor.tree, other.accessor.tree);\n }\n\n #isEqualJsonTree(a:JSONTree|null, b:JSONTree|null):boolean {\n if (a == null && b == null) {\n return true;\n }\n else if (a == null || b == null) {\n return false;\n }\n else if (typeof a !== typeof b) {\n return false;\n }\n else if (typeof a === 'object') {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n const aValue = a[key];\n const bValue = b[key];\n\n if (typeof aValue !== typeof bValue) {\n return false;\n }\n else if (typeof aValue === 'number') {\n return aValue === bValue;\n }\n else if (!this.#isEqualJsonTree(aValue as JSONTree, bValue as JSONTree)) {\n return false;\n }\n }\n return true;\n }\n return a == b;\n }\n \n async drop() {\n await this.accessor.drop();\n }\n async commit() {\n await this.accessor.save();\n }\n isDropped() {\n return this.accessor.dropped;\n }\n}\n\nexport default JSONAccessorManager;","export class AccessorError extends Error {\n constructor(message:string) {\n super(message);\n this.name = 'AccessorError';\n }\n}","import { existsSync } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport type { IBinaryAccessor } from './types';\nimport { AccessorError } from '../errors';\n\nclass BinaryAccessor implements IBinaryAccessor {\n #filePath:string;\n #dropped:boolean = false;\n\n constructor(filePath:string) {\n this.#filePath = filePath;\n }\n \n hasExistingData() {\n return existsSync(this.#filePath);\n }\n async write(buffer:Buffer) {\n this.#ensureNotDropped();\n \n await fs.writeFile(this.#filePath, buffer);\n }\n async read():Promise<Buffer> {\n this.#ensureNotDropped();\n \n if (existsSync(this.#filePath)) {\n return await fs.readFile(this.#filePath);\n }\n else {\n return Buffer.from('');\n }\n }\n async writeBase64(data:string) {\n this.#ensureNotDropped();\n\n const buffer = Buffer.from(data, 'base64');\n await this.write(buffer);\n }\n async readBase64():Promise<string> {\n this.#ensureNotDropped();\n\n const buffer = await this.read();\n return buffer.toString('base64');\n }\n async drop() {\n if (this.#dropped) return;\n\n this.#dropped = true;\n if (existsSync(this.#filePath)) {\n await fs.rm(this.#filePath, { force: true });\n }\n }\n async commit() {\n this.#ensureNotDropped();\n // nothing to do\n }\n \n get dropped() {\n return this.#dropped;\n }\n #ensureNotDropped() {\n if (this.dropped) {\n throw new AccessorError('This accessor has been dropped');\n }\n }\n \n}\n\nexport default BinaryAccessor;","import type { IBinaryAccessor } from './types';\n\nclass MemBinaryAccessor implements IBinaryAccessor {\n #dropped:boolean = false;\n #buffer:Buffer = Buffer.from('');\n \n hasExistingData() {\n return false;\n }\n async write(buffer:Buffer) {\n this.#buffer = buffer;\n }\n async read():Promise<Buffer> {\n return this.#buffer;\n }\n async writeBase64(data:string) {\n const buffer = Buffer.from(data, 'base64');\n await this.write(buffer);\n }\n async readBase64():Promise<string> {\n const buffer = await this.read();\n return buffer.toString('base64');\n }\n\n async commit() {}\n async drop() { this.#dropped = true; }\n get dropped() { return this.#dropped; }\n}\n\nexport default MemBinaryAccessor;","import BinaryAccessor from './BinaryAccessor';\nimport { IAccessorManager } from '../types';\nimport { type IBinaryAccessor } from './types';\nimport MemBinaryAccessor from './MemBinaryAccessor';\n\nclass BinaryAccessorManager implements IAccessorManager<IBinaryAccessor> {\n accessor : IBinaryAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n \n static fromFS(actualPath:string) {\n return new BinaryAccessorManager(new BinaryAccessor(actualPath));\n }\n\n static fromMemory() {\n return new BinaryAccessorManager(new MemBinaryAccessor());\n }\n\n private constructor(accessor:IBinaryAccessor) {\n this.accessor = accessor;\n }\n\n async create() {\n \n }\n async load() {\n \n }\n async exists() {\n return this.accessor.hasExistingData();\n }\n async move(acm:IAccessorManager<IBinaryAccessor>) {\n const newAC = await this.copy(acm);\n await acm.commit();\n await this.drop();\n \n \n return newAC;\n }\n async copy(ac:IAccessorManager<IBinaryAccessor>) {\n if (this.isDropped()) {\n throw new Error(`This accessor is already dropped.`);\n }\n\n ac.accessor.write(await this.accessor.read());\n }\n\n isCompatible(other:IAccessorManager<unknown>):other is BinaryAccessorManager {\n return other instanceof BinaryAccessorManager;\n }\n \n async drop() {\n await this.accessor.drop();\n }\n async commit() {\n await this.accessor.commit();\n }\n isDropped() {\n return this.accessor.dropped;\n }\n}\n\nexport default BinaryAccessorManager;","import { existsSync } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport type { ITextAccessor } from './types';\nimport { AccessorError } from '../errors';\n\nclass TextAccessor implements ITextAccessor {\n #filePath:string;\n #dropped:boolean = false;\n\n constructor(filePath:string) {\n this.#filePath = filePath;\n }\n \n async hasExistingData() {\n return (\n existsSync(this.#filePath)\n && (await fs.stat(this.#filePath)).isFile()\n )\n }\n async write(text:string) {\n this.#ensureNotDropped();\n await fs.writeFile(this.#filePath, text);\n }\n async append(text:string) {\n this.#ensureNotDropped();\n await fs.appendFile(this.#filePath, text);\n }\n async read():Promise<string> {\n this.#ensureNotDropped();\n\n if (existsSync(this.#filePath)) {\n return (await fs.readFile(this.#filePath)).toString();\n }\n else {\n return '';\n }\n }\n\n async save() {\n this.#ensureNotDropped();\n\n if (!existsSync(this.#filePath)) {\n await fs.writeFile(this.#filePath, '');\n }\n }\n\n async drop() {\n if (this.dropped) return;\n \n await fs.rm(this.#filePath, { force: true });\n this.#dropped = true;\n }\n get dropped() {\n return this.#dropped;\n }\n #ensureNotDropped() {\n if (this.dropped) {\n throw new AccessorError('This accessor has been dropped');\n }\n }\n}\n\nexport default TextAccessor;","\nimport { type ITextAccessor } from './types';\n\nclass MemTextAccessor implements ITextAccessor {\n #dropped:boolean = false;\n #contents:string = '';\n\n async hasExistingData() {\n return false;\n }\n async write(text:string) {\n this.#contents = text;\n }\n async append(text:string) {\n this.#contents += text;\n }\n async read() {\n return this.#contents;\n }\n\n async save() {}\n get dropped() { return this.#dropped; }\n async drop() { this.#dropped = true; }\n}\n\nexport default MemTextAccessor;","import TextAccessor from './TextAccessor';\nimport MemTextAccessor from './MemTextAccessor';\nimport { IAccessorManager } from '../types';\nimport { ITextAccessor } from './types';\n\nclass TextAccessorManager implements IAccessorManager<ITextAccessor> {\n accessor : ITextAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n \n static fromFS(actualPath:string) {\n return new TextAccessorManager(new TextAccessor(actualPath));\n }\n\n static fromMemory() {\n return new TextAccessorManager(new MemTextAccessor());\n }\n\n private constructor(accessor:ITextAccessor) {\n this.accessor = accessor;\n }\n\n async create() {\n // nothing to do\n }\n async load() {\n\n }\n exists() {\n return this.accessor.hasExistingData();\n }\n\n async move(acm:IAccessorManager<ITextAccessor>) {\n const newAC = this.copy(acm);\n await acm.commit();\n await this.drop();\n \n return newAC;\n }\n async copy(acm:IAccessorManager<ITextAccessor>) {\n if (this.isDropped()) {\n throw new Error(`This accessor is already dropped.`);\n }\n acm.accessor.write(await this.accessor.read());\n }\n\n isCompatible(other:IAccessorManager<unknown>):other is TextAccessorManager {\n return other instanceof TextAccessorManager;\n }\n \n async drop() {\n await this.accessor.drop();\n }\n async commit() {\n await this.accessor.save();\n }\n isDropped() {\n return this.accessor.dropped;\n }\n}\n\nexport default TextAccessorManager;","class AccessorManagerError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AccessorManagerError';\n }\n}\n\nexport default AccessorManagerError;","import { AccessorEvent } from 'types';\nimport { IAccessorManager } from '../types';\nimport { AccessorManagerError } from 'errors';\n\ntype CustomAccessorArgs<AC> = {\n customId:string;\n event:AccessorEvent<AC>;\n actualPath:string;\n customArgs:any[];\n}\n\nclass CustomAccessorManager<AC> implements IAccessorManager<AC> {\n #customId:string;\n #customArgs:any[];\n #accessor : AC|null;\n #actualPath : string;\n dependent = new Set<string>();\n dependency = new Set<string>();\n\n #event:Omit<AccessorEvent<AC>, 'init'>;\n \n static from<AC>(ac:AC, args:CustomAccessorArgs<AC>) {\n return new CustomAccessorManager<AC>(ac, args);\n }\n\n private constructor(ac:AC, args:CustomAccessorArgs<AC>) {\n const { customId, event, actualPath, customArgs } = args;\n this.#accessor = ac;\n this.#customId = customId;\n this.#customArgs = customArgs;\n this.#actualPath = actualPath;\n this.#event = event;\n }\n\n get accessor() {\n if (!this.#accessor) {\n throw new AccessorManagerError('Accessor is dropped');\n }\n\n return this.#accessor;\n }\n\n async create() {\n if (this.#event.create) await this.#event.create(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n\n async load() {\n if (this.#event.load) await this.#event.load(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n async exists() {\n if (this.#event.exists) {\n return await this.#event.exists(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n else {\n return false;\n }\n }\n\n async move(ac:IAccessorManager<AC>) {\n if (this.#event.move) {\n await this.#event.move(this.accessor, ac.accessor);\n }\n else if (this.#event.copy) {\n await this.#event.copy(this.accessor, ac.accessor);\n }\n else {\n throw new AccessorManagerError('This accessor does not support move operation.');\n }\n\n this.drop();\n }\n async copy(ac:IAccessorManager<AC>) {\n if (this.#event.copy) {\n await this.#event.copy(this.accessor, ac.accessor);\n }\n else {\n throw new AccessorManagerError('This accessor does not support copy operation.');\n }\n }\n\n isCompatible(other: IAccessorManager<unknown>): boolean {\n if (!(other instanceof CustomAccessorManager)) {\n return false;\n }\n else if (this.#customId !== other.#customId) {\n return false;\n }\n else if (!this.#event.isCompatible) {\n return true;\n }\n else {\n return this.#event.isCompatible(this.accessor, other.accessor);\n }\n }\n \n async drop() {\n if (this.#accessor == null) return;\n if (this.#event.destroy) await this.#event.destroy(this.accessor, this.#actualPath, ...this.#customArgs);\n\n this.#accessor = null;\n }\n async commit() {\n if (this.#event.save) await this.#event.save(this.accessor, this.#actualPath, ...this.#customArgs);\n }\n isDropped() {\n return this.#accessor == null;\n }\n}\n\nexport default CustomAccessorManager;","import { IAccessorManager } from '../types';\n\nclass RootAccessorManager implements IAccessorManager<unknown> {\n accessor : unknown = {} as unknown;\n dependent = new Set<string>();\n dependency = new Set<string>();\n tree : any = {};\n \n static fromFS() {\n return new RootAccessorManager();\n }\n\n private constructor() {}\n\n async create() {}\n async load() {}\n async exists() { return false; }\n async move(ac:IAccessorManager<never>) {}\n async copy(ac:IAccessorManager<never>) {}\n\n isCompatible(other:IAccessorManager<unknown>) { return false; }\n async drop() {}\n async commit() {}\n isDropped() { return false; }\n}\n\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';\nimport { IDirectoryAccessor } from './types';\n\nclass DirectoryAccessor implements IDirectoryAccessor {\n private actualPath:string;\n\n constructor(actualPath:string) {\n this.actualPath = actualPath;\n }\n\n create() {\n if (!fs.existsSync(this.actualPath)) {\n fs.mkdirSync(this.actualPath, { recursive: true });\n }\n }\n\n exists() {\n try {\n if (!fs.existsSync(this.actualPath)) return false;\n\n const stat = fs.statSync(this.actualPath);\n return stat.isDirectory();\n }\n catch {\n return false;\n }\n }\n\n copy(other:DirectoryAccessor) {\n fs.cpSync(this.actualPath, other.actualPath, { recursive: true, force: true });\n }\n\n move(other:DirectoryAccessor) {\n fs.renameSync(this.actualPath, other.actualPath);\n }\n\n drop() {\n try {\n fs.rmSync(this.actualPath, { recursive: true });\n }\n catch {\n\n }\n }\n}\n\nexport default DirectoryAccessor;","import * as fs from 'fs';\nimport { IDirectoryAccessor } from './types';\n\nclass MemDirectoryAccessor implements IDirectoryAccessor {\n\n constructor() {\n\n }\n\n create() {}\n exists(): boolean {\n return true; \n }\n copy(other:MemDirectoryAccessor) {}\n move(other:MemDirectoryAccessor) {}\n drop() {}\n}\n\nexport default MemDirectoryAccessor;","import deepEqual from 'fast-deep-equal';\n\nimport { IAccessorManager } from '../types';\nimport DirectoryAccessor from './DirectoryAccessor';\nimport MemDirectoryAccessor from './MemDirectoryAccessor';\nimport { IDirectoryAccessor } from './types';\n\nclass DirectoryAccessorManager implements IAccessorManager<IDirectoryAccessor> {\n accessor : IDirectoryAccessor;\n dependent = new Set<string>();\n dependency = new Set<string>();\n tree : any = {};\n \n static fromFS(actualPath:string, tree:any) {\n return new DirectoryAccessorManager(new DirectoryAccessor(actualPath), tree);\n }\n\n static fromMemory(tree:any) {\n return new DirectoryAccessorManager(new MemDirectoryAccessor(), tree);\n }\n\n private constructor(ac:IDirectoryAccessor, tree:any={}) {\n this.accessor = ac;\n this.tree = tree;\n }\n\n async create() {\n this.accessor.create();\n }\n async load() {\n \n }\n async exists() {\n return this.accessor.exists();\n }\n async move(acm:IAccessorManager<DirectoryAccessor>) {\n const newAC = this.copy(acm);\n await acm.commit();\n await this.drop();\n \n return newAC;\n }\n async copy(ac:IAccessorManager<DirectoryAccessor>) {\n this.accessor.copy(ac.accessor);\n }\n\n isCompatible(other:IAccessorManager<unknown>):other is DirectoryAccessorManager {\n if (!(other instanceof DirectoryAccessorManager)) return false;\n \n return deepEqual(this.tree, other.tree);\n }\n \n async drop() {\n this.accessor.drop();\n }\n async commit() {\n \n }\n isDropped() {\n return !this.accessor.exists();\n }\n}\n\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 {\n constructor(message:string) {\n super(message);\n this.name = 'StorageError';\n }\n}","import { StorageError } from '../storage/errors';\n\nexport class StorageAccessError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'StorageAccessError';\n }\n}\n\nexport class NotRegisterError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'NotRegisteredError';\n }\n}\n\nexport class AccessDeniedError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'AccessDeniedError';\n }\n}\n\nexport class DirectoryAccessError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'DirectoryAccessError';\n }\n}\n\nexport class UncompatibleAccessorError extends StorageError {\n constructor(message:string) {\n super(message);\n this.name = 'UncompatibleError';\n }\n}","import { IAccessorManager } from 'features/accessors'\nimport { Accesses, AccessType } from 'features/StorageAccess'\nimport TreeNavigate from 'tree-navigate';\n\nimport { AccessTree, StorageAccessControlEvent } from './types';\n\nimport { AccessDeniedError, DirectoryAccessError, NotRegisterError, StorageAccessError, UncompatibleAccessorError } from './errors';\n\nclass StorageAccessControl {\n #events:StorageAccessControlEvent;\n #rawTree:AccessTree = {};\n private accessTree:TreeNavigate;\n\n constructor(events:StorageAccessControlEvent) {\n this.#events = events;\n this.accessTree = TreeNavigate.from({}, { delimiter: ':', allowWildcard:true });\n }\n\n register(tree:AccessTree) {\n this.#rawTree = tree;\n this.accessTree = TreeNavigate.from(tree, { delimiter: ':', allowWildcard:true });\n }\n\n async copy(oldIdentifier:string, newIdentifier:string, accessType:string) {\n const oldACM = await this.#getAccessorManager(oldIdentifier, accessType, true);\n const newACM = await this.#getAccessorManager(newIdentifier, accessType, true);\n\n if (!newACM.isCompatible(oldACM)) {\n throw new UncompatibleAccessorError(`'${oldIdentifier}' and '${newIdentifier}' are not compatible.`);\n }\n \n await oldACM.copy(newACM);\n }\n\n async move(oldIdentifier:string, newIdentifier:string, accessType:string) {\n const oldACM = await this.#getAccessorManager(oldIdentifier, accessType, true);\n const newACM = await this.#getAccessorManager(newIdentifier, accessType, true);\n\n if (!newACM.isCompatible(oldACM)) {\n throw new UncompatibleAccessorError(`'${oldIdentifier}' and '${newIdentifier}' are not compatible.`);\n }\n \n await oldACM.move(newACM);\n }\n \n async access(identifier:string, accessType:string):Promise<unknown> {\n const acm = await this.#getAccessorManager(identifier, accessType);\n \n return acm.accessor;\n }\n\n async #getAccessorManager(identifier:string, accessType:string, allowDirectory:boolean=false):Promise<IAccessorManager<unknown>> {\n const walked = this.accessTree.walk(identifier, { allowIntermediate:true });\n if (!walked) {\n throw new NotRegisterError(`'${identifier}' is not registered.`);\n }\n if (!allowDirectory && this.checkAccessIsDirectory(walked.value)) {\n throw new DirectoryAccessError(`'${identifier}' is directory.`);\n }\n // 접근 권한 확인\n const resolvedAccess = this.validateAndResolveAccess(walked.value, accessType, identifier);\n \n // 실제 접근\n const splited = identifier.split(':');\n const length = walked.path.length;\n\n let prevACC = '';\n let acc = '';\n const addAcc = (id:string) => {\n prevACC = acc;\n acc = (acc === '' ? id : `${acc}:${id}`);\n };\n const chainDependency = () => {\n this.#events.onChainDependency(prevACC, acc);\n }\n let subtree = this.#rawTree;\n for (let i = 0; i < length-1; i++) {\n addAcc(splited[i]);\n subtree = subtree[walked.path[i]] as AccessTree;\n \n await this.#events.onAccess(acc, {\n accessType : 'directory',\n tree : subtree\n });\n chainDependency();\n }\n addAcc(splited[length-1]);\n\n const ac = await this.#events.onAccess(acc, resolvedAccess);\n chainDependency();\n \n return ac;\n }\n\n async destroy(identifier:string) {\n const walked = this.accessTree.walk(identifier);\n if (!walked) {\n throw new NotRegisterError(`'${identifier}' is not registered.`);\n }\n\n if (this.checkAccessIsDirectory(walked.value)) {\n throw new DirectoryAccessError(`> '${identifier}' is directory.`);\n }\n await this.#events.onDestroy(identifier);\n }\n\n async destroyDir(identifier:string) {\n this.validateDirectoryPath(identifier);\n \n await this.#events.onDestroy(identifier);\n }\n\n getAccessType(identifier:string):string[] {\n const getAT = (access:Accesses):string => {\n return (\n access.accessType === 'custom'\n ? access.id\n : access.accessType\n )\n }\n const access:Accesses|null = this.accessTree.get(identifier, { allowIntermediate:true });\n\n if (access == null) {\n return [];\n }\n else if (this.checkAccessIsDirectory(access)) {\n return ['directory'];\n }\n else {\n if (access.accessType === 'union') {\n return access.accesses.map((ac)=>getAT(ac));\n }\n else {\n return [getAT(access)];\n }\n }\n }\n\n validateAccess(identifier: string, accessType: string): Accesses {\n const walked = this.accessTree.walk(identifier, { allowIntermediate: true });\n if (!walked) {\n throw new NotRegisterError(`'${identifier}' is not registered.`);\n }\n if (this.checkAccessIsDirectory(walked.value)) {\n throw new DirectoryAccessError(`'${identifier}' is directory.`);\n }\n return this.validateAndResolveAccess(walked.value, accessType, identifier);\n }\n\n validateDirectoryPath(identifier:string) {\n const walked = this.accessTree.walk(identifier, { allowIntermediate:true });\n if (!walked || !this.checkAccessIsDirectory(walked.value)) {\n throw new NotRegisterError(`'${identifier}' is not directory.`);\n }\n }\n\n private validateAndResolveAccess(access:Accesses, targetAccessType:string, identifier:string):Accesses {\n const resolved = this.resolveAccess(access, targetAccessType);\n if (!resolved) {\n throw new AccessDeniedError(`'${identifier}' is not accessible. '${access.accessType}'`);\n }\n return resolved;\n }\n\n /**\n * target이 Access와 일치 시 Access 반환, 아닐 시 null 반환\n * \n * UnionAccess의 경우, target에 해당하는 Access를 찾아 반환\n */\n private resolveAccess(access:Accesses, targetAccessType:string):Accesses|null {\n if (!('accessType' in access)) {\n return {\n accessType : 'directory',\n tree : access as AccessTree\n }\n }\n else if (access.accessType !== 'union') {\n if (access.accessType === targetAccessType) {\n return access;\n }\n else if (access.accessType === 'custom' && access.id === targetAccessType) {\n return access;\n }\n else {\n return null;\n }\n }\n else {\n for (const ac of access.accesses) {\n if (ac.accessType === targetAccessType) {\n return ac;\n }\n else if (ac.accessType === 'custom' && ac.id === targetAccessType) {\n return ac;\n }\n }\n return null;\n }\n\n return null;\n }\n private checkAccessIsDirectory(access:Accesses) {\n return !('accessType' in access);\n }\n}\n\nexport default StorageAccessControl;","import { IBinaryAccessor, IJSONAccessor, ITextAccessor } from '@/features/accessors';\n\nimport { IACSubStorage } from './types';\n\nclass ACSubStorage implements IACSubStorage {\n #master:IACSubStorage;\n #prefix:string;\n\n constructor(master:IACSubStorage, prefix:string) {\n this.#master = master;\n this.#prefix = prefix;\n }\n \n subStorage(identifier:string):IACSubStorage {\n return this.#master.subStorage(this.#prefix + ':' + identifier);\n }\n\n async access(identifier:string, accessType:string):Promise<unknown> {\n return await this.#master.access(this.#prefix + ':' + identifier, accessType);\n }\n async accessAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.access(identifier, 'json') as IJSONAccessor;\n }\n async accessAsText(identifier:string):Promise<ITextAccessor> {\n return await this.access(identifier, 'text') as ITextAccessor;\n }\n async accessAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.access(identifier, 'binary') as IBinaryAccessor;\n }\n\n async create(identifier:string, accessType:string):Promise<unknown> {\n return await this.#master.create(this.#prefix + ':' + identifier, accessType);\n }\n async createAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.create(identifier, 'json') as IJSONAccessor;\n }\n async createAsText(identifier:string):Promise<ITextAccessor> {\n return await this.create(identifier, 'text') as ITextAccessor;\n }\n async createAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.create(identifier, 'binary') as IBinaryAccessor;\n }\n\n async open(identifier:string, accessType:string):Promise<unknown> {\n return await this.#master.open(this.#prefix + ':' + identifier, accessType);\n }\n async openAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.open(identifier, 'json') as IJSONAccessor;\n }\n async openAsText(identifier:string):Promise<ITextAccessor> {\n return await this.open(identifier, 'text') as ITextAccessor;\n }\n async openAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.open(identifier, 'binary') as IBinaryAccessor;\n }\n\n async copy(oldIdentifier:string, newIdentifier:string) {\n await this.#master.copy(this.#prefix + ':' + oldIdentifier, this.#prefix + ':' + newIdentifier);\n }\n async move(oldIdentifier:string, newIdentifier:string) {\n await this.#master.move(this.#prefix + ':' + oldIdentifier, this.#prefix + ':' + newIdentifier);\n }\n\n async dropDir(identifier:string) {\n await this.#master.dropDir(this.#prefix + ':' + identifier);\n }\n\n async drop(identifier:string) {\n await this.#master.drop(this.#prefix + ':' + identifier);\n }\n \n async dropAll() {\n await this.#master.dropDir(this.#prefix);\n }\n\n async release(identifier:string) {\n await this.#master.release(this.#prefix + ':' + identifier);\n }\n\n async releaseDir(identifier:string) {\n await this.#master.releaseDir(this.#prefix + ':' + identifier);\n }\n\n async releaseAll() {\n await this.#master.releaseDir(this.#prefix);\n }\n\n async commit(identifier:string='') {\n await this.#master.commit(this.#prefix + ':' + identifier);\n }\n\n async commitAll() {\n await this.#master.commit(this.#prefix);\n }\n}\n\nexport default ACSubStorage;","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { AccessorEvent } from 'types';\n\nimport { IAccessorManager, BinaryAccessorManager, JSONAccessorManager, TextAccessorManager, CustomAccessorManager, ICustomAccessor } from 'features/accessors';\nimport StorageAccessControl, { AccessTree } from 'features/StorageAccessControl';\nimport { Accesses, AccessType } from 'features/StorageAccess';\nimport { IBinaryAccessor, IJSONAccessor, ITextAccessor } from '@/features/accessors';\nimport {\n DirectoryAccessorManager,\n RootAccessorManager,\n} from 'features/accessors';\n\nimport ACSubStorage from './ACSubStorage';\nimport { StorageError } from './errors';\nimport { IACStorage, IACSubStorage } from './types';\n\ninterface ACStorageOption {\n cacheName?:string;\n noCache?:boolean;\n}\n\nclass ACStorage implements IACStorage {\n protected eventListeners:{\n access?: Function,\n access_dir?: Function,\n destroy?: Function,\n destroy_dir?: Function,\n } = {};\n\n protected cachePath:string;\n protected noCache:boolean;\n protected cacheName:string;\n \n protected basePath: string;\n protected customAccessEvents: Record<string, AccessorEvent<unknown>> = {};\n protected accessors:Map<string, IAccessorManager<unknown>> = new Map();\n\n protected accessControl:StorageAccessControl;\n protected accessCache:Record<string, string> = {};\n\n constructor(basePath:string, option:ACStorageOption={}) {\n this.basePath = basePath;\n this.accessControl = this.initAccessControl();\n \n this.noCache = option.noCache ?? false;\n this.cacheName = option.cacheName ?? '.acstorage';\n\n this.cachePath = path.join(this.basePath, '.acstorage');\n \n this.accessors.set('', RootAccessorManager.fromFS());\n\n if (!this.noCache) this.loadCache();\n }\n\n protected loadCache() {\n try {\n const cacheData = fs.readFileSync(this.cachePath, 'utf8');\n\n this.accessCache = JSON.parse(cacheData);\n }\n catch {\n ;\n }\n }\n\n protected saveCache() {\n const cacheData = JSON.stringify(this.accessCache, null, 4);\n\n fs.writeFileSync(this.cachePath, cacheData, 'utf8');\n }\n\n protected async getOrCreateAccessorFromAccess(\n identifier: string,\n sa: Accesses,\n mode: 'create' | 'open' | 'access'\n ): Promise<IAccessorManager<unknown>> {\n const targetPath = path.join(this.basePath, identifier.replaceAll(':', '/'));\n this.eventListeners.access?.(identifier, sa);\n\n let item = this.accessors.get(identifier);\n if (item != undefined && !item.isDropped()) {\n if (mode === 'create') {\n throw new StorageError(`File '${identifier}' already exists in memory`);\n }\n return item;\n }\n \n let acm:IAccessorManager<unknown>;\n switch(sa.accessType) {\n case 'directory':\n acm = DirectoryAccessorManager.fromFS(targetPath, sa.tree);\n break;\n case 'json':\n acm = JSONAccessorManager.fromFS(targetPath, sa.structure);\n break;\n case 'binary':\n acm = BinaryAccessorManager.fromFS(targetPath);\n break;\n case 'text':\n acm = TextAccessorManager.fromFS(targetPath);\n break;\n case 'custom':\n const event = this.customAccessEvents[sa.id];\n if (!event) {\n throw new StorageError('Invalid access type');\n }\n const ac = await event.init(targetPath, ...sa.args);\n acm = CustomAccessorManager.from(ac, {\n customId: sa.id,\n event,\n actualPath: targetPath,\n customArgs: sa.args,\n });\n break;\n default:\n throw new StorageError('Invalid access type');\n break;\n }\n\n const exists = await acm.exists();\n\n if (mode === 'create') {\n if (exists) {\n throw new StorageError(`File '${identifier}' already exists on disk`);\n }\n await acm.create();\n } else if (mode === 'open') {\n if (!exists) {\n throw new StorageError(`File '${identifier}' does not exist`);\n }\n await acm.load();\n } else {\n if (!exists) await acm.create();\n else await acm.load();\n }\n \n this.accessCache[identifier] = sa.accessType !== 'custom' ? sa.accessType : sa.id;\n this.accessors.set(identifier, acm);\n return acm;\n }\n\n protected async getOrCreateAccessor(\n identifier: string,\n accessType: string,\n mode: 'create' | 'open' | 'access'\n ): Promise<IAccessorManager<unknown>> {\n const sa = this.accessControl.validateAccess(identifier, accessType);\n return await this.getOrCreateAccessorFromAccess(identifier, sa, mode);\n }\n\n protected initAccessControl():StorageAccessControl {\n const onAccess = async (identifier:string, sa:Accesses) => {\n return await this.getOrCreateAccessorFromAccess(identifier, sa, 'access');\n }\n const onDestroy = async (identifier:string) => {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await onDestroy(child);\n }\n if (identifier === '') return;\n this.eventListeners.destroy?.(identifier);\n\n if (!accessor.isDropped()) await accessor.drop();\n\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n };\n const onChainDependency = (dependentId:string, dependencyId:string) => {\n const dependent = this.accessors.get(dependentId);\n\n if (dependent) {\n dependent.dependent.add(dependencyId);\n }\n }\n \n return new StorageAccessControl({\n onAccess,\n onDestroy,\n onChainDependency,\n });\n }\n\n addListener(event: 'destroy'|'access', listener: Function): void {\n switch(event) {\n case 'access':\n this.eventListeners.access = listener;\n break;\n case 'destroy':\n this.eventListeners.destroy = listener;\n break;\n }\n }\n\n register(tree:AccessTree) {\n this.accessControl.register(tree);\n }\n\n addAccessEvent<T extends string, AC>(customId:(T extends AccessType ? never : T), event:AccessorEvent<AC>) {\n this.customAccessEvents[customId] = event as AccessorEvent<unknown>;\n }\n\n subStorage(identifier:string):IACSubStorage {\n const accessType = this.accessControl.getAccessType(identifier);\n if (accessType.length !== 1 && accessType[0] !== 'directory') {\n throw new StorageError(`Cannot infer the access type of ${identifier}`);\n }\n\n return new ACSubStorage(this, identifier);\n }\n\n async access(identifier:string, accessType:string):Promise<unknown> {\n return await this.accessControl.access(identifier, accessType);\n }\n async accessAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.access(identifier, 'json') as IJSONAccessor;\n }\n async accessAsText(identifier:string):Promise<ITextAccessor> {\n return await this.access(identifier, 'text') as ITextAccessor;\n }\n async accessAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.access(identifier, 'binary') as IBinaryAccessor;\n }\n\n async create(identifier:string, accessType:string):Promise<unknown> {\n const acm = await this.getOrCreateAccessor(identifier, accessType, 'create');\n return acm.accessor;\n }\n async createAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.create(identifier, 'json') as IJSONAccessor;\n }\n async createAsText(identifier:string):Promise<ITextAccessor> {\n return await this.create(identifier, 'text') as ITextAccessor;\n }\n async createAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.create(identifier, 'binary') as IBinaryAccessor;\n }\n\n async open(identifier:string, accessType:string):Promise<unknown> {\n const acm = await this.getOrCreateAccessor(identifier, accessType, 'open');\n return acm.accessor;\n }\n async openAsJSON(identifier:string):Promise<IJSONAccessor> {\n return await this.open(identifier, 'json') as IJSONAccessor;\n }\n async openAsText(identifier:string):Promise<ITextAccessor> {\n return await this.open(identifier, 'text') as ITextAccessor;\n }\n async openAsBinary(identifier:string):Promise<IBinaryAccessor> {\n return await this.open(identifier, 'binary') as IBinaryAccessor;\n }\n\n async copy(oldIdentifier:string, newIdentifier:string) {\n const accessType = this.validateAndGetAccessTypePair(oldIdentifier, newIdentifier);\n await this.commit(oldIdentifier);\n\n await this.accessControl.copy(oldIdentifier, newIdentifier, accessType);\n }\n async move(oldIdentifier:string, newIdentifier:string) {\n const accessType = this.validateAndGetAccessTypePair(oldIdentifier, newIdentifier);\n await this.commit(oldIdentifier);\n \n await this.accessControl.move(oldIdentifier, newIdentifier, accessType);\n }\n \n protected validateAndGetAccessTypePair(oldIdentifier:string, newIdentifier:string) {\n /*\n accessControl에서 작업 수행 전, cache를 통한 검증을 진행\n\n 1. oldIdentifier에 대한 accessType이 캐시에 존재하는 경우\n - noCahce 설정이 false 라면 예외 발생\n - noCache 설정이 true 라면 accessControl에서 직접 확인\n - accessType이 1개가 아니라면 예외 발생\n 2. oldIdentifier, newIdentifier의 accessType을 비교\n - newIdentifier의 accessType이 존재하지 않다면 진행\n - 실제로 accessor가 적절한지는 AccessControl에서 검증\n 3. accessControl에게 copy 요청\n - oldIdentifier의 accessor를 newIdentifier로 복사\n */\n const oldAT:string = this.accessCache[oldIdentifier];\n const newAT = this.accessCache[newIdentifier];\n\n if (oldAT == null) {\n if (this.noCache) {\n const atCandidates = this.accessControl.getAccessType(oldIdentifier);\n\n if (atCandidates.length !== 1) {\n throw new StorageError(`Cannot infer the access type of ${oldIdentifier}`);\n }\n return atCandidates[0];\n }\n else {\n throw new StorageError(`The accessor for '${oldIdentifier}' is not initialized.`);\n }\n }\n else if (newAT != null && oldAT !== newAT) {\n throw new StorageError(`The accessors '${oldIdentifier}'(${oldAT}) and '${newIdentifier}'(${newAT}) are not compatible.`); \n }\n\n return oldAT;\n }\n\n async dropDir(identifier:string) {\n if (identifier === '') {\n throw new StorageError('Cannot drop the root directory. use dropAll() instead.');\n }\n \n await this.accessControl.destroyDir(identifier);\n }\n\n async drop(identifier:string) {\n await this.accessControl.destroy(identifier);\n }\n \n async dropAll() {\n await this.accessControl.destroyDir('');\n }\n\n async release(identifier:string) {\n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n async releaseDir(identifier:string) {\n if (identifier === '') {\n throw new StorageError('Cannot release the root directory. use releaseAll() instead.');\n }\n \n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n async releaseAll() {\n await this.commitAll();\n await this.#unloadFromMemory('');\n }\n\n async #unloadFromMemory(identifier:string) {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await this.#unloadFromMemory(child);\n }\n\n if (identifier !== '') {\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n }\n }\n\n async commit(identifier:string='') {\n await this.#commitRecursive(identifier);\n \n if (!this.noCache) this.saveCache();\n }\n\n async commitAll() {\n await this.commit('');\n }\n\n async #commitRecursive(identifier:string) {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const childIdentifier of accessor.dependent) {\n await this.#commitRecursive(childIdentifier);\n }\n\n if (!accessor.isDropped()) await accessor.commit();\n }\n}\n\nexport default ACStorage;","import { BinaryAccessorManager, CustomAccessorManager, DirectoryAccessorManager, IAccessorManager, JSONAccessorManager, TextAccessorManager } from 'features/accessors';\nimport { Accesses } from 'features/StorageAccess';\nimport StorageAccessControl from 'features/StorageAccessControl';\nimport { StorageError } from './errors';\nimport ACStorage from './ACStorage';\n\nclass MemACStorage extends ACStorage {\n constructor() {\n super('', { noCache: true });\n }\n\n override async getOrCreateAccessorFromAccess(\n identifier: string,\n sa: Accesses,\n mode: 'create' | 'open' | 'access'\n ): Promise<IAccessorManager<unknown>> {\n this.eventListeners.access?.(identifier, sa);\n\n let item = this.accessors.get(identifier);\n if (item != undefined && !item.isDropped()) {\n if (mode === 'create') {\n throw new StorageError(`File '${identifier}' already exists in memory`);\n }\n return item;\n }\n \n let acm:IAccessorManager<unknown>;\n switch(sa.accessType) {\n case 'directory':\n acm = DirectoryAccessorManager.fromMemory(sa.tree);\n break;\n case 'json':\n acm = JSONAccessorManager.fromMemory(sa.structure);\n break;\n case 'binary':\n acm = BinaryAccessorManager.fromMemory();\n break;\n case 'text':\n acm = TextAccessorManager.fromMemory();\n break;\n case 'custom':\n const event = this.customAccessEvents[sa.id];\n if (!event) {\n throw new StorageError('Invalid access type');\n }\n const ac = await event.init(null as any, ...sa.args);\n acm = CustomAccessorManager.from(ac, {\n customId: sa.id,\n event,\n actualPath: null as any,\n customArgs: sa.args,\n });\n break;\n default:\n throw new StorageError('Logic Error : Invalid access type');\n break;\n }\n\n const exists = await acm.exists();\n\n if (mode === 'create') {\n if (exists) {\n throw new StorageError(`File '${identifier}' already exists in memory`);\n }\n await acm.create();\n } else if (mode === 'open') {\n if (!exists) {\n throw new StorageError(`File '${identifier}' does not exist`);\n }\n await acm.load();\n } else {\n if (!exists) await acm.create();\n else await acm.load();\n }\n \n this.accessCache[identifier] = sa.accessType !== 'custom' ? sa.accessType : sa.id;\n this.accessors.set(identifier, acm);\n return acm;\n }\n\n override initAccessControl() {\n const onAccess = async (identifier:string, sa:Accesses) => {\n return await this.getOrCreateAccessorFromAccess(identifier, sa, 'access');\n }\n const onDestroy = async (identifier:string) => {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await onDestroy(child);\n }\n if (identifier === '') return;\n this.eventListeners.destroy?.(identifier);\n\n if (!accessor.isDropped()) accessor.drop();\n\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n };\n const onChainDependency = (dependentId:string, dependencyId:string) => {\n const dependent = this.accessors.get(dependentId);\n\n if (dependent) {\n dependent.dependent.add(dependencyId);\n }\n };\n\n return new StorageAccessControl({\n onAccess,\n onDestroy,\n onChainDependency,\n });\n }\n\n override async release(identifier:string) {\n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n override async releaseDir(identifier:string) {\n if (identifier === '') {\n throw new StorageError('Cannot release the root directory. use releaseAll() instead.');\n }\n \n await this.commit(identifier);\n await this.#unloadFromMemory(identifier);\n }\n\n override async releaseAll() {\n await this.commitAll();\n await this.#unloadFromMemory('');\n }\n\n async #unloadFromMemory(identifier:string) {\n const accessor = this.accessors.get(identifier);\n if (!accessor) return;\n\n for (const child of accessor.dependent) {\n await this.#unloadFromMemory(child);\n }\n\n if (identifier !== '') {\n delete this.accessCache[identifier];\n this.accessors.delete(identifier);\n }\n }\n}\n\nexport default MemACStorage;","import { JSONTree, type ValidateJSONTree } from '@hve/json-accessor';\nimport type { Accesses, UnionAccess } from './types';\nimport { leaf, type Leaf } from 'tree-navigate';\n\nclass StorageAccess {\n static Nothing():Leaf<Accesses> { return leaf({accessType : 'nothing' }) };\n static Text():Leaf<Accesses> { return leaf({accessType : 'text'}) };\n static Binary():Leaf<Accesses> { return leaf({accessType : 'binary' }) };\n\n static JSON(structure?: JSONTree): Leaf<Accesses>;\n static JSON<Schema>(structure: ValidateJSONTree<Schema>): Leaf<Accesses>;\n static JSON<Schema = unknown>(structure?: JSONTree | ValidateJSONTree<Schema>): Leaf<Accesses> {\n return leaf({ accessType : 'json', structure });\n };\n\n static Custom(id:string, ...args:any[]):Leaf<Accesses> {\n return leaf({ accessType : 'custom', args, id });\n }\n static Union(...accesses:Leaf<Accesses>[]):Leaf<UnionAccess> {\n return leaf({ accessType : 'union', accesses : accesses.map(leaf=>leaf.value) });\n }\n}\n\nexport default StorageAccess;"],"names":["t","i","e","r","fs","TreeNavigate","leaf"],"mappings":"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","x_google_ignoreList":[0,12,16]}
|