From 1d68d7006a64323e9704a212808c1554520d0eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20F=C3=B6rtsch?= Date: Tue, 10 Mar 2026 17:03:20 +0100 Subject: [PATCH] merge taskjuggler vscode extension into ideas Co-Authored-By: Claude Opus 4.6 --- .../vscode-extension/.eslintrc.json | 24 + .../vscode-extension/.gitattributes | 3 + .../vscode-extension/.gitignore | 2 + .../vscode-extension/.vscode/extensions.json | 7 + .../vscode-extension/.vscode/launch.json | 34 + .../vscode-extension/.vscode/settings.json | 11 + .../vscode-extension/.vscode/tasks.json | 20 + .../vscode-extension/.vscodeignore | 11 + .../vscode-extension/CHANGELOG.md | 184 + .../vscode-extension/README.md | 65 + .../vscode-extension/examples/f-20.tjp | 2442 ++++++++++ .../vscode-extension/examples/scrum.tjp | 141 + .../vscode-extension/examples/template.tjp | 338 ++ .../vscode-extension/examples/tjp.vim | 764 +++ .../vscode-extension/examples/todolist.tjp | 84 + .../vscode-extension/examples/tutorial.tjp | 496 ++ .../language-configuration.json | 72 + .../vscode-extension/package-lock.json | 4092 +++++++++++++++++ .../vscode-extension/package.json | 72 + .../vscode-extension/src/extension.ts | 38 + .../vscode-extension/src/test/runTest.ts | 23 + .../src/test/suite/extension.test.ts | 15 + .../vscode-extension/src/test/suite/index.ts | 38 + .../syntaxes/tjp.tmLanguage.json | 51 + .../vscode-extension/tsconfig.json | 23 + .../vsc-extension-quickstart.md | 29 + 26 files changed, 9079 insertions(+) create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.eslintrc.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitattributes create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitignore create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/extensions.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/launch.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/settings.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/tasks.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscodeignore create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/CHANGELOG.md create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/README.md create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/f-20.tjp create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/scrum.tjp create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/template.tjp create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tjp.vim create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/todolist.tjp create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tutorial.tjp create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/language-configuration.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/package-lock.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/package.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/src/extension.ts create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/runTest.ts create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/extension.test.ts create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/index.ts create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/syntaxes/tjp.tmLanguage.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/tsconfig.json create mode 100644 Ideas/Taskjuggler verwendbar machen/vscode-extension/vsc-extension-quickstart.md diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.eslintrc.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.eslintrc.json new file mode 100644 index 0000000..f9b22b7 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.eslintrc.json @@ -0,0 +1,24 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": [ + "out", + "dist", + "**/*.d.ts" + ] +} diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitattributes b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitattributes new file mode 100644 index 0000000..13bc9c2 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitattributes @@ -0,0 +1,3 @@ +# Set default behavior to automatically normalize line endings. +* text=auto + diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitignore b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitignore new file mode 100644 index 0000000..67dfeb3 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.gitignore @@ -0,0 +1,2 @@ +node_modules +*.vsix \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/extensions.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/extensions.json new file mode 100644 index 0000000..3ac9aeb --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "dbaeumer.vscode-eslint" + ] +} diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/launch.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/launch.json new file mode 100644 index 0000000..e5aa6d8 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/launch.json @@ -0,0 +1,34 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/settings.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/settings.json new file mode 100644 index 0000000..30bf8c2 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/settings.json @@ -0,0 +1,11 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/tasks.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/tasks.json new file mode 100644 index 0000000..3b17e53 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscodeignore b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscodeignore new file mode 100644 index 0000000..5392083 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/.vscodeignore @@ -0,0 +1,11 @@ +.vscode/** +.vscode-test/** +.gitignore +src/** +.gitignore +.yarnrc +vsc-extension-quickstart.md +**/tsconfig.json +**/.eslintrc.json +**/*.map +**/*.ts diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/CHANGELOG.md b/Ideas/Taskjuggler verwendbar machen/vscode-extension/CHANGELOG.md new file mode 100644 index 0000000..84b5089 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/CHANGELOG.md @@ -0,0 +1,184 @@ +# CHANGELOG + +All notable changes to the "taskjuggler-syntax" extension will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.0.0] - 2017-06-20 + +### Added + +- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). +- Version navigation. +- Links to latest released version in previous versions. +- "Why keep a changelog?" section. +- "Who needs a changelog?" section. +- "How do I make a changelog?" section. +- "Frequently Asked Questions" section. +- New "Guiding Principles" sub-section to "How do I make a changelog?". +- Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo). +- German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4). +- Italian translation from [@azkidenz](https://github.com/azkidenz). +- Swedish translation from [@magol](https://github.com/magol). +- Turkish translation from [@karalamalar](https://github.com/karalamalar). +- French translation from [@zapashcanon](https://github.com/zapashcanon). +- Brazilian Portugese translation from [@Webysther](https://github.com/Webysther). +- Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek). +- Russian translation from [@aishek](https://github.com/aishek). +- Czech translation from [@h4vry](https://github.com/h4vry). +- Slovak translation from [@jkostolansky](https://github.com/jkostolansky). +- Korean translation from [@pierceh89](https://github.com/pierceh89). +- Croatian translation from [@porx](https://github.com/porx). +- Persian translation from [@Hameds](https://github.com/Hameds). +- Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s). + +### Changed + +- Start using "changelog" over "change log" since it's the common usage. +- Start versioning based on the current English version at 0.3.0 to help +translation authors keep things up-to-date. +- Rewrite "What makes unicorns cry?" section. +- Rewrite "Ignoring Deprecations" sub-section to clarify the ideal + scenario. +- Improve "Commit log diffs" sub-section to further argument against + them. +- Merge "Why can’t people just use a git log diff?" with "Commit log + diffs" +- Fix typos in Simplified Chinese and Traditional Chinese translations. +- Fix typos in Brazilian Portuguese translation. +- Fix typos in Turkish translation. +- Fix typos in Czech translation. +- Fix typos in Swedish translation. +- Improve phrasing in French translation. +- Fix phrasing and spelling in German translation. + +### Removed + +- Section about "changelog" vs "CHANGELOG". + +## [0.3.0] - 2015-12-03 + +### Added + +- RU translation from [@aishek](https://github.com/aishek). +- pt-BR translation from [@tallesl](https://github.com/tallesl). +- es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex). + +## [0.2.0] - 2015-10-06 + +### Changed + +- Remove exclusionary mentions of "open source" since this project can +benefit both "open" and "closed" source projects equally. + +## [0.1.0] - 2015-10-06 + +### Added + +- Answer "Should you ever rewrite a change log?". + +### Changed + +- Improve argument against commit logs. +- Start following [SemVer](https://semver.org) properly. + +## [0.0.8] - 2015-02-17 + +### Changed + +- Update year to match in every README example. +- Reluctantly stop making fun of Brits only, since most of the world + writes dates in a strange way. + +### Fixed + +- Fix typos in recent README changes. +- Update outdated unreleased diff link. + +## [0.0.7] - 2015-02-16 + +### Added + +- Link, and make it obvious that date format is ISO 8601. + +### Changed + +- Clarified the section on "Is there a standard change log format?". + +### Fixed + +- Fix Markdown links to tag comparison URL with footnote-style links. + +## [0.0.6] - 2014-12-12 + +### Added + +- README section on "yanked" releases. + +## [0.0.5] - 2014-08-09 + +### Added + +- Markdown links to version tags on release headings. +- Unreleased section to gather unreleased changes and encourage note +keeping prior to releases. + +## [0.0.4] - 2014-08-09 + +### Added + +- Better explanation of the difference between the file ("CHANGELOG") +and its function "the change log". + +### Changed + +- Refer to a "change log" instead of a "CHANGELOG" throughout the site +to differentiate between the file and the purpose of the file — the +logging of changes. + +### Removed + +- Remove empty sections from CHANGELOG, they occupy too much space and +create too much noise in the file. People will have to assume that the +missing sections were intentionally left out because they contained no +notable changes. + +## [0.0.3] - 2014-08-09 + +### Added + +- "Why should I care?" section mentioning The Changelog podcast. + +## [0.0.2] - 2014-07-10 + +### Added + +- Explanation of the recommended reverse chronological release ordering. + +## [0.0.1] - 2014-05-31 + +### Added + +- This CHANGELOG file to hopefully serve as an evolving example of a + standardized open source project CHANGELOG. +- CNAME file to enable GitHub Pages custom domain +- README now contains answers to common questions about CHANGELOGs +- Good examples and basic guidelines, including proper date formatting. +- Counter-examples: "What makes unicorns cry?" + +[Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...HEAD +[1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0 +[0.3.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0 +[0.2.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.1.0...v0.2.0 +[0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0 +[0.0.8]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.7...v0.0.8 +[0.0.7]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.6...v0.0.7 +[0.0.6]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.5...v0.0.6 +[0.0.5]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.4...v0.0.5 +[0.0.4]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.3...v0.0.4 +[0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3 +[0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2 +[0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1 diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/README.md b/Ideas/Taskjuggler verwendbar machen/vscode-extension/README.md new file mode 100644 index 0000000..7c4c177 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/README.md @@ -0,0 +1,65 @@ +# taskjuggler-syntax README + +This extension provides syntax highlighting support for Taskjuggler. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/f-20.tjp b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/f-20.tjp new file mode 100644 index 0000000..7afaf4b --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/f-20.tjp @@ -0,0 +1,2442 @@ +# Fedora 20 +# +# Copyright 2011 John Poelstra +# Copyright 2011 Robyn Bergeron +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# Current release version +macro major [20] +# Last release version +macro previous_major[19] +# Next release version +macro next_major [21] +# do not change this +macro content [f] +# do not change this +macro content_title [Fedora] +# GA date of previous release +macro start_date [2013-04-30] +# set to one day after "start_date" +macro start_work [2013-05-01] +macro end_date [2014-12-31] +macro prior_project [f19] + +project ${content}${major} "${content_title}" "${major}" ${start_date} - ${end_date} { + timeformat "%Y-%b-%d" + + # Based on Eastern time zone in USA + timezone "America/New_York" + + # Setup scenarios + scenario plan "Original Plan" { + scenario actual "Actual" + } + + # Limit working days + workinghours sat,sun off +} + +# ========= Cornerstones of Fedora Schedules ============= +# This section also serves as a "style guide" for the source file too + +/* +1) EVERY entry should be in the following line order and indented consistently with the rest of the file. This makes the source file consistent and easier to read. + a) task name and description + b) dependency (if applicable) + c) length (not "duration") (if applicable) + d) flags (if applicable) + +2) Official Release Engineering Composes happen on Thursdays, except for the final release + +3) Syncing releases to mirrors ideally happens on Thursdays... end of day on Friday is worst case + +4) Most tasks are scheduled with 'length' instead of 'duration' to get a sense of "work days" required--using 'length' one week = 5 days +--an eternal debate could be held to discuss whether or not schedule calculations +should include weekends because community members work at all times and not within strict work days. + +5) Use "length" everywhere and "duration" only when something must take into account a weekend day + +6) All "Blocker Bug Days" should be on Fridays + +7) If a task takes one day or less--schedule with no length--this way it shows up as a milestone and gets included in iCalendar (ics) file + +8) Because of bugs in the way TaskJuggler ics files get rendered in some calendars (e.g. Zimbra) we only include zero length (milestone) tasks in the ics file. As a result there are several duplicate tasks with no length that have been added so they appear in the ics file. + +9) Use core schedule milestones (flags = key) as anchor points (depends/precedes) for tasks in this schedule file instead of more transient tasks like meetings, compose dates, etc. that may change (or slip) from release to release. This makes building new release schedules easier and require less maintenance and updating. + +10) In ALL but limited cases task beginning and ending should be automatically calculated based on logic in this file. When using hard coded dates, explicitly call them out with a comment to highlight their existence. Hard coded dates are particularly troublesome when slipping a schedule or branching the file to create a new release schedule because they must be adjusted and recalculated manually + +11) TaskJuggler does not provide an easy way (that I am aware of) to schedule tasks to happen *before* other tasks. I've created a hack/methodology I call "shadow" tasks. These are unreported tasks that go backwards a certain period of time and serve as an anchor or starting point for the actual task to be reported. + +12) The "milestone" declaration is NOT used in this source file. It is redundant and unnecessary. Do not include it. All tasks without 'length' or 'duration' are automatically considered "milestone" tasks. + +*/ + +# Define flags for filtered reporting +flags ambassadors +flags bugtriage +flags blocker # use to proof blocker meeting placement +flags design +flags devel +flags docs +flags elections +flags fpl +flags hidden # used to hide tasks that we do not displayed in Fedora reports +flags infrastructure +flags interface +flags key /* use for report of key tasks/high level overview--reflected on Fedora wiki, e.g. + https://fedoraproject.org/wiki/Releases/15/Schedule */ +flags proto # used for drafting new schedules and shows tasks useful for doing this +flags pm +flags pr +flags marketing +flags roadmap # major milestones +flags translation +flags quality +flags releng +flags spins +flags web + +task ${content}${major} "${content_title} ${major}" { + + start ${start_work} + + task first_day "First Day of Development" { + flags hidden + } + + task PlanningPhase "Planning Phase" { + + # add for ical + task start_features_cal "Start Feature Submission" { + flags key, pm, roadmap + } + + task rawhide_spins "Start Nightly Spins Compose Based on Rawhide" { + depends !!first_day {gaplength 5d} + flags spins + } + + # ADJUST FOR NEW RELEASE + # HARDCODED date--approximately 2 weeks after GA of previous release + task file_ticket "File ticket with RHT Eng-ops for Fedora 17 EOL bugzilla closure" { + start 2013-05-15 + flags pm + } + + # ADJUST FOR NEW RELEASE + # HARDCODED date--approximately 4 weeks after GA of previous release + # this date is approved by FESCo in accordance with https://fedoraproject.org/wiki/LifeCycle + # The process behind this task is at: https://fedoraproject.org/wiki/BugZappers/HouseKeeping + task fedora17_eol "RHT Eng-Ops Fedora 17 EOL auto closure" { + start 2013-05-29 + flags pm, key + } + + task clean_market_wiki "Cleanup Marketing wiki from previous releases" { + depends !start_features_cal {gaplength 25d} + length 5d + flags marketing + } + + task cycle_market_wiki "Cycle Marketing wiki pages for current release" { + depends !start_features_cal {gaplength 25d} + length 5d + flags marketing + } + + task bug_trackers "Create Tracker Bugs" { + flags pm + note "See details at https://fedoraproject.org/wiki/BugZappers/HouseKeeping/FirstDayDevel" + } + + task design_concept "Conceptual Design Phase" { + length 30d + flags design + } + + # ADJUST FOR NEW RELEASE + # a solid start for the wallpaper is the goal for alpha + # adjust length so packaging end date lands on Alpha Deadline + task wallpaper_design "Wallpaper Design for Alpha" { + depends !design_concept + length 35d + flags design + } + + } # E N D of PlanningPhase + + + task supplement_wallpaper "Supplemental Wallpaper Process" { + flags design + + # ADJUST FOR NEW RELEASE + # adjust length of this task so that 'package_supplemental_wallpaper' ends on Beta Deadline + task supplement_wallpaper_submit "Supplemental Wallpaper Submission Period" { + length 82d + } + + task decide_supplement_wallpaper "Select Official Supplemental Wallpaper" { + depends !supplement_wallpaper_submit + } + + task supplement_license_review "Verify Supplemental Wallpaper Licenses" { + depends !decide_supplement_wallpaper {gaplength 1d} + length 10d + } + + task package_supplemental_wallpaper "Package Supplemental Wallpaper" { + depends !supplement_license_review + length 2d + } + + } # end supplemental wallpaper + + task DevelopmentPhase "Development Phase" { + start ${start_work} + + task devel_start "Start Development" { + flags devel + } + + # ADJUST FOR NEW RELEASE--IMPORTANT + # The length of this task DRIVES THE ENTIRE SCHEDULE + # and determines when the testing phases starts. The testing + # phase of the schedule is static (and completely automatically + # generated by TaskJuggler) from release to release, but the + # number of days of development varies depending when the previous + # release ended (GA). As a result the length of this task also + # influences where the GA date lands. + # Each "5d" (5 days) is equivalent to one week. + task develop "Packaging and Development (precedes Alpha)" { + length 70d + flags devel, proto + } + + } # E N D of DevelopmentPhase + + task TestingPhase "Testing Phase" { + + task alpha "Alpha Release" { + + start ${start_work} + + task shadow_alpha_blocker "SHADOW: anchor for first blocker meeting" { + precedes !feature_freeze {gaplength 11d} + flags hidden + } + + task remind_alpha_blocker1 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #1" { + depends !shadow_alpha_blocker {gaplength 3d} + flags pm + } + + task alpha_blocker1 "Alpha Blocker Meeting (${content}${major}alpha) #1" { + depends !shadow_alpha_blocker {gaplength 5d} + flags releng, quality, devel, blocker, pm + } + + task remind_alpha_blocker2 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #2" { + depends !alpha_blocker1 {gaplength 3d} + flags pm + } + + task alpha_blocker2 "Alpha Blocker Meeting (${content}${major}alpha) #2" { + depends !alpha_blocker1 {gaplength 5d} + flags releng, quality, devel, blocker, pm + } + + # raise awareness one week before Alpha compose + task daily_alpha_blocker "Daily Review & Notification of Open Alpha Blocker Bugs" { + depends !alpha_blocker2 {gaplength 1d} + length 4d + flags releng, quality, devel, pm, blocker + } + + task remind_alpha_blocker3 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #3" { + depends !alpha_blocker2 {gaplength 3d} + flags pm + } + + task alpha_blocker3 "Alpha Blocker Meeting (${content}${major}alpha) #3" { + depends !alpha_blocker2 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + task remind_alpha_blocker4 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #4" { + depends !alpha_blocker3 {gaplength 3d} + flags pm + } + + task alpha_blocker4 "Alpha Blocker Meeting (${content}${major}alpha) #4" { + depends !alpha_blocker3 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + # placeholder if slip--otherwise comment out + /* + task alpha_blocker5 "Alpha Blocker Meeting (${content}${major}alpha) #5" { + depends !alpha_blocker4 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + */ + + # Feature Freeze is one week before Alpha Change Deadline + # Automatically calculated based on Alpha Change Deadline + task shadow_feature_freeze "SHADOW: Anchor Feature Freeze" { + precedes !alpha_deadline {gaplength 6d} + flags hidden + } + + task feature_freeze "Feature Freeze (Testable|Complete)" { + depends !shadow_feature_freeze + flags releng, quality, pm, proto, devel, key, marketing, roadmap, fpl + } + + task feature_freeze_deadline_announce "Announce Feature Freeze Reached" { + depends !feature_freeze + flags pm + } + + task alpha_deadline_remind "Remind Alpha Deadline in 1 week" { + depends !feature_freeze + flags pm + } + + task spins_freeze "Spins Freeze--All ${content_title} ${major} Spins Identified" { + depends !shadow_feature_freeze + flags releng, quality, pm, proto, devel, key, marketing, spins, fpl + } + + task talking_points "Create Talking Points" { + depends !feature_freeze {gaplength 6d} + length 5d + flags marketing + } + + + task feature_profiles "Feature Profiles" { + depends !talking_points + length 20d + flags marketing + } + + # Branch on the same Tuesday as Feature Freeze + task branch_rawhide "Branch Fedora ${major} from Rawhide" { + depends !shadow_feature_freeze + flags releng, devel, pm, proto, key, roadmap, fpl + } + + task bugzilla_description "Reflect supported versions in Bugzilla product description" { + depends !shadow_feature_freeze + flags pm + } + + task rawhide_rebase "Rebase Rawhide bugs to Fedora ${major}" { + depends !shadow_feature_freeze + flags pm + } + + # Create anchor for three weeks before for Feature Submission + task shadow_feature_submit_remind_3_weeks "SHADOW: Three Weeks Before Feature Submission" { + precedes !feature_submission_deadline {gaplength 15d} + flags hidden + } + + # Three weeks before Feature Submission Deadline + task feature_check_remind "Request Feature Status Updates + Remind Submit Deadline" { + depends !shadow_feature_submit_remind_3_weeks + flags devel, pm + } + + task alpha_releng_tickets "File All Release Engineering Tickets for ${content_title} ${major} Alpha" { + depends !shadow_feature_submit_remind_3_weeks {gaplength 3d} + flags releng + } + + task feature_submit_remind_2_weeks "Feature Submission Deadline Two Weeks away" { + depends !shadow_feature_submit_remind_3_weeks {gaplength 6d} + flags devel, pm + } + + #two weeks before spins submission deadline get wiki pages in order + task spins_wiki_update "Update All Spins Wiki Pages From Previous Releases" { + depends !shadow_feature_submit_remind_3_weeks + flags spins + } + + task feature_submit_remind_1_week "Feature Submission Deadline One Week away" { + depends !shadow_feature_submit_remind_3_weeks {gaplength 11d} + flags devel, pm + } + + # One day before compose + task alpha_installer_build1 "Submit Installer Build for QA Compose" { + depends !feature_submit_remind_1_week {gaplength 1d} + flags devel + } + + # Thursday before Feature Submission deadline + task qa_alpha_compose1 "Create Installable Images for QA testing #1" { + depends !feature_submit_remind_1_week {gaplength 2d} + flags releng + } + + task alpha_rawhide_install1 "Pre-Alpha Rawhide Acceptance Test Plan #1" { + depends !qa_alpha_compose1 + length 6d + flags quality + } + + # Create anchor for two weeks before Feature Freeze + task shadow_feature_submission_deadline "SHADOW: Two weeks before Feature Freeze" { + precedes !feature_freeze {gaplength 10d} + flags hidden + } + + task feature_submission_deadline "Feature Submission Deadline" { + depends !shadow_feature_submission_deadline + flags releng, quality, pm, proto, devel, key, roadmap, fpl + } + + task feature_submission_deadline_announce "Announce Feature Submission Closed" { + depends !shadow_feature_submission_deadline + flags pm + } + + task spins_submission_deadline "Custom Spins Submission Deadline" { + depends !shadow_feature_submission_deadline + flags pm, proto, key, spins, fpl + } + + task warn_rawhide_rebase "Rawhide Rebase Warning to Package Maintainers" { + depends !shadow_feature_submission_deadline + flags pm + } + + task ticket_rawhide_rebase "File Rawhide Rebase ticket with RHT Eng-ops" { + depends !shadow_feature_submission_deadline + flags pm + } + + # One day before compose + task alpha_installer_build2 "Submit Installer Build for QA Compose" { + depends !feature_submission_deadline {gaplength 2d} + flags devel + } + + task qa_alpha_compose2 "Create Installable Images for QA testing #2" { + depends !feature_submission_deadline {gaplength 3d} + flags releng + } + + task alpha_rawhide_install2 "Pre-Alpha Rawhide Acceptance Test Plan #2" { + depends !qa_alpha_compose2 + length 5d + flags quality + } + + # One day before compose + task alpha_installer_build3 "Submit Installer Build for QA Compose" { + depends !qa_alpha_compose2 {gaplength 4d} + flags devel + } + + task qa_alpha_compose3 "Create Installable Images for QA testing #3" { + depends !alpha_rawhide_install2 + flags releng + } + + task alpha_rawhide_install3 "Pre-Alpha Rawhide Acceptance Test Plan #3" { + depends !qa_alpha_compose3 + length 5d + flags quality + } + + task feature_incomplete_nag "Remind < 85% complete Feature Owners" { + depends !feature_freeze {gaplength 1d} + flags pm + } + + task feature_incomplete_fesco "Deliver Incomplete Features to FESCo " { + depends !feature_freeze {gaplength 6d} + flags pm + } + + # KEY ADJUSTMENT POINT + # Date of Alpha Deadline depends on length of development + task alpha_deadline "Alpha Change Deadline" { + depends !!!DevelopmentPhase.develop + flags releng, quality, pm, devel, key, roadmap, proto, blocker, spins + } + + task alpha_deadline_announce "Announce Alpha Change Deadline Reached" { + depends !alpha_deadline + flags pm + } + + # KEY ADJUSTMENT POINT--manually adjust if length of time before Alpha ships changes + task alpha_infrastructure_freeze "Alpha Infrastructure Change Freeze" { + depends !alpha_deadline + length 10d + flags infrastructure + } + + task alpha_spins_ks "Build spin-kickstarts package from master" { + depends !alpha_deadline + flags spins + } + + # Happens the same day as Feature Freeze + task orphan "Orphan Rawhide Packages" { + depends !feature_freeze + flags releng, devel + } + + task finalize_alpha_wallpaper "Finalize Alpha Wallpaper" { + depends !!!PlanningPhase.wallpaper_design + flags design, pm + length 3d + } + + task alpha_wallpaper_deadline "Alpha Wallpaper Deadline" { + depends !finalize_alpha_wallpaper + flags design + } + + task blog_alpha_wallpaper "Blog About Alpha Wallpaper" { + depends !finalize_alpha_wallpaper + flags design + } + + # must land a few days before Alpha compose by Releng + task package_alpha_wallpaper "Package Alpha Wallpaper" { + depends !finalize_alpha_wallpaper + length 2d + flags design + } + + task alpha_wallpaper_feedback "Solicit Feedback on Alpha Wallpaper" { + depends !package_alpha_wallpaper + length 10d + flags design + } + + # depends on nearly complete version of the wallpaper, otherwise + # you have to create the splashes twice + # work on until Beta freeze + task start_splash_screens "Create Splash Screens" { + depends !alpha_drop + length 9d + flags design + } + + # for ics file + task start_splash_screens_cal "Start Splash Screens" { + depends !alpha_drop + flags design + } + + # work on until Beta freeze + task finalize_splash_screens "Finalize Splash Screens" { + depends !start_splash_screens + length 4d + flags design + } + + # work on until Beta freeze + task beta_wallpaper "Prepare wallpaper for Beta" { + depends !alpha_drop + length 13d + flags design + } + + # send reminder on Monday before Wednesday meeting + task remind_alpha_go_not "Reminder: ${content_title} ${major} Alpha Go/No-Go Meeting" { + depends !create_alpha_compose {gaplength 2d} + flags pm + } + + task alpha_go_not "${content_title} ${major} Alpha Go/No-Go Meeting (17:00 US Eastern)" { + depends !create_alpha_compose {gaplength 4d} + flags releng, quality, devel, pm, proto, blocker + } + + task trans_software_rebuild1 "Remind f-dev-announce to Rebuild All Translated Packages" { + depends !feature_freeze {gaplength 5d } + flags translation + } + + task software_string_freeze "Software String Freeze" { + depends !feature_freeze {gaplength 6d } + flags devel, translation, pm, proto, releng, key, roadmap + } + + task announce_software_string_freeze "Announce Software String Freeze Reached" { + depends !feature_freeze {gaplength 6d } + flags pm + } + + task software_translation "Software Translation"{ + + # KEY ADJUSTMENT POINT + # if the alpha slips, add additional time to this task (or maybe not - this may be attached to string freeze dates increasing - double check this! -robyn) + task trans_software "Software Translation Period" { + depends !!software_string_freeze + length 25d + flags translation + } + + # KEY ADJUSTMENT POINT + # If the alpha slips, add additional time to 'gaplength' for this task which essentially extends the freeze + task remind_build_trans_software "Remind f-dev-announce to build F${major} collection pkgs for trans team" { + depends !!software_string_freeze {gaplength 9d} + flags translation + } + + task request_review_image "Create Rel-Eng ticket for Live Image compose for Software Review UI" { + depends !remind_build_trans_software {gaplength 4d} + flags translation + } + + task build_trans_software "Build F-${major} collection packages for all language translators" { + depends !request_review_image + flags releng, devel + } + + task compose_review_image "Compose of Live Image of Software Review UI for Translation" { + depends !build_trans_software + flags releng + } + + task trans_software_review "Review and correct software translation in built UI" { + depends !build_trans_software {gaplength 1d} + length 6d + flags translation + } + + task trans_software_rebuild2 "Remind f-dev-announce to Rebuild All Translated Packages" { + depends !trans_software_review + flags translation + } + + # Should land one week before the "Beta Change Deadline"--affected by "remind_build_trans_software" + # Double check after adjusting "trans_software" or length of Alpha tasks for a slip + task trans_software_deadline "Software: Translation Deadline (PO Files complete)" { + depends !trans_software_review + flags translation, roadmap, key + } + + # for ical file + task start_trans_rebuild "Software: Start Rebuild all translated packages" { + depends !trans_software_deadline + flags devel + } + + task trans_rebuild "Software: Rebuild all translated packages" { + depends !trans_software_deadline + length 5d + flags devel + } + + } #end software_translation + + # Send reminder on Monday before Thursday meeting + task alpha_meeting_reminder "Reminder: Alpha Release Readiness Meeting" { + depends !feature_freeze {gaplength 10d} + flags pm + } + + task alpha_meeting "${content_title} ${major} Alpha Release Readiness Meeting" { + depends !alpha_meeting_reminder {gaplength 3d} + flags releng, pm, quality, docs, design, translation, marketing, web + } + + # land on a Tuesday + task shadow_before_alpha_compose "SHADOW: 1.5 weeks before Alpha Compose" { + precedes !create_alpha_compose {gaplength 8d} + flags hidden + } + + task create_alpha_tc "Create Alpha Test Compose (TC)" { + depends !shadow_before_alpha_compose + flags releng, proto + } + + # test Wed to Wed + task test_alpha_tc "Test Alpha 'Test Compose'" { + depends !create_alpha_tc {gaplength 1d} + length 6d + flags quality, proto + } + + task alpha_kernel_build "Submit Kernel Build for Alpha RC Compose" { + depends !alpha_deadline + flags devel + } + + task alpha_installer_build "Submit Installer Build for Alpha RC Compose" { + depends !alpha_deadline {gaplength 1d} + flags devel + } + + task create_alpha_compose "Compose Alpha Candidate" { + depends !alpha_deadline {gaplength 2d} + flags releng, proto + } + + task test_alpha_candidate "Test Alpha Candidate" { + depends !create_alpha_compose + length 5d + flags quality, proto + } + + # for ical file + task start_stage_alpha "Start Stage & Sync Alpha to Mirrors" { + depends !test_alpha_candidate + flags releng + } + + task notify_mirrors_alpha "Notify Mirrors of ${content_title} ${major} Alpha" { + depends !start_stage_alpha {gaplength 1d} + flags releng + } + + task stage_alpha "Stage & Sync Alpha to Mirrors" { + depends !test_alpha_candidate + length 3d + flags releng, proto + } + + task alpha_export_control "Alpha Export Control Reporting" { + depends !start_stage_alpha {gaplength 1d} + flags releng, pm + } + + task alpha_announce "Create Alpha Announcement (Marketing & Docs)" { + depends !alpha_meeting + length 2d + flags docs, marketing + } + + task alpha_drop "Alpha Public Availability" { + depends !stage_alpha + flags releng, docs, quality, design, pm, proto, devel, key, marketing, roadmap, spins, blocker, infrastructure, fpl + } + + task ambassador_start "FAmSCo heads Ambassador Wide Meetings Preparing For ${content_title} ${major}" { + depends !alpha_drop {gaplength 7d} + length 5d + flags ambassadors + } + + task start_swag "FAmSCo and Regional teams call for Preparation of Media/SWAG" { + depends !alpha_drop {gaplength 7d} + flags ambassadors + } + + task swag_poc "Regional Team Meetings and Select POC for Swag/Media production" { + depends !alpha_drop {gaplength 8d} + length 5d + flags ambassadors + } + + task swag_funding_request "Regional Teams Submit Funding Request For Swag/Media Production" { + depends !alpha_drop {gaplength 8d} + length 5d + flags ambassadors + } + + # this task was proposed by Mike McGrath and to be performed by FES + task nvr_testing "NVR Update Check testing" { + depends !stage_alpha + length 1d + flags quality + } + + # KEY ADJUSTMENT POINT + task alpha_release_notes "Alpha Release Notes" { + + # create for ical + task start_alpha_beats "Start Alpha Beat and Feature Page Review" { + depends !!feature_freeze {gaplength 6d} + flags docs, quality + } + + task validate_beat_writers "Validate Former Beat Writers" { + depends !!feature_freeze + length 5d + flags docs + } + + task recruited_beat_writers "Recruit New Beat Writers" { + depends !validate_beat_writers + length 5d + flags docs + } + + task comb_alpha_beats "Comb Beats and Feature Pages for Alpha" { + depends !start_alpha_beats + length 2d + flags docs, quality + } + + task notify_devel_relnotes "Notify Development About Alpha Release Notes" { + depends !!alpha_deadline + flags docs + } + + # KEY ADJUSTMENT POINT + # Beta release notes depend on this task + # If alpha candidate is not ready on time add extra time for the release notes here + task prep_alpha_notes "Prepare Alpha Release Notes (1 page)" { + depends !comb_alpha_beats + length 6d + flags docs, quality + } + + task post_notes "Post Alpha Release Notes One-Page" { + depends !prep_alpha_notes {gaplength 1d} + flags docs + } + + } #end alpha_release_notes + + + # two days to create web banner + # one day for websites team to add to www.fedoraproject.org + # should be live one day before the release + task alpha_banner "Alpha Release Banner" { + precedes !alpha_drop {gaplength 3d} + + task alpha_create_banner "Create Alpha Website Banner" { + length 2d + flags design + } + + task alpha_publish_banner "Add Alpha Banner to Website" { + length 1d + flags web + } + } + + # KEY ADJUSTMENT POINT + # Three weeks for Alpha Testing + # IF "Beta Deadline" is missed the length of this task is extended-- + # in that case corresponding change needs to be made to "software_translation" task + task test_alpha "Alpha Testing" { + depends !stage_alpha + length 15d + flags quality, proto + } + + task review_bookmarks "Review Firefox Bookmarks For Update" { + depends !stage_alpha + length 5d + flags marketing + } + + task update_bookmarks "Update and Package Firefox Bookmarks" { + depends !review_bookmarks + length 2d + flags marketing + } + + task tag_bookmarks "Tag Updated Bookmarks Package for ${content_title} ${major}" { + depends !update_bookmarks + flags marketing + } + + # Explicit task to mark end of alpha + # Also permits subsequent tasks to cleanly depend on it using "precedes" (because it is zero length) + task alpha_end "End of Alpha Testing" { + depends !test_alpha + flags quality + } + + task beta_marketing_notes "Marketing: Beta One Page Release Notes" { + depends !alpha_end {gaplength 5d} + length 5d + flags marketing + } + + } + + task beta "Beta Release" { + + # KEY ADJUSTMENT POINT--if the Alpha slips, make sure the blocker meeting + # tasks continue to line up correctly + # Once the Alpha is staged, start holding Blocker meetings for the Beta + + task remind_beta_blocker1 "Reminder: Beta Blocker Meeting (${content}${major}beta) #1" { + depends !!alpha.create_alpha_compose {gaplength 9d } + flags pm + } + + task beta_blocker1 "Beta Blocker Meeting (${content}${major}beta) #1" { + depends !!alpha.stage_alpha {gaplength 3d } + flags quality, releng, devel, pm, blocker + } + + task beta_releng_tickets "File All Release Engineering Tickets for ${content_title} ${major} Beta" { + depends !!alpha.stage_alpha {gaplength 2d } + flags releng + } + + task remind_beta_blocker2 "Reminder: Beta Blocker Meeting (${content}${major}beta) #2" { + depends !beta_blocker1 {gaplength 3d} + flags pm + } + + task beta_blocker2 "Beta Blocker Meeting (${content}${major}beta) #2" { + depends !beta_blocker1 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + # raise awareness one week before Beta compose + task daily_beta_blocker "Daily Review & Notification of Open Beta Blocker Bugs" { + depends !beta_blocker2 {gaplength 1d} + length 4d + flags releng, quality, devel, pm, blocker + } + + task remind_beta_blocker3 "Reminder: Beta Blocker Meeting (${content}${major}beta) #3" { + depends !beta_blocker2 {gaplength 3d} + flags pm + } + + task beta_blocker3 "Beta Blocker Meeting (${content}${major}beta) #3" { + depends !beta_blocker2 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + task remind_beta_blocker4 "Reminder: Beta Blocker Meeting (${content}${major}beta) #4" { + depends !beta_blocker3 {gaplength 3d} + flags pm + } + + task beta_blocker4 "Beta Blocker Meeting (${content}${major}beta) #4" { + depends !beta_blocker3 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + # Create anchor one week before for Beta Deadline + task shadow_beta_deadline "SHADOW: one week before Beta Deadline" { + precedes !beta_deadline {gaplength 6d} + flags hidden + } + + task remind_beta_deadline "Remind Beta Deadline in 1 week" { + depends !shadow_beta_deadline + flags pm + } + + task remind_final_features "Remind Features 100% Complete in 1 week" { + depends !shadow_beta_deadline + flags pm + } + + task beta_spins_ks "Build spin-kickstarts package from master" { + depends !shadow_beta_deadline + flags spins + } + + task coordinate_swag_design "FAmSCo Coordinate Media/Swag/Poster artwork with Design team" { + depends !shadow_beta_deadline {gaplength 5d} + length 10d + flags ambassadors + } + + # Two weeks before the public Beta Release + task beta_deadline "Beta Change Deadline" { + depends !!alpha.test_alpha + flags releng, docs, quality, pm, proto, devel, key, marketing, spins, roadmap + } + + task feature_complete "Features 100% Complete Deadline" { + depends !!alpha.test_alpha + flags releng, docs, quality, pm, proto, devel, key, marketing, roadmap, fpl + } + + # KEY ADJUSTMENT POINT--manually adjust if length of time before Beta ships changes + task beta_infrastructure_freeze "Beta Infrastructure Change Freeze" { + depends !!alpha.test_alpha + length 10d + flags infrastructure, releng + } + + task announce_beta_deadline "Announce Beta Deadline & Feature Complete" { + depends !!alpha.test_alpha + flags pm + } + + task final_feature_fesco "Deliver features < 100% to FESCo" { + depends !beta_deadline {gaplength 1d} + flags pm + } + + task brief_ambassadors "Brief Ambassadors on upcoming release" { + depends !beta_deadline {gaplength 5d} + length 5d + flags marketing + } + + # The Release Slogan is created by the Marketing team based on + # the initial artwork theme. The Design Team needs to know + # the slogan to create the release banners + + # prepare 6 weeks before GA (2 weeks of work) + # go live 1 month before GA + # KEY ADJUSTMENT POINT + task create_countdown "Create Count Down Graphic" { + depends !beta_deadline + length 10d + flags design + } + + task publish_countdown "Publish Count Down Graphic" { + depends !create_countdown + length 1d + flags web + } + + task beta_release_notes "Beta Release Notes" { + + task unclaimed_beats "Write Unclaimed Wiki Beats" { + depends !!!alpha.alpha_drop + length 6d + flags docs + } + + task port_wiki_publican "Port Wiki to Publican" { + depends !unclaimed_beats {gaplength 1d} + length 3d + flags docs + } + + task remind_trans_beta_notes "Remind Translation: Beta Rel Notes POT Coming" { + depends !unclaimed_beats + flags docs + } + + task start_release_notes_pot1 "Start nightly POT files all fed-rel-notes.rpm content" { + depends !port_wiki_publican {gaplength 1d} + flags docs + } + + task release_notes_pot1 "Generate nightly POT files all fed-rel-notes.rpm content" { + depends !port_wiki_publican {gaplength 1d} + length 13d + flags docs + } + + task remind_devel_beta_notes"Remind announce-list & f-devel-announce: Wiki Freeze" { + depends !unclaimed_beats {gaplength 1d} + flags docs + } + + task beta_wiki_freeze "Wiki Freeze: Beta Release Notes" { + depends !remind_devel_beta_notes {gaplength 2d} + flags docs + } + + task trans_release_notes "Translate Beta Release Notes" { + depends !port_wiki_publican {gaplength 1d} + length 14d + flags translation + } + + # KEY ADJUSTMENT POINT + task build_trans_review "Ongoing build translation review htmls" { + depends !beta_wiki_freeze + length 5d + flags docs + } + + # KEY ADJUSTMENT POINT + task trans_review_beta "Review and correct Beta Release Notes (daily buids html)" { + depends !beta_wiki_freeze + length 5d + flags translation + } + + task trans_release_notes_deadline "Translation Deadline: Beta Release Notes (PO Files complete)" { + depends !trans_review_beta + flags translation, docs + } + + task build_beta_relnotes "Build f-r-n.rpm and Push to updates-candidate" { + depends !trans_release_notes_deadline + length 2d + flags docs, translation + } + + task final_release_notes_reminder "Reminder: Send Project Wide-Final Release Notes Deadlines" { + depends !!beta_deadline {gaplength 7d} + flags docs + } + + # one day before release which is 2D after meeting + task web_notes "Build and Post Beta release-notes to docs.fedoraproject.org" { + depends !!beta_meeting {gaplength 2d} + flags docs + } + + # one day before release which is 2D after meeting + task tech_web_notes "Build and Post Fedora Technical Notes to docs.fedoraproject.org" { + depends !!beta_meeting {gaplength 2d} + flags docs + } + + } # end beta_release_notes + + + task splash_deadline "Deadline: Beta Splash Screens" { + depends !!alpha.finalize_splash_screens + flags design + } + + task package_final_splash "Package: Beta Splash Screens" { + depends !!alpha.finalize_splash_screens + length 2d + flags design + } + + task package_beta_wallpaper "Package: Beta Wallpaper"{ + depends !!alpha.beta_wallpaper + length 2d + flags design + } + + task package_supplemental_wallpaper "Package: Supplemental Wallpaper"{ + depends !!alpha.beta_wallpaper + flags design + } + + task beta_meeting_announce "Announce: Beta Release Readiness Meeting" { + + flags pm + } + + # KEY ADJUSTMENT POINT if Beta Deadline changes + task beta_meeting_reminder "Reminder: Beta Release Readiness Meeting" { + depends !beta_deadline {gaplength 4d} + flags pm + } + + task beta_meeting "${content_title} ${major} Beta Release Readiness Meeting" { + depends !beta_meeting_reminder {gaplength 3d} + flags releng, pm, quality, docs, design, translation, marketing, web + } + + task beta_announce "Create Beta Announcement (Docs & Marketing)" { + depends !beta_meeting + length 2d + flags docs, marketing + } + + # placeholder if slip + # task beta_blocker4 "Beta Blocker Day (${content}${major}beta) #4" { + # depends !!beta_blocker3 {gaplength 5d} + # flags releng, quality, devel, pm, blocker + # } + + + task shadow_before_beta_compose "SHADOW: 1.5 weeks before Beta Compose" { + precedes !create_beta_compose {gaplength 9d} # with 'precedes', gaplength pushes date backwards + flags hidden + } + + task beta_installer_build1 "Submit Installer Build for Beta TC Compose" { + depends !shadow_before_beta_compose + flags devel + } + + task create_beta_tc "Create Beta Test Compose (TC)" { + depends !shadow_before_beta_compose {gaplength 2d} + flags releng, proto + } + + task test_beta_tc "Test Beta 'Test Compose'" { + depends !create_beta_tc + length 6d + flags quality, proto + } + + task beta_rawhide_install "Pre-Beta Acceptance Test Plan" { + precedes !create_beta_tc + length 5d + flags quality + } + + task remind_beta_go_not "Reminder: ${content_title} ${major} Beta Go/No-Go Meeting" { + depends !create_beta_compose {gaplength 2d} + flags pm + } + + task beta_go_not "${content_title} ${major} Beta Go/No-Go Meeting (17:00 US Eastern)" { + depends !create_beta_compose {gaplength 4d} + flags releng, quality, devel, pm, proto, blocker + } + + task beta_kernel_build "Submit Kernel Build for Beta RC Compose" { + depends !beta_deadline + flags devel + } + + task beta_installer_build "Submit Installer Build for Beta RC Compose" { + depends !beta_deadline {gaplength 1d} + flags devel + } + + # KEY ADJUSTMENT POINT if Beta release date slips--add more time to this task + task create_beta_compose "Compose Beta Candidate" { + depends !beta_deadline {gaplength 2d} + flags releng, proto + } + + task call_for_events "FAmSCo and Regional Teams Call for Release Events" { + depends !beta_deadline {gaplength 12d} + flags ambassadors + } + + task logistics_budget "Regional Teams Plan Regional Logistics for Release Events & File Budget Requests" { + depends !call_for_events + length 10d + flags ambassadors + } + + task test_beta2 "Test Beta Candidate" { + depends !create_beta_compose + length 5d + flags quality, proto + } + + task start_stage_beta "Start Stage & Sync Beta to Mirrors" { + depends !test_beta2 + flags releng + } + + task notify_mirrors_beta "Notify Mirrors of ${content_title} ${major} Beta" { + depends !start_stage_beta {gaplength 1d} + flags releng + } + + task stage_beta "Stage & Sync Beta to Mirrors" { + depends !test_beta2 + length 3d + flags releng, proto + } + + task beta_export_control "Beta Export Control Reporting" { + depends !start_stage_beta {gaplength 1d} + flags releng, pm + } + + + # two days to create web banner + # one day for websites team to add to www.fedoraproject.org + # should be live one day before the release + task beta_banner "Beta Release Banner" { + precedes !beta_drop {gaplength 3d} + + task beta_create_banner "Create Beta Website Banner" { + length 2d + flags design + } + + task beta_publish_banner "Add Beta Banner to Website" { + length 1d + flags web + } + } + + task shadow_before_beta_drop "SHADOW: One Day before Public Beta release" { + precedes !beta_drop {gaplength 2d} + flags hidden + } + + # Five weeks prior to GA + task beta_drop "Beta Release Public Availability" { + depends !stage_beta + flags docs, releng, quality, pm, translation, proto, design, devel, key, marketing, roadmap, blocker, spins, infrastructure, fpl + } + + task event_deadline "Release Event Submission Deadline" { + depends !logistics_budget {gaplength 1d} + flags ambassadors + } + + task budget_allocations "FAmSCo Review Budget Allocations" { + depends !event_deadline + flags ambassadors + } + + task irc_sessions "FAmSCo Regional IRC town halls" { + depends !beta_drop {gaplength 8d} + length 10d + flags ambassadors + } + + # Three weeks of public testing + # Ends on a Monday and is followed by Final Release Deadline + task beta_test "Beta Testing" { + depends !stage_beta + length 14d + flags quality, proto + } + + task websites_trans_reminder "Reminder to f-websites-list about POT/PO dates in 7 days" { + depends !beta_drop + flags translation, web + } + + # two weeks to create + # should be completely done and ready for hand off to Ambassadors two weeks before GA + # Ambassadors should have made prior arrangements to flip artwork over to media producer + # at this time. + task media "Create DVD/CD label and sleeve artwork" { + # not a "great" place to anchor to as it could move + # needs to start four weeks before GA + depends !beta_drop + length 10d + flags design + } + + task rc_rawhide_install "Pre-RC Acceptance Test Plan" { + depends !stage_beta {gaplength 7d} + length 4d + flags quality + } + + task testmile "End of Beta Testing" { + depends !beta_test + flags quality + } + + } + } # E N D of TestingPhase + + task LaunchPhase "Launch Phase" { + + # four weeks before GA, ambassadors create release posters + # two weeks before GA to art team does final polish to posters + # posters are ready on release day + task release_posters "Release Party Posters" { + depends !!TestingPhase.beta.beta_drop + task create_posters "FAmSCo with Design Team Create Release Party Posters" { + length 10d + flags ambassadors + } + + task polish_poster "Polish/Finalize Release Party Posters" { + depends !create_posters + length 9d + flags design + } + } + + task screenshots "Update and freeze the screenshots page" { + depends !!TestingPhase.beta.stage_beta {gaplength 5d} + length 5d + flags marketing + } + + task final_screenshots "Marketing: Final Screen Shots" { + depends !screenshots + length 5d + flags marketing + } + + task final_marketing_notes "Marketing: Final One Page Release Notes" { + depends !screenshots + length 5d + flags marketing + } + + task briefings "Brief news distribution network" { + depends !screenshots + length 5d + flags marketing + } + + task monitor "Monitor news sites to provide corrections & info" { + depends !screenshots + length 29d + flags marketing + } + + task rc "Release Candidate" { + + task final_releng_tickets "File All Release Engineering Tickets for ${content_title} ${major} GA" { + depends !!!TestingPhase.beta.stage_beta {gaplength 2d } + flags releng + } + + task remind_ga_blocker1 "Reminder: Final Blocker Meeting (${content}${major}blocker) #1" { + depends !!!TestingPhase.beta.create_beta_compose {gaplength 4d} + flags pm + } + + task ga_blocker1 "Final Blocker Meeting (${content}${major}blocker) #1" { + depends !!!TestingPhase.beta.start_stage_beta {gaplength 1d} + flags releng, quality, devel, pm, blocker + } + + task remind_ga_blocker2 "Reminder: Final Blocker Meeting (${content}${major}blocker) #2" { + depends !ga_blocker1 {gaplength 3d} + flags pm + } + + task ga_blocker2 "Final Blocker Meeting (${content}${major}blocker) #2" { + depends !ga_blocker1 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + task remind_ga_blocker3 "Reminder: Final Blocker Meeting (${content}${major}blocker) #3" { + depends !ga_blocker2 {gaplength 3d} + flags pm + } + + task ga_blocker3 "Final Blocker Meeting (${content}${major}blocker) #3" { + depends !ga_blocker2 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + # two days before Final Deadline + task shadow_before_final_deadline "SHADOW: one day before Final Deadline" { + precedes !final_change_deadline {gaplength 2d} + flags hidden + } + + task kernel_debug "Disable Kernel debug and submit new Kernel build for RC" { + depends !shadow_before_final_deadline + flags devel + } + + task final_change_deadline "Final Change Deadline" { + depends !!!TestingPhase.beta.beta_test + flags releng, devel, proto, pm, key, spins + } + + task check_swag "FAmSCo and Regional Teams Meet to Address Unresolved Events/Media/Swag Issues" { + depends !final_change_deadline {gaplength 1d} + flags ambassadors + } + + # one day before Final Deadline + task final_wallpaper "Package Final Wallpaper" { + depends !shadow_before_final_deadline + flags design + } + + # one day before Final Deadline + task final_splash "Package Final Splash Screens" { + depends !shadow_before_final_deadline + flags design + } + + task announce_final_change_deadline "Announce Final Freeze & Implications" { + depends !final_change_deadline + flags pm + } + + # ADJUST FOR NEW RELEASE--EOL Version + task eol_warning "File RHT Eng-ops ticket for Fedora 15 EOL Bugzilla warning" { + depends !final_change_deadline + flags pm + } + + # KEY ADJUSTMENT POINT--manually adjust if length of time before Final release ships changes + task final_infrastructure_freeze "Final Infrastructure Change Freeze" { + depends !!!TestingPhase.beta.beta_test {gaplength 1d} + length 10d + flags infrastructure, releng + } + + task remind_ga_blocker4 "Reminder: Final Blocker Meeting (${content}${major}blocker) #4" { + depends !ga_blocker3 {gaplength 3d} + flags pm + } + + task ga_blocker4 "Final Blocker Meeting (${content}${major}blocker) #4" { + depends !ga_blocker3 {gaplength 5d} + flags releng, quality, devel, pm, blocker + } + + # raise awareness one week before final compose + task daily_ga_blocker "Daily Review & Notification of Open Final Blocker Bugs" { + depends !ga_blocker3 {gaplength 1d} + length 4d + flags releng, quality, devel, pm, blocker + } + + task ga_blocker5 "Final Blocker Meeting (${content}${major}blocker)--Blocks RC Compose" { + depends !ga_blocker4 {gaplength 1d} + flags releng, quality, devel, pm, blocker + } + + task ga_release_notes "Final Release Notes" { + + # One day before public beta release + task final_release_note_wiki_reminder "Reminder to Development: Wiki Freeze in 7 days" { + depends !!!!TestingPhase.beta.shadow_before_beta_drop + flags docs + } + + task prep_ga_notes "Prepare GA Release Notes" { + depends !!!!TestingPhase.beta.beta_drop + flags docs, quality + } + + task ga_release_notes_freeze "String Freeze: GA Release Notes" { + depends !prep_ga_notes {gaplength 4d} + flags docs + } + + task wiki_ga_port "Port diff wiki content to Publican" { + depends !ga_release_notes_freeze + length 5d + flags docs + } + + task remind_trans_ga_notes "Remind Translation: RPM Freeze (no more POTs) in 5 days" { + depends !ga_release_notes_freeze {gaplength 2d} + flags docs + } + + # KEY ADJUSTMENT POINT--if length of Beta changes this task length needs to change too + task ga_pot_trans "Translate Final Release Notes (POT to PO)" { + depends !!!!TestingPhase.beta.beta_release_notes.trans_release_notes_deadline {gaplength 1d} + length 24d + flags translation + } + + task ga_release_notes_pot "Generate GA Release Notes POT files for Translation" { + depends !wiki_ga_port + flags docs + } + + task build_trans_review_final "Build GA release note htmls for Translation" { + depends !ga_release_notes_pot {gaplength 1d} + length 4d + flags docs + } + + task build_ga_trans_review "Review and correct GA Release Notes (daily builds html)" { + depends !ga_release_notes_pot {gaplength 1d} + length 4d + flags docs, translation + } + + task remind_ga_trans_deadline "Remind Translators of GA Release Notes Deadline in 4 days" { + depends !ga_release_notes_pot {gaplength 3d} + flags docs + } + + task ga_release_notes_po "Translation Deadline: GA rel-notes (PO Files complete)" { + depends !ga_pot_trans + flags translation + } + + task ga_release_notes_rpm "Build fedora-release-notes.rpm" { + depends !ga_release_notes_po + length 2d + flags docs + } + + } #end final release notes + + + # Three banners are created for the GA release (based on the Slogan from Marketing) + # 1) large banner--fedoraproject.org front page + # 2) "the release is out, go get it"--fedoraproject.org front page + # 3) release name on start.fedoraproject.org + # banners take one week to complete + # banners should be completed one week before GA + # banners are translated the week up until GA + # translated during the week up until GA + task ga_create_banners "Create Final Release Banners" { + depends !!!TestingPhase.beta.testmile + length 9d + flags design + } + + # Start one day before Final Change Deadline + task create_ga_announce "Create GA Announcement (Docs & Marketing)" { + depends !!!LaunchPhase.rc.shadow_before_final_deadline + length 7d + flags docs, marketing + } + + task translate_ga_announce "GA Announcement available for translation (optional)" { + depends !create_ga_announce + length 5d + flags translation + } + + task ga_publish_banners "Add Final Release Banners to Website" { + depends !ga_create_banners + length 1d + flags web + } + + # web properties need to be updated and translated + # Tasks start at time Beta Release goes out + # http://fedoraproject.org/en/index + # http://fedoraproject.org/en/get-fedora + # http://fedoraproject.org/en/join-fedora + # http://fedoraproject.org/en/get-help + task web_content_update "Update Website Content" { + depends !!!TestingPhase.beta.beta_drop + length 5d + flags web + } + + task web_freeze "Website String Freeze" { + depends !web_content_update + flags web + } + + task web_create_pot "Create Website POT Files" { + depends !web_freeze + length 1d + flags web + } + + task trans_web "Translation Period for Website (POT to PO)" { + depends !web_create_pot + length 9d + flags translation + } + + task review_trans_web "Review and correct Website translations" { + depends !trans_web + length 4d + flags translation, web + } + + task finish_trans_web "Translation Deadline: Websites (POs done)" { + depends !review_trans_web + flags translation + } + + task publish_trans_web "Publish Translations on Website (fedoraproject.org)" { + depends !review_trans_web + length 1d + flags web + } + + task final_meeting_reminder "Reminder: Final Release Readiness Meeting" { + depends !!!TestingPhase.beta.beta_test {gaplength 5d} + flags pm + } + + task ga_meeting "${content_title} ${major} Final Release Readiness Meeting" { + depends !final_meeting_reminder {gaplength 3d} + flags releng, pm, quality, docs, design, marketing, translation, web + } + + task shadow_before_final_compose "SHADOW: one week before RC Compose" { + precedes !start_final_compose {gaplength 8d} + flags hidden + } + + task final_installer_build1 "Submit Installer Build for Final TC Compose" { + depends !shadow_before_final_compose + flags devel + } + + task create_final_tc "Create 'Final' Test Compose (TC)" { + depends !shadow_before_final_compose {gaplength 2d} + flags releng, proto + } + + task test_final_tc "Test 'Final' Test Compose (TC)" { + depends !create_final_tc + length 4d + flags quality, proto + } + + task final_installer_build "Submit Installer Build for Final RC Compose" { + depends !final_change_deadline + flags devel + } + + task start_final_compose "Compose 'Final' RC: DVD, Live, Spins" { + depends !final_change_deadline {gaplength 1d} + length 1d + flags releng, key, roadmap, proto + } + + task early_iso "Regional Teams Obtain Final Release ISOs from Release Engineering for duplication" { + depends !test_final {gaplength 2d} + length 3d + flags ambassadors + } + + task regional_marketing "Regional Coordination with Marketing for Release Events" { + depends !test_final {gaplength 2d} + length 5d + flags ambassadors + } + + task deliver_final "Deliver RC to QA for Testing" { + depends !start_final_compose + flags releng, proto + } + + task test_final "Test 'Final' RC" { + depends !deliver_final + length 4d + flags quality + } + + # for ics file + task start_stage_final "Start Stage & Sync RC to Mirrors" { + depends !test_final {gaplength 2d} + flags releng + } + + task notify_mirrors_final "Notify Mirrors of ${content_title} ${major} Final" { + depends !start_stage_final {gaplength 1d} + flags releng + } + + + task stage_final "Stage & Sync RC to Mirrors" { + depends !test_final {gaplength 2d} + length 3d + flags releng, proto + } + + task package_spins_ks "Branch spin-kickstarts and build package from new branch" { + depends !create_final_tc + flags spins + } + + task freeze_spins_ks "Spins kickstart package Freeze" { + depends !create_final_tc + flags spins + } + + task enable_updates "Enable ${content_title} ${major} Updates" { + depends !!!TestingPhase.beta.beta_test {gaplength 2d} + flags releng + } + + task remind_final_go_not "Reminder: ${content_title} ${major} Final Go/No-Go Meeting" { + depends !start_final_compose {gaplength 1d} + flags pm + } + + # Hold on Tuesday instead of Wednesday (Alpha and Beta)--this provides a little cushion + # if something goes wrong. Mirrors do not have to start sync until Thursday + task final_go_not "${content_title} ${major} Final Go/No-Go Meeting (17:00 US Eastern)" { + depends !start_final_compose {gaplength 4d} + flags releng, quality, docs, pm, proto, blocker + } + + task final_export_control "Final Export Control Reporting" { + depends !start_stage_final {gaplength 1d} + flags releng, pm + } + + # Zero-day tasks should start two Fridays before GA and finish the day before GA + task zero_day_relnotes "Zero Day Release Notes" { + + task shadow_zero_day "SHADOW: Seven work week days before GA" { + precedes !!!final {gaplength 7d} + flags hidden + } + + task zero_day_web "0-Day rel-notes update docs.fp.org" { + depends !shadow_zero_day + length 6d + flags docs + } + + task zero_day_rpm "0-Day rel-notes build updated rpm" { + depends !shadow_zero_day + length 6d + flags docs + } + + task zero_day_pot "0-Day rel-notes generate POT" { + depends !shadow_zero_day + length 6d + flags docs + } + + task zero_day_trans "Translate 0-Day Release Notes" { + depends !shadow_zero_day + length 6d + flags translation + } + + task zero_day_deadline "Translation Deadline: 0-Day (PO Files complete)" { + depends !zero_day_trans + flags translation + } + + task web_post "Add translated zero-day updates to docs.fp.org" { + depends !zero_day_trans + flags docs + } + + task post_tech_notes "Update and post Fedora Technical Notes to docs.fedoraproject.org" { + depends !!!final + flags docs + } + + # Monday after Tuesday GA + task push_updates_rpm "Push updated rel-notes RPMs to Updates repo" { + depends !!!final {gaplength 4d} + flags docs + } + + } # zero_day_relnotes + + } # end of rc task + + task bugzilla_description "Reflect supported versions in Bugzilla product description" { + depends !rc.stage_final + flags pm + } + + task final "Final (GA) Release" { + depends !rc.stage_final + flags quality, releng, docs, design, pm, translation, proto, devel, key, marketing, roadmap, spins, infrastructure, fpl + } + + # ADJUST FOR NEW RELEASE--EOL Version + task remind_eol "Send Email Reminder About Fedora 16 EOL Activities" { + depends !final {gaplength 2d} + flags releng, pm, devel + } + + task event_reports "Hold Release Events and Publish Event Reports" { + depends !final + length 23d + flags ambassadors + } + + task spins_ga_ks "Build new spin-kickstarts package for updates (if necessary)" { + depends !rc.stage_final + flags spins + } + + task marketing_post "Marketing Retrospective" { + depends !final + length 10d + flags marketing + } + } + + # Starting in Fedora 13, the docs group wanted the Guides work to span almost + # the entire release cycle--they don't fit nicely into different phases. + # So we put them all here in their own block. + + # Run from Start until one week before GA + task all_guides "${content_title} ${major} Guides" { + + # Run from Start until "Branch Guides" + task continue_guides_trans "Continue translation of guides in branch of previous release " { + length 70d + flags translation + } + + task test_branch_guides "Test master branches of guides against Alpha and correct" { + depends !!TestingPhase.alpha.stage_alpha + length 10d + flags docs + } + + task branch_guides "Branch Guides" { + depends !test_branch_guides + flags docs + } + + task guides_pot "Create POT files for All Guides" { + depends !branch_guides + flags docs + } + + task notify_trans "Notify trans that new Guide POT files available " { + depends !guides_pot + flags docs + } + + task trans_all_guides "Translate All Guides (POT to PO)" { + depends !guides_pot + flags docs + } + + task publish_draft "Publish draft guides" { + depends !branch_guides + flags docs + } + + task announce_publish_draft "Notify announce-list and f-devel-list draft guides available" { + depends !publish_draft + flags docs + } + + + # ADJUST FOR NEW RELEASE--make sure this task lands one day before GA + task guides_trans "Translate All Guides (POT to PO)" { + depends !guides_pot + length 39d + flags translation + } + + task remind_trans_pot "Reminder to Trans that new POT files are coming for all guides" { + depends !!TestingPhase.alpha.stage_alpha {gaplength 8d} + flags docs + } + + # Wednesday, one week after Beta Change Deadline + task srpm_review "Remind new guide owners SRPM package review" { + depends !!TestingPhase.beta.beta_deadline {gaplength 6d} + flags docs + } + + task shadow_before_beta_deadline "SHADOW: for Friday before Beta deadline" { + precedes !!TestingPhase.beta.beta_deadline {gaplength 1d} + flags hidden + } + + # Friday before Final Change Deadline + task remind_trans "Reminder to Trans that Final Guides POT files are coming" { + depends !shadow_before_beta_deadline + flags docs + } + + task guides_string_freeze "String Freeze All Guides" { + depends !!LaunchPhase.rc.final_change_deadline + flags docs + } + + task generate_final_pot "Generate final POT files for Guides" { + depends !guides_string_freeze + flags docs + } + + task notify_trans_final "Notify Trans of Final Guides POT availability" { + depends !guides_string_freeze + flags docs + } + + # Monday to Friday, two weeks before GA + task build_daily "Daily builds of Final guides for Translation" { + length 9d + depends !!LaunchPhase.rc.final_change_deadline + flags docs + } + + # Monday to Friday, two weeks before GA + task review_daily "Review and correct Final Translated Guides (daily builds html)" { + depends !!LaunchPhase.rc.final_change_deadline + length 9d + flags translation + } + + # Friday before GA + task shadow_guides_trans_deadline "SHADOW: Translation Deadline: All Final Guides" { + precedes !!LaunchPhase.final {gaplength 2d} + flags hidden + } + + # zero duration tasks (milestones/deadlines) need a shadow precedes task so they report correctly + # Also needed for ICS files which only report milestones + task guides_trans_deadline "Translation Deadline: All Final Guides" { + depends !shadow_guides_trans_deadline + flags translation + } + + task test_guides_beta "Test guides against Beta and correct" { + depends !!TestingPhase.beta.beta_drop + length 4d + flags docs + } + + task refresh_pot "Refresh POT files for all guides against Beta" { + depends !test_guides_beta + flags docs + } + + task notify_trans_refresh "Notify trans that POT files updated against Beta" { + depends !refresh_pot + flags docs + } + + task republish_draft "Republish draft guides for Beta" { + depends !test_guides_beta + flags docs + } + + task notify_revised_draft "Notify announce-list and f-devel-list revised draft guides available" { + depends !republish_draft + flags docs + } + + # Friday before GA until the day before GA + task guides_final_build "Final Build All Guides: All Languages" { + depends !srpm_review + length 3d + flags docs + } + + # Day before GA + task shadow_publish_guides "SHADOW: Publish all guides to docs.fp.o (html,html-single,pdf)" { + precedes !!LaunchPhase.final {gaplength 2d} + flags hidden + } + + task publish_guides "Publish all guides to docs.fp.o (html,html-single,pdf)" { + depends !shadow_publish_guides + + flags docs + } + + } # end of "all_guides" + + + # Elections http://fedoraproject.org/wiki/Elections + # Board & FESCo are reelected in every release + # FAmSCo Elections are held once a year near the Halloween release + + # ADJUST FOR NEW RELEASE + task elections "${content_title} ${next_major} Election Coordination" { + + # manually set start date that is five weeks before GA date (on a Tuesday) + # this is cleaner than using 'precedes' + # use 'duration' to make it easier for some tasks to land on weekends + start 2013-09-24 + flags elections, fpl, pm + + # Don't forget to do this! Or else bad things happen. + task remind "Remind advisory-board list of upcoming election schedule" { + } + + task solicit "Solicit volunteers for questionnaire and town halls" { + depends !remind + duration 7d + } + + task wiki_update "Update wiki page https://fedoraproject.org/wiki/Elections with required information" { + depends !solicit + } + + task advertise_elections "Advertise elections schedule and pages" { + depends !solicit + } + + task announce_nominations "FPL/designee announces opening of nominations" { + depends !solicit {gapduration 25d} + } + + task open_questions "Questionnaire wrangler announces opening for questions"{ + depends !announce_nominations + } + + task collect_questions "Collect question on the wiki"{ + depends !announce_nominations + duration 8d + } + + task collect_answers "Candidates write questionnaire answers" { + depends !collect_questions + duration 7d + } + + task announce_town "Town hall wrangler announces schedule for town hall meetings" { + depends !announce_nominations + } + + task question_deadline "Questionnaire answers due from candidates" { + depends !collect_answers + } + + # five days before GA + task present_answers "Wrangler presents questionnaire answers" { + depends !collect_answers {gapduration 1d} + duration 2d + } + + task post_questions "All answers posted to questionnaire page, advertise to voters" { + depends !present_answers + } + + task town_hall "Town hall period" { + depends !post_questions {gapduration 1d} + duration 6d + } + + task voting_application "Finalize Voting Application" { + duration 1d + depends !town_hall + } + + task voting_start "Voting Begins" { + depends !voting_application + } + + task voting "Voting for general elections" { + depends !voting_application + duration 6d + } + + task voting_end "Voting Ends" { + depends !voting + } + + task announce_results "Announce Results" { + depends !voting_end {gapduration 1d} + } + + } # end elections + + # The release naming process for the next release should end three weeks prior + # to the end of the current release + # It is easiest to start this task by hard coding the start date to be 6 weeks before GA + # 2010-09-14 + # 1 week -- collect names + # 1 week --fedora board reviews names + # 2 weeks -- names reviewed by RHT legal + # 1 week -- community vote on names + + # ADJUST FOR NEW RELEASE + task naming "Name the ${content_title} ${next_major} Release" { + start 2013-09-17 # manually set this date + flags pm, fpl + + task gather "Collect ${content_title} ${next_major} Names on Wiki" { + length 5.5d + } + + task board "Board Review of Proposed ${content_title} ${next_major} Names" { + depends !gather + length 3d + } + + task legal "Legal Review" { + depends !board + length 5d + } + + task vote "Voting" { + depends !legal + length 4d + } + + task announce_name "${content_title} ${next_major} Release Name Announced" { + depends !vote {gapduration 1d} + flags design, pm + } + } # end release naming + + + task pr "Public Relations" { + + task video "Creative team videos" { + flags fpl, pr + + task video_schedule "Meet w/Creative to schedule videos" { + precedes !video1.review_spotlight1_video {gaplength 25d} + length 5d + } + + task video1 "Make spotlight video #1" { + task review_spotlight1_video "Review video #1" { + precedes !release_spotlight1_video + length 15d + } + + task release_spotlight1_video "Publish spotlight video #1" { + depends !!!spotlight_feature_blogs.spotlight_feature1.spotlight_feature1_drop + } + } + + task video2 "Make spotlight video #2" { + task review_spotlight2_video "Review video #2" { + precedes !release_spotlight2_video + length 15d + } + + task release_spotlight2_video "Publish spotlight video #2" { + depends !!!spotlight_feature_blogs.spotlight_feature3.spotlight_feature3_drop + } + } + + task release_video "Make release video" { + task review_release_video "Review release video" { + precedes !release_video + length 20d + } + + task release_video "Publish release video" { + depends !!!!LaunchPhase.final + } + } + + } #end video + + task beta_release_blog "Beta press blog entry" { + flags fpl, pr + /** + * By building the final task to be a 0-duration event + * (milestone), depending on another given task date like a + * release date, and having each other task below precede the + * one following, these tasks should auto-adjust to fall on a + * given date. + */ + + + task beta_release_blog_draft "Start drafting Beta blog" { + precedes !beta_release_blog_legal + length 10d + } + + task beta_release_blog_legal "Red Hat PR send Beta blog to Legal" { + precedes !beta_release_blog_intl + length 5d + } + + task beta_release_blog_intl "Red Hat PR send Beta blog to intl-pr list" { + precedes !beta_release_blog_drop + length 6d + } + + task beta_release_blog_drop "Red Hat PR publish and send Beta blog to media contacts" { + depends !!!TestingPhase.beta.beta_drop + } + } + + task spotlight_feature_blogs "Spotlight feature press blogs" { + task spotlight_feature1 "Spotlight feature #1" { + task spotlight_feature1_draft "Draft spotlight #1 blog entry" { + precedes !spotlight_feature1_legal + length 5d + flags fpl, pr + } + + task spotlight_feature1_legal "Red Hat PR send spotlight #1 blog entry draft to legal" { + precedes !spotlight_feature1_drop + length 5d + flags fpl, pr + } + + task shadow_spotlight_feature1 "SHADOW: Three weeks until GA" { + precedes !!!!LaunchPhase.final { gaplength 16d } + length 1d + flags hidden + } + + task spotlight_feature1_drop "Red Hat PR publish spotlight #1 blog entry" { + depends !shadow_spotlight_feature1 + flags fpl, pr + } + + } + + task spotlight_feature2 "Spotlight feature #2" { + task spotlight_feature2_draft "Draft spotlight #2 blog entry" { + precedes !spotlight_feature2_legal + length 5d + flags fpl, pr + } + + task spotlight_feature2_legal "Red Hat PR send spotlight #2 blog entry draft to legal" { + precedes !spotlight_feature2_drop + length 5d + flags fpl, pr + } + + task spotlight_feature2_drop "Red Hat PR publish spotlight #2 blog entry" { + depends !shadow_spotlight_feature2 + flags fpl, pr + } + + task shadow_spotlight_feature2 "SHADOW: Two weeks until GA" { + precedes !!!!LaunchPhase.final { gaplength 11d } + length 1d + flags hidden + } + } + + task spotlight_feature3 "Spotlight feature #3" { + task spotlight_feature3_draft "Draft spotlight #3 blog entry" { + precedes !spotlight_feature3_legal + length 5d + flags fpl, pr + } + + task spotlight_feature3_legal "Red Hat PR send spotlight #3 blog entry draft to legal" { + precedes !spotlight_feature3_drop + length 5d + flags fpl, pr + } + + task spotlight_feature3_drop "Red Hat PR publish spotlight #3 blog entry" { + depends !shadow_spotlight_feature3 + flags fpl, pr + } + + task shadow_spotlight_feature3 "SHADOW: One week until GA" { + precedes !!!!LaunchPhase.final { gaplength 6d } + duration 1d + flags hidden + } + } + } + + task usb_keys_prebriefs "USB Keys and media pre-briefs" { + flags fpl, pr + + task buy_usb_keys "Purchase USB Keys" { + precedes !prepare_usb_keys + length 5d + } + + task assess_press_kit "Check LiveUSB press review sheet for readiness" { + precedes !update_press_one_sheet + length 5d + } + + task update_press_one_sheet "Update LiveUSB press review sheet" { + precedes !send_usb_keys + length 5d + } + + task prepare_usb_keys "Prep USB keys with pre-release" { + precedes !send_usb_keys + length 5d + } + + task send_usb_keys "Send USB keys to Red Hat PR for distribution" { + precedes !media_prebriefs {gaplength 10d} + length 3d + } + + task distribute_usb_keys "Red Hat PR distribute USB keys to media contacts" { + precedes !media_prebriefs {gaplength 7d} + length 5d + } + + task media_prebriefs "Hold media prebrief interviews" { + precedes !!!LaunchPhase.final + length 6d + } + } + + task redhat_com_update "Update Red Hat web site" { + flags fpl, pr + + task web_graphics_discuss "Schedule meeting with Red Hat web team to plan launch" { + length 5d + precedes !web_promo_to_brand + } + + task web_promo_to_brand "Send web promo ideas to Brand" { + length 5d + precedes !web_copy_review + } + + task web_copy_review "Review and update www.redhat.com/Fedora copy" { + length 5d + precedes !web_copy_send_update + } + + task web_copy_send_update "Send updated copy to Web team" { + precedes !rh_web_goes_live { gaplength 11d } + length 5d + } + + task rh_web_goes_live "Red Hat website changes go live" { + depends !!!LaunchPhase.final + } + } + + task ga_press_release "GA press release" { + flags fpl, pr + + task ga_press_release_draft "Start drafting GA press release" { + length 10d + precedes !ga_press_release_legal + } + + task ga_press_release_legal "Red Hat PR send GA press release to Legal" { + length 5d + precedes !ga_press_release_intl + } + + task ga_press_release_intl "Red Hat PR send GA press release to intl-pr list" { + length 6d + precedes !ga_press_release_drop + } + + task ga_press_release_drop "Red Hat PR publish and send GA press release to media contacts" { + depends !!!LaunchPhase.final + } + } + + task ceo_blog "CEO press blog entry" { + flags fpl, pr + + task ceo_prepare_final_rc "Prepare a final RC on USB for CEO" { + precedes !ceo_send_final_rc + length 2d + } + + task ceo_send_final_rc "Send final RC USB key to CEO" { + precedes !ceo_solicit_feedback + length 2d + } + + task ceo_solicit_feedback "Solicit CEO feedback on pre-release" { + precedes !ceo_blog_draft + length 4d + } + + task ceo_blog_draft "Draft CEO blog" { + precedes !ceo_blog_legal + length 3d + } + + task ceo_blog_legal "Red Hat PR send CEO blog to Legal" { + precedes !ceo_blog_drop + length 3d + } + + task ceo_blog_drop "Red Hat PR publish and send CEO blog to media contacts" { + depends !!!LaunchPhase.final {gaplength 1d} + } + } + } + +} # Bitter End + +include "reports.tji" + +tagfile "tags" diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/scrum.tjp b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/scrum.tjp new file mode 100644 index 0000000..5d34cf8 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/scrum.tjp @@ -0,0 +1,141 @@ +project "Scrum Example Project" 2012-02-01 +4m { + now 2012-03-07 +} + +resource r1 "R1" +resource r2 "R2" +resource r3 "R3" + +# This example uses a very simple WBS that groups tasks by sprint. For +# larger projects, a classical WBS that breaks tasks into smaller +# tasks and so on is probably more appropriate. The reports can then +# select the sprint context by date. +task product "Product" { + task s1 "Sprint 1" { + task t1 "T1" { + effort 5d + allocate r1 + } + task t2 "T2" { + effort 3d + allocate r1 + depends !t1 + } + task t3 "T3" { + effort 7d + allocate r1 + } + task t4 "T4" { + effort 4d + allocate r2 + depends !t2 + } + } + task s2 "Sprint 2" { + depends !s1 + task t1 "T1" { + effort 3d + allocate r2 + } + task t2 "T2" { + effort 4d + allocate r3 + depends !t1 + } + task t3 "T3" { + effort 6d + allocate r1 + } + task t4 "T4" { + effort 5d + allocate r3 + depends !t3 + } + task t5 "T5" { + effort 3d + allocate r2 + depends !t1 + } + } + task s3 "Sprint 3" { + depends !s2 + task t1 "T1" { + effort 6d + allocate r1 + depends product.s1.t2 + } + task t2 "T2" { + effort 4d + allocate r3 + depends !t1 + } + task t3 "T3" { + effort 4d + allocate r1 + depends product.s2.t4 + } + task t4 "T4" { + effort 7d + allocate r2 + depends !t3 + } + task t5 "T5" { + effort 5d + allocate r2 + depends !t1 + } + } +} + +navigator menu + +textreport "" { + header -8<- + == Scrum Example Project == + <[navigator id='menu']> + ->8- + formats html + + textreport "" { + columns name, status, effort, resources + + taskreport "Product Backlog" { + } + taskreport "Sprint 1 Backlog" { + taskroot product.s1 + } + taskreport "Sprint 2 Backlog" { + taskroot product.s2 + } + taskreport "Sprint 3 Backlog" { + taskroot product.s3 + } + title "Backlogs" + purge formats + } + + textreport "" { + sorttasks id.up + width 800 + tracereport "Product Burndown" { + columns opentasks + hidetask plan.id != "product" + } + tracereport "Sprint 1 Burndown" { + columns opentasks + hidetask plan.id != "product.s1" + } + tracereport "Sprint 2 Burndown" { + columns opentasks + hidetask plan.id != "product.s2" + } + tracereport "Sprint 3 Burndown" { + columns opentasks + hidetask plan.id != "product.s3" + } + title "Burndown Charts" + purge formats + } + + purge formats +} diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/template.tjp b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/template.tjp new file mode 100644 index 0000000..a98aa2b --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/template.tjp @@ -0,0 +1,338 @@ +/* + * This file contains a project skeleton. It is part of the + * TaskJuggler project management tool. You can use this as a basis to + * start your own project file. + */ +project your_project_id "Your Project Title" 2011-11-11-0:00--0500 +4m { + # Set the default time zone for the project. If not specified, UTC + # is used. + timezone "America/New_York" + # Hide the clock time. Only show the date. + timeformat "%Y-%m-%d" + # Use US format for numbers + numberformat "-" "" "," "." 1 + # Use US financial format for currency values. Don't show cents. + currencyformat "(" ")" "," "." 0 + # Pick a day during the project that will be reported as 'today' in + # the project reports. If not specified, the current day will be + # used, but this will likely be outside of the project range, so it + # can't be seen in the reports. + now 2011-12-24 + # The currency for all money values is the Euro. + currency "USD" + + # You can define multiple scenarios here if you need them. + #scenario plan "Plan" { + # scenario actual "Actual" + #} + + # You can define your own attributes for tasks and resources. This + # is handy to capture additional information about the project that + # is not directly impacting the project schedule, but which you like to + # keep in one place. + #extend task { + # reference spec "Link to Wiki page" + #} + #extend resource { + # text Phone "Phone" + #} +} + +copyright "Claim your rights here" + +# If you have any text block that you need multiple times to describe +# your project, you should define a macro for it. Macros can even have +# variable segments that you can set upon calling the macro. +# +# macro Task [ +# task "A ${1} task" { +# } +# ] +# +# Can be called as +# ${Task "big"} +# to generate +# task "A big task" { +# } + +# You can attach flags to accounts, resources and tasks. These can be +# used to filter out subsets of them during reporting. +flags important, hidden + +# If you want to do budget planning for your project, you need to +# define some accounts. +account cost "Project Cost" { + account dev "Development" + account doc "Documentation" +} +account rev "Customer Payments" + +# The Profit & Loss analysis should be rev - cost accounts. +balance cost rev + +# Define your public holidays here. +vacation "New Year's Day" 2012-01-02 +vacation "Birthday of Martin Luther King, Jr." 2012-01-16 +vacation "Washington's Birthday" 2012-02-20 +vacation "Memorial Day" 2012-05-28 +vacation "Independence Day" 2012-07-04 +vacation "Labor Day" 2012-09-03 +vacation "Columbus Day" 2012-10-08 +vacation "Veterans Day" 2012-11-12 +vacation "Thanksgiving Day" 2012-11-22 +vacation "Christmas Day" 2012-12-25 + +# The daily default rate of all resources. This can be overridden for each +# resource. We specify this so we can do a good calculation of +# the costs of the project. +rate 400.0 + +# This is a set of example resources. +resource r1 "Resource 1" +resource t1 "Team 1" { + managers r1 + resource r2 "Resource 2" + resource r3 "Resource 3" +} + +# This is a resource that does not do any work. +resource s1 "System 1" { + efficiency 0.0 + rate 600.0 +} + +task project "Project" { + task wp1 "Workpackage 1" { + task t1 "Task 1" + task t2 "Task 2" + } + task wp2 "Work package 2" { + depends !wp1 + task t1 "Task 1" + task t2 "Task 2" + } + task deliveries "Deliveries" { + task "Item 1" { + depends !!wp1 + } + task "Item 2" { + depends !!wp2 + } + } +} + +# Now the project has been specified completely. Stopping here would +# result in a valid TaskJuggler file that could be processed and +# scheduled. Here reports will be generated to visualize the +# results. + +navigator navbar { + hidereport 0 +} + +macro TaskTip [ + tooltip istask() -8<- + '''Start: ''' <-query attribute='start'-> + '''End: ''' <-query attribute='end'-> + ---- + '''Resources:''' + + <-query attribute='resources'-> + ---- + '''Precursors: ''' + + <-query attribute='precursors'-> + ---- + '''Followers: ''' + + <-query attribute='followers'-> + ->8- +] + +textreport frame "" { + header -8<- + == TaskJuggler Project Template == + <[navigator id="navbar"]> + ->8- + footer "----" + textreport index "Overview" { + formats html + center '<[report id="overview"]>' + } + + textreport "Status" { + formats html + center -8<- + <[report id="status.dashboard"]> + ---- + <[report id="status.completed"]> + ---- + <[report id="status.ongoing"]> + ---- + <[report id="status.future"]> + ->8- + } + + textreport wps "Work packages" { + textreport wp1 "Work package 1" { + formats html + center '<[report id="wp1"]>' + } + + textreport wp2 "Work package 2" { + formats html + center '<[report id="wp2"]>' + } + } + + textreport "Deliveries" { + formats html + center '<[report id="deliveries"]>' + } + + textreport "ContactList" { + formats html + title "Contact List" + center '<[report id="contactList"]>' + } + textreport "ResourceGraph" { + formats html + title "Resource Graph" + center '<[report id="resourceGraph"]>' + } +} + +# A traditional Gantt chart with a project overview. +taskreport overview "" { + header -8<- + === Project Overview === + + The project is structured into 2 work packages. + + # Specification + # <-reportlink id='frame.wps.wp1'-> + # <-reportlink id='frame.wps.wp2'-> + # Testing + + === Original Project Plan === + ->8- + columns bsi { title 'WBS' }, + name, start, end, effort, cost, + revenue, chart { ${TaskTip} } + # For this report we like to have the abbreviated weekday in front + # of the date. %a is the tag for this. + timeformat "%a %Y-%m-%d" + loadunit days + hideresource 1 + balance cost rev + caption 'All effort values are in man days.' + + footer -8<- + === Staffing === + + All project phases are properly staffed. See [[ResourceGraph]] for + detailed resource allocations. + + === Current Status === + + Some blurb about the current situation. + ->8- +} + +# Macro to set the background color of a cell according to the alert +# level of the task. +macro AlertColor [ + cellcolor plan.alert = 0 "#00D000" # green + cellcolor plan.alert = 1 "#D0D000" # yellow + cellcolor plan.alert = 2 "#D00000" # red +] + +taskreport status "" { + columns bsi { width 50 title 'WBS' }, name { width 150 }, + start { width 100 }, end { width 100 }, + effort { width 100 }, + alert { tooltip plan.journal + != '' "<-query attribute='journal'->" width 150 }, + status { width 150 } + + taskreport dashboard "" { + headline "Project Dashboard (<-query attribute='now'->)" + columns name { title "Task" ${AlertColor} width 200}, + resources { width 200 ${AlertColor} + listtype bullets + listitem "<-query attribute='name'->" + start ${projectstart} end ${projectend} }, + alerttrend { title "Trend" ${AlertColor} width 50 }, + journal { width 350 ${AlertColor} } + journalmode status_up + journalattributes headline, author, date, summary, details + hidetask ~hasalert(0) + sorttasks alert.down, plan.end.up + period %{${now} - 1w} +1w + } + taskreport completed "" { + headline "Already completed tasks" + hidetask ~(plan.end <= ${now}) + } + taskreport ongoing "" { + headline "Ongoing tasks" + hidetask ~((plan.start <= ${now}) & (plan.end > ${now})) + } + taskreport future "" { + headline "Future tasks" + hidetask ~(plan.start > ${now}) + } +} + +# A list of tasks showing the resources assigned to each task. +taskreport wp1 "" { + headline "Work package 1 - Resource Allocation Report" + columns bsi { title 'WBS' }, name, start, end, effort { title "Work" }, + duration, chart { ${TaskTip} scale day width 500 } + timeformat "%Y-%m-%d" + hideresource ~(isleaf() & isleaf_()) + sortresources name.up + taskroot project.wp1 +} +# A list of tasks showing the resources assigned to each task. +taskreport wp2 "" { + headline "Work package 2 - Resource Allocation Report" + columns bsi { title 'WBS' }, name, start, end, effort { title "Work" }, + duration, chart { ${TaskTip} scale day width 500 } + timeformat "%Y-%m-%d" + hideresource ~(isleaf() & isleaf_()) + sortresources name.up + taskroot project.wp2 +} + +# A list of all tasks with the percentage completed for each task +taskreport deliveries "" { + headline "Project Deliverables" + columns bsi { title 'WBS' }, name, start, end, note { width 150 }, complete, + chart { ${TaskTip} } + taskroot project.deliveries + hideresource 1 +} +# A list of all employees with their contact details. +resourcereport contactList "" { + headline "Contact list and duty plan" + columns name, + email { celltext 1 "[mailto:<-email-> <-email->]" }, + managers { title "Manager" }, + chart { scale day } + hideresource ~isleaf() + sortresources name.up + hidetask 1 +} + +# A graph showing resource allocation. It identifies whether each +# resource is under- or over-allocated for. +resourcereport resourceGraph "" { + headline "Resource Allocation Graph" + columns no, name, effort, rate, weekly { ${TaskTip} } + loadunit shortauto + # We only like to show leaf tasks for leaf resources. + hidetask ~(isleaf() & isleaf_()) + sorttasks plan.start.up +} + diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tjp.vim b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tjp.vim new file mode 100644 index 0000000..b063315 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tjp.vim @@ -0,0 +1,764 @@ +" Vim syntax file +" Language: TaskJuggler +" Maintainer: TaskJuggler Developers +" Last Change: 2020-03-14 17:32:05 +0100 +" This file was automatically generated by VimSyntax.rb + +if exists("b:current_syntax") + finish +endif + +setlocal softtabstop=2 +setlocal cindent shiftwidth=2 +setlocal tabstop=2 +setlocal expandtab +setlocal cinoptions=g0,t0,+0,(0,c0,C1,n-2 +setlocal cinwords=account,accountreport,allocate,booking,columns,dailymax,dailymin,date,depends,export,extend,icalreport,include,journalentry,limits,maximum,minimum,monthlymax,monthlymin,navigator,newtask,nikureport,number,precedes,project,reference,resource,resourcereport,richtext,scenario,shift,status,statussheet,statussheetreport,supplement,tagfile,task,taskreport,text,textreport,timesheet,timesheetreport,tracereport,weeklymax,weeklymin +setlocal cinkeys=0{,0},!^F,o,O +setlocal cindent + +syn keyword tjp_macro macro contained +syn keyword tjp_project project contained +syn keyword tjp_supplement supplement contained + +syn keyword tjp_export export contained +hi def link tjp_export Function +syn keyword tjp_nikureport nikureport contained +hi def link tjp_nikureport Function +syn keyword tjp_resource resource contained +hi def link tjp_resource Function +syn keyword tjp_resourcereport resourcereport contained +hi def link tjp_resourcereport Function +syn keyword tjp_scenario scenario contained +hi def link tjp_scenario Function +syn keyword tjp_shift shift contained +hi def link tjp_shift Function +syn keyword tjp_statussheetreport statussheetreport contained +hi def link tjp_statussheetreport Function +syn keyword tjp_task_statussheet task contained +hi def link tjp_task_statussheet Function +syn keyword tjp_task task contained +hi def link tjp_task Function +syn keyword tjp_taskreport taskreport contained +hi def link tjp_taskreport Function +syn keyword tjp_textreport textreport contained +hi def link tjp_textreport Function +syn keyword tjp_timesheetreport timesheetreport contained +hi def link tjp_timesheetreport Function +syn keyword tjp_tracereport tracereport contained +hi def link tjp_tracereport Function +syn keyword tjp_account account contained +hi def link tjp_account Function +syn keyword tjp_accountreport accountreport contained +hi def link tjp_accountreport Function + +syn keyword tjp_allocate allocate contained +hi def link tjp_allocate Type +syn keyword tjp_alternative alternative contained +hi def link tjp_alternative Type +syn keyword tjp_select select contained +hi def link tjp_select Type +syn keyword tjp_persistent persistent contained +hi def link tjp_persistent Type +syn keyword tjp_mandatory mandatory contained +hi def link tjp_mandatory Type +syn keyword tjp_shifts_allocate shifts contained +hi def link tjp_shifts_allocate Type +syn keyword tjp_author author contained +hi def link tjp_author Type +syn keyword tjp_balance balance +hi def link tjp_balance Type +syn keyword tjp_overtime_booking overtime contained +hi def link tjp_overtime_booking Type +syn keyword tjp_sloppy_booking sloppy contained +hi def link tjp_sloppy_booking Type +syn keyword tjp_chargeset chargeset contained +hi def link tjp_chargeset Type +syn keyword tjp_columnid_activetasks activetasks +hi def link tjp_columnid_activetasks Type +syn keyword tjp_columnid_annualleave annualleave +hi def link tjp_columnid_annualleave Type +syn keyword tjp_columnid_annualleavebalance annualleavebalance +hi def link tjp_columnid_annualleavebalance Type +syn keyword tjp_columnid_annualleavelist annualleavelist +hi def link tjp_columnid_annualleavelist Type +syn keyword tjp_columnid_alert alert +hi def link tjp_columnid_alert Type +syn keyword tjp_columnid_alertmessages alertmessages +hi def link tjp_columnid_alertmessages Type +syn keyword tjp_columnid_alertsummaries alertsummaries +hi def link tjp_columnid_alertsummaries Type +syn keyword tjp_columnid_alerttrend alerttrend +hi def link tjp_columnid_alerttrend Type +syn keyword tjp_columnid_balance balance +hi def link tjp_columnid_balance Type +syn keyword tjp_columnid_bsi bsi +hi def link tjp_columnid_bsi Type +syn keyword tjp_columnid_chart chart +hi def link tjp_columnid_chart Type +syn keyword tjp_columnid_children children +hi def link tjp_columnid_children Type +syn keyword tjp_columnid_closedtasks closedtasks +hi def link tjp_columnid_closedtasks Type +syn keyword tjp_columnid_competitorcount competitorcount +hi def link tjp_columnid_competitorcount Type +syn keyword tjp_columnid_competitors competitors +hi def link tjp_columnid_competitors Type +syn keyword tjp_columnid_complete complete +hi def link tjp_columnid_complete Type +syn keyword tjp_columnid_completed completed +hi def link tjp_columnid_completed Type +syn keyword tjp_columnid_criticalness criticalness +hi def link tjp_columnid_criticalness Type +syn keyword tjp_columnid_cost cost +hi def link tjp_columnid_cost Type +syn keyword tjp_columnid_daily daily +hi def link tjp_columnid_daily Type +syn keyword tjp_columnid_directreports directreports +hi def link tjp_columnid_directreports Type +syn keyword tjp_columnid_duration duration +hi def link tjp_columnid_duration Type +syn keyword tjp_columnid_duties duties +hi def link tjp_columnid_duties Type +syn keyword tjp_columnid_efficiency efficiency +hi def link tjp_columnid_efficiency Type +syn keyword tjp_columnid_effort effort +hi def link tjp_columnid_effort Type +syn keyword tjp_columnid_effortdone effortdone +hi def link tjp_columnid_effortdone Type +syn keyword tjp_columnid_effortleft effortleft +hi def link tjp_columnid_effortleft Type +syn keyword tjp_columnid_email email +hi def link tjp_columnid_email Type +syn keyword tjp_columnid_end end +hi def link tjp_columnid_end Type +syn keyword tjp_columnid_flags flags +hi def link tjp_columnid_flags Type +syn keyword tjp_columnid_followers followers +hi def link tjp_columnid_followers Type +syn keyword tjp_columnid_freetime freetime +hi def link tjp_columnid_freetime Type +syn keyword tjp_columnid_freework freework +hi def link tjp_columnid_freework Type +syn keyword tjp_columnid_fte fte +hi def link tjp_columnid_fte Type +syn keyword tjp_columnid_gauge gauge +hi def link tjp_columnid_gauge Type +syn keyword tjp_columnid_headcount headcount +hi def link tjp_columnid_headcount Type +syn keyword tjp_columnid_hierarchindex hierarchindex +hi def link tjp_columnid_hierarchindex Type +syn keyword tjp_columnid_hourly hourly +hi def link tjp_columnid_hourly Type +syn keyword tjp_columnid_id id +hi def link tjp_columnid_id Type +syn keyword tjp_columnid_index index +hi def link tjp_columnid_index Type +syn keyword tjp_columnid_inputs inputs +hi def link tjp_columnid_inputs Type +syn keyword tjp_columnid_journal journal +hi def link tjp_columnid_journal Type +syn keyword tjp_columnid_journal_sub journal_sub +hi def link tjp_columnid_journal_sub Type +syn keyword tjp_columnid_journalmessages journalmessages +hi def link tjp_columnid_journalmessages Type +syn keyword tjp_columnid_journalsummaries journalsummaries +hi def link tjp_columnid_journalsummaries Type +syn keyword tjp_columnid_line line +hi def link tjp_columnid_line Type +syn keyword tjp_columnid_managers managers +hi def link tjp_columnid_managers Type +syn keyword tjp_columnid_maxend maxend +hi def link tjp_columnid_maxend Type +syn keyword tjp_columnid_maxstart maxstart +hi def link tjp_columnid_maxstart Type +syn keyword tjp_columnid_minend minend +hi def link tjp_columnid_minend Type +syn keyword tjp_columnid_minstart minstart +hi def link tjp_columnid_minstart Type +syn keyword tjp_columnid_monthly monthly +hi def link tjp_columnid_monthly Type +syn keyword tjp_columnid_no no +hi def link tjp_columnid_no Type +syn keyword tjp_columnid_name name +hi def link tjp_columnid_name Type +syn keyword tjp_columnid_note note +hi def link tjp_columnid_note Type +syn keyword tjp_columnid_opentasks opentasks +hi def link tjp_columnid_opentasks Type +syn keyword tjp_columnid_pathcriticalness pathcriticalness +hi def link tjp_columnid_pathcriticalness Type +syn keyword tjp_columnid_precursors precursors +hi def link tjp_columnid_precursors Type +syn keyword tjp_columnid_priority priority +hi def link tjp_columnid_priority Type +syn keyword tjp_columnid_quarterly quarterly +hi def link tjp_columnid_quarterly Type +syn keyword tjp_columnid_rate rate +hi def link tjp_columnid_rate Type +syn keyword tjp_columnid_reports reports +hi def link tjp_columnid_reports Type +syn keyword tjp_columnid_resources resources +hi def link tjp_columnid_resources Type +syn keyword tjp_columnid_responsible responsible +hi def link tjp_columnid_responsible Type +syn keyword tjp_columnid_revenue revenue +hi def link tjp_columnid_revenue Type +syn keyword tjp_columnid_scenario scenario +hi def link tjp_columnid_scenario Type +syn keyword tjp_columnid_scheduling scheduling +hi def link tjp_columnid_scheduling Type +syn keyword tjp_columnid_seqno seqno +hi def link tjp_columnid_seqno Type +syn keyword tjp_columnid_sickleave sickleave +hi def link tjp_columnid_sickleave Type +syn keyword tjp_columnid_specialleave specialleave +hi def link tjp_columnid_specialleave Type +syn keyword tjp_columnid_start start +hi def link tjp_columnid_start Type +syn keyword tjp_columnid_status status +hi def link tjp_columnid_status Type +syn keyword tjp_columnid_targets targets +hi def link tjp_columnid_targets Type +syn keyword tjp_columnid_turnover turnover +hi def link tjp_columnid_turnover Type +syn keyword tjp_columnid_wbs wbs +hi def link tjp_columnid_wbs Type +syn keyword tjp_columnid_unpaidleave unpaidleave +hi def link tjp_columnid_unpaidleave Type +syn keyword tjp_columnid_weekly weekly +hi def link tjp_columnid_weekly Type +syn keyword tjp_columnid_yearly yearly +hi def link tjp_columnid_yearly Type +syn keyword tjp_celltext_column celltext contained +hi def link tjp_celltext_column Type +syn keyword tjp_cellcolor_column cellcolor contained +hi def link tjp_cellcolor_column Type +syn keyword tjp_end_column end contained +hi def link tjp_end_column Type +syn keyword tjp_fontcolor_column fontcolor contained +hi def link tjp_fontcolor_column Type +syn keyword tjp_halign_column halign contained +hi def link tjp_halign_column Type +syn keyword tjp_listitem_column listitem contained +hi def link tjp_listitem_column Type +syn keyword tjp_listtype_column listtype contained +hi def link tjp_listtype_column Type +syn keyword tjp_period_column period contained +hi def link tjp_period_column Type +syn keyword tjp_scale_column scale contained +hi def link tjp_scale_column Type +syn keyword tjp_start_column start contained +hi def link tjp_start_column Type +syn keyword tjp_timeformat1 timeformat1 contained +hi def link tjp_timeformat1 Type +syn keyword tjp_timeformat2 timeformat2 contained +hi def link tjp_timeformat2 Type +syn keyword tjp_title_column title contained +hi def link tjp_title_column Type +syn keyword tjp_tooltip_column tooltip contained +hi def link tjp_tooltip_column Type +syn keyword tjp_width_column width contained +hi def link tjp_width_column Type +syn keyword tjp_currencyformat currencyformat contained +hi def link tjp_currencyformat Type +syn keyword tjp_details details contained +hi def link tjp_details Type +syn keyword tjp_definitions definitions contained +hi def link tjp_definitions Type +syn keyword tjp_formats_export formats contained +hi def link tjp_formats_export Type +syn keyword tjp_resourceattributes resourceattributes contained +hi def link tjp_resourceattributes Type +syn keyword tjp_scenarios_export scenarios contained +hi def link tjp_scenarios_export Type +syn keyword tjp_taskattributes taskattributes contained +hi def link tjp_taskattributes Type +syn keyword tjp_taskroot_export taskroot contained +hi def link tjp_taskroot_export Type +syn keyword tjp_timezone_export timezone contained +hi def link tjp_timezone_export Type +syn keyword tjp_date_extend date contained +hi def link tjp_date_extend Type +syn keyword tjp_number_extend number contained +hi def link tjp_number_extend Type +syn keyword tjp_reference_extend reference contained +hi def link tjp_reference_extend Type +syn keyword tjp_richtext_extend richtext contained +hi def link tjp_richtext_extend Type +syn keyword tjp_text_extend text contained +hi def link tjp_text_extend Type +syn keyword tjp_inherit_extend inherit contained +hi def link tjp_inherit_extend Type +syn keyword tjp_scenariospecific_extend scenariospecific contained +hi def link tjp_scenariospecific_extend Type +syn keyword tjp_fail fail contained +hi def link tjp_fail Type +syn keyword tjp_formats formats contained +hi def link tjp_formats Type +syn keyword tjp_hasalert hasalert contained +hi def link tjp_hasalert Type +syn keyword tjp_isactive isactive contained +hi def link tjp_isactive Type +syn keyword tjp_ischildof ischildof contained +hi def link tjp_ischildof Type +syn keyword tjp_isdependencyof isdependencyof contained +hi def link tjp_isdependencyof Type +syn keyword tjp_isdutyof isdutyof contained +hi def link tjp_isdutyof Type +syn keyword tjp_isfeatureof isfeatureof contained +hi def link tjp_isfeatureof Type +syn keyword tjp_isleaf isleaf contained +hi def link tjp_isleaf Type +syn keyword tjp_ismilestone ismilestone contained +hi def link tjp_ismilestone Type +syn keyword tjp_isongoing isongoing contained +hi def link tjp_isongoing Type +syn keyword tjp_isresource isresource contained +hi def link tjp_isresource Type +syn keyword tjp_isresponsibilityof isresponsibilityof contained +hi def link tjp_isresponsibilityof Type +syn keyword tjp_istask istask contained +hi def link tjp_istask Type +syn keyword tjp_isvalid isvalid contained +hi def link tjp_isvalid Type +syn keyword tjp_treelevel treelevel contained +hi def link tjp_treelevel Type +syn keyword tjp_halign_center center +hi def link tjp_halign_center Type +syn keyword tjp_halign_left left +hi def link tjp_halign_left Type +syn keyword tjp_halign_right right +hi def link tjp_halign_right Type +syn keyword tjp_headline headline contained +hi def link tjp_headline Type +syn keyword tjp_hideaccount hideaccount contained +hi def link tjp_hideaccount Type +syn keyword tjp_hidejournalentry hidejournalentry contained +hi def link tjp_hidejournalentry Type +syn keyword tjp_hideresource hideresource contained +hi def link tjp_hideresource Type +syn keyword tjp_hidetask hidetask contained +hi def link tjp_hidetask Type +syn keyword tjp_icalreport icalreport contained +hi def link tjp_icalreport Type +syn keyword tjp_novevents novevents contained +hi def link tjp_novevents Type +syn keyword tjp_scenario_ical scenario contained +hi def link tjp_scenario_ical Type +syn keyword tjp_accountprefix accountprefix contained +hi def link tjp_accountprefix Type +syn keyword tjp_reportprefix reportprefix contained +hi def link tjp_reportprefix Type +syn keyword tjp_resourceprefix resourceprefix contained +hi def link tjp_resourceprefix Type +syn keyword tjp_taskprefix taskprefix contained +hi def link tjp_taskprefix Type +syn keyword tjp_journalattributes journalattributes contained +hi def link tjp_journalattributes Type +syn keyword tjp_journalentry journalentry contained +hi def link tjp_journalentry Type +syn keyword tjp_alert alert contained +hi def link tjp_alert Type +syn keyword tjp_flags_journalentry flags contained +hi def link tjp_flags_journalentry Type +syn keyword tjp_leaveallowance leaveallowances contained +hi def link tjp_leaveallowance Type +syn keyword tjp_leaves leaves +hi def link tjp_leaves Type +syn keyword tjp_end_limit end contained +hi def link tjp_end_limit Type +syn keyword tjp_period_limit period contained +hi def link tjp_period_limit Type +syn keyword tjp_resources_limit resources contained +hi def link tjp_resources_limit Type +syn keyword tjp_start_limit start contained +hi def link tjp_start_limit Type +syn keyword tjp_dailymax dailymax contained +hi def link tjp_dailymax Type +syn keyword tjp_dailymin dailymin contained +hi def link tjp_dailymin Type +syn keyword tjp_maximum maximum contained +hi def link tjp_maximum Type +syn keyword tjp_minimum minimum contained +hi def link tjp_minimum Type +syn keyword tjp_monthlymax monthlymax contained +hi def link tjp_monthlymax Type +syn keyword tjp_monthlymin monthlymin contained +hi def link tjp_monthlymin Type +syn keyword tjp_weeklymax weeklymax contained +hi def link tjp_weeklymax Type +syn keyword tjp_weeklymin weeklymin contained +hi def link tjp_weeklymin Type +syn keyword tjp_loadunit loadunit contained +hi def link tjp_loadunit Type +syn keyword tjp_logicalexpression @ +hi def link tjp_logicalexpression Type +syn keyword tjp_navigator navigator contained +hi def link tjp_navigator Type +syn keyword tjp_hidereport hidereport contained +hi def link tjp_hidereport Type +syn keyword tjp_timeoff_nikureport timeoff contained +hi def link tjp_timeoff_nikureport Type +syn keyword tjp_numberformat numberformat contained +hi def link tjp_numberformat Type +syn keyword tjp_alertlevels alertlevels contained +hi def link tjp_alertlevels Type +syn keyword tjp_currency currency contained +hi def link tjp_currency Type +syn keyword tjp_dailyworkinghours dailyworkinghours contained +hi def link tjp_dailyworkinghours Type +syn keyword tjp_extend extend contained +hi def link tjp_extend Type +syn keyword tjp_now now contained +hi def link tjp_now Type +syn keyword tjp_markdate markdate contained +hi def link tjp_markdate Type +syn keyword tjp_outputdir outputdir contained +hi def link tjp_outputdir Type +syn keyword tjp_shorttimeformat shorttimeformat contained +hi def link tjp_shorttimeformat Type +syn keyword tjp_timingresolution timingresolution contained +hi def link tjp_timingresolution Type +syn keyword tjp_trackingscenario trackingscenario contained +hi def link tjp_trackingscenario Type +syn keyword tjp_weekstartsmonday weekstartsmonday contained +hi def link tjp_weekstartsmonday Type +syn keyword tjp_weekstartssunday weekstartssunday contained +hi def link tjp_weekstartssunday Type +syn keyword tjp_yearlyworkingdays yearlyworkingdays contained +hi def link tjp_yearlyworkingdays Type +syn keyword tjp_auxdir auxdir +hi def link tjp_auxdir Type +syn keyword tjp_copyright copyright +hi def link tjp_copyright Type +syn keyword tjp_flags flags +hi def link tjp_flags Type +syn keyword tjp_limits limits contained +hi def link tjp_limits Type +syn keyword tjp_projectid projectid +hi def link tjp_projectid Type +syn keyword tjp_projectids projectids +hi def link tjp_projectids Type +syn keyword tjp_rate rate +hi def link tjp_rate Type +syn keyword tjp_vacation vacation +hi def link tjp_vacation Type +syn keyword tjp_purge purge contained +hi def link tjp_purge Type +syn keyword tjp_accountroot accountroot contained +hi def link tjp_accountroot Type +syn keyword tjp_auxdir_report auxdir contained +hi def link tjp_auxdir_report Type +syn keyword tjp_caption caption contained +hi def link tjp_caption Type +syn keyword tjp_center center contained +hi def link tjp_center Type +syn keyword tjp_columns columns contained +hi def link tjp_columns Type +syn keyword tjp_epilog epilog contained +hi def link tjp_epilog Type +syn keyword tjp_flags_report flags contained +hi def link tjp_flags_report Type +syn keyword tjp_footer footer contained +hi def link tjp_footer Type +syn keyword tjp_header header contained +hi def link tjp_header Type +syn keyword tjp_height height contained +hi def link tjp_height Type +syn keyword tjp_journalmode journalmode contained +hi def link tjp_journalmode Type +syn keyword tjp_left left contained +hi def link tjp_left Type +syn keyword tjp_opennodes opennodes contained +hi def link tjp_opennodes Type +syn keyword tjp_prolog prolog contained +hi def link tjp_prolog Type +syn keyword tjp_rawhtmlhead rawhtmlhead contained +hi def link tjp_rawhtmlhead Type +syn keyword tjp_right right contained +hi def link tjp_right Type +syn keyword tjp_scenarios scenarios contained +hi def link tjp_scenarios Type +syn keyword tjp_selfcontained selfcontained contained +hi def link tjp_selfcontained Type +syn keyword tjp_resourceroot resourceroot contained +hi def link tjp_resourceroot Type +syn keyword tjp_taskroot taskroot contained +hi def link tjp_taskroot Type +syn keyword tjp_timezone_report timezone contained +hi def link tjp_timezone_report Type +syn keyword tjp_width width contained +hi def link tjp_width Type +syn keyword tjp_end_report end contained +hi def link tjp_end_report Type +syn keyword tjp_period_report period contained +hi def link tjp_period_report Type +syn keyword tjp_start_report start contained +hi def link tjp_start_report Type +syn keyword tjp_title title contained +hi def link tjp_title Type +syn keyword tjp_email email contained +hi def link tjp_email Type +syn keyword tjp_efficiency efficiency contained +hi def link tjp_efficiency Type +syn keyword tjp_flags_resource flags contained +hi def link tjp_flags_resource Type +syn keyword tjp_booking_resource booking contained +hi def link tjp_booking_resource Type +syn keyword tjp_limits_resource limits contained +hi def link tjp_limits_resource Type +syn keyword tjp_managers managers contained +hi def link tjp_managers Type +syn keyword tjp_rate_resource rate contained +hi def link tjp_rate_resource Type +syn keyword tjp_shifts_resource shifts contained +hi def link tjp_shifts_resource Type +syn keyword tjp_vacation_resource vacation contained +hi def link tjp_vacation_resource Type +syn keyword tjp_rollupaccount rollupaccount contained +hi def link tjp_rollupaccount Type +syn keyword tjp_rollupresource rollupresource contained +hi def link tjp_rollupresource Type +syn keyword tjp_rolluptask rolluptask contained +hi def link tjp_rolluptask Type +syn keyword tjp_active active contained +hi def link tjp_active Type +syn keyword tjp_replace replace contained +hi def link tjp_replace Type +syn keyword tjp_timezone_shift timezone contained +hi def link tjp_timezone_shift Type +syn keyword tjp_vacation_shift vacation contained +hi def link tjp_vacation_shift Type +syn keyword tjp_sortjournalentries sortjournalentries contained +hi def link tjp_sortjournalentries Type +syn keyword tjp_sortaccounts sortaccounts contained +hi def link tjp_sortaccounts Type +syn keyword tjp_sortresources sortresources contained +hi def link tjp_sortresources Type +syn keyword tjp_sorttasks sorttasks contained +hi def link tjp_sorttasks Type +syn keyword tjp_flags_statussheet flags contained +hi def link tjp_flags_statussheet Type +syn keyword tjp_status_statussheet status contained +hi def link tjp_status_statussheet Type +syn keyword tjp_statussheet statussheet contained +hi def link tjp_statussheet Type +syn keyword tjp_summary summary contained +hi def link tjp_summary Type +syn keyword tjp_tagfile tagfile contained +hi def link tjp_tagfile Type +syn keyword tjp_adopt_task adopt contained +hi def link tjp_adopt_task Type +syn keyword tjp_note_task note contained +hi def link tjp_note_task Type +syn keyword tjp_gapduration gapduration contained +hi def link tjp_gapduration Type +syn keyword tjp_gaplength gaplength contained +hi def link tjp_gaplength Type +syn keyword tjp_onend onend contained +hi def link tjp_onend Type +syn keyword tjp_onstart onstart contained +hi def link tjp_onstart Type +syn keyword tjp_period_task period contained +hi def link tjp_period_task Type +syn keyword tjp_booking_task booking contained +hi def link tjp_booking_task Type +syn keyword tjp_charge charge contained +hi def link tjp_charge Type +syn keyword tjp_complete complete contained +hi def link tjp_complete Type +syn keyword tjp_depends depends contained +hi def link tjp_depends Type +syn keyword tjp_duration duration contained +hi def link tjp_duration Type +syn keyword tjp_effort effort contained +hi def link tjp_effort Type +syn keyword tjp_effortdone effortdone contained +hi def link tjp_effortdone Type +syn keyword tjp_effortleft effortleft contained +hi def link tjp_effortleft Type +syn keyword tjp_end end contained +hi def link tjp_end Type +syn keyword tjp_flags_task flags contained +hi def link tjp_flags_task Type +syn keyword tjp_length length contained +hi def link tjp_length Type +syn keyword tjp_limits_task limits contained +hi def link tjp_limits_task Type +syn keyword tjp_maxend maxend contained +hi def link tjp_maxend Type +syn keyword tjp_maxstart maxstart contained +hi def link tjp_maxstart Type +syn keyword tjp_milestone milestone contained +hi def link tjp_milestone Type +syn keyword tjp_minend minend contained +hi def link tjp_minend Type +syn keyword tjp_minstart minstart contained +hi def link tjp_minstart Type +syn keyword tjp_precedes precedes contained +hi def link tjp_precedes Type +syn keyword tjp_priority priority contained +hi def link tjp_priority Type +syn keyword tjp_projectid_task projectid contained +hi def link tjp_projectid_task Type +syn keyword tjp_responsible responsible contained +hi def link tjp_responsible Type +syn keyword tjp_scheduled scheduled contained +hi def link tjp_scheduled Type +syn keyword tjp_scheduling scheduling contained +hi def link tjp_scheduling Type +syn keyword tjp_schedulingmode schedulingmode contained +hi def link tjp_schedulingmode Type +syn keyword tjp_shifts_task shifts contained +hi def link tjp_shifts_task Type +syn keyword tjp_start start contained +hi def link tjp_start Type +syn keyword tjp_timeformat timeformat contained +hi def link tjp_timeformat Type +syn keyword tjp_timesheet timesheet contained +hi def link tjp_timesheet Type +syn keyword tjp_newtask newtask contained +hi def link tjp_newtask Type +syn keyword tjp_shift_timesheet shift contained +hi def link tjp_shift_timesheet Type +syn keyword tjp_task_timesheet task contained +hi def link tjp_task_timesheet Type +syn keyword tjp_timezone timezone contained +hi def link tjp_timezone Type +syn keyword tjp_flags_timesheet flags contained +hi def link tjp_flags_timesheet Type +syn keyword tjp_status_timesheet status contained +hi def link tjp_status_timesheet Type +syn keyword tjp_end_timesheet end contained +hi def link tjp_end_timesheet Type +syn keyword tjp_priority_timesheet priority contained +hi def link tjp_priority_timesheet Type +syn keyword tjp_remaining remaining contained +hi def link tjp_remaining Type +syn keyword tjp_work work contained +hi def link tjp_work Type +syn keyword tjp_warn warn contained +hi def link tjp_warn Type +syn keyword tjp_workinghours_project workinghours contained +hi def link tjp_workinghours_project Type +syn keyword tjp_workinghours_resource workinghours contained +hi def link tjp_workinghours_resource Type +syn keyword tjp_workinghours_shift workinghours contained +hi def link tjp_workinghours_shift Type +syn keyword tjp_aggregate aggregate contained +hi def link tjp_aggregate Type +syn keyword tjp_credits credits contained +hi def link tjp_credits Type +syn keyword tjp_flags_account flags contained +hi def link tjp_flags_account Type + +syn match tjparg contained /\${.*}/ +syn match tjpcomment /#.*$/ +syn match tjpcomment "//.*$" +syn match tjpinclude /include.*$/ +syn match tjpnumber /\s[-+]\?\d\+\(\.\d\+\)\?\([hdwmy]\|min\)\?/ +syn match tjpdate /\s\d\{4}-\d\{1,2}-\d\{1,2}\(-\d\{1,2}:\d\{1,2}\(:\d\{1,2}\)\?\(-[-+]\?\d\{4}\)\?\)\?/ +syn match tjptime /\s\d\{1,2}:\d\d\(:\d\d\)\?/ + +syn cluster tjpcommon contains=tjpcomment,tjpdate,tjptime,tjpstring,tjpnumber +syn region tjpblk_allocate start=/^\s*allocate\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_allocate,tjp_alternative,tjp_select,tjp_persistent,tjp_mandatory,tjp_shifts_allocate contained +syn region tjpblk_export start=/^\s*export\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_export,tjp_definitions,tjp_formats_export,tjp_hideresource,tjp_hidetask,tjp_loadunit,tjp_purge,tjp_end_report,tjp_period_report,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_start_report,tjp_resourceattributes,tjp_rollupresource,tjp_rolluptask,tjp_scenarios_export,tjp_taskattributes,tjp_taskroot_export,tjp_timezone_export +syn region tjpblk_date_extend start=/^\s*date\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_date_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained +syn region tjpblk_number_extend start=/^\s*number\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_number_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained +syn region tjpblk_reference_extend start=/^\s*reference\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_reference_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained +syn region tjpblk_richtext_extend start=/^\s*richtext\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_richtext_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained +syn region tjpblk_text_extend start=/^\s*text\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_text_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained +syn region tjpblk_icalreport start=/^\s*icalreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_icalreport,tjp_hideresource,tjp_hidejournalentry,tjp_hidetask,tjp_end_report,tjp_period_report,tjp_start_report,tjp_rollupresource,tjp_rolluptask,tjp_novevents,tjp_scenario_ical +syn region tjpblk_journalentry start=/^\s*journalentry\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_journalentry,tjp_alert,tjp_author,tjp_flags_journalentry,tjp_summary,tjp_details contained +syn region tjpblk_dailymax start=/^\s*dailymax\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_dailymax,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_dailymin start=/^\s*dailymin\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_dailymin,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_maximum start=/^\s*maximum\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_maximum,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_minimum start=/^\s*minimum\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_minimum,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_monthlymax start=/^\s*monthlymax\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_monthlymax,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_monthlymin start=/^\s*monthlymin\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_monthlymin,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_weeklymax start=/^\s*weeklymax\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_weeklymax,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_weeklymin start=/^\s*weeklymin\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_weeklymin,tjp_end_limit,tjp_period_limit,tjp_resources_limit,tjp_start_limit contained +syn region tjpblk_navigator start=/^\s*navigator\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_navigator,tjp_hidereport +syn region tjpblk_nikureport start=/^\s*nikureport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_nikureport,tjp_formats,tjp_headline,tjp_hideresource,tjp_hidetask,tjp_numberformat,tjp_end_report,tjp_period_report,tjp_start_report,tjp_title,tjp_timeoff_nikureport +syn region tjpblk_extend start=/^\s*extend\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_extend,tjp_date_extend,tjpblk_date_extend,tjp_number_extend,tjpblk_number_extend,tjp_reference_extend,tjpblk_reference_extend,tjp_richtext_extend,tjpblk_richtext_extend,tjp_text_extend,tjpblk_text_extend contained +syn region tjpblk_project start=/^\s*project\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_project,tjp_alertlevels,tjp_currencyformat,tjp_currency,tjp_dailyworkinghours,tjp_extend,tjpblk_extend,tjp_include_project,tjp_journalentry,tjpblk_journalentry,tjp_now,tjp_markdate,tjp_numberformat,tjp_outputdir,tjp_scenario,tjpblk_scenario,tjp_shorttimeformat,tjp_timeformat,tjp_timezone,tjp_timingresolution,tjp_trackingscenario,tjp_weekstartsmonday,tjp_weekstartssunday,tjp_workinghours_project,tjp_yearlyworkingdays +syn region tjpblk_limits start=/^\s*limits\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_limits,tjp_dailymax,tjpblk_dailymax,tjp_dailymin,tjpblk_dailymin,tjp_maximum,tjpblk_maximum,tjp_minimum,tjpblk_minimum,tjp_monthlymax,tjpblk_monthlymax,tjp_monthlymin,tjpblk_monthlymin,tjp_weeklymax,tjpblk_weeklymax,tjp_weeklymin,tjpblk_weeklymin +syn region tjpblk_include_properties start=/^\s*include\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_include_properties,tjp_accountprefix,tjp_reportprefix,tjp_resourceprefix,tjp_taskprefix +syn region tjpblk_columns start=/^\s*columns\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_columns,tjp_celltext_column,tjp_cellcolor_column,tjp_end_column,tjp_fontcolor_column,tjp_halign_column,tjp_listitem_column,tjp_listtype_column,tjp_period_column,tjp_scale_column,tjp_start_column,tjp_timeformat1,tjp_timeformat2,tjp_title_column,tjp_tooltip_column,tjp_width_column contained +syn region tjpblk_resource start=/^\s*resource\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_resource,tjp_email,tjp_journalentry,tjpblk_journalentry,tjp_purge,tjp_resource,tjpblk_resource,tjp_chargeset,tjp_efficiency,tjp_flags_resource,tjp_booking_resource,tjpblk_booking_resource,tjp_fail,tjp_leaveallowance,tjp_leaves,tjp_limits_resource,tjpblk_limits_resource,tjp_managers,tjp_rate_resource,tjp_shifts_resource,tjp_vacation_resource,tjp_warn,tjp_workinghours_resource,tjp_supplement_resource,tjpblk_supplement_resource +syn region tjpblk_supplement_resource start=/^\s*supplement resource\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_supplement_resource,tjp_email,tjp_journalentry,tjpblk_journalentry,tjp_purge,tjp_resource,tjpblk_resource,tjp_chargeset,tjp_efficiency,tjp_flags_resource,tjp_booking_resource,tjpblk_booking_resource,tjp_fail,tjp_leaveallowance,tjp_leaves,tjp_limits_resource,tjpblk_limits_resource,tjp_managers,tjp_rate_resource,tjp_shifts_resource,tjp_vacation_resource,tjp_warn,tjp_workinghours_resource,tjp_supplement_resource,tjpblk_supplement_resource,tjp_supplement contained +syn region tjpblk_resourcereport start=/^\s*resourcereport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_resourcereport,tjp_accountroot,tjp_auxdir_report,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_rawhtmlhead,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width +syn region tjpblk_booking_resource start=/^\s*booking\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_booking_resource,tjp_overtime_booking,tjp_sloppy_booking contained +syn region tjpblk_limits_resource start=/^\s*limits\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_limits_resource,tjp_dailymax,tjpblk_dailymax,tjp_dailymin,tjpblk_dailymin,tjp_maximum,tjpblk_maximum,tjp_minimum,tjpblk_minimum,tjp_monthlymax,tjpblk_monthlymax,tjp_monthlymin,tjpblk_monthlymin,tjp_weeklymax,tjpblk_weeklymax,tjp_weeklymin,tjpblk_weeklymin contained +syn region tjpblk_scenario start=/^\s*scenario\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_scenario,tjp_active,tjp_scenario,tjpblk_scenario contained +syn region tjpblk_shift start=/^\s*shift\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_shift,tjp_shift,tjpblk_shift,tjp_leaves,tjp_replace,tjp_timezone_shift,tjp_vacation_shift,tjp_workinghours_shift +syn region tjpblk_status_statussheet start=/^\s*status\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_status_statussheet,tjp_author,tjp_details,tjp_flags_statussheet,tjp_summary contained +syn region tjpblk_statussheet start=/^\s*statussheet\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_statussheet,tjp_task_statussheet,tjpblk_task_statussheet +syn region tjpblk_statussheetreport start=/^\s*statussheetreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_statussheetreport,tjp_hideresource,tjp_hidetask,tjp_end_report,tjp_period_report,tjp_start_report,tjp_sortresources,tjp_sorttasks +syn region tjpblk_task_statussheet start=/^\s*task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_task_statussheet,tjp_status_statussheet,tjpblk_status_statussheet,tjp_task_statussheet,tjpblk_task_statussheet contained +syn region tjpblk_tagfile start=/^\s*tagfile\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_tagfile,tjp_hideresource,tjp_hidetask,tjp_rollupresource,tjp_rolluptask +syn region tjpblk_task start=/^\s*task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_task,tjp_adopt_task,tjp_journalentry,tjpblk_journalentry,tjp_note_task,tjp_purge,tjp_supplement_task,tjpblk_supplement_task,tjp_task,tjpblk_task,tjp_allocate,tjpblk_allocate,tjp_booking_task,tjpblk_booking_task,tjp_charge,tjp_chargeset,tjp_complete,tjp_depends,tjpblk_depends,tjp_duration,tjp_effort,tjp_effortdone,tjp_effortleft,tjp_end,tjp_flags_task,tjp_fail,tjp_length,tjp_limits_task,tjpblk_limits_task,tjp_maxend,tjp_maxstart,tjp_milestone,tjp_minend,tjp_minstart,tjp_period_task,tjp_precedes,tjpblk_precedes,tjp_priority,tjp_projectid_task,tjp_responsible,tjp_scheduled,tjp_scheduling,tjp_schedulingmode,tjp_shifts_task,tjp_start,tjp_warn +syn region tjpblk_supplement_task start=/^\s*supplement task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_supplement_task,tjp_adopt_task,tjp_journalentry,tjpblk_journalentry,tjp_note_task,tjp_purge,tjp_supplement_task,tjpblk_supplement_task,tjp_task,tjpblk_task,tjp_allocate,tjpblk_allocate,tjp_booking_task,tjpblk_booking_task,tjp_charge,tjp_chargeset,tjp_complete,tjp_depends,tjpblk_depends,tjp_duration,tjp_effort,tjp_effortdone,tjp_effortleft,tjp_end,tjp_flags_task,tjp_fail,tjp_length,tjp_limits_task,tjpblk_limits_task,tjp_maxend,tjp_maxstart,tjp_milestone,tjp_minend,tjp_minstart,tjp_period_task,tjp_precedes,tjpblk_precedes,tjp_priority,tjp_projectid_task,tjp_responsible,tjp_scheduled,tjp_scheduling,tjp_schedulingmode,tjp_shifts_task,tjp_start,tjp_warn,tjp_supplement contained +syn region tjpblk_taskreport start=/^\s*taskreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_taskreport,tjp_accountroot,tjp_auxdir_report,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_rawhtmlhead,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width +syn region tjpblk_booking_task start=/^\s*booking\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_booking_task,tjp_overtime_booking,tjp_sloppy_booking contained +syn region tjpblk_depends start=/^\s*depends\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_depends,tjp_gapduration,tjp_gaplength,tjp_onend,tjp_onstart contained +syn region tjpblk_limits_task start=/^\s*limits\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_limits_task,tjp_dailymax,tjpblk_dailymax,tjp_dailymin,tjpblk_dailymin,tjp_maximum,tjpblk_maximum,tjp_minimum,tjpblk_minimum,tjp_monthlymax,tjpblk_monthlymax,tjp_monthlymin,tjpblk_monthlymin,tjp_weeklymax,tjpblk_weeklymax,tjp_weeklymin,tjpblk_weeklymin contained +syn region tjpblk_precedes start=/^\s*precedes\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_precedes,tjp_gapduration,tjp_gaplength,tjp_onend,tjp_onstart contained +syn region tjpblk_textreport start=/^\s*textreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_textreport,tjp_accountroot,tjp_auxdir_report,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_rawhtmlhead,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width +syn region tjpblk_timesheet start=/^\s*timesheet\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_timesheet,tjp_newtask,tjpblk_newtask,tjp_shift_timesheet,tjp_status_timesheet,tjpblk_status_timesheet,tjp_task_timesheet,tjpblk_task_timesheet +syn region tjpblk_newtask start=/^\s*newtask\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_newtask,tjp_end_timesheet,tjp_priority_timesheet,tjp_remaining,tjp_status_timesheet,tjpblk_status_timesheet,tjp_work contained +syn region tjpblk_task_timesheet start=/^\s*task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_task_timesheet,tjp_end_timesheet,tjp_priority_timesheet,tjp_remaining,tjp_status_timesheet,tjpblk_status_timesheet,tjp_work contained +syn region tjpblk_timesheetreport start=/^\s*timesheetreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_timesheetreport,tjp_hideresource,tjp_hidetask,tjp_end_report,tjp_period_report,tjp_start_report,tjp_sortresources,tjp_sorttasks +syn region tjpblk_tracereport start=/^\s*tracereport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_tracereport,tjp_accountroot,tjp_auxdir_report,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_rawhtmlhead,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width +syn region tjpblk_status_timesheet start=/^\s*status\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_status_timesheet,tjp_details,tjp_flags_timesheet,tjp_summary contained +syn region tjpblk_account start=/^\s*account\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_account,tjp_account,tjpblk_account,tjp_aggregate,tjp_credits,tjp_flags_account +syn region tjpblk_accountreport start=/^\s*accountreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_accountreport,tjp_accountroot,tjp_auxdir_report,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_rawhtmlhead,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width +syn region tjpblk_macro start=/macro\s\+\h\w*\s*\[/ end=/\]$/ transparent fold contains=ALL +syn region tjpstring start=/"/ skip=/\\"/ end=/"/ +syn region tjpstring start=/'/ skip=/\\'/ end=/'/ +syn region tjpstring start=/\s-8<-$/ end=/^\s*->8-/ fold +syn region tjpmlcomment start=+/\*+ end=+\*/+ + +syn sync fromstart +set foldmethod=syntax + +hi def link tjp_macro PreProc +hi def link tjp_supplement Function +hi def link tjp_project Function +hi def link tjpproperty Function +hi def link tjpattribute Type +hi def link tjparg Special +hi def link tjpstring String +hi def link tjpcomment Comment +hi def link tjpmlcomment Comment +hi def link tjpinclude Include +hi def link tjpdate Constant +hi def link tjptime Constant +hi def link tjpnumber Number + +let b:current_syntax = "tjp" + +" Support running tj3 from within vim. Just type ':make your_project.tjp' to +" activate it. +setlocal makeprg=tj3\ --silent + +" Support browsing the man page by typing Shift-k while having the cursor over +" any syntax keyword +setlocal keywordprg=tj3man + +" Remap Ctrl-] to show full ID of property defined in the current +" line. This requires a current ctags file (generated by 'tagfile' +" report') to be present in the directory where vim was started. +map :call ShowFullID() +function! ShowFullID() + let linenumber = line(".") + let filename = bufname("%") + execute "!grep '".filename."\t".linenumber.";' tags|cut -f 1" +endfunction + +augroup TaskJugglerSource + " Remove all trailing white spaces from line ends when saving files + " Note: This overwrites the s mark. + autocmd BufWritePre *.tj[ip] mark s | %s/\s\+$//e | normal `s +augroup END diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/todolist.tjp b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/todolist.tjp new file mode 100644 index 0000000..e7e973e --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/todolist.tjp @@ -0,0 +1,84 @@ +project "My TODO List" 2011-01-01 +5y { + # The now date is only set to keep the reports constant. In a real + # list you would _not_ set a now date. + now 2011-12-20 +} + +task "Errands" { + priority 5 + + task "By some milk" { + end 2011-12-13 + complete 100 + priority 7 + } + task "Pickup Jacket from dry cleaner" { + end 2011-12-18 + complete 0 + note "Smith Dry Cleaners" + } + task "Buy present for wife" { + end 2011-12-23 + note "Have a good idea first" + journalentry 2011-12-10 "Maybe a ring?" + journalentry 2011-12-14 "Too expensive. Some book?" + } +} +task "Long term projects" { + priority 3 + + task "Buy new car" { + end 2011-05-11 + complete 100 + priority 6 + } + task "Build boat" { + end 2013-04-01 + complete 42 + } +} + +macro cellcol [ + cellcolor (plan.end < ${now}) & (plan.gauge = "behind schedule") "#FF0000" + cellcolor plan.gauge = "behind schedule" "#FFFF00" +] + +navigator navbar + +textreport frame "" { + formats html + header -8<- + == My ToDo List for ${today} == + <[navigator id="navbar"]> + ->8- + footer "----" + + columns name, + end { title "Due Date" ${cellcol} }, + complete, + priority, + note, + journal { celltext 1 "" + tooltip 1 "<-query attribute='journal'->" + width 70 } + + taskreport "TODOs due today" { + hidetask (plan.complete >= 100) | (plan.end > %{${now} +1d}) + journalattributes date, headline, summary, details + } + taskreport "TODOs due within a week" { + hidetask (plan.complete >= 100) | (plan.end > %{${now} +1w}) + journalattributes date, headline, summary, details + } + taskreport "All open TODOs" { + hidetask plan.complete >= 100 + journalattributes date, headline, summary, details + } + + taskreport "Completed TODOs" { + hidetask plan.complete < 100 + } + + purge formats +} + diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tutorial.tjp b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tutorial.tjp new file mode 100644 index 0000000..622b3f0 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/examples/tutorial.tjp @@ -0,0 +1,496 @@ +/* + * This file contains an example project. It is part of the + * TaskJuggler project management tool. It uses a made up software + * development project to demonstrate some of the basic features of + * TaskJuggler. Please see the TaskJuggler manual for a more detailed + * description of the various syntax elements. + */ +project acso "Accounting Software" 2002-01-16 +4m { + # Set the default time zone for the project. If not specified, UTC + # is used. + timezone "Europe/Paris" + # Hide the clock time. Only show the date. + timeformat "%Y-%m-%d" + # Use US format for numbers + numberformat "-" "" "," "." 1 + # Use US financial format for currency values. Don't show cents. + currencyformat "(" ")" "," "." 0 + # Pick a day during the project that will be reported as 'today' in + # the project reports. If not specified, the current day will be + # used, but this will likely be outside of the project range, so it + # can't be seen in the reports. + now 2002-03-05-13:00 + # The currency for all money values is the US Dollar. + currency "USD" + + # We want to compare the baseline scenario to one with a slightly + # delayed start. + scenario plan "Plan" { + scenario delayed "Delayed" + } + extend resource { + text Phone "Phone" + } +} + +# This is not a real copyright for this file. It's just used as an example. +copyright "© 2002 Crappy Software, Inc." + +# The daily default rate of all resources. This can be overridden for each +# resource. We specify this, so that we can do a good calculation of +# the costs of the project. +rate 390.0 + +# Register Good Friday as a global holiday for all resources. +leaves holiday "Good Friday" 2002-03-29 +flags team + +# This is one way to form teams +macro allocate_developers [ + allocate dev1 + allocate dev2 + allocate dev3 +] + +# In order to do a simple profit and loss analysis of the project we +# specify accounts. One for the development costs, one for the +# documentation costs, and one account to credit the customer payments +# to. +account cost "Project Cost" { + account dev "Development" + account doc "Documentation" +} +account rev "Payments" +# The Profit&Loss analysis should be rev - cost accounts. +balance cost rev + +resource boss "Paul Henry Bullock" { + email "phb@crappysoftware.com" + Phone "x100" + rate 480 +} +resource dev "Developers" { + managers boss + resource dev1 "Paul Smith" { + email "paul@crappysoftware.com" + Phone "x362" + rate 350.0 + } + resource dev2 "Sébastien Bono" { + email "SBono@crappysoftware.com" + Phone "x234" + } + resource dev3 "Klaus Müller" { + email "Klaus.Mueller@crappysoftware.com" + Phone "x490" + leaves annual 2002-02-01 - 2002-02-05 + } + flags team +} +resource misc "The Others" { + managers boss + resource test "Peter Murphy" { + email "murphy@crappysoftware.com" + Phone "x666" + limits { dailymax 6.4h } + rate 310.0 + } + resource doc "Dim Sung" { + email "sung@crappysoftware.com" + Phone "x482" + rate 300.0 + leaves annual 2002-03-11 - 2002-03-16 + } + + flags team +} + +# Now we specify the work packages. The whole project is described as +# a task that contains subtasks. These subtasks are then broken down +# into smaller tasks and so on. The innermost tasks describe the real +# work and have resources allocated to them. Many attributes of tasks +# are inherited from the enclosing task. This saves you a lot of typing. +task AcSo "Accounting Software" { + + # All work-related costs will be booked to this account unless the + # subtasks specify something different. + chargeset dev + # For the duration of the project we have running cost that are not + # included in the labor cost. + charge 170 perday + responsible boss + + task spec "Specification" { + # The effort to finish this task is 20 man-days. + effort 20d + # Now we use the macro declared above to allocate the resources + # for this task. Because they can work in parallel, they may finish this + # task earlier than in 20 working-days. + ${allocate_developers} + # Each task without subtasks must have a start or an end + # criterion and a duration. For this task we use a reference to a + # milestone defined further below as the start criterion. So this task + # can not start before the specified milestone has been reached. + # References to other tasks may be relative. Each exclamation mark (!) + # means 'in the scope of the enclosing task'. To descent into a task, the + # fullstop (.) together with the id of the tasks have to be specified. + depends !deliveries.start + } + + task software "Software Development" { + + # The software is the most critical task of the project. So we set + # the priority of this task (and all its subtasks) to 1000, the top + # priority. The higher the priority, the more likely the task will + # get the requested resources. + priority 1000 + + # All subtasks depend on the specification task. + depends !spec + + responsible dev1 + task database "Database coupling" { + effort 20d + allocate dev1, dev2 + journalentry 2002-02-03 "Problems with the SQL Libary" { + author dev1 + alert yellow + summary -8<- + We ran into some compatibility problems with the SQL + Library. + ->8- + details -8<- + We have already contacted the vendor and are now waiting for + their advise. + ->8- + } + } + + task gui "Graphical User Interface" { + effort 35d + # This task has taken 5 man-days more than originally planned. + # We record this as well, so that we can generate reports that + # compare the delayed schedule of the project to the original plan. + delayed:effort 40d + depends !database, !backend + allocate dev2, dev3 + # Resource dev2 should only work 6 hours per day on this task. + limits { + dailymax 6h { + resources dev2 + } + } + } + + task backend "Back-End Functions" { + effort 30d + # This task is behind schedule, because it should have been + # finished already. To document this, we specify that the task + # is 95% completed. If nothing is specified, TaskJuggler assumes + # that the task is on schedule and computes the completion rate + # according to the current day and the plan data. + complete 95 + depends !database + allocate dev1, dev2 + } + } + + task test "Software testing" { + + task alpha "Alpha Test" { + # Efforts can not only be specified as man-days, but also as + # man-weeks, man-hours, etc. By default, TaskJuggler assumes + # that a man-week is 5 man-days or 40 man-hours. These values + # can be changed, of course. + effort 1w + # This task depends on a task in the scope of the enclosing + # task's enclosing task. So we need two exclamation marks (!!) + # to get there. + depends !!software + allocate test, dev2 + note "Hopefully most bugs will be found and fixed here." + journalentry 2002-03-01 "Contract with Peter not yet signed" { + author boss + alert red + summary -8<- + The paperwork is stuck with HR and I can't hunt it down. + ->8- + details -8<- + If we don't get the contract closed within the next week, + the start of the testing is at risk. + ->8- + } + } + + task beta "Beta Test" { + effort 4w + depends !alpha + allocate test, dev1 + } + } + + task manual "Manual" { + effort 10w + depends !deliveries.start + allocate doc, dev3 + purge chargeset + chargeset doc + journalentry 2002-02-28 "User manual completed" { + author boss + summary "The doc writers did a really great job to finish on time." + } + } + + task deliveries "Milestones" { + + # Some milestones have customer payments associated with them. We + # credit these payments to the 'rev' account. + purge chargeset + chargeset rev + + task start "Project start" { + # A task that has no duration is a milestone. It only needs a + # start or end criterion. All other tasks depend on this task. + # Here we use the built-in macro ${projectstart} to align the + # start of the task with the above specified project time frame. + start ${projectstart} + # For some reason the actual start of the project got delayed. + # We record this, so that we can compare the planned run to the + # delayed run of the project. + delayed:start 2002-01-20 + # At the beginning of this task we receive a payment from the + # customer. This is credited to the account associated with this + # task when the task starts. + charge 21000.0 onstart + } + + task prev "Technology Preview" { + depends !!software.backend + charge 31000.0 onstart + note "All '''major''' features should be usable." + } + + task beta "Beta version" { + depends !!test.alpha + charge 13000.0 onstart + note "Fully functional, may contain bugs." + } + + task done "Ship Product to Customer" { + # The next line can be uncommented to trigger a warning about + # the project being late. For all tasks, limits for the start and + # end values can be specified. Those limits are checked after the + # project has been scheduled. For all violated limits a warning + # is issued. + # maxend 2002-04-17 + depends !!test.beta, !!manual + charge 33000.0 onstart + note "All priority 1 and 2 bugs must be fixed." + } + } +} + +# Now the project has been specified completely. Stopping here would +# result in a valid TaskJuggler file that could be processed and +# scheduled. But no reports would be generated to visualize the +# results. + +navigator navbar { + hidereport @none +} + +macro TaskTip [ + tooltip istask() -8<- + '''Start: ''' <-query attribute='start'-> + '''End: ''' <-query attribute='end'-> + ---- + '''Resources:''' + + <-query attribute='resources'-> + ---- + '''Precursors: ''' + + <-query attribute='precursors'-> + ---- + '''Followers: ''' + + <-query attribute='followers'-> + ->8- +] + +textreport frame "" { + header -8<- + == Accounting Software Project == + <[navigator id="navbar"]> + ->8- + footer "----" + textreport index "Overview" { + formats html + center '<[report id="overview"]>' + } + + textreport "Status" { + formats html + center -8<- + <[report id="status.dashboard"]> + ---- + <[report id="status.completed"]> + ---- + <[report id="status.ongoing"]> + ---- + <[report id="status.future"]> + ->8- + } + + textreport development "Development" { + formats html + center '<[report id="development"]>' + } + + textreport "Deliveries" { + formats html + center '<[report id="deliveries"]>' + } + + textreport "ContactList" { + formats html + title "Contact List" + center '<[report id="contactList"]>' + } + textreport "ResourceGraph" { + formats html + title "Resource Graph" + center '<[report id="resourceGraph"]>' + } +} + +# A traditional Gantt chart with a project overview. +taskreport overview "" { + header -8<- + === Project Overview === + + The project is structured into 3 phases. + + # Specification + # <-reportlink id='frame.development'-> + # Testing + + === Original Project Plan === + ->8- + columns bsi { title 'WBS' }, + name, start, end, effort, cost, + revenue, chart { ${TaskTip} } + # For this report we like to have the abbreviated weekday in front + # of the date. %a is the tag for this. + timeformat "%a %Y-%m-%d" + loadunit days + hideresource @all + balance cost rev + caption 'All effort values are in man days.' + + footer -8<- + === Staffing === + + All project phases are properly staffed. See [[ResourceGraph]] for + detailed resource allocations. + + === Current Status === + + The project started off with a delay of 4 days. This slightly affected + the original schedule. See [[Deliveries]] for the impact on the + delivery dates. + ->8- +} + +# Macro to set the background color of a cell according to the alert +# level of the task. +macro AlertColor [ + cellcolor plan.alert = 0 "#00D000" # green + cellcolor plan.alert = 1 "#D0D000" # yellow + cellcolor plan.alert = 2 "#D00000" # red +] + +taskreport status "" { + columns bsi { width 50 title 'WBS' }, name { width 150 }, + start { width 100 }, end { width 100 }, + effort { width 100 }, + alert { tooltip plan.journal + != '' "<-query attribute='journal'->" width 150 }, + status { width 150 } + scenarios delayed + + taskreport dashboard "" { + headline "Project Dashboard (<-query attribute='now'->)" + columns name { title "Task" ${AlertColor} width 200}, + resources { width 200 ${AlertColor} + listtype bullets + listitem "<-query attribute='name'->" + start ${projectstart} end ${projectend} }, + alerttrend { title "Trend" ${AlertColor} width 50 }, + journal { width 350 ${AlertColor} } + journalmode status_up + journalattributes headline, author, date, summary, details + hidetask ~hasalert(0) + sorttasks alert.down, delayed.end.up + period %{${now} - 1w} +1w + } + taskreport completed "" { + headline "Already completed tasks" + hidetask ~(delayed.end <= ${now}) + } + taskreport ongoing "" { + headline "Ongoing tasks" + hidetask ~((delayed.start <= ${now}) & (delayed.end > ${now})) + } + taskreport future "" { + headline "Future tasks" + hidetask ~(delayed.start > ${now}) + } +} + +# A list of tasks showing the resources assigned to each task. +taskreport development "" { + scenarios delayed + headline "Development - Resource Allocation Report" + columns bsi { title 'WBS' }, name, start, end, effort { title "Work" }, + duration, chart { ${TaskTip} scale day width 500 } + timeformat "%Y-%m-%d" + hideresource ~(isleaf() & isleaf_()) + sortresources name.up +} + +# A list of all tasks with the percentage completed for each task +taskreport deliveries "" { + headline "Project Deliverables" + columns bsi { title 'WBS' }, name, start, end, note { width 150 }, complete, + chart { ${TaskTip} } + taskroot AcSo.deliveries + hideresource @all + scenarios plan, delayed +} +# A list of all employees with their contact details. +resourcereport contactList "" { + scenarios delayed + headline "Contact list and duty plan" + columns name, + email { celltext 1 "[mailto:<-email-> <-email->]" }, + Phone, + managers { title "Manager" }, + chart { scale day } + hideresource ~isleaf() + sortresources name.up + hidetask @all +} + +# A graph showing resource allocation. It identifies whether each +# resource is under- or over-allocated for. +resourcereport resourceGraph "" { + scenarios delayed + headline "Resource Allocation Graph" + columns no, name, effort, rate, weekly { ${TaskTip} } + loadunit shortauto + # We only like to show leaf tasks for leaf resources. + hidetask ~(isleaf() & isleaf_()) + sorttasks plan.start.up +} + diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/language-configuration.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/language-configuration.json new file mode 100644 index 0000000..e062ca9 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/language-configuration.json @@ -0,0 +1,72 @@ +{ + "comments": { + // symbol used for single line comment. Remove this entry if your language does not support line comments + "lineComment": "#", + // symbols used for start and end a block comment. Remove this entry if your language does not support block comments + "blockComment": [ + "/*", + "*/" + ] + }, + // symbols used as brackets + "brackets": [ + [ + "{", + "}" + ], + [ + "[", + "]" + ], + [ + "(", + ")" + ] + ], + // symbols that are auto closed when typing + "autoClosingPairs": [ + [ + "{", + "}" + ], + [ + "[", + "]" + ], + [ + "(", + ")" + ], + [ + "\"", + "\"" + ], + [ + "'", + "'" + ] + ], + // symbols that can be used to surround a selection + "surroundingPairs": [ + [ + "{", + "}" + ], + [ + "[", + "]" + ], + [ + "(", + ")" + ], + [ + "\"", + "\"" + ], + [ + "'", + "'" + ] + ] +} \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/package-lock.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/package-lock.json new file mode 100644 index 0000000..f8bdfb8 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/package-lock.json @@ -0,0 +1,4092 @@ +{ + "name": "taskjuggler", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "taskjuggler", + "version": "0.0.1", + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/mocha": "^9.1.0", + "@types/node": "14.x", + "@types/vscode": "^1.65.0", + "@typescript-eslint/eslint-plugin": "^5.12.1", + "@typescript-eslint/parser": "^5.12.1", + "@vscode/test-electron": "^2.1.2", + "eslint": "^8.9.0", + "glob": "^7.2.0", + "mocha": "^9.2.1", + "typescript": "^4.5.5" + }, + "engines": { + "vscode": "^1.65.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", + "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/type-utils": "5.13.0", + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", + "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", + "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", + "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", + "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", + "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", + "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", + "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.13.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/@vscode/test-electron": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", + "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.2.0", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "@types/vscode": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", + "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/type-utils": "5.13.0", + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", + "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", + "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", + "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", + "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", + "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", + "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", + "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.13.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "@vscode/test-electron": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", + "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.2.0", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "dev": true + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/package.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/package.json new file mode 100644 index 0000000..c70492a --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/package.json @@ -0,0 +1,72 @@ +{ + "name": "taskjuggler", + "displayName": "Taskjuggler", + "description": "This extension provides support for the project management software Taskjuggler.", + "version": "0.0.1", + "publisher": "felixfoertsch", + "engines": { + "vscode": "^1.65.0" + }, + "categories": [ + "Formatters", + "Programming Languages" + ], + "activationEvents": [ + "workspaceContains:**/*.tjp", + "workspaceContains:**/*.tji", + "onLanguage:taskjuggler", + "onCommand:taskjuggler.helloWorld" + ], + "main": "./out/extension.js", + "contributes": { + "commands": [ + { + "command": "taskjuggler.helloWorld", + "title": "Hello World" + } + ], + "languages": [ + { + "id": "taskjuggler", + "aliases": [ + "Taskjuggler", + "TaskJuggler", + "tjp" + ], + "extensions": [ + ".tjp", + ".tji" + ], + "configuration": "./language-configuration.json" + } + ], + "grammars": [ + { + "language": "taskjuggler", + "scopeName": "source.tjp", + "path": "./syntaxes/tjp.tmLanguage.json" + } + ] + }, + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", + "pretest": "npm run compile && npm run lint", + "lint": "eslint src --ext ts", + "test": "node ./out/test/runTest.js" + }, + "devDependencies": { + "@types/vscode": "^1.65.0", + "@types/glob": "^7.2.0", + "@types/mocha": "^9.1.0", + "@types/node": "14.x", + "@typescript-eslint/eslint-plugin": "^5.12.1", + "@typescript-eslint/parser": "^5.12.1", + "eslint": "^8.9.0", + "glob": "^7.2.0", + "mocha": "^9.2.1", + "typescript": "^4.5.5", + "@vscode/test-electron": "^2.1.2" + } +} \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/extension.ts b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/extension.ts new file mode 100644 index 0000000..a3980f7 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/extension.ts @@ -0,0 +1,38 @@ +'use strict'; +import * as vscode from 'vscode'; + +export function activate(context: vscode.ExtensionContext) { + console.log('Congratulations, your extension "vscode-extension-boilerplate" is now active!'); + + // The command has been defined in the package.json file + // Now provide the implementation of the command with registerCommand + // The commandId parameter must match the command field in package.json + let disposableHelloWorld = vscode.commands.registerCommand( + 'taskjuggler.helloWorld', () => { + // Display a message box to the user + vscode.window.showInformationMessage('Hello World!'); + }); + context.subscriptions.push(disposableHelloWorld); + + var disposableTJP = vscode.languages.registerDocumentFormattingEditProvider( + 'taskjuggler', + formattingEditProvider); + + // vscode.workspace.onDidChangeConfiguration(updateVKBeautify, this, context.subscriptions); + context.subscriptions.push(disposableTJP); +} + +// this method is called when your extension is deactivated +export function deactivate() { } + +const formattingEditProvider = { + provideDocumentFormattingEdits(document: vscode.TextDocument): + vscode.TextEdit[] { + const firstLine = document.lineAt(0); + + // if (firstLine.text !== '42') { + // return [vscode.TextEdit.insert(firstLine.range.start, '42\n')]; + // } + return [vscode.TextEdit.insert(firstLine.range.start, '')]; + } +}; \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/runTest.ts b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/runTest.ts new file mode 100644 index 0000000..27b3ceb --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/runTest.ts @@ -0,0 +1,23 @@ +import * as path from 'path'; + +import { runTests } from '@vscode/test-electron'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + + // The path to test runner + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Download VS Code, unzip it and run the integration test + await runTests({ extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/extension.test.ts b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/extension.test.ts new file mode 100644 index 0000000..4ca0ab4 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/index.ts b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/index.ts new file mode 100644 index 0000000..7029e38 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/src/test/suite/index.ts @@ -0,0 +1,38 @@ +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true + }); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); +} diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/syntaxes/tjp.tmLanguage.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/syntaxes/tjp.tmLanguage.json new file mode 100644 index 0000000..88c8067 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/syntaxes/tjp.tmLanguage.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Taskjuggler", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#keywords" + }, + { + "include": "#strings" + } + ], + "repository": { + "comments": { + "patterns": [ + { + "name": "comment.line.tjp", + "begin": "#", + "end": "\n" + }, + { + "name": "comment.block.tjp", + "begin": "(/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?", + "end": "\\*/" + } + ] + }, + "keywords": { + "patterns": [ + { + "name": "keyword.control.tjp", + "match": "\\b(account|accountreport|allocate|booking|columns|dailymax|dailymin|date|depends|export|extend|icalreport|include|journalentry|limits|maximum|minimum|monthlymax|monthlymin|navigator|newtask|nikureport|number|precedes|project|reference|resource|resourcereport|richtext|scenario|shift|status|statussheet|statussheetreport|supplement|tagfile|task|taskreport|text|textreport|timesheet|timesheetreport|tracereport|weeklymax|weeklymin)\\b" + } + ] + }, + "strings": { + "name": "string.quoted.double.tjp", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "name": "constant.character.escape.tjp", + "match": "\\\\." + } + ] + } + }, + "scopeName": "source.tjp" +} \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/tsconfig.json b/Ideas/Taskjuggler verwendbar machen/vscode-extension/tsconfig.json new file mode 100644 index 0000000..c90bd9e --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "outDir": "out", + "lib": [ + "ES2020" + ], + "sourceMap": true, + "rootDir": "src", + "strict": true, + /* Report error when not all code paths in function return a value. */ + "noImplicitReturns": true, + /* Report errors for fallthrough cases in switch statement. */ + "noFallthroughCasesInSwitch": true, + /* Report errors on unused parameters. */ + "noUnusedParameters": true, + }, + "exclude": [ + "node_modules", + ".vscode-test" + ] +} \ No newline at end of file diff --git a/Ideas/Taskjuggler verwendbar machen/vscode-extension/vsc-extension-quickstart.md b/Ideas/Taskjuggler verwendbar machen/vscode-extension/vsc-extension-quickstart.md new file mode 100644 index 0000000..5d665b7 --- /dev/null +++ b/Ideas/Taskjuggler verwendbar machen/vscode-extension/vsc-extension-quickstart.md @@ -0,0 +1,29 @@ +# Welcome to your VS Code Extension + +## What's in the folder + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension. +* `syntaxes/tjp.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization. +* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets. + +## Get up and running straight away + +* Make sure the language configuration settings in `language-configuration.json` are accurate. +* Press `F5` to open a new window with your extension loaded. +* Create a new file with a file name suffix matching your language. +* Verify that syntax highlighting works and that the language configuration settings are working. + +## Make changes + +* You can relaunch the extension from the debug toolbar after making changes to the files listed above. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. + +## Add more language features + +* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at + +## Install your extension + +* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. +* To share your extension with the world, read on about publishing an extension.