Skip to content

Commit 450c5a0

Browse files
fix file parsing when writing content (#141)
1 parent 7dda943 commit 450c5a0

File tree

4 files changed

+23
-19
lines changed

4 files changed

+23
-19
lines changed

src/renderer/actions/local-sync/file-types/file-type.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ export abstract class FileType<V extends TSchema> {
77
abstract validator: V;
88

99
// eslint-disable-next-line no-unused-vars
10-
abstract parse(content: any): ContentParseResult<Static<V>>;
10+
abstract parse(content: string): ContentParseResult<Static<V>>;
1111
}

src/renderer/actions/local-sync/file-types/file-types.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
Variables,
1111
} from "../schemas";
1212
import { FileTypeEnum } from "../types";
13-
import { TUnknown, Type } from "@sinclair/typebox";
1413
import { parseJsonContent, parseRaw } from "../common-utils";
1514

1615
export class ApiRecordFileType extends FileType<typeof ApiRecord> {
@@ -77,17 +76,7 @@ export class GlobalConfigRecordFileType extends FileType<typeof GlobalConfig> {
7776
}
7877
}
7978

80-
export class UnknownFileType extends FileType<TUnknown> {
81-
validator = Type.Unknown();
82-
83-
type = FileTypeEnum.UNKNOWN;
84-
85-
parse(content: string) {
86-
return parseRaw(content, this.validator);
87-
}
88-
}
89-
90-
export function parseFileType(type: string): FileType<any> {
79+
export function parseFileType(type: string) {
9180
switch (type) {
9281
case FileTypeEnum.API:
9382
return new ApiRecordFileType();
@@ -101,9 +90,7 @@ export function parseFileType(type: string): FileType<any> {
10190
return new AuthRecordFileType();
10291
case FileTypeEnum.GLOBAL_CONFIG:
10392
return new GlobalConfigRecordFileType();
104-
case FileTypeEnum.UNKNOWN:
105-
return new UnknownFileType();
10693
default:
107-
throw new Error("Invalid file type!");
94+
throw new Error(`${type} is an invalid file type`);
10895
}
10996
}

src/renderer/actions/local-sync/fs-manager.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
rename,
3838
sanitizeFsResourceList,
3939
writeContent,
40+
writeContentRaw,
4041
} from "./fs-utils";
4142
import {
4243
ApiRecord,
@@ -885,12 +886,27 @@ export class FsManager {
885886
rawfileType: string
886887
): Promise<FileSystemResult<unknown>> {
887888
try {
888-
const fileType = parseFileType(rawfileType);
889889
const fileResource = this.createResource({
890890
id,
891891
type: "file",
892892
});
893-
const writeResult = await writeContent(fileResource, rawRecord, fileType);
893+
const fileType = parseFileType(rawfileType);
894+
const parsedRecord = fileType.parse(rawRecord);
895+
if (parsedRecord.type === "error") {
896+
return {
897+
type: "error",
898+
error: {
899+
message: parsedRecord.error.message,
900+
path: fileResource.path,
901+
fileType: fileType.type,
902+
},
903+
};
904+
}
905+
906+
const writeResult = await writeContentRaw(
907+
fileResource,
908+
parsedRecord.content
909+
);
894910
return writeResult;
895911
} catch (e: any) {
896912
return {

src/renderer/actions/local-sync/fs-utils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
getIdFromPath,
1919
getNameOfResource,
2020
getNormalizedPath,
21+
parseRaw,
2122
} from "./common-utils";
2223
import {
2324
COLLECTION_AUTH_FILE,
@@ -227,7 +228,7 @@ export async function writeContent(
227228
fileType: FileType<any>
228229
): Promise<FileSystemResult<{ resource: FileResource }>> {
229230
try {
230-
const parsedContentResult = fileType.parse(content);
231+
const parsedContentResult = parseRaw(content, fileType.validator);
231232
if (parsedContentResult.type === "error") {
232233
return {
233234
type: "error",

0 commit comments

Comments
 (0)