diff --git a/apps/core/package.json b/apps/core/package.json
index 39ae6eb8..51210211 100644
--- a/apps/core/package.json
+++ b/apps/core/package.json
@@ -41,6 +41,6 @@
"nodemon": "^2.0.18",
"ts-jest": "^28.0.5",
"ts-node": "^10.8.2",
- "typescript": "^4.7.4"
+ "typescript": "4.8.4"
}
}
diff --git a/apps/core/src/resources/folders/queries/list-directory.ts b/apps/core/src/resources/folders/queries/list-directory.ts
index 16fcb8c7..13c25cc0 100644
--- a/apps/core/src/resources/folders/queries/list-directory.ts
+++ b/apps/core/src/resources/folders/queries/list-directory.ts
@@ -6,7 +6,7 @@ export const listDirectory: QueryResolvers['listDirectory'] = async (_parent, ar
const folders = await context.db.folder.findSubFolders(userId, args.folderId);
const snippets = await context.db.snippet.findByFolder(args.folderId);
- const paths = await context.db.folder.generateDirectoryPath(args.folderId);
+ const paths = await context.db.folder.generateBreadcrumb(args.folderId);
return {
folders,
diff --git a/apps/core/src/resources/snippets/queries/find-snippet.ts b/apps/core/src/resources/snippets/queries/find-snippet.ts
index c0e299af..137db6a8 100644
--- a/apps/core/src/resources/snippets/queries/find-snippet.ts
+++ b/apps/core/src/resources/snippets/queries/find-snippet.ts
@@ -8,7 +8,7 @@ export const findSnippet: QueryResolvers['findSnippet'] = async (_parent, args,
try {
const snippet = await context.db.snippet.findById(args.snippetId);
- const paths = await context.db.folder.generateDirectoryPath(snippet.folderId);
+ const paths = await context.db.folder.generateBreadcrumb(snippet.folderId);
return {
paths,
diff --git a/apps/functions/code-embed/package.json b/apps/functions/code-embed/package.json
index b340458d..1ee133e8 100644
--- a/apps/functions/code-embed/package.json
+++ b/apps/functions/code-embed/package.json
@@ -34,6 +34,6 @@
"serverless-offline": "^9.2.6",
"ts-node": "^10.4.0",
"tsconfig-paths": "^4.1.0",
- "typescript": "^4.8.2"
+ "typescript": "4.8.4"
}
}
diff --git a/apps/web/package.json b/apps/web/package.json
index 307c5391..a51ae3f5 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -54,6 +54,6 @@
"next-transpile-modules": "^9.0.0",
"postcss": "^8.4.14",
"tailwindcss": "^3.1.6",
- "typescript": "4.7.4"
+ "typescript": "4.8.4"
}
}
diff --git a/packages/database/tests/utils/id.test.ts b/packages/database/__tests__/utils/id.test.ts
similarity index 100%
rename from packages/database/tests/utils/id.test.ts
rename to packages/database/__tests__/utils/id.test.ts
diff --git a/packages/database/package.json b/packages/database/package.json
index 10643562..3f95356f 100644
--- a/packages/database/package.json
+++ b/packages/database/package.json
@@ -9,6 +9,7 @@
"build": "tsc --project tsconfig.prod.json",
"clean": "rm -rf .turbo dist",
"lint": "eslint src index.ts",
+ "test": "jest",
"db:dev": "pscale connect sharingan dev --port 3311",
"db:shadow": "docker run -d --rm -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=sharingan --name sharingan-shadow-db -p 3312:3306 mysql:8.0",
"db:shadow:stop": "docker kill sharingan-shadow-db && docker container prune -f",
@@ -22,15 +23,15 @@
"db:seed": "prisma db seed"
},
"dependencies": {
- "@prisma/client": "^4.1.1",
+ "@prisma/client": "^4.5.0",
"cuid": "^2.1.8"
},
"devDependencies": {
"@types/jest": "^28.1.4",
"dotenv": "^16.0.1",
"jest": "^28.1.2",
- "prisma": "^4.1.1",
+ "prisma": "^4.5.0",
"ts-jest": "^28.0.5",
- "typescript": "^4.7.4"
+ "typescript": "^4.8.4"
}
}
diff --git a/packages/database/prisma/migrations/20221020204120_add_path_in_folders_table/migration.sql b/packages/database/prisma/migrations/20221020204120_add_path_in_folders_table/migration.sql
new file mode 100644
index 00000000..15c52b4f
--- /dev/null
+++ b/packages/database/prisma/migrations/20221020204120_add_path_in_folders_table/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE `folders` ADD COLUMN `path` TEXT NULL;
diff --git a/packages/database/prisma/schema.prisma b/packages/database/prisma/schema.prisma
index cc6e1eb2..b72e1447 100644
--- a/packages/database/prisma/schema.prisma
+++ b/packages/database/prisma/schema.prisma
@@ -68,6 +68,7 @@ model Folder {
userId String @map("user_id") @db.VarChar(50)
parentId String? @map("parent_id")
name String @db.VarChar(255)
+ path String? @db.Text
isFavorite Boolean @default(false) @map("is_favorite")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
diff --git a/packages/database/prisma/schema.test.prisma b/packages/database/prisma/schema.test.prisma
index 61896ded..b068c9e5 100644
--- a/packages/database/prisma/schema.test.prisma
+++ b/packages/database/prisma/schema.test.prisma
@@ -67,6 +67,7 @@ model Folder {
userId String @map("user_id") @db.VarChar(50)
parentId String? @map("parent_id")
name String @db.VarChar(255)
+ path String? @db.Text
isFavorite Boolean @default(false) @map("is_favorite")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
diff --git a/packages/database/tsconfig.json b/packages/database/tsconfig.json
index 614f7240..e2f2ebc7 100644
--- a/packages/database/tsconfig.json
+++ b/packages/database/tsconfig.json
@@ -5,10 +5,10 @@
"outDir": "./dist",
"declaration": true,
"composite": true,
- "sourceMap": true
+ "sourceMap": false
},
"files": ["env.d.ts"],
- "include": ["./src/**/*", "./tests/**/*", "index.ts"],
+ "include": ["src", "__tests__", "index.ts"],
"exclude": [
"node_modules"
]
diff --git a/packages/database/tsconfig.prod.json b/packages/database/tsconfig.prod.json
index 346b7e9a..e8c5afe2 100644
--- a/packages/database/tsconfig.prod.json
+++ b/packages/database/tsconfig.prod.json
@@ -3,5 +3,7 @@
"compilerOptions": {
"sourceMap": false
},
- "exclude": ["tests"]
+ "exclude": [
+ "__tests__"
+ ]
}
diff --git a/packages/domain/tests/services/folders/dtos/create-folder-dto.test.ts b/packages/domain/__tests__/services/folders/dtos/create-folder-dto.test.ts
similarity index 99%
rename from packages/domain/tests/services/folders/dtos/create-folder-dto.test.ts
rename to packages/domain/__tests__/services/folders/dtos/create-folder-dto.test.ts
index 8d9627f3..dda433f1 100644
--- a/packages/domain/tests/services/folders/dtos/create-folder-dto.test.ts
+++ b/packages/domain/__tests__/services/folders/dtos/create-folder-dto.test.ts
@@ -21,6 +21,7 @@ describe('Test Create Folder DTO', () => {
isFavorite: false,
name: 'blogs',
parentId: 'cl23rzwe5000002czaedc8sll',
+ path: null,
updatedAt: expect.any(Date),
userId: 'dm34saxf6111113dabfed9tmm',
});
diff --git a/packages/domain/tests/services/folders/dtos/create-user-root-folder-dto.test.ts b/packages/domain/__tests__/services/folders/dtos/create-user-root-folder-dto.test.ts
similarity index 97%
rename from packages/domain/tests/services/folders/dtos/create-user-root-folder-dto.test.ts
rename to packages/domain/__tests__/services/folders/dtos/create-user-root-folder-dto.test.ts
index c1f0ba2d..eecba72c 100644
--- a/packages/domain/tests/services/folders/dtos/create-user-root-folder-dto.test.ts
+++ b/packages/domain/__tests__/services/folders/dtos/create-user-root-folder-dto.test.ts
@@ -14,6 +14,7 @@ describe('Test Create User Root Folder DTO', () => {
isFavorite: false,
name: '__dm34saxf6111113dabfed9tmm__',
parentId: null,
+ path: null,
updatedAt: expect.any(Date),
userId: 'dm34saxf6111113dabfed9tmm',
});
diff --git a/packages/domain/__tests__/services/folders/dtos/update-folder-dto.test.ts b/packages/domain/__tests__/services/folders/dtos/update-folder-dto.test.ts
new file mode 100644
index 00000000..7130d2fb
--- /dev/null
+++ b/packages/domain/__tests__/services/folders/dtos/update-folder-dto.test.ts
@@ -0,0 +1,34 @@
+import { Folder } from '@sharingan/database';
+
+import { UpdateFolderDto } from '../../../../index';
+import { createTestFolderDto, generateTestId } from '../../../setup/test-utils';
+
+describe('Test Update Folder DTO', () => {
+ it('should return the folder to update', () => {
+ const parentId = generateTestId();
+ const userId = generateTestId();
+
+ const dto = new UpdateFolderDto({
+ creatorId: userId,
+ folderId: parentId,
+ name: 'folder updated',
+ });
+
+ const currentFolder = createTestFolderDto({ parentId, userId }).toFolder();
+
+ const folderToUpdate = dto.toFolder(currentFolder);
+
+ const expectedFolder: Folder = {
+ createdAt: currentFolder.createdAt,
+ id: currentFolder.id,
+ isFavorite: currentFolder.isFavorite,
+ name: 'folder updated',
+ parentId: currentFolder.parentId,
+ path: currentFolder.path,
+ updatedAt: currentFolder.updatedAt,
+ userId: currentFolder.userId,
+ };
+
+ expect(folderToUpdate).toMatchObject(expectedFolder);
+ });
+});
diff --git a/packages/domain/tests/services/folders/folder.service.test.ts b/packages/domain/__tests__/services/folders/folder.service.test.ts
similarity index 85%
rename from packages/domain/tests/services/folders/folder.service.test.ts
rename to packages/domain/__tests__/services/folders/folder.service.test.ts
index 0833e43c..fe583883 100644
--- a/packages/domain/tests/services/folders/folder.service.test.ts
+++ b/packages/domain/__tests__/services/folders/folder.service.test.ts
@@ -5,6 +5,7 @@ import { CreateUserRootFolderDto } from '../../../index';
import CreateFolderDto from '../../../src/folders/dtos/create-folder-dto';
import {
createManyTestFolders,
+ createTestFolderDto,
createTestUser,
createUserWithRootFolder,
deleteTestFoldersById,
@@ -248,4 +249,47 @@ describe('Test Folder service', () => {
await deleteTestUsersById([user1.id]);
await deleteTestUsersById([user2.id]);
});
+
+ it('should generate the breadcrumb path of a folder', async () => {
+ // GIVEN
+ const [user, rootFolder] = await createUserWithRootFolder();
+
+ const gistFolderDto = createTestFolderDto({
+ name: 'My gist',
+ parentId: rootFolder.id,
+ userId: user.id,
+ });
+ const gistFolder = await folderService.create(gistFolderDto);
+
+ const nodeFolderDto = createTestFolderDto({
+ name: 'Node.js',
+ parentId: gistFolder.id,
+ userId: user.id,
+ });
+ const nodeFolder = await folderService.create(nodeFolderDto);
+
+ // WHEN
+ const subFolders = await folderService.generateBreadcrumb(nodeFolder.id);
+
+ // THEN
+ expect(subFolders).toHaveLength(2);
+ expect(subFolders.map((folder) => folder.name)).toEqual(['My gist', 'Node.js']);
+
+ await deleteTestFoldersById([nodeFolder.id, gistFolder.id, rootFolder.id]);
+ await deleteTestUsersById([user.id]);
+ });
+
+ it('should generate the breadcrumb path of the root folder', async () => {
+ // GIVEN
+ const [user, rootFolder] = await createUserWithRootFolder();
+
+ // WHEN
+ const subFolders = await folderService.generateBreadcrumb(rootFolder.id);
+
+ // THEN
+ expect(subFolders).toHaveLength(0);
+
+ await deleteTestFoldersById([rootFolder.id]);
+ await deleteTestUsersById([user.id]);
+ });
});
diff --git a/packages/domain/tests/services/folders/utils/folders.test.ts b/packages/domain/__tests__/services/folders/utils/folders.test.ts
similarity index 100%
rename from packages/domain/tests/services/folders/utils/folders.test.ts
rename to packages/domain/__tests__/services/folders/utils/folders.test.ts
diff --git a/packages/domain/tests/services/roles/dtos/create-role-dto.test.ts b/packages/domain/__tests__/services/roles/dtos/create-role-dto.test.ts
similarity index 100%
rename from packages/domain/tests/services/roles/dtos/create-role-dto.test.ts
rename to packages/domain/__tests__/services/roles/dtos/create-role-dto.test.ts
diff --git a/packages/domain/tests/services/sessions/dtos/create-session-dto.test.ts b/packages/domain/__tests__/services/sessions/dtos/create-session-dto.test.ts
similarity index 100%
rename from packages/domain/tests/services/sessions/dtos/create-session-dto.test.ts
rename to packages/domain/__tests__/services/sessions/dtos/create-session-dto.test.ts
diff --git a/packages/domain/tests/services/sessions/session.service.test.ts b/packages/domain/__tests__/services/sessions/session.service.test.ts
similarity index 100%
rename from packages/domain/tests/services/sessions/session.service.test.ts
rename to packages/domain/__tests__/services/sessions/session.service.test.ts
diff --git a/packages/domain/tests/services/snippets/dtos/create-snippet-dto.test.ts b/packages/domain/__tests__/services/snippets/dtos/create-snippet-dto.test.ts
similarity index 100%
rename from packages/domain/tests/services/snippets/dtos/create-snippet-dto.test.ts
rename to packages/domain/__tests__/services/snippets/dtos/create-snippet-dto.test.ts
diff --git a/packages/domain/__tests__/services/snippets/dtos/delete-snippet-dto.test.ts b/packages/domain/__tests__/services/snippets/dtos/delete-snippet-dto.test.ts
new file mode 100644
index 00000000..0cd07441
--- /dev/null
+++ b/packages/domain/__tests__/services/snippets/dtos/delete-snippet-dto.test.ts
@@ -0,0 +1,20 @@
+import DeleteSnippetDto from '../../../../src/snippets/dtos/delete-snippet-dto';
+import { generateTestId } from '../../../setup/test-utils';
+
+describe('Test Delete Snippet DTO', () => {
+ it('should have the right property defined', () => {
+ const snippetId = generateTestId();
+ const userId = generateTestId();
+
+ // GIVEN
+ const dto = new DeleteSnippetDto({
+ creatorId: userId,
+ snippetId,
+ });
+
+ // WHEN
+ // THEN
+ expect(dto.snippetId).toEqual(snippetId);
+ expect(dto.creatorId).toEqual(userId);
+ });
+});
diff --git a/packages/domain/__tests__/services/snippets/dtos/update-snippet-dto.test.ts b/packages/domain/__tests__/services/snippets/dtos/update-snippet-dto.test.ts
new file mode 100644
index 00000000..e4ac1d43
--- /dev/null
+++ b/packages/domain/__tests__/services/snippets/dtos/update-snippet-dto.test.ts
@@ -0,0 +1,53 @@
+import { Snippet } from '@sharingan/database';
+
+import { UpdateSnippetDto } from '../../../../index';
+import { createTestSnippetDto, generateTestId } from '../../../setup/test-utils';
+
+describe('Test Update Snippet DTO', () => {
+ it('should have the right property defined to update the snippet', () => {
+ const snippetId = generateTestId();
+ const userId = generateTestId();
+
+ const dto = new UpdateSnippetDto({
+ content:
+ 'import React from "react";\n\nexport const App = () => {\n\n\treturn(\n\t\t
Hello Updated
\n\t);\n};',
+ creatorId: userId,
+ description: 'Basic react component updated',
+ language: 'tsx',
+ lineHighlight: '[[1, "diff-add"]]',
+ name: 'app-updated.tsx',
+ snippetId,
+ theme: 'one-dark-pro',
+ visibility: 'private',
+ });
+
+ const folderId = generateTestId();
+ const currentSnippet = createTestSnippetDto({
+ folderId,
+ name: 'app.tsx',
+ userId,
+ visibility: 'public',
+ }).toSnippet();
+
+ const snippetToUpdate = dto.toSnippet(currentSnippet);
+
+ const expectedSnippet: Snippet = {
+ content:
+ 'import React from "react";\n\nexport const App = () => {\n\n\treturn(\n\t\tHello Updated
\n\t);\n};',
+ createdAt: currentSnippet.createdAt,
+ description: 'Basic react component updated',
+ folderId: snippetToUpdate.folderId,
+ id: currentSnippet.id,
+ language: 'tsx',
+ lineHighlight: '[[1, "diff-add"]]',
+ name: 'app-updated.tsx',
+ size: expect.any(Number),
+ theme: 'one-dark-pro',
+ updatedAt: currentSnippet.updatedAt,
+ userId,
+ visibility: 'private',
+ };
+
+ expect(snippetToUpdate).toMatchObject(expectedSnippet);
+ });
+});
diff --git a/packages/domain/tests/services/snippets/snippet.service.test.ts b/packages/domain/__tests__/services/snippets/snippet.service.test.ts
similarity index 100%
rename from packages/domain/tests/services/snippets/snippet.service.test.ts
rename to packages/domain/__tests__/services/snippets/snippet.service.test.ts
diff --git a/packages/domain/tests/services/users/dtos/create-user-dto.test.ts b/packages/domain/__tests__/services/users/dtos/create-user-dto.test.ts
similarity index 100%
rename from packages/domain/tests/services/users/dtos/create-user-dto.test.ts
rename to packages/domain/__tests__/services/users/dtos/create-user-dto.test.ts
diff --git a/packages/domain/tests/services/users/dtos/update-user-dto.test.ts b/packages/domain/__tests__/services/users/dtos/update-user-dto.test.ts
similarity index 100%
rename from packages/domain/tests/services/users/dtos/update-user-dto.test.ts
rename to packages/domain/__tests__/services/users/dtos/update-user-dto.test.ts
diff --git a/packages/domain/tests/services/users/user.service.test.ts b/packages/domain/__tests__/services/users/user.service.test.ts
similarity index 100%
rename from packages/domain/tests/services/users/user.service.test.ts
rename to packages/domain/__tests__/services/users/user.service.test.ts
diff --git a/packages/domain/tests/setup/global-setup.ts b/packages/domain/__tests__/setup/global-setup.ts
similarity index 100%
rename from packages/domain/tests/setup/global-setup.ts
rename to packages/domain/__tests__/setup/global-setup.ts
diff --git a/packages/domain/tests/setup/test-setup.ts b/packages/domain/__tests__/setup/test-setup.ts
similarity index 100%
rename from packages/domain/tests/setup/test-setup.ts
rename to packages/domain/__tests__/setup/test-setup.ts
diff --git a/packages/domain/tests/setup/test-utils.ts b/packages/domain/__tests__/setup/test-utils.ts
similarity index 97%
rename from packages/domain/tests/setup/test-utils.ts
rename to packages/domain/__tests__/setup/test-utils.ts
index 3ed18e2b..3fe13d0e 100644
--- a/packages/domain/tests/setup/test-utils.ts
+++ b/packages/domain/__tests__/setup/test-utils.ts
@@ -135,9 +135,9 @@ export const createManyTestFolders = async ({
export const generateTestId = (): string => dbId.generate();
-export const createTestFolderDto = (args?: { parentId?: string; userId?: string }): CreateFolderDto => {
+export const createTestFolderDto = (args?: { name?: string; parentId?: string; userId?: string }): CreateFolderDto => {
return new CreateFolderDto({
- name: randWord(),
+ name: args?.name ?? randWord(),
parentId: args?.parentId ?? generateTestId(),
userId: args?.userId ?? generateTestId(),
});
diff --git a/packages/domain/jest.config.ts b/packages/domain/jest.config.ts
index b4802fdb..2d06042f 100644
--- a/packages/domain/jest.config.ts
+++ b/packages/domain/jest.config.ts
@@ -8,16 +8,13 @@ const config: Config.InitialOptions = {
clearMocks: true,
maxWorkers: 1,
snapshotFormat: {
- "printBasicPrototype": false
+ printBasicPrototype: false,
},
- globalSetup: './tests/setup/global-setup.ts',
- setupFilesAfterEnv: ['./tests/setup/test-setup.ts'],
+ globalSetup: './__tests__/setup/global-setup.ts',
+ setupFilesAfterEnv: ['./__tests__/setup/test-setup.ts'],
coverageDirectory: 'coverage',
collectCoverage: false, // When set to true, coverage is performed even if coverage flag isn't provided
- collectCoverageFrom: [
- 'src/**/*.ts',
- '!src/index.ts',
- ],
+ collectCoverageFrom: ['src/**/*.ts', '!src/index.ts'],
coverageThreshold: {
global: {
branches: 40,
diff --git a/packages/domain/package.json b/packages/domain/package.json
index f24987c6..1967cc1e 100644
--- a/packages/domain/package.json
+++ b/packages/domain/package.json
@@ -29,6 +29,6 @@
"@types/jest": "^28.1.4",
"jest": "^28.1.2",
"ts-jest": "^28.0.5",
- "typescript": "^4.7.4"
+ "typescript": "4.8.4"
}
}
diff --git a/packages/domain/src/folders/dtos/create-folder-dto.ts b/packages/domain/src/folders/dtos/create-folder-dto.ts
index c7e121a6..21388d9a 100644
--- a/packages/domain/src/folders/dtos/create-folder-dto.ts
+++ b/packages/domain/src/folders/dtos/create-folder-dto.ts
@@ -32,6 +32,7 @@ export default class CreateFolderDto {
isFavorite: false,
name: this._input.name,
parentId: this._input.parentId,
+ path: null,
updatedAt: new Date(),
userId: this._input.userId,
};
diff --git a/packages/domain/src/folders/dtos/create-user-root-folder-dto.ts b/packages/domain/src/folders/dtos/create-user-root-folder-dto.ts
index fa6772f2..0665c840 100644
--- a/packages/domain/src/folders/dtos/create-user-root-folder-dto.ts
+++ b/packages/domain/src/folders/dtos/create-user-root-folder-dto.ts
@@ -14,6 +14,7 @@ export default class CreateUserRootFolderDto {
isFavorite: false,
name: `__${this._userId}__`,
parentId: null,
+ path: null,
updatedAt: new Date(),
userId: this._userId,
};
diff --git a/packages/domain/src/folders/folder.service.ts b/packages/domain/src/folders/folder.service.ts
index 1cc54f15..fe475312 100644
--- a/packages/domain/src/folders/folder.service.ts
+++ b/packages/domain/src/folders/folder.service.ts
@@ -33,11 +33,14 @@ export default class FolderService {
const input = createFolderDto.toFolder();
+ const parentFolder = await this.findById(createFolderDto.parentFolderId);
+
return dbClient.folder.create({
data: {
id: input.id,
name: input.name,
parentId: input.parentId,
+ path: this.buildFolderPath(parentFolder),
userId: input.userId,
},
});
@@ -108,15 +111,30 @@ export default class FolderService {
});
}
- async generateDirectoryPath(folderId: string): Promise {
- const folders: Folder[] = [];
+ async generateBreadcrumb(folderId: string): Promise {
+ const folder = await this.findById(folderId);
+
+ const parentFolderIds = folder.path?.split('/') ?? [];
- await this.listParentFolderRecursively(folderId, folders);
+ if (parentFolderIds.length === 0) {
+ return [];
+ }
+
+ const parentFoldersOrdered = await dbClient.folder.findMany({
+ orderBy: {
+ createdAt: 'asc',
+ },
+ where: {
+ id: {
+ in: parentFolderIds,
+ },
+ },
+ });
// Remove the user root folder
- folders.pop();
+ parentFoldersOrdered.shift();
- return folders.reverse();
+ return parentFoldersOrdered.concat(folder);
}
async update(updateFolderDto: UpdateFolderDto): Promise {
@@ -152,16 +170,12 @@ export default class FolderService {
});
}
- private async listParentFolderRecursively(folderId: string, result: Folder[] = []): Promise {
- const folder = await dbClient.folder.findFirstOrThrow({ where: { id: folderId } });
-
- result.push(folder);
-
- if (!folder.parentId) {
- return result;
+ private buildFolderPath(parentFolder: Folder): string {
+ if (!parentFolder.path) {
+ return parentFolder.id;
}
- return this.listParentFolderRecursively(folder.parentId, result);
+ return [parentFolder.path, parentFolder.id].join('/');
}
private findFolderSubFolders(folderId: string, userId: string): Promise {
diff --git a/packages/domain/tsconfig.json b/packages/domain/tsconfig.json
index b4d97aba..98d309cf 100644
--- a/packages/domain/tsconfig.json
+++ b/packages/domain/tsconfig.json
@@ -7,7 +7,7 @@
"sourceMap": true
},
"files": ["env.d.ts"],
- "include": ["src", "tests", "index.ts"],
+ "include": ["src", "__tests__", "index.ts"],
"exclude": [
"node_modules"
],
diff --git a/packages/domain/tsconfig.prod.json b/packages/domain/tsconfig.prod.json
index 346b7e9a..e8c5afe2 100644
--- a/packages/domain/tsconfig.prod.json
+++ b/packages/domain/tsconfig.prod.json
@@ -3,5 +3,7 @@
"compilerOptions": {
"sourceMap": false
},
- "exclude": ["tests"]
+ "exclude": [
+ "__tests__"
+ ]
}
diff --git a/packages/embed/src/oembed/tests/generate-metadata.test.ts b/packages/embed/__tests__/oembed/generate-metadata.test.ts
similarity index 95%
rename from packages/embed/src/oembed/tests/generate-metadata.test.ts
rename to packages/embed/__tests__/oembed/generate-metadata.test.ts
index 5d61c253..5842c0af 100644
--- a/packages/embed/src/oembed/tests/generate-metadata.test.ts
+++ b/packages/embed/__tests__/oembed/generate-metadata.test.ts
@@ -1,4 +1,4 @@
-import { generateOembedMetadata } from '../index';
+import { generateOembedMetadata } from '../../src/oembed';
describe('Test Generate Oembed metadata', () => {
it('should generate Oembed metadata for a code snippet', () => {
diff --git a/packages/embed/src/renderer/content/tests/html-generator.test.ts b/packages/embed/__tests__/renderer/content/html-generator.test.ts
similarity index 86%
rename from packages/embed/src/renderer/content/tests/html-generator.test.ts
rename to packages/embed/__tests__/renderer/content/html-generator.test.ts
index 596877a0..7fba17a6 100644
--- a/packages/embed/src/renderer/content/tests/html-generator.test.ts
+++ b/packages/embed/__tests__/renderer/content/html-generator.test.ts
@@ -1,4 +1,4 @@
-import { generateNoSnippetHtmlContent } from '../html-generator';
+import { generateNoSnippetHtmlContent } from '../../../src/renderer/content/html-generator';
describe('Test HTML generator functions', () => {
it.only('should generates html content for a non existing code snippet', () => {
diff --git a/packages/embed/src/renderer/content/tests/preview-template.test.ts b/packages/embed/__tests__/renderer/content/preview-template.test.ts
similarity index 95%
rename from packages/embed/src/renderer/content/tests/preview-template.test.ts
rename to packages/embed/__tests__/renderer/content/preview-template.test.ts
index 8bb80c45..e33e365a 100644
--- a/packages/embed/src/renderer/content/tests/preview-template.test.ts
+++ b/packages/embed/__tests__/renderer/content/preview-template.test.ts
@@ -1,6 +1,6 @@
-import { Args, generateHTMLPreview } from '../preview-template';
+import { Args, generateHTMLPreview } from '../../../src/renderer/content/preview-template';
-jest.mock('../utils', () => {
+jest.mock('../../../src/renderer/content/utils', () => {
return {
generateRandomString: () => 'random-id',
};
diff --git a/packages/embed/src/renderer/content/tests/utils.test.ts b/packages/embed/__tests__/renderer/content/utils.test.ts
similarity index 95%
rename from packages/embed/src/renderer/content/tests/utils.test.ts
rename to packages/embed/__tests__/renderer/content/utils.test.ts
index 38b60729..55c7b0db 100644
--- a/packages/embed/src/renderer/content/tests/utils.test.ts
+++ b/packages/embed/__tests__/renderer/content/utils.test.ts
@@ -1,4 +1,8 @@
-import { addWhitespaceForEmptyLine, generateLineHighlightOptions, parseHTMLSnippetCode } from '../utils';
+import {
+ addWhitespaceForEmptyLine,
+ generateLineHighlightOptions,
+ parseHTMLSnippetCode,
+} from '../../../src/renderer/content/utils';
describe('Test utils functions', () => {
describe('Test addWhitespaceForEmptyLine()', () => {
diff --git a/packages/embed/package.json b/packages/embed/package.json
index 4a2d0d36..37f30dd8 100644
--- a/packages/embed/package.json
+++ b/packages/embed/package.json
@@ -30,6 +30,6 @@
"ts-jest": "^29.0.3",
"ts-node": "^10.9.1",
"tsup": "^6.2.2",
- "typescript": "^4.8.4"
+ "typescript": "4.8.4"
}
}
diff --git a/packages/embed/tsconfig.json b/packages/embed/tsconfig.json
index 1e06835f..0da2048c 100644
--- a/packages/embed/tsconfig.json
+++ b/packages/embed/tsconfig.json
@@ -5,12 +5,12 @@
"outDir": "./dist",
"declaration": true,
"composite": true,
- "sourceMap": true,
+ "sourceMap": false,
"lib": ["es2021", "dom"],
"target": "es2021"
},
"files": ["env.d.ts"],
- "include": ["./src/**/*", "index.ts"],
+ "include": ["src", "__tests__", "index.ts"],
"exclude": [
"node_modules"
]
diff --git a/packages/embed/tsconfig.prod.json b/packages/embed/tsconfig.prod.json
index 9bd105a1..cd385c22 100644
--- a/packages/embed/tsconfig.prod.json
+++ b/packages/embed/tsconfig.prod.json
@@ -3,6 +3,6 @@
"extends": "./tsconfig.json",
"exclude": [
"node_modules",
- "./src/**/*.test.ts"
+ "__tests__"
]
}
diff --git a/packages/front/package.json b/packages/front/package.json
index 828bfef6..2e134156 100644
--- a/packages/front/package.json
+++ b/packages/front/package.json
@@ -18,7 +18,7 @@
"react-dom": "18.2.0",
"react-hook-form": "^7.33.1",
"react-simple-code-editor": "^0.11.2",
- "shiki": "^0.10.1",
+ "shiki": "^0.11.1",
"yup": "^0.32.11"
},
"devDependencies": {
diff --git a/packages/logger/tests/utils/index.test.ts b/packages/logger/__tests__/utils/index.test.ts
similarity index 100%
rename from packages/logger/tests/utils/index.test.ts
rename to packages/logger/__tests__/utils/index.test.ts
diff --git a/packages/logger/package.json b/packages/logger/package.json
index 3bdb09be..dce551f3 100644
--- a/packages/logger/package.json
+++ b/packages/logger/package.json
@@ -22,6 +22,6 @@
"@types/lodash": "^4.14.182",
"jest": "^28.1.2",
"ts-jest": "^28.0.5",
- "typescript": "^4.7.4"
+ "typescript": "4.8.4"
}
}
diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json
index 184240da..e250017b 100644
--- a/packages/logger/tsconfig.json
+++ b/packages/logger/tsconfig.json
@@ -6,7 +6,7 @@
"composite": true,
"sourceMap": true,
},
- "include": ["./src/**/*", "./tests/**/*", "index.ts"],
+ "include": ["src", "__tests__", "index.ts"],
"exclude": [
"node_modules"
]
diff --git a/packages/logger/tsconfig.prod.json b/packages/logger/tsconfig.prod.json
index 346b7e9a..e8c5afe2 100644
--- a/packages/logger/tsconfig.prod.json
+++ b/packages/logger/tsconfig.prod.json
@@ -3,5 +3,7 @@
"compilerOptions": {
"sourceMap": false
},
- "exclude": ["tests"]
+ "exclude": [
+ "__tests__"
+ ]
}
diff --git a/packages/utils/tests/common/environment.test.ts b/packages/utils/__tests__/common/environment.test.ts
similarity index 100%
rename from packages/utils/tests/common/environment.test.ts
rename to packages/utils/__tests__/common/environment.test.ts
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 9979d03d..0e5e71f1 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -22,6 +22,6 @@
"@types/uuid": "^8.3.4",
"jest": "^28.1.2",
"ts-jest": "^28.0.5",
- "typescript": "^4.7.4"
+ "typescript": "4.8.4"
}
}
diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json
index 184240da..6cdd0afe 100644
--- a/packages/utils/tsconfig.json
+++ b/packages/utils/tsconfig.json
@@ -4,9 +4,8 @@
"outDir": "./dist",
"declaration": true,
"composite": true,
- "sourceMap": true,
},
- "include": ["./src/**/*", "./tests/**/*", "index.ts"],
+ "include": ["src", "__tests__", "index.ts"],
"exclude": [
"node_modules"
]
diff --git a/packages/utils/tsconfig.prod.json b/packages/utils/tsconfig.prod.json
index 346b7e9a..e8c5afe2 100644
--- a/packages/utils/tsconfig.prod.json
+++ b/packages/utils/tsconfig.prod.json
@@ -3,5 +3,7 @@
"compilerOptions": {
"sourceMap": false
},
- "exclude": ["tests"]
+ "exclude": [
+ "__tests__"
+ ]
}
diff --git a/yarn.lock b/yarn.lock
index 2f67fe25..8bb896e3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2658,22 +2658,22 @@
tiny-glob "^0.2.9"
tslib "^2.4.0"
-"@prisma/client@^4.1.1":
- version "4.1.1"
- resolved "https://registry.npmjs.org/@prisma/client/-/client-4.1.1.tgz"
- integrity sha512-2pXuIUYxHv5H9o6QTa1VIsl4yMgsAjKQOitlo8WVTB+vo73rmMJITBPavdGUZSWUc7adMkFzEV3y5rVTUQr77Q==
+"@prisma/client@^4.5.0":
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.5.0.tgz#f708549bee3da396d5741d846b4e4306b120210c"
+ integrity sha512-B2cV0OPI1smhdYUxsJoLYQLoMlLH06MUxgFUWQnHodGMX98VRVXKmQE/9OcrTNkqtke5RC+YU24Szxd04tZA2g==
dependencies:
- "@prisma/engines-version" "4.1.0-48.8d8414deb360336e4698a65aa45a1fbaf1ce13d8"
+ "@prisma/engines-version" "4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452"
-"@prisma/engines-version@4.1.0-48.8d8414deb360336e4698a65aa45a1fbaf1ce13d8":
- version "4.1.0-48.8d8414deb360336e4698a65aa45a1fbaf1ce13d8"
- resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.1.0-48.8d8414deb360336e4698a65aa45a1fbaf1ce13d8.tgz"
- integrity sha512-cRRJwpHFGFJZvtHbY3GZjMffNBEjjZk68ztn+S2hDgPCGB4H66IK26roK94GJxBodSehwRJ0wGyebC2GoIH1JQ==
+"@prisma/engines-version@4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452":
+ version "4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452"
+ resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452.tgz#5b7fae294ee9bd9790d0e7b7a0b0912e4222ac08"
+ integrity sha512-o7LyVx8PPJBLrEzLl6lpxxk2D5VnlM4Fwmrbq0NoT6pr5aa1OuHD9ZG+WJY6TlR/iD9bhmo2LNcxddCMr5Rv2A==
-"@prisma/engines@4.1.1":
- version "4.1.1"
- resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.1.1.tgz"
- integrity sha512-DCw8L/SS0IXqmj5IW/fMxOXiifnsfjBzDfRhf0j3NFWqvMCh9OtfjmXQZxVgI2mwvJLc/5jzXhkiWT39qS09dA==
+"@prisma/engines@4.5.0":
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.5.0.tgz#82df347a893a5ae2a67707d44772ba181f4b9328"
+ integrity sha512-4t9ir2SbQQr/wMCNU4YpHWp5hU14J2m3wHUZnGJPpmBF8YtkisxyVyQsKd1e6FyLTaGq8LOLhm6VLYHKqKNm+g==
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
@@ -11137,12 +11137,12 @@ pretty-format@^29.0.0, pretty-format@^29.1.2:
ansi-styles "^5.0.0"
react-is "^18.0.0"
-prisma@^4.1.1:
- version "4.1.1"
- resolved "https://registry.npmjs.org/prisma/-/prisma-4.1.1.tgz"
- integrity sha512-yw50J8If2dKP4wYIi695zthsCASQFHiogGvUHHWd3falx/rpsD6Sb1LMLRV9nO3iGG3lozxNJ2PSINxK7xwdpg==
+prisma@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.5.0.tgz#361ae3f4476d0821b97645e5da42975a7c2943bb"
+ integrity sha512-9Aeg4qiKlv9Wsjz4NO8k2CzRzlvS3A4FYVJ5+28sBBZ0eEwbiVOE/Jj7v6rZC1tFW2s4GSICQOAyuOjc6WsNew==
dependencies:
- "@prisma/engines" "4.1.1"
+ "@prisma/engines" "4.5.0"
process-nextick-args@~2.0.0:
version "2.0.1"
@@ -12047,15 +12047,6 @@ shebang-regex@^3.0.0:
resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shiki@^0.10.1:
- version "0.10.1"
- resolved "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz"
- integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==
- dependencies:
- jsonc-parser "^3.0.0"
- vscode-oniguruma "^1.6.1"
- vscode-textmate "5.2.0"
-
shiki@^0.11.1:
version "0.11.1"
resolved "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz"
@@ -13200,21 +13191,16 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
-typescript@4.7.4, typescript@^4.6.4, typescript@^4.7.4:
- version "4.7.4"
- resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz"
- integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
-
-typescript@^4.8.2:
- version "4.8.2"
- resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz"
- integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==
-
-typescript@^4.8.4:
+typescript@4.8.4, typescript@^4.8.4:
version "4.8.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6"
integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
+typescript@^4.6.4:
+ version "4.7.4"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz"
+ integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
+
ua-parser-js@^0.7.30:
version "0.7.31"
resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz"
@@ -13487,11 +13473,6 @@ vscode-oniguruma@^1.6.1:
resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz"
integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==
-vscode-textmate@5.2.0:
- version "5.2.0"
- resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz"
- integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
-
vscode-textmate@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz"