@cranq/document-utils
Advanced tools
Comparing version 0.1.0 to 1.0.0
import { Document } from "../types/Document"; | ||
import { DocumentStore } from "../types/DocumentStore"; | ||
export declare function getDocument<C extends string, S extends DocumentStore<C, any>, D extends Document>(store: S, collectionId: C, documentId: string | number): D; | ||
export declare function getDocument<C extends string, S extends DocumentStore<C, any>, D extends Document>(store: S, collectionId: C, documentId: string | number): D | undefined; |
import { DocumentStore } from "../types/DocumentStore"; | ||
import { Field } from "../types/Field"; | ||
export declare function getField<C extends string, S extends DocumentStore<C, any>, F extends Field>(store: S, collectionId: C, documentId: string | number, fieldId: string): F; | ||
export declare function getField<C extends string, S extends DocumentStore<C, any>, F extends Field>(store: S, collectionId: C, documentId: string | number, fieldId: string): F | undefined; |
@@ -5,2 +5,2 @@ import { Document } from "../types/Document"; | ||
import { SchemaStore } from "../types/SchemaStore"; | ||
export declare function resolveTrail<C extends string, D extends Document, DS extends DocumentStore<C, any>, SS extends SchemaStore<C>>(store: DS, trail: [C, string, ...Array<string | number>], schema: SS): Document | Field; | ||
export declare function resolveTrail<C extends string, D extends Document, DS extends DocumentStore<C, any>, SS extends SchemaStore<C>>(store: DS, trail: [C, string, ...Array<string | number>], schema: SS): Document | Field | undefined; |
import { DeepDocument } from "../types/DeepDocument"; | ||
import { DocumentStore } from "../types/DocumentStore"; | ||
import { SchemaStore } from "../types/SchemaStore"; | ||
export declare function expandReferenceSubgraph<C extends string, DS extends DocumentStore<C, any>, SS extends SchemaStore<C>>(documentStore: DS, collectionId: C, documentId: string, schemaStore: SS): DeepDocument; | ||
export declare function expandReferenceSubgraph<C extends string, DS extends DocumentStore<C, any>, SS extends SchemaStore<C>>(documentStore: DS, collectionId: C, documentId: string, schemaStore: SS): DeepDocument | undefined; |
@@ -0,5 +1,5 @@ | ||
import { DeepField } from "./DeepField"; | ||
import { Field } from "./Field"; | ||
import { DeepField } from "./DeepField"; | ||
export interface DeepDocument { | ||
[fieldId: string]: Field | DeepField; | ||
} |
import { DeepDocument } from "./DeepDocument"; | ||
export declare type DeepField = DeepDocument | Array<DeepDocument>; | ||
export declare type DeepField = DeepDocument | undefined | Array<DeepDocument | undefined>; |
{ | ||
"name": "@cranq/document-utils", | ||
"version": "0.1.0", | ||
"version": "1.0.0", | ||
"description": "Document store manipulation utilities", | ||
@@ -10,3 +10,3 @@ "scripts": { | ||
"author": "Dan Stocker", | ||
"license": "UNLICENSED", | ||
"license": "MIT", | ||
"repository": { | ||
@@ -24,4 +24,4 @@ "type": "git", | ||
"dependencies": { | ||
"@cranq/object-utils": "^0.1.0", | ||
"@cranq/tree-utils": "^0.1.0", | ||
"@cranq/object-utils": "^1.0.0", | ||
"@cranq/tree-utils": "^1.0.1", | ||
"@types/uuid": "^8.0.0", | ||
@@ -28,0 +28,0 @@ "uuid": "^8.3.0" |
@@ -19,5 +19,5 @@ import {appendNode} from "@cranq/tree-utils"; | ||
): void { | ||
// FIXME: The type cast shouldn't be necessary. Some subtle TS issue is going | ||
// on here. | ||
// FIXME: The type cast shouldn't be necessary. | ||
// Some subtle TS issue is going on here. | ||
appendNode(store, [collectionId, documentId], document as any); | ||
} |
@@ -19,5 +19,5 @@ import {appendNodeI} from "@cranq/tree-utils"; | ||
): S { | ||
// FIXME: The type cast shouldn't be necessary. Some subtle TS issue is going | ||
// on here. | ||
// FIXME: The type cast shouldn't be necessary. | ||
// Some subtle TS issue is going on here. | ||
return appendNodeI(store, [collectionId, documentId], document as any); | ||
} |
@@ -15,4 +15,4 @@ import {getNode} from "@cranq/tree-utils"; | ||
documentId: string | number | ||
): D { | ||
return getNode(store, [collectionId, documentId]) as D; | ||
): D | undefined { | ||
return getNode(store, [collectionId, documentId]); | ||
} |
@@ -17,5 +17,5 @@ import {getNode} from "@cranq/tree-utils"; | ||
fieldId: string | ||
): F { | ||
): F | undefined { | ||
const path = [collectionId, documentId, fieldId]; | ||
return getNode(store, path) as F; | ||
return getNode(store, path); | ||
} |
@@ -8,2 +8,9 @@ import {getNode} from "@cranq/tree-utils"; | ||
/** | ||
* @deprecated Use a series of getDocument() calls instead for type safety. | ||
* @param store Document store container | ||
* @param trail Identifies entry document, then trail of reference fields. | ||
* @param schema Schema store that describes reference fields for the | ||
* specified document store | ||
*/ | ||
export function resolveTrail<C extends string, D extends Document, DS extends DocumentStore<C, any>, SS extends SchemaStore<C>>( | ||
@@ -13,3 +20,3 @@ store: DS, | ||
schema: SS | ||
): Document | Field { | ||
): Document | Field | undefined { | ||
let collectionId = trail[0]; | ||
@@ -16,0 +23,0 @@ let document = getDocument(store, collectionId, trail[1]); |
import {getDocument} from "../access/getDocument"; | ||
import {Documentify} from "../types/Documentify"; | ||
import {DocumentStore} from "../types/DocumentStore"; | ||
@@ -45,3 +46,5 @@ import {SchemaStore} from "../types/SchemaStore"; | ||
const result = expandDocumentSubgraph( | ||
getDocument(documentStore, "dogs", "lassie"), | ||
getDocument( | ||
documentStore, "dogs", "lassie" | ||
) as Documentify<any>, | ||
"dogs", | ||
@@ -61,3 +64,5 @@ documentStore, | ||
const result = expandDocumentSubgraph( | ||
getDocument(documentStore, "dogs", "benji"), | ||
getDocument( | ||
documentStore, "dogs", "benji" | ||
) as Documentify<any>, | ||
"dogs", | ||
@@ -75,3 +80,5 @@ documentStore, | ||
it("should return input document", () => { | ||
const document = getDocument(documentStore, "breeds", "jack-russel"); | ||
const document = getDocument( | ||
documentStore, "breeds", "jack-russel" | ||
) as Documentify<any>; | ||
const result = expandDocumentSubgraph( | ||
@@ -78,0 +85,0 @@ document, |
@@ -33,8 +33,7 @@ import {map} from "@cranq/object-utils"; | ||
return value.map( | ||
(item) => | ||
expandReferenceSubgraph( | ||
documentStore, | ||
referredCollectionId, | ||
item as string, | ||
schemaStore)); | ||
(item) => expandReferenceSubgraph( | ||
documentStore, | ||
referredCollectionId, | ||
item as string, | ||
schemaStore)); | ||
} else { | ||
@@ -41,0 +40,0 @@ // Single reference |
@@ -20,3 +20,3 @@ import {getDocument} from "../access/getDocument"; | ||
schemaStore: SS | ||
): DeepDocument { | ||
): DeepDocument | undefined { | ||
const document = getDocument(documentStore, collectionId, documentId); | ||
@@ -23,0 +23,0 @@ return document && expandDocumentSubgraph( |
@@ -1,2 +0,2 @@ | ||
import {DocumentStore, getDocument, SchemaStore} from ".."; | ||
import {Documentify, DocumentStore, getDocument, SchemaStore} from ".."; | ||
import {extractDocumentSubgraph} from "./extractDocumentSubgraph"; | ||
@@ -43,3 +43,5 @@ | ||
const result = extractDocumentSubgraph( | ||
getDocument(documentStore, "dogs", "lassie"), | ||
getDocument( | ||
documentStore, "dogs", "lassie" | ||
) as Documentify<any>, | ||
"dogs", | ||
@@ -55,2 +57,2 @@ documentStore, | ||
}); | ||
}); | ||
}); |
@@ -23,4 +23,22 @@ import {getDocument} from ".."; | ||
for (const item of value) { | ||
const referredDocument = getDocument(documentStore, referredCollectionId, item as string); | ||
setDocument(result, referredCollectionId, item as string, referredDocument); | ||
const referredDocument = | ||
getDocument(documentStore, referredCollectionId, item as string); | ||
setDocument( | ||
result, referredCollectionId, item as string, referredDocument); | ||
if (referredDocument) { | ||
extractDocumentSubgraph( | ||
referredDocument, | ||
referredCollectionId, | ||
documentStore, | ||
schemaStore, | ||
result); | ||
} | ||
} | ||
} else if (typeof value === "string") { | ||
// Single reference | ||
const referredDocument = | ||
getDocument(documentStore, referredCollectionId, value as string); | ||
setDocument( | ||
result, referredCollectionId, value, referredDocument); | ||
if (referredDocument) { | ||
extractDocumentSubgraph( | ||
@@ -31,16 +49,4 @@ referredDocument, | ||
schemaStore, | ||
result | ||
); | ||
result); | ||
} | ||
} else if (typeof value === "string") { | ||
// Single reference | ||
const referredDocument = getDocument(documentStore, referredCollectionId, value as string); | ||
setDocument(result, referredCollectionId, value, referredDocument); | ||
extractDocumentSubgraph( | ||
referredDocument, | ||
referredCollectionId, | ||
documentStore, | ||
schemaStore, | ||
result | ||
); | ||
} | ||
@@ -47,0 +53,0 @@ } |
@@ -24,4 +24,4 @@ import {getDocument} from "../access/getDocument"; | ||
const document = getDocument(documentStore, collectionId, documentId); | ||
return document ? | ||
extractDocumentSubgraph( | ||
return document | ||
? extractDocumentSubgraph( | ||
document, | ||
@@ -31,4 +31,4 @@ collectionId, | ||
schemaStore, | ||
result) : | ||
result; | ||
result) | ||
: result; | ||
} |
@@ -31,24 +31,34 @@ import {map} from "@cranq/object-utils"; | ||
if (schema) { | ||
const document = map(deepDocument, (value, field) => { | ||
const referredCollectionId = schema[field]; | ||
if (referredCollectionId !== undefined) { | ||
// Field is reference | ||
if (value instanceof Array) { | ||
// List of references | ||
return (value as Array<Reference>).map( | ||
(item) => createDocument( | ||
item, referredCollectionId, schemaStore, documentStore)); | ||
} else if (value !== undefined) { | ||
// Single reference | ||
return createDocument( | ||
value as Reference, referredCollectionId, schemaStore, documentStore); | ||
const document = map( | ||
deepDocument, | ||
(value, field) => { | ||
const referredCollectionId = schema[field]; | ||
if (referredCollectionId !== undefined) { | ||
// Field is reference | ||
if (value instanceof Array) { | ||
// List of references | ||
return (value as Array<Reference>).map( | ||
(item) => createDocument( | ||
item, | ||
referredCollectionId, | ||
schemaStore, | ||
documentStore)); | ||
} else if (value !== undefined) { | ||
// Single reference | ||
return createDocument( | ||
value as Reference, | ||
referredCollectionId, | ||
schemaStore, | ||
documentStore); | ||
} | ||
} else { | ||
// Field is primitive | ||
return value as Field; | ||
} | ||
} else { | ||
// Field is primitive | ||
return value as Field; | ||
} | ||
}); | ||
setDocument(documentStore, collectionId, documentId, document); | ||
}); | ||
setDocument( | ||
documentStore, collectionId, documentId, document); | ||
} else { | ||
setDocument(documentStore, collectionId, documentId, deepDocument as Document); | ||
setDocument( | ||
documentStore, collectionId, documentId, deepDocument as Document); | ||
} | ||
@@ -55,0 +65,0 @@ return documentStore; |
@@ -0,3 +1,3 @@ | ||
import {DeepField} from "./DeepField"; | ||
import {Field} from "./Field"; | ||
import {DeepField} from "./DeepField"; | ||
@@ -4,0 +4,0 @@ /** |
@@ -6,2 +6,5 @@ import {DeepDocument} from "./DeepDocument"; | ||
*/ | ||
export type DeepField = DeepDocument | Array<DeepDocument>; | ||
export type DeepField = | ||
DeepDocument | ||
| undefined | ||
| Array<DeepDocument | undefined>; |
@@ -12,3 +12,3 @@ { | ||
"strict": true, | ||
"target": "es5" | ||
"target": "es6" | ||
}, | ||
@@ -15,0 +15,0 @@ "exclude": [ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Explicitly Unlicensed Item
License(Experimental) Something was found which is explicitly marked as unlicensed.
Found 1 instance in 1 package
Misc. License Issues
License(Experimental) A package's licensing information has fine-grained problems.
Found 1 instance in 1 package
No License Found
License(Experimental) License information could not be found.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
0
0
0
100
1
215741
3192
+ Added@cranq/object-utils@1.0.2(transitive)
+ Added@cranq/tree-utils@1.0.1(transitive)
- Removed@cranq/object-utils@0.1.0(transitive)
- Removed@cranq/tree-utils@0.1.0(transitive)
Updated@cranq/object-utils@^1.0.0
Updated@cranq/tree-utils@^1.0.1