├── .prettierignore ├── .gitignore ├── .github └── images │ └── screenshot.png ├── src ├── images │ └── extension@2x.acorn ├── parsers │ ├── index.ts │ ├── composer.ts │ ├── taskfile.ts │ ├── package.ts │ └── maidfile.ts └── index.ts ├── maidfile.toml ├── .prettierrc.toml ├── taskfile.yml ├── esbuild.config.json ├── tsconfig.json ├── package.json ├── LICENSE.txt ├── CHANGELOG.md ├── README.md └── yarn.lock /.prettierignore: -------------------------------------------------------------------------------- 1 | build 2 | node_modules 3 | .github 4 | .git -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .nova 4 | build/taskfinder.novaextension/Scripts 5 | -------------------------------------------------------------------------------- /.github/images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/little-green-man/nova-taskfinder/HEAD/.github/images/screenshot.png -------------------------------------------------------------------------------- /src/images/extension@2x.acorn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/little-green-man/nova-taskfinder/HEAD/src/images/extension@2x.acorn -------------------------------------------------------------------------------- /maidfile.toml: -------------------------------------------------------------------------------- 1 | [tasks.hello] 2 | info = "It waits file seconds and then says hello" 3 | script = ["sleep 5", "echo 'Hello world from Maidfile!'"] -------------------------------------------------------------------------------- /.prettierrc.toml: -------------------------------------------------------------------------------- 1 | trailingComma = "es5" 2 | printWidth = 150 3 | tabWidth = 2 4 | useTabs = true 5 | semi = true 6 | singleQuote = true 7 | bracketSameLine = true -------------------------------------------------------------------------------- /taskfile.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | tasks: 4 | hello: 5 | cmds: 6 | - sleep 5 7 | - echo 'Hello World from Taskfile!' 8 | silent: true 9 | -------------------------------------------------------------------------------- /esbuild.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "entry": "src/index.ts", 3 | "format": "cjs", 4 | "outfile": "build/taskfinder.novaextension/Scripts/main.dist.js", 5 | "minify": true, 6 | "bundle": true 7 | } 8 | -------------------------------------------------------------------------------- /src/parsers/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ComposerParser } from './composer'; 2 | export { default as PackageJsonParser } from './package'; 3 | export { default as TaskfileParser } from './taskfile'; 4 | export { default as MaidfileParser } from './maidfile'; 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "display": "Nova", 3 | "compilerOptions": { 4 | "target": "es6", 5 | "module": "ES2020", 6 | "moduleResolution": "node", 7 | "newLine": "lf", 8 | "strict": true, 9 | "noEmitOnError": true, 10 | "skipLibCheck": true, 11 | "noImplicitReturns": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "forceConsistentCasingInFileNames": true 14 | }, 15 | "include": ["src"] 16 | } 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "task_finder", 3 | "version": "5.0.0", 4 | "description": "Automatically offers Composer, Node, Maidfile & Taskfile actions as Nova Tasks.", 5 | "main": "index.js", 6 | "license": "MIT", 7 | "scripts": { 8 | "clean": "rm -rf build/taskfinder.novaextension/Scripts", 9 | "watch": "yarn clean && esbuild $(esbuild-config) --watch", 10 | "build": "yarn clean && esbuild $(esbuild-config) && cp ./CHANGELOG.md ./build/taskfinder.novaextension/CHANGELOG.md", 11 | "lint": "npx tsc --noEmit --pretty", 12 | "activate": "nova extension activate build/taskfinder.novaextension" 13 | }, 14 | "devDependencies": { 15 | "@types/nova-editor-node": "^4.1.10", 16 | "esbuild": "^0.17.18", 17 | "esbuild-config": "^1.0.1", 18 | "typescript": "^5.0.4" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Othneil Drew 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/parsers/composer.ts: -------------------------------------------------------------------------------- 1 | class Composer { 2 | packageProcessName: string; 3 | packageJsonPath: string; 4 | tasks: any[]; 5 | 6 | constructor() { 7 | this.tasks = []; 8 | this.packageProcessName = 'composer'; 9 | this.packageJsonPath = `${nova.workspace.path}/composer.json`; 10 | } 11 | 12 | findTasks() { 13 | const composerFile = nova.fs.stat(this.packageJsonPath); 14 | if (composerFile && composerFile.isFile()) { 15 | try { 16 | const contents = nova.fs.open(this.packageJsonPath).read() as string; 17 | const json = JSON.parse(contents); 18 | if (json.hasOwnProperty('scripts')) { 19 | for (var key in json.scripts) { 20 | if (json.scripts.hasOwnProperty(key)) { 21 | const task = new Task(key); 22 | task.setAction( 23 | Task.Run, 24 | new TaskProcessAction(this.packageProcessName, { 25 | cwd: nova.workspace.path as string, 26 | args: ['run', key], 27 | shell: true, 28 | }) 29 | ); 30 | this.tasks.push(task); 31 | } 32 | } 33 | } 34 | } catch (e) { 35 | console.log(e); 36 | } 37 | } 38 | } 39 | 40 | provideTasks() { 41 | this.tasks = []; 42 | this.findTasks(); 43 | console.info(`${this.packageJsonPath} has ${this.tasks.length} task(s)`); 44 | return this.tasks; 45 | } 46 | } 47 | 48 | export default Composer; 49 | -------------------------------------------------------------------------------- /src/parsers/taskfile.ts: -------------------------------------------------------------------------------- 1 | class Taskfile { 2 | packageProcessName: string = 'task'; 3 | options: { 4 | args: string[]; 5 | cwd: string; 6 | shell: true | string; 7 | }; 8 | 9 | constructor() { 10 | this.options = { 11 | cwd: nova.workspace.path as string, 12 | args: ['--list-all'], 13 | shell: true, 14 | }; 15 | } 16 | 17 | async provideTasks() { 18 | let tasks: Array; 19 | tasks = []; 20 | 21 | try { 22 | const taskfile = new Process('task', this.options); 23 | taskfile.onStdout((line) => { 24 | const regex = /\* ([A-Za-z0-9-_]+)\:/; 25 | const match = line.match(regex); 26 | if (match) { 27 | const key = match[1]; 28 | const task = new Task(key); 29 | task.setAction( 30 | Task.Run, 31 | new TaskProcessAction(this.packageProcessName, { 32 | cwd: nova.workspace.path ?? undefined, 33 | args: [key], 34 | shell: true, 35 | }) 36 | ); 37 | tasks.push(task); 38 | } 39 | }); 40 | 41 | taskfile.onStderr((line) => console.warn(`finder (taskfile) extraction error: ${line}`)); 42 | 43 | const onExit = new Promise((resolve, reject) => { 44 | taskfile.onDidExit((status) => { 45 | console.log(`exited: finder (taskfile) with code ${status}`); 46 | const action = status == 0 ? resolve : reject; 47 | action(status); 48 | }); 49 | }); 50 | 51 | taskfile.start(); 52 | await onExit; 53 | console.info(`taskfile has ${tasks.length} task(s)`); 54 | 55 | return tasks; 56 | } catch (e) { 57 | console.log(e); 58 | return []; 59 | } 60 | } 61 | } 62 | 63 | export default Taskfile; 64 | -------------------------------------------------------------------------------- /src/parsers/package.ts: -------------------------------------------------------------------------------- 1 | class NodeTaskAssistant { 2 | tasks: any[]; 3 | packageManager: string; 4 | packageJsonPath: string; 5 | 6 | constructor() { 7 | this.tasks = []; 8 | this.packageManager = nova.workspace.config.get('taskfinder.package-manager', 'string'); // default in extension.json is "npm", so its impossible that null is returned 9 | this.packageJsonPath = `${nova.workspace.path}/package.json`; 10 | } 11 | 12 | findTasks() { 13 | const nodeFile = nova.fs.stat(this.packageJsonPath); 14 | if (nodeFile && nodeFile.isFile()) { 15 | try { 16 | const contents = nova.fs.open(this.packageJsonPath).read() as string; 17 | const json = JSON.parse(contents); 18 | if (json.hasOwnProperty('scripts')) { 19 | for (var key in json.scripts) { 20 | if (json.scripts.hasOwnProperty(key)) { 21 | let args = []; 22 | const task = new Task(key); 23 | switch (this.packageManager) { 24 | case 'yarn': 25 | args = [key]; 26 | break; 27 | default: 28 | args = ['run', key]; 29 | } 30 | task.setAction( 31 | Task.Run, 32 | new TaskProcessAction(this.packageManager, { 33 | shell: true, 34 | args: args, 35 | }) 36 | ); 37 | this.tasks.push(task); 38 | args = []; 39 | } 40 | } 41 | } 42 | } catch (e) { 43 | console.log(e); 44 | } 45 | } 46 | } 47 | 48 | provideTasks() { 49 | this.tasks = []; 50 | this.statusUpdate(); 51 | this.findTasks(); 52 | console.info(`${this.packageJsonPath} has ${this.tasks.length} task(s)`); 53 | return this.tasks; 54 | } 55 | 56 | statusUpdate = () => console.info(`Node settings: Using ${this.packageManager}`); 57 | } 58 | 59 | export default NodeTaskAssistant; 60 | -------------------------------------------------------------------------------- /src/parsers/maidfile.ts: -------------------------------------------------------------------------------- 1 | class Maidfile { 2 | packageProcessName: string = 'maid'; 3 | options: { 4 | args: string[]; 5 | cwd: string; 6 | shell: true | string; 7 | }; 8 | 9 | constructor() { 10 | this.options = { 11 | cwd: nova.workspace.path as string, 12 | args: ['butler', 'json'], 13 | shell: true, 14 | }; 15 | } 16 | 17 | async provideTasks() { 18 | let tasks: Array; 19 | tasks = []; 20 | 21 | try { 22 | const maid = new Process('maid', this.options); 23 | maid.onStdout((line) => { 24 | const json = JSON.parse(line).tasks; 25 | const keys = Object.keys(JSON.parse(line).tasks); 26 | keys.forEach((key) => { 27 | if (json[key].hide != true && !key.startsWith('_')) { 28 | let task = new Task(key); 29 | if (key.includes('build') || key.includes('compile')) { 30 | task.setAction( 31 | Task.Build, 32 | new TaskProcessAction(this.packageProcessName, { 33 | cwd: nova.workspace.path ?? undefined, 34 | args: [key], 35 | shell: true, 36 | }) 37 | ); 38 | tasks.push(task); 39 | } else { 40 | task.setAction( 41 | Task.Run, 42 | new TaskProcessAction(this.packageProcessName, { 43 | cwd: nova.workspace.path ?? undefined, 44 | args: [key], 45 | shell: true, 46 | }) 47 | ); 48 | tasks.push(task); 49 | } 50 | } 51 | }); 52 | }); 53 | 54 | maid.onStderr((line) => console.warn(`finder (maidfile) extraction error: ${line}`)); 55 | const onExit = new Promise((resolve, reject) => { 56 | maid.onDidExit((status) => { 57 | console.log(`exited: finder (Maidfile) with code ${status}`); 58 | const action = status == 0 ? resolve : reject; 59 | action(status); 60 | }); 61 | }); 62 | 63 | maid.start(); 64 | await onExit; 65 | console.info(`maidfile has ${tasks.length} task(s)`); 66 | 67 | return tasks; 68 | } catch (e) { 69 | console.log(e); 70 | } 71 | } 72 | } 73 | 74 | export default Maidfile; 75 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Version 5.0 2 | 3 | - Rebuilt Automatic Tasks in TypeScript - [Sajjaad Farzad](https://github.com/theMackabu) 4 | 5 | ## Version 4.0 6 | 7 | - Added [Maidfile](https://github.com/exact-labs/maid) support, thanks to [Sajjaad Farzad](https://github.com/theMackabu) 8 | 9 | ## Version 3.1 10 | 11 | - Added Taskfile (taskfile.dev) support 12 | - Enabled shell for npm/yarn, so should use your PATH automatically 13 | - Refreshed extension icon 14 | 15 | ## Version 3.0 16 | 17 | - Removed the side bar, and associated overheads 18 | - Refined the UI 19 | - Renamed the extension 20 | - Improved overall performance 21 | 22 | ## Version 2.2 23 | 24 | - Added funding link to extension definition. 25 | 26 | ## Version 2.1 27 | 28 | - Fixed Bug #6: `TypeError: undefined is not an object (evaluating 'nova.fs.stat(this.packageJsonPath).isFile')` 29 | 30 | ## Version 2.0 31 | 32 | - Provides tasks found at the root-level to Nova automatically (auto-populates the Tasks dropdown) 33 | - Added support for composer tasks as well as node ones 34 | - Allows the user to specify the path to NPM/Yarn (workaround as Nova doesn't provide shell environment) 35 | 36 | ## Version 1.7 37 | 38 | - The icon for each task now reflects the running state. 39 | - The package is re-listed under the Tasks category, thanks to Panic changing their validation criteria. 40 | 41 | Note: The whole tree is refreshed for now, as asking the element to reload isn't working. 42 | 43 | ## Version 1.6 44 | 45 | - Implemented the "Show in Finder" feature, for a given task. Thanks go to [Reüel van der Steege](https://github.com/rvdsteege). 46 | - Removed the "Tasks" category, as it requires pre-determined tasks to be provided. This extension determines them automatically. 47 | 48 | ## Version 1.4 49 | 50 | - Sidebar image fixed 51 | 52 | ## Version 1.3 53 | 54 | - Several bugs fixed. 55 | - Configuration added (see Readme). 56 | - Made into Treeware. 57 | 58 | ## Version 1.0 59 | 60 | Initial release based on how Nova Version 1.0b7 (145647) works. 61 | 62 | I can't work out how to make custom images work for sidebars yet 🤯 - it'll get an icon once I've figured that out. 63 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { ComposerParser, PackageJsonParser, TaskfileParser, MaidfileParser } from './parsers'; 2 | 3 | const deactivate = () => console.info('Deactivating TaskFinder'); 4 | 5 | const activate = async () => { 6 | console.log(`Starting TaskFinder (nova v${nova.extension.version})`); 7 | 8 | /* package.json */ 9 | if (nova.workspace.config.get('taskfinder.auto-node', 'boolean')) { 10 | console.info('Reading package.json...'); 11 | 12 | const watcher = nova.fs.watch('*package.json', () => nova.workspace.reloadTasks('taskfinder-tasks-node')); 13 | const nodeTask = nova.assistants.registerTaskAssistant(new PackageJsonParser(), { 14 | identifier: 'taskfinder-tasks-node', 15 | name: 'package.json', 16 | }); 17 | 18 | nova.subscriptions.add(watcher); 19 | nova.subscriptions.add(nodeTask); 20 | } 21 | 22 | /* composer.json */ 23 | if (nova.workspace.config.get('taskfinder.auto-composer', 'boolean')) { 24 | console.info('Reading composer.json...'); 25 | 26 | const watcher = nova.fs.watch('*composer.json', () => nova.workspace.reloadTasks('taskfinder-tasks-composer')); 27 | const composerTask = nova.assistants.registerTaskAssistant(new ComposerParser(), { 28 | identifier: 'taskfinder-tasks-composer', 29 | name: 'composer.json', 30 | }); 31 | 32 | nova.subscriptions.add(watcher); 33 | nova.subscriptions.add(composerTask); 34 | } 35 | 36 | /* Taskfile.* */ 37 | if (nova.workspace.config.get('taskfinder.auto-taskfile', 'boolean')) { 38 | console.info('Reading Taskfile.*...'); 39 | 40 | const watcher = nova.fs.watch('*Taskfile.*', () => nova.workspace.reloadTasks('taskfinder-tasks-taskfile')); 41 | const taskfileTask = nova.assistants.registerTaskAssistant(new TaskfileParser(), { 42 | identifier: 'taskfinder-tasks-taskfile', 43 | name: 'Taskfile', 44 | }); 45 | 46 | nova.subscriptions.add(watcher); 47 | nova.subscriptions.add(taskfileTask); 48 | } 49 | 50 | /* maidfile(.*) */ 51 | if (nova.workspace.config.get('taskfinder.auto-maidfile', 'boolean')) { 52 | console.info('Reading maidfile(.*)...'); 53 | 54 | const watcher = nova.fs.watch('*maidfile*', () => nova.workspace.reloadTasks('taskfinder-tasks-maidfile')); 55 | const maidfileTask = nova.assistants.registerTaskAssistant(new MaidfileParser(), { 56 | identifier: 'taskfinder-tasks-maidfile', 57 | name: 'Maidfile', 58 | }); 59 | 60 | nova.subscriptions.add(watcher); 61 | nova.subscriptions.add(maidfileTask); 62 | } 63 | }; 64 | 65 | export { activate, deactivate }; 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | Screenshot 7 | 8 | 9 |

Automatic Tasks - The ~~missing feature~~ best extension for Panic's Nova editor

10 |
11 | 12 | 13 |
14 | Table of Contents 15 |
    16 |
  1. 17 | About The Project 18 | 21 |
  2. 22 |
  3. 23 | Getting Started 24 | 28 |
  4. 29 |
  5. Usage
  6. 30 |
  7. Roadmap
  8. 31 |
  9. Contributing
  10. 32 |
  11. License
  12. 33 |
  13. Contact
  14. 34 |
  15. Acknowledgments
  16. 35 |
36 |
37 | 38 | 39 | 40 | ## About The Project 41 | 42 | This project is the source code for Little Green Man's [Automatic Tasks](https://extensions.panic.com/extensions/littlegreenman/littlegreenman.TaskFinder/) extension for Panic's Nova editor (phew). It was first established to plug holes that we had in our workflow, but addresses a key feature offered by most editors, and a great extension for Nova. 43 | As the feature set grows, it becomes more obvious why Panic may leave this functionality out of Nova itself, but we'd sure appreciate support, review and PRs from them to make it the best it can be. 44 | 45 | What does it do? In short, **auto-populate the editors tasklist with tasks from your project files** (Node, Composer, Maidfile and Taskfile at the moment). But also: 46 | 47 | - Allows you to modify use of npm/yarn on a per-project basis 48 | - Allows you to choose which features to enable (per-project also) 49 | - Watches files to automatically update the task list on file changes 50 | 51 |

(back to top)

52 | 53 | ### Built With 54 | 55 | This project was built with the following libraries and helpers. 56 | 57 | - [TypeScript](https://www.typescriptlang.org/) 58 | - [ESBuild](https://esbuild.github.io/) 59 | 60 |

(back to top)

61 | 62 | 63 | 64 | ## Getting Started 65 | 66 | If you just want to install the extension in Nova, then load Nova, load the Extension Library (shift-cmd-2), search for "Automatic Tasks" and press install. 67 | 68 | Otherwise, to hack on it, develop it and/or load a local copy in Nova, carry on reading. 69 | 70 | ### Prerequisites 71 | 72 | - nodejs 73 | - yarn 74 | - Nova 75 | 76 | ### Developing the Extension 77 | 78 | 1. Clone the repo 79 | ```sh 80 | git clone https://github.com/little-green-man/nova-taskfinder.git 81 | ``` 82 | 2. Install NPM packages 83 | ```sh 84 | yarn 85 | ``` 86 | 3. Build the extension 87 | ```sh 88 | yarn watch # or yarn build 89 | ``` 90 | 4. Activate the extension 91 | Disable the formal extension from Panic, by unchecking it in the Extension Library. 92 | ```sh 93 | yarn activate 94 | ``` 95 | Finally, minimise the window that opens for `./build/taskfinder.novaextension`, as you don't want to edit these files. 96 | 5. Edit the files in the `src`, run `yarn build`, and Nova will automatically reload the extension (from your minimised window) 97 | 98 |

(back to top)

99 | 100 | 101 | 102 | ## Usage 103 | 104 | The [extension](https://extensions.panic.com/extensions/littlegreenman/littlegreenman.TaskFinder/) is submitted to the Panic Extension store by Little Green Man Ltd, following merged pull requests. 105 | 106 | You just need to load Nova, load the Extension Library (shift-cmd-2), search for "Automatic Tasks" and press install. 107 | 108 | Of course, if you fork the extension or prefer to submit your own variant, then you may do (having first modified the name, `build/extension.js` file, readme, changelog and more, choose `Extension > Submit to the Extension Library...` from Nova's menu). 109 | 110 |

(back to top)

111 | 112 | 113 | 114 | ## Roadmap 115 | 116 | - [x] Move to TypeScript 117 | - [ ] Build testing in 118 | - [ ] Find a solution to [#10](https://github.com/little-green-man/nova-taskfinder/issues/10) 119 | 120 | See the [open issues](https://github.com/little-green-man/nova-taskfinder/issues) for a full list of proposed features (and known issues). 121 | 122 |

(back to top)

123 | 124 | 125 | 126 | ## Contributing 127 | 128 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 129 | 130 | If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". 131 | Don't forget to give the project a star! Thanks again! 132 | 133 | 1. Fork the Project 134 | 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`), make and test your changes 135 | 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) 136 | 4. Push to the Branch (`git push origin feature/AmazingFeature`) 137 | 5. Open a Pull Request 138 | 139 |

(back to top)

140 | 141 | 142 | 143 | ## License 144 | 145 | Distributed under the MIT License. See `LICENSE.txt` for more information. 146 | 147 |

(back to top)

148 | 149 | 150 | 151 | ## Contact 152 | 153 | Elliot - [@elliot](https://social.lgm.ltd/@elliot), or hello [at] lgm.ltd 154 | 155 | Project Link: [https://github.com/little-green-man/nova-taskfinder](https://github.com/little-green-man/nova-taskfinder) 156 | 157 |

(back to top)

158 | 159 | 160 | 161 | ## Acknowledgments 162 | 163 | So many thanks go to: 164 | 165 | - [Sajjaad Farzad](https://github.com/theMackabu) 166 | - [Reüel van der Steege](https://github.com/rvdsteege) 167 | 168 |

(back to top)

169 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/android-arm64@0.17.18": 6 | version "0.17.18" 7 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz#4aa8d8afcffb4458736ca9b32baa97d7cb5861ea" 8 | integrity sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw== 9 | 10 | "@esbuild/android-arm@0.17.18": 11 | version "0.17.18" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.18.tgz#74a7e95af4ee212ebc9db9baa87c06a594f2a427" 13 | integrity sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw== 14 | 15 | "@esbuild/android-x64@0.17.18": 16 | version "0.17.18" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.18.tgz#1dcd13f201997c9fe0b204189d3a0da4eb4eb9b6" 18 | integrity sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg== 19 | 20 | "@esbuild/darwin-arm64@0.17.18": 21 | version "0.17.18" 22 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz#444f3b961d4da7a89eb9bd35cfa4415141537c2a" 23 | integrity sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ== 24 | 25 | "@esbuild/darwin-x64@0.17.18": 26 | version "0.17.18" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz#a6da308d0ac8a498c54d62e0b2bfb7119b22d315" 28 | integrity sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A== 29 | 30 | "@esbuild/freebsd-arm64@0.17.18": 31 | version "0.17.18" 32 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz#b83122bb468889399d0d63475d5aea8d6829c2c2" 33 | integrity sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA== 34 | 35 | "@esbuild/freebsd-x64@0.17.18": 36 | version "0.17.18" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz#af59e0e03fcf7f221b34d4c5ab14094862c9c864" 38 | integrity sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew== 39 | 40 | "@esbuild/linux-arm64@0.17.18": 41 | version "0.17.18" 42 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz#8551d72ba540c5bce4bab274a81c14ed01eafdcf" 43 | integrity sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ== 44 | 45 | "@esbuild/linux-arm@0.17.18": 46 | version "0.17.18" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz#e09e76e526df4f665d4d2720d28ff87d15cdf639" 48 | integrity sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg== 49 | 50 | "@esbuild/linux-ia32@0.17.18": 51 | version "0.17.18" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz#47878860ce4fe73a36fd8627f5647bcbbef38ba4" 53 | integrity sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ== 54 | 55 | "@esbuild/linux-loong64@0.17.18": 56 | version "0.17.18" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz#3f8fbf5267556fc387d20b2e708ce115de5c967a" 58 | integrity sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ== 59 | 60 | "@esbuild/linux-mips64el@0.17.18": 61 | version "0.17.18" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz#9d896d8f3c75f6c226cbeb840127462e37738226" 63 | integrity sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA== 64 | 65 | "@esbuild/linux-ppc64@0.17.18": 66 | version "0.17.18" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz#3d9deb60b2d32c9985bdc3e3be090d30b7472783" 68 | integrity sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ== 69 | 70 | "@esbuild/linux-riscv64@0.17.18": 71 | version "0.17.18" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz#8a943cf13fd24ff7ed58aefb940ef178f93386bc" 73 | integrity sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA== 74 | 75 | "@esbuild/linux-s390x@0.17.18": 76 | version "0.17.18" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz#66cb01f4a06423e5496facabdce4f7cae7cb80e5" 78 | integrity sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw== 79 | 80 | "@esbuild/linux-x64@0.17.18": 81 | version "0.17.18" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz#23c26050c6c5d1359c7b774823adc32b3883b6c9" 83 | integrity sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA== 84 | 85 | "@esbuild/netbsd-x64@0.17.18": 86 | version "0.17.18" 87 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz#789a203d3115a52633ff6504f8cbf757f15e703b" 88 | integrity sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg== 89 | 90 | "@esbuild/openbsd-x64@0.17.18": 91 | version "0.17.18" 92 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz#d7b998a30878f8da40617a10af423f56f12a5e90" 93 | integrity sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA== 94 | 95 | "@esbuild/sunos-x64@0.17.18": 96 | version "0.17.18" 97 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz#ecad0736aa7dae07901ba273db9ef3d3e93df31f" 98 | integrity sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg== 99 | 100 | "@esbuild/win32-arm64@0.17.18": 101 | version "0.17.18" 102 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz#58dfc177da30acf956252d7c8ae9e54e424887c4" 103 | integrity sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg== 104 | 105 | "@esbuild/win32-ia32@0.17.18": 106 | version "0.17.18" 107 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz#340f6163172b5272b5ae60ec12c312485f69232b" 108 | integrity sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw== 109 | 110 | "@esbuild/win32-x64@0.17.18": 111 | version "0.17.18" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz#3a8e57153905308db357fd02f57c180ee3a0a1fa" 113 | integrity sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg== 114 | 115 | "@types/nova-editor-node@^4.1.10": 116 | version "4.1.10" 117 | resolved "https://registry.yarnpkg.com/@types/nova-editor-node/-/nova-editor-node-4.1.10.tgz#9f20fbd4419bdc1f36fa9e3f25eb013086b0341b" 118 | integrity sha512-gjYb60LHk1Yy2zt92uzZPo6+pFhSZi3DRnB/HChfyHWgxwGVugW8rUROX0rEJesbNjLG08Eakejl8krZnwJkHQ== 119 | 120 | esbuild-config@^1.0.1: 121 | version "1.0.1" 122 | resolved "https://registry.yarnpkg.com/esbuild-config/-/esbuild-config-1.0.1.tgz#9ebe6f24da0f3c9fc3b55838729e08889ca0bd38" 123 | integrity sha512-3Ha0LwC9F1Y1+rertxsDvaSWp+XyvIvI4Lrh3XNcZpuD2qz9xaHUY0yK9ESgh7AplfwVJDYAtOsAStYyArRhXA== 124 | 125 | esbuild@^0.17.18: 126 | version "0.17.18" 127 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.18.tgz#f4f8eb6d77384d68cd71c53eb6601c7efe05e746" 128 | integrity sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w== 129 | optionalDependencies: 130 | "@esbuild/android-arm" "0.17.18" 131 | "@esbuild/android-arm64" "0.17.18" 132 | "@esbuild/android-x64" "0.17.18" 133 | "@esbuild/darwin-arm64" "0.17.18" 134 | "@esbuild/darwin-x64" "0.17.18" 135 | "@esbuild/freebsd-arm64" "0.17.18" 136 | "@esbuild/freebsd-x64" "0.17.18" 137 | "@esbuild/linux-arm" "0.17.18" 138 | "@esbuild/linux-arm64" "0.17.18" 139 | "@esbuild/linux-ia32" "0.17.18" 140 | "@esbuild/linux-loong64" "0.17.18" 141 | "@esbuild/linux-mips64el" "0.17.18" 142 | "@esbuild/linux-ppc64" "0.17.18" 143 | "@esbuild/linux-riscv64" "0.17.18" 144 | "@esbuild/linux-s390x" "0.17.18" 145 | "@esbuild/linux-x64" "0.17.18" 146 | "@esbuild/netbsd-x64" "0.17.18" 147 | "@esbuild/openbsd-x64" "0.17.18" 148 | "@esbuild/sunos-x64" "0.17.18" 149 | "@esbuild/win32-arm64" "0.17.18" 150 | "@esbuild/win32-ia32" "0.17.18" 151 | "@esbuild/win32-x64" "0.17.18" 152 | 153 | typescript@^5.0.4: 154 | version "5.0.4" 155 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" 156 | integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== 157 | --------------------------------------------------------------------------------