From abe698aa990eb9f905d3c2b339fb27ee54b8aa94 Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Thu, 21 Nov 2024 23:19:11 +0000 Subject: [PATCH 1/3] feat: added support for enableContentReferences and enableAssetReferences --- package.json | 2 +- src/fs.ts | 31 +++++++++++++++++++++++++++++++ typings/fs.d.ts | 2 ++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index acf3c25..2ee64a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.5", + "version": "2.0.6", "description": "Datasync content store library - saves data in filesystem", "main": "./dist", "types": "./typings", diff --git a/src/fs.ts b/src/fs.ts index 05c905a..1a1f00b 100644 --- a/src/fs.ts +++ b/src/fs.ts @@ -30,6 +30,7 @@ if ( export class FilesystemStore { private readonly assetStore: any private readonly config: any + private readonly _config: any; private readonly pattern: { contentTypeKeys: string[], entryKeys: string[], @@ -40,6 +41,7 @@ export class FilesystemStore { constructor(assetStore, config) { this.assetStore = assetStore + this._config = config; this.config = config.contentStore const baseDirKeys = this.config.baseDir.split(sep) this.pattern = ({} as any) @@ -454,6 +456,14 @@ export class FilesystemStore { private publishEntry(data) { return new Promise(async (resolve, reject) => { try { + if (this._config && this._config.enableContentReferences) { + // Check if reference exists and update the field + this._updateReferenceFields(data, data._content_type?.schema, 'reference'); + } + if (this._config && this._config.enableAssetReferences) { + // Check if reference exists and update the field + this._updateReferenceFields(data, data._content_type?.schema, 'file'); + } let entry = cloneDeep(data) entry = filter(entry) // to remove _content_type and checkpoint from entry data @@ -651,4 +661,25 @@ export class FilesystemStore { } } // tslint:disable-next-line: max-file-line-count + + private _updateReferenceFields(data, ctSchema, fieldType) { + for (const field of ctSchema) { + if (field.data_type === fieldType) { + if (fieldType === "reference") { + data[field.uid] = { + reference_to: field.reference_to?.[0], + value: data[field.uid]?.[0].uid, + }; + } else { + data[field.uid] = { + reference_to: "_assets", + value: data[field.uid], + }; + } + } + if (field.schema) { + this._updateReferenceFields(data[field.uid], field.schema, fieldType); + } + } + } } diff --git a/typings/fs.d.ts b/typings/fs.d.ts index 2794c06..fed9854 100644 --- a/typings/fs.d.ts +++ b/typings/fs.d.ts @@ -6,6 +6,7 @@ export declare class FilesystemStore { private readonly assetStore; private readonly config; + private readonly _config; private readonly pattern; private readonly unwanted; private readonly localePath; @@ -28,4 +29,5 @@ export declare class FilesystemStore { private _getAssetFieldsHelper; private _updateEntryAssetReference; private _nullifyDeletedAssetField; + private _updateReferenceFields; } From 8f4cc9491947ab88056e0a11e76258848f52dd78 Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Mon, 25 Nov 2024 23:09:15 +0000 Subject: [PATCH 2/3] fix: undefined object handling --- package-lock.json | 4 ++-- package.json | 2 +- src/fs.ts | 29 ++++++++++++++++++----------- typings/fs.d.ts | 1 + 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5149c4f..1b94e53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.5", + "version": "2.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.5", + "version": "2.0.7", "license": "MIT", "dependencies": { "debug": "^4.3.4", diff --git a/package.json b/package.json index 2ee64a3..ca18519 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.6", + "version": "2.0.7", "description": "Datasync content store library - saves data in filesystem", "main": "./dist", "types": "./typings", diff --git a/src/fs.ts b/src/fs.ts index 1a1f00b..584fbee 100644 --- a/src/fs.ts +++ b/src/fs.ts @@ -456,13 +456,13 @@ export class FilesystemStore { private publishEntry(data) { return new Promise(async (resolve, reject) => { try { - if (this._config && this._config.enableContentReferences) { + if (this._config?.enableContentReferences) { // Check if reference exists and update the field this._updateReferenceFields(data, data._content_type?.schema, 'reference'); } - if (this._config && this._config.enableAssetReferences) { + if (this._config?.enableAssetReferences) { // Check if reference exists and update the field - this._updateReferenceFields(data, data._content_type?.schema, 'file'); + this._updateAssetFields(data, data._content_type?.schema, 'file'); } let entry = cloneDeep(data) entry = filter(entry) // to remove _content_type and checkpoint from entry data @@ -665,20 +665,27 @@ export class FilesystemStore { private _updateReferenceFields(data, ctSchema, fieldType) { for (const field of ctSchema) { if (field.data_type === fieldType) { - if (fieldType === "reference") { - data[field.uid] = { - reference_to: field.reference_to?.[0], - value: data[field.uid]?.[0].uid, - }; - } else { + data[field.uid] = { + reference_to: field.reference_to?.[0], + value: data[field.uid]?.[0]?.uid, + }; + } + if (field.schema) { + this._updateReferenceFields(data[field.uid], field.schema, fieldType); + } + } + } + + private _updateAssetFields(data, ctSchema, fieldType) { + for (const field of ctSchema) { + if (field.data_type === fieldType) { data[field.uid] = { reference_to: "_assets", value: data[field.uid], }; - } } if (field.schema) { - this._updateReferenceFields(data[field.uid], field.schema, fieldType); + this._updateAssetFields(data[field.uid], field.schema, fieldType); } } } diff --git a/typings/fs.d.ts b/typings/fs.d.ts index fed9854..a22aaf6 100644 --- a/typings/fs.d.ts +++ b/typings/fs.d.ts @@ -30,4 +30,5 @@ export declare class FilesystemStore { private _updateEntryAssetReference; private _nullifyDeletedAssetField; private _updateReferenceFields; + private _updateAssetFields; } From 6a62f4cd4b3ba5855443361a739c1648ccb70123 Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Tue, 26 Nov 2024 21:23:58 +0000 Subject: [PATCH 3/3] fix: bumped minor version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b94e53..31c07ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.7", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.7", + "version": "2.1.0", "license": "MIT", "dependencies": { "debug": "^4.3.4", diff --git a/package.json b/package.json index ca18519..8d83f23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/datasync-content-store-filesystem", - "version": "2.0.7", + "version": "2.1.0", "description": "Datasync content store library - saves data in filesystem", "main": "./dist", "types": "./typings",