bb-relay 0.0.1

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.
Files changed (100) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/README.md +47 -0
  3. package/dist/chunk-S47CVTVK.mjs +33 -0
  4. package/dist/chunk-UJCSKKID.mjs +30 -0
  5. package/dist/dev.d.mts +11 -0
  6. package/dist/dev.d.ts +11 -0
  7. package/dist/dev.js +5028 -0
  8. package/dist/dev.mjs +4991 -0
  9. package/dist/index.d.mts +666 -0
  10. package/dist/index.d.ts +666 -0
  11. package/dist/index.js +405 -0
  12. package/dist/index.mjs +376 -0
  13. package/eslint.config.mts +19 -0
  14. package/jest.config.js +11 -0
  15. package/package.json +60 -0
  16. package/src/dev.ts +4 -0
  17. package/src/index.ts +72 -0
  18. package/src/load-virtual-editor/app/StatusState.ts +6 -0
  19. package/src/load-virtual-editor/app/css.ts +154 -0
  20. package/src/load-virtual-editor/app/store.ts +25 -0
  21. package/src/load-virtual-editor/events/handle-dir-update.ts +23 -0
  22. package/src/load-virtual-editor/events/handle-file-update.ts +23 -0
  23. package/src/load-virtual-editor/events/handle-load.ts +39 -0
  24. package/src/load-virtual-editor/events/handle-selected.ts +30 -0
  25. package/src/load-virtual-editor/index.ts +52 -0
  26. package/src/load-virtual-editor/lib/indexedStorage.ts +28 -0
  27. package/src/load-virtual-editor/mocks/generate-files.ts +25 -0
  28. package/src/load-virtual-editor/node/NodeState.ts +23 -0
  29. package/src/load-virtual-editor/node/copyDir.ts +14 -0
  30. package/src/load-virtual-editor/node/copyFile.ts +14 -0
  31. package/src/load-virtual-editor/node/createDir.ts +10 -0
  32. package/src/load-virtual-editor/node/createFile.ts +13 -0
  33. package/src/load-virtual-editor/node/deleteDir.ts +10 -0
  34. package/src/load-virtual-editor/node/deleteFile.ts +13 -0
  35. package/src/load-virtual-editor/node/formatPath.ts +13 -0
  36. package/src/load-virtual-editor/node/formatText.ts +19 -0
  37. package/src/load-virtual-editor/node/generateDirs.ts +13 -0
  38. package/src/load-virtual-editor/node/getDescendantLevel.ts +9 -0
  39. package/src/load-virtual-editor/node/getDirInfo.ts +33 -0
  40. package/src/load-virtual-editor/node/getFileInfo.ts +31 -0
  41. package/src/load-virtual-editor/node/getFiles.ts +17 -0
  42. package/src/load-virtual-editor/node/getParent.ts +11 -0
  43. package/src/load-virtual-editor/node/readDir.ts +41 -0
  44. package/src/load-virtual-editor/node/readFile.ts +46 -0
  45. package/src/load-virtual-editor/node/store.ts +206 -0
  46. package/src/load-virtual-editor/node/watch.ts +9 -0
  47. package/src/load-virtual-editor/node/writeFile.ts +21 -0
  48. package/src/load-virtual-editor/postResponse.ts +21 -0
  49. package/src/load-virtual-editor/request/requestFS.ts +199 -0
  50. package/src/load-virtual-editor/request/requestSelected.ts +45 -0
  51. package/src/load-virtual-editor/selected/SelectedState.ts +7 -0
  52. package/src/load-virtual-editor/selected/selectDir.ts +13 -0
  53. package/src/load-virtual-editor/selected/selectFile.ts +13 -0
  54. package/src/load-virtual-editor/selected/store.ts +27 -0
  55. package/src/load-virtual-editor/selected/watch.ts +9 -0
  56. package/src/locales/en-GB.ts +117 -0
  57. package/src/locales/fr-FR.ts +125 -0
  58. package/src/relay/index.ts +89 -0
  59. package/src/relay/registerEvent.ts +16 -0
  60. package/src/relay/registerRequest.ts +16 -0
  61. package/src/relay/storage-bridge.ts +71 -0
  62. package/src/types/BBEvent.ts +51 -0
  63. package/src/types/BBRequest.ts +8 -0
  64. package/src/types/Checkpoint.ts +11 -0
  65. package/src/types/CopyArg.ts +6 -0
  66. package/src/types/DirectoryContents.ts +4 -0
  67. package/src/types/DirectoryStats.ts +4 -0
  68. package/src/types/EventParam.ts +8 -0
  69. package/src/types/EventReturn.ts +9 -0
  70. package/src/types/FileContent.ts +9 -0
  71. package/src/types/GitFileStatus.ts +5 -0
  72. package/src/types/IconArg.ts +6 -0
  73. package/src/types/Language.ts +5 -0
  74. package/src/types/Locale.ts +3 -0
  75. package/src/types/MenuContent.ts +10 -0
  76. package/src/types/Nav.ts +3 -0
  77. package/src/types/PluginItem.ts +14 -0
  78. package/src/types/RenameType.ts +4 -0
  79. package/src/types/RequestParam.ts +9 -0
  80. package/src/types/RequestReturn.ts +11 -0
  81. package/src/types/Result.ts +6 -0
  82. package/src/types/Route.ts +1 -0
  83. package/src/types/Settings.ts +7 -0
  84. package/src/types/TutorialHeader.ts +10 -0
  85. package/src/types/User.ts +9 -0
  86. package/src/types/WatchFSEvent.ts +1 -0
  87. package/src/types/database.types.ts +266 -0
  88. package/src/types/dir/DirInfo.ts +10 -0
  89. package/src/types/dir/index.ts +32 -0
  90. package/src/types/files/FileInfo.ts +12 -0
  91. package/src/types/files/FileTypes.ts +13 -0
  92. package/src/types/files/ReadFile.ts +17 -0
  93. package/src/types/files/index.ts +31 -0
  94. package/src/types/project/Project.ts +35 -0
  95. package/src/types/project/index.ts +11 -0
  96. package/src/types/status/Load.ts +16 -0
  97. package/src/types/storage/index.ts +11 -0
  98. package/src/utils/inject-styles.ts +13 -0
  99. package/tsconfig.json +20 -0
  100. package/tsup.config.ts +16 -0
@@ -0,0 +1,117 @@
1
+ export const enGB = {
2
+ "language.british_english": "British English",
3
+ "language.french": "French (France)",
4
+ "file.new": "New File",
5
+ "file.new.placeholder": "Press enter to add file",
6
+ "file.open": "Open File",
7
+ "file.duplicate": "Duplicate File",
8
+ "file.delete": "Delete File",
9
+ "file.rename": "Rename File",
10
+ "file.close": "Close File",
11
+ "file.cut": "Cut File",
12
+ "file.copy": "Copy File",
13
+ "file.export_html": "Export as HTML",
14
+ "file.export_pdf": "Export as PDF",
15
+ "file.print": "Print File",
16
+ "file.location.open": "Open File Location",
17
+ file: "File",
18
+ edit: "Edit",
19
+ view: "View",
20
+ help: "Help",
21
+ welcome: "Welcome to BB Desktop!",
22
+ "welcome.message": "Get started by creating a new file or opening an existing one.",
23
+ "version.current": "Current Version",
24
+ "version.latest": "Latest Version",
25
+ "version.out_of_date": "An update is available!",
26
+ "version.up_to_date": "You are using the latest version.",
27
+ "update.check": "Check for Updates",
28
+ "update.download": "Download Update",
29
+ "update.release_notes": "Release Notes",
30
+ install_and_restart: "Install and Restart",
31
+ later: "Later",
32
+ close: "Close",
33
+ about: "About",
34
+ change_log: "Change Log",
35
+ documentation: "Documentation",
36
+ "report.issue": "Report Issue",
37
+ "folder.new": "New Folder",
38
+ "folder.new.placeholder": "Press enter to add folder",
39
+ "folder.open": "Open folder",
40
+ "folder.open.message": "You can open a folder",
41
+ "folder.open.description":
42
+ "Opening a folder allows you to create a project, and save all files in that folder",
43
+ "project.download": "Download Project",
44
+ "project.download.title": "You can download a project",
45
+ "project.download.description":
46
+ " You browse the projects that you backed up in the clouds and download them to your computer",
47
+ "project.select": "Select project",
48
+ "project.select.title": "You can select a previous project",
49
+ "project.select.description": "Go into your file system to select a previously saved project",
50
+ "project.new": "New Project",
51
+ tags: "Tags",
52
+ "tag.input.placeholder": "Press enter to add tag",
53
+ category: "Category",
54
+ "category.select": "Select category",
55
+ "project.title": "Project Title",
56
+ "project.title.placeholder": "The tales of two cities",
57
+ "project.description": "What is your story about",
58
+ "project.description.placeholder": "This is a story about...",
59
+ email: "Email",
60
+ "email.placeholder": "example@email.com",
61
+ password: "Password",
62
+ "password.placeholder": "********",
63
+ username: "username",
64
+ "username.placeholder": "@bb-author",
65
+ "workspace.select": "Select workspace",
66
+ "workspace.select.description": "Select a folder where all your projects will be saved",
67
+ "file.explorer": "File explorer",
68
+ "no_workspace.message": "Select a workspace to start working on your next project",
69
+ "folder.select.placeholder": "./path/to/project",
70
+ "folder.select": "Select folder",
71
+ "folder.rename": "Rename Folder",
72
+ "folder.duplicate": "Duplicate Folder",
73
+ "folder.paste": "Paste into Folder",
74
+ "folder.cut": "Cut Folder",
75
+ "folder.copy": "Copy Folder",
76
+ "folder.delete": "Delete Folder",
77
+ folder: "Folder",
78
+ "folder.location.open": "Open Folder Location",
79
+ "checkpoint.list.header": "Checkpoints",
80
+ "checkpoint.placeholder": "Checkpoint message...",
81
+ "checkpoint.button": "Save checkpoint",
82
+ "git.stage.all": "Add all to stage",
83
+ "git.discard.all": "Discard all changes",
84
+ "git.stage": "Add to stage",
85
+ "git.discard": "Discard changes",
86
+ "git.discard.message": "Are you sure you want to discard all changes?",
87
+ "git.unstage.all": "Remove all from stage",
88
+ "git.unstage": "Remove from stage",
89
+ changes: "Changes",
90
+ history: "History",
91
+ home: "Home",
92
+ cancel: "Cancel",
93
+ confirm: "Confirm",
94
+ "plugin.install": "Install plugin",
95
+ "project.create": "Create project",
96
+ "checkpoint.save": "Save checkpoint",
97
+ "file.delete.warning": "Are you sure you want to delete this file? This action cannot be undone.",
98
+ "folder.delete.warning":
99
+ "Are you sure you want to delete this folder? This action cannot be undone.",
100
+ delete: "Delete",
101
+ "placeholder.text": "This is a placeholder text",
102
+ "placeholder.click": "Click me",
103
+ "placeholder.label": "Label",
104
+ find: "Find",
105
+ replace: "Replace",
106
+ "replace.all": "Replace all",
107
+ previous: "Previous",
108
+ next: "Next",
109
+ "search.use.regex": "Use regex",
110
+ "search.case.sensitive": "Case sensitive",
111
+ "plugins.search": "Search Plugins in Marketplace",
112
+ install: "Install",
113
+ uninstall: "Uninstall",
114
+ repository: "Repository"
115
+ }
116
+
117
+ export default enGB
@@ -0,0 +1,125 @@
1
+ import Language from "@/types/Language";
2
+
3
+ export const frFR: { [key in Language] } = {
4
+ "language.british_english": "Anglais britannique",
5
+ "language.french": "Français (France)",
6
+ "file.new": "Nouveau fichier",
7
+ "file.new.placeholder": "Appuyez sur Entrée pour ajouter un fichier",
8
+ "file.open": "Ouvrir le fichier",
9
+ "file.duplicate": "Dupliquer le fichier",
10
+ "file.delete": "Supprimer le fichier",
11
+ "file.rename": "Renommer le fichier",
12
+ "file.close": "Fermer le fichier",
13
+ "file.cut": "Couper le fichier",
14
+ "file.copy": "Copier le fichier",
15
+ "file.export_html": "Exporter au format HTML",
16
+ "file.export_pdf": "Exporter au format PDF",
17
+ "file.print": "Imprimer le fichier",
18
+ "file.location.open": "Ouvrir l'emplacement du fichier",
19
+ file: "Fichier",
20
+ edit: "Modifier",
21
+ view: "Afficher",
22
+ help: "Aide",
23
+ welcome: "Bienvenue sur BB Desktop !",
24
+ "welcome.message":
25
+ "Obtenir Commencer par créer un nouveau fichier ou en ouvrir un existant.",
26
+ "version.current": "Version actuelle",
27
+ "version.latest": "Dernière version",
28
+ "version.out_of_date": "Une mise à jour est disponible !",
29
+ "version.up_to_date": "Vous utilisez la dernière version.",
30
+ "update.check": "Rechercher les mises à jour",
31
+ "update.download": "Télécharger la mise à jour",
32
+ "update.release_notes": "Notes de version",
33
+ install_and_restart: "Installer et redémarrer",
34
+ later: "Plus tard",
35
+ close: "Fermer",
36
+ about: "À propos",
37
+ change_log: "Journal des modifications",
38
+ documentation: "Documentation",
39
+ "report.issue": "Signaler un problème",
40
+ "folder.new": "Nouveau dossier",
41
+ "folder.new.placeholder": "Appuyez sur Entrée pour ajouter un dossier",
42
+ "folder.open": "Ouvrir un dossier",
43
+ "folder.open.message": "Vous pouvez ouvrir un dossier",
44
+ "folder.open.description":
45
+ "Ouvrir un dossier vous permet de créer un projet et d'enregistrer tous les fichiers qu'il contient.",
46
+ "project.download": "Télécharger le projet",
47
+ "project.download.title": "Vous pouvez télécharger un projet.",
48
+ "project.download.description":
49
+ "Parcourez les projets sauvegardés dans le cloud et téléchargez-les sur votre ordinateur.",
50
+ "project.select": "Sélectionner un projet.",
51
+ "project.select.title": "Vous pouvez sélectionner un projet précédent.",
52
+ "project.select.description":
53
+ "Accédez à votre système de fichiers pour sélectionner un projet précédemment enregistré.",
54
+ "project.new": "Nouveau projet.",
55
+ tags: "Étiquettes",
56
+ "tag.input.placeholder": "Appuyez sur Entrée pour ajouter une étiquette.",
57
+ category: "Catégorie",
58
+ "category.select": "Sélectionnez une catégorie.",
59
+ "project.title": "Titre du projet.",
60
+ "project.title.placeholder": "Les contes de deux villes.",
61
+ "project.description": "De quoi parle votre histoire ?",
62
+ "project.description.placeholder": "Ceci est une histoire sur...",
63
+ email: "Email",
64
+ "email.placeholder": "example@email.com",
65
+ password: "Password",
66
+ "password.placeholder": "********",
67
+ username: "username",
68
+ "username.placeholder": "@bb-author",
69
+ "workspace.select": "Sélectionnez un espace de travail",
70
+ "workspace.select.description":
71
+ "Sélectionnez un dossier où tous vos projets seront enregistrés",
72
+ "file.explorer": "Explorateur de fichiers",
73
+ "no_workspace.message":
74
+ "Sélectionnez un espace de travail pour commencer à travailler sur votre prochain projet",
75
+ "folder.select.placeholder": "./chemin/vers/projet",
76
+ "folder.select": "Sélectionnez un dossier",
77
+ "folder.rename": "Renommer le dossier",
78
+ "folder.duplicate": "Dupliquer le dossier",
79
+ "folder.paste": "Coller dans le dossier",
80
+ "folder.cut": "Couper le dossier",
81
+ "folder.copy": "Copier le dossier",
82
+ "folder.delete": "Supprimer le dossier",
83
+ folder: "Dossier",
84
+ "folder.location.open": "Ouvrir l'emplacement du dossier",
85
+ "checkpoint.list.header": "Points de contrôle",
86
+ "checkpoint.placeholder": "Message du point de contrôle...",
87
+ "checkpoint.button": "Enregistrer le point de contrôle",
88
+ "git.stage.all": "Ajouter tout à la zone de préparation",
89
+ "git.discard.all": "Annuler toutes les modifications",
90
+ "git.stage": "Ajouter à la zone de préparation",
91
+ "git.discard": "Annuler les modifications",
92
+ "git.discard.message":
93
+ "Êtes-vous sûr de vouloir annuler toutes les modifications ?",
94
+ "git.unstage.all": "Retirer tout de la zone de préparation",
95
+ "git.unstage": "Retirer de la zone de préparation",
96
+ changes: "Modifications",
97
+ history: "Historique",
98
+ home: "Accueil",
99
+ cancel: "Annuler",
100
+ confirm: "Confirmer",
101
+ "plugin.install": "Installer le plugin",
102
+ "project.create": "Créer projet",
103
+ "checkpoint.save": "Enregistrer le point de contrôle",
104
+ "file.delete.warning":
105
+ "Êtes-vous sûr de vouloir supprimer ce fichier ? Cette action est irréversible.",
106
+ "folder.delete.warning":
107
+ "Êtes-vous sûr de vouloir supprimer ce dossier ? Cette action est irréversible.",
108
+ delete: "Supprimer",
109
+ "placeholder.text": "Ceci est un texte d'espace réservé",
110
+ "placeholder.click": "Cliquez ici",
111
+ "placeholder.label": "Étiquette",
112
+ find: "Rechercher",
113
+ replace: "Remplacer",
114
+ "replace.all": "Tout remplacer",
115
+ previous: "Précédent",
116
+ next: "Suivant",
117
+ "search.use.regex": "Utiliser une expression régulière",
118
+ "search.case.sensitive": "Respecter la casse",
119
+ "plugins.search": "Rechercher des plugins dans le Marketplace",
120
+ install: "Installer",
121
+ uninstall: "Désinstaller",
122
+ repository: "Dépôt",
123
+ };
124
+
125
+ export default frFR;
@@ -0,0 +1,89 @@
1
+ import registerRequest from "./registerRequest";
2
+ import BBRequest from "../types/BBRequest";
3
+ import storageBridge from "./storage-bridge";
4
+ import RequestReturn from "../types/RequestReturn";
5
+ import BBEvent from "../types/BBEvent";
6
+ import EventReturn from "../types/EventReturn";
7
+ import registerEvent from "./registerEvent";
8
+
9
+ export default class BBRelay {
10
+ private requestCallbacks = new Map<
11
+ string,
12
+ {
13
+ type: keyof BBRequest;
14
+ callback: <K extends keyof BBRequest>(result: {
15
+ response: BBRequest[K]["response"] | null;
16
+ error: null | string;
17
+ }) => void;
18
+ }
19
+ >();
20
+
21
+ private eventCallbacks = new Map<
22
+ string,
23
+ {
24
+ type: keyof BBEvent;
25
+ callback: <K extends keyof BBEvent>(result: {
26
+ response: BBEvent[K]["response"] | null;
27
+ }) => void;
28
+ }
29
+ >();
30
+
31
+ private responseIds: string[] = [];
32
+
33
+ constructor() {
34
+ storageBridge();
35
+ window.addEventListener("message", (event: MessageEvent) => {
36
+ const data = event.data;
37
+ if (!data?.type) return;
38
+ if (this.responseIds.includes(data.responseId)) return;
39
+ this.responseIds.push(data.responseId);
40
+
41
+ if (!data.id) {
42
+ for (const [, { type, callback }] of this.eventCallbacks) {
43
+ const { response } = data as EventReturn<typeof data.type>;
44
+ if (type === data.type) {
45
+ callback({ response });
46
+ }
47
+ }
48
+ }
49
+
50
+ const callback = this.requestCallbacks.get(data.id);
51
+ if (callback) {
52
+ const { response, error } = data as RequestReturn<typeof data.type>;
53
+ callback.callback({ response, error });
54
+ this.requestCallbacks.delete(data.id);
55
+ return;
56
+ }
57
+ });
58
+ }
59
+
60
+ request<K extends keyof BBRequest>(
61
+ type: K,
62
+ arg: BBRequest[K]["args"],
63
+ callback?: (result: RequestReturn<K>) => void
64
+ ) {
65
+ const id = crypto.randomUUID();
66
+ if (callback)
67
+ this.requestCallbacks.set(id, {
68
+ type,
69
+ callback: callback as (result: unknown) => void,
70
+ });
71
+ registerRequest({ type, arg, id });
72
+ }
73
+
74
+ subscribe<K extends keyof BBEvent>(
75
+ type: K,
76
+ callback: (result: EventReturn<K>) => void
77
+ ) {
78
+ const id = crypto.randomUUID();
79
+ this.eventCallbacks.set(id, {
80
+ type,
81
+ callback: callback as (result: unknown) => void,
82
+ });
83
+ registerEvent({ type });
84
+
85
+ return () => {
86
+ this.eventCallbacks.delete(id);
87
+ };
88
+ }
89
+ }
@@ -0,0 +1,16 @@
1
+ import BBEvent from "../types/BBEvent";
2
+
3
+ /**
4
+ * Window = iframe
5
+ * This will be used to send message (request) from the iframe to editor
6
+ * It will let the app know which event to listen to and update the iframe
7
+ * @param event the params that will be sent to the editor
8
+ */
9
+ export default function registerEvent<K extends keyof BBEvent>(event: {
10
+ type: K;
11
+ }) {
12
+ if (!window) throw new Error("Window not found");
13
+ if (window === window.parent) throw new Error("No parent window available");
14
+
15
+ window.parent.postMessage({ ...event, source: "event" }, "*");
16
+ }
@@ -0,0 +1,16 @@
1
+ import BBRequest from "../types/BBRequest";
2
+
3
+ /**
4
+ * This will be used to send message (request) from the iframe to editor
5
+ * @param request the params that will be sent to the editor
6
+ */
7
+ export default function registerRequest<K extends keyof BBRequest>(request: {
8
+ id: string;
9
+ type: K;
10
+ arg: BBRequest[K]["args"];
11
+ }) {
12
+ if (!window) throw new Error("Window not found");
13
+ if (window === window.parent) throw new Error("No parent window available");
14
+
15
+ window.parent.postMessage({ ...request, source: "request" }, "*");
16
+ }
@@ -0,0 +1,71 @@
1
+ import registerRequest from "./registerRequest";
2
+ import RequestReturn from "../types/RequestReturn";
3
+
4
+ export default function storageBridge() {
5
+ let loaded = false;
6
+ const proto = Storage.prototype;
7
+
8
+ // Keep original references
9
+ const _setItem = proto.setItem;
10
+ const _removeItem = proto.removeItem;
11
+ const _clear = proto.clear;
12
+
13
+ function snapshot(storage: Storage) {
14
+ const obj: Record<string, string> = {};
15
+ for (let i = 0; i < storage.length; i++) {
16
+ const key = storage.key(i);
17
+ if (key !== null) {
18
+ obj[key] = storage.getItem(key)!;
19
+ }
20
+ }
21
+ return obj;
22
+ }
23
+
24
+ function notify() {
25
+ registerRequest({
26
+ type: "sync-storage",
27
+ id: crypto.randomUUID(),
28
+ arg: {
29
+ data: snapshot(localStorage),
30
+ },
31
+ });
32
+ }
33
+
34
+ // Patch setItem
35
+ proto.setItem = function (key: string, value: string): void {
36
+ const result = _setItem.apply(this, [key, value]);
37
+ notify();
38
+ return result;
39
+ };
40
+
41
+ // Patch removeItem
42
+ proto.removeItem = function (key: string): void {
43
+ const result = _removeItem.apply(this, [key]);
44
+ notify();
45
+ return result;
46
+ };
47
+
48
+ // Patch clear
49
+ proto.clear = function (): void {
50
+ const result = _clear.apply(this);
51
+ notify();
52
+ return result;
53
+ };
54
+
55
+ registerRequest({
56
+ type: "load-storage",
57
+ id: crypto.randomUUID(),
58
+ arg: null,
59
+ });
60
+ window.addEventListener("message", (event) => {
61
+ const data = event.data as RequestReturn<"load-storage">;
62
+ if (data.type === "load-storage") {
63
+ if (!loaded && data.response) {
64
+ loaded = true;
65
+ for (const key in data.response) {
66
+ localStorage.setItem(key, data.response[key]);
67
+ }
68
+ }
69
+ }
70
+ });
71
+ }
@@ -0,0 +1,51 @@
1
+ import Load from "./status/Load";
2
+ import Project from "./project/Project";
3
+
4
+ type BBEvent = {
5
+ /**
6
+ * When sidebar loads to ensure that the theme matches the app
7
+ */
8
+ load: {
9
+ response: Load;
10
+ };
11
+ /**
12
+ * Show what has been selected
13
+ */
14
+ selected: {
15
+ response: {
16
+ path: string;
17
+ type: "file" | "dir";
18
+ };
19
+ };
20
+ /**
21
+ * Access tokens
22
+ */
23
+ tokens: {
24
+ response: string;
25
+ };
26
+ /**
27
+ * File event
28
+ */
29
+ "file-updated": {
30
+ response: string;
31
+ };
32
+ "dir-updated": {
33
+ response: string;
34
+ };
35
+ /**
36
+ * When the current project details is updated e.g. the title
37
+ */
38
+ "project-updated": {
39
+ response: Project;
40
+ };
41
+ /**
42
+ * When a new project is selected. Unlike updated, the workspaces and files
43
+ * will be totally different
44
+ * Hence if user is using file systems, they might want to reload the files
45
+ */
46
+ "project-changed": {
47
+ response: Project | null;
48
+ };
49
+ };
50
+
51
+ export default BBEvent;
@@ -0,0 +1,8 @@
1
+ import { FileRequests } from "./files";
2
+ import { DirRequests } from "./dir";
3
+ import { StorageRequests } from "./storage";
4
+ import ProjectRequest from "./project";
5
+
6
+ type BBRequest = FileRequests & DirRequests & StorageRequests & ProjectRequest;
7
+
8
+ export default BBRequest;
@@ -0,0 +1,11 @@
1
+ type Checkpoint = {
2
+ sha: string
3
+ message: string
4
+ timestamp: number
5
+ author: {
6
+ name: string
7
+ email: string
8
+ }
9
+ }
10
+
11
+ export default Checkpoint
@@ -0,0 +1,6 @@
1
+ type CopyArg = {
2
+ path: string
3
+ targetFolder: string
4
+ }
5
+
6
+ export default CopyArg
@@ -0,0 +1,4 @@
1
+ export default interface DirectoryContents {
2
+ files: string[]
3
+ directories: string[]
4
+ }
@@ -0,0 +1,4 @@
1
+ export type DirectoryStats = {
2
+ files: number
3
+ directories: number
4
+ }
@@ -0,0 +1,8 @@
1
+ import BBEvent from "./BBEvent";
2
+
3
+ type EventParam<K extends keyof BBEvent> = {
4
+ id: string;
5
+ type: K;
6
+ };
7
+
8
+ export default EventParam;
@@ -0,0 +1,9 @@
1
+ import BBEvent from "./BBEvent";
2
+
3
+ interface EventReturn<K extends keyof BBEvent> {
4
+ type: K;
5
+ response: BBEvent[K]["response"];
6
+ responseId: string;
7
+ }
8
+
9
+ export default EventReturn;
@@ -0,0 +1,9 @@
1
+ export type FileEncoding = Extract<BufferEncoding, "utf8" | "hex" | "base64" | "base64url">
2
+
3
+ type FileContent = {
4
+ path: string
5
+ content: string
6
+ type: FileEncoding
7
+ }
8
+
9
+ export default FileContent
@@ -0,0 +1,5 @@
1
+ export default interface GitFileStatus {
2
+ filePath: string
3
+ staged: boolean
4
+ status: "new" | "modified" | "deleted"
5
+ }
@@ -0,0 +1,6 @@
1
+ type IconArg = {
2
+ pluginId?: string
3
+ extension: string
4
+ }
5
+
6
+ export default IconArg
@@ -0,0 +1,5 @@
1
+ import enGB from "@/locales/en-GB";
2
+
3
+ type Language = keyof typeof enGB;
4
+
5
+ export default Language;
@@ -0,0 +1,3 @@
1
+ type Locale = "en-GB" | "fr-FR"
2
+
3
+ export default Locale
@@ -0,0 +1,10 @@
1
+ import Language from "./Language";
2
+
3
+ export interface MenuContent {
4
+ header: Language;
5
+ shortcut?: string;
6
+ disabled?: boolean;
7
+ sub?: MenuContent[];
8
+ separator?: boolean;
9
+ onClick?: () => void;
10
+ }
@@ -0,0 +1,3 @@
1
+ type Nav = "file-explorer" | "checkpoints" | "plugins" | "settings" | "remote"
2
+
3
+ export default Nav
@@ -0,0 +1,14 @@
1
+ import { Tables } from "./database.types";
2
+
3
+ export type PluginItem = Tables<"plugins"> & {
4
+ production_version: {
5
+ id: number;
6
+ version: string;
7
+ release_note: string;
8
+ size: number;
9
+ updated_at: string;
10
+ } | null;
11
+ profile: {
12
+ username: string | null;
13
+ } | null;
14
+ };
@@ -0,0 +1,4 @@
1
+ export interface RenameType {
2
+ path: string;
3
+ newPath: string;
4
+ }
@@ -0,0 +1,9 @@
1
+ import BBRequest from "./BBRequest";
2
+
3
+ type RequestParam<K extends keyof BBRequest> = {
4
+ id: string;
5
+ type: K;
6
+ arg: BBRequest[K]["args"];
7
+ };
8
+
9
+ export default RequestParam;
@@ -0,0 +1,11 @@
1
+ import BBRequest from "./BBRequest";
2
+
3
+ interface RequestReturn<K extends keyof BBRequest> {
4
+ id: string;
5
+ type: K;
6
+ response: BBRequest[K]["response"] | null;
7
+ error: null | string;
8
+ responseId: string;
9
+ }
10
+
11
+ export default RequestReturn;
@@ -0,0 +1,6 @@
1
+ type Result<T = null> = {
2
+ data: T | null
3
+ error: string | null
4
+ }
5
+
6
+ export default Result
@@ -0,0 +1 @@
1
+ export type Route = "welcome" | "project" | "new-project" | "settings" | "updates"
@@ -0,0 +1,7 @@
1
+ import Locale from "./Locale"
2
+
3
+ export type Settings = {
4
+ theme: "light" | "dark" | "system"
5
+ language?: Locale
6
+ sidebarWidth: number
7
+ }