@xyo-network/archivist-lmdb 5.2.25 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -20,7 +20,7 @@ export declare class LmdbArchivist<TParams extends LmdbArchivistParams = LmdbArc
|
|
|
20
20
|
get dbName(): string;
|
|
21
21
|
get folderPath(): string;
|
|
22
22
|
get location(): string;
|
|
23
|
-
get queries():
|
|
23
|
+
get queries(): Schema[];
|
|
24
24
|
get storeName(): string;
|
|
25
25
|
startHandler(): Promise<void>;
|
|
26
26
|
protected allHandler(): WithStorageMeta<Payload>[];
|
package/dist/browser/Config.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ArchivistConfig } from '@xyo-network/archivist-model';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
export declare const LmdbArchivistConfigSchema: string & {
|
|
3
|
+
readonly __schema: true;
|
|
4
|
+
};
|
|
5
|
+
export type LmdbArchivistConfigSchema = typeof LmdbArchivistConfigSchema;
|
|
5
6
|
export type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{
|
|
6
7
|
/**
|
|
7
8
|
* If true, the store will be cleared on start
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAKnE,eAAO,MAAM,yBAAyB;;CAAkD,CAAA;AACxF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAA;AAExE,MAAM,MAAM,mBAAmB,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,IAAI,eAAe,CAAC;IACpF;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,yBAAyB,CAAA;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,CAAC,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -38,11 +38,14 @@ import {
|
|
|
38
38
|
open
|
|
39
39
|
} from "lmdb";
|
|
40
40
|
|
|
41
|
+
// src/Config.ts
|
|
42
|
+
import { asSchema } from "@xyo-network/payload-model";
|
|
43
|
+
|
|
41
44
|
// src/Schema.ts
|
|
42
45
|
var LmdbArchivistSchema = "network.xyo.archivist.lmdb";
|
|
43
46
|
|
|
44
47
|
// src/Config.ts
|
|
45
|
-
var LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config
|
|
48
|
+
var LmdbArchivistConfigSchema = asSchema(`${LmdbArchivistSchema}.config`, true);
|
|
46
49
|
|
|
47
50
|
// src/Archivist.ts
|
|
48
51
|
var LmdbArchivist = class extends AbstractArchivist {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Archivist.ts","../../src/Schema.ts","../../src/Config.ts"],"sourcesContent":["import {\n assertEx,\n exists,\n fulfilled, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport { AbstractArchivist, StorageClassLabel } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n IndexDescription,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { creatableModule } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n Payload, Schema, SequenceConstants,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport {\n Database, open,\n RangeOptions, RootDatabase,\n} from 'lmdb'\n\nimport { LmdbArchivistConfigSchema } from './Config.ts'\nimport { LmdbArchivistParams } from './Params.ts'\n\n@creatableModule()\nexport class LmdbArchivist<\n TParams extends LmdbArchivistParams = LmdbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, LmdbArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = LmdbArchivistConfigSchema\n static override readonly labels = { ...super.labels, [StorageClassLabel]: 'disk' }\n\n protected static readonly dataHashIndex: IndexDescription = {\n key: { _dataHash: 1 }, multiEntry: false, unique: false,\n }\n\n protected static readonly sequenceIndex: IndexDescription = {\n key: { _sequence: 1 }, multiEntry: false, unique: true,\n }\n\n protected dataHashIndex!: Database<Hash, string>\n protected db!: RootDatabase\n protected hashIndex!: Database<WithStorageMeta<Payload>, Hash>\n protected sequenceIndex!: Database<Hash, Hex>\n\n get dbName() {\n return assertEx(this.config.dbName, () => 'No dbName specified')\n }\n\n get folderPath() {\n return `${this.location}/${this.config.dbName}/${this.storeName}`\n }\n\n get location() {\n return assertEx(this.config.location, () => 'No location specified')\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n get storeName() {\n return assertEx(this.config.storeName, () => 'No storeName specified')\n }\n\n override async startHandler() {\n await super.startHandler()\n\n // Open LMDB database\n this.db = open({\n path: this.folderPath,\n maxDbs: 3, // Payloads, dataHashIndex, sequenceIndex\n })\n\n // Open sub-databases\n this.hashIndex = this.db.openDB<WithStorageMeta<Payload>, Hash>({ name: 'payloads' })\n this.dataHashIndex = this.db.openDB<Hash, string>({ name: 'dataHashIndex' })\n this.sequenceIndex = this.db.openDB<Hash, Hex>({ name: 'sequenceIndex' })\n\n if (this.config.clearStoreOnStart) {\n await this.clearHandler()\n }\n }\n\n protected override allHandler(): WithStorageMeta<Payload>[] {\n return [...this.hashIndex.getRange({})].map(entry => entry.value).toSorted(PayloadBuilder.compareStorageMeta)\n }\n\n protected override async clearHandler(): Promise<void> {\n // Ensure all operations are synchronous within transaction\n await this.db.transaction(() => {\n this.hashIndex.clearSync()\n this.dataHashIndex.clearSync()\n this.sequenceIndex.clearSync()\n })\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = this.allHandler()\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? []).map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return (await this.db.transaction(() => {\n return hashes.map((hash) => {\n const payload = this.hashIndex.get(hash)\n if (payload) {\n this.hashIndex.removeSync(hash)\n this.dataHashIndex.removeSync(payload._dataHash)\n this.sequenceIndex.removeSync(payload._sequence)\n return payload\n }\n })\n })).filter(exists)\n }\n\n protected override getHandler(hashes: Hash[]): WithStorageMeta<Payload>[] {\n return hashes.map((hash) => {\n const byHash = this.hashIndex.get(hash)\n if (byHash) return byHash\n const byDataHash = this.dataHashIndex.get(hash)\n if (byDataHash) return this.hashIndex.get(byDataHash)\n }).filter(exists)\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n await this.db.transaction(() => {\n for (const payload of payloads) {\n this.hashIndex.putSync(payload._hash, payload)\n this.dataHashIndex.putSync(payload._dataHash, payload._hash)\n this.sequenceIndex.putSync(payload._sequence, payload._hash)\n }\n })\n return payloads\n }\n\n protected override nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[] {\n const {\n limit = 100, cursor, order, open = cursor ? true : false,\n } = options ?? {}\n\n // Determine search range based on order (ascending or descending)\n const rangeOptions: RangeOptions = order === 'desc'\n ? { start: cursor ?? SequenceConstants.maxLocalSequence, reverse: true }\n : { start: cursor ?? SequenceConstants.minLocalSequence }\n\n // Get range of sequence-indexed hashes\n const sequenceEntries = [...this.sequenceIndex.getRange(rangeOptions)]\n .slice(open ? 1 : 0, limit + (open ? 1 : 0)) // Apply cursor offset and limit\n\n // Fetch full payloads using hashes retrieved from sequence index\n return sequenceEntries\n .map(({ value: hash }) => this.hashIndex.get(hash))\n .filter(exists)\n }\n}\n","export const LmdbArchivistSchema = 'network.xyo.archivist.lmdb' as const\nexport type LmdbArchivistSchema = typeof LmdbArchivistSchema\n","import type { ArchivistConfig } from '@xyo-network/archivist-model'\n\nimport { LmdbArchivistSchema } from './Schema.ts'\n\nexport type LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`\nexport const LmdbArchivistConfigSchema: LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`\n\nexport type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{\n /**\n * If true, the store will be cleared on start\n */\n clearStoreOnStart?: boolean\n /**\n * The database name - also used as the filename for the db\n */\n dbName?: string\n /**\n * The location where the folder for the db will be created\n */\n location?: string\n schema: LmdbArchivistConfigSchema\n /**\n * The name of the object store - becomes a sub-level\n */\n storeName?: TStoreName\n}>\n"],"mappings":"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","names":["open"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Archivist.ts","../../src/Config.ts","../../src/Schema.ts"],"sourcesContent":["import {\n assertEx,\n exists,\n fulfilled, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport { AbstractArchivist, StorageClassLabel } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n IndexDescription,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { creatableModule } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n Payload, Schema, SequenceConstants,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport {\n Database, open,\n RangeOptions, RootDatabase,\n} from 'lmdb'\n\nimport { LmdbArchivistConfigSchema } from './Config.ts'\nimport { LmdbArchivistParams } from './Params.ts'\n\n@creatableModule()\nexport class LmdbArchivist<\n TParams extends LmdbArchivistParams = LmdbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, LmdbArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = LmdbArchivistConfigSchema\n static override readonly labels = { ...super.labels, [StorageClassLabel]: 'disk' }\n\n protected static readonly dataHashIndex: IndexDescription = {\n key: { _dataHash: 1 }, multiEntry: false, unique: false,\n }\n\n protected static readonly sequenceIndex: IndexDescription = {\n key: { _sequence: 1 }, multiEntry: false, unique: true,\n }\n\n protected dataHashIndex!: Database<Hash, string>\n protected db!: RootDatabase\n protected hashIndex!: Database<WithStorageMeta<Payload>, Hash>\n protected sequenceIndex!: Database<Hash, Hex>\n\n get dbName() {\n return assertEx(this.config.dbName, () => 'No dbName specified')\n }\n\n get folderPath() {\n return `${this.location}/${this.config.dbName}/${this.storeName}`\n }\n\n get location() {\n return assertEx(this.config.location, () => 'No location specified')\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n get storeName() {\n return assertEx(this.config.storeName, () => 'No storeName specified')\n }\n\n override async startHandler() {\n await super.startHandler()\n\n // Open LMDB database\n this.db = open({\n path: this.folderPath,\n maxDbs: 3, // Payloads, dataHashIndex, sequenceIndex\n })\n\n // Open sub-databases\n this.hashIndex = this.db.openDB<WithStorageMeta<Payload>, Hash>({ name: 'payloads' })\n this.dataHashIndex = this.db.openDB<Hash, string>({ name: 'dataHashIndex' })\n this.sequenceIndex = this.db.openDB<Hash, Hex>({ name: 'sequenceIndex' })\n\n if (this.config.clearStoreOnStart) {\n await this.clearHandler()\n }\n }\n\n protected override allHandler(): WithStorageMeta<Payload>[] {\n return [...this.hashIndex.getRange({})].map(entry => entry.value).toSorted(PayloadBuilder.compareStorageMeta)\n }\n\n protected override async clearHandler(): Promise<void> {\n // Ensure all operations are synchronous within transaction\n await this.db.transaction(() => {\n this.hashIndex.clearSync()\n this.dataHashIndex.clearSync()\n this.sequenceIndex.clearSync()\n })\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = this.allHandler()\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? []).map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return (await this.db.transaction(() => {\n return hashes.map((hash) => {\n const payload = this.hashIndex.get(hash)\n if (payload) {\n this.hashIndex.removeSync(hash)\n this.dataHashIndex.removeSync(payload._dataHash)\n this.sequenceIndex.removeSync(payload._sequence)\n return payload\n }\n })\n })).filter(exists)\n }\n\n protected override getHandler(hashes: Hash[]): WithStorageMeta<Payload>[] {\n return hashes.map((hash) => {\n const byHash = this.hashIndex.get(hash)\n if (byHash) return byHash\n const byDataHash = this.dataHashIndex.get(hash)\n if (byDataHash) return this.hashIndex.get(byDataHash)\n }).filter(exists)\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n await this.db.transaction(() => {\n for (const payload of payloads) {\n this.hashIndex.putSync(payload._hash, payload)\n this.dataHashIndex.putSync(payload._dataHash, payload._hash)\n this.sequenceIndex.putSync(payload._sequence, payload._hash)\n }\n })\n return payloads\n }\n\n protected override nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[] {\n const {\n limit = 100, cursor, order, open = cursor ? true : false,\n } = options ?? {}\n\n // Determine search range based on order (ascending or descending)\n const rangeOptions: RangeOptions = order === 'desc'\n ? { start: cursor ?? SequenceConstants.maxLocalSequence, reverse: true }\n : { start: cursor ?? SequenceConstants.minLocalSequence }\n\n // Get range of sequence-indexed hashes\n const sequenceEntries = [...this.sequenceIndex.getRange(rangeOptions)]\n .slice(open ? 1 : 0, limit + (open ? 1 : 0)) // Apply cursor offset and limit\n\n // Fetch full payloads using hashes retrieved from sequence index\n return sequenceEntries\n .map(({ value: hash }) => this.hashIndex.get(hash))\n .filter(exists)\n }\n}\n","import type { ArchivistConfig } from '@xyo-network/archivist-model'\nimport { asSchema } from '@xyo-network/payload-model'\n\nimport { LmdbArchivistSchema } from './Schema.ts'\n\nexport const LmdbArchivistConfigSchema = asSchema(`${LmdbArchivistSchema}.config`, true)\nexport type LmdbArchivistConfigSchema = typeof LmdbArchivistConfigSchema\n\nexport type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{\n /**\n * If true, the store will be cleared on start\n */\n clearStoreOnStart?: boolean\n /**\n * The database name - also used as the filename for the db\n */\n dbName?: string\n /**\n * The location where the folder for the db will be created\n */\n location?: string\n schema: LmdbArchivistConfigSchema\n /**\n * The name of the object store - becomes a sub-level\n */\n storeName?: TStoreName\n}>\n","export const LmdbArchivistSchema = 'network.xyo.archivist.lmdb' as const\nexport type LmdbArchivistSchema = typeof LmdbArchivistSchema\n"],"mappings":"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","names":["open"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-lmdb",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -36,29 +36,29 @@
|
|
|
36
36
|
"!**/*.test.*"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@xylabs/sdk-js": "~5.0.
|
|
40
|
-
"@xyo-network/archivist-abstract": "~5.
|
|
41
|
-
"@xyo-network/archivist-model": "~5.
|
|
42
|
-
"@xyo-network/boundwitness-model": "~5.
|
|
43
|
-
"@xyo-network/module-model": "~5.
|
|
44
|
-
"@xyo-network/payload-builder": "~5.
|
|
45
|
-
"@xyo-network/payload-model": "~5.
|
|
46
|
-
"lmdb": "~3.
|
|
39
|
+
"@xylabs/sdk-js": "~5.0.64",
|
|
40
|
+
"@xyo-network/archivist-abstract": "~5.3.0",
|
|
41
|
+
"@xyo-network/archivist-model": "~5.3.0",
|
|
42
|
+
"@xyo-network/boundwitness-model": "~5.3.0",
|
|
43
|
+
"@xyo-network/module-model": "~5.3.0",
|
|
44
|
+
"@xyo-network/payload-builder": "~5.3.0",
|
|
45
|
+
"@xyo-network/payload-model": "~5.3.0",
|
|
46
|
+
"lmdb": "~3.5.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@xylabs/sdk-js": "~5.0.
|
|
50
|
-
"@xylabs/ts-scripts-yarn3": "~7.2
|
|
51
|
-
"@xylabs/tsconfig": "~7.2
|
|
52
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
53
|
-
"@xyo-network/account": "~5.
|
|
54
|
-
"@xyo-network/account-model": "~5.
|
|
55
|
-
"@xyo-network/archivist-acceptance-tests": "~5.
|
|
56
|
-
"@xyo-network/id-payload-plugin": "~5.
|
|
57
|
-
"@xyo-network/payload-wrapper": "~5.
|
|
58
|
-
"@xyo-network/wallet": "~5.
|
|
49
|
+
"@xylabs/sdk-js": "~5.0.64",
|
|
50
|
+
"@xylabs/ts-scripts-yarn3": "~7.3.2",
|
|
51
|
+
"@xylabs/tsconfig": "~7.3.2",
|
|
52
|
+
"@xylabs/vitest-extended": "~5.0.64",
|
|
53
|
+
"@xyo-network/account": "~5.3.0",
|
|
54
|
+
"@xyo-network/account-model": "~5.3.0",
|
|
55
|
+
"@xyo-network/archivist-acceptance-tests": "~5.3.0",
|
|
56
|
+
"@xyo-network/id-payload-plugin": "~5.3.0",
|
|
57
|
+
"@xyo-network/payload-wrapper": "~5.3.0",
|
|
58
|
+
"@xyo-network/wallet": "~5.3.0",
|
|
59
59
|
"typescript": "~5.9.3",
|
|
60
60
|
"uuid": "~13.0.0",
|
|
61
|
-
"vitest": "~4.0.
|
|
61
|
+
"vitest": "~4.0.18"
|
|
62
62
|
},
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
package/src/Config.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { ArchivistConfig } from '@xyo-network/archivist-model'
|
|
2
|
+
import { asSchema } from '@xyo-network/payload-model'
|
|
2
3
|
|
|
3
4
|
import { LmdbArchivistSchema } from './Schema.ts'
|
|
4
5
|
|
|
5
|
-
export
|
|
6
|
-
export
|
|
6
|
+
export const LmdbArchivistConfigSchema = asSchema(`${LmdbArchivistSchema}.config`, true)
|
|
7
|
+
export type LmdbArchivistConfigSchema = typeof LmdbArchivistConfigSchema
|
|
7
8
|
|
|
8
9
|
export type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{
|
|
9
10
|
/**
|