Initial commit with Super Note in obsididian
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.DS_Store
|
||||||
|
**/.DS_Store
|
||||||
|
|
4
obsidian/.eslintrc.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"extends": ["@raycast"]
|
||||||
|
}
|
4
obsidian/.prettierrc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"printWidth": 120,
|
||||||
|
"singleQuote": false
|
||||||
|
}
|
190
obsidian/CHANGELOG.md
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
# Obsidian Changelog
|
||||||
|
|
||||||
|
## [Bugfix for nested bookmarks] - 2024-02-06
|
||||||
|
- Fixes a bug where nested bookmarks would not be displayed correctly in search
|
||||||
|
|
||||||
|
## [Support luxon formats in templates] - 2024-01-30
|
||||||
|
- Support luxon date and time format (e.g. dd, MM, YYYY,...) in templates
|
||||||
|
|
||||||
|
## [Fix Search Media HotKey bug] - 2024-01-26
|
||||||
|
- Checks for defined `searchArgument` in MediaGrid value before filtering
|
||||||
|
|
||||||
|
## [Copy Note Title action] - 2024-01-17
|
||||||
|
- Add `Copy Note Title` action
|
||||||
|
|
||||||
|
## [Bugfixes and cache behavior tweak] - 2023-11-19
|
||||||
|
- Will now skip the cache if the value is an empty array
|
||||||
|
- Fixes a bug where no default application crashes the extension
|
||||||
|
- Fixes a bug where deleting the vault config path can't find the notes
|
||||||
|
|
||||||
|
## [New features and bugfixes] - 2023-10-12
|
||||||
|
- Adds extension setting to open note in default application
|
||||||
|
- Adds quick actions to the Random Note command
|
||||||
|
- Adds support for using {content} in templates
|
||||||
|
- Adds config file name option to override `.obsidian` config file name
|
||||||
|
|
||||||
|
## [Update search starting sort] - 2023-10-12
|
||||||
|
|
||||||
|
- Search now shows the most recent notes first
|
||||||
|
|
||||||
|
## [Fix] - 2023-09-24
|
||||||
|
|
||||||
|
- Filter out vault paths that don't actually exist.
|
||||||
|
|
||||||
|
## [Menubar cache bug fixes] - 2023-09-15
|
||||||
|
- Fixes a bug where the cache fallback would crash the extension
|
||||||
|
|
||||||
|
## [Apply templates on task file name] - 2023-08-5
|
||||||
|
- The Append Task command will now apply template placeholders to file name for dynamic file names
|
||||||
|
|
||||||
|
## [Bug fixes] - 2023-07-20
|
||||||
|
- Fixes and issue where tags as objects would crash the plugin
|
||||||
|
|
||||||
|
## [Add week placeholder] - 2023-07-14
|
||||||
|
|
||||||
|
- Adds a {week} template placeholder (thanks @adamadamsmusic)
|
||||||
|
|
||||||
|
## [Fix] - 2023-06-19
|
||||||
|
|
||||||
|
- Fixed menubar icon for light backgrounds
|
||||||
|
|
||||||
|
## [Updated icons] - 2023-06-15
|
||||||
|
|
||||||
|
- Update extension icons to match the new [logo and brand guidelines](https://obsidian.md/brand)
|
||||||
|
|
||||||
|
## [Append Tasks and Update Bookmarks] - 2023-06-012
|
||||||
|
|
||||||
|
- Update Starred notes to Bookmarks
|
||||||
|
- Add `Append Task` command (thanks @mikejongbloet)
|
||||||
|
|
||||||
|
## [Several Quality of Life Improvements] - 2023-02-05
|
||||||
|
|
||||||
|
- Add `Silent Mode` preference for the `Append to Daily Note Command` which prevents the command from opening the daily note
|
||||||
|
- Unified several preferences to make them more consistent
|
||||||
|
- Automatically exclude files and folders from search that are excluded in Obsidian
|
||||||
|
- Add `Blank Note` preference to `Create Note` command which lets you create a blank note immediately
|
||||||
|
- Add `Create Note` action to `Search Note` command which lets you create a new note from the search results if it doesn't exist yet
|
||||||
|
- Remove `Pinned Notes` command
|
||||||
|
- Add `Starred Notes` command which lists all starred notes of a vault
|
||||||
|
- Update Raycast API to v1.47.0
|
||||||
|
- Rewrote parts of the codebase to improve maintainability
|
||||||
|
|
||||||
|
## [Fix] - 2022-11-29
|
||||||
|
|
||||||
|
- Fixed a bug where command executed with shortcut was not working
|
||||||
|
|
||||||
|
## [Append to Daily Note Command] - 2022-11-23
|
||||||
|
|
||||||
|
- Add `Append to Daily Note Command` which can append text to a daily note. Text can be appended to the end of the note or to a specific heading. It supports all templates. Contributed by @iancanderson.
|
||||||
|
- Fixed dropdown menu preventing search to function in newer Raycast versions
|
||||||
|
- Update to Raycast API v1.44.0
|
||||||
|
|
||||||
|
## [Fix] - 2022-11-18
|
||||||
|
|
||||||
|
- Fixed a bug where the searchbar text didn't update
|
||||||
|
|
||||||
|
## [Small fix] - 2022-10-28
|
||||||
|
|
||||||
|
- Fix command execution with shortcut not working
|
||||||
|
|
||||||
|
## [Copy Code Action, Show Mentioning Notes Action, Tag List, Open URL & More] - 2022-09-14
|
||||||
|
|
||||||
|
- Add `Copy Code` action which either copies a code cell to the clipboard or opens a list to select one of the code cells
|
||||||
|
- Add `Paste Code` action which directly pastes code cells
|
||||||
|
- Add `Show Mentioning Notes` action which shows all notes that mention the selected note
|
||||||
|
- Add tag list to metadata view
|
||||||
|
- Add an `Open URL` entry to metadata view which opens the url specified in the notes YAML frontmatter for `url`
|
||||||
|
- You can now search for mentioning notes in `Search Media` command to find media that has been mentioned in the query note
|
||||||
|
- Minor fixes
|
||||||
|
|
||||||
|
## [Search Media Command, Menu Bar Item, Command Arguments, Custom Icons & More] - 2022-08-15
|
||||||
|
|
||||||
|
- Add `Search Media` command which lets you search for media like images, video, audio or pdfs in your vault
|
||||||
|
- Add `Image Size` preference for `Search Media` command
|
||||||
|
- Add file type filter (`cmd + p`) for `Search Media` command
|
||||||
|
- Add `Quick Look` and `Open in Obsidian` actions for `Search Media` command
|
||||||
|
- Add Menu Bar Item that lets you interact with your pinned notes or open a daily note
|
||||||
|
- Add Command Arguments for `Search Note`, `Search Media` and `Pinned Notes` command for quicker searches
|
||||||
|
- Add `Open in new Pane` action if advanced-uri plugin is installed for Obsidian
|
||||||
|
- Add a custom Obsidian icon for `Open in Obsidian` actions and the new Menu Bar Item
|
||||||
|
- Improve overall performance by caching the vaults content
|
||||||
|
- If full content search is activated in preferences you can now search for paths
|
||||||
|
- Minor fixes
|
||||||
|
|
||||||
|
## [Tag Filter, Markdown Controls for Edit Note, Templates for Append Action & More] - 2022-07-11
|
||||||
|
|
||||||
|
- Add tag filter to filter results in `Search Note` and `Pinned Notes` command by tags (YAML frontmatter and inline)
|
||||||
|
- Add `Random Note` command which opens a random note in Quick Look (all actions available)
|
||||||
|
- `Edit Note` action now supports markdown controls (e.g. `cmd + b` for bold and `cmd + i` for italic)
|
||||||
|
- `Append to Note` and `Append Selected Text to Note` actions now support all templates
|
||||||
|
- Add template preference for both `Append to Note` and `Append Selected Text to Note` actions
|
||||||
|
- Use `{content}` for `Append Selected Text to Note` action
|
||||||
|
- Add templates `{\n}`, `{newline}`, `{nl}` for new line
|
||||||
|
- Add shorter template `{clip}` for clipboard
|
||||||
|
- Add `Default Content` and `Fill Form with Default Values` settings for `Create Note` command
|
||||||
|
- Add `Show in Finder` action for all vault selection lists
|
||||||
|
- Minor fixes
|
||||||
|
|
||||||
|
## [Edit Note Action, Clipboard Template] - 2022-07-01
|
||||||
|
|
||||||
|
- Add `Edit Note` action to `Search Note` and `Pinned Notes` command which lets you edit a note
|
||||||
|
- `Edit Note` action supports templates
|
||||||
|
- Add `Reset Pinned Notes` action for `Pinned Notes` command
|
||||||
|
- Add `Delete Note` action to `Search Note` and `Pinned Notes` command which lets you delete a note
|
||||||
|
- Add `{clipboard}` to available templates
|
||||||
|
- Update store images
|
||||||
|
- Migrate to Raycast API v1.37.0
|
||||||
|
- Minor fixes
|
||||||
|
|
||||||
|
## [Full Content Search, Metadata View, Templates & More] - 2022-06-20
|
||||||
|
|
||||||
|
- Add full content search to `Search Note` and `Pinned Notes` command
|
||||||
|
- Add metadata view for notes in `Search Note` and `Pinned Notes` command
|
||||||
|
- Add templates for `Create Note` command that can be used in the notes name and content
|
||||||
|
- Add `Show in Finder` action to `Search Note`, `Pinned Notes` and `Open Vault` commands
|
||||||
|
- Vaults will now be found automatically
|
||||||
|
- Fix performance issues
|
||||||
|
- Migrate to Raycast API v1.36.0
|
||||||
|
|
||||||
|
## [New command, Detail View & More] - 2022-05-02
|
||||||
|
|
||||||
|
- Add `Pinned Notes` command which lists all pinned notes of a vault
|
||||||
|
- Add `Pin Note` action to `Search Note` command which pins a note
|
||||||
|
- Add `Unpin Note` action to `Search Note` command which unpins a note
|
||||||
|
- Add detail view for notes in `Search Note` and `Pinned Notes` command
|
||||||
|
- Add option to hide LaTeX in Quick Look and detail view
|
||||||
|
- Add customizable folder actions for `Create Note` command (quickly create a note in a folder)
|
||||||
|
- Add option to open note on creation for `Create Note` command
|
||||||
|
- Add option to specify default name for notes without name for `Create Note` command
|
||||||
|
- Commands with only one vault will now trigger directly without prior selection
|
||||||
|
- Minor fixes
|
||||||
|
|
||||||
|
## [New command & Action for Search Command] - 2022-04-01
|
||||||
|
|
||||||
|
- Add `Daily Note` command, opens or creates new daily note
|
||||||
|
- Add `Append Selected Text to Note` action for search command
|
||||||
|
- Restructure entire codebase
|
||||||
|
|
||||||
|
## [Minor Fixes] - 2022-02-10
|
||||||
|
|
||||||
|
- Fix a bug that could cause crashes on new installs
|
||||||
|
- Add better error handeling
|
||||||
|
- Corrected typo in settings
|
||||||
|
|
||||||
|
## [New Command & Actions for Search Command] - 2022-01-18
|
||||||
|
|
||||||
|
- Add `Create Note` command, lets you create new notes
|
||||||
|
- Add `Copy Obsidian URI` action for `Search Note` command
|
||||||
|
- Add `Copy Obsidian markdown link` action for `Search Note` command
|
||||||
|
- Vault path is now a general extension setting
|
||||||
|
- Minor fixes
|
||||||
|
|
||||||
|
## [New Command & Primary Action] - 2022-01-04
|
||||||
|
|
||||||
|
- Add `Open Vault` command, lets you switch quickly between different vaults
|
||||||
|
- Add option to select a primary action for `Search Note` command
|
||||||
|
- Several fixes for faster search times
|
||||||
|
|
||||||
|
## [Add Obsidian] - 2021-12-11
|
||||||
|
|
||||||
|
Initial version
|
21
obsidian/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Marc Julian Schwarz
|
||||||
|
|
||||||
|
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.
|
224
obsidian/README.md
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
<p align="center">
|
||||||
|
<img width=180 src="https://user-images.githubusercontent.com/67844154/164725204-544131bd-60e4-4666-8541-6587f20d7e42.png">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# Obsidian for Raycast
|
||||||
|
|
||||||
|
This is a raycast extension with commands for the note taking and knowledge management app [Obsidian]( https://obsidian.md/). To use it, install the extension from the [Raycast Store](https://www.raycast.com/KevinBatdorf/obsidian), open Raycast Search and type one of the following commands.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
- [Search Note](https://github.com/KevinBatdorf/obsidian-raycast#search-note)
|
||||||
|
- [Actions for Search Note Command](https://github.com/KevinBatdorf/obsidian-raycast#actions-for-search-note-command)
|
||||||
|
- [Quick Look Action](https://github.com/KevinBatdorf/obsidian-raycast#quick-look-action)
|
||||||
|
- [Search Media](https://github.com/KevinBatdorf/obsidian-raycast#search-media)
|
||||||
|
- [Actions for Search Media Command](https://github.com/KevinBatdorf/obsidian-raycast#actions-for-search-media-command)
|
||||||
|
- [Random Notes](https://github.com/KevinBatdorf/obsidian-raycast#random-note)
|
||||||
|
- [Open Vault](https://github.com/KevinBatdorf/obsidian-raycast#open-vault)
|
||||||
|
- [Create Note](https://github.com/KevinBatdorf/obsidian-raycast#create-note)
|
||||||
|
- [Daily Note](https://github.com/KevinBatdorf/obsidian-raycast#daily-note)
|
||||||
|
- [Append to Daily Note](https://github.com/KevinBatdorf/obsidian-raycast#append-to-daily-note)
|
||||||
|
- [Bookmarked Note](https://github.com/KevinBatdorf/obsidian-raycast#bookmarked-notes)
|
||||||
|
- [Obsidian Menu Bar Item](https://github.com/KevinBatdorf/obsidian-raycast#obsidian-menu-bar-item)
|
||||||
|
|
||||||
|
## Search Note
|
||||||
|
|
||||||
|
This command allows for quick access to all of your notes. By default you can search notes by title. Enabeling content search in the commands preferences allows you to search for notes by their content and title. If there doesn't exist a note with the title you searched for you can create a new note with that title right from the command.
|
||||||
|
Use the tag filter in the top right corner to filter notes based on their tags (both YAML frontmatter and inline tags).
|
||||||
|
|
||||||
|
Enabeling `Show Detail` and `Show Metadata` in the extensions preferences will show a sidebar view with the following information:
|
||||||
|
|
||||||
|
- Note content
|
||||||
|
- Character Count
|
||||||
|
- Word Count
|
||||||
|
- Reading Time
|
||||||
|
- Creation Date
|
||||||
|
- File Size
|
||||||
|
- Note Path
|
||||||
|
|
||||||
|
<img width="1000" alt="Search Note Command" src="https://user-images.githubusercontent.com/67844154/178247431-2c8be700-7dca-469d-9c99-cd0fde565524.png">
|
||||||
|
<img width="1000" alt="Search Note Command Tag Filter" src="https://user-images.githubusercontent.com/67844154/178251441-eeb0c4f9-c848-4899-aa12-62aae9ba3094.png">
|
||||||
|
|
||||||
|
### Actions for Search Note command
|
||||||
|
|
||||||
|
It features several actions which you can trigger with these keyboard shortcuts (or search for them with `cmd + k`):
|
||||||
|
|
||||||
|
**Open Note Actions:**
|
||||||
|
Depending on the primary action set in preferences, the keyboard shortcuts can be different.
|
||||||
|
|
||||||
|
- `enter` will open the note in "Quick Look"
|
||||||
|
- `cmd + enter` will open the note in Obsidian
|
||||||
|
- `Open in new Pane` will open the note in a new pane in Obsidian (only for vaults with advanced-uri plugin)
|
||||||
|
|
||||||
|
**Other Actions:**
|
||||||
|
|
||||||
|
- `opt + enter` will open the notes path in Finder
|
||||||
|
- `opt + e` will let you edit the note (supports templates)
|
||||||
|
- `opt + d` will let you delete the note
|
||||||
|
- `opt + a` will let you append text to the note (supports templates)
|
||||||
|
- `opt + s` will append selected text to the note (supports templates)
|
||||||
|
- `opt + c` will copy the notes content to your clipboard
|
||||||
|
- `opt + t` will copy the notes title to your clipboard
|
||||||
|
- `opt + v` will paste the notes content to the app you used before raycast
|
||||||
|
- `opt + l` will copy a markdown link for the note to your clipboard
|
||||||
|
- `opt + u` will copy the obsidian URI for the note to your clipboard (see: [Obsidian URI](https://help.obsidian.md/Advanced+topics/Using+obsidian+URI))
|
||||||
|
- `opt + p` will bookmark a note
|
||||||
|
- `opt + p` will "unbookmark" a bookmarked note
|
||||||
|
- Reload Notes, will reload notes from the vault (useful if you have just created a new note)
|
||||||
|
|
||||||
|
The primary action (`enter`) can be changed in the extensions preferences.
|
||||||
|
|
||||||
|
<img width="1000" alt="Search Note Command actions" src="https://user-images.githubusercontent.com/67844154/178247612-315091e4-aeec-4944-880c-d4106c493dee.png">
|
||||||
|
<img width="1000" alt="Search Note Command actions" src="https://user-images.githubusercontent.com/67844154/178247714-0d0b48a4-ae43-4a08-8e63-246634a8d421.png">
|
||||||
|
|
||||||
|
### Quick Look Action
|
||||||
|
|
||||||
|
The Quick Look actions will open your note in Raycast itself.
|
||||||
|
|
||||||
|
<img width="1000" alt="obsidian-5" src="https://user-images.githubusercontent.com/67844154/178248667-6b90bd65-0861-41e4-b68c-256f30d89d1d.png">
|
||||||
|
|
||||||
|
## Search Media
|
||||||
|
|
||||||
|
This command allows for quick access to all of the media (images, video, audio and PDFs) in your vaults.
|
||||||
|
Use the type filter in the top right corner (`cmd + p`) to filter the media by its type / file extension.
|
||||||
|
|
||||||
|
### Actions for Search Media command
|
||||||
|
|
||||||
|
It features several actions which you can trigger with these keyboard shortcuts (or search for them with `cmd + k`):
|
||||||
|
|
||||||
|
- `enter` will open the file in Apples Preview app
|
||||||
|
- `cmd + enter` will open the file in Obsidian
|
||||||
|
|
||||||
|
<img width="1000" alt="obsidian-10" src="https://user-images.githubusercontent.com/67844154/180800668-08706bf6-4c17-4aca-b5fa-e4c420d04eb6.png">
|
||||||
|
|
||||||
|
## Random Note
|
||||||
|
|
||||||
|
This command will open a random note of a previously selected vault in Quick Look where all actions from the `Search Note` command are available.
|
||||||
|
|
||||||
|
## Open Vault
|
||||||
|
|
||||||
|
This command will show a list of all of your Obsidian vaults which you can open by pressing `enter`.
|
||||||
|
Actions that you can trigger with a keyboard shortcut:
|
||||||
|
|
||||||
|
- `cmd + enter` will open the vaults folder in the Finder app
|
||||||
|
|
||||||
|
## Create Note
|
||||||
|
|
||||||
|
This command lets you create new notes on the fly by entering a name, optionally a path to a subfolder in your vault and some content. You can use the tag picker to add tags to the notes YAML frontmatter.
|
||||||
|
|
||||||
|
Both the note name and note content support these templates:
|
||||||
|
|
||||||
|
- `{date}`
|
||||||
|
- `{time}`
|
||||||
|
- `{year}`
|
||||||
|
- `{month}`
|
||||||
|
- `{week}`
|
||||||
|
- `{day}`
|
||||||
|
- `{hour}`
|
||||||
|
- `{minute}`
|
||||||
|
- `{second}`
|
||||||
|
- `{millisecond}`
|
||||||
|
- `{timestamp}`, `{zettelkastenID}`
|
||||||
|
- `{clipboard}`, `{clip}`
|
||||||
|
- `{\n}`, `{nl}`, `{newline}`
|
||||||
|
|
||||||
|
But also the table of tokens defined in the [luxon documentation](https://moment.github.io/luxon/#/formatting?id=table-of-tokens) (such as dd, MM, YYYY,...).
|
||||||
|
|
||||||
|
<img width="1000" alt="Create Note Command" src="https://user-images.githubusercontent.com/67844154/178248345-bb1718d9-1c29-44b1-b50b-87286e121003.png">
|
||||||
|
|
||||||
|
## Daily Note
|
||||||
|
|
||||||
|
This command will open the daily note from the selected vault. If a daily note doesn't exist it will create one and open it.
|
||||||
|
It requires the community plugin [Advanced Obsidian URI](https://obsidian.md/plugins?id=obsidian-advanced-uri) and the core plugin "Daily notes" to be installed and enabled.
|
||||||
|
|
||||||
|
## Append to Daily Note
|
||||||
|
|
||||||
|
This command will append text to the daily note from the selected vault. If a daily note doesn't exist it will create one and open it. To append as efficiently as possible, the text is provided as a parameter to the command, so there's no form to fill out.
|
||||||
|
|
||||||
|
It requires the community plugin [Advanced Obsidian URI](https://obsidian.md/plugins?id=obsidian-advanced-uri) and the core plugin "Daily notes" to be installed and enabled.
|
||||||
|
|
||||||
|
## Bookmarked Notes
|
||||||
|
|
||||||
|
This command will open a list of your bookmarked notes. All actions and preferences from the `Search Note` command are available. Bookmarking or unbookmarking a note will reflect in Obsidians Bookmarked notes. Bookmarking a note in Obsidian will also reflect in Raycast.
|
||||||
|
|
||||||
|
Additional actions:
|
||||||
|
|
||||||
|
- `opt + r` will reset all bookmarked notes for the selected vault
|
||||||
|
|
||||||
|
<img width="1000" alt="Bookmarked Notes Command" src="https://user-images.githubusercontent.com/67844154/178248422-2668fad8-8936-490b-8cf1-1dea0793712a.png">
|
||||||
|
|
||||||
|
## Obsidian Menu Bar Item
|
||||||
|
|
||||||
|
Use this command to add a menu bar item to the top of the screen (Obsidian icon).
|
||||||
|
Clicking it will reveal a list of your vaults. You can view your bookmarked notes, perform actions on them or open a daily note.
|
||||||
|
|
||||||
|
<img width="635" alt="Obsidian Menu Bar Item" src="https://user-images.githubusercontent.com/67844154/180802502-3c6243ae-e3f9-4ddc-95ba-f205dab46721.png">
|
||||||
|
|
||||||
|
## Preferences
|
||||||
|
|
||||||
|
### General settings
|
||||||
|
|
||||||
|
- set path/paths to your preferred vault/vaults (comma separated).
|
||||||
|
By default, vaults will be detected from `~/Library/Application Support/obsidian/obsidian.json`, which contains all vaults that have been opened with Obsidian before.
|
||||||
|
- exclude folders, files and paths so they dont show up in the search (comma separated). Files and Folders that were excluded in Obsidian itself will also be excluded here.
|
||||||
|
- hide YAML frontmatter in "Quick Look" and copy/paste
|
||||||
|
- hide wikilinks in "Quick Look" and copy/paste
|
||||||
|
- hide LaTeX in "Quick Look" and copy/paste
|
||||||
|
|
||||||
|
### Search Note
|
||||||
|
|
||||||
|
- templates for append actions
|
||||||
|
- show note content in detail view
|
||||||
|
- show metadata about note in detail view
|
||||||
|
- enable content search
|
||||||
|
- select primary action (for `enter`)
|
||||||
|
|
||||||
|
### Create Note
|
||||||
|
|
||||||
|
- blank note, if enabled, will create a note without any content
|
||||||
|
- open note on creation
|
||||||
|
- default path where a new note will be created
|
||||||
|
- default tag (will be selected by default in the tag picker)
|
||||||
|
- list of tags to be suggested in the tag picker (comma separated)
|
||||||
|
- default note name (if note name is empty)
|
||||||
|
- default note content
|
||||||
|
- fill form with default values
|
||||||
|
- list of folders that will create actions for creating notes inside of the specified folders
|
||||||
|
|
||||||
|
### Append to Daily Note
|
||||||
|
|
||||||
|
- template for the appended text (e.g. could set to `- [ ] ` to create a checklist item)
|
||||||
|
- vault in which the Daily Note will be appended (if not set, you will be prompted to select a vault when the command is run)
|
||||||
|
- heading in which the appended text will be placed (if not set, the text will be appended to the end of the note)
|
||||||
|
- silent mode, if enabled, will not open the note if it is currently not opened in an Obsidian tab or pane (Obsidian has to be running)
|
||||||
|
|
||||||
|
### Bookmarked Notes
|
||||||
|
|
||||||
|
- templates for append actions
|
||||||
|
- show note content in detail view
|
||||||
|
- show metadata about note in detail view
|
||||||
|
- enable content search
|
||||||
|
- select primary action (for `enter`)
|
||||||
|
|
||||||
|
### Random Note
|
||||||
|
|
||||||
|
- templates for append actions
|
||||||
|
- select primary action (for `enter`)
|
||||||
|
|
||||||
|
### Search Media
|
||||||
|
|
||||||
|
- exclude folders, files and paths so they don't show up in the search
|
||||||
|
- select image size (small, medium, large)
|
||||||
|
|
||||||
|
## Previous Developer / Maintainer
|
||||||
|
|
||||||
|
This extension was originally developed by [Marc Julian Schwarz](https://marc-julian.de/). As of 15th May 2023, Marc Julian is no longer maintaining this extension due to time constraints related to his university studies. This extension will now be further developed and maintained by [Kevin Batdorf](https://github.com/KevinBatdorf/). "Thank you for taking over this extension and keeping it alive for the community." -Marc Julian
|
||||||
|
|
||||||
|
## Blog posts:
|
||||||
|
|
||||||
|
- [First Update Raycast Obsidian Extension](https://www.marc-julian.de/2022/03/Obsidian%20Raycast%20Extension%20Update.html)
|
||||||
|
- [Obsidian Raycast Extension](https://www.marc-julian.de/2022/01/raycastobsidian.html)
|
||||||
|
|
||||||
|
## Disclaimer
|
||||||
|
|
||||||
|
This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with Obsidian. The official Obsidian website can be found at https://obsidian.md. "Obsidian" as well as related names, marks, emblems and images are registered trademarks of their respective owners.
|
3
obsidian/assets/bookmark.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-1.108.806-2.057 1.907-2.185a48.507 48.507 0 0111.186 0z" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 312 B |
BIN
obsidian/assets/extension_icon.png
Normal file
After Width: | Height: | Size: 41 KiB |
5
obsidian/assets/obsidian_icon.svg
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<svg width="348" height="438" viewBox="0 0 348 438" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M103.394 392.92C165.695 266.612 105.176 209.083 66.3818 183.803M127.412 265.716C187.957 251.013 246.82 251.867 288.055 340.65M191.458 259.045C132.605 111.699 229.337 105.831 205.381 27.3299M288.055 340.65C289.403 338.186 290.856 335.777 292.422 333.443C309.397 308.128 321.388 288.398 327.457 278.122C330.245 273.406 329.739 267.492 326.439 263.119C317.84 251.725 301.387 228.569 292.422 207.128C283.206 185.085 281.831 150.861 281.751 134.192C281.722 127.856 279.714 121.668 275.795 116.688L206.538 28.7034C206.165 28.2293 205.779 27.7715 205.381 27.3299M288.055 340.65C279.321 356.608 274.968 374.904 272.85 390.646C270.389 408.929 252.499 423.212 234.722 418.281C209.391 411.301 180.062 400.415 153.672 398.387C150.192 398.119 113.225 395.316 113.225 395.316C106.686 394.85 100.549 391.993 95.9815 387.29L26.2884 315.516C18.672 307.673 16.6104 295.977 21.0858 286.002C21.0858 286.002 64.1802 191.286 65.7808 186.361C65.9407 185.869 66.1432 184.997 66.3818 183.803M205.381 27.3299C195.613 16.479 178.743 15.4548 167.721 25.3697L85.2761 99.5382C80.6778 103.675 77.6587 109.281 76.736 115.397C73.603 136.17 68.5311 173.05 66.3818 183.803"
|
||||||
|
stroke="white" stroke-width="36" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
BIN
obsidian/metadata/obsidian-1.png
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
obsidian/metadata/obsidian-10.png
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
obsidian/metadata/obsidian-2.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
obsidian/metadata/obsidian-3.png
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
obsidian/metadata/obsidian-4.png
Normal file
After Width: | Height: | Size: 1.8 MiB |
BIN
obsidian/metadata/obsidian-5.png
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
obsidian/metadata/obsidian-6.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
obsidian/metadata/obsidian-7.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
obsidian/metadata/obsidian-8.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
obsidian/metadata/obsidian-9.png
Normal file
After Width: | Height: | Size: 2.1 MiB |
1
obsidian/node_modules/.bin/acorn
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../acorn/bin/acorn
|
1
obsidian/node_modules/.bin/eslint
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../eslint/bin/eslint.js
|
1
obsidian/node_modules/.bin/eslint-config-prettier
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../eslint-config-prettier/bin/cli.js
|
1
obsidian/node_modules/.bin/js-yaml
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../js-yaml/bin/js-yaml.js
|
1
obsidian/node_modules/.bin/loose-envify
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../loose-envify/cli.js
|
1
obsidian/node_modules/.bin/node-which
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../which/bin/node-which
|
1
obsidian/node_modules/.bin/prettier
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../prettier/bin-prettier.js
|
1
obsidian/node_modules/.bin/ray
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../@raycast/api/bin/ray
|
1
obsidian/node_modules/.bin/rimraf
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../rimraf/bin.js
|
1
obsidian/node_modules/.bin/semver
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../semver/bin/semver.js
|
1
obsidian/node_modules/.bin/tsc
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../typescript/bin/tsc
|
1
obsidian/node_modules/.bin/tsserver
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../typescript/bin/tsserver
|
1
obsidian/node_modules/.bin/uuid
generated
vendored
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../uuid/dist/bin/uuid
|
1828
obsidian/node_modules/.package-lock.json
generated
vendored
Normal file
21
obsidian/node_modules/@eslint-community/eslint-utils/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Toru Nagashima
|
||||||
|
|
||||||
|
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.
|
37
obsidian/node_modules/@eslint-community/eslint-utils/README.md
generated
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# @eslint-community/eslint-utils
|
||||||
|
|
||||||
|
[![npm version](https://img.shields.io/npm/v/@eslint-community/eslint-utils.svg)](https://www.npmjs.com/package/@eslint-community/eslint-utils)
|
||||||
|
[![Downloads/month](https://img.shields.io/npm/dm/@eslint-community/eslint-utils.svg)](http://www.npmtrends.com/@eslint-community/eslint-utils)
|
||||||
|
[![Build Status](https://github.com/eslint-community/eslint-utils/workflows/CI/badge.svg)](https://github.com/eslint-community/eslint-utils/actions)
|
||||||
|
[![Coverage Status](https://codecov.io/gh/eslint-community/eslint-utils/branch/main/graph/badge.svg)](https://codecov.io/gh/eslint-community/eslint-utils)
|
||||||
|
|
||||||
|
## 🏁 Goal
|
||||||
|
|
||||||
|
This package provides utility functions and classes for make ESLint custom rules.
|
||||||
|
|
||||||
|
For examples:
|
||||||
|
|
||||||
|
- [`getStaticValue`](https://eslint-community.github.io/eslint-utils/api/ast-utils.html#getstaticvalue) evaluates static value on AST.
|
||||||
|
- [`ReferenceTracker`](https://eslint-community.github.io/eslint-utils/api/scope-utils.html#referencetracker-class) checks the members of modules/globals as handling assignments and destructuring.
|
||||||
|
|
||||||
|
## 📖 Usage
|
||||||
|
|
||||||
|
See [documentation](https://eslint-community.github.io/eslint-utils).
|
||||||
|
|
||||||
|
## 📰 Changelog
|
||||||
|
|
||||||
|
See [releases](https://github.com/eslint-community/eslint-utils/releases).
|
||||||
|
|
||||||
|
## ❤️ Contributing
|
||||||
|
|
||||||
|
Welcome contributing!
|
||||||
|
|
||||||
|
Please use GitHub's Issues/PRs.
|
||||||
|
|
||||||
|
### Development Tools
|
||||||
|
|
||||||
|
- `npm test` runs tests and measures coverage.
|
||||||
|
- `npm run clean` removes the coverage result of `npm test` command.
|
||||||
|
- `npm run coverage` shows the coverage result of the last `npm test` command.
|
||||||
|
- `npm run lint` runs ESLint.
|
||||||
|
- `npm run watch` runs tests on each file change.
|
2068
obsidian/node_modules/@eslint-community/eslint-utils/index.js
generated
vendored
Normal file
1
obsidian/node_modules/@eslint-community/eslint-utils/index.js.map
generated
vendored
Normal file
2027
obsidian/node_modules/@eslint-community/eslint-utils/index.mjs
generated
vendored
Normal file
1
obsidian/node_modules/@eslint-community/eslint-utils/index.mjs.map
generated
vendored
Normal file
73
obsidian/node_modules/@eslint-community/eslint-utils/package.json
generated
vendored
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
{
|
||||||
|
"name": "@eslint-community/eslint-utils",
|
||||||
|
"version": "4.4.0",
|
||||||
|
"description": "Utilities for ESLint plugins.",
|
||||||
|
"keywords": [
|
||||||
|
"eslint"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/eslint-community/eslint-utils#readme",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/eslint-community/eslint-utils/issues"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/eslint-community/eslint-utils"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"author": "Toru Nagashima",
|
||||||
|
"sideEffects": false,
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"import": "./index.mjs",
|
||||||
|
"require": "./index.js"
|
||||||
|
},
|
||||||
|
"./package.json": "./package.json"
|
||||||
|
},
|
||||||
|
"main": "index",
|
||||||
|
"module": "index.mjs",
|
||||||
|
"files": [
|
||||||
|
"index.*"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"prebuild": "npm run -s clean",
|
||||||
|
"build": "rollup -c",
|
||||||
|
"clean": "rimraf .nyc_output coverage index.*",
|
||||||
|
"coverage": "opener ./coverage/lcov-report/index.html",
|
||||||
|
"docs:build": "vitepress build docs",
|
||||||
|
"docs:watch": "vitepress dev docs",
|
||||||
|
"format": "npm run -s format:prettier -- --write",
|
||||||
|
"format:prettier": "prettier .",
|
||||||
|
"format:check": "npm run -s format:prettier -- --check",
|
||||||
|
"lint": "eslint .",
|
||||||
|
"test": "c8 mocha --reporter dot \"test/*.mjs\"",
|
||||||
|
"preversion": "npm test && npm run -s build",
|
||||||
|
"postversion": "git push && git push --tags",
|
||||||
|
"prewatch": "npm run -s clean",
|
||||||
|
"watch": "warun \"{src,test}/**/*.mjs\" -- npm run -s test:mocha"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"eslint-visitor-keys": "^3.3.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint-community/eslint-plugin-mysticatea": "^15.2.0",
|
||||||
|
"c8": "^7.12.0",
|
||||||
|
"dot-prop": "^6.0.1",
|
||||||
|
"eslint": "^8.28.0",
|
||||||
|
"mocha": "^9.2.2",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"opener": "^1.5.2",
|
||||||
|
"prettier": "2.8.4",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"rollup": "^2.79.1",
|
||||||
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||||
|
"semver": "^7.3.8",
|
||||||
|
"vitepress": "^1.0.0-alpha.40",
|
||||||
|
"warun": "^1.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
|
}
|
||||||
|
}
|
21
obsidian/node_modules/@eslint-community/regexpp/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Toru Nagashima
|
||||||
|
|
||||||
|
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.
|
177
obsidian/node_modules/@eslint-community/regexpp/README.md
generated
vendored
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
# @eslint-community/regexpp
|
||||||
|
|
||||||
|
[![npm version](https://img.shields.io/npm/v/@eslint-community/regexpp.svg)](https://www.npmjs.com/package/@eslint-community/regexpp)
|
||||||
|
[![Downloads/month](https://img.shields.io/npm/dm/@eslint-community/regexpp.svg)](http://www.npmtrends.com/@eslint-community/regexpp)
|
||||||
|
[![Build Status](https://github.com/eslint-community/regexpp/workflows/CI/badge.svg)](https://github.com/eslint-community/regexpp/actions)
|
||||||
|
[![codecov](https://codecov.io/gh/eslint-community/regexpp/branch/main/graph/badge.svg)](https://codecov.io/gh/eslint-community/regexpp)
|
||||||
|
|
||||||
|
A regular expression parser for ECMAScript.
|
||||||
|
|
||||||
|
## 💿 Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install @eslint-community/regexpp
|
||||||
|
```
|
||||||
|
|
||||||
|
- require Node@^12.0.0 || ^14.0.0 || >=16.0.0.
|
||||||
|
|
||||||
|
## 📖 Usage
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import {
|
||||||
|
AST,
|
||||||
|
RegExpParser,
|
||||||
|
RegExpValidator,
|
||||||
|
RegExpVisitor,
|
||||||
|
parseRegExpLiteral,
|
||||||
|
validateRegExpLiteral,
|
||||||
|
visitRegExpAST
|
||||||
|
} from "@eslint-community/regexpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
### parseRegExpLiteral(source, options?)
|
||||||
|
|
||||||
|
Parse a given regular expression literal then make AST object.
|
||||||
|
|
||||||
|
This is equivalent to `new RegExpParser(options).parseLiteral(source)`.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string | RegExp`) The source code to parse.
|
||||||
|
- `options?` ([`RegExpParser.Options`]) The options to parse.
|
||||||
|
- **Return:**
|
||||||
|
- The AST of the regular expression.
|
||||||
|
|
||||||
|
### validateRegExpLiteral(source, options?)
|
||||||
|
|
||||||
|
Validate a given regular expression literal.
|
||||||
|
|
||||||
|
This is equivalent to `new RegExpValidator(options).validateLiteral(source)`.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to validate.
|
||||||
|
- `options?` ([`RegExpValidator.Options`]) The options to validate.
|
||||||
|
|
||||||
|
### visitRegExpAST(ast, handlers)
|
||||||
|
|
||||||
|
Visit each node of a given AST.
|
||||||
|
|
||||||
|
This is equivalent to `new RegExpVisitor(handlers).visit(ast)`.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `ast` ([`AST.Node`]) The AST to visit.
|
||||||
|
- `handlers` ([`RegExpVisitor.Handlers`]) The callbacks.
|
||||||
|
|
||||||
|
### RegExpParser
|
||||||
|
|
||||||
|
#### new RegExpParser(options?)
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `options?` ([`RegExpParser.Options`]) The options to parse.
|
||||||
|
|
||||||
|
#### parser.parseLiteral(source, start?, end?)
|
||||||
|
|
||||||
|
Parse a regular expression literal.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to parse. E.g. `"/abc/g"`.
|
||||||
|
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||||
|
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||||
|
- **Return:**
|
||||||
|
- The AST of the regular expression.
|
||||||
|
|
||||||
|
#### parser.parsePattern(source, start?, end?, uFlag?)
|
||||||
|
|
||||||
|
Parse a regular expression pattern.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to parse. E.g. `"abc"`.
|
||||||
|
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||||
|
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||||
|
- `uFlag?` (`boolean`) The flag to enable Unicode mode.
|
||||||
|
- **Return:**
|
||||||
|
- The AST of the regular expression pattern.
|
||||||
|
|
||||||
|
#### parser.parseFlags(source, start?, end?)
|
||||||
|
|
||||||
|
Parse a regular expression flags.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to parse. E.g. `"gim"`.
|
||||||
|
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||||
|
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||||
|
- **Return:**
|
||||||
|
- The AST of the regular expression flags.
|
||||||
|
|
||||||
|
### RegExpValidator
|
||||||
|
|
||||||
|
#### new RegExpValidator(options)
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `options` ([`RegExpValidator.Options`]) The options to validate.
|
||||||
|
|
||||||
|
#### validator.validateLiteral(source, start, end)
|
||||||
|
|
||||||
|
Validate a regular expression literal.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to validate.
|
||||||
|
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||||
|
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||||
|
|
||||||
|
#### validator.validatePattern(source, start, end, uFlag)
|
||||||
|
|
||||||
|
Validate a regular expression pattern.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to validate.
|
||||||
|
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||||
|
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||||
|
- `uFlag?` (`boolean`) The flag to enable Unicode mode.
|
||||||
|
|
||||||
|
#### validator.validateFlags(source, start, end)
|
||||||
|
|
||||||
|
Validate a regular expression flags.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `source` (`string`) The source code to validate.
|
||||||
|
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||||
|
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||||
|
|
||||||
|
### RegExpVisitor
|
||||||
|
|
||||||
|
#### new RegExpVisitor(handlers)
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `handlers` ([`RegExpVisitor.Handlers`]) The callbacks.
|
||||||
|
|
||||||
|
#### visitor.visit(ast)
|
||||||
|
|
||||||
|
Validate a regular expression literal.
|
||||||
|
|
||||||
|
- **Parameters:**
|
||||||
|
- `ast` ([`AST.Node`]) The AST to visit.
|
||||||
|
|
||||||
|
## 📰 Changelog
|
||||||
|
|
||||||
|
- [GitHub Releases](https://github.com/eslint-community/regexpp/releases)
|
||||||
|
|
||||||
|
## 🍻 Contributing
|
||||||
|
|
||||||
|
Welcome contributing!
|
||||||
|
|
||||||
|
Please use GitHub's Issues/PRs.
|
||||||
|
|
||||||
|
### Development Tools
|
||||||
|
|
||||||
|
- `npm test` runs tests and measures coverage.
|
||||||
|
- `npm run build` compiles TypeScript source code to `index.js`, `index.js.map`, and `index.d.ts`.
|
||||||
|
- `npm run clean` removes the temporary files which are created by `npm test` and `npm run build`.
|
||||||
|
- `npm run lint` runs ESLint.
|
||||||
|
- `npm run update:test` updates test fixtures.
|
||||||
|
- `npm run update:ids` updates `src/unicode/ids.ts`.
|
||||||
|
- `npm run watch` runs tests with `--watch` option.
|
||||||
|
|
||||||
|
[`AST.Node`]: src/ast.ts#L4
|
||||||
|
[`RegExpParser.Options`]: src/parser.ts#L539
|
||||||
|
[`RegExpValidator.Options`]: src/validator.ts#L127
|
||||||
|
[`RegExpVisitor.Handlers`]: src/visitor.ts#L204
|
781
obsidian/node_modules/@eslint-community/regexpp/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,781 @@
|
||||||
|
// Generated by dts-bundle v0.7.3
|
||||||
|
|
||||||
|
declare module "@eslint-community/regexpp" {
|
||||||
|
import * as AST from "@eslint-community/regexpp/ast";
|
||||||
|
import { RegExpParser } from "@eslint-community/regexpp/parser";
|
||||||
|
import { RegExpValidator } from "@eslint-community/regexpp/validator";
|
||||||
|
import { RegExpVisitor } from "@eslint-community/regexpp/visitor";
|
||||||
|
export { AST, RegExpParser, RegExpValidator };
|
||||||
|
/**
|
||||||
|
* Parse a given regular expression literal then make AST object.
|
||||||
|
* @param source The source code to parse.
|
||||||
|
* @param options The options to parse.
|
||||||
|
* @returns The AST of the regular expression.
|
||||||
|
*/
|
||||||
|
export function parseRegExpLiteral(
|
||||||
|
source: RegExp | string,
|
||||||
|
options?: RegExpParser.Options
|
||||||
|
): AST.RegExpLiteral;
|
||||||
|
/**
|
||||||
|
* Validate a given regular expression literal.
|
||||||
|
* @param source The source code to validate.
|
||||||
|
* @param options The options to validate.
|
||||||
|
*/
|
||||||
|
export function validateRegExpLiteral(
|
||||||
|
source: string,
|
||||||
|
options?: RegExpValidator.Options
|
||||||
|
): void;
|
||||||
|
export function visitRegExpAST(
|
||||||
|
node: AST.Node,
|
||||||
|
handlers: RegExpVisitor.Handlers
|
||||||
|
): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "@eslint-community/regexpp/ast" {
|
||||||
|
/**
|
||||||
|
* The type which includes all nodes.
|
||||||
|
*/
|
||||||
|
export type Node = BranchNode | LeafNode;
|
||||||
|
/**
|
||||||
|
* The type which includes all branch nodes.
|
||||||
|
*/
|
||||||
|
export type BranchNode =
|
||||||
|
| Alternative
|
||||||
|
| CapturingGroup
|
||||||
|
| CharacterClass
|
||||||
|
| CharacterClassRange
|
||||||
|
| Group
|
||||||
|
| LookaroundAssertion
|
||||||
|
| Pattern
|
||||||
|
| Quantifier
|
||||||
|
| RegExpLiteral;
|
||||||
|
/**
|
||||||
|
* The type which includes all leaf nodes.
|
||||||
|
*/
|
||||||
|
export type LeafNode =
|
||||||
|
| Backreference
|
||||||
|
| BoundaryAssertion
|
||||||
|
| Character
|
||||||
|
| CharacterSet
|
||||||
|
| Flags;
|
||||||
|
/**
|
||||||
|
* The type which includes all atom nodes.
|
||||||
|
*/
|
||||||
|
export type Element = Assertion | QuantifiableElement | Quantifier;
|
||||||
|
/**
|
||||||
|
* The type which includes all atom nodes that Quantifier node can have as children.
|
||||||
|
*/
|
||||||
|
export type QuantifiableElement =
|
||||||
|
| Backreference
|
||||||
|
| CapturingGroup
|
||||||
|
| Character
|
||||||
|
| CharacterClass
|
||||||
|
| CharacterSet
|
||||||
|
| Group
|
||||||
|
| LookaheadAssertion;
|
||||||
|
/**
|
||||||
|
* The type which includes all character class atom nodes.
|
||||||
|
*/
|
||||||
|
export type CharacterClassElement =
|
||||||
|
| Character
|
||||||
|
| CharacterClassRange
|
||||||
|
| EscapeCharacterSet
|
||||||
|
| UnicodePropertyCharacterSet;
|
||||||
|
/**
|
||||||
|
* The type which defines common properties for all node types.
|
||||||
|
*/
|
||||||
|
export interface NodeBase {
|
||||||
|
/** The node type. */
|
||||||
|
type: Node["type"];
|
||||||
|
/** The parent node. */
|
||||||
|
parent: Node["parent"];
|
||||||
|
/** The 0-based index that this node starts. */
|
||||||
|
start: number;
|
||||||
|
/** The 0-based index that this node ends. */
|
||||||
|
end: number;
|
||||||
|
/** The raw text of this node. */
|
||||||
|
raw: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The root node.
|
||||||
|
*/
|
||||||
|
export interface RegExpLiteral extends NodeBase {
|
||||||
|
type: "RegExpLiteral";
|
||||||
|
parent: null;
|
||||||
|
pattern: Pattern;
|
||||||
|
flags: Flags;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The pattern.
|
||||||
|
*/
|
||||||
|
export interface Pattern extends NodeBase {
|
||||||
|
type: "Pattern";
|
||||||
|
parent: RegExpLiteral | null;
|
||||||
|
alternatives: Alternative[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The alternative.
|
||||||
|
* E.g. `a|b`
|
||||||
|
*/
|
||||||
|
export interface Alternative extends NodeBase {
|
||||||
|
type: "Alternative";
|
||||||
|
parent: CapturingGroup | Group | LookaroundAssertion | Pattern;
|
||||||
|
elements: Element[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The uncapturing group.
|
||||||
|
* E.g. `(?:ab)`
|
||||||
|
*/
|
||||||
|
export interface Group extends NodeBase {
|
||||||
|
type: "Group";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
alternatives: Alternative[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The capturing group.
|
||||||
|
* E.g. `(ab)`, `(?<name>ab)`
|
||||||
|
*/
|
||||||
|
export interface CapturingGroup extends NodeBase {
|
||||||
|
type: "CapturingGroup";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
name: string | null;
|
||||||
|
alternatives: Alternative[];
|
||||||
|
references: Backreference[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The lookaround assertion.
|
||||||
|
*/
|
||||||
|
export type LookaroundAssertion = LookaheadAssertion | LookbehindAssertion;
|
||||||
|
/**
|
||||||
|
* The lookahead assertion.
|
||||||
|
* E.g. `(?=ab)`, `(?!ab)`
|
||||||
|
*/
|
||||||
|
export interface LookaheadAssertion extends NodeBase {
|
||||||
|
type: "Assertion";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
kind: "lookahead";
|
||||||
|
negate: boolean;
|
||||||
|
alternatives: Alternative[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The lookbehind assertion.
|
||||||
|
* E.g. `(?<=ab)`, `(?<!ab)`
|
||||||
|
*/
|
||||||
|
export interface LookbehindAssertion extends NodeBase {
|
||||||
|
type: "Assertion";
|
||||||
|
parent: Alternative;
|
||||||
|
kind: "lookbehind";
|
||||||
|
negate: boolean;
|
||||||
|
alternatives: Alternative[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The quantifier.
|
||||||
|
* E.g. `a?`, `a*`, `a+`, `a{1,2}`, `a??`, `a*?`, `a+?`, `a{1,2}?`
|
||||||
|
*/
|
||||||
|
export interface Quantifier extends NodeBase {
|
||||||
|
type: "Quantifier";
|
||||||
|
parent: Alternative;
|
||||||
|
min: number;
|
||||||
|
max: number;
|
||||||
|
greedy: boolean;
|
||||||
|
element: QuantifiableElement;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The character class.
|
||||||
|
* E.g. `[ab]`, `[^ab]`
|
||||||
|
*/
|
||||||
|
export interface CharacterClass extends NodeBase {
|
||||||
|
type: "CharacterClass";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
negate: boolean;
|
||||||
|
elements: CharacterClassElement[];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The character class.
|
||||||
|
* E.g. `[a-b]`
|
||||||
|
*/
|
||||||
|
export interface CharacterClassRange extends NodeBase {
|
||||||
|
type: "CharacterClassRange";
|
||||||
|
parent: CharacterClass;
|
||||||
|
min: Character;
|
||||||
|
max: Character;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The assertion.
|
||||||
|
*/
|
||||||
|
export type Assertion = BoundaryAssertion | LookaroundAssertion;
|
||||||
|
/**
|
||||||
|
* The boundary assertion.
|
||||||
|
*/
|
||||||
|
export type BoundaryAssertion = EdgeAssertion | WordBoundaryAssertion;
|
||||||
|
/**
|
||||||
|
* The edge boundary assertion.
|
||||||
|
* E.g. `^`, `$`
|
||||||
|
*/
|
||||||
|
export interface EdgeAssertion extends NodeBase {
|
||||||
|
type: "Assertion";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
kind: "end" | "start";
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The word bondary assertion.
|
||||||
|
* E.g. `\b`, `\B`
|
||||||
|
*/
|
||||||
|
export interface WordBoundaryAssertion extends NodeBase {
|
||||||
|
type: "Assertion";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
kind: "word";
|
||||||
|
negate: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The character set.
|
||||||
|
*/
|
||||||
|
export type CharacterSet =
|
||||||
|
| AnyCharacterSet
|
||||||
|
| EscapeCharacterSet
|
||||||
|
| UnicodePropertyCharacterSet;
|
||||||
|
/**
|
||||||
|
* The dot.
|
||||||
|
* E.g. `.`
|
||||||
|
*/
|
||||||
|
export interface AnyCharacterSet extends NodeBase {
|
||||||
|
type: "CharacterSet";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
kind: "any";
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The character class escape.
|
||||||
|
* E.g. `\d`, `\s`, `\w`, `\D`, `\S`, `\W`
|
||||||
|
*/
|
||||||
|
export interface EscapeCharacterSet extends NodeBase {
|
||||||
|
type: "CharacterSet";
|
||||||
|
parent: Alternative | CharacterClass | Quantifier;
|
||||||
|
kind: "digit" | "space" | "word";
|
||||||
|
negate: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The unicode property escape.
|
||||||
|
* E.g. `\p{ASCII}`, `\P{ASCII}`, `\p{Script=Hiragana}`
|
||||||
|
*/
|
||||||
|
export interface UnicodePropertyCharacterSet extends NodeBase {
|
||||||
|
type: "CharacterSet";
|
||||||
|
parent: Alternative | CharacterClass | Quantifier;
|
||||||
|
kind: "property";
|
||||||
|
key: string;
|
||||||
|
value: string | null;
|
||||||
|
negate: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The character.
|
||||||
|
* This includes escape sequences which mean a character.
|
||||||
|
* E.g. `a`, `あ`, `✿`, `\x65`, `\u0065`, `\u{65}`, `\/`
|
||||||
|
*/
|
||||||
|
export interface Character extends NodeBase {
|
||||||
|
type: "Character";
|
||||||
|
parent: Alternative | CharacterClass | CharacterClassRange | Quantifier;
|
||||||
|
value: number;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The backreference.
|
||||||
|
* E.g. `\1`, `\k<name>`
|
||||||
|
*/
|
||||||
|
export interface Backreference extends NodeBase {
|
||||||
|
type: "Backreference";
|
||||||
|
parent: Alternative | Quantifier;
|
||||||
|
ref: number | string;
|
||||||
|
resolved: CapturingGroup;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The flags.
|
||||||
|
*/
|
||||||
|
export interface Flags extends NodeBase {
|
||||||
|
type: "Flags";
|
||||||
|
parent: RegExpLiteral | null;
|
||||||
|
dotAll: boolean;
|
||||||
|
global: boolean;
|
||||||
|
hasIndices: boolean;
|
||||||
|
ignoreCase: boolean;
|
||||||
|
multiline: boolean;
|
||||||
|
sticky: boolean;
|
||||||
|
unicode: boolean;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "@eslint-community/regexpp/parser" {
|
||||||
|
import type {
|
||||||
|
Flags,
|
||||||
|
RegExpLiteral,
|
||||||
|
Pattern,
|
||||||
|
} from "@eslint-community/regexpp/ast";
|
||||||
|
import type { EcmaVersion } from "@eslint-community/regexpp/ecma-versions";
|
||||||
|
export namespace RegExpParser {
|
||||||
|
/**
|
||||||
|
* The options for RegExpParser construction.
|
||||||
|
*/
|
||||||
|
interface Options {
|
||||||
|
/**
|
||||||
|
* The flag to disable Annex B syntax. Default is `false`.
|
||||||
|
*/
|
||||||
|
strict?: boolean;
|
||||||
|
/**
|
||||||
|
* ECMAScript version. Default is `2023`.
|
||||||
|
* - `2015` added `u` and `y` flags.
|
||||||
|
* - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,
|
||||||
|
* and Unicode Property Escape.
|
||||||
|
* - `2019`, `2020`, and `2021` added more valid Unicode Property Escapes.
|
||||||
|
* - `2022` added `d` flag.
|
||||||
|
* - `2023` added more valid Unicode Property Escapes.
|
||||||
|
*/
|
||||||
|
ecmaVersion?: EcmaVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class RegExpParser {
|
||||||
|
/**
|
||||||
|
* Initialize this parser.
|
||||||
|
* @param options The options of parser.
|
||||||
|
*/
|
||||||
|
constructor(options?: RegExpParser.Options);
|
||||||
|
/**
|
||||||
|
* Parse a regular expression literal. E.g. "/abc/g"
|
||||||
|
* @param source The source code to parse.
|
||||||
|
* @param start The start index in the source code.
|
||||||
|
* @param end The end index in the source code.
|
||||||
|
* @returns The AST of the given regular expression.
|
||||||
|
*/
|
||||||
|
parseLiteral(source: string, start?: number, end?: number): RegExpLiteral;
|
||||||
|
/**
|
||||||
|
* Parse a regular expression flags. E.g. "gim"
|
||||||
|
* @param source The source code to parse.
|
||||||
|
* @param start The start index in the source code.
|
||||||
|
* @param end The end index in the source code.
|
||||||
|
* @returns The AST of the given flags.
|
||||||
|
*/
|
||||||
|
parseFlags(source: string, start?: number, end?: number): Flags;
|
||||||
|
/**
|
||||||
|
* Parse a regular expression pattern. E.g. "abc"
|
||||||
|
* @param source The source code to parse.
|
||||||
|
* @param start The start index in the source code.
|
||||||
|
* @param end The end index in the source code.
|
||||||
|
* @param uFlag The flag to set unicode mode.
|
||||||
|
* @returns The AST of the given pattern.
|
||||||
|
*/
|
||||||
|
parsePattern(
|
||||||
|
source: string,
|
||||||
|
start?: number,
|
||||||
|
end?: number,
|
||||||
|
uFlag?: boolean
|
||||||
|
): Pattern;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "@eslint-community/regexpp/validator" {
|
||||||
|
import type { EcmaVersion } from "@eslint-community/regexpp/ecma-versions";
|
||||||
|
export namespace RegExpValidator {
|
||||||
|
/**
|
||||||
|
* The options for RegExpValidator construction.
|
||||||
|
*/
|
||||||
|
interface Options {
|
||||||
|
/**
|
||||||
|
* The flag to disable Annex B syntax. Default is `false`.
|
||||||
|
*/
|
||||||
|
strict?: boolean;
|
||||||
|
/**
|
||||||
|
* ECMAScript version. Default is `2023`.
|
||||||
|
* - `2015` added `u` and `y` flags.
|
||||||
|
* - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,
|
||||||
|
* and Unicode Property Escape.
|
||||||
|
* - `2019`, `2020`, and `2021` added more valid Unicode Property Escapes.
|
||||||
|
* - `2022` added `d` flag.
|
||||||
|
* - `2023` added more valid Unicode Property Escapes.
|
||||||
|
*/
|
||||||
|
ecmaVersion?: EcmaVersion;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered a RegExp literal.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
*/
|
||||||
|
onLiteralEnter?: (start: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left a RegExp literal.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
*/
|
||||||
|
onLiteralLeave?: (start: number, end: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found flags.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param flags.global `g` flag.
|
||||||
|
* @param flags.ignoreCase `i` flag.
|
||||||
|
* @param flags.multiline `m` flag.
|
||||||
|
* @param flags.unicode `u` flag.
|
||||||
|
* @param flags.sticky `y` flag.
|
||||||
|
* @param flags.dotAll `s` flag.
|
||||||
|
* @param flags.hasIndices `d` flag.
|
||||||
|
*/
|
||||||
|
onRegExpFlags?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
flags: {
|
||||||
|
global: boolean;
|
||||||
|
ignoreCase: boolean;
|
||||||
|
multiline: boolean;
|
||||||
|
unicode: boolean;
|
||||||
|
sticky: boolean;
|
||||||
|
dotAll: boolean;
|
||||||
|
hasIndices: boolean;
|
||||||
|
}
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found flags.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param global `g` flag.
|
||||||
|
* @param ignoreCase `i` flag.
|
||||||
|
* @param multiline `m` flag.
|
||||||
|
* @param unicode `u` flag.
|
||||||
|
* @param sticky `y` flag.
|
||||||
|
* @param dotAll `s` flag.
|
||||||
|
* @param hasIndices `d` flag.
|
||||||
|
*
|
||||||
|
* @deprecated Use `onRegExpFlags` instead.
|
||||||
|
*/
|
||||||
|
onFlags?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
global: boolean,
|
||||||
|
ignoreCase: boolean,
|
||||||
|
multiline: boolean,
|
||||||
|
unicode: boolean,
|
||||||
|
sticky: boolean,
|
||||||
|
dotAll: boolean,
|
||||||
|
hasIndices: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered a pattern.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
*/
|
||||||
|
onPatternEnter?: (start: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left a pattern.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
*/
|
||||||
|
onPatternLeave?: (start: number, end: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered a disjunction.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
*/
|
||||||
|
onDisjunctionEnter?: (start: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left a disjunction.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
*/
|
||||||
|
onDisjunctionLeave?: (start: number, end: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered an alternative.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param index The 0-based index of alternatives in a disjunction.
|
||||||
|
*/
|
||||||
|
onAlternativeEnter?: (start: number, index: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left an alternative.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param index The 0-based index of alternatives in a disjunction.
|
||||||
|
*/
|
||||||
|
onAlternativeLeave?: (start: number, end: number, index: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered an uncapturing group.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
*/
|
||||||
|
onGroupEnter?: (start: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left an uncapturing group.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
*/
|
||||||
|
onGroupLeave?: (start: number, end: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered a capturing group.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param name The group name.
|
||||||
|
*/
|
||||||
|
onCapturingGroupEnter?: (start: number, name: string | null) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left a capturing group.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param name The group name.
|
||||||
|
*/
|
||||||
|
onCapturingGroupLeave?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
name: string | null
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a quantifier.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param min The minimum number of repeating.
|
||||||
|
* @param max The maximum number of repeating.
|
||||||
|
* @param greedy The flag to choose the longest matching.
|
||||||
|
*/
|
||||||
|
onQuantifier?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
min: number,
|
||||||
|
max: number,
|
||||||
|
greedy: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered a lookahead/lookbehind assertion.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param kind The kind of the assertion.
|
||||||
|
* @param negate The flag which represents that the assertion is negative.
|
||||||
|
*/
|
||||||
|
onLookaroundAssertionEnter?: (
|
||||||
|
start: number,
|
||||||
|
kind: "lookahead" | "lookbehind",
|
||||||
|
negate: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left a lookahead/lookbehind assertion.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param kind The kind of the assertion.
|
||||||
|
* @param negate The flag which represents that the assertion is negative.
|
||||||
|
*/
|
||||||
|
onLookaroundAssertionLeave?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
kind: "lookahead" | "lookbehind",
|
||||||
|
negate: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found an edge boundary assertion.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param kind The kind of the assertion.
|
||||||
|
*/
|
||||||
|
onEdgeAssertion?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
kind: "end" | "start"
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a word boundary assertion.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param kind The kind of the assertion.
|
||||||
|
* @param negate The flag which represents that the assertion is negative.
|
||||||
|
*/
|
||||||
|
onWordBoundaryAssertion?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
kind: "word",
|
||||||
|
negate: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a dot.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param kind The kind of the character set.
|
||||||
|
*/
|
||||||
|
onAnyCharacterSet?: (start: number, end: number, kind: "any") => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a character set escape.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param kind The kind of the character set.
|
||||||
|
* @param negate The flag which represents that the character set is negative.
|
||||||
|
*/
|
||||||
|
onEscapeCharacterSet?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
kind: "digit" | "space" | "word",
|
||||||
|
negate: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a Unicode proerty escape.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param kind The kind of the character set.
|
||||||
|
* @param key The property name.
|
||||||
|
* @param value The property value.
|
||||||
|
* @param negate The flag which represents that the character set is negative.
|
||||||
|
*/
|
||||||
|
onUnicodePropertyCharacterSet?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
kind: "property",
|
||||||
|
key: string,
|
||||||
|
value: string | null,
|
||||||
|
negate: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a character.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param value The code point of the character.
|
||||||
|
*/
|
||||||
|
onCharacter?: (start: number, end: number, value: number) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a backreference.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param ref The key of the referred capturing group.
|
||||||
|
*/
|
||||||
|
onBackreference?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
ref: number | string
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator entered a character class.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param negate The flag which represents that the character class is negative.
|
||||||
|
*/
|
||||||
|
onCharacterClassEnter?: (start: number, negate: boolean) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator left a character class.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param negate The flag which represents that the character class is negative.
|
||||||
|
*/
|
||||||
|
onCharacterClassLeave?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
negate: boolean
|
||||||
|
) => void;
|
||||||
|
/**
|
||||||
|
* A function that is called when the validator found a character class range.
|
||||||
|
* @param start The 0-based index of the first character.
|
||||||
|
* @param end The next 0-based index of the last character.
|
||||||
|
* @param min The minimum code point of the range.
|
||||||
|
* @param max The maximum code point of the range.
|
||||||
|
*/
|
||||||
|
onCharacterClassRange?: (
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
min: number,
|
||||||
|
max: number
|
||||||
|
) => void;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The regular expression validator.
|
||||||
|
*/
|
||||||
|
export class RegExpValidator {
|
||||||
|
/**
|
||||||
|
* Initialize this validator.
|
||||||
|
* @param options The options of validator.
|
||||||
|
*/
|
||||||
|
constructor(options?: RegExpValidator.Options);
|
||||||
|
/**
|
||||||
|
* Validate a regular expression literal. E.g. "/abc/g"
|
||||||
|
* @param source The source code to validate.
|
||||||
|
* @param start The start index in the source code.
|
||||||
|
* @param end The end index in the source code.
|
||||||
|
*/
|
||||||
|
validateLiteral(source: string, start?: number, end?: number): void;
|
||||||
|
/**
|
||||||
|
* Validate a regular expression flags. E.g. "gim"
|
||||||
|
* @param source The source code to validate.
|
||||||
|
* @param start The start index in the source code.
|
||||||
|
* @param end The end index in the source code.
|
||||||
|
*/
|
||||||
|
validateFlags(source: string, start?: number, end?: number): void;
|
||||||
|
/**
|
||||||
|
* Validate a regular expression pattern. E.g. "abc"
|
||||||
|
* @param source The source code to validate.
|
||||||
|
* @param start The start index in the source code.
|
||||||
|
* @param end The end index in the source code.
|
||||||
|
* @param uFlag The flag to set unicode mode.
|
||||||
|
*/
|
||||||
|
validatePattern(
|
||||||
|
source: string,
|
||||||
|
start?: number,
|
||||||
|
end?: number,
|
||||||
|
uFlag?: boolean
|
||||||
|
): void;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "@eslint-community/regexpp/visitor" {
|
||||||
|
import type {
|
||||||
|
Alternative,
|
||||||
|
Assertion,
|
||||||
|
Backreference,
|
||||||
|
CapturingGroup,
|
||||||
|
Character,
|
||||||
|
CharacterClass,
|
||||||
|
CharacterClassRange,
|
||||||
|
CharacterSet,
|
||||||
|
Flags,
|
||||||
|
Group,
|
||||||
|
Node,
|
||||||
|
Pattern,
|
||||||
|
Quantifier,
|
||||||
|
RegExpLiteral,
|
||||||
|
} from "@eslint-community/regexpp/ast";
|
||||||
|
/**
|
||||||
|
* The visitor to walk on AST.
|
||||||
|
*/
|
||||||
|
export class RegExpVisitor {
|
||||||
|
/**
|
||||||
|
* Initialize this visitor.
|
||||||
|
* @param handlers Callbacks for each node.
|
||||||
|
*/
|
||||||
|
constructor(handlers: RegExpVisitor.Handlers);
|
||||||
|
/**
|
||||||
|
* Visit a given node and descendant nodes.
|
||||||
|
* @param node The root node to visit tree.
|
||||||
|
*/
|
||||||
|
visit(node: Node): void;
|
||||||
|
}
|
||||||
|
export namespace RegExpVisitor {
|
||||||
|
interface Handlers {
|
||||||
|
onAlternativeEnter?: (node: Alternative) => void;
|
||||||
|
onAlternativeLeave?: (node: Alternative) => void;
|
||||||
|
onAssertionEnter?: (node: Assertion) => void;
|
||||||
|
onAssertionLeave?: (node: Assertion) => void;
|
||||||
|
onBackreferenceEnter?: (node: Backreference) => void;
|
||||||
|
onBackreferenceLeave?: (node: Backreference) => void;
|
||||||
|
onCapturingGroupEnter?: (node: CapturingGroup) => void;
|
||||||
|
onCapturingGroupLeave?: (node: CapturingGroup) => void;
|
||||||
|
onCharacterEnter?: (node: Character) => void;
|
||||||
|
onCharacterLeave?: (node: Character) => void;
|
||||||
|
onCharacterClassEnter?: (node: CharacterClass) => void;
|
||||||
|
onCharacterClassLeave?: (node: CharacterClass) => void;
|
||||||
|
onCharacterClassRangeEnter?: (node: CharacterClassRange) => void;
|
||||||
|
onCharacterClassRangeLeave?: (node: CharacterClassRange) => void;
|
||||||
|
onCharacterSetEnter?: (node: CharacterSet) => void;
|
||||||
|
onCharacterSetLeave?: (node: CharacterSet) => void;
|
||||||
|
onFlagsEnter?: (node: Flags) => void;
|
||||||
|
onFlagsLeave?: (node: Flags) => void;
|
||||||
|
onGroupEnter?: (node: Group) => void;
|
||||||
|
onGroupLeave?: (node: Group) => void;
|
||||||
|
onPatternEnter?: (node: Pattern) => void;
|
||||||
|
onPatternLeave?: (node: Pattern) => void;
|
||||||
|
onQuantifierEnter?: (node: Quantifier) => void;
|
||||||
|
onQuantifierLeave?: (node: Quantifier) => void;
|
||||||
|
onRegExpLiteralEnter?: (node: RegExpLiteral) => void;
|
||||||
|
onRegExpLiteralLeave?: (node: RegExpLiteral) => void;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "@eslint-community/regexpp/ecma-versions" {
|
||||||
|
export type EcmaVersion =
|
||||||
|
| 5
|
||||||
|
| 2015
|
||||||
|
| 2016
|
||||||
|
| 2017
|
||||||
|
| 2018
|
||||||
|
| 2019
|
||||||
|
| 2020
|
||||||
|
| 2021
|
||||||
|
| 2022
|
||||||
|
| 2023;
|
||||||
|
}
|
2136
obsidian/node_modules/@eslint-community/regexpp/index.js
generated
vendored
Normal file
1
obsidian/node_modules/@eslint-community/regexpp/index.js.map
generated
vendored
Normal file
2127
obsidian/node_modules/@eslint-community/regexpp/index.mjs
generated
vendored
Normal file
1
obsidian/node_modules/@eslint-community/regexpp/index.mjs.map
generated
vendored
Normal file
88
obsidian/node_modules/@eslint-community/regexpp/package.json
generated
vendored
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
{
|
||||||
|
"name": "@eslint-community/regexpp",
|
||||||
|
"version": "4.5.1",
|
||||||
|
"description": "Regular expression parser for ECMAScript.",
|
||||||
|
"keywords": [
|
||||||
|
"regexp",
|
||||||
|
"regular",
|
||||||
|
"expression",
|
||||||
|
"parser",
|
||||||
|
"validator",
|
||||||
|
"ast",
|
||||||
|
"abstract",
|
||||||
|
"syntax",
|
||||||
|
"tree",
|
||||||
|
"ecmascript",
|
||||||
|
"es2015",
|
||||||
|
"es2016",
|
||||||
|
"es2017",
|
||||||
|
"es2018",
|
||||||
|
"es2019",
|
||||||
|
"es2020",
|
||||||
|
"es2021",
|
||||||
|
"annexB"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/eslint-community/regexpp#readme",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/eslint-community/regexpp/issues"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/eslint-community/regexpp"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"author": "Toru Nagashima",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"import": "./index.mjs",
|
||||||
|
"default": "./index.js"
|
||||||
|
},
|
||||||
|
"./package.json": "./package.json"
|
||||||
|
},
|
||||||
|
"main": "index",
|
||||||
|
"files": [
|
||||||
|
"index.*"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"prebuild": "npm run -s clean",
|
||||||
|
"build": "run-s build:*",
|
||||||
|
"build:tsc": "tsc --module es2015",
|
||||||
|
"build:rollup": "rollup -c",
|
||||||
|
"build:dts": "npm run -s build:tsc -- --removeComments false && dts-bundle --name @eslint-community/regexpp --main .temp/index.d.ts --out ../index.d.ts && prettier --write index.d.ts",
|
||||||
|
"clean": "rimraf .temp index.*",
|
||||||
|
"lint": "eslint . --ext .ts",
|
||||||
|
"test": "nyc _mocha \"test/*.ts\" --reporter dot --timeout 10000",
|
||||||
|
"update:test": "ts-node scripts/update-fixtures.ts",
|
||||||
|
"update:unicode": "run-s update:unicode:*",
|
||||||
|
"update:unicode:ids": "ts-node scripts/update-unicode-ids.ts",
|
||||||
|
"update:unicode:props": "ts-node scripts/update-unicode-properties.ts",
|
||||||
|
"preversion": "npm test && npm run -s build",
|
||||||
|
"postversion": "git push && git push --tags",
|
||||||
|
"prewatch": "npm run -s clean",
|
||||||
|
"watch": "_mocha \"test/*.ts\" --require ts-node/register --reporter dot --timeout 10000 --watch-extensions ts --watch --growl"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint-community/eslint-plugin-mysticatea": "^15.3.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^14.1.0",
|
||||||
|
"@types/eslint": "^8.4.10",
|
||||||
|
"@types/jsdom": "^16.2.15",
|
||||||
|
"@types/mocha": "^9.1.1",
|
||||||
|
"@types/node": "^12.20.55",
|
||||||
|
"dts-bundle": "^0.7.3",
|
||||||
|
"eslint": "^8.31.0",
|
||||||
|
"jsdom": "^19.0.0",
|
||||||
|
"mocha": "^9.2.2",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"nyc": "^14.1.1",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"rollup": "^2.79.1",
|
||||||
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||||
|
"ts-node": "^10.9.1",
|
||||||
|
"typescript": "~5.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
||||||
|
}
|
||||||
|
}
|
19
obsidian/node_modules/@eslint/eslintrc/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
||||||
|
|
||||||
|
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.
|
71
obsidian/node_modules/@eslint/eslintrc/README.md
generated
vendored
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
# ESLintRC Library
|
||||||
|
|
||||||
|
This repository contains the legacy ESLintRC configuration file format for ESLint. This package is not intended for use outside of the ESLint ecosystem. It is ESLint-specific and not intended for use in other programs.
|
||||||
|
|
||||||
|
**Note:** This package is frozen except for critical bug fixes as ESLint moves to a new config system.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
You can install the package as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install @eslint/eslintrc --save-dev
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
yarn add @eslint/eslintrc -D
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The primary class in this package is `FlatCompat`, which is a utility to translate ESLintRC-style configs into flat configs. Here's how you use it inside of your `eslint.config.js` file:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { FlatCompat } from "@eslint/eslintrc";
|
||||||
|
import js from "@eslint/js";
|
||||||
|
import path from "path";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
|
// mimic CommonJS variables -- not needed if using CommonJS
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
const compat = new FlatCompat({
|
||||||
|
baseDirectory: __dirname, // optional; default: process.cwd()
|
||||||
|
resolvePluginsRelativeTo: __dirname, // optional
|
||||||
|
recommendedConfig: js.configs.recommended, // optional
|
||||||
|
allConfig: js.configs.all, // optional
|
||||||
|
});
|
||||||
|
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// mimic ESLintRC-style extends
|
||||||
|
...compat.extends("standard", "example"),
|
||||||
|
|
||||||
|
// mimic environments
|
||||||
|
...compat.env({
|
||||||
|
es2020: true,
|
||||||
|
node: true
|
||||||
|
}),
|
||||||
|
|
||||||
|
// mimic plugins
|
||||||
|
...compat.plugins("airbnb", "react"),
|
||||||
|
|
||||||
|
// translate an entire config
|
||||||
|
...compat.config({
|
||||||
|
plugins: ["airbnb", "react"],
|
||||||
|
extends: "standard",
|
||||||
|
env: {
|
||||||
|
es2020: true,
|
||||||
|
node: true
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
semi: "error"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT License
|
79
obsidian/node_modules/@eslint/eslintrc/conf/config-schema.js
generated
vendored
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Defines a schema for configs.
|
||||||
|
* @author Sylvan Mably
|
||||||
|
*/
|
||||||
|
|
||||||
|
const baseConfigProperties = {
|
||||||
|
$schema: { type: "string" },
|
||||||
|
env: { type: "object" },
|
||||||
|
extends: { $ref: "#/definitions/stringOrStrings" },
|
||||||
|
globals: { type: "object" },
|
||||||
|
overrides: {
|
||||||
|
type: "array",
|
||||||
|
items: { $ref: "#/definitions/overrideConfig" },
|
||||||
|
additionalItems: false
|
||||||
|
},
|
||||||
|
parser: { type: ["string", "null"] },
|
||||||
|
parserOptions: { type: "object" },
|
||||||
|
plugins: { type: "array" },
|
||||||
|
processor: { type: "string" },
|
||||||
|
rules: { type: "object" },
|
||||||
|
settings: { type: "object" },
|
||||||
|
noInlineConfig: { type: "boolean" },
|
||||||
|
reportUnusedDisableDirectives: { type: "boolean" },
|
||||||
|
|
||||||
|
ecmaFeatures: { type: "object" } // deprecated; logs a warning when used
|
||||||
|
};
|
||||||
|
|
||||||
|
const configSchema = {
|
||||||
|
definitions: {
|
||||||
|
stringOrStrings: {
|
||||||
|
oneOf: [
|
||||||
|
{ type: "string" },
|
||||||
|
{
|
||||||
|
type: "array",
|
||||||
|
items: { type: "string" },
|
||||||
|
additionalItems: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
stringOrStringsRequired: {
|
||||||
|
oneOf: [
|
||||||
|
{ type: "string" },
|
||||||
|
{
|
||||||
|
type: "array",
|
||||||
|
items: { type: "string" },
|
||||||
|
additionalItems: false,
|
||||||
|
minItems: 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Config at top-level.
|
||||||
|
objectConfig: {
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
root: { type: "boolean" },
|
||||||
|
ignorePatterns: { $ref: "#/definitions/stringOrStrings" },
|
||||||
|
...baseConfigProperties
|
||||||
|
},
|
||||||
|
additionalProperties: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// Config in `overrides`.
|
||||||
|
overrideConfig: {
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
excludedFiles: { $ref: "#/definitions/stringOrStrings" },
|
||||||
|
files: { $ref: "#/definitions/stringOrStringsRequired" },
|
||||||
|
...baseConfigProperties
|
||||||
|
},
|
||||||
|
required: ["files"],
|
||||||
|
additionalProperties: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
$ref: "#/definitions/objectConfig"
|
||||||
|
};
|
||||||
|
|
||||||
|
export default configSchema;
|
203
obsidian/node_modules/@eslint/eslintrc/conf/environments.js
generated
vendored
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Defines environment settings and globals.
|
||||||
|
* @author Elan Shanker
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import globals from "globals";
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the object that has difference.
|
||||||
|
* @param {Record<string,boolean>} current The newer object.
|
||||||
|
* @param {Record<string,boolean>} prev The older object.
|
||||||
|
* @returns {Record<string,boolean>} The difference object.
|
||||||
|
*/
|
||||||
|
function getDiff(current, prev) {
|
||||||
|
const retv = {};
|
||||||
|
|
||||||
|
for (const [key, value] of Object.entries(current)) {
|
||||||
|
if (!Object.hasOwnProperty.call(prev, key)) {
|
||||||
|
retv[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retv;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newGlobals2015 = getDiff(globals.es2015, globals.es5); // 19 variables such as Promise, Map, ...
|
||||||
|
const newGlobals2017 = {
|
||||||
|
Atomics: false,
|
||||||
|
SharedArrayBuffer: false
|
||||||
|
};
|
||||||
|
const newGlobals2020 = {
|
||||||
|
BigInt: false,
|
||||||
|
BigInt64Array: false,
|
||||||
|
BigUint64Array: false,
|
||||||
|
globalThis: false
|
||||||
|
};
|
||||||
|
|
||||||
|
const newGlobals2021 = {
|
||||||
|
AggregateError: false,
|
||||||
|
FinalizationRegistry: false,
|
||||||
|
WeakRef: false
|
||||||
|
};
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/** @type {Map<string, import("../lib/shared/types").Environment>} */
|
||||||
|
export default new Map(Object.entries({
|
||||||
|
|
||||||
|
// Language
|
||||||
|
builtin: {
|
||||||
|
globals: globals.es5
|
||||||
|
},
|
||||||
|
es6: {
|
||||||
|
globals: newGlobals2015,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2015: {
|
||||||
|
globals: newGlobals2015,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2016: {
|
||||||
|
globals: newGlobals2015,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2017: {
|
||||||
|
globals: { ...newGlobals2015, ...newGlobals2017 },
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2018: {
|
||||||
|
globals: { ...newGlobals2015, ...newGlobals2017 },
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2019: {
|
||||||
|
globals: { ...newGlobals2015, ...newGlobals2017 },
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2020: {
|
||||||
|
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020 },
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 11
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2021: {
|
||||||
|
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 12
|
||||||
|
}
|
||||||
|
},
|
||||||
|
es2022: {
|
||||||
|
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 13
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Platforms
|
||||||
|
browser: {
|
||||||
|
globals: globals.browser
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
globals: globals.node,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaFeatures: {
|
||||||
|
globalReturn: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shared-node-browser": {
|
||||||
|
globals: globals["shared-node-browser"]
|
||||||
|
},
|
||||||
|
worker: {
|
||||||
|
globals: globals.worker
|
||||||
|
},
|
||||||
|
serviceworker: {
|
||||||
|
globals: globals.serviceworker
|
||||||
|
},
|
||||||
|
|
||||||
|
// Frameworks
|
||||||
|
commonjs: {
|
||||||
|
globals: globals.commonjs,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaFeatures: {
|
||||||
|
globalReturn: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
amd: {
|
||||||
|
globals: globals.amd
|
||||||
|
},
|
||||||
|
mocha: {
|
||||||
|
globals: globals.mocha
|
||||||
|
},
|
||||||
|
jasmine: {
|
||||||
|
globals: globals.jasmine
|
||||||
|
},
|
||||||
|
jest: {
|
||||||
|
globals: globals.jest
|
||||||
|
},
|
||||||
|
phantomjs: {
|
||||||
|
globals: globals.phantomjs
|
||||||
|
},
|
||||||
|
jquery: {
|
||||||
|
globals: globals.jquery
|
||||||
|
},
|
||||||
|
qunit: {
|
||||||
|
globals: globals.qunit
|
||||||
|
},
|
||||||
|
prototypejs: {
|
||||||
|
globals: globals.prototypejs
|
||||||
|
},
|
||||||
|
shelljs: {
|
||||||
|
globals: globals.shelljs
|
||||||
|
},
|
||||||
|
meteor: {
|
||||||
|
globals: globals.meteor
|
||||||
|
},
|
||||||
|
mongo: {
|
||||||
|
globals: globals.mongo
|
||||||
|
},
|
||||||
|
protractor: {
|
||||||
|
globals: globals.protractor
|
||||||
|
},
|
||||||
|
applescript: {
|
||||||
|
globals: globals.applescript
|
||||||
|
},
|
||||||
|
nashorn: {
|
||||||
|
globals: globals.nashorn
|
||||||
|
},
|
||||||
|
atomtest: {
|
||||||
|
globals: globals.atomtest
|
||||||
|
},
|
||||||
|
embertest: {
|
||||||
|
globals: globals.embertest
|
||||||
|
},
|
||||||
|
webextensions: {
|
||||||
|
globals: globals.webextensions
|
||||||
|
},
|
||||||
|
greasemonkey: {
|
||||||
|
globals: globals.greasemonkey
|
||||||
|
}
|
||||||
|
}));
|
1092
obsidian/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs
generated
vendored
Normal file
1
obsidian/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map
generated
vendored
Normal file
4315
obsidian/node_modules/@eslint/eslintrc/dist/eslintrc.cjs
generated
vendored
Normal file
1
obsidian/node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map
generated
vendored
Normal file
532
obsidian/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js
generated
vendored
Normal file
|
@ -0,0 +1,532 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `CascadingConfigArrayFactory` class.
|
||||||
|
*
|
||||||
|
* `CascadingConfigArrayFactory` class has a responsibility:
|
||||||
|
*
|
||||||
|
* 1. Handles cascading of config files.
|
||||||
|
*
|
||||||
|
* It provides two methods:
|
||||||
|
*
|
||||||
|
* - `getConfigArrayForFile(filePath)`
|
||||||
|
* Get the corresponded configuration of a given file. This method doesn't
|
||||||
|
* throw even if the given file didn't exist.
|
||||||
|
* - `clearCache()`
|
||||||
|
* Clear the internal cache. You have to call this method when
|
||||||
|
* `additionalPluginPool` was updated if `baseConfig` or `cliConfig` depends
|
||||||
|
* on the additional plugins. (`CLIEngine#addPlugin()` method calls this.)
|
||||||
|
*
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import debugOrig from "debug";
|
||||||
|
import os from "os";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
import { ConfigArrayFactory } from "./config-array-factory.js";
|
||||||
|
import {
|
||||||
|
ConfigArray,
|
||||||
|
ConfigDependency,
|
||||||
|
IgnorePattern
|
||||||
|
} from "./config-array/index.js";
|
||||||
|
import ConfigValidator from "./shared/config-validator.js";
|
||||||
|
import { emitDeprecationWarning } from "./shared/deprecation-warnings.js";
|
||||||
|
|
||||||
|
const debug = debugOrig("eslintrc:cascading-config-array-factory");
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define types for VSCode IntelliSense.
|
||||||
|
/** @typedef {import("./shared/types").ConfigData} ConfigData */
|
||||||
|
/** @typedef {import("./shared/types").Parser} Parser */
|
||||||
|
/** @typedef {import("./shared/types").Plugin} Plugin */
|
||||||
|
/** @typedef {import("./shared/types").Rule} Rule */
|
||||||
|
/** @typedef {ReturnType<ConfigArrayFactory["create"]>} ConfigArray */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} CascadingConfigArrayFactoryOptions
|
||||||
|
* @property {Map<string,Plugin>} [additionalPluginPool] The map for additional plugins.
|
||||||
|
* @property {ConfigData} [baseConfig] The config by `baseConfig` option.
|
||||||
|
* @property {ConfigData} [cliConfig] The config by CLI options (`--env`, `--global`, `--ignore-pattern`, `--parser`, `--parser-options`, `--plugin`, and `--rule`). CLI options overwrite the setting in config files.
|
||||||
|
* @property {string} [cwd] The base directory to start lookup.
|
||||||
|
* @property {string} [ignorePath] The path to the alternative file of `.eslintignore`.
|
||||||
|
* @property {string[]} [rulePaths] The value of `--rulesdir` option.
|
||||||
|
* @property {string} [specificConfigPath] The value of `--config` option.
|
||||||
|
* @property {boolean} [useEslintrc] if `false` then it doesn't load config files.
|
||||||
|
* @property {Function} loadRules The function to use to load rules.
|
||||||
|
* @property {Map<string,Rule>} builtInRules The rules that are built in to ESLint.
|
||||||
|
* @property {Object} [resolver=ModuleResolver] The module resolver object.
|
||||||
|
* @property {string} eslintAllPath The path to the definitions for eslint:all.
|
||||||
|
* @property {Function} getEslintAllConfig Returns the config data for eslint:all.
|
||||||
|
* @property {string} eslintRecommendedPath The path to the definitions for eslint:recommended.
|
||||||
|
* @property {Function} getEslintRecommendedConfig Returns the config data for eslint:recommended.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} CascadingConfigArrayFactoryInternalSlots
|
||||||
|
* @property {ConfigArray} baseConfigArray The config array of `baseConfig` option.
|
||||||
|
* @property {ConfigData} baseConfigData The config data of `baseConfig` option. This is used to reset `baseConfigArray`.
|
||||||
|
* @property {ConfigArray} cliConfigArray The config array of CLI options.
|
||||||
|
* @property {ConfigData} cliConfigData The config data of CLI options. This is used to reset `cliConfigArray`.
|
||||||
|
* @property {ConfigArrayFactory} configArrayFactory The factory for config arrays.
|
||||||
|
* @property {Map<string, ConfigArray>} configCache The cache from directory paths to config arrays.
|
||||||
|
* @property {string} cwd The base directory to start lookup.
|
||||||
|
* @property {WeakMap<ConfigArray, ConfigArray>} finalizeCache The cache from config arrays to finalized config arrays.
|
||||||
|
* @property {string} [ignorePath] The path to the alternative file of `.eslintignore`.
|
||||||
|
* @property {string[]|null} rulePaths The value of `--rulesdir` option. This is used to reset `baseConfigArray`.
|
||||||
|
* @property {string|null} specificConfigPath The value of `--config` option. This is used to reset `cliConfigArray`.
|
||||||
|
* @property {boolean} useEslintrc if `false` then it doesn't load config files.
|
||||||
|
* @property {Function} loadRules The function to use to load rules.
|
||||||
|
* @property {Map<string,Rule>} builtInRules The rules that are built in to ESLint.
|
||||||
|
* @property {Object} [resolver=ModuleResolver] The module resolver object.
|
||||||
|
* @property {string} eslintAllPath The path to the definitions for eslint:all.
|
||||||
|
* @property {Function} getEslintAllConfig Returns the config data for eslint:all.
|
||||||
|
* @property {string} eslintRecommendedPath The path to the definitions for eslint:recommended.
|
||||||
|
* @property {Function} getEslintRecommendedConfig Returns the config data for eslint:recommended.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type {WeakMap<CascadingConfigArrayFactory, CascadingConfigArrayFactoryInternalSlots>} */
|
||||||
|
const internalSlotsMap = new WeakMap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the config array from `baseConfig` and `rulePaths`.
|
||||||
|
* @param {CascadingConfigArrayFactoryInternalSlots} slots The slots.
|
||||||
|
* @returns {ConfigArray} The config array of the base configs.
|
||||||
|
*/
|
||||||
|
function createBaseConfigArray({
|
||||||
|
configArrayFactory,
|
||||||
|
baseConfigData,
|
||||||
|
rulePaths,
|
||||||
|
cwd,
|
||||||
|
loadRules
|
||||||
|
}) {
|
||||||
|
const baseConfigArray = configArrayFactory.create(
|
||||||
|
baseConfigData,
|
||||||
|
{ name: "BaseConfig" }
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create the config array element for the default ignore patterns.
|
||||||
|
* This element has `ignorePattern` property that ignores the default
|
||||||
|
* patterns in the current working directory.
|
||||||
|
*/
|
||||||
|
baseConfigArray.unshift(configArrayFactory.create(
|
||||||
|
{ ignorePatterns: IgnorePattern.DefaultPatterns },
|
||||||
|
{ name: "DefaultIgnorePattern" }
|
||||||
|
)[0]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load rules `--rulesdir` option as a pseudo plugin.
|
||||||
|
* Use a pseudo plugin to define rules of `--rulesdir`, so we can validate
|
||||||
|
* the rule's options with only information in the config array.
|
||||||
|
*/
|
||||||
|
if (rulePaths && rulePaths.length > 0) {
|
||||||
|
baseConfigArray.push({
|
||||||
|
type: "config",
|
||||||
|
name: "--rulesdir",
|
||||||
|
filePath: "",
|
||||||
|
plugins: {
|
||||||
|
"": new ConfigDependency({
|
||||||
|
definition: {
|
||||||
|
rules: rulePaths.reduce(
|
||||||
|
(map, rulesPath) => Object.assign(
|
||||||
|
map,
|
||||||
|
loadRules(rulesPath, cwd)
|
||||||
|
),
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
},
|
||||||
|
filePath: "",
|
||||||
|
id: "",
|
||||||
|
importerName: "--rulesdir",
|
||||||
|
importerPath: ""
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return baseConfigArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the config array from CLI options.
|
||||||
|
* @param {CascadingConfigArrayFactoryInternalSlots} slots The slots.
|
||||||
|
* @returns {ConfigArray} The config array of the base configs.
|
||||||
|
*/
|
||||||
|
function createCLIConfigArray({
|
||||||
|
cliConfigData,
|
||||||
|
configArrayFactory,
|
||||||
|
cwd,
|
||||||
|
ignorePath,
|
||||||
|
specificConfigPath
|
||||||
|
}) {
|
||||||
|
const cliConfigArray = configArrayFactory.create(
|
||||||
|
cliConfigData,
|
||||||
|
{ name: "CLIOptions" }
|
||||||
|
);
|
||||||
|
|
||||||
|
cliConfigArray.unshift(
|
||||||
|
...(ignorePath
|
||||||
|
? configArrayFactory.loadESLintIgnore(ignorePath)
|
||||||
|
: configArrayFactory.loadDefaultESLintIgnore())
|
||||||
|
);
|
||||||
|
|
||||||
|
if (specificConfigPath) {
|
||||||
|
cliConfigArray.unshift(
|
||||||
|
...configArrayFactory.loadFile(
|
||||||
|
specificConfigPath,
|
||||||
|
{ name: "--config", basePath: cwd }
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cliConfigArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The error type when there are files matched by a glob, but all of them have been ignored.
|
||||||
|
*/
|
||||||
|
class ConfigurationNotFoundError extends Error {
|
||||||
|
|
||||||
|
// eslint-disable-next-line jsdoc/require-description
|
||||||
|
/**
|
||||||
|
* @param {string} directoryPath The directory path.
|
||||||
|
*/
|
||||||
|
constructor(directoryPath) {
|
||||||
|
super(`No ESLint configuration found in ${directoryPath}.`);
|
||||||
|
this.messageTemplate = "no-config-found";
|
||||||
|
this.messageData = { directoryPath };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides the functionality that enumerates every file which is
|
||||||
|
* matched by given glob patterns and that configuration.
|
||||||
|
*/
|
||||||
|
class CascadingConfigArrayFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize this enumerator.
|
||||||
|
* @param {CascadingConfigArrayFactoryOptions} options The options.
|
||||||
|
*/
|
||||||
|
constructor({
|
||||||
|
additionalPluginPool = new Map(),
|
||||||
|
baseConfig: baseConfigData = null,
|
||||||
|
cliConfig: cliConfigData = null,
|
||||||
|
cwd = process.cwd(),
|
||||||
|
ignorePath,
|
||||||
|
resolvePluginsRelativeTo,
|
||||||
|
rulePaths = [],
|
||||||
|
specificConfigPath = null,
|
||||||
|
useEslintrc = true,
|
||||||
|
builtInRules = new Map(),
|
||||||
|
loadRules,
|
||||||
|
resolver,
|
||||||
|
eslintRecommendedPath,
|
||||||
|
getEslintRecommendedConfig,
|
||||||
|
eslintAllPath,
|
||||||
|
getEslintAllConfig
|
||||||
|
} = {}) {
|
||||||
|
const configArrayFactory = new ConfigArrayFactory({
|
||||||
|
additionalPluginPool,
|
||||||
|
cwd,
|
||||||
|
resolvePluginsRelativeTo,
|
||||||
|
builtInRules,
|
||||||
|
resolver,
|
||||||
|
eslintRecommendedPath,
|
||||||
|
getEslintRecommendedConfig,
|
||||||
|
eslintAllPath,
|
||||||
|
getEslintAllConfig
|
||||||
|
});
|
||||||
|
|
||||||
|
internalSlotsMap.set(this, {
|
||||||
|
baseConfigArray: createBaseConfigArray({
|
||||||
|
baseConfigData,
|
||||||
|
configArrayFactory,
|
||||||
|
cwd,
|
||||||
|
rulePaths,
|
||||||
|
loadRules
|
||||||
|
}),
|
||||||
|
baseConfigData,
|
||||||
|
cliConfigArray: createCLIConfigArray({
|
||||||
|
cliConfigData,
|
||||||
|
configArrayFactory,
|
||||||
|
cwd,
|
||||||
|
ignorePath,
|
||||||
|
specificConfigPath
|
||||||
|
}),
|
||||||
|
cliConfigData,
|
||||||
|
configArrayFactory,
|
||||||
|
configCache: new Map(),
|
||||||
|
cwd,
|
||||||
|
finalizeCache: new WeakMap(),
|
||||||
|
ignorePath,
|
||||||
|
rulePaths,
|
||||||
|
specificConfigPath,
|
||||||
|
useEslintrc,
|
||||||
|
builtInRules,
|
||||||
|
loadRules
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The path to the current working directory.
|
||||||
|
* This is used by tests.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
get cwd() {
|
||||||
|
const { cwd } = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
return cwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the config array of a given file.
|
||||||
|
* If `filePath` was not given, it returns the config which contains only
|
||||||
|
* `baseConfigData` and `cliConfigData`.
|
||||||
|
* @param {string} [filePath] The file path to a file.
|
||||||
|
* @param {Object} [options] The options.
|
||||||
|
* @param {boolean} [options.ignoreNotFoundError] If `true` then it doesn't throw `ConfigurationNotFoundError`.
|
||||||
|
* @returns {ConfigArray} The config array of the file.
|
||||||
|
*/
|
||||||
|
getConfigArrayForFile(filePath, { ignoreNotFoundError = false } = {}) {
|
||||||
|
const {
|
||||||
|
baseConfigArray,
|
||||||
|
cliConfigArray,
|
||||||
|
cwd
|
||||||
|
} = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
if (!filePath) {
|
||||||
|
return new ConfigArray(...baseConfigArray, ...cliConfigArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
const directoryPath = path.dirname(path.resolve(cwd, filePath));
|
||||||
|
|
||||||
|
debug(`Load config files for ${directoryPath}.`);
|
||||||
|
|
||||||
|
return this._finalizeConfigArray(
|
||||||
|
this._loadConfigInAncestors(directoryPath),
|
||||||
|
directoryPath,
|
||||||
|
ignoreNotFoundError
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the config data to override all configs.
|
||||||
|
* Require to call `clearCache()` method after this method is called.
|
||||||
|
* @param {ConfigData} configData The config data to override all configs.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
setOverrideConfig(configData) {
|
||||||
|
const slots = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
slots.cliConfigData = configData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear config cache.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
clearCache() {
|
||||||
|
const slots = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
slots.baseConfigArray = createBaseConfigArray(slots);
|
||||||
|
slots.cliConfigArray = createCLIConfigArray(slots);
|
||||||
|
slots.configCache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load and normalize config files from the ancestor directories.
|
||||||
|
* @param {string} directoryPath The path to a leaf directory.
|
||||||
|
* @param {boolean} configsExistInSubdirs `true` if configurations exist in subdirectories.
|
||||||
|
* @returns {ConfigArray} The loaded config.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
_loadConfigInAncestors(directoryPath, configsExistInSubdirs = false) {
|
||||||
|
const {
|
||||||
|
baseConfigArray,
|
||||||
|
configArrayFactory,
|
||||||
|
configCache,
|
||||||
|
cwd,
|
||||||
|
useEslintrc
|
||||||
|
} = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
if (!useEslintrc) {
|
||||||
|
return baseConfigArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
let configArray = configCache.get(directoryPath);
|
||||||
|
|
||||||
|
// Hit cache.
|
||||||
|
if (configArray) {
|
||||||
|
debug(`Cache hit: ${directoryPath}.`);
|
||||||
|
return configArray;
|
||||||
|
}
|
||||||
|
debug(`No cache found: ${directoryPath}.`);
|
||||||
|
|
||||||
|
const homePath = os.homedir();
|
||||||
|
|
||||||
|
// Consider this is root.
|
||||||
|
if (directoryPath === homePath && cwd !== homePath) {
|
||||||
|
debug("Stop traversing because of considered root.");
|
||||||
|
if (configsExistInSubdirs) {
|
||||||
|
const filePath = ConfigArrayFactory.getPathToConfigFileInDirectory(directoryPath);
|
||||||
|
|
||||||
|
if (filePath) {
|
||||||
|
emitDeprecationWarning(
|
||||||
|
filePath,
|
||||||
|
"ESLINT_PERSONAL_CONFIG_SUPPRESS"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this._cacheConfig(directoryPath, baseConfigArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the config on this directory.
|
||||||
|
try {
|
||||||
|
configArray = configArrayFactory.loadInDirectory(directoryPath);
|
||||||
|
} catch (error) {
|
||||||
|
/* istanbul ignore next */
|
||||||
|
if (error.code === "EACCES") {
|
||||||
|
debug("Stop traversing because of 'EACCES' error.");
|
||||||
|
return this._cacheConfig(directoryPath, baseConfigArray);
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configArray.length > 0 && configArray.isRoot()) {
|
||||||
|
debug("Stop traversing because of 'root:true'.");
|
||||||
|
configArray.unshift(...baseConfigArray);
|
||||||
|
return this._cacheConfig(directoryPath, configArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load from the ancestors and merge it.
|
||||||
|
const parentPath = path.dirname(directoryPath);
|
||||||
|
const parentConfigArray = parentPath && parentPath !== directoryPath
|
||||||
|
? this._loadConfigInAncestors(
|
||||||
|
parentPath,
|
||||||
|
configsExistInSubdirs || configArray.length > 0
|
||||||
|
)
|
||||||
|
: baseConfigArray;
|
||||||
|
|
||||||
|
if (configArray.length > 0) {
|
||||||
|
configArray.unshift(...parentConfigArray);
|
||||||
|
} else {
|
||||||
|
configArray = parentConfigArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cache and return.
|
||||||
|
return this._cacheConfig(directoryPath, configArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Freeze and cache a given config.
|
||||||
|
* @param {string} directoryPath The path to a directory as a cache key.
|
||||||
|
* @param {ConfigArray} configArray The config array as a cache value.
|
||||||
|
* @returns {ConfigArray} The `configArray` (frozen).
|
||||||
|
*/
|
||||||
|
_cacheConfig(directoryPath, configArray) {
|
||||||
|
const { configCache } = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
Object.freeze(configArray);
|
||||||
|
configCache.set(directoryPath, configArray);
|
||||||
|
|
||||||
|
return configArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalize a given config array.
|
||||||
|
* Concatenate `--config` and other CLI options.
|
||||||
|
* @param {ConfigArray} configArray The parent config array.
|
||||||
|
* @param {string} directoryPath The path to the leaf directory to find config files.
|
||||||
|
* @param {boolean} ignoreNotFoundError If `true` then it doesn't throw `ConfigurationNotFoundError`.
|
||||||
|
* @returns {ConfigArray} The loaded config.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
_finalizeConfigArray(configArray, directoryPath, ignoreNotFoundError) {
|
||||||
|
const {
|
||||||
|
cliConfigArray,
|
||||||
|
configArrayFactory,
|
||||||
|
finalizeCache,
|
||||||
|
useEslintrc,
|
||||||
|
builtInRules
|
||||||
|
} = internalSlotsMap.get(this);
|
||||||
|
|
||||||
|
let finalConfigArray = finalizeCache.get(configArray);
|
||||||
|
|
||||||
|
if (!finalConfigArray) {
|
||||||
|
finalConfigArray = configArray;
|
||||||
|
|
||||||
|
// Load the personal config if there are no regular config files.
|
||||||
|
if (
|
||||||
|
useEslintrc &&
|
||||||
|
configArray.every(c => !c.filePath) &&
|
||||||
|
cliConfigArray.every(c => !c.filePath) // `--config` option can be a file.
|
||||||
|
) {
|
||||||
|
const homePath = os.homedir();
|
||||||
|
|
||||||
|
debug("Loading the config file of the home directory:", homePath);
|
||||||
|
|
||||||
|
const personalConfigArray = configArrayFactory.loadInDirectory(
|
||||||
|
homePath,
|
||||||
|
{ name: "PersonalConfig" }
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
personalConfigArray.length > 0 &&
|
||||||
|
!directoryPath.startsWith(homePath)
|
||||||
|
) {
|
||||||
|
const lastElement =
|
||||||
|
personalConfigArray[personalConfigArray.length - 1];
|
||||||
|
|
||||||
|
emitDeprecationWarning(
|
||||||
|
lastElement.filePath,
|
||||||
|
"ESLINT_PERSONAL_CONFIG_LOAD"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
finalConfigArray = finalConfigArray.concat(personalConfigArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply CLI options.
|
||||||
|
if (cliConfigArray.length > 0) {
|
||||||
|
finalConfigArray = finalConfigArray.concat(cliConfigArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate rule settings and environments.
|
||||||
|
const validator = new ConfigValidator({
|
||||||
|
builtInRules
|
||||||
|
});
|
||||||
|
|
||||||
|
validator.validateConfigArray(finalConfigArray);
|
||||||
|
|
||||||
|
// Cache it.
|
||||||
|
Object.freeze(finalConfigArray);
|
||||||
|
finalizeCache.set(configArray, finalConfigArray);
|
||||||
|
|
||||||
|
debug(
|
||||||
|
"Configuration was determined: %o on %s",
|
||||||
|
finalConfigArray,
|
||||||
|
directoryPath
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// At least one element (the default ignore patterns) exists.
|
||||||
|
if (!ignoreNotFoundError && useEslintrc && finalConfigArray.length <= 1) {
|
||||||
|
throw new ConfigurationNotFoundError(directoryPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalConfigArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export { CascadingConfigArrayFactory };
|
1149
obsidian/node_modules/@eslint/eslintrc/lib/config-array-factory.js
generated
vendored
Normal file
523
obsidian/node_modules/@eslint/eslintrc/lib/config-array/config-array.js
generated
vendored
Normal file
|
@ -0,0 +1,523 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `ConfigArray` class.
|
||||||
|
*
|
||||||
|
* `ConfigArray` class expresses the full of a configuration. It has the entry
|
||||||
|
* config file, base config files that were extended, loaded parsers, and loaded
|
||||||
|
* plugins.
|
||||||
|
*
|
||||||
|
* `ConfigArray` class provides three properties and two methods.
|
||||||
|
*
|
||||||
|
* - `pluginEnvironments`
|
||||||
|
* - `pluginProcessors`
|
||||||
|
* - `pluginRules`
|
||||||
|
* The `Map` objects that contain the members of all plugins that this
|
||||||
|
* config array contains. Those map objects don't have mutation methods.
|
||||||
|
* Those keys are the member ID such as `pluginId/memberName`.
|
||||||
|
* - `isRoot()`
|
||||||
|
* If `true` then this configuration has `root:true` property.
|
||||||
|
* - `extractConfig(filePath)`
|
||||||
|
* Extract the final configuration for a given file. This means merging
|
||||||
|
* every config array element which that `criteria` property matched. The
|
||||||
|
* `filePath` argument must be an absolute path.
|
||||||
|
*
|
||||||
|
* `ConfigArrayFactory` provides the loading logic of config files.
|
||||||
|
*
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import { ExtractedConfig } from "./extracted-config.js";
|
||||||
|
import { IgnorePattern } from "./ignore-pattern.js";
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define types for VSCode IntelliSense.
|
||||||
|
/** @typedef {import("../../shared/types").Environment} Environment */
|
||||||
|
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */
|
||||||
|
/** @typedef {import("../../shared/types").RuleConf} RuleConf */
|
||||||
|
/** @typedef {import("../../shared/types").Rule} Rule */
|
||||||
|
/** @typedef {import("../../shared/types").Plugin} Plugin */
|
||||||
|
/** @typedef {import("../../shared/types").Processor} Processor */
|
||||||
|
/** @typedef {import("./config-dependency").DependentParser} DependentParser */
|
||||||
|
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */
|
||||||
|
/** @typedef {import("./override-tester")["OverrideTester"]} OverrideTester */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ConfigArrayElement
|
||||||
|
* @property {string} name The name of this config element.
|
||||||
|
* @property {string} filePath The path to the source file of this config element.
|
||||||
|
* @property {InstanceType<OverrideTester>|null} criteria The tester for the `files` and `excludedFiles` of this config element.
|
||||||
|
* @property {Record<string, boolean>|undefined} env The environment settings.
|
||||||
|
* @property {Record<string, GlobalConf>|undefined} globals The global variable settings.
|
||||||
|
* @property {IgnorePattern|undefined} ignorePattern The ignore patterns.
|
||||||
|
* @property {boolean|undefined} noInlineConfig The flag that disables directive comments.
|
||||||
|
* @property {DependentParser|undefined} parser The parser loader.
|
||||||
|
* @property {Object|undefined} parserOptions The parser options.
|
||||||
|
* @property {Record<string, DependentPlugin>|undefined} plugins The plugin loaders.
|
||||||
|
* @property {string|undefined} processor The processor name to refer plugin's processor.
|
||||||
|
* @property {boolean|undefined} reportUnusedDisableDirectives The flag to report unused `eslint-disable` comments.
|
||||||
|
* @property {boolean|undefined} root The flag to express root.
|
||||||
|
* @property {Record<string, RuleConf>|undefined} rules The rule settings
|
||||||
|
* @property {Object|undefined} settings The shared settings.
|
||||||
|
* @property {"config" | "ignore" | "implicit-processor"} type The element type.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ConfigArrayInternalSlots
|
||||||
|
* @property {Map<string, ExtractedConfig>} cache The cache to extract configs.
|
||||||
|
* @property {ReadonlyMap<string, Environment>|null} envMap The map from environment ID to environment definition.
|
||||||
|
* @property {ReadonlyMap<string, Processor>|null} processorMap The map from processor ID to environment definition.
|
||||||
|
* @property {ReadonlyMap<string, Rule>|null} ruleMap The map from rule ID to rule definition.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type {WeakMap<ConfigArray, ConfigArrayInternalSlots>} */
|
||||||
|
const internalSlotsMap = new class extends WeakMap {
|
||||||
|
get(key) {
|
||||||
|
let value = super.get(key);
|
||||||
|
|
||||||
|
if (!value) {
|
||||||
|
value = {
|
||||||
|
cache: new Map(),
|
||||||
|
envMap: null,
|
||||||
|
processorMap: null,
|
||||||
|
ruleMap: null
|
||||||
|
};
|
||||||
|
super.set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the indices which are matched to a given file.
|
||||||
|
* @param {ConfigArrayElement[]} elements The elements.
|
||||||
|
* @param {string} filePath The path to a target file.
|
||||||
|
* @returns {number[]} The indices.
|
||||||
|
*/
|
||||||
|
function getMatchedIndices(elements, filePath) {
|
||||||
|
const indices = [];
|
||||||
|
|
||||||
|
for (let i = elements.length - 1; i >= 0; --i) {
|
||||||
|
const element = elements[i];
|
||||||
|
|
||||||
|
if (!element.criteria || (filePath && element.criteria.test(filePath))) {
|
||||||
|
indices.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return indices;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a value is a non-null object.
|
||||||
|
* @param {any} x The value to check.
|
||||||
|
* @returns {boolean} `true` if the value is a non-null object.
|
||||||
|
*/
|
||||||
|
function isNonNullObject(x) {
|
||||||
|
return typeof x === "object" && x !== null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge two objects.
|
||||||
|
*
|
||||||
|
* Assign every property values of `y` to `x` if `x` doesn't have the property.
|
||||||
|
* If `x`'s property value is an object, it does recursive.
|
||||||
|
* @param {Object} target The destination to merge
|
||||||
|
* @param {Object|undefined} source The source to merge.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function mergeWithoutOverwrite(target, source) {
|
||||||
|
if (!isNonNullObject(source)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of Object.keys(source)) {
|
||||||
|
if (key === "__proto__") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isNonNullObject(target[key])) {
|
||||||
|
mergeWithoutOverwrite(target[key], source[key]);
|
||||||
|
} else if (target[key] === void 0) {
|
||||||
|
if (isNonNullObject(source[key])) {
|
||||||
|
target[key] = Array.isArray(source[key]) ? [] : {};
|
||||||
|
mergeWithoutOverwrite(target[key], source[key]);
|
||||||
|
} else if (source[key] !== void 0) {
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The error for plugin conflicts.
|
||||||
|
*/
|
||||||
|
class PluginConflictError extends Error {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize this error object.
|
||||||
|
* @param {string} pluginId The plugin ID.
|
||||||
|
* @param {{filePath:string, importerName:string}[]} plugins The resolved plugins.
|
||||||
|
*/
|
||||||
|
constructor(pluginId, plugins) {
|
||||||
|
super(`Plugin "${pluginId}" was conflicted between ${plugins.map(p => `"${p.importerName}"`).join(" and ")}.`);
|
||||||
|
this.messageTemplate = "plugin-conflict";
|
||||||
|
this.messageData = { pluginId, plugins };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge plugins.
|
||||||
|
* `target`'s definition is prior to `source`'s.
|
||||||
|
* @param {Record<string, DependentPlugin>} target The destination to merge
|
||||||
|
* @param {Record<string, DependentPlugin>|undefined} source The source to merge.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function mergePlugins(target, source) {
|
||||||
|
if (!isNonNullObject(source)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of Object.keys(source)) {
|
||||||
|
if (key === "__proto__") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const targetValue = target[key];
|
||||||
|
const sourceValue = source[key];
|
||||||
|
|
||||||
|
// Adopt the plugin which was found at first.
|
||||||
|
if (targetValue === void 0) {
|
||||||
|
if (sourceValue.error) {
|
||||||
|
throw sourceValue.error;
|
||||||
|
}
|
||||||
|
target[key] = sourceValue;
|
||||||
|
} else if (sourceValue.filePath !== targetValue.filePath) {
|
||||||
|
throw new PluginConflictError(key, [
|
||||||
|
{
|
||||||
|
filePath: targetValue.filePath,
|
||||||
|
importerName: targetValue.importerName
|
||||||
|
},
|
||||||
|
{
|
||||||
|
filePath: sourceValue.filePath,
|
||||||
|
importerName: sourceValue.importerName
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge rule configs.
|
||||||
|
* `target`'s definition is prior to `source`'s.
|
||||||
|
* @param {Record<string, Array>} target The destination to merge
|
||||||
|
* @param {Record<string, RuleConf>|undefined} source The source to merge.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function mergeRuleConfigs(target, source) {
|
||||||
|
if (!isNonNullObject(source)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of Object.keys(source)) {
|
||||||
|
if (key === "__proto__") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const targetDef = target[key];
|
||||||
|
const sourceDef = source[key];
|
||||||
|
|
||||||
|
// Adopt the rule config which was found at first.
|
||||||
|
if (targetDef === void 0) {
|
||||||
|
if (Array.isArray(sourceDef)) {
|
||||||
|
target[key] = [...sourceDef];
|
||||||
|
} else {
|
||||||
|
target[key] = [sourceDef];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the first found rule config is severity only and the current rule
|
||||||
|
* config has options, merge the severity and the options.
|
||||||
|
*/
|
||||||
|
} else if (
|
||||||
|
targetDef.length === 1 &&
|
||||||
|
Array.isArray(sourceDef) &&
|
||||||
|
sourceDef.length >= 2
|
||||||
|
) {
|
||||||
|
targetDef.push(...sourceDef.slice(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the extracted config.
|
||||||
|
* @param {ConfigArray} instance The config elements.
|
||||||
|
* @param {number[]} indices The indices to use.
|
||||||
|
* @returns {ExtractedConfig} The extracted config.
|
||||||
|
*/
|
||||||
|
function createConfig(instance, indices) {
|
||||||
|
const config = new ExtractedConfig();
|
||||||
|
const ignorePatterns = [];
|
||||||
|
|
||||||
|
// Merge elements.
|
||||||
|
for (const index of indices) {
|
||||||
|
const element = instance[index];
|
||||||
|
|
||||||
|
// Adopt the parser which was found at first.
|
||||||
|
if (!config.parser && element.parser) {
|
||||||
|
if (element.parser.error) {
|
||||||
|
throw element.parser.error;
|
||||||
|
}
|
||||||
|
config.parser = element.parser;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adopt the processor which was found at first.
|
||||||
|
if (!config.processor && element.processor) {
|
||||||
|
config.processor = element.processor;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adopt the noInlineConfig which was found at first.
|
||||||
|
if (config.noInlineConfig === void 0 && element.noInlineConfig !== void 0) {
|
||||||
|
config.noInlineConfig = element.noInlineConfig;
|
||||||
|
config.configNameOfNoInlineConfig = element.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adopt the reportUnusedDisableDirectives which was found at first.
|
||||||
|
if (config.reportUnusedDisableDirectives === void 0 && element.reportUnusedDisableDirectives !== void 0) {
|
||||||
|
config.reportUnusedDisableDirectives = element.reportUnusedDisableDirectives;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect ignorePatterns
|
||||||
|
if (element.ignorePattern) {
|
||||||
|
ignorePatterns.push(element.ignorePattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Merge others.
|
||||||
|
mergeWithoutOverwrite(config.env, element.env);
|
||||||
|
mergeWithoutOverwrite(config.globals, element.globals);
|
||||||
|
mergeWithoutOverwrite(config.parserOptions, element.parserOptions);
|
||||||
|
mergeWithoutOverwrite(config.settings, element.settings);
|
||||||
|
mergePlugins(config.plugins, element.plugins);
|
||||||
|
mergeRuleConfigs(config.rules, element.rules);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the predicate function for ignore patterns.
|
||||||
|
if (ignorePatterns.length > 0) {
|
||||||
|
config.ignores = IgnorePattern.createIgnore(ignorePatterns.reverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collect definitions.
|
||||||
|
* @template T, U
|
||||||
|
* @param {string} pluginId The plugin ID for prefix.
|
||||||
|
* @param {Record<string,T>} defs The definitions to collect.
|
||||||
|
* @param {Map<string, U>} map The map to output.
|
||||||
|
* @param {function(T): U} [normalize] The normalize function for each value.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function collect(pluginId, defs, map, normalize) {
|
||||||
|
if (defs) {
|
||||||
|
const prefix = pluginId && `${pluginId}/`;
|
||||||
|
|
||||||
|
for (const [key, value] of Object.entries(defs)) {
|
||||||
|
map.set(
|
||||||
|
`${prefix}${key}`,
|
||||||
|
normalize ? normalize(value) : value
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize a rule definition.
|
||||||
|
* @param {Function|Rule} rule The rule definition to normalize.
|
||||||
|
* @returns {Rule} The normalized rule definition.
|
||||||
|
*/
|
||||||
|
function normalizePluginRule(rule) {
|
||||||
|
return typeof rule === "function" ? { create: rule } : rule;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the mutation methods from a given map.
|
||||||
|
* @param {Map<any, any>} map The map object to delete.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function deleteMutationMethods(map) {
|
||||||
|
Object.defineProperties(map, {
|
||||||
|
clear: { configurable: true, value: void 0 },
|
||||||
|
delete: { configurable: true, value: void 0 },
|
||||||
|
set: { configurable: true, value: void 0 }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create `envMap`, `processorMap`, `ruleMap` with the plugins in the config array.
|
||||||
|
* @param {ConfigArrayElement[]} elements The config elements.
|
||||||
|
* @param {ConfigArrayInternalSlots} slots The internal slots.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function initPluginMemberMaps(elements, slots) {
|
||||||
|
const processed = new Set();
|
||||||
|
|
||||||
|
slots.envMap = new Map();
|
||||||
|
slots.processorMap = new Map();
|
||||||
|
slots.ruleMap = new Map();
|
||||||
|
|
||||||
|
for (const element of elements) {
|
||||||
|
if (!element.plugins) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [pluginId, value] of Object.entries(element.plugins)) {
|
||||||
|
const plugin = value.definition;
|
||||||
|
|
||||||
|
if (!plugin || processed.has(pluginId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
processed.add(pluginId);
|
||||||
|
|
||||||
|
collect(pluginId, plugin.environments, slots.envMap);
|
||||||
|
collect(pluginId, plugin.processors, slots.processorMap);
|
||||||
|
collect(pluginId, plugin.rules, slots.ruleMap, normalizePluginRule);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteMutationMethods(slots.envMap);
|
||||||
|
deleteMutationMethods(slots.processorMap);
|
||||||
|
deleteMutationMethods(slots.ruleMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create `envMap`, `processorMap`, `ruleMap` with the plugins in the config array.
|
||||||
|
* @param {ConfigArray} instance The config elements.
|
||||||
|
* @returns {ConfigArrayInternalSlots} The extracted config.
|
||||||
|
*/
|
||||||
|
function ensurePluginMemberMaps(instance) {
|
||||||
|
const slots = internalSlotsMap.get(instance);
|
||||||
|
|
||||||
|
if (!slots.ruleMap) {
|
||||||
|
initPluginMemberMaps(instance, slots);
|
||||||
|
}
|
||||||
|
|
||||||
|
return slots;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Config Array.
|
||||||
|
*
|
||||||
|
* `ConfigArray` instance contains all settings, parsers, and plugins.
|
||||||
|
* You need to call `ConfigArray#extractConfig(filePath)` method in order to
|
||||||
|
* extract, merge and get only the config data which is related to an arbitrary
|
||||||
|
* file.
|
||||||
|
* @extends {Array<ConfigArrayElement>}
|
||||||
|
*/
|
||||||
|
class ConfigArray extends Array {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plugin environments.
|
||||||
|
* The returned map cannot be mutated.
|
||||||
|
* @type {ReadonlyMap<string, Environment>} The plugin environments.
|
||||||
|
*/
|
||||||
|
get pluginEnvironments() {
|
||||||
|
return ensurePluginMemberMaps(this).envMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plugin processors.
|
||||||
|
* The returned map cannot be mutated.
|
||||||
|
* @type {ReadonlyMap<string, Processor>} The plugin processors.
|
||||||
|
*/
|
||||||
|
get pluginProcessors() {
|
||||||
|
return ensurePluginMemberMaps(this).processorMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plugin rules.
|
||||||
|
* The returned map cannot be mutated.
|
||||||
|
* @returns {ReadonlyMap<string, Rule>} The plugin rules.
|
||||||
|
*/
|
||||||
|
get pluginRules() {
|
||||||
|
return ensurePluginMemberMaps(this).ruleMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this config has `root` flag.
|
||||||
|
* @returns {boolean} `true` if this config array is root.
|
||||||
|
*/
|
||||||
|
isRoot() {
|
||||||
|
for (let i = this.length - 1; i >= 0; --i) {
|
||||||
|
const root = this[i].root;
|
||||||
|
|
||||||
|
if (typeof root === "boolean") {
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract the config data which is related to a given file.
|
||||||
|
* @param {string} filePath The absolute path to the target file.
|
||||||
|
* @returns {ExtractedConfig} The extracted config data.
|
||||||
|
*/
|
||||||
|
extractConfig(filePath) {
|
||||||
|
const { cache } = internalSlotsMap.get(this);
|
||||||
|
const indices = getMatchedIndices(this, filePath);
|
||||||
|
const cacheKey = indices.join(",");
|
||||||
|
|
||||||
|
if (!cache.has(cacheKey)) {
|
||||||
|
cache.set(cacheKey, createConfig(this, indices));
|
||||||
|
}
|
||||||
|
|
||||||
|
return cache.get(cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a given path is an additional lint target.
|
||||||
|
* @param {string} filePath The absolute path to the target file.
|
||||||
|
* @returns {boolean} `true` if the file is an additional lint target.
|
||||||
|
*/
|
||||||
|
isAdditionalTargetPath(filePath) {
|
||||||
|
for (const { criteria, type } of this) {
|
||||||
|
if (
|
||||||
|
type === "config" &&
|
||||||
|
criteria &&
|
||||||
|
!criteria.endsWithWildcard &&
|
||||||
|
criteria.test(filePath)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the used extracted configs.
|
||||||
|
* CLIEngine will use this method to collect used deprecated rules.
|
||||||
|
* @param {ConfigArray} instance The config array object to get.
|
||||||
|
* @returns {ExtractedConfig[]} The used extracted configs.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function getUsedExtractedConfigs(instance) {
|
||||||
|
const { cache } = internalSlotsMap.get(instance);
|
||||||
|
|
||||||
|
return Array.from(cache.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export {
|
||||||
|
ConfigArray,
|
||||||
|
getUsedExtractedConfigs
|
||||||
|
};
|
115
obsidian/node_modules/@eslint/eslintrc/lib/config-array/config-dependency.js
generated
vendored
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `ConfigDependency` class.
|
||||||
|
*
|
||||||
|
* `ConfigDependency` class expresses a loaded parser or plugin.
|
||||||
|
*
|
||||||
|
* If the parser or plugin was loaded successfully, it has `definition` property
|
||||||
|
* and `filePath` property. Otherwise, it has `error` property.
|
||||||
|
*
|
||||||
|
* When `JSON.stringify()` converted a `ConfigDependency` object to a JSON, it
|
||||||
|
* omits `definition` property.
|
||||||
|
*
|
||||||
|
* `ConfigArrayFactory` creates `ConfigDependency` objects when it loads parsers
|
||||||
|
* or plugins.
|
||||||
|
*
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
import util from "util";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class is to store parsers or plugins.
|
||||||
|
* This class hides the loaded object from `JSON.stringify()` and `console.log`.
|
||||||
|
* @template T
|
||||||
|
*/
|
||||||
|
class ConfigDependency {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize this instance.
|
||||||
|
* @param {Object} data The dependency data.
|
||||||
|
* @param {T} [data.definition] The dependency if the loading succeeded.
|
||||||
|
* @param {Error} [data.error] The error object if the loading failed.
|
||||||
|
* @param {string} [data.filePath] The actual path to the dependency if the loading succeeded.
|
||||||
|
* @param {string} data.id The ID of this dependency.
|
||||||
|
* @param {string} data.importerName The name of the config file which loads this dependency.
|
||||||
|
* @param {string} data.importerPath The path to the config file which loads this dependency.
|
||||||
|
*/
|
||||||
|
constructor({
|
||||||
|
definition = null,
|
||||||
|
error = null,
|
||||||
|
filePath = null,
|
||||||
|
id,
|
||||||
|
importerName,
|
||||||
|
importerPath
|
||||||
|
}) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The loaded dependency if the loading succeeded.
|
||||||
|
* @type {T|null}
|
||||||
|
*/
|
||||||
|
this.definition = definition;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The error object if the loading failed.
|
||||||
|
* @type {Error|null}
|
||||||
|
*/
|
||||||
|
this.error = error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The loaded dependency if the loading succeeded.
|
||||||
|
* @type {string|null}
|
||||||
|
*/
|
||||||
|
this.filePath = filePath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ID of this dependency.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.id = id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the config file which loads this dependency.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.importerName = importerName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The path to the config file which loads this dependency.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.importerPath = importerPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line jsdoc/require-description
|
||||||
|
/**
|
||||||
|
* @returns {Object} a JSON compatible object.
|
||||||
|
*/
|
||||||
|
toJSON() {
|
||||||
|
const obj = this[util.inspect.custom]();
|
||||||
|
|
||||||
|
// Display `error.message` (`Error#message` is unenumerable).
|
||||||
|
if (obj.error instanceof Error) {
|
||||||
|
obj.error = { ...obj.error, message: obj.error.message };
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line jsdoc/require-description
|
||||||
|
/**
|
||||||
|
* @returns {Object} an object to display by `console.log()`.
|
||||||
|
*/
|
||||||
|
[util.inspect.custom]() {
|
||||||
|
const {
|
||||||
|
definition: _ignore, // eslint-disable-line no-unused-vars
|
||||||
|
...obj
|
||||||
|
} = this;
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @typedef {ConfigDependency<import("../../shared/types").Parser>} DependentParser */
|
||||||
|
/** @typedef {ConfigDependency<import("../../shared/types").Plugin>} DependentPlugin */
|
||||||
|
|
||||||
|
export { ConfigDependency };
|
145
obsidian/node_modules/@eslint/eslintrc/lib/config-array/extracted-config.js
generated
vendored
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `ExtractedConfig` class.
|
||||||
|
*
|
||||||
|
* `ExtractedConfig` class expresses a final configuration for a specific file.
|
||||||
|
*
|
||||||
|
* It provides one method.
|
||||||
|
*
|
||||||
|
* - `toCompatibleObjectAsConfigFileContent()`
|
||||||
|
* Convert this configuration to the compatible object as the content of
|
||||||
|
* config files. It converts the loaded parser and plugins to strings.
|
||||||
|
* `CLIEngine#getConfigForFile(filePath)` method uses this method.
|
||||||
|
*
|
||||||
|
* `ConfigArray#extractConfig(filePath)` creates a `ExtractedConfig` instance.
|
||||||
|
*
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { IgnorePattern } from "./ignore-pattern.js";
|
||||||
|
|
||||||
|
// For VSCode intellisense
|
||||||
|
/** @typedef {import("../../shared/types").ConfigData} ConfigData */
|
||||||
|
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */
|
||||||
|
/** @typedef {import("../../shared/types").SeverityConf} SeverityConf */
|
||||||
|
/** @typedef {import("./config-dependency").DependentParser} DependentParser */
|
||||||
|
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if `xs` starts with `ys`.
|
||||||
|
* @template T
|
||||||
|
* @param {T[]} xs The array to check.
|
||||||
|
* @param {T[]} ys The array that may be the first part of `xs`.
|
||||||
|
* @returns {boolean} `true` if `xs` starts with `ys`.
|
||||||
|
*/
|
||||||
|
function startsWith(xs, ys) {
|
||||||
|
return xs.length >= ys.length && ys.every((y, i) => y === xs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class for extracted config data.
|
||||||
|
*/
|
||||||
|
class ExtractedConfig {
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The config name what `noInlineConfig` setting came from.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.configNameOfNoInlineConfig = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Environments.
|
||||||
|
* @type {Record<string, boolean>}
|
||||||
|
*/
|
||||||
|
this.env = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global variables.
|
||||||
|
* @type {Record<string, GlobalConf>}
|
||||||
|
*/
|
||||||
|
this.globals = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The glob patterns that ignore to lint.
|
||||||
|
* @type {(((filePath:string, dot?:boolean) => boolean) & { basePath:string; patterns:string[] }) | undefined}
|
||||||
|
*/
|
||||||
|
this.ignores = void 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The flag that disables directive comments.
|
||||||
|
* @type {boolean|undefined}
|
||||||
|
*/
|
||||||
|
this.noInlineConfig = void 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parser definition.
|
||||||
|
* @type {DependentParser|null}
|
||||||
|
*/
|
||||||
|
this.parser = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for the parser.
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
this.parserOptions = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin definitions.
|
||||||
|
* @type {Record<string, DependentPlugin>}
|
||||||
|
*/
|
||||||
|
this.plugins = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processor ID.
|
||||||
|
* @type {string|null}
|
||||||
|
*/
|
||||||
|
this.processor = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The flag that reports unused `eslint-disable` directive comments.
|
||||||
|
* @type {boolean|undefined}
|
||||||
|
*/
|
||||||
|
this.reportUnusedDisableDirectives = void 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rule settings.
|
||||||
|
* @type {Record<string, [SeverityConf, ...any[]]>}
|
||||||
|
*/
|
||||||
|
this.rules = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shared settings.
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
this.settings = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert this config to the compatible object as a config file content.
|
||||||
|
* @returns {ConfigData} The converted object.
|
||||||
|
*/
|
||||||
|
toCompatibleObjectAsConfigFileContent() {
|
||||||
|
const {
|
||||||
|
/* eslint-disable no-unused-vars */
|
||||||
|
configNameOfNoInlineConfig: _ignore1,
|
||||||
|
processor: _ignore2,
|
||||||
|
/* eslint-enable no-unused-vars */
|
||||||
|
ignores,
|
||||||
|
...config
|
||||||
|
} = this;
|
||||||
|
|
||||||
|
config.parser = config.parser && config.parser.filePath;
|
||||||
|
config.plugins = Object.keys(config.plugins).filter(Boolean).reverse();
|
||||||
|
config.ignorePatterns = ignores ? ignores.patterns : [];
|
||||||
|
|
||||||
|
// Strip the default patterns from `ignorePatterns`.
|
||||||
|
if (startsWith(config.ignorePatterns, IgnorePattern.DefaultPatterns)) {
|
||||||
|
config.ignorePatterns =
|
||||||
|
config.ignorePatterns.slice(IgnorePattern.DefaultPatterns.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { ExtractedConfig };
|
238
obsidian/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js
generated
vendored
Normal file
|
@ -0,0 +1,238 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `IgnorePattern` class.
|
||||||
|
*
|
||||||
|
* `IgnorePattern` class has the set of glob patterns and the base path.
|
||||||
|
*
|
||||||
|
* It provides two static methods.
|
||||||
|
*
|
||||||
|
* - `IgnorePattern.createDefaultIgnore(cwd)`
|
||||||
|
* Create the default predicate function.
|
||||||
|
* - `IgnorePattern.createIgnore(ignorePatterns)`
|
||||||
|
* Create the predicate function from multiple `IgnorePattern` objects.
|
||||||
|
*
|
||||||
|
* It provides two properties and a method.
|
||||||
|
*
|
||||||
|
* - `patterns`
|
||||||
|
* The glob patterns that ignore to lint.
|
||||||
|
* - `basePath`
|
||||||
|
* The base path of the glob patterns. If absolute paths existed in the
|
||||||
|
* glob patterns, those are handled as relative paths to the base path.
|
||||||
|
* - `getPatternsRelativeTo(basePath)`
|
||||||
|
* Get `patterns` as modified for a given base path. It modifies the
|
||||||
|
* absolute paths in the patterns as prepending the difference of two base
|
||||||
|
* paths.
|
||||||
|
*
|
||||||
|
* `ConfigArrayFactory` creates `IgnorePattern` objects when it processes
|
||||||
|
* `ignorePatterns` properties.
|
||||||
|
*
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import assert from "assert";
|
||||||
|
import path from "path";
|
||||||
|
import ignore from "ignore";
|
||||||
|
import debugOrig from "debug";
|
||||||
|
|
||||||
|
const debug = debugOrig("eslintrc:ignore-pattern");
|
||||||
|
|
||||||
|
/** @typedef {ReturnType<import("ignore").default>} Ignore */
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the path to the common ancestor directory of given paths.
|
||||||
|
* @param {string[]} sourcePaths The paths to calculate the common ancestor.
|
||||||
|
* @returns {string} The path to the common ancestor directory.
|
||||||
|
*/
|
||||||
|
function getCommonAncestorPath(sourcePaths) {
|
||||||
|
let result = sourcePaths[0];
|
||||||
|
|
||||||
|
for (let i = 1; i < sourcePaths.length; ++i) {
|
||||||
|
const a = result;
|
||||||
|
const b = sourcePaths[i];
|
||||||
|
|
||||||
|
// Set the shorter one (it's the common ancestor if one includes the other).
|
||||||
|
result = a.length < b.length ? a : b;
|
||||||
|
|
||||||
|
// Set the common ancestor.
|
||||||
|
for (let j = 0, lastSepPos = 0; j < a.length && j < b.length; ++j) {
|
||||||
|
if (a[j] !== b[j]) {
|
||||||
|
result = a.slice(0, lastSepPos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (a[j] === path.sep) {
|
||||||
|
lastSepPos = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let resolvedResult = result || path.sep;
|
||||||
|
|
||||||
|
// if Windows common ancestor is root of drive must have trailing slash to be absolute.
|
||||||
|
if (resolvedResult && resolvedResult.endsWith(":") && process.platform === "win32") {
|
||||||
|
resolvedResult += path.sep;
|
||||||
|
}
|
||||||
|
return resolvedResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make relative path.
|
||||||
|
* @param {string} from The source path to get relative path.
|
||||||
|
* @param {string} to The destination path to get relative path.
|
||||||
|
* @returns {string} The relative path.
|
||||||
|
*/
|
||||||
|
function relative(from, to) {
|
||||||
|
const relPath = path.relative(from, to);
|
||||||
|
|
||||||
|
if (path.sep === "/") {
|
||||||
|
return relPath;
|
||||||
|
}
|
||||||
|
return relPath.split(path.sep).join("/");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the trailing slash if existed.
|
||||||
|
* @param {string} filePath The path to check.
|
||||||
|
* @returns {string} The trailing slash if existed.
|
||||||
|
*/
|
||||||
|
function dirSuffix(filePath) {
|
||||||
|
const isDir = (
|
||||||
|
filePath.endsWith(path.sep) ||
|
||||||
|
(process.platform === "win32" && filePath.endsWith("/"))
|
||||||
|
);
|
||||||
|
|
||||||
|
return isDir ? "/" : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const DefaultPatterns = Object.freeze(["/**/node_modules/*"]);
|
||||||
|
const DotPatterns = Object.freeze([".*", "!.eslintrc.*", "!../"]);
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class IgnorePattern {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default patterns.
|
||||||
|
* @type {string[]}
|
||||||
|
*/
|
||||||
|
static get DefaultPatterns() {
|
||||||
|
return DefaultPatterns;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the default predicate function.
|
||||||
|
* @param {string} cwd The current working directory.
|
||||||
|
* @returns {((filePath:string, dot:boolean) => boolean) & {basePath:string; patterns:string[]}}
|
||||||
|
* The preficate function.
|
||||||
|
* The first argument is an absolute path that is checked.
|
||||||
|
* The second argument is the flag to not ignore dotfiles.
|
||||||
|
* If the predicate function returned `true`, it means the path should be ignored.
|
||||||
|
*/
|
||||||
|
static createDefaultIgnore(cwd) {
|
||||||
|
return this.createIgnore([new IgnorePattern(DefaultPatterns, cwd)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the predicate function from multiple `IgnorePattern` objects.
|
||||||
|
* @param {IgnorePattern[]} ignorePatterns The list of ignore patterns.
|
||||||
|
* @returns {((filePath:string, dot?:boolean) => boolean) & {basePath:string; patterns:string[]}}
|
||||||
|
* The preficate function.
|
||||||
|
* The first argument is an absolute path that is checked.
|
||||||
|
* The second argument is the flag to not ignore dotfiles.
|
||||||
|
* If the predicate function returned `true`, it means the path should be ignored.
|
||||||
|
*/
|
||||||
|
static createIgnore(ignorePatterns) {
|
||||||
|
debug("Create with: %o", ignorePatterns);
|
||||||
|
|
||||||
|
const basePath = getCommonAncestorPath(ignorePatterns.map(p => p.basePath));
|
||||||
|
const patterns = [].concat(
|
||||||
|
...ignorePatterns.map(p => p.getPatternsRelativeTo(basePath))
|
||||||
|
);
|
||||||
|
const ig = ignore({ allowRelativePaths: true }).add([...DotPatterns, ...patterns]);
|
||||||
|
const dotIg = ignore({ allowRelativePaths: true }).add(patterns);
|
||||||
|
|
||||||
|
debug(" processed: %o", { basePath, patterns });
|
||||||
|
|
||||||
|
return Object.assign(
|
||||||
|
(filePath, dot = false) => {
|
||||||
|
assert(path.isAbsolute(filePath), "'filePath' should be an absolute path.");
|
||||||
|
const relPathRaw = relative(basePath, filePath);
|
||||||
|
const relPath = relPathRaw && (relPathRaw + dirSuffix(filePath));
|
||||||
|
const adoptedIg = dot ? dotIg : ig;
|
||||||
|
const result = relPath !== "" && adoptedIg.ignores(relPath);
|
||||||
|
|
||||||
|
debug("Check", { filePath, dot, relativePath: relPath, result });
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
{ basePath, patterns }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a new `IgnorePattern` instance.
|
||||||
|
* @param {string[]} patterns The glob patterns that ignore to lint.
|
||||||
|
* @param {string} basePath The base path of `patterns`.
|
||||||
|
*/
|
||||||
|
constructor(patterns, basePath) {
|
||||||
|
assert(path.isAbsolute(basePath), "'basePath' should be an absolute path.");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The glob patterns that ignore to lint.
|
||||||
|
* @type {string[]}
|
||||||
|
*/
|
||||||
|
this.patterns = patterns;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base path of `patterns`.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.basePath = basePath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If `true` then patterns which don't start with `/` will match the paths to the outside of `basePath`. Defaults to `false`.
|
||||||
|
*
|
||||||
|
* It's set `true` for `.eslintignore`, `package.json`, and `--ignore-path` for backward compatibility.
|
||||||
|
* It's `false` as-is for `ignorePatterns` property in config files.
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.loose = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get `patterns` as modified for a given base path. It modifies the
|
||||||
|
* absolute paths in the patterns as prepending the difference of two base
|
||||||
|
* paths.
|
||||||
|
* @param {string} newBasePath The base path.
|
||||||
|
* @returns {string[]} Modifired patterns.
|
||||||
|
*/
|
||||||
|
getPatternsRelativeTo(newBasePath) {
|
||||||
|
assert(path.isAbsolute(newBasePath), "'newBasePath' should be an absolute path.");
|
||||||
|
const { basePath, loose, patterns } = this;
|
||||||
|
|
||||||
|
if (newBasePath === basePath) {
|
||||||
|
return patterns;
|
||||||
|
}
|
||||||
|
const prefix = `/${relative(newBasePath, basePath)}`;
|
||||||
|
|
||||||
|
return patterns.map(pattern => {
|
||||||
|
const negative = pattern.startsWith("!");
|
||||||
|
const head = negative ? "!" : "";
|
||||||
|
const body = negative ? pattern.slice(1) : pattern;
|
||||||
|
|
||||||
|
if (body.startsWith("/") || body.startsWith("../")) {
|
||||||
|
return `${head}${prefix}${body}`;
|
||||||
|
}
|
||||||
|
return loose ? pattern : `${head}${prefix}/**/${body}`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { IgnorePattern };
|
19
obsidian/node_modules/@eslint/eslintrc/lib/config-array/index.js
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `ConfigArray` class.
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { ConfigArray, getUsedExtractedConfigs } from "./config-array.js";
|
||||||
|
import { ConfigDependency } from "./config-dependency.js";
|
||||||
|
import { ExtractedConfig } from "./extracted-config.js";
|
||||||
|
import { IgnorePattern } from "./ignore-pattern.js";
|
||||||
|
import { OverrideTester } from "./override-tester.js";
|
||||||
|
|
||||||
|
export {
|
||||||
|
ConfigArray,
|
||||||
|
ConfigDependency,
|
||||||
|
ExtractedConfig,
|
||||||
|
IgnorePattern,
|
||||||
|
OverrideTester,
|
||||||
|
getUsedExtractedConfigs
|
||||||
|
};
|
225
obsidian/node_modules/@eslint/eslintrc/lib/config-array/override-tester.js
generated
vendored
Normal file
|
@ -0,0 +1,225 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview `OverrideTester` class.
|
||||||
|
*
|
||||||
|
* `OverrideTester` class handles `files` property and `excludedFiles` property
|
||||||
|
* of `overrides` config.
|
||||||
|
*
|
||||||
|
* It provides one method.
|
||||||
|
*
|
||||||
|
* - `test(filePath)`
|
||||||
|
* Test if a file path matches the pair of `files` property and
|
||||||
|
* `excludedFiles` property. The `filePath` argument must be an absolute
|
||||||
|
* path.
|
||||||
|
*
|
||||||
|
* `ConfigArrayFactory` creates `OverrideTester` objects when it processes
|
||||||
|
* `overrides` properties.
|
||||||
|
*
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
import assert from "assert";
|
||||||
|
import path from "path";
|
||||||
|
import util from "util";
|
||||||
|
import minimatch from "minimatch";
|
||||||
|
|
||||||
|
const { Minimatch } = minimatch;
|
||||||
|
|
||||||
|
const minimatchOpts = { dot: true, matchBase: true };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} Pattern
|
||||||
|
* @property {InstanceType<Minimatch>[] | null} includes The positive matchers.
|
||||||
|
* @property {InstanceType<Minimatch>[] | null} excludes The negative matchers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize a given pattern to an array.
|
||||||
|
* @param {string|string[]|undefined} patterns A glob pattern or an array of glob patterns.
|
||||||
|
* @returns {string[]|null} Normalized patterns.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function normalizePatterns(patterns) {
|
||||||
|
if (Array.isArray(patterns)) {
|
||||||
|
return patterns.filter(Boolean);
|
||||||
|
}
|
||||||
|
if (typeof patterns === "string" && patterns) {
|
||||||
|
return [patterns];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the matchers of given patterns.
|
||||||
|
* @param {string[]} patterns The patterns.
|
||||||
|
* @returns {InstanceType<Minimatch>[] | null} The matchers.
|
||||||
|
*/
|
||||||
|
function toMatcher(patterns) {
|
||||||
|
if (patterns.length === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return patterns.map(pattern => {
|
||||||
|
if (/^\.[/\\]/u.test(pattern)) {
|
||||||
|
return new Minimatch(
|
||||||
|
pattern.slice(2),
|
||||||
|
|
||||||
|
// `./*.js` should not match with `subdir/foo.js`
|
||||||
|
{ ...minimatchOpts, matchBase: false }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return new Minimatch(pattern, minimatchOpts);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a given matcher to string.
|
||||||
|
* @param {Pattern} matchers The matchers.
|
||||||
|
* @returns {string} The string expression of the matcher.
|
||||||
|
*/
|
||||||
|
function patternToJson({ includes, excludes }) {
|
||||||
|
return {
|
||||||
|
includes: includes && includes.map(m => m.pattern),
|
||||||
|
excludes: excludes && excludes.map(m => m.pattern)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class to test given paths are matched by the patterns.
|
||||||
|
*/
|
||||||
|
class OverrideTester {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a tester with given criteria.
|
||||||
|
* If there are no criteria, returns `null`.
|
||||||
|
* @param {string|string[]} files The glob patterns for included files.
|
||||||
|
* @param {string|string[]} excludedFiles The glob patterns for excluded files.
|
||||||
|
* @param {string} basePath The path to the base directory to test paths.
|
||||||
|
* @returns {OverrideTester|null} The created instance or `null`.
|
||||||
|
*/
|
||||||
|
static create(files, excludedFiles, basePath) {
|
||||||
|
const includePatterns = normalizePatterns(files);
|
||||||
|
const excludePatterns = normalizePatterns(excludedFiles);
|
||||||
|
let endsWithWildcard = false;
|
||||||
|
|
||||||
|
if (includePatterns.length === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rejects absolute paths or relative paths to parents.
|
||||||
|
for (const pattern of includePatterns) {
|
||||||
|
if (path.isAbsolute(pattern) || pattern.includes("..")) {
|
||||||
|
throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
|
||||||
|
}
|
||||||
|
if (pattern.endsWith("*")) {
|
||||||
|
endsWithWildcard = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const pattern of excludePatterns) {
|
||||||
|
if (path.isAbsolute(pattern) || pattern.includes("..")) {
|
||||||
|
throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const includes = toMatcher(includePatterns);
|
||||||
|
const excludes = toMatcher(excludePatterns);
|
||||||
|
|
||||||
|
return new OverrideTester(
|
||||||
|
[{ includes, excludes }],
|
||||||
|
basePath,
|
||||||
|
endsWithWildcard
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combine two testers by logical and.
|
||||||
|
* If either of the testers was `null`, returns the other tester.
|
||||||
|
* The `basePath` property of the two must be the same value.
|
||||||
|
* @param {OverrideTester|null} a A tester.
|
||||||
|
* @param {OverrideTester|null} b Another tester.
|
||||||
|
* @returns {OverrideTester|null} Combined tester.
|
||||||
|
*/
|
||||||
|
static and(a, b) {
|
||||||
|
if (!b) {
|
||||||
|
return a && new OverrideTester(
|
||||||
|
a.patterns,
|
||||||
|
a.basePath,
|
||||||
|
a.endsWithWildcard
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!a) {
|
||||||
|
return new OverrideTester(
|
||||||
|
b.patterns,
|
||||||
|
b.basePath,
|
||||||
|
b.endsWithWildcard
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.strictEqual(a.basePath, b.basePath);
|
||||||
|
return new OverrideTester(
|
||||||
|
a.patterns.concat(b.patterns),
|
||||||
|
a.basePath,
|
||||||
|
a.endsWithWildcard || b.endsWithWildcard
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize this instance.
|
||||||
|
* @param {Pattern[]} patterns The matchers.
|
||||||
|
* @param {string} basePath The base path.
|
||||||
|
* @param {boolean} endsWithWildcard If `true` then a pattern ends with `*`.
|
||||||
|
*/
|
||||||
|
constructor(patterns, basePath, endsWithWildcard = false) {
|
||||||
|
|
||||||
|
/** @type {Pattern[]} */
|
||||||
|
this.patterns = patterns;
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
|
this.basePath = basePath;
|
||||||
|
|
||||||
|
/** @type {boolean} */
|
||||||
|
this.endsWithWildcard = endsWithWildcard;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if a given path is matched or not.
|
||||||
|
* @param {string} filePath The absolute path to the target file.
|
||||||
|
* @returns {boolean} `true` if the path was matched.
|
||||||
|
*/
|
||||||
|
test(filePath) {
|
||||||
|
if (typeof filePath !== "string" || !path.isAbsolute(filePath)) {
|
||||||
|
throw new Error(`'filePath' should be an absolute path, but got ${filePath}.`);
|
||||||
|
}
|
||||||
|
const relativePath = path.relative(this.basePath, filePath);
|
||||||
|
|
||||||
|
return this.patterns.every(({ includes, excludes }) => (
|
||||||
|
(!includes || includes.some(m => m.match(relativePath))) &&
|
||||||
|
(!excludes || !excludes.some(m => m.match(relativePath)))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line jsdoc/require-description
|
||||||
|
/**
|
||||||
|
* @returns {Object} a JSON compatible object.
|
||||||
|
*/
|
||||||
|
toJSON() {
|
||||||
|
if (this.patterns.length === 1) {
|
||||||
|
return {
|
||||||
|
...patternToJson(this.patterns[0]),
|
||||||
|
basePath: this.basePath
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
AND: this.patterns.map(patternToJson),
|
||||||
|
basePath: this.basePath
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line jsdoc/require-description
|
||||||
|
/**
|
||||||
|
* @returns {Object} an object to display by `console.log()`.
|
||||||
|
*/
|
||||||
|
[util.inspect.custom]() {
|
||||||
|
return this.toJSON();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { OverrideTester };
|
312
obsidian/node_modules/@eslint/eslintrc/lib/flat-compat.js
generated
vendored
Normal file
|
@ -0,0 +1,312 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Compatibility class for flat config.
|
||||||
|
* @author Nicholas C. Zakas
|
||||||
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import createDebug from "debug";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
import environments from "../conf/environments.js";
|
||||||
|
import { ConfigArrayFactory } from "./config-array-factory.js";
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/** @typedef {import("../../shared/types").Environment} Environment */
|
||||||
|
/** @typedef {import("../../shared/types").Processor} Processor */
|
||||||
|
|
||||||
|
const debug = createDebug("eslintrc:flat-compat");
|
||||||
|
const cafactory = Symbol("cafactory");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates an ESLintRC-style config object into a flag-config-style config
|
||||||
|
* object.
|
||||||
|
* @param {Object} eslintrcConfig An ESLintRC-style config object.
|
||||||
|
* @param {Object} options Options to help translate the config.
|
||||||
|
* @param {string} options.resolveConfigRelativeTo To the directory to resolve
|
||||||
|
* configs from.
|
||||||
|
* @param {string} options.resolvePluginsRelativeTo The directory to resolve
|
||||||
|
* plugins from.
|
||||||
|
* @param {ReadOnlyMap<string,Environment>} options.pluginEnvironments A map of plugin environment
|
||||||
|
* names to objects.
|
||||||
|
* @param {ReadOnlyMap<string,Processor>} options.pluginProcessors A map of plugin processor
|
||||||
|
* names to objects.
|
||||||
|
* @returns {Object} A flag-config-style config object.
|
||||||
|
*/
|
||||||
|
function translateESLintRC(eslintrcConfig, {
|
||||||
|
resolveConfigRelativeTo,
|
||||||
|
resolvePluginsRelativeTo,
|
||||||
|
pluginEnvironments,
|
||||||
|
pluginProcessors
|
||||||
|
}) {
|
||||||
|
|
||||||
|
const flatConfig = {};
|
||||||
|
const configs = [];
|
||||||
|
const languageOptions = {};
|
||||||
|
const linterOptions = {};
|
||||||
|
const keysToCopy = ["settings", "rules", "processor"];
|
||||||
|
const languageOptionsKeysToCopy = ["globals", "parser", "parserOptions"];
|
||||||
|
const linterOptionsKeysToCopy = ["noInlineConfig", "reportUnusedDisableDirectives"];
|
||||||
|
|
||||||
|
// copy over simple translations
|
||||||
|
for (const key of keysToCopy) {
|
||||||
|
if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
|
||||||
|
flatConfig[key] = eslintrcConfig[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy over languageOptions
|
||||||
|
for (const key of languageOptionsKeysToCopy) {
|
||||||
|
if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
|
||||||
|
|
||||||
|
// create the languageOptions key in the flat config
|
||||||
|
flatConfig.languageOptions = languageOptions;
|
||||||
|
|
||||||
|
if (key === "parser") {
|
||||||
|
debug(`Resolving parser '${languageOptions[key]}' relative to ${resolveConfigRelativeTo}`);
|
||||||
|
|
||||||
|
if (eslintrcConfig[key].error) {
|
||||||
|
throw eslintrcConfig[key].error;
|
||||||
|
}
|
||||||
|
|
||||||
|
languageOptions[key] = eslintrcConfig[key].definition;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clone any object values that are in the eslintrc config
|
||||||
|
if (eslintrcConfig[key] && typeof eslintrcConfig[key] === "object") {
|
||||||
|
languageOptions[key] = {
|
||||||
|
...eslintrcConfig[key]
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
languageOptions[key] = eslintrcConfig[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy over linterOptions
|
||||||
|
for (const key of linterOptionsKeysToCopy) {
|
||||||
|
if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
|
||||||
|
flatConfig.linterOptions = linterOptions;
|
||||||
|
linterOptions[key] = eslintrcConfig[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// move ecmaVersion a level up
|
||||||
|
if (languageOptions.parserOptions) {
|
||||||
|
|
||||||
|
if ("ecmaVersion" in languageOptions.parserOptions) {
|
||||||
|
languageOptions.ecmaVersion = languageOptions.parserOptions.ecmaVersion;
|
||||||
|
delete languageOptions.parserOptions.ecmaVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("sourceType" in languageOptions.parserOptions) {
|
||||||
|
languageOptions.sourceType = languageOptions.parserOptions.sourceType;
|
||||||
|
delete languageOptions.parserOptions.sourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if we even need parserOptions anymore and remove it if not
|
||||||
|
if (Object.keys(languageOptions.parserOptions).length === 0) {
|
||||||
|
delete languageOptions.parserOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// overrides
|
||||||
|
if (eslintrcConfig.criteria) {
|
||||||
|
flatConfig.files = [absoluteFilePath => eslintrcConfig.criteria.test(absoluteFilePath)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate plugins
|
||||||
|
if (eslintrcConfig.plugins && typeof eslintrcConfig.plugins === "object") {
|
||||||
|
debug(`Translating plugins: ${eslintrcConfig.plugins}`);
|
||||||
|
|
||||||
|
flatConfig.plugins = {};
|
||||||
|
|
||||||
|
for (const pluginName of Object.keys(eslintrcConfig.plugins)) {
|
||||||
|
|
||||||
|
debug(`Translating plugin: ${pluginName}`);
|
||||||
|
debug(`Resolving plugin '${pluginName} relative to ${resolvePluginsRelativeTo}`);
|
||||||
|
|
||||||
|
const { definition: plugin, error } = eslintrcConfig.plugins[pluginName];
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
flatConfig.plugins[pluginName] = plugin;
|
||||||
|
|
||||||
|
// create a config for any processors
|
||||||
|
if (plugin.processors) {
|
||||||
|
for (const processorName of Object.keys(plugin.processors)) {
|
||||||
|
if (processorName.startsWith(".")) {
|
||||||
|
debug(`Assigning processor: ${pluginName}/${processorName}`);
|
||||||
|
|
||||||
|
configs.unshift({
|
||||||
|
files: [`**/*${processorName}`],
|
||||||
|
processor: pluginProcessors.get(`${pluginName}/${processorName}`)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate env - must come after plugins
|
||||||
|
if (eslintrcConfig.env && typeof eslintrcConfig.env === "object") {
|
||||||
|
for (const envName of Object.keys(eslintrcConfig.env)) {
|
||||||
|
|
||||||
|
// only add environments that are true
|
||||||
|
if (eslintrcConfig.env[envName]) {
|
||||||
|
debug(`Translating environment: ${envName}`);
|
||||||
|
|
||||||
|
if (environments.has(envName)) {
|
||||||
|
|
||||||
|
// built-in environments should be defined first
|
||||||
|
configs.unshift(...translateESLintRC(environments.get(envName), {
|
||||||
|
resolveConfigRelativeTo,
|
||||||
|
resolvePluginsRelativeTo
|
||||||
|
}));
|
||||||
|
} else if (pluginEnvironments.has(envName)) {
|
||||||
|
|
||||||
|
// if the environment comes from a plugin, it should come after the plugin config
|
||||||
|
configs.push(...translateESLintRC(pluginEnvironments.get(envName), {
|
||||||
|
resolveConfigRelativeTo,
|
||||||
|
resolvePluginsRelativeTo
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// only add if there are actually keys in the config
|
||||||
|
if (Object.keys(flatConfig).length > 0) {
|
||||||
|
configs.push(flatConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
return configs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Exports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A compatibility class for working with configs.
|
||||||
|
*/
|
||||||
|
class FlatCompat {
|
||||||
|
|
||||||
|
constructor({
|
||||||
|
baseDirectory = process.cwd(),
|
||||||
|
resolvePluginsRelativeTo = baseDirectory,
|
||||||
|
recommendedConfig,
|
||||||
|
allConfig
|
||||||
|
} = {}) {
|
||||||
|
this.baseDirectory = baseDirectory;
|
||||||
|
this.resolvePluginsRelativeTo = resolvePluginsRelativeTo;
|
||||||
|
this[cafactory] = new ConfigArrayFactory({
|
||||||
|
cwd: baseDirectory,
|
||||||
|
resolvePluginsRelativeTo,
|
||||||
|
getEslintAllConfig: () => {
|
||||||
|
|
||||||
|
if (!allConfig) {
|
||||||
|
throw new TypeError("Missing parameter 'allConfig' in FlatCompat constructor.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return allConfig;
|
||||||
|
},
|
||||||
|
getEslintRecommendedConfig: () => {
|
||||||
|
|
||||||
|
if (!recommendedConfig) {
|
||||||
|
throw new TypeError("Missing parameter 'recommendedConfig' in FlatCompat constructor.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return recommendedConfig;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates an ESLintRC-style config into a flag-config-style config.
|
||||||
|
* @param {Object} eslintrcConfig The ESLintRC-style config object.
|
||||||
|
* @returns {Object} A flag-config-style config object.
|
||||||
|
*/
|
||||||
|
config(eslintrcConfig) {
|
||||||
|
const eslintrcArray = this[cafactory].create(eslintrcConfig, {
|
||||||
|
basePath: this.baseDirectory
|
||||||
|
});
|
||||||
|
|
||||||
|
const flatArray = [];
|
||||||
|
let hasIgnorePatterns = false;
|
||||||
|
|
||||||
|
eslintrcArray.forEach(configData => {
|
||||||
|
if (configData.type === "config") {
|
||||||
|
hasIgnorePatterns = hasIgnorePatterns || configData.ignorePattern;
|
||||||
|
flatArray.push(...translateESLintRC(configData, {
|
||||||
|
resolveConfigRelativeTo: path.join(this.baseDirectory, "__placeholder.js"),
|
||||||
|
resolvePluginsRelativeTo: path.join(this.resolvePluginsRelativeTo, "__placeholder.js"),
|
||||||
|
pluginEnvironments: eslintrcArray.pluginEnvironments,
|
||||||
|
pluginProcessors: eslintrcArray.pluginProcessors
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// combine ignorePatterns to emulate ESLintRC behavior better
|
||||||
|
if (hasIgnorePatterns) {
|
||||||
|
flatArray.unshift({
|
||||||
|
ignores: [filePath => {
|
||||||
|
|
||||||
|
// Compute the final config for this file.
|
||||||
|
// This filters config array elements by `files`/`excludedFiles` then merges the elements.
|
||||||
|
const finalConfig = eslintrcArray.extractConfig(filePath);
|
||||||
|
|
||||||
|
// Test the `ignorePattern` properties of the final config.
|
||||||
|
return Boolean(finalConfig.ignores) && finalConfig.ignores(filePath);
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return flatArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates the `env` section of an ESLintRC-style config.
|
||||||
|
* @param {Object} envConfig The `env` section of an ESLintRC config.
|
||||||
|
* @returns {Object[]} An array of flag-config objects representing the environments.
|
||||||
|
*/
|
||||||
|
env(envConfig) {
|
||||||
|
return this.config({
|
||||||
|
env: envConfig
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates the `extends` section of an ESLintRC-style config.
|
||||||
|
* @param {...string} configsToExtend The names of the configs to load.
|
||||||
|
* @returns {Object[]} An array of flag-config objects representing the config.
|
||||||
|
*/
|
||||||
|
extends(...configsToExtend) {
|
||||||
|
return this.config({
|
||||||
|
extends: configsToExtend
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates the `plugins` section of an ESLintRC-style config.
|
||||||
|
* @param {...string} plugins The names of the plugins to load.
|
||||||
|
* @returns {Object[]} An array of flag-config objects representing the plugins.
|
||||||
|
*/
|
||||||
|
plugins(...plugins) {
|
||||||
|
return this.config({
|
||||||
|
plugins
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { FlatCompat };
|
29
obsidian/node_modules/@eslint/eslintrc/lib/index-universal.js
generated
vendored
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Package exports for @eslint/eslintrc
|
||||||
|
* @author Nicholas C. Zakas
|
||||||
|
*/
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import * as ConfigOps from "./shared/config-ops.js";
|
||||||
|
import ConfigValidator from "./shared/config-validator.js";
|
||||||
|
import * as naming from "./shared/naming.js";
|
||||||
|
import environments from "../conf/environments.js";
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Exports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const Legacy = {
|
||||||
|
environments,
|
||||||
|
|
||||||
|
// shared
|
||||||
|
ConfigOps,
|
||||||
|
ConfigValidator,
|
||||||
|
naming
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
Legacy
|
||||||
|
};
|
56
obsidian/node_modules/@eslint/eslintrc/lib/index.js
generated
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Package exports for @eslint/eslintrc
|
||||||
|
* @author Nicholas C. Zakas
|
||||||
|
*/
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import {
|
||||||
|
ConfigArrayFactory,
|
||||||
|
createContext as createConfigArrayFactoryContext
|
||||||
|
} from "./config-array-factory.js";
|
||||||
|
|
||||||
|
import { CascadingConfigArrayFactory } from "./cascading-config-array-factory.js";
|
||||||
|
import * as ModuleResolver from "./shared/relative-module-resolver.js";
|
||||||
|
import { ConfigArray, getUsedExtractedConfigs } from "./config-array/index.js";
|
||||||
|
import { ConfigDependency } from "./config-array/config-dependency.js";
|
||||||
|
import { ExtractedConfig } from "./config-array/extracted-config.js";
|
||||||
|
import { IgnorePattern } from "./config-array/ignore-pattern.js";
|
||||||
|
import { OverrideTester } from "./config-array/override-tester.js";
|
||||||
|
import * as ConfigOps from "./shared/config-ops.js";
|
||||||
|
import ConfigValidator from "./shared/config-validator.js";
|
||||||
|
import * as naming from "./shared/naming.js";
|
||||||
|
import { FlatCompat } from "./flat-compat.js";
|
||||||
|
import environments from "../conf/environments.js";
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Exports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const Legacy = {
|
||||||
|
ConfigArray,
|
||||||
|
createConfigArrayFactoryContext,
|
||||||
|
CascadingConfigArrayFactory,
|
||||||
|
ConfigArrayFactory,
|
||||||
|
ConfigDependency,
|
||||||
|
ExtractedConfig,
|
||||||
|
IgnorePattern,
|
||||||
|
OverrideTester,
|
||||||
|
getUsedExtractedConfigs,
|
||||||
|
environments,
|
||||||
|
|
||||||
|
// shared
|
||||||
|
ConfigOps,
|
||||||
|
ConfigValidator,
|
||||||
|
ModuleResolver,
|
||||||
|
naming
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
|
||||||
|
Legacy,
|
||||||
|
|
||||||
|
FlatCompat
|
||||||
|
|
||||||
|
};
|
191
obsidian/node_modules/@eslint/eslintrc/lib/shared/ajv.js
generated
vendored
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview The instance of Ajv validator.
|
||||||
|
* @author Evgeny Poberezkin
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import Ajv from "ajv";
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copied from ajv/lib/refs/json-schema-draft-04.json
|
||||||
|
* The MIT License (MIT)
|
||||||
|
* Copyright (c) 2015-2017 Evgeny Poberezkin
|
||||||
|
*/
|
||||||
|
const metaSchema = {
|
||||||
|
id: "http://json-schema.org/draft-04/schema#",
|
||||||
|
$schema: "http://json-schema.org/draft-04/schema#",
|
||||||
|
description: "Core schema meta-schema",
|
||||||
|
definitions: {
|
||||||
|
schemaArray: {
|
||||||
|
type: "array",
|
||||||
|
minItems: 1,
|
||||||
|
items: { $ref: "#" }
|
||||||
|
},
|
||||||
|
positiveInteger: {
|
||||||
|
type: "integer",
|
||||||
|
minimum: 0
|
||||||
|
},
|
||||||
|
positiveIntegerDefault0: {
|
||||||
|
allOf: [{ $ref: "#/definitions/positiveInteger" }, { default: 0 }]
|
||||||
|
},
|
||||||
|
simpleTypes: {
|
||||||
|
enum: ["array", "boolean", "integer", "null", "number", "object", "string"]
|
||||||
|
},
|
||||||
|
stringArray: {
|
||||||
|
type: "array",
|
||||||
|
items: { type: "string" },
|
||||||
|
minItems: 1,
|
||||||
|
uniqueItems: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: "string"
|
||||||
|
},
|
||||||
|
$schema: {
|
||||||
|
type: "string"
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: "string"
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: "string"
|
||||||
|
},
|
||||||
|
default: { },
|
||||||
|
multipleOf: {
|
||||||
|
type: "number",
|
||||||
|
minimum: 0,
|
||||||
|
exclusiveMinimum: true
|
||||||
|
},
|
||||||
|
maximum: {
|
||||||
|
type: "number"
|
||||||
|
},
|
||||||
|
exclusiveMaximum: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
minimum: {
|
||||||
|
type: "number"
|
||||||
|
},
|
||||||
|
exclusiveMinimum: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
maxLength: { $ref: "#/definitions/positiveInteger" },
|
||||||
|
minLength: { $ref: "#/definitions/positiveIntegerDefault0" },
|
||||||
|
pattern: {
|
||||||
|
type: "string",
|
||||||
|
format: "regex"
|
||||||
|
},
|
||||||
|
additionalItems: {
|
||||||
|
anyOf: [
|
||||||
|
{ type: "boolean" },
|
||||||
|
{ $ref: "#" }
|
||||||
|
],
|
||||||
|
default: { }
|
||||||
|
},
|
||||||
|
items: {
|
||||||
|
anyOf: [
|
||||||
|
{ $ref: "#" },
|
||||||
|
{ $ref: "#/definitions/schemaArray" }
|
||||||
|
],
|
||||||
|
default: { }
|
||||||
|
},
|
||||||
|
maxItems: { $ref: "#/definitions/positiveInteger" },
|
||||||
|
minItems: { $ref: "#/definitions/positiveIntegerDefault0" },
|
||||||
|
uniqueItems: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
maxProperties: { $ref: "#/definitions/positiveInteger" },
|
||||||
|
minProperties: { $ref: "#/definitions/positiveIntegerDefault0" },
|
||||||
|
required: { $ref: "#/definitions/stringArray" },
|
||||||
|
additionalProperties: {
|
||||||
|
anyOf: [
|
||||||
|
{ type: "boolean" },
|
||||||
|
{ $ref: "#" }
|
||||||
|
],
|
||||||
|
default: { }
|
||||||
|
},
|
||||||
|
definitions: {
|
||||||
|
type: "object",
|
||||||
|
additionalProperties: { $ref: "#" },
|
||||||
|
default: { }
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
type: "object",
|
||||||
|
additionalProperties: { $ref: "#" },
|
||||||
|
default: { }
|
||||||
|
},
|
||||||
|
patternProperties: {
|
||||||
|
type: "object",
|
||||||
|
additionalProperties: { $ref: "#" },
|
||||||
|
default: { }
|
||||||
|
},
|
||||||
|
dependencies: {
|
||||||
|
type: "object",
|
||||||
|
additionalProperties: {
|
||||||
|
anyOf: [
|
||||||
|
{ $ref: "#" },
|
||||||
|
{ $ref: "#/definitions/stringArray" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
enum: {
|
||||||
|
type: "array",
|
||||||
|
minItems: 1,
|
||||||
|
uniqueItems: true
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
anyOf: [
|
||||||
|
{ $ref: "#/definitions/simpleTypes" },
|
||||||
|
{
|
||||||
|
type: "array",
|
||||||
|
items: { $ref: "#/definitions/simpleTypes" },
|
||||||
|
minItems: 1,
|
||||||
|
uniqueItems: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
format: { type: "string" },
|
||||||
|
allOf: { $ref: "#/definitions/schemaArray" },
|
||||||
|
anyOf: { $ref: "#/definitions/schemaArray" },
|
||||||
|
oneOf: { $ref: "#/definitions/schemaArray" },
|
||||||
|
not: { $ref: "#" }
|
||||||
|
},
|
||||||
|
dependencies: {
|
||||||
|
exclusiveMaximum: ["maximum"],
|
||||||
|
exclusiveMinimum: ["minimum"]
|
||||||
|
},
|
||||||
|
default: { }
|
||||||
|
};
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export default (additionalOptions = {}) => {
|
||||||
|
const ajv = new Ajv({
|
||||||
|
meta: false,
|
||||||
|
useDefaults: true,
|
||||||
|
validateSchema: false,
|
||||||
|
missingRefs: "ignore",
|
||||||
|
verbose: true,
|
||||||
|
schemaId: "auto",
|
||||||
|
...additionalOptions
|
||||||
|
});
|
||||||
|
|
||||||
|
ajv.addMetaSchema(metaSchema);
|
||||||
|
// eslint-disable-next-line no-underscore-dangle
|
||||||
|
ajv._opts.defaultMeta = metaSchema.id;
|
||||||
|
|
||||||
|
return ajv;
|
||||||
|
};
|
135
obsidian/node_modules/@eslint/eslintrc/lib/shared/config-ops.js
generated
vendored
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Config file operations. This file must be usable in the browser,
|
||||||
|
* so no Node-specific code can be here.
|
||||||
|
* @author Nicholas C. Zakas
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Private
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const RULE_SEVERITY_STRINGS = ["off", "warn", "error"],
|
||||||
|
RULE_SEVERITY = RULE_SEVERITY_STRINGS.reduce((map, value, index) => {
|
||||||
|
map[value] = index;
|
||||||
|
return map;
|
||||||
|
}, {}),
|
||||||
|
VALID_SEVERITIES = [0, 1, 2, "off", "warn", "error"];
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalizes the severity value of a rule's configuration to a number
|
||||||
|
* @param {(number|string|[number, ...*]|[string, ...*])} ruleConfig A rule's configuration value, generally
|
||||||
|
* received from the user. A valid config value is either 0, 1, 2, the string "off" (treated the same as 0),
|
||||||
|
* the string "warn" (treated the same as 1), the string "error" (treated the same as 2), or an array
|
||||||
|
* whose first element is one of the above values. Strings are matched case-insensitively.
|
||||||
|
* @returns {(0|1|2)} The numeric severity value if the config value was valid, otherwise 0.
|
||||||
|
*/
|
||||||
|
function getRuleSeverity(ruleConfig) {
|
||||||
|
const severityValue = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
|
||||||
|
|
||||||
|
if (severityValue === 0 || severityValue === 1 || severityValue === 2) {
|
||||||
|
return severityValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof severityValue === "string") {
|
||||||
|
return RULE_SEVERITY[severityValue.toLowerCase()] || 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts old-style severity settings (0, 1, 2) into new-style
|
||||||
|
* severity settings (off, warn, error) for all rules. Assumption is that severity
|
||||||
|
* values have already been validated as correct.
|
||||||
|
* @param {Object} config The config object to normalize.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function normalizeToStrings(config) {
|
||||||
|
|
||||||
|
if (config.rules) {
|
||||||
|
Object.keys(config.rules).forEach(ruleId => {
|
||||||
|
const ruleConfig = config.rules[ruleId];
|
||||||
|
|
||||||
|
if (typeof ruleConfig === "number") {
|
||||||
|
config.rules[ruleId] = RULE_SEVERITY_STRINGS[ruleConfig] || RULE_SEVERITY_STRINGS[0];
|
||||||
|
} else if (Array.isArray(ruleConfig) && typeof ruleConfig[0] === "number") {
|
||||||
|
ruleConfig[0] = RULE_SEVERITY_STRINGS[ruleConfig[0]] || RULE_SEVERITY_STRINGS[0];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if the severity for the given rule configuration represents an error.
|
||||||
|
* @param {int|string|Array} ruleConfig The configuration for an individual rule.
|
||||||
|
* @returns {boolean} True if the rule represents an error, false if not.
|
||||||
|
*/
|
||||||
|
function isErrorSeverity(ruleConfig) {
|
||||||
|
return getRuleSeverity(ruleConfig) === 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether a given config has valid severity or not.
|
||||||
|
* @param {number|string|Array} ruleConfig The configuration for an individual rule.
|
||||||
|
* @returns {boolean} `true` if the configuration has valid severity.
|
||||||
|
*/
|
||||||
|
function isValidSeverity(ruleConfig) {
|
||||||
|
let severity = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
|
||||||
|
|
||||||
|
if (typeof severity === "string") {
|
||||||
|
severity = severity.toLowerCase();
|
||||||
|
}
|
||||||
|
return VALID_SEVERITIES.indexOf(severity) !== -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether every rule of a given config has valid severity or not.
|
||||||
|
* @param {Object} config The configuration for rules.
|
||||||
|
* @returns {boolean} `true` if the configuration has valid severity.
|
||||||
|
*/
|
||||||
|
function isEverySeverityValid(config) {
|
||||||
|
return Object.keys(config).every(ruleId => isValidSeverity(config[ruleId]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalizes a value for a global in a config
|
||||||
|
* @param {(boolean|string|null)} configuredValue The value given for a global in configuration or in
|
||||||
|
* a global directive comment
|
||||||
|
* @returns {("readable"|"writeable"|"off")} The value normalized as a string
|
||||||
|
* @throws Error if global value is invalid
|
||||||
|
*/
|
||||||
|
function normalizeConfigGlobal(configuredValue) {
|
||||||
|
switch (configuredValue) {
|
||||||
|
case "off":
|
||||||
|
return "off";
|
||||||
|
|
||||||
|
case true:
|
||||||
|
case "true":
|
||||||
|
case "writeable":
|
||||||
|
case "writable":
|
||||||
|
return "writable";
|
||||||
|
|
||||||
|
case null:
|
||||||
|
case false:
|
||||||
|
case "false":
|
||||||
|
case "readable":
|
||||||
|
case "readonly":
|
||||||
|
return "readonly";
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error(`'${configuredValue}' is not a valid configuration for a global (use 'readonly', 'writable', or 'off')`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getRuleSeverity,
|
||||||
|
normalizeToStrings,
|
||||||
|
isErrorSeverity,
|
||||||
|
isValidSeverity,
|
||||||
|
isEverySeverityValid,
|
||||||
|
normalizeConfigGlobal
|
||||||
|
};
|
325
obsidian/node_modules/@eslint/eslintrc/lib/shared/config-validator.js
generated
vendored
Normal file
|
@ -0,0 +1,325 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Validates configs.
|
||||||
|
* @author Brandon Mills
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* eslint class-methods-use-this: "off" */
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import util from "util";
|
||||||
|
import * as ConfigOps from "./config-ops.js";
|
||||||
|
import { emitDeprecationWarning } from "./deprecation-warnings.js";
|
||||||
|
import ajvOrig from "./ajv.js";
|
||||||
|
import configSchema from "../../conf/config-schema.js";
|
||||||
|
import BuiltInEnvironments from "../../conf/environments.js";
|
||||||
|
|
||||||
|
const ajv = ajvOrig();
|
||||||
|
|
||||||
|
const ruleValidators = new WeakMap();
|
||||||
|
const noop = Function.prototype;
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Private
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
let validateSchema;
|
||||||
|
const severityMap = {
|
||||||
|
error: 2,
|
||||||
|
warn: 1,
|
||||||
|
off: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const validated = new WeakSet();
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Exports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export default class ConfigValidator {
|
||||||
|
constructor({ builtInRules = new Map() } = {}) {
|
||||||
|
this.builtInRules = builtInRules;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a complete options schema for a rule.
|
||||||
|
* @param {{create: Function, schema: (Array|null)}} rule A new-style rule object
|
||||||
|
* @returns {Object} JSON Schema for the rule's options.
|
||||||
|
*/
|
||||||
|
getRuleOptionsSchema(rule) {
|
||||||
|
if (!rule) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const schema = rule.schema || rule.meta && rule.meta.schema;
|
||||||
|
|
||||||
|
// Given a tuple of schemas, insert warning level at the beginning
|
||||||
|
if (Array.isArray(schema)) {
|
||||||
|
if (schema.length) {
|
||||||
|
return {
|
||||||
|
type: "array",
|
||||||
|
items: schema,
|
||||||
|
minItems: 0,
|
||||||
|
maxItems: schema.length
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type: "array",
|
||||||
|
minItems: 0,
|
||||||
|
maxItems: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Given a full schema, leave it alone
|
||||||
|
return schema || null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a rule's severity and returns the severity value. Throws an error if the severity is invalid.
|
||||||
|
* @param {options} options The given options for the rule.
|
||||||
|
* @returns {number|string} The rule's severity value
|
||||||
|
*/
|
||||||
|
validateRuleSeverity(options) {
|
||||||
|
const severity = Array.isArray(options) ? options[0] : options;
|
||||||
|
const normSeverity = typeof severity === "string" ? severityMap[severity.toLowerCase()] : severity;
|
||||||
|
|
||||||
|
if (normSeverity === 0 || normSeverity === 1 || normSeverity === 2) {
|
||||||
|
return normSeverity;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(`\tSeverity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed '${util.inspect(severity).replace(/'/gu, "\"").replace(/\n/gu, "")}').\n`);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates the non-severity options passed to a rule, based on its schema.
|
||||||
|
* @param {{create: Function}} rule The rule to validate
|
||||||
|
* @param {Array} localOptions The options for the rule, excluding severity
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateRuleSchema(rule, localOptions) {
|
||||||
|
if (!ruleValidators.has(rule)) {
|
||||||
|
const schema = this.getRuleOptionsSchema(rule);
|
||||||
|
|
||||||
|
if (schema) {
|
||||||
|
ruleValidators.set(rule, ajv.compile(schema));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const validateRule = ruleValidators.get(rule);
|
||||||
|
|
||||||
|
if (validateRule) {
|
||||||
|
validateRule(localOptions);
|
||||||
|
if (validateRule.errors) {
|
||||||
|
throw new Error(validateRule.errors.map(
|
||||||
|
error => `\tValue ${JSON.stringify(error.data)} ${error.message}.\n`
|
||||||
|
).join(""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a rule's options against its schema.
|
||||||
|
* @param {{create: Function}|null} rule The rule that the config is being validated for
|
||||||
|
* @param {string} ruleId The rule's unique name.
|
||||||
|
* @param {Array|number} options The given options for the rule.
|
||||||
|
* @param {string|null} source The name of the configuration source to report in any errors. If null or undefined,
|
||||||
|
* no source is prepended to the message.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateRuleOptions(rule, ruleId, options, source = null) {
|
||||||
|
try {
|
||||||
|
const severity = this.validateRuleSeverity(options);
|
||||||
|
|
||||||
|
if (severity !== 0) {
|
||||||
|
this.validateRuleSchema(rule, Array.isArray(options) ? options.slice(1) : []);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
const enhancedMessage = `Configuration for rule "${ruleId}" is invalid:\n${err.message}`;
|
||||||
|
|
||||||
|
if (typeof source === "string") {
|
||||||
|
throw new Error(`${source}:\n\t${enhancedMessage}`);
|
||||||
|
} else {
|
||||||
|
throw new Error(enhancedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates an environment object
|
||||||
|
* @param {Object} environment The environment config object to validate.
|
||||||
|
* @param {string} source The name of the configuration source to report in any errors.
|
||||||
|
* @param {function(envId:string): Object} [getAdditionalEnv] A map from strings to loaded environments.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateEnvironment(
|
||||||
|
environment,
|
||||||
|
source,
|
||||||
|
getAdditionalEnv = noop
|
||||||
|
) {
|
||||||
|
|
||||||
|
// not having an environment is ok
|
||||||
|
if (!environment) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.keys(environment).forEach(id => {
|
||||||
|
const env = getAdditionalEnv(id) || BuiltInEnvironments.get(id) || null;
|
||||||
|
|
||||||
|
if (!env) {
|
||||||
|
const message = `${source}:\n\tEnvironment key "${id}" is unknown\n`;
|
||||||
|
|
||||||
|
throw new Error(message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a rules config object
|
||||||
|
* @param {Object} rulesConfig The rules config object to validate.
|
||||||
|
* @param {string} source The name of the configuration source to report in any errors.
|
||||||
|
* @param {function(ruleId:string): Object} getAdditionalRule A map from strings to loaded rules
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateRules(
|
||||||
|
rulesConfig,
|
||||||
|
source,
|
||||||
|
getAdditionalRule = noop
|
||||||
|
) {
|
||||||
|
if (!rulesConfig) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.keys(rulesConfig).forEach(id => {
|
||||||
|
const rule = getAdditionalRule(id) || this.builtInRules.get(id) || null;
|
||||||
|
|
||||||
|
this.validateRuleOptions(rule, id, rulesConfig[id], source);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a `globals` section of a config file
|
||||||
|
* @param {Object} globalsConfig The `globals` section
|
||||||
|
* @param {string|null} source The name of the configuration source to report in the event of an error.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateGlobals(globalsConfig, source = null) {
|
||||||
|
if (!globalsConfig) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.entries(globalsConfig)
|
||||||
|
.forEach(([configuredGlobal, configuredValue]) => {
|
||||||
|
try {
|
||||||
|
ConfigOps.normalizeConfigGlobal(configuredValue);
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error(`ESLint configuration of global '${configuredGlobal}' in ${source} is invalid:\n${err.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate `processor` configuration.
|
||||||
|
* @param {string|undefined} processorName The processor name.
|
||||||
|
* @param {string} source The name of config file.
|
||||||
|
* @param {function(id:string): Processor} getProcessor The getter of defined processors.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateProcessor(processorName, source, getProcessor) {
|
||||||
|
if (processorName && !getProcessor(processorName)) {
|
||||||
|
throw new Error(`ESLint configuration of processor in '${source}' is invalid: '${processorName}' was not found.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formats an array of schema validation errors.
|
||||||
|
* @param {Array} errors An array of error messages to format.
|
||||||
|
* @returns {string} Formatted error message
|
||||||
|
*/
|
||||||
|
formatErrors(errors) {
|
||||||
|
return errors.map(error => {
|
||||||
|
if (error.keyword === "additionalProperties") {
|
||||||
|
const formattedPropertyPath = error.dataPath.length ? `${error.dataPath.slice(1)}.${error.params.additionalProperty}` : error.params.additionalProperty;
|
||||||
|
|
||||||
|
return `Unexpected top-level property "${formattedPropertyPath}"`;
|
||||||
|
}
|
||||||
|
if (error.keyword === "type") {
|
||||||
|
const formattedField = error.dataPath.slice(1);
|
||||||
|
const formattedExpectedType = Array.isArray(error.schema) ? error.schema.join("/") : error.schema;
|
||||||
|
const formattedValue = JSON.stringify(error.data);
|
||||||
|
|
||||||
|
return `Property "${formattedField}" is the wrong type (expected ${formattedExpectedType} but got \`${formattedValue}\`)`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const field = error.dataPath[0] === "." ? error.dataPath.slice(1) : error.dataPath;
|
||||||
|
|
||||||
|
return `"${field}" ${error.message}. Value: ${JSON.stringify(error.data)}`;
|
||||||
|
}).map(message => `\t- ${message}.\n`).join("");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates the top level properties of the config object.
|
||||||
|
* @param {Object} config The config object to validate.
|
||||||
|
* @param {string} source The name of the configuration source to report in any errors.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateConfigSchema(config, source = null) {
|
||||||
|
validateSchema = validateSchema || ajv.compile(configSchema);
|
||||||
|
|
||||||
|
if (!validateSchema(config)) {
|
||||||
|
throw new Error(`ESLint configuration in ${source} is invalid:\n${this.formatErrors(validateSchema.errors)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object.hasOwnProperty.call(config, "ecmaFeatures")) {
|
||||||
|
emitDeprecationWarning(source, "ESLINT_LEGACY_ECMAFEATURES");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates an entire config object.
|
||||||
|
* @param {Object} config The config object to validate.
|
||||||
|
* @param {string} source The name of the configuration source to report in any errors.
|
||||||
|
* @param {function(ruleId:string): Object} [getAdditionalRule] A map from strings to loaded rules.
|
||||||
|
* @param {function(envId:string): Object} [getAdditionalEnv] A map from strings to loaded envs.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validate(config, source, getAdditionalRule, getAdditionalEnv) {
|
||||||
|
this.validateConfigSchema(config, source);
|
||||||
|
this.validateRules(config.rules, source, getAdditionalRule);
|
||||||
|
this.validateEnvironment(config.env, source, getAdditionalEnv);
|
||||||
|
this.validateGlobals(config.globals, source);
|
||||||
|
|
||||||
|
for (const override of config.overrides || []) {
|
||||||
|
this.validateRules(override.rules, source, getAdditionalRule);
|
||||||
|
this.validateEnvironment(override.env, source, getAdditionalEnv);
|
||||||
|
this.validateGlobals(config.globals, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate config array object.
|
||||||
|
* @param {ConfigArray} configArray The config array to validate.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
validateConfigArray(configArray) {
|
||||||
|
const getPluginEnv = Map.prototype.get.bind(configArray.pluginEnvironments);
|
||||||
|
const getPluginProcessor = Map.prototype.get.bind(configArray.pluginProcessors);
|
||||||
|
const getPluginRule = Map.prototype.get.bind(configArray.pluginRules);
|
||||||
|
|
||||||
|
// Validate.
|
||||||
|
for (const element of configArray) {
|
||||||
|
if (validated.has(element)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
validated.add(element);
|
||||||
|
|
||||||
|
this.validateEnvironment(element.env, element.name, getPluginEnv);
|
||||||
|
this.validateGlobals(element.globals, element.name);
|
||||||
|
this.validateProcessor(element.processor, element.name, getPluginProcessor);
|
||||||
|
this.validateRules(element.rules, element.name, getPluginRule);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
63
obsidian/node_modules/@eslint/eslintrc/lib/shared/deprecation-warnings.js
generated
vendored
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Provide the function that emits deprecation warnings.
|
||||||
|
* @author Toru Nagashima <http://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Requirements
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Private
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Defitions for deprecation warnings.
|
||||||
|
const deprecationWarningMessages = {
|
||||||
|
ESLINT_LEGACY_ECMAFEATURES:
|
||||||
|
"The 'ecmaFeatures' config file property is deprecated and has no effect.",
|
||||||
|
ESLINT_PERSONAL_CONFIG_LOAD:
|
||||||
|
"'~/.eslintrc.*' config files have been deprecated. " +
|
||||||
|
"Please use a config file per project or the '--config' option.",
|
||||||
|
ESLINT_PERSONAL_CONFIG_SUPPRESS:
|
||||||
|
"'~/.eslintrc.*' config files have been deprecated. " +
|
||||||
|
"Please remove it or add 'root:true' to the config files in your " +
|
||||||
|
"projects in order to avoid loading '~/.eslintrc.*' accidentally."
|
||||||
|
};
|
||||||
|
|
||||||
|
const sourceFileErrorCache = new Set();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emits a deprecation warning containing a given filepath. A new deprecation warning is emitted
|
||||||
|
* for each unique file path, but repeated invocations with the same file path have no effect.
|
||||||
|
* No warnings are emitted if the `--no-deprecation` or `--no-warnings` Node runtime flags are active.
|
||||||
|
* @param {string} source The name of the configuration source to report the warning for.
|
||||||
|
* @param {string} errorCode The warning message to show.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function emitDeprecationWarning(source, errorCode) {
|
||||||
|
const cacheKey = JSON.stringify({ source, errorCode });
|
||||||
|
|
||||||
|
if (sourceFileErrorCache.has(cacheKey)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sourceFileErrorCache.add(cacheKey);
|
||||||
|
|
||||||
|
const rel = path.relative(process.cwd(), source);
|
||||||
|
const message = deprecationWarningMessages[errorCode];
|
||||||
|
|
||||||
|
process.emitWarning(
|
||||||
|
`${message} (found in "${rel}")`,
|
||||||
|
"DeprecationWarning",
|
||||||
|
errorCode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export {
|
||||||
|
emitDeprecationWarning
|
||||||
|
};
|
96
obsidian/node_modules/@eslint/eslintrc/lib/shared/naming.js
generated
vendored
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Common helpers for naming of plugins, formatters and configs
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAMESPACE_REGEX = /^@.*\//iu;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Brings package name to correct format based on prefix
|
||||||
|
* @param {string} name The name of the package.
|
||||||
|
* @param {string} prefix Can be either "eslint-plugin", "eslint-config" or "eslint-formatter"
|
||||||
|
* @returns {string} Normalized name of the package
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function normalizePackageName(name, prefix) {
|
||||||
|
let normalizedName = name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On Windows, name can come in with Windows slashes instead of Unix slashes.
|
||||||
|
* Normalize to Unix first to avoid errors later on.
|
||||||
|
* https://github.com/eslint/eslint/issues/5644
|
||||||
|
*/
|
||||||
|
if (normalizedName.includes("\\")) {
|
||||||
|
normalizedName = normalizedName.replace(/\\/gu, "/");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (normalizedName.charAt(0) === "@") {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* it's a scoped package
|
||||||
|
* package name is the prefix, or just a username
|
||||||
|
*/
|
||||||
|
const scopedPackageShortcutRegex = new RegExp(`^(@[^/]+)(?:/(?:${prefix})?)?$`, "u"),
|
||||||
|
scopedPackageNameRegex = new RegExp(`^${prefix}(-|$)`, "u");
|
||||||
|
|
||||||
|
if (scopedPackageShortcutRegex.test(normalizedName)) {
|
||||||
|
normalizedName = normalizedName.replace(scopedPackageShortcutRegex, `$1/${prefix}`);
|
||||||
|
} else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for scoped packages, insert the prefix after the first / unless
|
||||||
|
* the path is already @scope/eslint or @scope/eslint-xxx-yyy
|
||||||
|
*/
|
||||||
|
normalizedName = normalizedName.replace(/^@([^/]+)\/(.*)$/u, `@$1/${prefix}-$2`);
|
||||||
|
}
|
||||||
|
} else if (!normalizedName.startsWith(`${prefix}-`)) {
|
||||||
|
normalizedName = `${prefix}-${normalizedName}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalizedName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the prefix from a fullname.
|
||||||
|
* @param {string} fullname The term which may have the prefix.
|
||||||
|
* @param {string} prefix The prefix to remove.
|
||||||
|
* @returns {string} The term without prefix.
|
||||||
|
*/
|
||||||
|
function getShorthandName(fullname, prefix) {
|
||||||
|
if (fullname[0] === "@") {
|
||||||
|
let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, "u").exec(fullname);
|
||||||
|
|
||||||
|
if (matchResult) {
|
||||||
|
return matchResult[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, "u").exec(fullname);
|
||||||
|
if (matchResult) {
|
||||||
|
return `${matchResult[1]}/${matchResult[2]}`;
|
||||||
|
}
|
||||||
|
} else if (fullname.startsWith(`${prefix}-`)) {
|
||||||
|
return fullname.slice(prefix.length + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return fullname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the scope (namespace) of a term.
|
||||||
|
* @param {string} term The term which may have the namespace.
|
||||||
|
* @returns {string} The namespace of the term if it has one.
|
||||||
|
*/
|
||||||
|
function getNamespaceFromTerm(term) {
|
||||||
|
const match = term.match(NAMESPACE_REGEX);
|
||||||
|
|
||||||
|
return match ? match[0] : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export {
|
||||||
|
normalizePackageName,
|
||||||
|
getShorthandName,
|
||||||
|
getNamespaceFromTerm
|
||||||
|
};
|
42
obsidian/node_modules/@eslint/eslintrc/lib/shared/relative-module-resolver.js
generated
vendored
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/**
|
||||||
|
* Utility for resolving a module relative to another module
|
||||||
|
* @author Teddy Katz
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Module from "module";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* `Module.createRequire` is added in v12.2.0. It supports URL as well.
|
||||||
|
* We only support the case where the argument is a filepath, not a URL.
|
||||||
|
*/
|
||||||
|
const createRequire = Module.createRequire;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves a Node module relative to another module
|
||||||
|
* @param {string} moduleName The name of a Node module, or a path to a Node module.
|
||||||
|
* @param {string} relativeToPath An absolute path indicating the module that `moduleName` should be resolved relative to. This must be
|
||||||
|
* a file rather than a directory, but the file need not actually exist.
|
||||||
|
* @returns {string} The absolute path that would result from calling `require.resolve(moduleName)` in a file located at `relativeToPath`
|
||||||
|
*/
|
||||||
|
function resolve(moduleName, relativeToPath) {
|
||||||
|
try {
|
||||||
|
return createRequire(relativeToPath).resolve(moduleName);
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
// This `if` block is for older Node.js than 12.0.0. We can remove this block in the future.
|
||||||
|
if (
|
||||||
|
typeof error === "object" &&
|
||||||
|
error !== null &&
|
||||||
|
error.code === "MODULE_NOT_FOUND" &&
|
||||||
|
!error.requireStack &&
|
||||||
|
error.message.includes(moduleName)
|
||||||
|
) {
|
||||||
|
error.message += `\nRequire stack:\n- ${relativeToPath}`;
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
resolve
|
||||||
|
};
|
149
obsidian/node_modules/@eslint/eslintrc/lib/shared/types.js
generated
vendored
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Define common types for input completion.
|
||||||
|
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type {any} */
|
||||||
|
export default {};
|
||||||
|
|
||||||
|
/** @typedef {boolean | "off" | "readable" | "readonly" | "writable" | "writeable"} GlobalConf */
|
||||||
|
/** @typedef {0 | 1 | 2 | "off" | "warn" | "error"} SeverityConf */
|
||||||
|
/** @typedef {SeverityConf | [SeverityConf, ...any[]]} RuleConf */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} EcmaFeatures
|
||||||
|
* @property {boolean} [globalReturn] Enabling `return` statements at the top-level.
|
||||||
|
* @property {boolean} [jsx] Enabling JSX syntax.
|
||||||
|
* @property {boolean} [impliedStrict] Enabling strict mode always.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ParserOptions
|
||||||
|
* @property {EcmaFeatures} [ecmaFeatures] The optional features.
|
||||||
|
* @property {3|5|6|7|8|9|10|11|12|2015|2016|2017|2018|2019|2020|2021} [ecmaVersion] The ECMAScript version (or revision number).
|
||||||
|
* @property {"script"|"module"} [sourceType] The source code type.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ConfigData
|
||||||
|
* @property {Record<string, boolean>} [env] The environment settings.
|
||||||
|
* @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.
|
||||||
|
* @property {Record<string, GlobalConf>} [globals] The global variable settings.
|
||||||
|
* @property {string | string[]} [ignorePatterns] The glob patterns that ignore to lint.
|
||||||
|
* @property {boolean} [noInlineConfig] The flag that disables directive comments.
|
||||||
|
* @property {OverrideConfigData[]} [overrides] The override settings per kind of files.
|
||||||
|
* @property {string} [parser] The path to a parser or the package name of a parser.
|
||||||
|
* @property {ParserOptions} [parserOptions] The parser options.
|
||||||
|
* @property {string[]} [plugins] The plugin specifiers.
|
||||||
|
* @property {string} [processor] The processor specifier.
|
||||||
|
* @property {boolean} [reportUnusedDisableDirectives] The flag to report unused `eslint-disable` comments.
|
||||||
|
* @property {boolean} [root] The root flag.
|
||||||
|
* @property {Record<string, RuleConf>} [rules] The rule settings.
|
||||||
|
* @property {Object} [settings] The shared settings.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} OverrideConfigData
|
||||||
|
* @property {Record<string, boolean>} [env] The environment settings.
|
||||||
|
* @property {string | string[]} [excludedFiles] The glob pattarns for excluded files.
|
||||||
|
* @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.
|
||||||
|
* @property {string | string[]} files The glob patterns for target files.
|
||||||
|
* @property {Record<string, GlobalConf>} [globals] The global variable settings.
|
||||||
|
* @property {boolean} [noInlineConfig] The flag that disables directive comments.
|
||||||
|
* @property {OverrideConfigData[]} [overrides] The override settings per kind of files.
|
||||||
|
* @property {string} [parser] The path to a parser or the package name of a parser.
|
||||||
|
* @property {ParserOptions} [parserOptions] The parser options.
|
||||||
|
* @property {string[]} [plugins] The plugin specifiers.
|
||||||
|
* @property {string} [processor] The processor specifier.
|
||||||
|
* @property {boolean} [reportUnusedDisableDirectives] The flag to report unused `eslint-disable` comments.
|
||||||
|
* @property {Record<string, RuleConf>} [rules] The rule settings.
|
||||||
|
* @property {Object} [settings] The shared settings.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ParseResult
|
||||||
|
* @property {Object} ast The AST.
|
||||||
|
* @property {ScopeManager} [scopeManager] The scope manager of the AST.
|
||||||
|
* @property {Record<string, any>} [services] The services that the parser provides.
|
||||||
|
* @property {Record<string, string[]>} [visitorKeys] The visitor keys of the AST.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} Parser
|
||||||
|
* @property {(text:string, options:ParserOptions) => Object} parse The definition of global variables.
|
||||||
|
* @property {(text:string, options:ParserOptions) => ParseResult} [parseForESLint] The parser options that will be enabled under this environment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} Environment
|
||||||
|
* @property {Record<string, GlobalConf>} [globals] The definition of global variables.
|
||||||
|
* @property {ParserOptions} [parserOptions] The parser options that will be enabled under this environment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} LintMessage
|
||||||
|
* @property {number} column The 1-based column number.
|
||||||
|
* @property {number} [endColumn] The 1-based column number of the end location.
|
||||||
|
* @property {number} [endLine] The 1-based line number of the end location.
|
||||||
|
* @property {boolean} fatal If `true` then this is a fatal error.
|
||||||
|
* @property {{range:[number,number], text:string}} [fix] Information for autofix.
|
||||||
|
* @property {number} line The 1-based line number.
|
||||||
|
* @property {string} message The error message.
|
||||||
|
* @property {string|null} ruleId The ID of the rule which makes this message.
|
||||||
|
* @property {0|1|2} severity The severity of this message.
|
||||||
|
* @property {Array<{desc?: string, messageId?: string, fix: {range: [number, number], text: string}}>} [suggestions] Information for suggestions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} SuggestionResult
|
||||||
|
* @property {string} desc A short description.
|
||||||
|
* @property {string} [messageId] Id referencing a message for the description.
|
||||||
|
* @property {{ text: string, range: number[] }} fix fix result info
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} Processor
|
||||||
|
* @property {(text:string, filename:string) => Array<string | { text:string, filename:string }>} [preprocess] The function to extract code blocks.
|
||||||
|
* @property {(messagesList:LintMessage[][], filename:string) => LintMessage[]} [postprocess] The function to merge messages.
|
||||||
|
* @property {boolean} [supportsAutofix] If `true` then it means the processor supports autofix.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} RuleMetaDocs
|
||||||
|
* @property {string} category The category of the rule.
|
||||||
|
* @property {string} description The description of the rule.
|
||||||
|
* @property {boolean} recommended If `true` then the rule is included in `eslint:recommended` preset.
|
||||||
|
* @property {string} url The URL of the rule documentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} RuleMeta
|
||||||
|
* @property {boolean} [deprecated] If `true` then the rule has been deprecated.
|
||||||
|
* @property {RuleMetaDocs} docs The document information of the rule.
|
||||||
|
* @property {"code"|"whitespace"} [fixable] The autofix type.
|
||||||
|
* @property {Record<string,string>} [messages] The messages the rule reports.
|
||||||
|
* @property {string[]} [replacedBy] The IDs of the alternative rules.
|
||||||
|
* @property {Array|Object} schema The option schema of the rule.
|
||||||
|
* @property {"problem"|"suggestion"|"layout"} type The rule type.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} Rule
|
||||||
|
* @property {Function} create The factory of the rule.
|
||||||
|
* @property {RuleMeta} meta The meta data of the rule.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} Plugin
|
||||||
|
* @property {Record<string, ConfigData>} [configs] The definition of plugin configs.
|
||||||
|
* @property {Record<string, Environment>} [environments] The definition of plugin environments.
|
||||||
|
* @property {Record<string, Processor>} [processors] The definition of plugin processors.
|
||||||
|
* @property {Record<string, Function | Rule>} [rules] The definition of plugin rules.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information of deprecated rules.
|
||||||
|
* @typedef {Object} DeprecatedRuleInfo
|
||||||
|
* @property {string} ruleId The rule ID.
|
||||||
|
* @property {string[]} replacedBy The rule IDs that replace this deprecated rule.
|
||||||
|
*/
|
82
obsidian/node_modules/@eslint/eslintrc/package.json
generated
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
{
|
||||||
|
"name": "@eslint/eslintrc",
|
||||||
|
"version": "2.0.3",
|
||||||
|
"description": "The legacy ESLintRC config file format for ESLint",
|
||||||
|
"type": "module",
|
||||||
|
"main": "./dist/eslintrc.cjs",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"import": "./lib/index.js",
|
||||||
|
"require": "./dist/eslintrc.cjs"
|
||||||
|
},
|
||||||
|
"./package.json": "./package.json",
|
||||||
|
"./universal": {
|
||||||
|
"import": "./lib/index-universal.js",
|
||||||
|
"require": "./dist/eslintrc-universal.cjs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib",
|
||||||
|
"conf",
|
||||||
|
"LICENSE",
|
||||||
|
"dist",
|
||||||
|
"universal.js"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"prepare": "npm run build",
|
||||||
|
"build": "rollup -c",
|
||||||
|
"lint": "eslint . --report-unused-disable-directives",
|
||||||
|
"fix": "npm run lint -- --fix",
|
||||||
|
"test": "mocha -R progress -c 'tests/lib/*.cjs' && c8 mocha -R progress -c 'tests/lib/**/*.js'",
|
||||||
|
"generate-release": "eslint-generate-release",
|
||||||
|
"generate-alpharelease": "eslint-generate-prerelease alpha",
|
||||||
|
"generate-betarelease": "eslint-generate-prerelease beta",
|
||||||
|
"generate-rcrelease": "eslint-generate-prerelease rc",
|
||||||
|
"publish-release": "eslint-publish-release"
|
||||||
|
},
|
||||||
|
"repository": "eslint/eslintrc",
|
||||||
|
"funding": "https://opencollective.com/eslint",
|
||||||
|
"keywords": [
|
||||||
|
"ESLint",
|
||||||
|
"ESLintRC",
|
||||||
|
"Configuration"
|
||||||
|
],
|
||||||
|
"author": "Nicholas C. Zakas",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/eslint/eslintrc/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/eslint/eslintrc#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"c8": "^7.7.3",
|
||||||
|
"chai": "^4.3.4",
|
||||||
|
"eslint": "^7.31.0",
|
||||||
|
"eslint-config-eslint": "^7.0.0",
|
||||||
|
"eslint-plugin-jsdoc": "^35.4.1",
|
||||||
|
"eslint-plugin-node": "^11.1.0",
|
||||||
|
"eslint-release": "^3.2.0",
|
||||||
|
"fs-teardown": "^0.1.3",
|
||||||
|
"mocha": "^9.0.3",
|
||||||
|
"rollup": "^2.70.1",
|
||||||
|
"shelljs": "^0.8.4",
|
||||||
|
"sinon": "^11.1.2",
|
||||||
|
"temp-dir": "^2.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ajv": "^6.12.4",
|
||||||
|
"debug": "^4.3.2",
|
||||||
|
"espree": "^9.5.2",
|
||||||
|
"globals": "^13.19.0",
|
||||||
|
"ignore": "^5.2.0",
|
||||||
|
"import-fresh": "^3.2.1",
|
||||||
|
"js-yaml": "^4.1.0",
|
||||||
|
"minimatch": "^3.1.2",
|
||||||
|
"strip-json-comments": "^3.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
|
}
|
||||||
|
}
|
9
obsidian/node_modules/@eslint/eslintrc/universal.js
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
// Jest (and probably some other runtimes with custom implementations of
|
||||||
|
// `require`) doesn't support `exports` in `package.json`, so this file is here
|
||||||
|
// to help them load this module. Note that it is also `.js` and not `.cjs` for
|
||||||
|
// the same reason - `cjs` files requires to be loaded with an extension, but
|
||||||
|
// since Jest doesn't respect `module` outside of ESM mode it still works in
|
||||||
|
// this case (and the `require` in _this_ file does specify the extension).
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
module.exports = require("./dist/eslintrc-universal.cjs");
|
19
obsidian/node_modules/@eslint/js/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
||||||
|
|
||||||
|
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.
|
57
obsidian/node_modules/@eslint/js/README.md
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
[![npm version](https://img.shields.io/npm/v/@eslint/js.svg)](https://www.npmjs.com/package/@eslint/js)
|
||||||
|
|
||||||
|
# ESLint JavaScript Plugin
|
||||||
|
|
||||||
|
[Website](https://eslint.org) | [Configure ESLint](https://eslint.org/docs/latest/use/configure) | [Rules](https://eslint.org/docs/rules/) | [Contributing](https://eslint.org/docs/latest/contribute) | [Twitter](https://twitter.com/geteslint) | [Chatroom](https://eslint.org/chat)
|
||||||
|
|
||||||
|
The beginnings of separating out JavaScript-specific functionality from ESLint.
|
||||||
|
|
||||||
|
Right now, this plugin contains two configurations:
|
||||||
|
|
||||||
|
* `recommended` - enables the rules recommended by the ESLint team (the replacement for `"eslint:recommended"`)
|
||||||
|
* `all` - enables all ESLint rules (the replacement for `"eslint:all"`)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npm install @eslint/js -D
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Use in your `eslint.config.js` file anytime you want to extend one of the configs:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import js from "@eslint/js";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// apply recommended rules to JS files
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
rules: js.configs.recommended.rules
|
||||||
|
},
|
||||||
|
|
||||||
|
// apply recommended rules to JS files with an override
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
rules: {
|
||||||
|
...js.configs.recommended.rules,
|
||||||
|
"no-unused-vars": "warn"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// apply all rules to JS files
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
rules: {
|
||||||
|
...js.configs.all.rules,
|
||||||
|
"no-unused-vars": "warn"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
31
obsidian/node_modules/@eslint/js/package.json
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"name": "@eslint/js",
|
||||||
|
"version": "8.42.0",
|
||||||
|
"description": "ESLint JavaScript language implementation",
|
||||||
|
"main": "./src/index.js",
|
||||||
|
"scripts": {},
|
||||||
|
"files": [
|
||||||
|
"LICENSE",
|
||||||
|
"README.md",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/eslint/eslint.git",
|
||||||
|
"directory": "packages/js"
|
||||||
|
},
|
||||||
|
"homepage": "https://eslint.org",
|
||||||
|
"bugs": "https://github.com/eslint/eslint/issues/",
|
||||||
|
"keywords": [
|
||||||
|
"javascript",
|
||||||
|
"eslint-plugin",
|
||||||
|
"eslint"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
|
}
|
||||||
|
}
|
279
obsidian/node_modules/@eslint/js/src/configs/eslint-all.js
generated
vendored
Normal file
|
@ -0,0 +1,279 @@
|
||||||
|
/*
|
||||||
|
* WARNING: This file is autogenerated using the tools/update-eslint-all.js
|
||||||
|
* script. Do not edit manually.
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/* eslint quote-props: off -- autogenerated so don't lint */
|
||||||
|
|
||||||
|
module.exports = Object.freeze({
|
||||||
|
"rules": {
|
||||||
|
"accessor-pairs": "error",
|
||||||
|
"array-bracket-newline": "error",
|
||||||
|
"array-bracket-spacing": "error",
|
||||||
|
"array-callback-return": "error",
|
||||||
|
"array-element-newline": "error",
|
||||||
|
"arrow-body-style": "error",
|
||||||
|
"arrow-parens": "error",
|
||||||
|
"arrow-spacing": "error",
|
||||||
|
"block-scoped-var": "error",
|
||||||
|
"block-spacing": "error",
|
||||||
|
"brace-style": "error",
|
||||||
|
"camelcase": "error",
|
||||||
|
"capitalized-comments": "error",
|
||||||
|
"class-methods-use-this": "error",
|
||||||
|
"comma-dangle": "error",
|
||||||
|
"comma-spacing": "error",
|
||||||
|
"comma-style": "error",
|
||||||
|
"complexity": "error",
|
||||||
|
"computed-property-spacing": "error",
|
||||||
|
"consistent-return": "error",
|
||||||
|
"consistent-this": "error",
|
||||||
|
"constructor-super": "error",
|
||||||
|
"curly": "error",
|
||||||
|
"default-case": "error",
|
||||||
|
"default-case-last": "error",
|
||||||
|
"default-param-last": "error",
|
||||||
|
"dot-location": "error",
|
||||||
|
"dot-notation": "error",
|
||||||
|
"eol-last": "error",
|
||||||
|
"eqeqeq": "error",
|
||||||
|
"for-direction": "error",
|
||||||
|
"func-call-spacing": "error",
|
||||||
|
"func-name-matching": "error",
|
||||||
|
"func-names": "error",
|
||||||
|
"func-style": "error",
|
||||||
|
"function-call-argument-newline": "error",
|
||||||
|
"function-paren-newline": "error",
|
||||||
|
"generator-star-spacing": "error",
|
||||||
|
"getter-return": "error",
|
||||||
|
"grouped-accessor-pairs": "error",
|
||||||
|
"guard-for-in": "error",
|
||||||
|
"id-denylist": "error",
|
||||||
|
"id-length": "error",
|
||||||
|
"id-match": "error",
|
||||||
|
"implicit-arrow-linebreak": "error",
|
||||||
|
"indent": "error",
|
||||||
|
"init-declarations": "error",
|
||||||
|
"jsx-quotes": "error",
|
||||||
|
"key-spacing": "error",
|
||||||
|
"keyword-spacing": "error",
|
||||||
|
"line-comment-position": "error",
|
||||||
|
"linebreak-style": "error",
|
||||||
|
"lines-around-comment": "error",
|
||||||
|
"lines-between-class-members": "error",
|
||||||
|
"logical-assignment-operators": "error",
|
||||||
|
"max-classes-per-file": "error",
|
||||||
|
"max-depth": "error",
|
||||||
|
"max-len": "error",
|
||||||
|
"max-lines": "error",
|
||||||
|
"max-lines-per-function": "error",
|
||||||
|
"max-nested-callbacks": "error",
|
||||||
|
"max-params": "error",
|
||||||
|
"max-statements": "error",
|
||||||
|
"max-statements-per-line": "error",
|
||||||
|
"multiline-comment-style": "error",
|
||||||
|
"multiline-ternary": "error",
|
||||||
|
"new-cap": "error",
|
||||||
|
"new-parens": "error",
|
||||||
|
"newline-per-chained-call": "error",
|
||||||
|
"no-alert": "error",
|
||||||
|
"no-array-constructor": "error",
|
||||||
|
"no-async-promise-executor": "error",
|
||||||
|
"no-await-in-loop": "error",
|
||||||
|
"no-bitwise": "error",
|
||||||
|
"no-caller": "error",
|
||||||
|
"no-case-declarations": "error",
|
||||||
|
"no-class-assign": "error",
|
||||||
|
"no-compare-neg-zero": "error",
|
||||||
|
"no-cond-assign": "error",
|
||||||
|
"no-confusing-arrow": "error",
|
||||||
|
"no-console": "error",
|
||||||
|
"no-const-assign": "error",
|
||||||
|
"no-constant-binary-expression": "error",
|
||||||
|
"no-constant-condition": "error",
|
||||||
|
"no-constructor-return": "error",
|
||||||
|
"no-continue": "error",
|
||||||
|
"no-control-regex": "error",
|
||||||
|
"no-debugger": "error",
|
||||||
|
"no-delete-var": "error",
|
||||||
|
"no-div-regex": "error",
|
||||||
|
"no-dupe-args": "error",
|
||||||
|
"no-dupe-class-members": "error",
|
||||||
|
"no-dupe-else-if": "error",
|
||||||
|
"no-dupe-keys": "error",
|
||||||
|
"no-duplicate-case": "error",
|
||||||
|
"no-duplicate-imports": "error",
|
||||||
|
"no-else-return": "error",
|
||||||
|
"no-empty": "error",
|
||||||
|
"no-empty-character-class": "error",
|
||||||
|
"no-empty-function": "error",
|
||||||
|
"no-empty-pattern": "error",
|
||||||
|
"no-empty-static-block": "error",
|
||||||
|
"no-eq-null": "error",
|
||||||
|
"no-eval": "error",
|
||||||
|
"no-ex-assign": "error",
|
||||||
|
"no-extend-native": "error",
|
||||||
|
"no-extra-bind": "error",
|
||||||
|
"no-extra-boolean-cast": "error",
|
||||||
|
"no-extra-label": "error",
|
||||||
|
"no-extra-parens": "error",
|
||||||
|
"no-extra-semi": "error",
|
||||||
|
"no-fallthrough": "error",
|
||||||
|
"no-floating-decimal": "error",
|
||||||
|
"no-func-assign": "error",
|
||||||
|
"no-global-assign": "error",
|
||||||
|
"no-implicit-coercion": "error",
|
||||||
|
"no-implicit-globals": "error",
|
||||||
|
"no-implied-eval": "error",
|
||||||
|
"no-import-assign": "error",
|
||||||
|
"no-inline-comments": "error",
|
||||||
|
"no-inner-declarations": "error",
|
||||||
|
"no-invalid-regexp": "error",
|
||||||
|
"no-invalid-this": "error",
|
||||||
|
"no-irregular-whitespace": "error",
|
||||||
|
"no-iterator": "error",
|
||||||
|
"no-label-var": "error",
|
||||||
|
"no-labels": "error",
|
||||||
|
"no-lone-blocks": "error",
|
||||||
|
"no-lonely-if": "error",
|
||||||
|
"no-loop-func": "error",
|
||||||
|
"no-loss-of-precision": "error",
|
||||||
|
"no-magic-numbers": "error",
|
||||||
|
"no-misleading-character-class": "error",
|
||||||
|
"no-mixed-operators": "error",
|
||||||
|
"no-mixed-spaces-and-tabs": "error",
|
||||||
|
"no-multi-assign": "error",
|
||||||
|
"no-multi-spaces": "error",
|
||||||
|
"no-multi-str": "error",
|
||||||
|
"no-multiple-empty-lines": "error",
|
||||||
|
"no-negated-condition": "error",
|
||||||
|
"no-nested-ternary": "error",
|
||||||
|
"no-new": "error",
|
||||||
|
"no-new-func": "error",
|
||||||
|
"no-new-native-nonconstructor": "error",
|
||||||
|
"no-new-object": "error",
|
||||||
|
"no-new-symbol": "error",
|
||||||
|
"no-new-wrappers": "error",
|
||||||
|
"no-nonoctal-decimal-escape": "error",
|
||||||
|
"no-obj-calls": "error",
|
||||||
|
"no-octal": "error",
|
||||||
|
"no-octal-escape": "error",
|
||||||
|
"no-param-reassign": "error",
|
||||||
|
"no-plusplus": "error",
|
||||||
|
"no-promise-executor-return": "error",
|
||||||
|
"no-proto": "error",
|
||||||
|
"no-prototype-builtins": "error",
|
||||||
|
"no-redeclare": "error",
|
||||||
|
"no-regex-spaces": "error",
|
||||||
|
"no-restricted-exports": "error",
|
||||||
|
"no-restricted-globals": "error",
|
||||||
|
"no-restricted-imports": "error",
|
||||||
|
"no-restricted-properties": "error",
|
||||||
|
"no-restricted-syntax": "error",
|
||||||
|
"no-return-assign": "error",
|
||||||
|
"no-return-await": "error",
|
||||||
|
"no-script-url": "error",
|
||||||
|
"no-self-assign": "error",
|
||||||
|
"no-self-compare": "error",
|
||||||
|
"no-sequences": "error",
|
||||||
|
"no-setter-return": "error",
|
||||||
|
"no-shadow": "error",
|
||||||
|
"no-shadow-restricted-names": "error",
|
||||||
|
"no-sparse-arrays": "error",
|
||||||
|
"no-tabs": "error",
|
||||||
|
"no-template-curly-in-string": "error",
|
||||||
|
"no-ternary": "error",
|
||||||
|
"no-this-before-super": "error",
|
||||||
|
"no-throw-literal": "error",
|
||||||
|
"no-trailing-spaces": "error",
|
||||||
|
"no-undef": "error",
|
||||||
|
"no-undef-init": "error",
|
||||||
|
"no-undefined": "error",
|
||||||
|
"no-underscore-dangle": "error",
|
||||||
|
"no-unexpected-multiline": "error",
|
||||||
|
"no-unmodified-loop-condition": "error",
|
||||||
|
"no-unneeded-ternary": "error",
|
||||||
|
"no-unreachable": "error",
|
||||||
|
"no-unreachable-loop": "error",
|
||||||
|
"no-unsafe-finally": "error",
|
||||||
|
"no-unsafe-negation": "error",
|
||||||
|
"no-unsafe-optional-chaining": "error",
|
||||||
|
"no-unused-expressions": "error",
|
||||||
|
"no-unused-labels": "error",
|
||||||
|
"no-unused-private-class-members": "error",
|
||||||
|
"no-unused-vars": "error",
|
||||||
|
"no-use-before-define": "error",
|
||||||
|
"no-useless-backreference": "error",
|
||||||
|
"no-useless-call": "error",
|
||||||
|
"no-useless-catch": "error",
|
||||||
|
"no-useless-computed-key": "error",
|
||||||
|
"no-useless-concat": "error",
|
||||||
|
"no-useless-constructor": "error",
|
||||||
|
"no-useless-escape": "error",
|
||||||
|
"no-useless-rename": "error",
|
||||||
|
"no-useless-return": "error",
|
||||||
|
"no-var": "error",
|
||||||
|
"no-void": "error",
|
||||||
|
"no-warning-comments": "error",
|
||||||
|
"no-whitespace-before-property": "error",
|
||||||
|
"no-with": "error",
|
||||||
|
"nonblock-statement-body-position": "error",
|
||||||
|
"object-curly-newline": "error",
|
||||||
|
"object-curly-spacing": "error",
|
||||||
|
"object-property-newline": "error",
|
||||||
|
"object-shorthand": "error",
|
||||||
|
"one-var": "error",
|
||||||
|
"one-var-declaration-per-line": "error",
|
||||||
|
"operator-assignment": "error",
|
||||||
|
"operator-linebreak": "error",
|
||||||
|
"padded-blocks": "error",
|
||||||
|
"padding-line-between-statements": "error",
|
||||||
|
"prefer-arrow-callback": "error",
|
||||||
|
"prefer-const": "error",
|
||||||
|
"prefer-destructuring": "error",
|
||||||
|
"prefer-exponentiation-operator": "error",
|
||||||
|
"prefer-named-capture-group": "error",
|
||||||
|
"prefer-numeric-literals": "error",
|
||||||
|
"prefer-object-has-own": "error",
|
||||||
|
"prefer-object-spread": "error",
|
||||||
|
"prefer-promise-reject-errors": "error",
|
||||||
|
"prefer-regex-literals": "error",
|
||||||
|
"prefer-rest-params": "error",
|
||||||
|
"prefer-spread": "error",
|
||||||
|
"prefer-template": "error",
|
||||||
|
"quote-props": "error",
|
||||||
|
"quotes": "error",
|
||||||
|
"radix": "error",
|
||||||
|
"require-atomic-updates": "error",
|
||||||
|
"require-await": "error",
|
||||||
|
"require-unicode-regexp": "error",
|
||||||
|
"require-yield": "error",
|
||||||
|
"rest-spread-spacing": "error",
|
||||||
|
"semi": "error",
|
||||||
|
"semi-spacing": "error",
|
||||||
|
"semi-style": "error",
|
||||||
|
"sort-imports": "error",
|
||||||
|
"sort-keys": "error",
|
||||||
|
"sort-vars": "error",
|
||||||
|
"space-before-blocks": "error",
|
||||||
|
"space-before-function-paren": "error",
|
||||||
|
"space-in-parens": "error",
|
||||||
|
"space-infix-ops": "error",
|
||||||
|
"space-unary-ops": "error",
|
||||||
|
"spaced-comment": "error",
|
||||||
|
"strict": "error",
|
||||||
|
"switch-colon-spacing": "error",
|
||||||
|
"symbol-description": "error",
|
||||||
|
"template-curly-spacing": "error",
|
||||||
|
"template-tag-spacing": "error",
|
||||||
|
"unicode-bom": "error",
|
||||||
|
"use-isnan": "error",
|
||||||
|
"valid-typeof": "error",
|
||||||
|
"vars-on-top": "error",
|
||||||
|
"wrap-iife": "error",
|
||||||
|
"wrap-regex": "error",
|
||||||
|
"yield-star-spacing": "error",
|
||||||
|
"yoda": "error"
|
||||||
|
}
|
||||||
|
});
|
76
obsidian/node_modules/@eslint/js/src/configs/eslint-recommended.js
generated
vendored
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Configuration applied when a user configuration extends from
|
||||||
|
* eslint:recommended.
|
||||||
|
* @author Nicholas C. Zakas
|
||||||
|
*/
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/* eslint sort-keys: ["error", "asc"] -- Long, so make more readable */
|
||||||
|
|
||||||
|
/** @type {import("../lib/shared/types").ConfigData} */
|
||||||
|
module.exports = Object.freeze({
|
||||||
|
rules: Object.freeze({
|
||||||
|
"constructor-super": "error",
|
||||||
|
"for-direction": "error",
|
||||||
|
"getter-return": "error",
|
||||||
|
"no-async-promise-executor": "error",
|
||||||
|
"no-case-declarations": "error",
|
||||||
|
"no-class-assign": "error",
|
||||||
|
"no-compare-neg-zero": "error",
|
||||||
|
"no-cond-assign": "error",
|
||||||
|
"no-const-assign": "error",
|
||||||
|
"no-constant-condition": "error",
|
||||||
|
"no-control-regex": "error",
|
||||||
|
"no-debugger": "error",
|
||||||
|
"no-delete-var": "error",
|
||||||
|
"no-dupe-args": "error",
|
||||||
|
"no-dupe-class-members": "error",
|
||||||
|
"no-dupe-else-if": "error",
|
||||||
|
"no-dupe-keys": "error",
|
||||||
|
"no-duplicate-case": "error",
|
||||||
|
"no-empty": "error",
|
||||||
|
"no-empty-character-class": "error",
|
||||||
|
"no-empty-pattern": "error",
|
||||||
|
"no-ex-assign": "error",
|
||||||
|
"no-extra-boolean-cast": "error",
|
||||||
|
"no-extra-semi": "error",
|
||||||
|
"no-fallthrough": "error",
|
||||||
|
"no-func-assign": "error",
|
||||||
|
"no-global-assign": "error",
|
||||||
|
"no-import-assign": "error",
|
||||||
|
"no-inner-declarations": "error",
|
||||||
|
"no-invalid-regexp": "error",
|
||||||
|
"no-irregular-whitespace": "error",
|
||||||
|
"no-loss-of-precision": "error",
|
||||||
|
"no-misleading-character-class": "error",
|
||||||
|
"no-mixed-spaces-and-tabs": "error",
|
||||||
|
"no-new-symbol": "error",
|
||||||
|
"no-nonoctal-decimal-escape": "error",
|
||||||
|
"no-obj-calls": "error",
|
||||||
|
"no-octal": "error",
|
||||||
|
"no-prototype-builtins": "error",
|
||||||
|
"no-redeclare": "error",
|
||||||
|
"no-regex-spaces": "error",
|
||||||
|
"no-self-assign": "error",
|
||||||
|
"no-setter-return": "error",
|
||||||
|
"no-shadow-restricted-names": "error",
|
||||||
|
"no-sparse-arrays": "error",
|
||||||
|
"no-this-before-super": "error",
|
||||||
|
"no-undef": "error",
|
||||||
|
"no-unexpected-multiline": "error",
|
||||||
|
"no-unreachable": "error",
|
||||||
|
"no-unsafe-finally": "error",
|
||||||
|
"no-unsafe-negation": "error",
|
||||||
|
"no-unsafe-optional-chaining": "error",
|
||||||
|
"no-unused-labels": "error",
|
||||||
|
"no-unused-vars": "error",
|
||||||
|
"no-useless-backreference": "error",
|
||||||
|
"no-useless-catch": "error",
|
||||||
|
"no-useless-escape": "error",
|
||||||
|
"no-with": "error",
|
||||||
|
"require-yield": "error",
|
||||||
|
"use-isnan": "error",
|
||||||
|
"valid-typeof": "error"
|
||||||
|
})
|
||||||
|
});
|
17
obsidian/node_modules/@eslint/js/src/index.js
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Main package entrypoint.
|
||||||
|
* @author Nicholas C. Zakas
|
||||||
|
*/
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Public Interface
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
configs: {
|
||||||
|
all: require("./configs/eslint-all"),
|
||||||
|
recommended: require("./configs/eslint-recommended")
|
||||||
|
}
|
||||||
|
};
|
201
obsidian/node_modules/@humanwhocodes/config-array/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
342
obsidian/node_modules/@humanwhocodes/config-array/README.md
generated
vendored
Normal file
|
@ -0,0 +1,342 @@
|
||||||
|
# Config Array
|
||||||
|
|
||||||
|
by [Nicholas C. Zakas](https://humanwhocodes.com)
|
||||||
|
|
||||||
|
If you find this useful, please consider supporting my work with a [donation](https://humanwhocodes.com/donate).
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
A config array is a way of managing configurations that are based on glob pattern matching of filenames. Each config array contains the information needed to determine the correct configuration for any file based on the filename.
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
In 2019, I submitted an [ESLint RFC](https://github.com/eslint/rfcs/pull/9) proposing a new way of configuring ESLint. The goal was to streamline what had become an increasingly complicated configuration process. Over several iterations, this proposal was eventually born.
|
||||||
|
|
||||||
|
The basic idea is that all configuration, including overrides, can be represented by a single array where each item in the array is a config object. Config objects appearing later in the array override config objects appearing earlier in the array. You can calculate a config for a given file by traversing all config objects in the array to find the ones that match the filename. Matching is done by specifying glob patterns in `files` and `ignores` properties on each config object. Here's an example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// match all JSON files
|
||||||
|
{
|
||||||
|
name: "JSON Handler",
|
||||||
|
files: ["**/*.json"],
|
||||||
|
handler: jsonHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// match only package.json
|
||||||
|
{
|
||||||
|
name: "package.json Handler",
|
||||||
|
files: ["package.json"],
|
||||||
|
handler: packageJsonHandler
|
||||||
|
}
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example, there are two config objects: the first matches all JSON files in all directories and the second matches just `package.json` in the base path directory (all the globs are evaluated as relative to a base path that can be specified). When you retrieve a configuration for `foo.json`, only the first config object matches so `handler` is equal to `jsonHandler`; when you retrieve a configuration for `package.json`, `handler` is equal to `packageJsonHandler` (because both config objects match, the second one wins).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
You can install the package using npm or Yarn:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install @humanwhocodes/config-array --save
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
yarn add @humanwhocodes/config-array
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
First, import the `ConfigArray` constructor:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { ConfigArray } from "@humanwhocodes/config-array";
|
||||||
|
|
||||||
|
// or using CommonJS
|
||||||
|
|
||||||
|
const { ConfigArray } = require("@humanwhocodes/config-array");
|
||||||
|
```
|
||||||
|
|
||||||
|
When you create a new instance of `ConfigArray`, you must pass in two arguments: an array of configs and an options object. The array of configs is most likely read in from a configuration file, so here's a typical example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const configFilename = path.resolve(process.cwd(), "my.config.js");
|
||||||
|
const { default: rawConfigs } = await import(configFilename);
|
||||||
|
const configs = new ConfigArray(rawConfigs, {
|
||||||
|
|
||||||
|
// the path to match filenames from
|
||||||
|
basePath: process.cwd(),
|
||||||
|
|
||||||
|
// additional items in each config
|
||||||
|
schema: mySchema
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
This example reads in an object or array from `my.config.js` and passes it into the `ConfigArray` constructor as the first argument. The second argument is an object specifying the `basePath` (the directory in which `my.config.js` is found) and a `schema` to define the additional properties of a config object beyond `files`, `ignores`, and `name`.
|
||||||
|
|
||||||
|
### Specifying a Schema
|
||||||
|
|
||||||
|
The `schema` option is required for you to use additional properties in config objects. The schema is an object that follows the format of an [`ObjectSchema`](https://npmjs.com/package/@humanwhocodes/object-schema). The schema specifies both validation and merge rules that the `ConfigArray` instance needs to combine configs when there are multiple matches. Here's an example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const configFilename = path.resolve(process.cwd(), "my.config.js");
|
||||||
|
const { default: rawConfigs } = await import(configFilename);
|
||||||
|
|
||||||
|
const mySchema = {
|
||||||
|
|
||||||
|
// define the handler key in configs
|
||||||
|
handler: {
|
||||||
|
required: true,
|
||||||
|
merge(a, b) {
|
||||||
|
if (!b) return a;
|
||||||
|
if (!a) return b;
|
||||||
|
},
|
||||||
|
validate(value) {
|
||||||
|
if (typeof value !== "function") {
|
||||||
|
throw new TypeError("Function expected.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const configs = new ConfigArray(rawConfigs, {
|
||||||
|
|
||||||
|
// the path to match filenames from
|
||||||
|
basePath: process.cwd(),
|
||||||
|
|
||||||
|
// additional item schemas in each config
|
||||||
|
schema: mySchema,
|
||||||
|
|
||||||
|
// additional config types supported (default: [])
|
||||||
|
extraConfigTypes: ["array", "function"];
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Config Arrays
|
||||||
|
|
||||||
|
Config arrays can be multidimensional, so it's possible for a config array to contain another config array when `extraConfigTypes` contains `"array"`, such as:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// JS config
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
handler: jsHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// JSON configs
|
||||||
|
[
|
||||||
|
|
||||||
|
// match all JSON files
|
||||||
|
{
|
||||||
|
name: "JSON Handler",
|
||||||
|
files: ["**/*.json"],
|
||||||
|
handler: jsonHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// match only package.json
|
||||||
|
{
|
||||||
|
name: "package.json Handler",
|
||||||
|
files: ["package.json"],
|
||||||
|
handler: packageJsonHandler
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// filename must match function
|
||||||
|
{
|
||||||
|
files: [ filePath => filePath.endsWith(".md") ],
|
||||||
|
handler: markdownHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// filename must match all patterns in subarray
|
||||||
|
{
|
||||||
|
files: [ ["*.test.*", "*.js"] ],
|
||||||
|
handler: jsTestHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// filename must not match patterns beginning with !
|
||||||
|
{
|
||||||
|
name: "Non-JS files",
|
||||||
|
files: ["!*.js"],
|
||||||
|
settings: {
|
||||||
|
js: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example, the array contains both config objects and a config array. When a config array is normalized (see details below), it is flattened so only config objects remain. However, the order of evaluation remains the same.
|
||||||
|
|
||||||
|
If the `files` array contains a function, then that function is called with the absolute path of the file and is expected to return `true` if there is a match and `false` if not. (The `ignores` array can also contain functions.)
|
||||||
|
|
||||||
|
If the `files` array contains an item that is an array of strings and functions, then all patterns must match in order for the config to match. In the preceding examples, both `*.test.*` and `*.js` must match in order for the config object to be used.
|
||||||
|
|
||||||
|
If a pattern in the files array begins with `!` then it excludes that pattern. In the preceding example, any filename that doesn't end with `.js` will automatically get a `settings.js` property set to `false`.
|
||||||
|
|
||||||
|
You can also specify an `ignores` key that will force files matching those patterns to not be included. If the `ignores` key is in a config object without any other keys, then those ignores will always be applied; otherwise those ignores act as exclusions. Here's an example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// Always ignored
|
||||||
|
{
|
||||||
|
ignores: ["**/.git/**", "**/node_modules/**"]
|
||||||
|
},
|
||||||
|
|
||||||
|
// .eslintrc.js file is ignored only when .js file matches
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
ignores: [".eslintrc.js"]
|
||||||
|
handler: jsHandler
|
||||||
|
}
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
You can use negated patterns in `ignores` to exclude a file that was already ignored, such as:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// Ignore all JSON files except tsconfig.json
|
||||||
|
{
|
||||||
|
files: ["**/*"],
|
||||||
|
ignores: ["**/*.json", "!tsconfig.json"]
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
### Config Functions
|
||||||
|
|
||||||
|
Config arrays can also include config functions when `extraConfigTypes` contains `"function"`. A config function accepts a single parameter, `context` (defined by you), and must return either a config object or a config array (it cannot return another function). Config functions allow end users to execute code in the creation of appropriate config objects. Here's an example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default [
|
||||||
|
|
||||||
|
// JS config
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
handler: jsHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// JSON configs
|
||||||
|
function (context) {
|
||||||
|
return [
|
||||||
|
|
||||||
|
// match all JSON files
|
||||||
|
{
|
||||||
|
name: context.name + " JSON Handler",
|
||||||
|
files: ["**/*.json"],
|
||||||
|
handler: jsonHandler
|
||||||
|
},
|
||||||
|
|
||||||
|
// match only package.json
|
||||||
|
{
|
||||||
|
name: context.name + " package.json Handler",
|
||||||
|
files: ["package.json"],
|
||||||
|
handler: packageJsonHandler
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
When a config array is normalized, each function is executed and replaced in the config array with the return value.
|
||||||
|
|
||||||
|
**Note:** Config functions can also be async.
|
||||||
|
|
||||||
|
### Normalizing Config Arrays
|
||||||
|
|
||||||
|
Once a config array has been created and loaded with all of the raw config data, it must be normalized before it can be used. The normalization process goes through and flattens the config array as well as executing all config functions to get their final values.
|
||||||
|
|
||||||
|
To normalize a config array, call the `normalize()` method and pass in a context object:
|
||||||
|
|
||||||
|
```js
|
||||||
|
await configs.normalize({
|
||||||
|
name: "MyApp"
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
The `normalize()` method returns a promise, so be sure to use the `await` operator. The config array instance is normalized in-place, so you don't need to create a new variable.
|
||||||
|
|
||||||
|
If you want to disallow async config functions, you can call `normalizeSync()` instead. This method is completely synchronous and does not require using the `await` operator as it does not return a promise:
|
||||||
|
|
||||||
|
```js
|
||||||
|
await configs.normalizeSync({
|
||||||
|
name: "MyApp"
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
**Important:** Once a `ConfigArray` is normalized, it cannot be changed further. You can, however, create a new `ConfigArray` and pass in the normalized instance to create an unnormalized copy.
|
||||||
|
|
||||||
|
### Getting Config for a File
|
||||||
|
|
||||||
|
To get the config for a file, use the `getConfig()` method on a normalized config array and pass in the filename to get a config for:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// pass in absolute filename
|
||||||
|
const fileConfig = configs.getConfig(path.resolve(process.cwd(), "package.json"));
|
||||||
|
```
|
||||||
|
|
||||||
|
The config array always returns an object, even if there are no configs matching the given filename. You can then inspect the returned config object to determine how to proceed.
|
||||||
|
|
||||||
|
A few things to keep in mind:
|
||||||
|
|
||||||
|
* You must pass in the absolute filename to get a config for.
|
||||||
|
* The returned config object never has `files`, `ignores`, or `name` properties; the only properties on the object will be the other configuration options specified.
|
||||||
|
* The config array caches configs, so subsequent calls to `getConfig()` with the same filename will return in a fast lookup rather than another calculation.
|
||||||
|
* A config will only be generated if the filename matches an entry in a `files` key. A config will not be generated without matching a `files` key (configs without a `files` key are only applied when another config with a `files` key is applied; configs without `files` are never applied on their own). Any config with a `files` key entry ending with `/**` or `/*` will only be applied if another entry in the same `files` key matches or another config matches.
|
||||||
|
|
||||||
|
## Determining Ignored Paths
|
||||||
|
|
||||||
|
You can determine if a file is ignored by using the `isFileIgnored()` method and passing in the absolute path of any file, as in this example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const ignored = configs.isFileIgnored('/foo/bar/baz.txt');
|
||||||
|
```
|
||||||
|
|
||||||
|
A file is considered ignored if any of the following is true:
|
||||||
|
|
||||||
|
* **It's parent directory is ignored.** For example, if `foo` is in `ignores`, then `foo/a.js` is considered ignored.
|
||||||
|
* **It has an ancestor directory that is ignored.** For example, if `foo` is in `ignores`, then `foo/baz/a.js` is considered ignored.
|
||||||
|
* **It matches an ignored file pattern.** For example, if `**/a.js` is in `ignores`, then `foo/a.js` and `foo/baz/a.js` are considered ignored.
|
||||||
|
* **If it matches an entry in `files` and also in `ignores`.** For example, if `**/*.js` is in `files` and `**/a.js` is in `ignores`, then `foo/a.js` and `foo/baz/a.js` are considered ignored.
|
||||||
|
* **The file is outside the `basePath`.** If the `basePath` is `/usr/me`, then `/foo/a.js` is considered ignored.
|
||||||
|
|
||||||
|
For directories, use the `isDirectoryIgnored()` method and pass in the absolute path of any directory, as in this example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const ignored = configs.isDirectoryIgnored('/foo/bar/');
|
||||||
|
```
|
||||||
|
|
||||||
|
A directory is considered ignored if any of the following is true:
|
||||||
|
|
||||||
|
* **It's parent directory is ignored.** For example, if `foo` is in `ignores`, then `foo/baz` is considered ignored.
|
||||||
|
* **It has an ancestor directory that is ignored.** For example, if `foo` is in `ignores`, then `foo/bar/baz/a.js` is considered ignored.
|
||||||
|
* **It matches and ignored file pattern.** For example, if `**/a.js` is in `ignores`, then `foo/a.js` and `foo/baz/a.js` are considered ignored.
|
||||||
|
* **If it matches an entry in `files` and also in `ignores`.** For example, if `**/*.js` is in `files` and `**/a.js` is in `ignores`, then `foo/a.js` and `foo/baz/a.js` are considered ignored.
|
||||||
|
* **The file is outside the `basePath`.** If the `basePath` is `/usr/me`, then `/foo/a.js` is considered ignored.
|
||||||
|
|
||||||
|
**Important:** A pattern such as `foo/**` means that `foo` and `foo/` are *not* ignored whereas `foo/bar` is ignored. If you want to ignore `foo` and all of its subdirectories, use the pattern `foo` or `foo/` in `ignores`.
|
||||||
|
|
||||||
|
## Caching Mechanisms
|
||||||
|
|
||||||
|
Each `ConfigArray` aggressively caches configuration objects to avoid unnecessary work. This caching occurs in two ways:
|
||||||
|
|
||||||
|
1. **File-based Caching.** For each filename that is passed into a method, the resulting config is cached against that filename so you're always guaranteed to get the same object returned from `getConfig()` whenever you pass the same filename in.
|
||||||
|
2. **Index-based Caching.** Whenever a config is calculated, the config elements that were used to create the config are also cached. So if a given filename matches elements 1, 5, and 7, the resulting config is cached with a key of `1,5,7`. That way, if another file is passed that matches the same config elements, the result is already known and doesn't have to be recalculated. That means two files that match all the same elements will return the same config from `getConfig()`.
|
||||||
|
|
||||||
|
## Acknowledgements
|
||||||
|
|
||||||
|
The design of this project was influenced by feedback on the ESLint RFC, and incorporates ideas from:
|
||||||
|
|
||||||
|
* Teddy Katz (@not-an-aardvark)
|
||||||
|
* Toru Nagashima (@mysticatea)
|
||||||
|
* Kai Cataldo (@kaicataldo)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Apache 2.0
|
1011
obsidian/node_modules/@humanwhocodes/config-array/api.js
generated
vendored
Normal file
61
obsidian/node_modules/@humanwhocodes/config-array/package.json
generated
vendored
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"name": "@humanwhocodes/config-array",
|
||||||
|
"version": "0.11.10",
|
||||||
|
"description": "Glob-based configuration matching.",
|
||||||
|
"author": "Nicholas C. Zakas",
|
||||||
|
"main": "api.js",
|
||||||
|
"files": [
|
||||||
|
"api.js"
|
||||||
|
],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/humanwhocodes/config-array.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/humanwhocodes/config-array/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/humanwhocodes/config-array#readme",
|
||||||
|
"scripts": {
|
||||||
|
"build": "rollup -c",
|
||||||
|
"format": "nitpik",
|
||||||
|
"lint": "eslint *.config.js src/*.js tests/*.js",
|
||||||
|
"lint:fix": "eslint --fix *.config.js src/*.js tests/*.js",
|
||||||
|
"prepublish": "npm run build",
|
||||||
|
"test:coverage": "nyc --include src/*.js npm run test",
|
||||||
|
"test": "mocha -r esm tests/ --recursive"
|
||||||
|
},
|
||||||
|
"gitHooks": {
|
||||||
|
"pre-commit": "lint-staged"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"*.js": [
|
||||||
|
"eslint --fix --ignore-pattern '!.eslintrc.js'"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"configuration",
|
||||||
|
"configarray",
|
||||||
|
"config file"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.10.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@humanwhocodes/object-schema": "^1.2.1",
|
||||||
|
"debug": "^4.1.1",
|
||||||
|
"minimatch": "^3.0.5"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@nitpik/javascript": "0.4.0",
|
||||||
|
"@nitpik/node": "0.0.5",
|
||||||
|
"chai": "4.3.7",
|
||||||
|
"eslint": "8.41.0",
|
||||||
|
"esm": "3.2.25",
|
||||||
|
"lint-staged": "13.2.2",
|
||||||
|
"mocha": "6.2.3",
|
||||||
|
"nyc": "14.1.1",
|
||||||
|
"rollup": "3.20.4",
|
||||||
|
"yorkie": "2.0.0"
|
||||||
|
}
|
||||||
|
}
|
15
obsidian/node_modules/@humanwhocodes/module-importer/CHANGELOG.md
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [1.0.1](https://github.com/humanwhocodes/module-importer/compare/v1.0.0...v1.0.1) (2022-08-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Ensure CommonJS mode works correctly. ([cf54a0b](https://github.com/humanwhocodes/module-importer/commit/cf54a0b998085066fbe1776dd0b4cacd808cc192)), closes [#6](https://github.com/humanwhocodes/module-importer/issues/6)
|
||||||
|
|
||||||
|
## 1.0.0 (2022-08-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Implement ModuleImporter ([3ce4e82](https://www.github.com/humanwhocodes/module-importer/commit/3ce4e820c30c114e787bfed00a0966ac4772f563))
|
201
obsidian/node_modules/@humanwhocodes/module-importer/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
80
obsidian/node_modules/@humanwhocodes/module-importer/README.md
generated
vendored
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
# ModuleImporter
|
||||||
|
|
||||||
|
by [Nicholas C. Zakas](https://humanwhocodes.com)
|
||||||
|
|
||||||
|
If you find this useful, please consider supporting my work with a [donation](https://humanwhocodes.com/donate).
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
A utility for seamlessly importing modules in Node.js regardless if they are CommonJS or ESM format. Under the hood, this uses `import()` and relies on Node.js's CommonJS compatibility to work correctly. This ensures that the correct locations and formats are used for CommonJS so you can call one method and not worry about any compatibility issues.
|
||||||
|
|
||||||
|
The problem with the default `import()` is that it always resolves relative to the file location in which it is called. If you want to resolve from a different location, you need to jump through a few hoops to achieve that. This package makes it easy to both resolve and import modules from any directory.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Node.js
|
||||||
|
|
||||||
|
Install using [npm][npm] or [yarn][yarn]:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install @humanwhocodes/module-importer
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
yarn add @humanwhocodes/module-importer
|
||||||
|
```
|
||||||
|
|
||||||
|
Import into your Node.js project:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// CommonJS
|
||||||
|
const { ModuleImporter } = require("@humanwhocodes/module-importer");
|
||||||
|
|
||||||
|
// ESM
|
||||||
|
import { ModuleImporter } from "@humanwhocodes/module-importer";
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bun
|
||||||
|
|
||||||
|
Install using this command:
|
||||||
|
|
||||||
|
```
|
||||||
|
bun add @humanwhocodes/module-importer
|
||||||
|
```
|
||||||
|
|
||||||
|
Import into your Bun project:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { ModuleImporter } from "@humanwhocodes/module-importer";
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
After importing, create a new instance of `ModuleImporter` to start emitting events:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// cwd can be omitted to use process.cwd()
|
||||||
|
const importer = new ModuleImporter(cwd);
|
||||||
|
|
||||||
|
// you can resolve the location of any package
|
||||||
|
const location = importer.resolve("./some-file.cjs");
|
||||||
|
|
||||||
|
// you can also import directly
|
||||||
|
const module = importer.import("./some-file.cjs");
|
||||||
|
```
|
||||||
|
|
||||||
|
For both `resolve()` and `import()`, you can pass in package names and filenames.
|
||||||
|
|
||||||
|
## Developer Setup
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Clone your fork
|
||||||
|
3. Run `npm install` to setup dependencies
|
||||||
|
4. Run `npm test` to run tests
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Apache 2.0
|
||||||
|
|
||||||
|
[npm]: https://npmjs.com/
|
||||||
|
[yarn]: https://yarnpkg.com/
|
22
obsidian/node_modules/@humanwhocodes/module-importer/dist/module-importer.cjs
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
|
var module$1 = require('module');
|
||||||
|
var url = require('url');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @fileoverview Universal module importer
|
||||||
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('module-importer.cjs', document.baseURI).href)));
|
||||||
|
const __dirname$1 = path.dirname(__filename$1);
|
||||||
|
const require$1 = module$1.createRequire(__dirname$1 + "/");
|
||||||
|
const { ModuleImporter } = require$1("./module-importer.cjs");
|
||||||
|
|
||||||
|
exports.ModuleImporter = ModuleImporter;
|
27
obsidian/node_modules/@humanwhocodes/module-importer/dist/module-importer.d.cts
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
export class ModuleImporter {
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
* @param {string} [cwd] The current working directory to resolve from.
|
||||||
|
*/
|
||||||
|
constructor(cwd?: string);
|
||||||
|
/**
|
||||||
|
* The base directory from which paths should be resolved.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
cwd: string;
|
||||||
|
/**
|
||||||
|
* Resolves a module based on its name or location.
|
||||||
|
* @param {string} specifier Either an npm package name or
|
||||||
|
* relative file path.
|
||||||
|
* @returns {string|undefined} The location of the import.
|
||||||
|
* @throws {Error} If specifier cannot be located.
|
||||||
|
*/
|
||||||
|
resolve(specifier: string): string | undefined;
|
||||||
|
/**
|
||||||
|
* Imports a module based on its name or location.
|
||||||
|
* @param {string} specifier Either an npm package name or
|
||||||
|
* relative file path.
|
||||||
|
* @returns {Promise<object>} The module's object.
|
||||||
|
*/
|
||||||
|
import(specifier: string): Promise<object>;
|
||||||
|
}
|
2
obsidian/node_modules/@humanwhocodes/module-importer/dist/module-importer.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export { ModuleImporter };
|
||||||
|
import { ModuleImporter } from "./module-importer.cjs";
|
18
obsidian/node_modules/@humanwhocodes/module-importer/dist/module-importer.js
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import { createRequire } from 'module';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import { dirname } from 'path';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @fileoverview Universal module importer
|
||||||
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = dirname(__filename);
|
||||||
|
const require = createRequire(__dirname + "/");
|
||||||
|
const { ModuleImporter } = require("./module-importer.cjs");
|
||||||
|
|
||||||
|
export { ModuleImporter };
|
65
obsidian/node_modules/@humanwhocodes/module-importer/package.json
generated
vendored
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
{
|
||||||
|
"name": "@humanwhocodes/module-importer",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"description": "Universal module importer for Node.js",
|
||||||
|
"main": "src/module-importer.cjs",
|
||||||
|
"module": "src/module-importer.js",
|
||||||
|
"type": "module",
|
||||||
|
"types": "dist/module-importer.d.ts",
|
||||||
|
"exports": {
|
||||||
|
"require": "./src/module-importer.cjs",
|
||||||
|
"import": "./src/module-importer.js"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"gitHooks": {
|
||||||
|
"pre-commit": "lint-staged"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"*.js": [
|
||||||
|
"eslint --fix"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/nzakas"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "rollup -c && tsc",
|
||||||
|
"prepare": "npm run build",
|
||||||
|
"lint": "eslint src/ tests/",
|
||||||
|
"test:unit": "c8 mocha tests/module-importer.test.js",
|
||||||
|
"test:build": "node tests/pkg.test.cjs && node tests/pkg.test.mjs",
|
||||||
|
"test": "npm run test:unit && npm run test:build"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/humanwhocodes/module-importer.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"modules",
|
||||||
|
"esm",
|
||||||
|
"commonjs"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.22"
|
||||||
|
},
|
||||||
|
"author": "Nicholas C. Zaks",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^18.7.6",
|
||||||
|
"c8": "7.12.0",
|
||||||
|
"chai": "4.3.6",
|
||||||
|
"eslint": "8.22.0",
|
||||||
|
"lint-staged": "13.0.3",
|
||||||
|
"mocha": "9.2.2",
|
||||||
|
"rollup": "2.78.0",
|
||||||
|
"typescript": "4.7.4",
|
||||||
|
"yorkie": "2.0.0"
|
||||||
|
}
|
||||||
|
}
|
81
obsidian/node_modules/@humanwhocodes/module-importer/src/module-importer.cjs
generated
vendored
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Universal module importer
|
||||||
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Imports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const { createRequire } = require("module");
|
||||||
|
const { pathToFileURL } = require("url");
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const SLASHES = new Set(["/", "\\"]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalizes directories to have a trailing slash.
|
||||||
|
* Resolve is pretty finicky -- if the directory name doesn't have
|
||||||
|
* a trailing slash then it tries to look in the parent directory.
|
||||||
|
* i.e., if the directory is "/usr/nzakas/foo" it will start the
|
||||||
|
* search in /usr/nzakas. However, if the directory is "/user/nzakas/foo/",
|
||||||
|
* then it will start the search in /user/nzakas/foo.
|
||||||
|
* @param {string} directory The directory to check.
|
||||||
|
* @returns {string} The normalized directory.
|
||||||
|
*/
|
||||||
|
function normalizeDirectory(directory) {
|
||||||
|
if (!SLASHES.has(directory[directory.length-1])) {
|
||||||
|
return directory + "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
return directory;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Exports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class for importing both CommonJS and ESM modules in Node.js.
|
||||||
|
*/
|
||||||
|
exports.ModuleImporter = class ModuleImporter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
* @param {string} [cwd] The current working directory to resolve from.
|
||||||
|
*/
|
||||||
|
constructor(cwd = process.cwd()) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base directory from which paths should be resolved.
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.cwd = normalizeDirectory(cwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves a module based on its name or location.
|
||||||
|
* @param {string} specifier Either an npm package name or
|
||||||
|
* relative file path.
|
||||||
|
* @returns {string|undefined} The location of the import.
|
||||||
|
* @throws {Error} If specifier cannot be located.
|
||||||
|
*/
|
||||||
|
resolve(specifier) {
|
||||||
|
const require = createRequire(this.cwd);
|
||||||
|
return require.resolve(specifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imports a module based on its name or location.
|
||||||
|
* @param {string} specifier Either an npm package name or
|
||||||
|
* relative file path.
|
||||||
|
* @returns {Promise<object>} The module's object.
|
||||||
|
*/
|
||||||
|
import(specifier) {
|
||||||
|
const location = this.resolve(specifier);
|
||||||
|
return import(pathToFileURL(location).href);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
22
obsidian/node_modules/@humanwhocodes/module-importer/src/module-importer.js
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Universal module importer
|
||||||
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Imports
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import { createRequire } from "module";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
import { dirname } from "path";
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = dirname(__filename);
|
||||||
|
const require = createRequire(__dirname + "/");
|
||||||
|
const { ModuleImporter } = require("./module-importer.cjs");
|
||||||
|
|
||||||
|
export { ModuleImporter };
|
29
obsidian/node_modules/@humanwhocodes/object-schema/.eslintrc.js
generated
vendored
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
module.exports = {
|
||||||
|
"env": {
|
||||||
|
"commonjs": true,
|
||||||
|
"es6": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"extends": "eslint:recommended",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2018
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"indent": [
|
||||||
|
"error",
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"linebreak-style": [
|
||||||
|
"error",
|
||||||
|
"unix"
|
||||||
|
],
|
||||||
|
"quotes": [
|
||||||
|
"error",
|
||||||
|
"double"
|
||||||
|
],
|
||||||
|
"semi": [
|
||||||
|
"error",
|
||||||
|
"always"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
27
obsidian/node_modules/@humanwhocodes/object-schema/.github/workflows/nodejs-test.yml
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
name: Node CI
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [windows-latest, macOS-latest, ubuntu-latest]
|
||||||
|
node: [8.x, 10.x, 12.x, 14.x]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- name: npm install, build, and test
|
||||||
|
run: |
|
||||||
|
npm install
|
||||||
|
npm run build --if-present
|
||||||
|
npm test
|
||||||
|
env:
|
||||||
|
CI: true
|
39
obsidian/node_modules/@humanwhocodes/object-schema/.github/workflows/release-please.yml
generated
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
name: release-please
|
||||||
|
jobs:
|
||||||
|
release-please:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: GoogleCloudPlatform/release-please-action@v2
|
||||||
|
id: release
|
||||||
|
with:
|
||||||
|
release-type: node
|
||||||
|
package-name: test-release-please
|
||||||
|
# The logic below handles the npm publication:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
# these if statements ensure that a publication only occurs when
|
||||||
|
# a new release is created:
|
||||||
|
if: ${{ steps.release.outputs.release_created }}
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
if: ${{ steps.release.outputs.release_created }}
|
||||||
|
- run: npm ci
|
||||||
|
if: ${{ steps.release.outputs.release_created }}
|
||||||
|
- run: npm publish
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
||||||
|
if: ${{ steps.release.outputs.release_created }}
|
||||||
|
|
||||||
|
# Tweets out release announcement
|
||||||
|
- run: 'npx @humanwhocodes/tweet "Object Schema v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}.${{ steps.release.outputs.patch }} has been released!\n\n${{ github.event.release.html_url }}"'
|
||||||
|
if: ${{ steps.release.outputs.release_created }}
|
||||||
|
env:
|
||||||
|
TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
|
||||||
|
TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
|
||||||
|
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
|
||||||
|
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
|
8
obsidian/node_modules/@humanwhocodes/object-schema/CHANGELOG.md
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
### [1.2.1](https://www.github.com/humanwhocodes/object-schema/compare/v1.2.0...v1.2.1) (2021-11-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Never return original object from individual config ([5463c5c](https://www.github.com/humanwhocodes/object-schema/commit/5463c5c6d2cb35a7b7948dffc37c899a41d1775f))
|