├── .github
└── workflows
│ └── build.yml
├── .gitignore
├── README.md
├── backend
├── Application.go
├── ApplicationMenu.go
├── ApplicationSettings.go
├── Config
│ ├── Connections.go
│ ├── Preferences.go
│ ├── Query.go
│ └── Window.go
├── ConfigManager.go
├── FileStore
│ ├── Store.go
│ └── Stores.go
├── Updater
│ ├── ApiResponse.go
│ ├── AppUpdater.go
│ └── UpdateInfo.go
└── Util
│ └── Logger.go
├── build
├── README.md
├── appicon.png
├── darwin
│ ├── Info.dev.plist
│ └── Info.plist
├── surreal_docs.json
└── windows
│ ├── info.json
│ ├── installer
│ ├── project.nsi
│ └── wails_tools.nsh
│ └── wails.exe.manifest
├── frontend
├── .idea
│ ├── .gitignore
│ ├── .name
│ ├── SurrealDbExplorer(Frontend).iml
│ ├── codeStyles
│ │ └── codeStyleConfig.xml
│ ├── git_toolbox_prj.xml
│ ├── jsLibraryMappings.xml
│ ├── markdown.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── tailwindcss.xml
│ └── vcs.xml
├── READ-THIS.md
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── package.json.md5
├── postcss.config.cjs
├── src
│ ├── .generated
│ │ ├── Colors.ts
│ │ ├── event.d.ts
│ │ └── modal.d.ts
│ ├── App.vue
│ ├── Components
│ │ ├── ConfirmButton.vue
│ │ ├── Layout
│ │ │ ├── AppSidebar.vue
│ │ │ └── SidebarItem.vue
│ │ ├── Link.vue
│ │ ├── ModalDrawer.vue
│ │ ├── ModalTypes.ts
│ │ ├── RegularModal.vue
│ │ ├── SimpleButton.vue
│ │ ├── Spinner.vue
│ │ └── StatusBar
│ │ │ ├── ConnectionStatus
│ │ │ ├── ConnectionStatusDot.vue
│ │ │ └── CurrentConnection.vue
│ │ │ ├── StatusBar.vue
│ │ │ └── UpdateStatus
│ │ │ ├── UpdateInfoModal.vue
│ │ │ ├── UpdateStatus.vue
│ │ │ └── UpdateStatusDot.vue
│ ├── Events.ts
│ ├── Modals.ts
│ ├── Pages
│ │ ├── Connections
│ │ │ ├── AddConnection.vue
│ │ │ ├── ConnectionCard.vue
│ │ │ └── ConnectionManager.vue
│ │ ├── Home.vue
│ │ ├── Query
│ │ │ ├── ActionsHeader.vue
│ │ │ ├── QueriesPanel
│ │ │ │ ├── QueriesPanel.vue
│ │ │ │ ├── QueryHistory.vue
│ │ │ │ ├── SaveQueryModal.vue
│ │ │ │ └── SavedQueries.vue
│ │ │ ├── Query.vue
│ │ │ └── ResultPanelHeader.vue
│ │ └── Tables
│ │ │ ├── CreateEntryModal.vue
│ │ │ ├── EditEntryModal.vue
│ │ │ ├── Fields
│ │ │ └── ThingField.vue
│ │ │ ├── Sections
│ │ │ ├── TableActions.vue
│ │ │ ├── TableError.vue
│ │ │ ├── TableFooter.vue
│ │ │ └── TableSelectingItemsBanner.vue
│ │ │ ├── TableFilters.vue
│ │ │ ├── TableSidebarItem.vue
│ │ │ ├── Tables.vue
│ │ │ ├── TablesSidebar.vue
│ │ │ ├── ViewEntryModal.vue
│ │ │ ├── ViewTable.vue
│ │ │ └── ViewTableEntry.vue
│ ├── Routes.ts
│ ├── Services
│ │ ├── AsyncProcessor.ts
│ │ ├── Confetti
│ │ │ ├── Confetti.ts
│ │ │ ├── Emotes.ts
│ │ │ └── options.json
│ │ ├── Database
│ │ │ ├── Database.ts
│ │ │ ├── QueryResult.ts
│ │ │ └── Thing.ts
│ │ ├── JsonViewer
│ │ │ ├── Components
│ │ │ │ ├── icon.svg
│ │ │ │ ├── json-box.vue
│ │ │ │ ├── json-viewer.vue
│ │ │ │ ├── types
│ │ │ │ │ ├── json-array.vue
│ │ │ │ │ ├── json-boolean.vue
│ │ │ │ │ ├── json-date.vue
│ │ │ │ │ ├── json-function.vue
│ │ │ │ │ ├── json-number.vue
│ │ │ │ │ ├── json-object.vue
│ │ │ │ │ ├── json-record-id.vue
│ │ │ │ │ ├── json-regexp.vue
│ │ │ │ │ ├── json-string.vue
│ │ │ │ │ └── json-undefined.vue
│ │ │ │ └── utils.ts
│ │ │ └── index.ts
│ │ ├── Logger.ts
│ │ ├── Monaco
│ │ │ ├── Editor.ts
│ │ │ └── LanguageConfiguration.ts
│ │ ├── Navigator.ts
│ │ ├── TableViewer
│ │ │ ├── TableFilters.ts
│ │ │ └── TableViewer.ts
│ │ ├── Theme.ts
│ │ ├── Updater
│ │ │ ├── UpdateInformation.ts
│ │ │ └── Updater.ts
│ │ └── Utils
│ │ │ ├── Timeout.ts
│ │ │ └── Vue.ts
│ ├── Stores
│ │ ├── AppStore.ts
│ │ ├── ConnectionStore.ts
│ │ ├── Generated
│ │ │ └── stores.d.ts
│ │ ├── QueriesPanelStore.ts
│ │ ├── QueryPageStore.ts
│ │ ├── SchemaStore.ts
│ │ └── TableStore.ts
│ ├── Styles
│ │ ├── app.css
│ │ └── split-panes.css
│ ├── Window.ts
│ ├── assets
│ │ ├── emotes.json
│ │ ├── emotes
│ │ │ ├── 54fcdfdc01abde735115deae.webp
│ │ │ ├── 55006e5e8b95c6fb61482673.webp
│ │ │ ├── 5590b223b344e2c42a9e28e3.webp
│ │ │ ├── 5597e66ed8152e272470f830.webp
│ │ │ ├── 55999813f0db38ef6c7c663e.webp
│ │ │ ├── 55c2f86ff95ede671a79e47f.webp
│ │ │ ├── 55cbeb8f8b9c49ef325bf738.webp
│ │ │ ├── 55f091b9de50f37c0a831147.webp
│ │ │ ├── 55f47f507f08be9f0a63ce37.webp
│ │ │ ├── 5603731ce5fc5eff1de93229.webp
│ │ │ ├── 56b65f05b947474c4a304dbe.webp
│ │ │ ├── 56be9fd6d9ec6bf74424760d.webp
│ │ │ ├── 56e9f494fff3cc5c35e5287e.webp
│ │ │ ├── 57597e25848bf08c5f860bd3.webp
│ │ │ ├── 57bfa325d5219dd112c18a99.webp
│ │ │ ├── 57ddccb558b6f3690c898464.webp
│ │ │ ├── 5803757f3d506fea7ee35267.webp
│ │ │ ├── 582e1ec8585b22e76faae1d7.webp
│ │ │ ├── 583089f4737a8e61abb0186b.webp
│ │ │ ├── 58493695987aab42df852e0f.webp
│ │ │ ├── 585231dd58af204561cd6036.webp
│ │ │ ├── 589771dc10c0975495c578d1.webp
│ │ │ ├── 58ae8407ff7b7276f8e594f2.webp
│ │ │ ├── 58c36ac73c3bbd3e016b6e60.webp
│ │ │ ├── 58c5c65357baeb710f657195.webp
│ │ │ ├── 58dd97c74d67ad30ec2ff270.webp
│ │ │ ├── 58f6e05e58f5dd226a16166e.webp
│ │ │ ├── 58facc4aaffae60eac088397.webp
│ │ │ ├── 59474044e949fe3b435e3135.webp
│ │ │ ├── 5980af4e3a1ac5330e89dc76.webp
│ │ │ ├── 5981e21aeaab4f3320e73abe.webp
│ │ │ ├── 5981e885eaab4f3320e73b18.webp
│ │ │ ├── 598215f47e71d43314a80ad2.webp
│ │ │ ├── 59a32119b71a9e11bd5f4251.webp
│ │ │ ├── 59b73909b27c823d5b1f6052.webp
│ │ │ ├── 59c4321d8798a53d5af9b9a5.webp
│ │ │ ├── 59ca6551b27c823d5b1fd872.webp
│ │ │ ├── 59f27b3f4ebd8047f54dee29.webp
│ │ │ ├── 5a16ddca8c22a247ead62ceb.webp
│ │ │ ├── 5a16ee718c22a247ead62d4a.webp
│ │ │ ├── 5a1702fb8c22a247ead62d95.webp
│ │ │ ├── 5a21576595c4af067c869ba9.webp
│ │ │ ├── 5a2691c6fc6e584787d98534.webp
│ │ │ ├── 5a4ad2574884645e5706e51a.webp
│ │ │ ├── 5a5e0e8d80f53146a54a516b.webp
│ │ │ ├── 5a6dee3b2620951f291ec6d0.webp
│ │ │ ├── 5a71931b32f45872c230578e.webp
│ │ │ ├── 5a93403a85dd670847d2d2eb.webp
│ │ │ ├── 5a9a360c35035f0fd53689a0.webp
│ │ │ ├── 5aa16eb65d4a424654d7e3e5.webp
│ │ │ ├── 5ac55f2306679e79a3e7841d.webp
│ │ │ ├── 5aca62163e290877a25481ad.webp
│ │ │ ├── 5b17135d1e360065b92a9d59.webp
│ │ │ ├── 5b1741ee83deca65adc4a3c6.webp
│ │ │ ├── 5b457bbd0485f43277cecac0.webp
│ │ │ ├── 5b4cf074a035723952666f5d.webp
│ │ │ ├── 5b567225e11b851126617bb6.webp
│ │ │ ├── 5b7bcd66e1202d285d94f8d3.webp
│ │ │ ├── 5b7ca091decbe272b64d3d7d.webp
│ │ │ ├── 5b8015ba3c482e0aaa9413be.webp
│ │ │ ├── 5b96e7f1bbf4663f648795b1.webp
│ │ │ ├── 5be4b0c9e9207c147ebcb517.webp
│ │ │ ├── 5c0235787991032d519f513c.webp
│ │ │ ├── 5c50edcb5e0cb51b417faf37.webp
│ │ │ ├── 5cd2bcbab75608209334a28d.webp
│ │ │ ├── 5cd6b08cf1dac14a18c4b61f.webp
│ │ │ ├── 5d20a55de1cfde376e532972.webp
│ │ │ ├── 5d24f20653fb473775490d6f.webp
│ │ │ ├── 5d3e250a6d68672adc3fbff7.webp
│ │ │ ├── 5d43475f6b7300449a43441c.webp
│ │ │ ├── 5d4b08dc64ae370ac807caa4.webp
│ │ │ ├── 5d5d9fe322f52e1d9b41ac91.webp
│ │ │ ├── 5d5e363122f52e1d9b41aff1.webp
│ │ │ ├── 5d5e91f322f52e1d9b41b141.webp
│ │ │ ├── 5d6096974932b21d9c332904.webp
│ │ │ ├── 5d61bae91f77c11da35ac50e.webp
│ │ │ ├── 5d6209854932b21d9c333195.webp
│ │ │ ├── 5d63e543375afb1da9a68a5a.webp
│ │ │ ├── 5d72ae0aa32edb714a9df060.webp
│ │ │ ├── 5d9198fbd2458468c1f4adb7.webp
│ │ │ ├── 5dc79d1b27360247dd6516ec.webp
│ │ │ ├── 5dcea287e579cd5efad7505c.webp
│ │ │ ├── 5de9cb6191129e77b47ca987.webp
│ │ │ ├── 5dfd5fd19e2cd00d968d3a4d.webp
│ │ │ ├── 5e052a618608fb0da4122b70.webp
│ │ │ ├── 5e0bf9c0031ec77bab473742.webp
│ │ │ ├── 5e0fa9d40550d42106b8a489.webp
│ │ │ ├── 5e1a76dd8af14b5f1b438c04.webp
│ │ │ ├── 5e3441d861ff6b51e65259fe.webp
│ │ │ ├── 5e3edf06e383e37d5d9d1dfd.webp
│ │ │ ├── 5e486af4d736527d5cd2fed6.webp
│ │ │ ├── 5e49b8f1e383e37d5d9d931c.webp
│ │ │ ├── 5e4e7a1f08b4447d56a92967.webp
│ │ │ ├── 5e574db1ddc7a054d7f0c301.webp
│ │ │ ├── 5e76910ed112fc372574ce15.webp
│ │ │ ├── 5e87b595acae25096140ca84.webp
│ │ │ ├── 5e978e20d023b362f638339d.webp
│ │ │ ├── 5e9c6c187e090362f8b0b9e8.webp
│ │ │ ├── 5e9cdca974046462f7673006.webp
│ │ │ ├── 5ea831f074046462f768097a.webp
│ │ │ ├── 5ebd239bf0fb3f168c4b58f0.webp
│ │ │ ├── 5ec57ff2f54be95e2a82765a.webp
│ │ │ ├── 5ec5e7d6f54be95e2a82806f.webp
│ │ │ ├── 5ed355b1fdee545e3065c80e.webp
│ │ │ ├── 5ee2430bf54be95e2a84b30a.webp
│ │ │ ├── 5f284a13cf6d2144653dee4a.webp
│ │ │ ├── 5f395e0bb2efd65d77e8124f.webp
│ │ │ ├── 5f3ef6123212445d6fb49f1a.webp
│ │ │ ├── 5f4f4fa23769246c0320de37.webp
│ │ │ ├── 5f64475bd7160803d895a112.webp
│ │ │ ├── 5f9487731b017902db14d05e.webp
│ │ │ ├── 5f9f27ca40eb9502e2238a65.webp
│ │ │ ├── 5fd59868f0c558349268d3dc.webp
│ │ │ ├── 5fe8cff8e85053351218e1dc.webp
│ │ │ ├── 5fe9711fab5f5d3505129a0b.webp
│ │ │ ├── 5fe9713dab5f5d3505129a0f.webp
│ │ │ ├── 5ff4a9ef85ffcf047a709b2e.webp
│ │ │ ├── 5ff5191a8a0e92047c1e382d.webp
│ │ │ ├── 5ff827395ef7d10c7912c106.webp
│ │ │ ├── 600c004c4e3ab965ef757f9e.webp
│ │ │ ├── 6024574d2eae5518bece2ddd.webp
│ │ │ ├── 602db23eee839b1e5ec6ddc2.webp
│ │ │ ├── 6033ef7d7c74605395f3256f.webp
│ │ │ ├── 603c98be306b602acc594e18.webp
│ │ │ ├── 60419081306b602acc5972c9.webp
│ │ │ ├── 60477a2f306b602acc599abf.webp
│ │ │ ├── 604793b8306b602acc599b88.webp
│ │ │ ├── 6049a20d306b602acc59aab5.webp
│ │ │ ├── 605b71f57493072efdeb3bbb.webp
│ │ │ ├── 605be9057493072efdeb4075.webp
│ │ │ ├── 60699b50a407570b72f2ad5a.webp
│ │ │ ├── 608089bf39b5010444d03aa0.webp
│ │ │ ├── 60808aab39b5010444d03aab.webp
│ │ │ ├── 6083d2cd39b5010444d0540b.webp
│ │ │ ├── 608b335539b5010444d08c55.webp
│ │ │ ├── 60959b8239b5010444d0d6a4.webp
│ │ │ ├── 60c9849df8b3f62601c3e7e3.webp
│ │ │ ├── 60d872d78ed8b373e421a4db.webp
│ │ │ ├── 60e0d6d48ed8b373e421d34b.webp
│ │ │ ├── 60e32f028ed8b373e421e021.webp
│ │ │ ├── 60f996092d1eba5400d0fb6a.webp
│ │ │ ├── 6119caa676ea4e2b9f7778e4.webp
│ │ │ ├── 611a913276ea4e2b9f778e65.webp
│ │ │ ├── 6121e47e76ea4e2b9f78a35f.webp
│ │ │ ├── 6126c2b0af28e956864a1d79.webp
│ │ │ ├── 6149d102b63cc97ee6d29c79.webp
│ │ │ ├── 61526c2ab63cc97ee6d3ab0d.webp
│ │ │ ├── 615f1909b63cc97ee6d53c6a.webp
│ │ │ ├── 616eef69054a252a431fbea6.webp
│ │ │ ├── 6180e47e1f8ff7628e6c0b4f.webp
│ │ │ ├── 6180e4f81f8ff7628e6c0b54.webp
│ │ │ ├── 6197b6a454f3344f88065985.webp
│ │ │ ├── 619928e554f3344f88068ac1.webp
│ │ │ ├── 61acf74c002cdeedc21e577b.webp
│ │ │ ├── 61cf4c6ec8cc7f36d52b27a9.webp
│ │ │ ├── 61d35ce706fd6a9f5bdf35ae.webp
│ │ │ ├── 61e10b0206fd6a9f5be09de4.webp
│ │ │ ├── 61e918ab06fd6a9f5be168f3.webp
│ │ │ ├── 61eb0f3606fd6a9f5be19987.webp
│ │ │ ├── 61f013ba06fd6a9f5be219f3.webp
│ │ │ ├── 61f867ec06fd6a9f5be2e832.webp
│ │ │ ├── 6202e72b06fd6a9f5be3dced.webp
│ │ │ ├── 6211428206fd6a9f5be50250.webp
│ │ │ ├── 6217d0aa06fd6a9f5be57d64.webp
│ │ │ ├── 62264bb606fd6a9f5be67488.webp
│ │ │ ├── 6227781606fd6a9f5be6866d.webp
│ │ │ ├── 622fb4e906fd6a9f5be712d5.webp
│ │ │ ├── 625100153c6f14b68844c3b9.webp
│ │ │ ├── 62535c593c6f14b68844ead3.webp
│ │ │ ├── 626a5f403c6f14b6884678be.webp
│ │ │ ├── 626d15653c6f14b68846a0bb.webp
│ │ │ ├── 6278804e3c6f14b688475794.webp
│ │ │ ├── 6298f96f3c6f14b688495afe.webp
│ │ │ ├── 629c72453c6f14b688498e3c.webp
│ │ │ ├── 62c323668fd4516906a8e61f.webp
│ │ │ ├── 62d5d182d991a3e26c12c881.webp
│ │ │ ├── 62d9c87ed991a3e26c12fcce.webp
│ │ │ ├── 62dfa0a1d991a3e26c13501f.webp
│ │ │ ├── 62e6d75dd991a3e26c13b69d.webp
│ │ │ ├── 62f77691ecbd41815423f7a0.webp
│ │ │ ├── 63010671ecbd418154246dff.webp
│ │ │ ├── 630d9f708d54637377067645.webp
│ │ │ ├── 633f0425e6cf26500b42b791.webp
│ │ │ ├── 634636a2e6cf26500b4321d7.webp
│ │ │ ├── 634f2fdb9bb828a9f0d3edea.webp
│ │ │ ├── 635011da9bb828a9f0d40aa4.webp
│ │ │ ├── 6350c99676c0f8d47ce017bf.webp
│ │ │ ├── 6355ff83ed98a03da0cd9a19.webp
│ │ │ ├── 6359372eed98a03da0cdd7df.webp
│ │ │ ├── 63714545b9076d0aaebbe75b.webp
│ │ │ ├── 637ac894b9076d0aaebc9b7b.webp
│ │ │ ├── 63982b2691ab7f35abdf6af4.webp
│ │ │ ├── 6398ce5991ab7f35abdf730d.webp
│ │ │ ├── 63accf7291ab7f35abe0b017.webp
│ │ │ ├── 63add7e491ab7f35abe0bcbd.webp
│ │ │ ├── 63b26784d3c04b5c4512415f.webp
│ │ │ ├── 63b743f392686dedce34e2d4.webp
│ │ │ ├── 63c1fea2fe434f3a3de15a73.webp
│ │ │ ├── 63c2992cf16b4a91323fe4be.webp
│ │ │ └── 63cb40252b18a0bbb2dae92e.webp
│ │ ├── fonts
│ │ │ ├── OFL.txt
│ │ │ └── nunito-v16-latin-regular.woff2
│ │ └── images
│ │ │ ├── Icon.png
│ │ │ ├── SDBExplorerLogo.png
│ │ │ └── logo-universal.png
│ ├── main.ts
│ ├── vite-env.d.ts
│ └── vue.d.ts
├── tailwind.config.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── wailsjs
│ ├── go
│ ├── Config
│ │ ├── Connections.d.ts
│ │ ├── Connections.js
│ │ ├── QueriesList.d.ts
│ │ ├── QueriesList.js
│ │ ├── Window.d.ts
│ │ └── Window.js
│ ├── backend
│ │ ├── App.d.ts
│ │ └── App.js
│ └── models.ts
│ └── runtime
│ ├── package.json
│ ├── runtime.d.ts
│ └── runtime.js
├── go.mod
├── go.sum
├── main.go
├── package.json
├── repository
├── 1.png
├── 2.png
├── 3.png
├── 4.png
├── icon.png
└── text-logo.png
├── scripts
├── compress.go
├── download_emotes.js
├── package.json
├── yarn-error.log
└── yarn.lock
└── wails.json
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Wails build
2 |
3 | # - name: Set output
4 | # id: vars
5 | # run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
6 | # - name: Check output
7 | # env:
8 | # RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
9 | # run: |
10 | # echo Release version: $RELEASE_VERSION
11 | # echo ${{ steps.vars.outputs.tag }}
12 | # touch ./../../.env
13 | # echo "APP_VERSION=$RELEASE_VERSION" >> ./frontend/.env
14 | # touch ./../../frontend/.env
15 | # echo "VITE_APP_VERSION=$RELEASE_VERSION" >> ./frontend/.env
16 |
17 | on:
18 | push:
19 | tags:
20 | - "v*"
21 | jobs:
22 | package:
23 | strategy:
24 | matrix:
25 | go-version: [ 1.19 ]
26 | os: [ macos-latest, windows-latest]
27 | runs-on: ${{ matrix.os }}
28 | steps:
29 | - name: Install Go
30 | uses: actions/setup-go@v2
31 | with:
32 | go-version: ${{ matrix.go-version }}
33 | - name: Checkout code
34 | uses: actions/checkout@v3
35 |
36 | - name: setup node
37 | uses: actions/setup-node@v2
38 | with:
39 | node-version: 14
40 |
41 | - name: Get Wails
42 | run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
43 |
44 | - name: Build Wails app
45 | run: |
46 | wails build
47 |
48 | - name: zip macos artifact
49 | if: matrix.os == 'macos-latest'
50 | run: |
51 | cd ./build/bin
52 | zip -r ./../../surreal_explorer_mac.zip ./SurrealDB\ Explorer.app
53 |
54 | - name: upload artifact macOS
55 | if: matrix.os == 'macos-latest'
56 | uses: actions/upload-artifact@v2
57 | with:
58 | name: surreal_explorer_mac
59 | path: surreal_explorer_mac.zip
60 |
61 | - name: zip windows artifact
62 | if: matrix.os == 'windows-latest'
63 | run: |
64 | Compress-Archive -Path .\build\bin\surrealdb_explorer* -DestinationPath .\surreal_explorer_windows.zip
65 |
66 | - name: upload artifact windows
67 | if: matrix.os == 'windows-latest'
68 | uses: actions/upload-artifact@v2
69 | with:
70 | name: surreal_explorer_windows
71 | path: surreal_explorer_windows.zip
72 |
73 | release:
74 | runs-on: ubuntu-latest
75 | needs: package
76 | steps:
77 | - name: Download macOS package
78 | uses: actions/download-artifact@v3
79 | with:
80 | name: surreal_explorer_mac
81 |
82 | - name: Download windows package
83 | uses: actions/download-artifact@v3
84 | with:
85 | name: surreal_explorer_windows
86 |
87 | - name: Display structure of downloaded files
88 | run: ls -R
89 |
90 | - name: Create Release
91 | uses: "marvinpinto/action-automatic-releases@latest"
92 | with:
93 | repo_token: "${{ secrets.GITHUB_TOKEN }}"
94 | prerelease: true
95 | files: |
96 | ./surreal_explorer_mac.zip
97 | ./surreal_explorer_windows.zip
98 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | build/bin
2 | node_modules
3 | frontend/dist
4 | frontend/src/Stores/Generated/StoreLoader.ts
5 | /history.txt
6 | /.idea/
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ## Description
7 |
8 | SurrealDB Explorer is a simple database viewer/editor for SurrealDB. It's a nice temp solution for a desktop application until the official version is released.
9 |
10 | ## Features:
11 |
12 | - Multiple connection configuration
13 | - Simple query formatting/completion
14 | - Save queries and run them again in the future
15 | - View your tables and their data, create/delete records (editing coming soon)
16 | - Follow record links from table viewer, (ie; you have "user:1" in a field, click it and it will open the user record)
17 |
18 |
19 | ## Note:
20 |
21 | I hacked this together pretty quickly over a couple of days, so there may be some minor problems I haven't found yet.
22 |
23 | If you find any bugs, please report them on the github page or kindly submit a pr <3
24 |
25 | ## Download:
26 |
27 | You can download the latest version from the [releases page](https://github.com/iDevelopThings/SurrealDB-Explorer/tags)
28 |
29 | **The app is not signed, so you will get warnings on windows, and mac, you will need to run a command to allow it to run.**
30 |
31 | ### MacOS:
32 | - Download the app and extract it, then move it to applications
33 | - Open your terminal and run: `sudo xattr -rd com.apple.quarantine /Applications/SurrealDB\ Explorer.app`
34 |
35 | Alternatively, you can run the app, then go to `System Preferences > Security & Privacy > General` and click "Open Anyway"
36 |
37 | ## Screenshots:
38 |
39 | 
40 |
41 | 
42 |
43 | 
44 |
45 | 
46 |
--------------------------------------------------------------------------------
/backend/ApplicationMenu.go:
--------------------------------------------------------------------------------
1 | package backend
2 |
3 | import (
4 | "context"
5 | "github.com/wailsapp/wails/v2/pkg/menu"
6 | "github.com/wailsapp/wails/v2/pkg/menu/keys"
7 | "github.com/wailsapp/wails/v2/pkg/runtime"
8 | goRuntime "runtime"
9 | )
10 |
11 | type ApplicationMenuBuilder struct {
12 | Ctx context.Context
13 |
14 | Menu *menu.Menu
15 | AppSettings *ApplicationSettings
16 | }
17 |
18 | func NewApplicationMenuBuilder(
19 | appSettings *ApplicationSettings,
20 | ) *ApplicationMenuBuilder {
21 | return &ApplicationMenuBuilder{
22 | AppSettings: appSettings,
23 | Menu: menu.NewMenu(),
24 | }
25 | }
26 |
27 | func (builder *ApplicationMenuBuilder) Build(app *App) *menu.Menu {
28 | switch goRuntime.GOOS {
29 | case "darwin":
30 | builder.Menu.Append(menu.AppMenu())
31 | builder.Menu.Append(menu.EditMenu())
32 | break
33 | }
34 |
35 | //builder.Menu.AddSubmenu(builder.AppSettings.Title)
36 |
37 | viewMenu := builder.Menu.AddSubmenu("View")
38 |
39 | viewMenu.AddText("Zoom In", keys.Combo("+", keys.CmdOrCtrlKey, keys.ShiftKey), func(cb *menu.CallbackData) {
40 | runtime.WindowExecJS(builder.Ctx, "window.zoomIn()")
41 | })
42 |
43 | viewMenu.AddText("Zoom Out", keys.CmdOrCtrl("-"), func(cb *menu.CallbackData) {
44 | runtime.WindowExecJS(builder.Ctx, "window.zoomOut()")
45 | })
46 |
47 | viewMenu.AddText("Reset Zoom", keys.Combo("-", keys.CmdOrCtrlKey, keys.OptionOrAltKey), func(cb *menu.CallbackData) {
48 | runtime.WindowExecJS(builder.Ctx, "window.resetZoom()")
49 | })
50 |
51 | viewMenu.AddSeparator()
52 |
53 | viewMenu.AddText("Refresh", keys.CmdOrCtrl("r"), func(cb *menu.CallbackData) {
54 | runtime.WindowExecJS(builder.Ctx, "window.location.reload()")
55 | })
56 |
57 | helpMenu := builder.Menu.AddSubmenu("Help")
58 |
59 | helpMenu.AddText("Open App Data Directory", &keys.Accelerator{}, func(cb *menu.CallbackData) {
60 | app.OpenAppDataPath()
61 | })
62 | helpMenu.AddText("Open Log File", &keys.Accelerator{}, func(cb *menu.CallbackData) {
63 | app.OpenLogFile()
64 | })
65 |
66 | return builder.Menu
67 | }
68 |
--------------------------------------------------------------------------------
/backend/ApplicationSettings.go:
--------------------------------------------------------------------------------
1 | package backend
2 |
3 | import (
4 | _ "embed"
5 | "github.com/Masterminds/semver"
6 | "wails_vue/backend/Config"
7 | "wails_vue/backend/FileStore"
8 | )
9 |
10 | type ApplicationSettings struct {
11 | // The title cased name used in the window title and such
12 | // "SurrealDB Explorer"
13 | Title string `json:"title"`
14 | // The lower cased name used for directories and such
15 | // "surrealdb_explorer"
16 | Name string `json:"name"`
17 |
18 | Icon []byte `json:"-"`
19 |
20 | Version *semver.Version `json:"version"`
21 | }
22 |
23 | func NewApplicationSettings() *ApplicationSettings {
24 | settings := &ApplicationSettings{
25 | Title: "SurrealDB Explorer",
26 | Name: "surrealdb_explorer",
27 | Version: semver.MustParse("0.0.13"),
28 | }
29 |
30 | FileStore.NewStores(settings.Name)
31 | FileStore.DefineStore[Config.Window]("window_settings")
32 | FileStore.DefineStore[Config.Connections]("connections")
33 | FileStore.DefineStore[Config.QueriesList]("queries")
34 | FileStore.DefineStore[Config.Preferences]("preferences")
35 |
36 | return settings
37 | }
38 |
39 | func (a *ApplicationSettings) GetTitle() string {
40 | return a.Title
41 | }
42 |
43 | func (a *ApplicationSettings) GetName() string {
44 | return a.Name
45 | }
46 |
--------------------------------------------------------------------------------
/backend/Config/Connections.go:
--------------------------------------------------------------------------------
1 | package Config
2 |
3 | import (
4 | "context"
5 | container "github.com/Envuso/go-ioc-container"
6 | "github.com/google/uuid"
7 | "github.com/wailsapp/wails/v2/pkg/runtime"
8 | "wails_vue/backend/FileStore"
9 | )
10 |
11 | type Connection struct {
12 | Id string `json:"id,omitempty"`
13 | Name string `json:"name,omitempty"`
14 |
15 | Host string `json:"host,omitempty"`
16 |
17 | User string `json:"user,omitempty"`
18 | Pass string `json:"pass,omitempty"`
19 |
20 | Database string `json:"database,omitempty"`
21 | Namespace string `json:"namespace,omitempty"`
22 | }
23 |
24 | type Connections struct {
25 | Ctx context.Context `json:"-"`
26 |
27 | Connections []*Connection `json:"connections"`
28 | Current *string `json:"current"`
29 | }
30 |
31 | func (connections *Connections) Setup() {
32 | connections.Connections = []*Connection{}
33 | connections.Current = nil
34 | }
35 |
36 | func (connections *Connections) Update(data *Connections) *Connections {
37 | connections.Connections = data.Connections
38 | connections.Current = data.Current
39 |
40 | err := FileStore.Save[Connections](connections)
41 | if err != nil {
42 | runtime.LogError(connections.Ctx, err.Error())
43 | return nil
44 | }
45 |
46 | return connections
47 | }
48 |
49 | func (connections *Connections) Add(connection Connection) *Connection {
50 | connection.Id = uuid.New().String()
51 | connections.Connections = append(connections.Connections, &connection)
52 | connections.Update(connections)
53 |
54 | return &connection
55 | }
56 |
57 | func (connections *Connections) SetCurrent(connectionId *string) {
58 | connections.Current = connectionId
59 | connections.Update(connections)
60 | }
61 |
62 | func (connections *Connections) Remove(connectionId *string) *Connections {
63 | if connectionId == nil {
64 | return nil
65 | }
66 |
67 | if connections.Current != nil && *connections.Current == *connectionId {
68 | connections.Current = nil
69 | }
70 |
71 | for i, connection := range connections.Connections {
72 | if connection.Id == *connectionId {
73 | connections.Connections = append(connections.Connections[:i], connections.Connections[i+1:]...)
74 | break
75 | }
76 | }
77 |
78 | var queries *QueriesList
79 | container.Container.MakeTo(&queries)
80 | queries.RemoveQueries(*connectionId)
81 |
82 | return connections.Update(connections)
83 | }
84 |
--------------------------------------------------------------------------------
/backend/Config/Preferences.go:
--------------------------------------------------------------------------------
1 | package Config
2 |
3 | import (
4 | "context"
5 | "github.com/wailsapp/wails/v2/pkg/runtime"
6 | "wails_vue/backend/FileStore"
7 | )
8 |
9 | type PaneSize struct {
10 | Min float64 `json:"min"`
11 | Max float64 `json:"max"`
12 | Size float64 `json:"size"`
13 | }
14 |
15 | type Preferences struct {
16 | Ctx context.Context `json:"-"`
17 |
18 | EditorFontSize int `json:"editorFontSize"`
19 | QueryResultFontSize int `json:"queryResultFontSize"`
20 |
21 | PaneSizes []PaneSize `json:"paneSizes"`
22 | PanelLayout string `json:"panelLayout"`
23 | }
24 |
25 | func (p *Preferences) Setup() {
26 | p.PaneSizes = []PaneSize{
27 | {Min: 10, Max: 100, Size: 90},
28 | {Min: 10, Max: 100, Size: 10},
29 | }
30 | p.EditorFontSize = 16
31 | p.QueryResultFontSize = 14
32 | p.PanelLayout = "horizontal"
33 | }
34 |
35 | func (p *Preferences) Update(data *Preferences) {
36 | p.EditorFontSize = data.EditorFontSize
37 | p.QueryResultFontSize = data.QueryResultFontSize
38 | p.PaneSizes = data.PaneSizes
39 | p.PanelLayout = data.PanelLayout
40 |
41 | err := FileStore.Save[Preferences](p)
42 | if err != nil {
43 | runtime.LogError(p.Ctx, err.Error())
44 | }
45 | }
46 | func (p *Preferences) UpdatePaneSizes(panes []PaneSize) {
47 | p.PaneSizes = panes
48 | p.Update(p)
49 | }
50 |
--------------------------------------------------------------------------------
/backend/Config/Window.go:
--------------------------------------------------------------------------------
1 | package Config
2 |
3 | import (
4 | "context"
5 | "github.com/wailsapp/wails/v2/pkg/runtime"
6 | )
7 |
8 | type Window struct {
9 | Ctx context.Context `json:"-"`
10 |
11 | Width int `json:"width"`
12 | Height int `json:"height"`
13 |
14 | // The x position of the window
15 | X int `json:"x"`
16 | // The y position of the window
17 | Y int `json:"y"`
18 | }
19 |
20 | func (window *Window) Setup() {
21 | window.Width = 1024
22 | window.Height = 768
23 | window.X = -1
24 | window.Y = -1
25 | }
26 |
27 | func (window *Window) CanSetDimensions() bool {
28 | return window.Width > 0 && window.Height > 0
29 | }
30 |
31 | func (window *Window) CanSetPosition() bool {
32 | return window.X > -1 && window.Y > -1
33 | }
34 |
35 | func (window *Window) Set() {
36 | width, size := runtime.WindowGetSize(window.Ctx)
37 | x, y := runtime.WindowGetPosition(window.Ctx)
38 |
39 | window.X = x
40 | window.Y = y
41 | window.Width = width
42 | window.Height = size
43 |
44 | runtime.LogInfof(window.Ctx, "Window position: %d, %d", window.X, window.Y)
45 | runtime.LogInfof(window.Ctx, "Window size: %d, %d", window.Width, window.Height)
46 | }
47 |
--------------------------------------------------------------------------------
/backend/ConfigManager.go:
--------------------------------------------------------------------------------
1 | package backend
2 |
3 | import (
4 | "wails_vue/backend/Config"
5 | )
6 |
7 | // AllConfig - This struct is only required for wails to export it to ts...
8 | type AllConfig struct {
9 | App *ApplicationSettings `json:"app,omitempty"`
10 | Window *Config.Window `json:"window,omitempty"`
11 | Connections *Config.Connections `json:"connections,omitempty"`
12 | Queries *Config.QueriesList `json:"queries,omitempty"`
13 | Preferences *Config.Preferences `json:"preferences,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/backend/Updater/UpdateInfo.go:
--------------------------------------------------------------------------------
1 | package Updater
2 |
3 | import (
4 | "github.com/Masterminds/semver"
5 | "github.com/octoper/go-ray"
6 | "time"
7 | )
8 |
9 | type UpdateInfo struct {
10 | Version *semver.Version `json:"version"`
11 | Url string `json:"url"`
12 | Body string `json:"body"`
13 | PublishedAt time.Time `json:"publishedAt"`
14 | }
15 |
16 | func pls() {
17 | ray.Ray("")
18 | }
19 |
--------------------------------------------------------------------------------
/backend/Util/Logger.go:
--------------------------------------------------------------------------------
1 | package Util
2 |
3 | import (
4 | "github.com/wailsapp/wails/v2/pkg/logger"
5 | "log"
6 | "os"
7 | )
8 |
9 | // FileLogger is a utility to log messages to a number of destinations
10 | type FileLogger struct {
11 | filename string
12 | backing logger.Logger
13 | }
14 |
15 | // NewFileLogger creates a new Logger.
16 | func NewFileLogger(filename string) *FileLogger {
17 | return &FileLogger{
18 | filename: filename,
19 | backing: logger.NewDefaultLogger(),
20 | }
21 | }
22 |
23 | func (l *FileLogger) GetFilePath() string {
24 | return l.filename
25 | }
26 |
27 | // Print works like Sprintf.
28 | func (l *FileLogger) Print(message string) {
29 | f, err := os.OpenFile(l.filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
30 | if err != nil {
31 | log.Fatal(err)
32 | }
33 | if _, err := f.WriteString(message); err != nil {
34 | f.Close()
35 | log.Fatal(err)
36 | }
37 | f.Close()
38 |
39 | l.backing.Print(message)
40 | }
41 |
42 | func (l *FileLogger) Println(message string) {
43 | l.Print(message + "\n")
44 | }
45 |
46 | // Trace level logging. Works like Sprintf.
47 | func (l *FileLogger) Trace(message string) {
48 | l.Println("TRACE | " + message)
49 | }
50 |
51 | // Debug level logging. Works like Sprintf.
52 | func (l *FileLogger) Debug(message string) {
53 | l.Println("DEBUG | " + message)
54 | }
55 |
56 | // Info level logging. Works like Sprintf.
57 | func (l *FileLogger) Info(message string) {
58 | l.Println("INFO | " + message)
59 | }
60 |
61 | // Warning level logging. Works like Sprintf.
62 | func (l *FileLogger) Warning(message string) {
63 | l.Println("WARN | " + message)
64 | }
65 |
66 | // Error level logging. Works like Sprintf.
67 | func (l *FileLogger) Error(message string) {
68 | l.Println("ERROR | " + message)
69 | }
70 |
71 | // Fatal level logging. Works like Sprintf.
72 | func (l *FileLogger) Fatal(message string) {
73 | l.Println("FATAL | " + message)
74 | os.Exit(1)
75 | }
76 |
--------------------------------------------------------------------------------
/build/README.md:
--------------------------------------------------------------------------------
1 | # Build Directory
2 |
3 | The build directory is used to house all the build files and assets for your application.
4 |
5 | The structure is:
6 |
7 | * bin - Output directory
8 | * darwin - macOS specific files
9 | * windows - Windows specific files
10 |
11 | ## Mac
12 |
13 | The `darwin` directory holds files specific to Mac builds.
14 | These may be customised and used as part of the build. To return these files to the default state, simply delete them
15 | and
16 | build with `wails build`.
17 |
18 | The directory contains the following files:
19 |
20 | - `Info.plist` - the main plist file used for Mac builds. It is used when building using `wails build`.
21 | - `Info.dev.plist` - same as the main plist file but used when building using `wails dev`.
22 |
23 | ## Windows
24 |
25 | The `windows` directory contains the manifest and rc files used when building with `wails build`.
26 | These may be customised for your application. To return these files to the default state, simply delete them and
27 | build with `wails build`.
28 |
29 | - `icon.ico` - The icon used for the application. This is used when building using `wails build`. If you wish to
30 | use a different icon, simply replace this file with your own. If it is missing, a new `icon.ico` file
31 | will be created using the `appicon.png` file in the build directory.
32 | - `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`.
33 | - `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer,
34 | as well as the application itself (right click the exe -> properties -> details)
35 | - `wails.exe.manifest` - The main application manifest file.
--------------------------------------------------------------------------------
/build/appicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iDevelopThings/SurrealDB-Explorer/848f6b8b51fcca3d85326ea47a6738a330bb878d/build/appicon.png
--------------------------------------------------------------------------------
/build/darwin/Info.dev.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundlePackageType
5 | APPL
6 | CFBundleName
7 | {{.Info.ProductName}}
8 | CFBundleExecutable
9 | {{.Name}}
10 | CFBundleIdentifier
11 | com.wails.{{.Name}}
12 | CFBundleVersion
13 | {{.Info.ProductVersion}}
14 | CFBundleGetInfoString
15 | {{.Info.Comments}}
16 | CFBundleShortVersionString
17 | {{.Info.ProductVersion}}
18 | CFBundleIconFile
19 | iconfile
20 | LSMinimumSystemVersion
21 | 10.13.0
22 | NSHighResolutionCapable
23 | true
24 | NSHumanReadableCopyright
25 | {{.Info.Copyright}}
26 | NSAppTransportSecurity
27 |
28 | NSAllowsLocalNetworking
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/build/darwin/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundlePackageType
5 | APPL
6 | CFBundleName
7 | {{.Info.ProductName}}
8 | CFBundleExecutable
9 | {{.Name}}
10 | CFBundleIdentifier
11 | com.wails.{{.Name}}
12 | CFBundleVersion
13 | {{.Info.ProductVersion}}
14 | CFBundleGetInfoString
15 | {{.Info.Comments}}
16 | CFBundleShortVersionString
17 | {{.Info.ProductVersion}}
18 | CFBundleIconFile
19 | iconfile
20 | LSMinimumSystemVersion
21 | 10.13.0
22 | NSHighResolutionCapable
23 | true
24 | NSHumanReadableCopyright
25 | {{.Info.Copyright}}
26 |
27 |
--------------------------------------------------------------------------------
/build/windows/info.json:
--------------------------------------------------------------------------------
1 | {
2 | "fixed": {
3 | "file_version": "{{.Info.ProductVersion}}"
4 | },
5 | "info": {
6 | "0000": {
7 | "ProductVersion": "{{.Info.ProductVersion}}",
8 | "CompanyName": "{{.Info.CompanyName}}",
9 | "FileDescription": "{{.Info.ProductName}}",
10 | "LegalCopyright": "{{.Info.Copyright}}",
11 | "ProductName": "{{.Info.ProductName}}",
12 | "Comments": "{{.Info.Comments}}"
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/build/windows/wails.exe.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | true/pm
12 | permonitorv2,permonitor
13 |
14 |
15 |
--------------------------------------------------------------------------------
/frontend/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 | # Datasource local storage ignored files
7 | /dataSources/
8 | /dataSources.local.xml
9 |
--------------------------------------------------------------------------------
/frontend/.idea/.name:
--------------------------------------------------------------------------------
1 | SurrealDbExplorer(Frontend)
--------------------------------------------------------------------------------
/frontend/.idea/SurrealDbExplorer(Frontend).iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/frontend/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/frontend/.idea/git_toolbox_prj.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/frontend/.idea/jsLibraryMappings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/frontend/.idea/markdown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/frontend/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/frontend/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/frontend/.idea/tailwindcss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/frontend/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/frontend/READ-THIS.md:
--------------------------------------------------------------------------------
1 | This template uses a work around as the default template does not compile due to this issue:
2 | https://github.com/vuejs/core/issues/1228
3 |
4 | In `tsconfig.json`, `isolatedModules` is set to `false` rather than `true` to work around the issue.
--------------------------------------------------------------------------------
/frontend/README.md:
--------------------------------------------------------------------------------
1 | # Vue 3 + TypeScript + Vite
2 |
3 | This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue
4 | 3 `
14 |