diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..7e21597 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "jsx": true, + "useJSXTextNode": true, + "ecmaVersion": 2018, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "plugins": [ + "@typescript-eslint", + "roblox-ts", + "prettier" + ], + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:roblox-ts/recommended", + "prettier/@typescript-eslint", + "plugin:prettier/recommended" + ], + "rules": { + "prettier/prettier": [ + "warn", + { + "semi": true, + "trailingComma": "all", + "singleQuote": false, + "printWidth": 120, + "tabWidth": 4, + "useTabs": true + } + ] + } +} \ No newline at end of file diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..fd2fbc2 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,41 @@ +name: CI + +on: [push, workflow_dispatch] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: install local npm packages + run: npm i --production=false + - name: run eslint + run: npm run eslint + unit-tests: + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - name: download roblox install script + run: Invoke-WebRequest -Uri "https://raw.githubusercontent.com/OrbitalOwen/roblox-win-installer/master/install.py" -OutFile install.py + - name: download settings file + run: Invoke-WebRequest -Uri "https://raw.githubusercontent.com/OrbitalOwen/roblox-win-installer/master/GlobalSettings_13.xml" -OutFile GlobalSettings_13.xml + - name: install pip deps + run: pip install wget psutil + - name: install roblox + run: python install.py "${{ secrets.ROBLOSECURITY }}" + - name: install roblox-ts + run: npm i -g roblox-ts + - name: install local npm packages + run: npm i --production=false + - name: compile typescript code + run: rbxtsc --type=game + - name: install foreman + uses: rojo-rbx/setup-foreman@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: install foreman packages (rojo, run-in-roblox) + run: foreman install + - name: run rojo build + run: rojo build -o .\\unit_tests.rbxlx + - name: run tests + run: run-in-roblox --place .\\unit_tests.rbxlx --script .\\spec.server.lua diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml new file mode 100644 index 0000000..8561a96 --- /dev/null +++ b/.github/workflows/Release.yml @@ -0,0 +1,76 @@ +name: Release + +on: [workflow_dispatch] + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Install NodeJS + uses: actions/setup-node@master + with: + node-version: 12.16.2 + registry-url: 'https://registry.npmjs.org' + - name: get-npm-version + id: package-version + uses: martinbeentjes/npm-get-version-action@master + - name: install roblox-ts + run: npm i -g roblox-ts + - name: install local npm packages + run: npm i --production=false + - name: publish to npm + run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} + - name: clean-up package output + run: rm -rf ./out + - name: compile typescript code for model + run: rbxtsc --type=model + - name: install foreman + uses: rojo-rbx/setup-foreman@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: install foreman packages (rojo, run-in-roblox) + run: foreman install + - name: run rojo build + run: rojo build -o ./value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx ./standalone-model.project.json + - name: create-release + uses: actions/create-release@latest + id: create_release + with: + draft: false + prerelease: false + release_name: ${{ steps.package-version.outputs.current-version }} + tag_name: ${{ steps.package-version.outputs.current-version }} + body_path: CHANGELOG.md + env: + GITHUB_TOKEN: ${{ github.token }} + - name: upload rbxmx file to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ github.token }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx + asset_name: value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx + asset_content_type: form + - name: upload rbxmx file to Roblox + run: | + cd ./scripts + python upload_model.py -a ${{ secrets.ASSET_ID }} -f ../value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx -r "${{ secrets.UPLOADER_BOT_ROBLOSECURITY }}" + cd .. + - name: prepare wally package contents + run: | + mkdir -p ~/temp/value-holders + cp -r ./{include,out} ~/temp/value-holders/ + cp ./{CHANGELOG.md,LICENSE,README.md,wally.lock,wally.toml} ~/temp/value-holders/ + cp ./standalone-model.project.json ~/temp/value-holders/default.project.json + mkdir ~/temp/value-holders/node_modules + cp -r ./node_modules/@rbxts ~/temp/value-holders/node_modules/ + - name: prepare wally auth + run: | + mkdir ~/.wally + echo -e '${{ secrets.WALLY_AUTH }}' > ~/.wally/auth.toml + - name: publish wally package + run: wally publish --project-path ~/temp/value-holders/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47826cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,113 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# macOS +.DS_STORE + +# roblox-ts +*.rbxlx +*.rbxlx.lock +include/ +out/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..274d1c4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +Releases! diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a2a465a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Bytebit + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..209acec --- /dev/null +++ b/README.md @@ -0,0 +1,318 @@ +# Value Holders +

+ + CI status + + + PRs Welcome + + + License: MIT + + + Discord server + +

+ +Value Holders is a module for passing any values around by sharing a pointer, as well as allowing consumers to subscribe to changes and allowing authors to hold locks on changing the value. + +## Installation +### roblox-ts +Simply install to your [roblox-ts](https://roblox-ts.com/) project as follows: +``` +npm i @rbxts/value-holders +``` + +### Wally +[Wally](https://github.com/UpliftGames/wally/) users can install this package by adding the following line to their `Wally.toml` under `[dependencies]`: +``` +ValueHolders = "bytebit/value-holders@0.0.1" +``` + +Then just run `wally install`. + +### From model file +Model files are uploaded to every release as `.rbxmx` files. You can download the file from the [Releases page](https://github.com/Bytebit-Org/roblox-ValueHolders/releases) and load it into your project however you see fit. + +### From model asset +New versions of the asset are uploaded with every release. The asset can be added to your Roblox Inventory and then inserted into your Place via Toolbox by getting it [here.](https://www.roblox.com/library/9170323611/Value-Holders-Package) + +## Documentation +Documentation can be found [here](https://github.com/Bytebit-Org/roblox-ValueHolders/tree/master/docs), is included in the TypeScript files directly, and was generated using [TypeDoc](https://typedoc.org/). + +## Examples +### Standard IValueHolder and a Readonly consumer +Here's an example of using a standard `IValueHolder` with one class, `Writer`, that contains the value and exposes it publicly as an `IReadonlyValueHolder` and one class, `Reader`, that only reads from the `IValueHolder` by using the `IReadonlyValueHolder` reference (in the TypeScript example). The actual value isn't very important for the purposes of this example, so we'll just have `Writer` update the value once every second. + +
+ roblox-ts example + + ```ts + import { IValueHolder, IReadonlyValueHolder, ValueHolder } from "@rbxts/value-holders"; + + export class Writer { + public readonly valueHolder: IReadonlyValueHolder; + + private readonly internalValueHolder: IValueHolder; + + public constructor() { + this.internalValueHolder = new ValueHolder(0); + this.valueHolder = this.internalValueHolder; + + this.incrementValueEverySecond(); + } + + private incrementValueEverySecond() { + while (true) { + task.wait(1); + valueHolder.updateValue(currentValue => currentValue + 1); + } + } + } + + export class Reader { + public constructor(writer: Writer) { + this.printEveryValueUpdate(writer.valueHolder); + } + + private printEveryValueUpdate(valueHolder: IReadonlyValueHolder) { + valueHolder.valueChanged.Connect(newValue => print("New value is: " + newValue)); + } + } + ``` +
+ +
+ Luau example + + ```lua + local ValueHolder = require(path.to.modules["value-holders"]).ValueHolder + + local Writer = {} + Writer.__index = Writer + + local WriterConstructor = {} + function WriterConstructor.new() + local self = {} + setmetatable(self, Writer) + + self.valueHolder = ValueHolder.create(0) + _incrementValueEverySecond(self) + + return self + end + + function _incrementValueEverySecond(self) + while true do + task.wait(1) + self.valueHolder:updateValue(function (currentValue) + return currentValue + 1 + end) + end + end + + local Reader = {} + Reader.__index = Reader + + local ReaderConstructor = {} + function ReaderConstructor.new(writer) + local self = {} + setmetatable(self, Reader) + + _printEveryValueUpdate(self, writer.valueHolder) + + return self + end + + function _printEveryValueUpdate(self, valueHolder) + valueHolder.valueChanged:Connect(function (newValue) + print("New value is: ", newValue) + end) + end + + return { + Writer = WriterConstructor, + Reader = ReaderConstructor + } + ``` +
+ +### Two writers fighting over one ILockableValueHolder instance +The `ILockableValueHolder` interface is meant to enable some writers to shut off access to further writes from other potential writers. In this example, there will be a class that locks the value holder via a public method and another class that tries to set the value to 0 every second. Whenever the value is locked, the first class will increment the value every second. As in the previous example, we'll also have a Reader that just prints the value every time that it changes. + +
+ roblox-ts example + + ```ts + import { ILockableValueHolder, IReadonlyValueHolder, LockableValueHolder } from "@rbxts/value-holders"; + + // not going to use this but just for example purposes + const exampleLockableValueHolder = LockableValueHolder.create(0); + + export class LockedIncrementingWriter { + private lockKey: object | undefined = undefined; + + public constructor(private readonly lockableValueHolder: ILockableValueHolder) { + this.incrementValueEverySecond(); + } + + public takeLock() { + if (this.lockKey !== undefined) { + return; + } + + this.lockKey = this.lockableValueHolder.tryTakeLock(); + } + + public releaseLock() { + if (this.lockKey !== undefined) { + return; + } + + this.lockableValueHolder.releaseLock(this.lockKey); + this.lockKey = undefined; + } + + private incrementValueEverySecond() { + while (true) { + task.wait(1); + if (lockableValueHolder.isLocked()) { + lockableValueHolder.updateValue( + currentValue => currentValue + 1, + this.lockKey); + } + } + } + } + + export class ZeroWriter { + public constructor(private readonly lockableValueHolder: ILockableValueHolder) { + this.setValueToZeroEverySecond(); + } + + private setValueToZeroEverySecond() { + while (true) { + task.wait(1); + if (!lockableValueHolder.isLocked()) { + // If the code did not first check whether the value holder was locked, + // then this line would error + lockableValueHolder.setValue(0); + } + } + } + } + + export class Reader { + public constructor(valueHolder: IReadonlyValueHolder) { + this.printEveryValueUpdate(valueHolder); + } + + private printEveryValueUpdate(valueHolder: IReadonlyValueHolder) { + valueHolder.valueChanged.Connect(newValue => print("New value is: " + newValue)); + } + } + ``` +
+ +
+ Luau example + + ```lua + local LockableValueHolder = require(path.to.modules["value-holders"]).LockableValueHolder + + -- not going to use this but just for example purposes + local exampleLockableValueHolder = LockableValueHolder.create(0); + + local LockedIncrementingWriter = {} + LockedIncrementingWriter.__index = LockedIncrementingWriter + + local LockedIncrementingWriterConstructor = {} + function LockedIncrementingWriterConstructor.new(lockableValueHolder) + local self = {} + setmetatable(self, LockedIncrementingWriter) + + self._lockableValueHolder = lockableValueHolder + _incrementValueEverySecond(self) + + return self + end + + function LockedIncrementingWriter:takeLock() + if self._lockKey then + return + end + + self._lockKey = self._lockableValueHolder:tryTakeLock(); + end + + function LockedIncrementingWriter:releaseLock() + if self._lockKey then + return + end + + self._lockableValueHolder:releaseLock(self._lockKey); + self._lockKey = nil; + end + + function _incrementValueEverySecond(self) + while true do + task.wait(1) + if self._lockableValueHolder:isLocked() then + self._lockableValueHolder:updateValue(function (currentValue) + return currentValue + 1 + end, self._lockKey) + end + end + end + + local ZeroWriter = {} + ZeroWriter.__index = ZeroWriter + + local ZeroWriterConstructor = {} + function ZeroWriterConstructor.new(lockableValueHolder) + local self = {} + setmetatable(self, ZeroWriter) + + self._lockableValueHolder = lockableValueHolder + _setValueToZeroEverySecond(self) + + return self + end + + function _setValueToZeroEverySecond(self) + while true do + task.wait(1) + if not self._lockableValueHolder:isLocked() then + -- If the code did not first check whether the value holder was locked, + -- then this line would error + self._lockableValueHolder:setValue(0) + end + end + end + + local Reader = {} + Reader.__index = Reader + + local ReaderConstructor = {} + function ReaderConstructor.new(valueHolder) + local self = {} + setmetatable(self, Reader) + + _printEveryValueUpdate(self, valueHolder) + + return self + end + + function _printEveryValueUpdate(self, valueHolder) + valueHolder.valueChanged:Connect(function (newValue) + print("New value is: ", newValue) + end) + end + + return { + LockedIncrementingWriter = LockedIncrementingWriterConstructor, + ZeroWriter = ZeroWriterConstructor, + Reader = ReaderConstructor + } + ``` +
\ No newline at end of file diff --git a/default.project.json b/default.project.json new file mode 100644 index 0000000..29ef063 --- /dev/null +++ b/default.project.json @@ -0,0 +1,24 @@ +{ + "name": "test-rojo-proj", + "tree": { + "$className": "DataModel", + "ReplicatedStorage": { + "$className": "ReplicatedStorage", + "rbxts_include": { + "$path": "include", + "node_modules": { + "$path": "./node_modules/@rbxts" + } + }, + "out": { + "$path": "./out" + } + }, + "ServerScriptService": { + "$className": "ServerScriptService", + "TestRunner": { + "$path": "./spec.server.lua" + } + } + } +} \ No newline at end of file diff --git a/foreman.toml b/foreman.toml new file mode 100644 index 0000000..30d4c14 --- /dev/null +++ b/foreman.toml @@ -0,0 +1,4 @@ +[tools] +rojo = { source = "rojo-rbx/rojo", version = "6" } +run-in-roblox = { source = "rojo-rbx/run-in-roblox", version = "0.3.0" } +wally = { source = "UpliftGames/wally", version = "0.2.1" } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e8f78ff --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3494 @@ +{ + "name": "@rbxts/value-holders", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@rbxts/value-holders", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@rbxts/bin": "^1.2.6", + "@rbxts/destroyed-instance-logging": "^0.0.1", + "@rbxts/signals-tooling": "^1.0.8" + }, + "devDependencies": { + "@rbxts/compiler-types": "^1.2.7-types.0", + "@rbxts/types": "^1.0.546", + "@typescript-eslint/eslint-plugin": "^4.15.1", + "@typescript-eslint/parser": "^4.15.1", + "eslint": "^7.20.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-roblox-ts": "0.0.24", + "prettier": "^2.2.1", + "typedoc": "^0.22.0", + "typedoc-plugin-markdown": "^3.6.0", + "typescript": "^4.1.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rbxts/bin": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rbxts/bin/-/bin-1.2.6.tgz", + "integrity": "sha512-DW8PIxD60r9tRtWG/lVFr6qssnBSwuk+JtU4MufzwwHKftgUfAPRqJHqY09Z7BPrZ1GsN3Ev8Q2Sg+BhIiu1nA==" + }, + "node_modules/@rbxts/compiler-types": { + "version": "1.2.7-types.1", + "resolved": "https://registry.npmjs.org/@rbxts/compiler-types/-/compiler-types-1.2.7-types.1.tgz", + "integrity": "sha512-zr3QIJDgLN2dyPYSy4QwDRiZDm8BwQeUE8tsglPDgbVLJonaK7+PAqb1hoqZJ3ReQdZUElSKru9yAfI1Z0MOug==", + "dev": true + }, + "node_modules/@rbxts/destroyed-instance-logging": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@rbxts/destroyed-instance-logging/-/destroyed-instance-logging-0.0.1.tgz", + "integrity": "sha512-LqiSK45L8Ro5Hmqw+82gtiJ03q8WxKCeY2JwlZ+3idw0HOxCFdvqNz0z8YrXWQfZRkdbditkcW+mofLPwk9hWg==" + }, + "node_modules/@rbxts/dumpster": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@rbxts/dumpster/-/dumpster-1.0.8.tgz", + "integrity": "sha512-mkitEvfA166+EkRPF51vji9ZkAJEbqtwvrMAtPhP6EJy8IKAgh5QseHu5Zh1d5n459ufy1qY+5XHjGi2fQCqJg==" + }, + "node_modules/@rbxts/services": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rbxts/services/-/services-1.2.0.tgz", + "integrity": "sha512-GEnAGgRz/oFEfBCjr+UChO7D49c/l+Wgr2OHMkURBKbVAqGg7hVQbEs9PUr+9BuVx/8OlsqZ/cvrUYbwAyd60A==" + }, + "node_modules/@rbxts/signals-tooling": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@rbxts/signals-tooling/-/signals-tooling-1.0.8.tgz", + "integrity": "sha512-BJ5uiFqoKMw7F5QfK5k21CXg/RoFiikh1PfEgoobbEbgWRxPbNT4QCWDASixxcNjBA0Hfph1hb7CUc61p+u6KQ==", + "dependencies": { + "@rbxts/dumpster": "^1.0.8", + "@rbxts/services": "^1.0.28" + } + }, + "node_modules/@rbxts/types": { + "version": "1.0.571", + "resolved": "https://registry.npmjs.org/@rbxts/types/-/types-1.0.571.tgz", + "integrity": "sha512-VKBktp/GefC8uHzzRhZJE8EhQw6Zq2oMzc8dlWoaj2xe6rT2bWllYg4pl7tuw29LjaUuIqWm0GUhbSqMiKmmaQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", + "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-roblox-ts": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/eslint-plugin-roblox-ts/-/eslint-plugin-roblox-ts-0.0.24.tgz", + "integrity": "sha512-KwYUT8fdlS8gG6IfFnmyTwoWldR+4L5wCEk5NifKQ1L8OX1frrG61o6LkuyQvX0MtOeEj2CKo3qZyvfOuDb3Aw==", + "dev": true, + "dependencies": { + "@types/node": "^14.11.8", + "@typescript-eslint/experimental-utils": "^4.4.1", + "typescript": "^4.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedoc": { + "version": "0.22.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.13.tgz", + "integrity": "sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==", + "dev": true, + "dependencies": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^4.0.12", + "minimatch": "^5.0.1", + "shiki": "^0.10.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.11.14", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.14.tgz", + "integrity": "sha512-lh47OQvl0079nB18YL9wuTRRhMpjo300SZKfx/xpQY8qG+GINeSxTod95QBELeI0NP81sNtUbemRDrn5nyef4Q==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.22.0" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typescript": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", + "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rbxts/bin": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rbxts/bin/-/bin-1.2.6.tgz", + "integrity": "sha512-DW8PIxD60r9tRtWG/lVFr6qssnBSwuk+JtU4MufzwwHKftgUfAPRqJHqY09Z7BPrZ1GsN3Ev8Q2Sg+BhIiu1nA==" + }, + "@rbxts/compiler-types": { + "version": "1.2.7-types.1", + "resolved": "https://registry.npmjs.org/@rbxts/compiler-types/-/compiler-types-1.2.7-types.1.tgz", + "integrity": "sha512-zr3QIJDgLN2dyPYSy4QwDRiZDm8BwQeUE8tsglPDgbVLJonaK7+PAqb1hoqZJ3ReQdZUElSKru9yAfI1Z0MOug==", + "dev": true + }, + "@rbxts/destroyed-instance-logging": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@rbxts/destroyed-instance-logging/-/destroyed-instance-logging-0.0.1.tgz", + "integrity": "sha512-LqiSK45L8Ro5Hmqw+82gtiJ03q8WxKCeY2JwlZ+3idw0HOxCFdvqNz0z8YrXWQfZRkdbditkcW+mofLPwk9hWg==" + }, + "@rbxts/dumpster": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@rbxts/dumpster/-/dumpster-1.0.8.tgz", + "integrity": "sha512-mkitEvfA166+EkRPF51vji9ZkAJEbqtwvrMAtPhP6EJy8IKAgh5QseHu5Zh1d5n459ufy1qY+5XHjGi2fQCqJg==" + }, + "@rbxts/services": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rbxts/services/-/services-1.2.0.tgz", + "integrity": "sha512-GEnAGgRz/oFEfBCjr+UChO7D49c/l+Wgr2OHMkURBKbVAqGg7hVQbEs9PUr+9BuVx/8OlsqZ/cvrUYbwAyd60A==" + }, + "@rbxts/signals-tooling": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@rbxts/signals-tooling/-/signals-tooling-1.0.8.tgz", + "integrity": "sha512-BJ5uiFqoKMw7F5QfK5k21CXg/RoFiikh1PfEgoobbEbgWRxPbNT4QCWDASixxcNjBA0Hfph1hb7CUc61p+u6KQ==", + "requires": { + "@rbxts/dumpster": "^1.0.8", + "@rbxts/services": "^1.0.28" + } + }, + "@rbxts/types": { + "version": "1.0.571", + "resolved": "https://registry.npmjs.org/@rbxts/types/-/types-1.0.571.tgz", + "integrity": "sha512-VKBktp/GefC8uHzzRhZJE8EhQw6Zq2oMzc8dlWoaj2xe6rT2bWllYg4pl7tuw29LjaUuIqWm0GUhbSqMiKmmaQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", + "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-roblox-ts": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/eslint-plugin-roblox-ts/-/eslint-plugin-roblox-ts-0.0.24.tgz", + "integrity": "sha512-KwYUT8fdlS8gG6IfFnmyTwoWldR+4L5wCEk5NifKQ1L8OX1frrG61o6LkuyQvX0MtOeEj2CKo3qZyvfOuDb3Aw==", + "dev": true, + "requires": { + "@types/node": "^14.11.8", + "@typescript-eslint/experimental-utils": "^4.4.1", + "typescript": "^4.0.3" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shiki": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedoc": { + "version": "0.22.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.13.tgz", + "integrity": "sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==", + "dev": true, + "requires": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^4.0.12", + "minimatch": "^5.0.1", + "shiki": "^0.10.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "typedoc-plugin-markdown": { + "version": "3.11.14", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.14.tgz", + "integrity": "sha512-lh47OQvl0079nB18YL9wuTRRhMpjo300SZKfx/xpQY8qG+GINeSxTod95QBELeI0NP81sNtUbemRDrn5nyef4Q==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typescript": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "dev": true + }, + "uglify-js": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "dev": true, + "optional": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vscode-oniguruma": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", + "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b18ccf8 --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "@rbxts/value-holders", + "version": "0.0.1", + "description": "A module for passing any values around by sharing a pointer, as well as allowing consumers to subscribe to changes and allowing authors to hold locks on changing the value.", + "main": "out/init.lua", + "scripts": { + "eslint": "npx eslint \"src/**/*.ts\" --max-warnings 0", + "prepublishOnly": "rm -rf ./out; rbxtsc --type=package", + "test": "rbxtsc --type=game && rojo build -o ./unit_tests.rbxlx && run-in-roblox ./unit_tests.rbxlx -s ./spec.server.lua", + "wsl-start-unit-tests": "set -e; rm -rf ./out; rbxtsc --type=game && rojo build -o unit_tests.rbxlx; ./scripts/open-in-windows ./unit_tests.rbxlx" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Bytebit-Org/roblox-ValueHolders.git" + }, + "keywords": [], + "author": "Bytebit", + "license": "MIT", + "bugs": { + "url": "https://github.com/Bytebit-Org/roblox-ValueHolders/issues" + }, + "homepage": "https://github.com/Bytebit-Org/roblox-ValueHolders#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "out/**/*.d.ts", + "out/**/!(*.spec).lua" + ], + "types": "out/index.d.ts", + "devDependencies": { + "@rbxts/compiler-types": "^1.2.7-types.0", + "@rbxts/types": "^1.0.546", + "@typescript-eslint/eslint-plugin": "^4.15.1", + "@typescript-eslint/parser": "^4.15.1", + "eslint": "^7.20.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-roblox-ts": "0.0.24", + "prettier": "^2.2.1", + "typedoc": "^0.22.0", + "typedoc-plugin-markdown": "^3.6.0", + "typescript": "^4.1.5" + }, + "dependencies": { + "@rbxts/bin": "^1.2.6", + "@rbxts/destroyed-instance-logging": "^0.0.1", + "@rbxts/signals-tooling": "^1.0.8" + } +} diff --git a/roblox.toml b/roblox.toml new file mode 100644 index 0000000..b4b3be2 --- /dev/null +++ b/roblox.toml @@ -0,0 +1,8105 @@ +# This file was @generated by generate-roblox-std +[selene] +base = "lua51" +name = "roblox" +[selene.structs.BasePart."*"] +struct = "Instance" + +[selene.structs.BasePart.AncestryChanged] +struct = "Event" + +[selene.structs.BasePart.Anchored] +property = true +writable = "overridden" + +[selene.structs.BasePart.Archivable] +property = true +writable = "overridden" + +[selene.structs.BasePart.AttributeChanged] +struct = "Event" + +[selene.structs.BasePart.BackParamA] +property = true +writable = "overridden" + +[selene.structs.BasePart.BackParamB] +property = true +writable = "overridden" + +[selene.structs.BasePart.BackSurface] +property = true +writable = "overridden" + +[selene.structs.BasePart.BackSurfaceInput] +property = true +writable = "overridden" + +[selene.structs.BasePart.BottomParamA] +property = true +writable = "overridden" + +[selene.structs.BasePart.BottomParamB] +property = true +writable = "overridden" + +[selene.structs.BasePart.BottomSurface] +property = true +writable = "overridden" + +[selene.structs.BasePart.BottomSurfaceInput] +property = true +writable = "overridden" + +[selene.structs.BasePart.BreakJoints] +method = true +args = [] + +[selene.structs.BasePart.BrickColor] +property = true +writable = "overridden" + +[selene.structs.BasePart.CFrame] +property = true +writable = "overridden" + +[selene.structs.BasePart.CanCollide] +property = true +writable = "overridden" + +[selene.structs.BasePart.CanCollideWith] +method = true + +[[selene.structs.BasePart.CanCollideWith.args]] +required = false +type = "any" + +[selene.structs.BasePart.CanSetNetworkOwnership] +method = true +args = [] + +[selene.structs.BasePart.CastShadow] +property = true +writable = "overridden" + +[selene.structs.BasePart.CenterOfMass] +property = true + +[selene.structs.BasePart.Changed] +struct = "Event" + +[selene.structs.BasePart.ChildAdded] +struct = "Event" + +[selene.structs.BasePart.ChildRemoved] +struct = "Event" + +[selene.structs.BasePart.ClassName] +property = true + +[selene.structs.BasePart.ClearAllChildren] +method = true +args = [] + +[selene.structs.BasePart.Clone] +method = true +args = [] + +[selene.structs.BasePart.CollisionGroupId] +property = true +writable = "overridden" + +[selene.structs.BasePart.Color] +property = true +writable = "overridden" + +[selene.structs.BasePart.CustomPhysicalProperties] +property = true +writable = "overridden" + +[selene.structs.BasePart.DescendantAdded] +struct = "Event" + +[selene.structs.BasePart.DescendantRemoving] +struct = "Event" + +[selene.structs.BasePart.Destroy] +method = true +args = [] + +[selene.structs.BasePart.FindFirstAncestor] +method = true + +[[selene.structs.BasePart.FindFirstAncestor.args]] +required = false +type = "any" + +[selene.structs.BasePart.FindFirstAncestorOfClass] +method = true + +[[selene.structs.BasePart.FindFirstAncestorOfClass.args]] +required = false +type = "any" + +[selene.structs.BasePart.FindFirstAncestorWhichIsA] +method = true + +[[selene.structs.BasePart.FindFirstAncestorWhichIsA.args]] +required = false +type = "any" + +[selene.structs.BasePart.FindFirstChild] +method = true + +[[selene.structs.BasePart.FindFirstChild.args]] +required = false +type = "any" + +[[selene.structs.BasePart.FindFirstChild.args]] +required = false +type = "any" + +[selene.structs.BasePart.FindFirstChildOfClass] +method = true + +[[selene.structs.BasePart.FindFirstChildOfClass.args]] +required = false +type = "any" + +[selene.structs.BasePart.FindFirstChildWhichIsA] +method = true + +[[selene.structs.BasePart.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[[selene.structs.BasePart.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[selene.structs.BasePart.FrontParamA] +property = true +writable = "overridden" + +[selene.structs.BasePart.FrontParamB] +property = true +writable = "overridden" + +[selene.structs.BasePart.FrontSurface] +property = true +writable = "overridden" + +[selene.structs.BasePart.FrontSurfaceInput] +property = true +writable = "overridden" + +[selene.structs.BasePart.GetAttribute] +method = true + +[[selene.structs.BasePart.GetAttribute.args]] +required = false +type = "any" + +[selene.structs.BasePart.GetAttributeChangedSignal] +method = true + +[[selene.structs.BasePart.GetAttributeChangedSignal.args]] +required = false +type = "any" + +[selene.structs.BasePart.GetAttributes] +method = true +args = [] + +[selene.structs.BasePart.GetChildren] +method = true +args = [] + +[selene.structs.BasePart.GetConnectedParts] +method = true + +[[selene.structs.BasePart.GetConnectedParts.args]] +required = false +type = "any" + +[selene.structs.BasePart.GetDebugId] +method = true + +[[selene.structs.BasePart.GetDebugId.args]] +required = false +type = "any" + +[selene.structs.BasePart.GetDescendants] +method = true +args = [] + +[selene.structs.BasePart.GetFullName] +method = true +args = [] + +[selene.structs.BasePart.GetJoints] +method = true +args = [] + +[selene.structs.BasePart.GetMass] +method = true +args = [] + +[selene.structs.BasePart.GetNetworkOwner] +method = true +args = [] + +[selene.structs.BasePart.GetNetworkOwnershipAuto] +method = true +args = [] + +[selene.structs.BasePart.GetPropertyChangedSignal] +method = true + +[[selene.structs.BasePart.GetPropertyChangedSignal.args]] +required = false +type = "any" + +[selene.structs.BasePart.GetRootPart] +method = true +args = [] + +[selene.structs.BasePart.GetTouchingParts] +method = true +args = [] + +[selene.structs.BasePart.IsA] +method = true + +[[selene.structs.BasePart.IsA.args]] +required = false +type = "any" + +[selene.structs.BasePart.IsAncestorOf] +method = true + +[[selene.structs.BasePart.IsAncestorOf.args]] +required = false +type = "any" + +[selene.structs.BasePart.IsDescendantOf] +method = true + +[[selene.structs.BasePart.IsDescendantOf.args]] +required = false +type = "any" + +[selene.structs.BasePart.IsGrounded] +method = true +args = [] + +[selene.structs.BasePart.LeftParamA] +property = true +writable = "overridden" + +[selene.structs.BasePart.LeftParamB] +property = true +writable = "overridden" + +[selene.structs.BasePart.LeftSurface] +property = true +writable = "overridden" + +[selene.structs.BasePart.LeftSurfaceInput] +property = true +writable = "overridden" + +[selene.structs.BasePart.LocalTransparencyModifier] +property = true +writable = "overridden" + +[selene.structs.BasePart.Locked] +property = true +writable = "overridden" + +[selene.structs.BasePart.MakeJoints] +method = true +args = [] + +[selene.structs.BasePart.Mass] +property = true + +[selene.structs.BasePart.Massless] +property = true +writable = "overridden" + +[selene.structs.BasePart.Material] +property = true +writable = "overridden" + +[selene.structs.BasePart.Name] +property = true +writable = "overridden" + +[selene.structs.BasePart.Orientation] +property = true +writable = "overridden" + +[selene.structs.BasePart.Parent] +struct = "Instance" + +[selene.structs.BasePart.Position] +property = true +writable = "overridden" + +[selene.structs.BasePart.ReceiveAge] +property = true + +[selene.structs.BasePart.Reflectance] +property = true +writable = "overridden" + +[selene.structs.BasePart.Resize] +method = true + +[[selene.structs.BasePart.Resize.args]] +required = false +type = "any" + +[[selene.structs.BasePart.Resize.args]] +required = false +type = "any" + +[selene.structs.BasePart.ResizeIncrement] +property = true + +[selene.structs.BasePart.ResizeableFaces] +property = true + +[selene.structs.BasePart.RightParamA] +property = true +writable = "overridden" + +[selene.structs.BasePart.RightParamB] +property = true +writable = "overridden" + +[selene.structs.BasePart.RightSurface] +property = true +writable = "overridden" + +[selene.structs.BasePart.RightSurfaceInput] +property = true +writable = "overridden" + +[selene.structs.BasePart.RootPriority] +property = true +writable = "overridden" + +[selene.structs.BasePart.RotVelocity] +property = true +writable = "overridden" + +[selene.structs.BasePart.Rotation] +property = true +writable = "overridden" + +[selene.structs.BasePart.SetAttribute] +method = true + +[[selene.structs.BasePart.SetAttribute.args]] +required = false +type = "any" + +[[selene.structs.BasePart.SetAttribute.args]] +required = false +type = "any" + +[selene.structs.BasePart.SetNetworkOwner] +method = true + +[[selene.structs.BasePart.SetNetworkOwner.args]] +required = false +type = "any" + +[selene.structs.BasePart.SetNetworkOwnershipAuto] +method = true +args = [] + +[selene.structs.BasePart.Size] +property = true +writable = "overridden" + +[selene.structs.BasePart.SubtractAsync] +method = true + +[[selene.structs.BasePart.SubtractAsync.args]] +required = false +type = "any" + +[[selene.structs.BasePart.SubtractAsync.args]] +required = false +type = "any" + +[[selene.structs.BasePart.SubtractAsync.args]] +required = false +type = "any" + +[selene.structs.BasePart.TopParamA] +property = true +writable = "overridden" + +[selene.structs.BasePart.TopParamB] +property = true +writable = "overridden" + +[selene.structs.BasePart.TopSurface] +property = true +writable = "overridden" + +[selene.structs.BasePart.TopSurfaceInput] +property = true +writable = "overridden" + +[selene.structs.BasePart.TouchEnded] +struct = "Event" + +[selene.structs.BasePart.Touched] +struct = "Event" + +[selene.structs.BasePart.Transparency] +property = true +writable = "overridden" + +[selene.structs.BasePart.UnionAsync] +method = true + +[[selene.structs.BasePart.UnionAsync.args]] +required = false +type = "any" + +[[selene.structs.BasePart.UnionAsync.args]] +required = false +type = "any" + +[[selene.structs.BasePart.UnionAsync.args]] +required = false +type = "any" + +[selene.structs.BasePart.Velocity] +property = true +writable = "overridden" + +[selene.structs.BasePart.WaitForChild] +method = true + +[[selene.structs.BasePart.WaitForChild.args]] +required = false +type = "any" + +[[selene.structs.BasePart.WaitForChild.args]] +required = false +type = "any" +[selene.structs.Camera."*"] +struct = "Instance" + +[selene.structs.Camera.AncestryChanged] +struct = "Event" + +[selene.structs.Camera.Archivable] +property = true +writable = "overridden" + +[selene.structs.Camera.AttributeChanged] +struct = "Event" + +[selene.structs.Camera.CFrame] +property = true +writable = "overridden" + +[selene.structs.Camera.CameraSubject] +struct = "Instance" + +[selene.structs.Camera.CameraType] +property = true +writable = "overridden" + +[selene.structs.Camera.Changed] +struct = "Event" + +[selene.structs.Camera.ChildAdded] +struct = "Event" + +[selene.structs.Camera.ChildRemoved] +struct = "Event" + +[selene.structs.Camera.ClassName] +property = true + +[selene.structs.Camera.ClearAllChildren] +method = true +args = [] + +[selene.structs.Camera.Clone] +method = true +args = [] + +[selene.structs.Camera.DescendantAdded] +struct = "Event" + +[selene.structs.Camera.DescendantRemoving] +struct = "Event" + +[selene.structs.Camera.Destroy] +method = true +args = [] + +[selene.structs.Camera.FieldOfView] +property = true +writable = "overridden" + +[selene.structs.Camera.FindFirstAncestor] +method = true + +[[selene.structs.Camera.FindFirstAncestor.args]] +required = false +type = "any" + +[selene.structs.Camera.FindFirstAncestorOfClass] +method = true + +[[selene.structs.Camera.FindFirstAncestorOfClass.args]] +required = false +type = "any" + +[selene.structs.Camera.FindFirstAncestorWhichIsA] +method = true + +[[selene.structs.Camera.FindFirstAncestorWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Camera.FindFirstChild] +method = true + +[[selene.structs.Camera.FindFirstChild.args]] +required = false +type = "any" + +[[selene.structs.Camera.FindFirstChild.args]] +required = false +type = "any" + +[selene.structs.Camera.FindFirstChildOfClass] +method = true + +[[selene.structs.Camera.FindFirstChildOfClass.args]] +required = false +type = "any" + +[selene.structs.Camera.FindFirstChildWhichIsA] +method = true + +[[selene.structs.Camera.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[[selene.structs.Camera.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Camera.FirstPersonTransition] +struct = "Event" + +[selene.structs.Camera.Focus] +property = true +writable = "overridden" + +[selene.structs.Camera.GetAttribute] +method = true + +[[selene.structs.Camera.GetAttribute.args]] +required = false +type = "any" + +[selene.structs.Camera.GetAttributeChangedSignal] +method = true + +[[selene.structs.Camera.GetAttributeChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Camera.GetAttributes] +method = true +args = [] + +[selene.structs.Camera.GetChildren] +method = true +args = [] + +[selene.structs.Camera.GetDebugId] +method = true + +[[selene.structs.Camera.GetDebugId.args]] +required = false +type = "any" + +[selene.structs.Camera.GetDescendants] +method = true +args = [] + +[selene.structs.Camera.GetFullName] +method = true +args = [] + +[selene.structs.Camera.GetPanSpeed] +method = true +args = [] + +[selene.structs.Camera.GetPartsObscuringTarget] +method = true + +[[selene.structs.Camera.GetPartsObscuringTarget.args]] +required = false +type = "any" + +[[selene.structs.Camera.GetPartsObscuringTarget.args]] +required = false +type = "any" + +[selene.structs.Camera.GetPropertyChangedSignal] +method = true + +[[selene.structs.Camera.GetPropertyChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Camera.GetRenderCFrame] +method = true +args = [] + +[selene.structs.Camera.GetRoll] +method = true +args = [] + +[selene.structs.Camera.GetTiltSpeed] +method = true +args = [] + +[selene.structs.Camera.HeadLocked] +property = true +writable = "overridden" + +[selene.structs.Camera.HeadScale] +property = true +writable = "overridden" + +[selene.structs.Camera.InterpolationFinished] +struct = "Event" + +[selene.structs.Camera.IsA] +method = true + +[[selene.structs.Camera.IsA.args]] +required = false +type = "any" + +[selene.structs.Camera.IsAncestorOf] +method = true + +[[selene.structs.Camera.IsAncestorOf.args]] +required = false +type = "any" + +[selene.structs.Camera.IsDescendantOf] +method = true + +[[selene.structs.Camera.IsDescendantOf.args]] +required = false +type = "any" + +[selene.structs.Camera.Name] +property = true +writable = "overridden" + +[selene.structs.Camera.NearPlaneZ] +property = true + +[selene.structs.Camera.Parent] +struct = "Instance" + +[selene.structs.Camera.ScreenPointToRay] +method = true + +[[selene.structs.Camera.ScreenPointToRay.args]] +required = false +type = "any" + +[[selene.structs.Camera.ScreenPointToRay.args]] +required = false +type = "any" + +[[selene.structs.Camera.ScreenPointToRay.args]] +required = false +type = "any" + +[selene.structs.Camera.SetAttribute] +method = true + +[[selene.structs.Camera.SetAttribute.args]] +required = false +type = "any" + +[[selene.structs.Camera.SetAttribute.args]] +required = false +type = "any" + +[selene.structs.Camera.SetCameraPanMode] +method = true + +[[selene.structs.Camera.SetCameraPanMode.args]] +required = false +type = "any" + +[selene.structs.Camera.SetImageServerView] +method = true + +[[selene.structs.Camera.SetImageServerView.args]] +required = false +type = "any" + +[selene.structs.Camera.SetRoll] +method = true + +[[selene.structs.Camera.SetRoll.args]] +required = false +type = "any" + +[selene.structs.Camera.ViewportPointToRay] +method = true + +[[selene.structs.Camera.ViewportPointToRay.args]] +required = false +type = "any" + +[[selene.structs.Camera.ViewportPointToRay.args]] +required = false +type = "any" + +[[selene.structs.Camera.ViewportPointToRay.args]] +required = false +type = "any" + +[selene.structs.Camera.ViewportSize] +property = true + +[selene.structs.Camera.WaitForChild] +method = true + +[[selene.structs.Camera.WaitForChild.args]] +required = false +type = "any" + +[[selene.structs.Camera.WaitForChild.args]] +required = false +type = "any" + +[selene.structs.Camera.WorldToScreenPoint] +method = true + +[[selene.structs.Camera.WorldToScreenPoint.args]] +required = false +type = "any" + +[selene.structs.Camera.WorldToViewportPoint] +method = true + +[[selene.structs.Camera.WorldToViewportPoint.args]] +required = false +type = "any" + +[selene.structs.Camera.Zoom] +method = true + +[[selene.structs.Camera.Zoom.args]] +required = false +type = "any" +[selene.structs.DataModel."*"] +struct = "Instance" + +[selene.structs.DataModel.AncestryChanged] +struct = "Event" + +[selene.structs.DataModel.Archivable] +property = true +writable = "overridden" + +[selene.structs.DataModel.AttributeChanged] +struct = "Event" + +[selene.structs.DataModel.BindToClose] +method = true + +[[selene.structs.DataModel.BindToClose.args]] +required = false +type = "any" + +[selene.structs.DataModel.Changed] +struct = "Event" + +[selene.structs.DataModel.ChildAdded] +struct = "Event" + +[selene.structs.DataModel.ChildRemoved] +struct = "Event" + +[selene.structs.DataModel.ClassName] +property = true + +[selene.structs.DataModel.ClearAllChildren] +method = true +args = [] + +[selene.structs.DataModel.Clone] +method = true +args = [] + +[selene.structs.DataModel.Close] +struct = "Event" + +[selene.structs.DataModel.CloseLate] +struct = "Event" + +[selene.structs.DataModel.CreatorId] +property = true + +[selene.structs.DataModel.CreatorType] +property = true + +[selene.structs.DataModel.DefineFastFlag] +method = true + +[[selene.structs.DataModel.DefineFastFlag.args]] +required = false +type = "any" + +[[selene.structs.DataModel.DefineFastFlag.args]] +required = false +type = "any" + +[selene.structs.DataModel.DefineFastInt] +method = true + +[[selene.structs.DataModel.DefineFastInt.args]] +required = false +type = "any" + +[[selene.structs.DataModel.DefineFastInt.args]] +required = false +type = "any" + +[selene.structs.DataModel.DefineFastString] +method = true + +[[selene.structs.DataModel.DefineFastString.args]] +required = false +type = "any" + +[[selene.structs.DataModel.DefineFastString.args]] +required = false +type = "any" + +[selene.structs.DataModel.DescendantAdded] +struct = "Event" + +[selene.structs.DataModel.DescendantRemoving] +struct = "Event" + +[selene.structs.DataModel.Destroy] +method = true +args = [] + +[selene.structs.DataModel.FindFirstAncestor] +method = true + +[[selene.structs.DataModel.FindFirstAncestor.args]] +required = false +type = "any" + +[selene.structs.DataModel.FindFirstAncestorOfClass] +method = true + +[[selene.structs.DataModel.FindFirstAncestorOfClass.args]] +required = false +type = "any" + +[selene.structs.DataModel.FindFirstAncestorWhichIsA] +method = true + +[[selene.structs.DataModel.FindFirstAncestorWhichIsA.args]] +required = false +type = "any" + +[selene.structs.DataModel.FindFirstChild] +method = true + +[[selene.structs.DataModel.FindFirstChild.args]] +required = false +type = "any" + +[[selene.structs.DataModel.FindFirstChild.args]] +required = false +type = "any" + +[selene.structs.DataModel.FindFirstChildOfClass] +method = true + +[[selene.structs.DataModel.FindFirstChildOfClass.args]] +required = false +type = "any" + +[selene.structs.DataModel.FindFirstChildWhichIsA] +method = true + +[[selene.structs.DataModel.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[[selene.structs.DataModel.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[selene.structs.DataModel.FindService] +method = true + +[[selene.structs.DataModel.FindService.args]] +required = false +type = "any" + +[selene.structs.DataModel.GameId] +property = true + +[selene.structs.DataModel.Genre] +property = true + +[selene.structs.DataModel.GetAttribute] +method = true + +[[selene.structs.DataModel.GetAttribute.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetAttributeChangedSignal] +method = true + +[[selene.structs.DataModel.GetAttributeChangedSignal.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetAttributes] +method = true +args = [] + +[selene.structs.DataModel.GetChildren] +method = true +args = [] + +[selene.structs.DataModel.GetDebugId] +method = true + +[[selene.structs.DataModel.GetDebugId.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetDescendants] +method = true +args = [] + +[selene.structs.DataModel.GetFastFlag] +method = true + +[[selene.structs.DataModel.GetFastFlag.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetFastInt] +method = true + +[[selene.structs.DataModel.GetFastInt.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetFastString] +method = true + +[[selene.structs.DataModel.GetFastString.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetFullName] +method = true +args = [] + +[selene.structs.DataModel.GetJobIntervalPeakFraction] +method = true + +[[selene.structs.DataModel.GetJobIntervalPeakFraction.args]] +required = false +type = "any" + +[[selene.structs.DataModel.GetJobIntervalPeakFraction.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetJobTimePeakFraction] +method = true + +[[selene.structs.DataModel.GetJobTimePeakFraction.args]] +required = false +type = "any" + +[[selene.structs.DataModel.GetJobTimePeakFraction.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetJobsExtendedStats] +method = true +args = [] + +[selene.structs.DataModel.GetJobsInfo] +method = true +args = [] + +[selene.structs.DataModel.GetObjects] +method = true + +[[selene.structs.DataModel.GetObjects.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetObjectsAsync] +method = true + +[[selene.structs.DataModel.GetObjectsAsync.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetObjectsList] +method = true + +[[selene.structs.DataModel.GetObjectsList.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetPropertyChangedSignal] +method = true + +[[selene.structs.DataModel.GetPropertyChangedSignal.args]] +required = false +type = "any" + +[selene.structs.DataModel.GetService] +method = true + +[[selene.structs.DataModel.GetService.args]] +type = ["ABTestService", "AdService", "AnalyticsService", "AssetManagerService", "AssetService", "BadgeService", "CoreGui", "StarterGui", "BrowserService", "BulkImportService", "CacheableContentProvider", "MeshContentProvider", "SolidModelContentProvider", "ChangeHistoryService", "Chat", "ClusterPacketCache", "CollectionService", "ContentProvider", "ContextActionService", "ControllerService", "CookiesService", "CorePackages", "CoreScriptSyncService", "DataStoreService", "Debris", "DraftsService", "EventIngestService", "FlagStandService", "FlyweightService", "CSGDictionaryService", "NonReplicatedCSGDictionaryService", "FriendService", "GamePassService", "GamepadService", "Geometry", "GoogleAnalyticsConfiguration", "GroupService", "GuiService", "GuidRegistryService", "HapticService", "Hopper", "HttpRbxApiService", "HttpService", "InsertService", "JointsService", "KeyboardService", "KeyframeSequenceProvider", "LanguageService", "Lighting", "LocalStorageService", "AppStorageService", "UserStorageService", "LocalizationService", "LogService", "LoginService", "LuaWebService", "MarketplaceService", "MemStorageService", "MessagingService", "MouseService", "NetworkClient", "NetworkServer", "NetworkSettings", "NotificationService", "Workspace", "PackageService", "PathfindingService", "PermissionsService", "PhysicsService", "PlayerEmulatorService", "Players", "PluginDebugService", "PluginGuiService", "PointsService", "PolicyService", "RbxAnalyticsService", "RenderSettings", "ReplicatedFirst", "ReplicatedStorage", "RobloxPluginGuiService", "RobloxReplicatedStorage", "RunService", "RuntimeScriptService", "ScriptContext", "ScriptService", "Selection", "ServerScriptService", "ServerStorage", "SessionService", "SocialService", "SoundService", "SpawnerService", "StarterPack", "StarterPlayer", "Stats", "StopWatchReporter", "Studio", "StudioData", "StudioService", "TaskScheduler", "Teams", "TeleportService", "TestService", "TextService", "ThirdPartyUserService", "TimerService", "TouchInputService", "TweenService", "UGCValidationService", "UserInputService", "UserService", "VRService", "VersionControlService", "VirtualInputManager", "VirtualUser", "Visit"] + +[selene.structs.DataModel.GraphicsQualityChangeRequest] +struct = "Event" + +[selene.structs.DataModel.HttpGetAsync] +method = true + +[[selene.structs.DataModel.HttpGetAsync.args]] +required = false +type = "any" + +[[selene.structs.DataModel.HttpGetAsync.args]] +required = false +type = "any" + +[selene.structs.DataModel.HttpPostAsync] +method = true + +[[selene.structs.DataModel.HttpPostAsync.args]] +required = false +type = "any" + +[[selene.structs.DataModel.HttpPostAsync.args]] +required = false +type = "any" + +[[selene.structs.DataModel.HttpPostAsync.args]] +required = false +type = "any" + +[[selene.structs.DataModel.HttpPostAsync.args]] +required = false +type = "any" + +[selene.structs.DataModel.InsertObjectsAndJoinIfLegacyAsync] +method = true + +[[selene.structs.DataModel.InsertObjectsAndJoinIfLegacyAsync.args]] +required = false +type = "any" + +[selene.structs.DataModel.IsA] +method = true + +[[selene.structs.DataModel.IsA.args]] +required = false +type = "any" + +[selene.structs.DataModel.IsAncestorOf] +method = true + +[[selene.structs.DataModel.IsAncestorOf.args]] +required = false +type = "any" + +[selene.structs.DataModel.IsDescendantOf] +method = true + +[[selene.structs.DataModel.IsDescendantOf.args]] +required = false +type = "any" + +[selene.structs.DataModel.IsLoaded] +method = true +args = [] + +[selene.structs.DataModel.JobId] +property = true + +[selene.structs.DataModel.Load] +method = true + +[[selene.structs.DataModel.Load.args]] +required = false +type = "any" + +[selene.structs.DataModel.Loaded] +struct = "Event" + +[selene.structs.DataModel.Name] +property = true +writable = "overridden" + +[selene.structs.DataModel.OpenScreenshotsFolder] +method = true +args = [] + +[selene.structs.DataModel.OpenVideosFolder] +method = true +args = [] + +[selene.structs.DataModel.Parent] +struct = "Instance" + +[selene.structs.DataModel.PlaceId] +property = true + +[selene.structs.DataModel.PlaceVersion] +property = true + +[selene.structs.DataModel.PrivateServerId] +property = true + +[selene.structs.DataModel.PrivateServerOwnerId] +property = true + +[selene.structs.DataModel.ReportInGoogleAnalytics] +method = true + +[[selene.structs.DataModel.ReportInGoogleAnalytics.args]] +required = false +type = "any" + +[[selene.structs.DataModel.ReportInGoogleAnalytics.args]] +required = false +type = "any" + +[[selene.structs.DataModel.ReportInGoogleAnalytics.args]] +required = false +type = "any" + +[[selene.structs.DataModel.ReportInGoogleAnalytics.args]] +required = false +type = "any" + +[selene.structs.DataModel.ScreenshotReady] +struct = "Event" + +[selene.structs.DataModel.ServiceAdded] +struct = "Event" + +[selene.structs.DataModel.ServiceRemoving] +struct = "Event" + +[selene.structs.DataModel.SetAttribute] +method = true + +[[selene.structs.DataModel.SetAttribute.args]] +required = false +type = "any" + +[[selene.structs.DataModel.SetAttribute.args]] +required = false +type = "any" + +[selene.structs.DataModel.SetFastFlagForTesting] +method = true + +[[selene.structs.DataModel.SetFastFlagForTesting.args]] +required = false +type = "any" + +[[selene.structs.DataModel.SetFastFlagForTesting.args]] +required = false +type = "any" + +[selene.structs.DataModel.SetFastIntForTesting] +method = true + +[[selene.structs.DataModel.SetFastIntForTesting.args]] +required = false +type = "any" + +[[selene.structs.DataModel.SetFastIntForTesting.args]] +required = false +type = "any" + +[selene.structs.DataModel.SetFastStringForTesting] +method = true + +[[selene.structs.DataModel.SetFastStringForTesting.args]] +required = false +type = "any" + +[[selene.structs.DataModel.SetFastStringForTesting.args]] +required = false +type = "any" + +[selene.structs.DataModel.SetPlaceId] +method = true + +[[selene.structs.DataModel.SetPlaceId.args]] +required = false +type = "any" + +[selene.structs.DataModel.SetUniverseId] +method = true + +[[selene.structs.DataModel.SetUniverseId.args]] +required = false +type = "any" + +[selene.structs.DataModel.Shutdown] +method = true +args = [] + +[selene.structs.DataModel.WaitForChild] +method = true + +[[selene.structs.DataModel.WaitForChild.args]] +required = false +type = "any" + +[[selene.structs.DataModel.WaitForChild.args]] +required = false +type = "any" + +[selene.structs.DataModel.Workspace] +struct = "Workspace" +[selene.structs.EnumItem.Name] +property = true + +[selene.structs.EnumItem.Value] +property = true +[selene.structs.Event.Connect] +method = true + +[[selene.structs.Event.Connect.args]] +type = "function" + +[selene.structs.Event.Wait] +method = true +args = [] +[selene.structs.Instance."*"] +any = true +[selene.structs.Plugin."*"] +struct = "Instance" + +[selene.structs.Plugin.Activate] +method = true + +[[selene.structs.Plugin.Activate.args]] +required = false +type = "any" + +[selene.structs.Plugin.AncestryChanged] +struct = "Event" + +[selene.structs.Plugin.Archivable] +property = true +writable = "overridden" + +[selene.structs.Plugin.AttributeChanged] +struct = "Event" + +[selene.structs.Plugin.Changed] +struct = "Event" + +[selene.structs.Plugin.ChildAdded] +struct = "Event" + +[selene.structs.Plugin.ChildRemoved] +struct = "Event" + +[selene.structs.Plugin.ClassName] +property = true + +[selene.structs.Plugin.ClearAllChildren] +method = true +args = [] + +[selene.structs.Plugin.Clone] +method = true +args = [] + +[selene.structs.Plugin.CollisionEnabled] +property = true + +[selene.structs.Plugin.CreateDockWidgetPluginGui] +method = true + +[[selene.structs.Plugin.CreateDockWidgetPluginGui.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreateDockWidgetPluginGui.args]] +required = false +type = "any" + +[selene.structs.Plugin.CreatePluginAction] +method = true + +[[selene.structs.Plugin.CreatePluginAction.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreatePluginAction.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreatePluginAction.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreatePluginAction.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreatePluginAction.args]] +required = false +type = "any" + +[selene.structs.Plugin.CreatePluginMenu] +method = true + +[[selene.structs.Plugin.CreatePluginMenu.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreatePluginMenu.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreatePluginMenu.args]] +required = false +type = "any" + +[selene.structs.Plugin.CreateQWidgetPluginGui] +method = true + +[[selene.structs.Plugin.CreateQWidgetPluginGui.args]] +required = false +type = "any" + +[[selene.structs.Plugin.CreateQWidgetPluginGui.args]] +required = false +type = "any" + +[selene.structs.Plugin.CreateToolbar] +method = true + +[[selene.structs.Plugin.CreateToolbar.args]] +required = false +type = "any" + +[selene.structs.Plugin.Deactivate] +method = true +args = [] + +[selene.structs.Plugin.Deactivation] +struct = "Event" + +[selene.structs.Plugin.DescendantAdded] +struct = "Event" + +[selene.structs.Plugin.DescendantRemoving] +struct = "Event" + +[selene.structs.Plugin.Destroy] +method = true +args = [] + +[selene.structs.Plugin.FindFirstAncestor] +method = true + +[[selene.structs.Plugin.FindFirstAncestor.args]] +required = false +type = "any" + +[selene.structs.Plugin.FindFirstAncestorOfClass] +method = true + +[[selene.structs.Plugin.FindFirstAncestorOfClass.args]] +required = false +type = "any" + +[selene.structs.Plugin.FindFirstAncestorWhichIsA] +method = true + +[[selene.structs.Plugin.FindFirstAncestorWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Plugin.FindFirstChild] +method = true + +[[selene.structs.Plugin.FindFirstChild.args]] +required = false +type = "any" + +[[selene.structs.Plugin.FindFirstChild.args]] +required = false +type = "any" + +[selene.structs.Plugin.FindFirstChildOfClass] +method = true + +[[selene.structs.Plugin.FindFirstChildOfClass.args]] +required = false +type = "any" + +[selene.structs.Plugin.FindFirstChildWhichIsA] +method = true + +[[selene.structs.Plugin.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[[selene.structs.Plugin.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Plugin.GetAttribute] +method = true + +[[selene.structs.Plugin.GetAttribute.args]] +required = false +type = "any" + +[selene.structs.Plugin.GetAttributeChangedSignal] +method = true + +[[selene.structs.Plugin.GetAttributeChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Plugin.GetAttributes] +method = true +args = [] + +[selene.structs.Plugin.GetChildren] +method = true +args = [] + +[selene.structs.Plugin.GetDebugId] +method = true + +[[selene.structs.Plugin.GetDebugId.args]] +required = false +type = "any" + +[selene.structs.Plugin.GetDescendants] +method = true +args = [] + +[selene.structs.Plugin.GetFullName] +method = true +args = [] + +[selene.structs.Plugin.GetItem] +method = true + +[[selene.structs.Plugin.GetItem.args]] +required = false +type = "any" + +[[selene.structs.Plugin.GetItem.args]] +required = false +type = "any" + +[selene.structs.Plugin.GetJoinMode] +method = true +args = [] + +[selene.structs.Plugin.GetMouse] +method = true +args = [] + +[selene.structs.Plugin.GetPropertyChangedSignal] +method = true + +[[selene.structs.Plugin.GetPropertyChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Plugin.GetSelectedRibbonTool] +method = true +args = [] + +[selene.structs.Plugin.GetSetting] +method = true + +[[selene.structs.Plugin.GetSetting.args]] +required = false +type = "any" + +[selene.structs.Plugin.GridSize] +property = true + +[selene.structs.Plugin.ImportFbxAnimation] +method = true + +[[selene.structs.Plugin.ImportFbxAnimation.args]] +required = false +type = "any" + +[[selene.structs.Plugin.ImportFbxAnimation.args]] +required = false +type = "any" + +[selene.structs.Plugin.ImportFbxRig] +method = true + +[[selene.structs.Plugin.ImportFbxRig.args]] +required = false +type = "any" + +[selene.structs.Plugin.Invoke] +method = true + +[[selene.structs.Plugin.Invoke.args]] +required = false +type = "any" + +[[selene.structs.Plugin.Invoke.args]] +required = false +type = "any" + +[selene.structs.Plugin.IsA] +method = true + +[[selene.structs.Plugin.IsA.args]] +required = false +type = "any" + +[selene.structs.Plugin.IsActivated] +method = true +args = [] + +[selene.structs.Plugin.IsActivatedWithExclusiveMouse] +method = true +args = [] + +[selene.structs.Plugin.IsAncestorOf] +method = true + +[[selene.structs.Plugin.IsAncestorOf.args]] +required = false +type = "any" + +[selene.structs.Plugin.IsDescendantOf] +method = true + +[[selene.structs.Plugin.IsDescendantOf.args]] +required = false +type = "any" + +[selene.structs.Plugin.Name] +property = true +writable = "overridden" + +[selene.structs.Plugin.Negate] +method = true + +[[selene.structs.Plugin.Negate.args]] +required = false +type = "any" + +[selene.structs.Plugin.OnInvoke] +method = true + +[[selene.structs.Plugin.OnInvoke.args]] +required = false +type = "any" + +[[selene.structs.Plugin.OnInvoke.args]] +required = false +type = "any" + +[selene.structs.Plugin.OnSetItem] +method = true + +[[selene.structs.Plugin.OnSetItem.args]] +required = false +type = "any" + +[[selene.structs.Plugin.OnSetItem.args]] +required = false +type = "any" + +[selene.structs.Plugin.OpenScript] +method = true + +[[selene.structs.Plugin.OpenScript.args]] +required = false +type = "any" + +[[selene.structs.Plugin.OpenScript.args]] +required = false +type = "any" + +[selene.structs.Plugin.OpenWikiPage] +method = true + +[[selene.structs.Plugin.OpenWikiPage.args]] +required = false +type = "any" + +[selene.structs.Plugin.Parent] +struct = "Instance" + +[selene.structs.Plugin.PauseSound] +method = true + +[[selene.structs.Plugin.PauseSound.args]] +required = false +type = "any" + +[selene.structs.Plugin.PlaySound] +method = true + +[[selene.structs.Plugin.PlaySound.args]] +required = false +type = "any" + +[selene.structs.Plugin.PromptForExistingAssetId] +method = true + +[[selene.structs.Plugin.PromptForExistingAssetId.args]] +required = false +type = "any" + +[selene.structs.Plugin.PromptSaveSelection] +method = true + +[[selene.structs.Plugin.PromptSaveSelection.args]] +required = false +type = "any" + +[selene.structs.Plugin.ResumeSound] +method = true + +[[selene.structs.Plugin.ResumeSound.args]] +required = false +type = "any" + +[selene.structs.Plugin.SaveSelectedToRoblox] +method = true +args = [] + +[selene.structs.Plugin.SelectRibbonTool] +method = true + +[[selene.structs.Plugin.SelectRibbonTool.args]] +required = false +type = "any" + +[[selene.structs.Plugin.SelectRibbonTool.args]] +required = false +type = "any" + +[selene.structs.Plugin.Separate] +method = true + +[[selene.structs.Plugin.Separate.args]] +required = false +type = "any" + +[selene.structs.Plugin.SetAttribute] +method = true + +[[selene.structs.Plugin.SetAttribute.args]] +required = false +type = "any" + +[[selene.structs.Plugin.SetAttribute.args]] +required = false +type = "any" + +[selene.structs.Plugin.SetItem] +method = true + +[[selene.structs.Plugin.SetItem.args]] +required = false +type = "any" + +[[selene.structs.Plugin.SetItem.args]] +required = false +type = "any" + +[selene.structs.Plugin.SetSetting] +method = true + +[[selene.structs.Plugin.SetSetting.args]] +required = false +type = "any" + +[[selene.structs.Plugin.SetSetting.args]] +required = false +type = "any" + +[selene.structs.Plugin.StartDecalDrag] +method = true + +[[selene.structs.Plugin.StartDecalDrag.args]] +required = false +type = "any" + +[selene.structs.Plugin.StartDrag] +method = true + +[[selene.structs.Plugin.StartDrag.args]] +required = false +type = "any" + +[selene.structs.Plugin.StopAllSounds] +method = true +args = [] + +[selene.structs.Plugin.Union] +method = true + +[[selene.structs.Plugin.Union.args]] +required = false +type = "any" + +[selene.structs.Plugin.Unloading] +struct = "Event" + +[selene.structs.Plugin.WaitForChild] +method = true + +[[selene.structs.Plugin.WaitForChild.args]] +required = false +type = "any" + +[[selene.structs.Plugin.WaitForChild.args]] +required = false +type = "any" +[selene.structs.Script."*"] +struct = "Instance" + +[selene.structs.Script.AncestryChanged] +struct = "Event" + +[selene.structs.Script.Archivable] +property = true +writable = "overridden" + +[selene.structs.Script.AttributeChanged] +struct = "Event" + +[selene.structs.Script.Changed] +struct = "Event" + +[selene.structs.Script.ChildAdded] +struct = "Event" + +[selene.structs.Script.ChildRemoved] +struct = "Event" + +[selene.structs.Script.ClassName] +property = true + +[selene.structs.Script.ClearAllChildren] +method = true +args = [] + +[selene.structs.Script.Clone] +method = true +args = [] + +[selene.structs.Script.CurrentEditor] +struct = "Instance" + +[selene.structs.Script.DescendantAdded] +struct = "Event" + +[selene.structs.Script.DescendantRemoving] +struct = "Event" + +[selene.structs.Script.Destroy] +method = true +args = [] + +[selene.structs.Script.Disabled] +property = true +writable = "overridden" + +[selene.structs.Script.FindFirstAncestor] +method = true + +[[selene.structs.Script.FindFirstAncestor.args]] +required = false +type = "any" + +[selene.structs.Script.FindFirstAncestorOfClass] +method = true + +[[selene.structs.Script.FindFirstAncestorOfClass.args]] +required = false +type = "any" + +[selene.structs.Script.FindFirstAncestorWhichIsA] +method = true + +[[selene.structs.Script.FindFirstAncestorWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Script.FindFirstChild] +method = true + +[[selene.structs.Script.FindFirstChild.args]] +required = false +type = "any" + +[[selene.structs.Script.FindFirstChild.args]] +required = false +type = "any" + +[selene.structs.Script.FindFirstChildOfClass] +method = true + +[[selene.structs.Script.FindFirstChildOfClass.args]] +required = false +type = "any" + +[selene.structs.Script.FindFirstChildWhichIsA] +method = true + +[[selene.structs.Script.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[[selene.structs.Script.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Script.GetAttribute] +method = true + +[[selene.structs.Script.GetAttribute.args]] +required = false +type = "any" + +[selene.structs.Script.GetAttributeChangedSignal] +method = true + +[[selene.structs.Script.GetAttributeChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Script.GetAttributes] +method = true +args = [] + +[selene.structs.Script.GetChildren] +method = true +args = [] + +[selene.structs.Script.GetDebugId] +method = true + +[[selene.structs.Script.GetDebugId.args]] +required = false +type = "any" + +[selene.structs.Script.GetDescendants] +method = true +args = [] + +[selene.structs.Script.GetFullName] +method = true +args = [] + +[selene.structs.Script.GetHash] +method = true +args = [] + +[selene.structs.Script.GetPropertyChangedSignal] +method = true + +[[selene.structs.Script.GetPropertyChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Script.IsA] +method = true + +[[selene.structs.Script.IsA.args]] +required = false +type = "any" + +[selene.structs.Script.IsAncestorOf] +method = true + +[[selene.structs.Script.IsAncestorOf.args]] +required = false +type = "any" + +[selene.structs.Script.IsDescendantOf] +method = true + +[[selene.structs.Script.IsDescendantOf.args]] +required = false +type = "any" + +[selene.structs.Script.LinkedSource] +property = true +writable = "overridden" + +[selene.structs.Script.Name] +property = true +writable = "overridden" + +[selene.structs.Script.Parent] +struct = "Instance" + +[selene.structs.Script.SetAttribute] +method = true + +[[selene.structs.Script.SetAttribute.args]] +required = false +type = "any" + +[[selene.structs.Script.SetAttribute.args]] +required = false +type = "any" + +[selene.structs.Script.WaitForChild] +method = true + +[[selene.structs.Script.WaitForChild.args]] +required = false +type = "any" + +[[selene.structs.Script.WaitForChild.args]] +required = false +type = "any" +[selene.structs.Workspace."*"] +struct = "Instance" + +[selene.structs.Workspace.AllowThirdPartySales] +property = true +writable = "overridden" + +[selene.structs.Workspace.AncestryChanged] +struct = "Event" + +[selene.structs.Workspace.Archivable] +property = true +writable = "overridden" + +[selene.structs.Workspace.AttributeChanged] +struct = "Event" + +[selene.structs.Workspace.BreakJoints] +method = true +args = [] + +[selene.structs.Workspace.CalculateJumpPower] +method = true + +[[selene.structs.Workspace.CalculateJumpPower.args]] +required = false +type = "any" + +[[selene.structs.Workspace.CalculateJumpPower.args]] +required = false +type = "any" + +[selene.structs.Workspace.Changed] +struct = "Event" + +[selene.structs.Workspace.ChildAdded] +struct = "Event" + +[selene.structs.Workspace.ChildRemoved] +struct = "Event" + +[selene.structs.Workspace.ClassName] +property = true + +[selene.structs.Workspace.ClearAllChildren] +method = true +args = [] + +[selene.structs.Workspace.Clone] +method = true +args = [] + +[selene.structs.Workspace.CurrentCamera] +struct = "Camera" + +[selene.structs.Workspace.DescendantAdded] +struct = "Event" + +[selene.structs.Workspace.DescendantRemoving] +struct = "Event" + +[selene.structs.Workspace.Destroy] +method = true +args = [] + +[selene.structs.Workspace.DistributedGameTime] +property = true +writable = "overridden" + +[selene.structs.Workspace.ExperimentalSolverIsEnabled] +method = true +args = [] + +[selene.structs.Workspace.FindFirstAncestor] +method = true + +[[selene.structs.Workspace.FindFirstAncestor.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindFirstAncestorOfClass] +method = true + +[[selene.structs.Workspace.FindFirstAncestorOfClass.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindFirstAncestorWhichIsA] +method = true + +[[selene.structs.Workspace.FindFirstAncestorWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindFirstChild] +method = true + +[[selene.structs.Workspace.FindFirstChild.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindFirstChild.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindFirstChildOfClass] +method = true + +[[selene.structs.Workspace.FindFirstChildOfClass.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindFirstChildWhichIsA] +method = true + +[[selene.structs.Workspace.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindFirstChildWhichIsA.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindPartOnRay] +method = true + +[[selene.structs.Workspace.FindPartOnRay.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRay.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRay.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRay.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindPartOnRayWithIgnoreList] +method = true + +[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindPartOnRayWithWhitelist] +method = true + +[[selene.structs.Workspace.FindPartOnRayWithWhitelist.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRayWithWhitelist.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartOnRayWithWhitelist.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindPartsInRegion3] +method = true + +[[selene.structs.Workspace.FindPartsInRegion3.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartsInRegion3.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartsInRegion3.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList] +method = true + +[[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList.args]] +required = false +type = "any" + +[selene.structs.Workspace.FindPartsInRegion3WithWhiteList] +method = true + +[[selene.structs.Workspace.FindPartsInRegion3WithWhiteList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartsInRegion3WithWhiteList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.FindPartsInRegion3WithWhiteList.args]] +required = false +type = "any" + +[selene.structs.Workspace.GetAttribute] +method = true + +[[selene.structs.Workspace.GetAttribute.args]] +required = false +type = "any" + +[selene.structs.Workspace.GetAttributeChangedSignal] +method = true + +[[selene.structs.Workspace.GetAttributeChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Workspace.GetAttributes] +method = true +args = [] + +[selene.structs.Workspace.GetBoundingBox] +method = true +args = [] + +[selene.structs.Workspace.GetChildren] +method = true +args = [] + +[selene.structs.Workspace.GetDebugId] +method = true + +[[selene.structs.Workspace.GetDebugId.args]] +required = false +type = "any" + +[selene.structs.Workspace.GetDescendants] +method = true +args = [] + +[selene.structs.Workspace.GetExtentsSize] +method = true +args = [] + +[selene.structs.Workspace.GetFullName] +method = true +args = [] + +[selene.structs.Workspace.GetNumAwakeParts] +method = true +args = [] + +[selene.structs.Workspace.GetPhysicsThrottling] +method = true +args = [] + +[selene.structs.Workspace.GetPrimaryPartCFrame] +method = true +args = [] + +[selene.structs.Workspace.GetPropertyChangedSignal] +method = true + +[[selene.structs.Workspace.GetPropertyChangedSignal.args]] +required = false +type = "any" + +[selene.structs.Workspace.GetRealPhysicsFPS] +method = true +args = [] + +[selene.structs.Workspace.Gravity] +property = true +writable = "overridden" + +[selene.structs.Workspace.IkMoveTo] +method = true + +[[selene.structs.Workspace.IkMoveTo.args]] +required = false +type = "any" + +[[selene.structs.Workspace.IkMoveTo.args]] +required = false +type = "any" + +[[selene.structs.Workspace.IkMoveTo.args]] +required = false +type = "any" + +[[selene.structs.Workspace.IkMoveTo.args]] +required = false +type = "any" + +[[selene.structs.Workspace.IkMoveTo.args]] +required = false +type = "any" + +[selene.structs.Workspace.IsA] +method = true + +[[selene.structs.Workspace.IsA.args]] +required = false +type = "any" + +[selene.structs.Workspace.IsAncestorOf] +method = true + +[[selene.structs.Workspace.IsAncestorOf.args]] +required = false +type = "any" + +[selene.structs.Workspace.IsDescendantOf] +method = true + +[[selene.structs.Workspace.IsDescendantOf.args]] +required = false +type = "any" + +[selene.structs.Workspace.IsRegion3Empty] +method = true + +[[selene.structs.Workspace.IsRegion3Empty.args]] +required = false +type = "any" + +[[selene.structs.Workspace.IsRegion3Empty.args]] +required = false +type = "any" + +[selene.structs.Workspace.IsRegion3EmptyWithIgnoreList] +method = true + +[[selene.structs.Workspace.IsRegion3EmptyWithIgnoreList.args]] +required = false +type = "any" + +[[selene.structs.Workspace.IsRegion3EmptyWithIgnoreList.args]] +required = false +type = "any" + +[selene.structs.Workspace.JoinToOutsiders] +method = true + +[[selene.structs.Workspace.JoinToOutsiders.args]] +required = false +type = "any" + +[[selene.structs.Workspace.JoinToOutsiders.args]] +required = false +type = "any" + +[selene.structs.Workspace.MakeJoints] +method = true +args = [] + +[selene.structs.Workspace.MoveTo] +method = true + +[[selene.structs.Workspace.MoveTo.args]] +required = false +type = "any" + +[selene.structs.Workspace.Name] +property = true +writable = "overridden" + +[selene.structs.Workspace.PGSIsEnabled] +method = true +args = [] + +[selene.structs.Workspace.Parent] +struct = "Instance" + +[selene.structs.Workspace.PrimaryPart] +struct = "BasePart" + +[selene.structs.Workspace.Raycast] +method = true + +[[selene.structs.Workspace.Raycast.args]] +required = false +type = "any" + +[[selene.structs.Workspace.Raycast.args]] +required = false +type = "any" + +[[selene.structs.Workspace.Raycast.args]] +required = false +type = "any" + +[selene.structs.Workspace.SetAttribute] +method = true + +[[selene.structs.Workspace.SetAttribute.args]] +required = false +type = "any" + +[[selene.structs.Workspace.SetAttribute.args]] +required = false +type = "any" + +[selene.structs.Workspace.SetPhysicsThrottleEnabled] +method = true + +[[selene.structs.Workspace.SetPhysicsThrottleEnabled.args]] +required = false +type = "any" + +[selene.structs.Workspace.SetPrimaryPartCFrame] +method = true + +[[selene.structs.Workspace.SetPrimaryPartCFrame.args]] +required = false +type = "any" + +[selene.structs.Workspace.StreamingMinRadius] +property = true +writable = "overridden" + +[selene.structs.Workspace.StreamingPauseMode] +property = true +writable = "overridden" + +[selene.structs.Workspace.StreamingTargetRadius] +property = true +writable = "overridden" + +[selene.structs.Workspace.TemporaryLegacyPhysicsSolverOverride] +property = true +writable = "overridden" + +[selene.structs.Workspace.Terrain] +struct = "Instance" + +[selene.structs.Workspace.TranslateBy] +method = true + +[[selene.structs.Workspace.TranslateBy.args]] +required = false +type = "any" + +[selene.structs.Workspace.UnjoinFromOutsiders] +method = true + +[[selene.structs.Workspace.UnjoinFromOutsiders.args]] +required = false +type = "any" + +[selene.structs.Workspace.WaitForChild] +method = true + +[[selene.structs.Workspace.WaitForChild.args]] +required = false +type = "any" + +[[selene.structs.Workspace.WaitForChild.args]] +required = false +type = "any" + +[selene.structs.Workspace.ZoomToExtents] +method = true +args = [] +[BrickColor.Black] +args = [] + +[BrickColor.Blue] +args = [] + +[BrickColor.DarkGray] +args = [] + +[BrickColor.Gray] +args = [] + +[BrickColor.Green] +args = [] + +[BrickColor.Red] +args = [] + +[BrickColor.White] +args = [] + +[BrickColor.Yellow] +args = [] +[[BrickColor.new.args]] +type = "any" + +[[BrickColor.new.args]] +required = false +type = "number" + +[[BrickColor.new.args]] +required = false +type = "number" +[[BrickColor.palette.args]] +type = "number" + +[BrickColor.random] +args = [] +[[CFrame.Angles.args]] +required = false +type = "number" + +[[CFrame.Angles.args]] +required = false +type = "number" + +[[CFrame.Angles.args]] +required = false +type = "number" +[[CFrame.fromAxisAngle.args]] +[CFrame.fromAxisAngle.args.type] +display = "Vector3" + +[[CFrame.fromAxisAngle.args]] +type = "number" +[[CFrame.fromEulerAnglesXYZ.args]] +type = "number" + +[[CFrame.fromEulerAnglesXYZ.args]] +type = "number" + +[[CFrame.fromEulerAnglesXYZ.args]] +type = "number" +[[CFrame.fromEulerAnglesYXZ.args]] +type = "number" + +[[CFrame.fromEulerAnglesYXZ.args]] +type = "number" + +[[CFrame.fromEulerAnglesYXZ.args]] +type = "number" +[[CFrame.fromMatrix.args]] +[CFrame.fromMatrix.args.type] +display = "Vector3" + +[[CFrame.fromMatrix.args]] +[CFrame.fromMatrix.args.type] +display = "Vector3" + +[[CFrame.fromMatrix.args]] +[CFrame.fromMatrix.args.type] +display = "Vector3" + +[[CFrame.fromMatrix.args]] +[CFrame.fromMatrix.args.type] +display = "Vector3" +[[CFrame.fromOrientation.args]] +type = "number" + +[[CFrame.fromOrientation.args]] +type = "number" + +[[CFrame.fromOrientation.args]] +type = "number" +[[CFrame.new.args]] +required = false +type = "any" + +[[CFrame.new.args]] +required = false +type = "any" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" + +[[CFrame.new.args]] +required = false +type = "number" +[[Color3.fromHSV.args]] +type = "number" + +[[Color3.fromHSV.args]] +type = "number" + +[[Color3.fromHSV.args]] +type = "number" +[[Color3.fromRGB.args]] +type = "number" + +[[Color3.fromRGB.args]] +type = "number" + +[[Color3.fromRGB.args]] +type = "number" +[[Color3.new.args]] +required = false +type = "number" + +[[Color3.new.args]] +required = false +type = "number" + +[[Color3.new.args]] +required = false +type = "number" +[[Color3.toHSV.args]] +required = false + +[Color3.toHSV.args.type] +display = "Color3" +[[ColorSequence.new.args]] +type = "any" + +[[ColorSequence.new.args]] +required = false + +[ColorSequence.new.args.type] +display = "Color3" +[[ColorSequenceKeypoint.new.args]] +type = "number" + +[[ColorSequenceKeypoint.new.args]] +[ColorSequenceKeypoint.new.args.type] +display = "Color3" +[[DockWidgetPluginGuiInfo.new.args]] +required = false + +[DockWidgetPluginGuiInfo.new.args.type] +display = "InitialDockState" + +[[DockWidgetPluginGuiInfo.new.args]] +required = false +type = "bool" + +[[DockWidgetPluginGuiInfo.new.args]] +required = false +type = "bool" + +[[DockWidgetPluginGuiInfo.new.args]] +required = false +type = "number" + +[[DockWidgetPluginGuiInfo.new.args]] +required = false +type = "number" + +[[DockWidgetPluginGuiInfo.new.args]] +required = false +type = "number" + +[[DockWidgetPluginGuiInfo.new.args]] +required = false +type = "number" +[Enum.ActionType.Draw] +struct = "EnumItem" + +[Enum.ActionType.GetEnumItems] +args = [] +method = true + +[Enum.ActionType.Lose] +struct = "EnumItem" + +[Enum.ActionType.Nothing] +struct = "EnumItem" + +[Enum.ActionType.Pause] +struct = "EnumItem" + +[Enum.ActionType.Win] +struct = "EnumItem" +[Enum.ActuatorRelativeTo.Attachment0] +struct = "EnumItem" + +[Enum.ActuatorRelativeTo.Attachment1] +struct = "EnumItem" + +[Enum.ActuatorRelativeTo.GetEnumItems] +args = [] +method = true + +[Enum.ActuatorRelativeTo.World] +struct = "EnumItem" +[Enum.ActuatorType.GetEnumItems] +args = [] +method = true + +[Enum.ActuatorType.Motor] +struct = "EnumItem" + +[Enum.ActuatorType.None] +struct = "EnumItem" + +[Enum.ActuatorType.Servo] +struct = "EnumItem" +[Enum.AlignType.GetEnumItems] +args = [] +method = true + +[Enum.AlignType.Parallel] +struct = "EnumItem" + +[Enum.AlignType.Perpendicular] +struct = "EnumItem" +[Enum.AlphaMode.GetEnumItems] +args = [] +method = true + +[Enum.AlphaMode.Overlay] +struct = "EnumItem" + +[Enum.AlphaMode.Transparency] +struct = "EnumItem" +[Enum.AnimationPriority.Action] +struct = "EnumItem" + +[Enum.AnimationPriority.Core] +struct = "EnumItem" + +[Enum.AnimationPriority.GetEnumItems] +args = [] +method = true + +[Enum.AnimationPriority.Idle] +struct = "EnumItem" + +[Enum.AnimationPriority.Movement] +struct = "EnumItem" +[Enum.AppShellActionType.AvatarEditorPageLoaded] +struct = "EnumItem" + +[Enum.AppShellActionType.GamePageLoaded] +struct = "EnumItem" + +[Enum.AppShellActionType.GetEnumItems] +args = [] +method = true + +[Enum.AppShellActionType.HomePageLoaded] +struct = "EnumItem" + +[Enum.AppShellActionType.None] +struct = "EnumItem" + +[Enum.AppShellActionType.OpenApp] +struct = "EnumItem" + +[Enum.AppShellActionType.ReadConversation] +struct = "EnumItem" + +[Enum.AppShellActionType.TapAvatarTab] +struct = "EnumItem" + +[Enum.AppShellActionType.TapChatTab] +struct = "EnumItem" + +[Enum.AppShellActionType.TapConversationEntry] +struct = "EnumItem" + +[Enum.AppShellActionType.TapGamePageTab] +struct = "EnumItem" + +[Enum.AppShellActionType.TapHomePageTab] +struct = "EnumItem" +[Enum.AspectType.FitWithinMaxSize] +struct = "EnumItem" + +[Enum.AspectType.GetEnumItems] +args = [] +method = true + +[Enum.AspectType.ScaleWithParentSize] +struct = "EnumItem" +[Enum.AssetFetchStatus.Failure] +struct = "EnumItem" + +[Enum.AssetFetchStatus.GetEnumItems] +args = [] +method = true + +[Enum.AssetFetchStatus.Success] +struct = "EnumItem" +[Enum.AssetType.Animation] +struct = "EnumItem" + +[Enum.AssetType.Audio] +struct = "EnumItem" + +[Enum.AssetType.BackAccessory] +struct = "EnumItem" + +[Enum.AssetType.Badge] +struct = "EnumItem" + +[Enum.AssetType.ClimbAnimation] +struct = "EnumItem" + +[Enum.AssetType.DeathAnimation] +struct = "EnumItem" + +[Enum.AssetType.Decal] +struct = "EnumItem" + +[Enum.AssetType.EarAccessory] +struct = "EnumItem" + +[Enum.AssetType.EmoteAnimation] +struct = "EnumItem" + +[Enum.AssetType.EyeAccessory] +struct = "EnumItem" + +[Enum.AssetType.Face] +struct = "EnumItem" + +[Enum.AssetType.FaceAccessory] +struct = "EnumItem" + +[Enum.AssetType.FallAnimation] +struct = "EnumItem" + +[Enum.AssetType.FrontAccessory] +struct = "EnumItem" + +[Enum.AssetType.GamePass] +struct = "EnumItem" + +[Enum.AssetType.Gear] +struct = "EnumItem" + +[Enum.AssetType.GetEnumItems] +args = [] +method = true + +[Enum.AssetType.HairAccessory] +struct = "EnumItem" + +[Enum.AssetType.Hat] +struct = "EnumItem" + +[Enum.AssetType.Head] +struct = "EnumItem" + +[Enum.AssetType.IdleAnimation] +struct = "EnumItem" + +[Enum.AssetType.Image] +struct = "EnumItem" + +[Enum.AssetType.JumpAnimation] +struct = "EnumItem" + +[Enum.AssetType.LeftArm] +struct = "EnumItem" + +[Enum.AssetType.LeftLeg] +struct = "EnumItem" + +[Enum.AssetType.Lua] +struct = "EnumItem" + +[Enum.AssetType.Mesh] +struct = "EnumItem" + +[Enum.AssetType.MeshPart] +struct = "EnumItem" + +[Enum.AssetType.Model] +struct = "EnumItem" + +[Enum.AssetType.NeckAccessory] +struct = "EnumItem" + +[Enum.AssetType.Package] +struct = "EnumItem" + +[Enum.AssetType.Pants] +struct = "EnumItem" + +[Enum.AssetType.Place] +struct = "EnumItem" + +[Enum.AssetType.Plugin] +struct = "EnumItem" + +[Enum.AssetType.PoseAnimation] +struct = "EnumItem" + +[Enum.AssetType.RightArm] +struct = "EnumItem" + +[Enum.AssetType.RightLeg] +struct = "EnumItem" + +[Enum.AssetType.RunAnimation] +struct = "EnumItem" + +[Enum.AssetType.Shirt] +struct = "EnumItem" + +[Enum.AssetType.ShoulderAccessory] +struct = "EnumItem" + +[Enum.AssetType.SwimAnimation] +struct = "EnumItem" + +[Enum.AssetType.TeeShirt] +struct = "EnumItem" + +[Enum.AssetType.Torso] +struct = "EnumItem" + +[Enum.AssetType.WaistAccessory] +struct = "EnumItem" + +[Enum.AssetType.WalkAnimation] +struct = "EnumItem" +[Enum.AvatarContextMenuOption.Chat] +struct = "EnumItem" + +[Enum.AvatarContextMenuOption.Emote] +struct = "EnumItem" + +[Enum.AvatarContextMenuOption.Friend] +struct = "EnumItem" + +[Enum.AvatarContextMenuOption.GetEnumItems] +args = [] +method = true + +[Enum.AvatarContextMenuOption.InspectMenu] +struct = "EnumItem" +[Enum.AvatarJointPositionType.ArtistIntent] +struct = "EnumItem" + +[Enum.AvatarJointPositionType.Fixed] +struct = "EnumItem" + +[Enum.AvatarJointPositionType.GetEnumItems] +args = [] +method = true +[Enum.Axis.GetEnumItems] +args = [] +method = true + +[Enum.Axis.X] +struct = "EnumItem" + +[Enum.Axis.Y] +struct = "EnumItem" + +[Enum.Axis.Z] +struct = "EnumItem" +[Enum.BinType.Clone] +struct = "EnumItem" + +[Enum.BinType.GameTool] +struct = "EnumItem" + +[Enum.BinType.GetEnumItems] +args = [] +method = true + +[Enum.BinType.Grab] +struct = "EnumItem" + +[Enum.BinType.Hammer] +struct = "EnumItem" + +[Enum.BinType.Script] +struct = "EnumItem" +[Enum.BodyPart.GetEnumItems] +args = [] +method = true + +[Enum.BodyPart.Head] +struct = "EnumItem" + +[Enum.BodyPart.LeftArm] +struct = "EnumItem" + +[Enum.BodyPart.LeftLeg] +struct = "EnumItem" + +[Enum.BodyPart.RightArm] +struct = "EnumItem" + +[Enum.BodyPart.RightLeg] +struct = "EnumItem" + +[Enum.BodyPart.Torso] +struct = "EnumItem" +[Enum.BodyPartR15.GetEnumItems] +args = [] +method = true + +[Enum.BodyPartR15.Head] +struct = "EnumItem" + +[Enum.BodyPartR15.LeftFoot] +struct = "EnumItem" + +[Enum.BodyPartR15.LeftHand] +struct = "EnumItem" + +[Enum.BodyPartR15.LeftLowerArm] +struct = "EnumItem" + +[Enum.BodyPartR15.LeftLowerLeg] +struct = "EnumItem" + +[Enum.BodyPartR15.LeftUpperArm] +struct = "EnumItem" + +[Enum.BodyPartR15.LeftUpperLeg] +struct = "EnumItem" + +[Enum.BodyPartR15.LowerTorso] +struct = "EnumItem" + +[Enum.BodyPartR15.RightFoot] +struct = "EnumItem" + +[Enum.BodyPartR15.RightHand] +struct = "EnumItem" + +[Enum.BodyPartR15.RightLowerArm] +struct = "EnumItem" + +[Enum.BodyPartR15.RightLowerLeg] +struct = "EnumItem" + +[Enum.BodyPartR15.RightUpperArm] +struct = "EnumItem" + +[Enum.BodyPartR15.RightUpperLeg] +struct = "EnumItem" + +[Enum.BodyPartR15.RootPart] +struct = "EnumItem" + +[Enum.BodyPartR15.Unknown] +struct = "EnumItem" + +[Enum.BodyPartR15.UpperTorso] +struct = "EnumItem" +[Enum.BorderMode.GetEnumItems] +args = [] +method = true + +[Enum.BorderMode.Inset] +struct = "EnumItem" + +[Enum.BorderMode.Middle] +struct = "EnumItem" + +[Enum.BorderMode.Outline] +struct = "EnumItem" +[Enum.BreakReason.Error] +struct = "EnumItem" + +[Enum.BreakReason.GetEnumItems] +args = [] +method = true + +[Enum.BreakReason.Other] +struct = "EnumItem" + +[Enum.BreakReason.SpecialBreakpoint] +struct = "EnumItem" + +[Enum.BreakReason.UserBreakpoint] +struct = "EnumItem" +[Enum.Button.Dismount] +struct = "EnumItem" + +[Enum.Button.GetEnumItems] +args = [] +method = true + +[Enum.Button.Jump] +struct = "EnumItem" +[Enum.ButtonStyle.Custom] +struct = "EnumItem" + +[Enum.ButtonStyle.GetEnumItems] +args = [] +method = true + +[Enum.ButtonStyle.RobloxButton] +struct = "EnumItem" + +[Enum.ButtonStyle.RobloxButtonDefault] +struct = "EnumItem" + +[Enum.ButtonStyle.RobloxRoundButton] +struct = "EnumItem" + +[Enum.ButtonStyle.RobloxRoundDefaultButton] +struct = "EnumItem" + +[Enum.ButtonStyle.RobloxRoundDropdownButton] +struct = "EnumItem" +[Enum.CameraMode.Classic] +struct = "EnumItem" + +[Enum.CameraMode.GetEnumItems] +args = [] +method = true + +[Enum.CameraMode.LockFirstPerson] +struct = "EnumItem" +[Enum.CameraPanMode.Classic] +struct = "EnumItem" + +[Enum.CameraPanMode.EdgeBump] +struct = "EnumItem" + +[Enum.CameraPanMode.GetEnumItems] +args = [] +method = true +[Enum.CameraType.Attach] +struct = "EnumItem" + +[Enum.CameraType.Custom] +struct = "EnumItem" + +[Enum.CameraType.Fixed] +struct = "EnumItem" + +[Enum.CameraType.Follow] +struct = "EnumItem" + +[Enum.CameraType.GetEnumItems] +args = [] +method = true + +[Enum.CameraType.Orbital] +struct = "EnumItem" + +[Enum.CameraType.Scriptable] +struct = "EnumItem" + +[Enum.CameraType.Track] +struct = "EnumItem" + +[Enum.CameraType.Watch] +struct = "EnumItem" +[Enum.CellBlock.CornerWedge] +struct = "EnumItem" + +[Enum.CellBlock.GetEnumItems] +args = [] +method = true + +[Enum.CellBlock.HorizontalWedge] +struct = "EnumItem" + +[Enum.CellBlock.InverseCornerWedge] +struct = "EnumItem" + +[Enum.CellBlock.Solid] +struct = "EnumItem" + +[Enum.CellBlock.VerticalWedge] +struct = "EnumItem" +[Enum.CellMaterial.Aluminum] +struct = "EnumItem" + +[Enum.CellMaterial.Asphalt] +struct = "EnumItem" + +[Enum.CellMaterial.BluePlastic] +struct = "EnumItem" + +[Enum.CellMaterial.Brick] +struct = "EnumItem" + +[Enum.CellMaterial.Cement] +struct = "EnumItem" + +[Enum.CellMaterial.CinderBlock] +struct = "EnumItem" + +[Enum.CellMaterial.Empty] +struct = "EnumItem" + +[Enum.CellMaterial.GetEnumItems] +args = [] +method = true + +[Enum.CellMaterial.Gold] +struct = "EnumItem" + +[Enum.CellMaterial.Granite] +struct = "EnumItem" + +[Enum.CellMaterial.Grass] +struct = "EnumItem" + +[Enum.CellMaterial.Gravel] +struct = "EnumItem" + +[Enum.CellMaterial.Iron] +struct = "EnumItem" + +[Enum.CellMaterial.MossyStone] +struct = "EnumItem" + +[Enum.CellMaterial.RedPlastic] +struct = "EnumItem" + +[Enum.CellMaterial.Sand] +struct = "EnumItem" + +[Enum.CellMaterial.Water] +struct = "EnumItem" + +[Enum.CellMaterial.WoodLog] +struct = "EnumItem" + +[Enum.CellMaterial.WoodPlank] +struct = "EnumItem" +[Enum.CellOrientation.GetEnumItems] +args = [] +method = true + +[Enum.CellOrientation.NegX] +struct = "EnumItem" + +[Enum.CellOrientation.NegZ] +struct = "EnumItem" + +[Enum.CellOrientation.X] +struct = "EnumItem" + +[Enum.CellOrientation.Z] +struct = "EnumItem" +[Enum.CenterDialogType.GetEnumItems] +args = [] +method = true + +[Enum.CenterDialogType.ModalDialog] +struct = "EnumItem" + +[Enum.CenterDialogType.PlayerInitiatedDialog] +struct = "EnumItem" + +[Enum.CenterDialogType.QuitDialog] +struct = "EnumItem" + +[Enum.CenterDialogType.UnsolicitedDialog] +struct = "EnumItem" +[Enum.ChatCallbackType.GetEnumItems] +args = [] +method = true + +[Enum.ChatCallbackType.OnClientFormattingMessage] +struct = "EnumItem" + +[Enum.ChatCallbackType.OnClientSendingMessage] +struct = "EnumItem" + +[Enum.ChatCallbackType.OnCreatingChatWindow] +struct = "EnumItem" + +[Enum.ChatCallbackType.OnServerReceivingMessage] +struct = "EnumItem" +[Enum.ChatColor.Blue] +struct = "EnumItem" + +[Enum.ChatColor.GetEnumItems] +args = [] +method = true + +[Enum.ChatColor.Green] +struct = "EnumItem" + +[Enum.ChatColor.Red] +struct = "EnumItem" + +[Enum.ChatColor.White] +struct = "EnumItem" +[Enum.ChatMode.GetEnumItems] +args = [] +method = true + +[Enum.ChatMode.Menu] +struct = "EnumItem" + +[Enum.ChatMode.TextAndMenu] +struct = "EnumItem" +[Enum.ChatPrivacyMode.AllUsers] +struct = "EnumItem" + +[Enum.ChatPrivacyMode.Friends] +struct = "EnumItem" + +[Enum.ChatPrivacyMode.GetEnumItems] +args = [] +method = true + +[Enum.ChatPrivacyMode.NoOne] +struct = "EnumItem" +[Enum.ChatStyle.Bubble] +struct = "EnumItem" + +[Enum.ChatStyle.Classic] +struct = "EnumItem" + +[Enum.ChatStyle.ClassicAndBubble] +struct = "EnumItem" + +[Enum.ChatStyle.GetEnumItems] +args = [] +method = true +[Enum.CollisionFidelity.Box] +struct = "EnumItem" + +[Enum.CollisionFidelity.Default] +struct = "EnumItem" + +[Enum.CollisionFidelity.GetEnumItems] +args = [] +method = true + +[Enum.CollisionFidelity.Hull] +struct = "EnumItem" + +[Enum.CollisionFidelity.PreciseConvexDecomposition] +struct = "EnumItem" +[Enum.CollisionsMode.GetEnumItems] +args = [] +method = true + +[Enum.CollisionsMode.IncludeContactedMechanisms] +struct = "EnumItem" + +[Enum.CollisionsMode.NoCollisions] +struct = "EnumItem" + +[Enum.CollisionsMode.OtherMechanismsAnchored] +struct = "EnumItem" +[Enum.ComputerCameraMovementMode.CameraToggle] +struct = "EnumItem" + +[Enum.ComputerCameraMovementMode.Classic] +struct = "EnumItem" + +[Enum.ComputerCameraMovementMode.Default] +struct = "EnumItem" + +[Enum.ComputerCameraMovementMode.Follow] +struct = "EnumItem" + +[Enum.ComputerCameraMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.ComputerCameraMovementMode.Orbital] +struct = "EnumItem" +[Enum.ComputerMovementMode.ClickToMove] +struct = "EnumItem" + +[Enum.ComputerMovementMode.Default] +struct = "EnumItem" + +[Enum.ComputerMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.ComputerMovementMode.KeyboardMouse] +struct = "EnumItem" +[Enum.ConnectionError.DisconnectBadhash] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectBlockedIP] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectBySecurityPolicy] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectCloudEditKick] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectConnectionLost] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectDevMaintenance] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectDuplicatePlayer] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectDuplicateTicket] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectErrors] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectEvicted] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectHashTimeout] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectIdle] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectIllegalTeleport] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectLuaKick] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectNewSecurityKeyMismatch] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectOnRemoteSysStats] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectPlayerless] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectProtocolMismatch] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectRaknetErrors] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectReceivePacketError] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectReceivePacketStreamError] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectRejoin] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectRobloxMaintenance] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectSecurityKeyMismatch] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectSendPacketError] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectTimeout] +struct = "EnumItem" + +[Enum.ConnectionError.DisconnectWrongVersion] +struct = "EnumItem" + +[Enum.ConnectionError.GetEnumItems] +args = [] +method = true + +[Enum.ConnectionError.OK] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchCustomMessage] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchDisabled] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchError] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchErrors] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchFlooded] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchGameEnded] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchGameFull] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchHashException] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchHashExpired] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchHttpError] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchOtherError] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchPartyCannotFit] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchRestricted] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchUnauthorized] +struct = "EnumItem" + +[Enum.ConnectionError.PlacelaunchUserLeft] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportErrors] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportFailure] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportFlooded] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportGameEnded] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportGameFull] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportGameNotFound] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportIsTeleporting] +struct = "EnumItem" + +[Enum.ConnectionError.TeleportUnauthorized] +struct = "EnumItem" +[Enum.ConnectionState.Connected] +struct = "EnumItem" + +[Enum.ConnectionState.Disconnected] +struct = "EnumItem" + +[Enum.ConnectionState.GetEnumItems] +args = [] +method = true +[Enum.ContextActionPriority.Default] +struct = "EnumItem" + +[Enum.ContextActionPriority.GetEnumItems] +args = [] +method = true + +[Enum.ContextActionPriority.High] +struct = "EnumItem" + +[Enum.ContextActionPriority.Low] +struct = "EnumItem" + +[Enum.ContextActionPriority.Medium] +struct = "EnumItem" +[Enum.ContextActionResult.GetEnumItems] +args = [] +method = true + +[Enum.ContextActionResult.Pass] +struct = "EnumItem" + +[Enum.ContextActionResult.Sink] +struct = "EnumItem" +[Enum.ControlMode.Classic] +struct = "EnumItem" + +[Enum.ControlMode.GetEnumItems] +args = [] +method = true + +[Enum.ControlMode.MouseLockSwitch] +struct = "EnumItem" +[Enum.CoreGuiType.All] +struct = "EnumItem" + +[Enum.CoreGuiType.Backpack] +struct = "EnumItem" + +[Enum.CoreGuiType.Chat] +struct = "EnumItem" + +[Enum.CoreGuiType.EmotesMenu] +struct = "EnumItem" + +[Enum.CoreGuiType.GetEnumItems] +args = [] +method = true + +[Enum.CoreGuiType.Health] +struct = "EnumItem" + +[Enum.CoreGuiType.PlayerList] +struct = "EnumItem" +[Enum.CreatorType.GetEnumItems] +args = [] +method = true + +[Enum.CreatorType.Group] +struct = "EnumItem" + +[Enum.CreatorType.User] +struct = "EnumItem" +[Enum.CurrencyType.Default] +struct = "EnumItem" + +[Enum.CurrencyType.GetEnumItems] +args = [] +method = true + +[Enum.CurrencyType.Robux] +struct = "EnumItem" + +[Enum.CurrencyType.Tix] +struct = "EnumItem" +[Enum.CustomCameraMode.Classic] +struct = "EnumItem" + +[Enum.CustomCameraMode.Default] +struct = "EnumItem" + +[Enum.CustomCameraMode.Follow] +struct = "EnumItem" + +[Enum.CustomCameraMode.GetEnumItems] +args = [] +method = true +[Enum.DataStoreRequestType.GetAsync] +struct = "EnumItem" + +[Enum.DataStoreRequestType.GetEnumItems] +args = [] +method = true + +[Enum.DataStoreRequestType.GetSortedAsync] +struct = "EnumItem" + +[Enum.DataStoreRequestType.OnUpdate] +struct = "EnumItem" + +[Enum.DataStoreRequestType.SetIncrementAsync] +struct = "EnumItem" + +[Enum.DataStoreRequestType.SetIncrementSortedAsync] +struct = "EnumItem" + +[Enum.DataStoreRequestType.UpdateAsync] +struct = "EnumItem" +[Enum.DevCameraOcclusionMode.GetEnumItems] +args = [] +method = true + +[Enum.DevCameraOcclusionMode.Invisicam] +struct = "EnumItem" + +[Enum.DevCameraOcclusionMode.Zoom] +struct = "EnumItem" +[Enum.DevComputerCameraMovementMode.CameraToggle] +struct = "EnumItem" + +[Enum.DevComputerCameraMovementMode.Classic] +struct = "EnumItem" + +[Enum.DevComputerCameraMovementMode.Follow] +struct = "EnumItem" + +[Enum.DevComputerCameraMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.DevComputerCameraMovementMode.Orbital] +struct = "EnumItem" + +[Enum.DevComputerCameraMovementMode.UserChoice] +struct = "EnumItem" +[Enum.DevComputerMovementMode.ClickToMove] +struct = "EnumItem" + +[Enum.DevComputerMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.DevComputerMovementMode.KeyboardMouse] +struct = "EnumItem" + +[Enum.DevComputerMovementMode.Scriptable] +struct = "EnumItem" + +[Enum.DevComputerMovementMode.UserChoice] +struct = "EnumItem" +[Enum.DevTouchCameraMovementMode.Classic] +struct = "EnumItem" + +[Enum.DevTouchCameraMovementMode.Follow] +struct = "EnumItem" + +[Enum.DevTouchCameraMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.DevTouchCameraMovementMode.Orbital] +struct = "EnumItem" + +[Enum.DevTouchCameraMovementMode.UserChoice] +struct = "EnumItem" +[Enum.DevTouchMovementMode.ClickToMove] +struct = "EnumItem" + +[Enum.DevTouchMovementMode.DPad] +struct = "EnumItem" + +[Enum.DevTouchMovementMode.DynamicThumbstick] +struct = "EnumItem" + +[Enum.DevTouchMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.DevTouchMovementMode.Scriptable] +struct = "EnumItem" + +[Enum.DevTouchMovementMode.Thumbpad] +struct = "EnumItem" + +[Enum.DevTouchMovementMode.Thumbstick] +struct = "EnumItem" + +[Enum.DevTouchMovementMode.UserChoice] +struct = "EnumItem" +[Enum.DeveloperMemoryTag.Animation] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GetEnumItems] +args = [] +method = true + +[Enum.DeveloperMemoryTag.GraphicsMeshParts] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsParticles] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsParts] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsSolidModels] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsSpatialHash] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsTerrain] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsTexture] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.GraphicsTextureCharacter] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Gui] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.HttpCache] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Instances] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Internal] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.LuaHeap] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Navigation] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.PhysicsCollision] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.PhysicsParts] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Script] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Signals] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.Sounds] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.StreamingSounds] +struct = "EnumItem" + +[Enum.DeveloperMemoryTag.TerrainVoxels] +struct = "EnumItem" +[Enum.DeviceType.Desktop] +struct = "EnumItem" + +[Enum.DeviceType.GetEnumItems] +args = [] +method = true + +[Enum.DeviceType.Phone] +struct = "EnumItem" + +[Enum.DeviceType.Tablet] +struct = "EnumItem" + +[Enum.DeviceType.Unknown] +struct = "EnumItem" +[Enum.DialogBehaviorType.GetEnumItems] +args = [] +method = true + +[Enum.DialogBehaviorType.MultiplePlayers] +struct = "EnumItem" + +[Enum.DialogBehaviorType.SinglePlayer] +struct = "EnumItem" +[Enum.DialogPurpose.GetEnumItems] +args = [] +method = true + +[Enum.DialogPurpose.Help] +struct = "EnumItem" + +[Enum.DialogPurpose.Quest] +struct = "EnumItem" + +[Enum.DialogPurpose.Shop] +struct = "EnumItem" +[Enum.DialogTone.Enemy] +struct = "EnumItem" + +[Enum.DialogTone.Friendly] +struct = "EnumItem" + +[Enum.DialogTone.GetEnumItems] +args = [] +method = true + +[Enum.DialogTone.Neutral] +struct = "EnumItem" +[Enum.DominantAxis.GetEnumItems] +args = [] +method = true + +[Enum.DominantAxis.Height] +struct = "EnumItem" + +[Enum.DominantAxis.Width] +struct = "EnumItem" +[Enum.DraftStatusCode.DraftCommitted] +struct = "EnumItem" + +[Enum.DraftStatusCode.DraftOutdated] +struct = "EnumItem" + +[Enum.DraftStatusCode.GetEnumItems] +args = [] +method = true + +[Enum.DraftStatusCode.OK] +struct = "EnumItem" + +[Enum.DraftStatusCode.ScriptRemoved] +struct = "EnumItem" +[Enum.EasingDirection.GetEnumItems] +args = [] +method = true + +[Enum.EasingDirection.In] +struct = "EnumItem" + +[Enum.EasingDirection.InOut] +struct = "EnumItem" + +[Enum.EasingDirection.Out] +struct = "EnumItem" +[Enum.EasingStyle.Back] +struct = "EnumItem" + +[Enum.EasingStyle.Bounce] +struct = "EnumItem" + +[Enum.EasingStyle.Circular] +struct = "EnumItem" + +[Enum.EasingStyle.Cubic] +struct = "EnumItem" + +[Enum.EasingStyle.Elastic] +struct = "EnumItem" + +[Enum.EasingStyle.Exponential] +struct = "EnumItem" + +[Enum.EasingStyle.GetEnumItems] +args = [] +method = true + +[Enum.EasingStyle.Linear] +struct = "EnumItem" + +[Enum.EasingStyle.Quad] +struct = "EnumItem" + +[Enum.EasingStyle.Quart] +struct = "EnumItem" + +[Enum.EasingStyle.Quint] +struct = "EnumItem" + +[Enum.EasingStyle.Sine] +struct = "EnumItem" +[Enum.ElasticBehavior.Always] +struct = "EnumItem" + +[Enum.ElasticBehavior.GetEnumItems] +args = [] +method = true + +[Enum.ElasticBehavior.Never] +struct = "EnumItem" + +[Enum.ElasticBehavior.WhenScrollable] +struct = "EnumItem" +[Enum.EnviromentalPhysicsThrottle.Always] +struct = "EnumItem" + +[Enum.EnviromentalPhysicsThrottle.DefaultAuto] +struct = "EnumItem" + +[Enum.EnviromentalPhysicsThrottle.Disabled] +struct = "EnumItem" + +[Enum.EnviromentalPhysicsThrottle.GetEnumItems] +args = [] +method = true + +[Enum.EnviromentalPhysicsThrottle.Skip16] +struct = "EnumItem" + +[Enum.EnviromentalPhysicsThrottle.Skip2] +struct = "EnumItem" + +[Enum.EnviromentalPhysicsThrottle.Skip4] +struct = "EnumItem" + +[Enum.EnviromentalPhysicsThrottle.Skip8] +struct = "EnumItem" +[Enum.ExplosionType.Craters] +struct = "EnumItem" + +[Enum.ExplosionType.GetEnumItems] +args = [] +method = true + +[Enum.ExplosionType.NoCraters] +struct = "EnumItem" +[Enum.FillDirection.GetEnumItems] +args = [] +method = true + +[Enum.FillDirection.Horizontal] +struct = "EnumItem" + +[Enum.FillDirection.Vertical] +struct = "EnumItem" +[Enum.FilterResult.Accepted] +struct = "EnumItem" + +[Enum.FilterResult.GetEnumItems] +args = [] +method = true + +[Enum.FilterResult.Rejected] +struct = "EnumItem" +[Enum.Font.Antique] +struct = "EnumItem" + +[Enum.Font.Arcade] +struct = "EnumItem" + +[Enum.Font.Arial] +struct = "EnumItem" + +[Enum.Font.ArialBold] +struct = "EnumItem" + +[Enum.Font.Bodoni] +struct = "EnumItem" + +[Enum.Font.Cartoon] +struct = "EnumItem" + +[Enum.Font.Code] +struct = "EnumItem" + +[Enum.Font.Fantasy] +struct = "EnumItem" + +[Enum.Font.Garamond] +struct = "EnumItem" + +[Enum.Font.GetEnumItems] +args = [] +method = true + +[Enum.Font.Gotham] +struct = "EnumItem" + +[Enum.Font.GothamBlack] +struct = "EnumItem" + +[Enum.Font.GothamBold] +struct = "EnumItem" + +[Enum.Font.GothamSemibold] +struct = "EnumItem" + +[Enum.Font.Highway] +struct = "EnumItem" + +[Enum.Font.Legacy] +struct = "EnumItem" + +[Enum.Font.SciFi] +struct = "EnumItem" + +[Enum.Font.SourceSans] +struct = "EnumItem" + +[Enum.Font.SourceSansBold] +struct = "EnumItem" + +[Enum.Font.SourceSansItalic] +struct = "EnumItem" + +[Enum.Font.SourceSansLight] +struct = "EnumItem" + +[Enum.Font.SourceSansSemibold] +struct = "EnumItem" +[Enum.FontSize.GetEnumItems] +args = [] +method = true + +[Enum.FontSize.Size10] +struct = "EnumItem" + +[Enum.FontSize.Size11] +struct = "EnumItem" + +[Enum.FontSize.Size12] +struct = "EnumItem" + +[Enum.FontSize.Size14] +struct = "EnumItem" + +[Enum.FontSize.Size18] +struct = "EnumItem" + +[Enum.FontSize.Size24] +struct = "EnumItem" + +[Enum.FontSize.Size28] +struct = "EnumItem" + +[Enum.FontSize.Size32] +struct = "EnumItem" + +[Enum.FontSize.Size36] +struct = "EnumItem" + +[Enum.FontSize.Size42] +struct = "EnumItem" + +[Enum.FontSize.Size48] +struct = "EnumItem" + +[Enum.FontSize.Size60] +struct = "EnumItem" + +[Enum.FontSize.Size8] +struct = "EnumItem" + +[Enum.FontSize.Size9] +struct = "EnumItem" + +[Enum.FontSize.Size96] +struct = "EnumItem" +[Enum.FormFactor.Brick] +struct = "EnumItem" + +[Enum.FormFactor.Custom] +struct = "EnumItem" + +[Enum.FormFactor.GetEnumItems] +args = [] +method = true + +[Enum.FormFactor.Plate] +struct = "EnumItem" + +[Enum.FormFactor.Symmetric] +struct = "EnumItem" +[Enum.FrameStyle.ChatBlue] +struct = "EnumItem" + +[Enum.FrameStyle.ChatGreen] +struct = "EnumItem" + +[Enum.FrameStyle.ChatRed] +struct = "EnumItem" + +[Enum.FrameStyle.Custom] +struct = "EnumItem" + +[Enum.FrameStyle.DropShadow] +struct = "EnumItem" + +[Enum.FrameStyle.GetEnumItems] +args = [] +method = true + +[Enum.FrameStyle.RobloxRound] +struct = "EnumItem" + +[Enum.FrameStyle.RobloxSquare] +struct = "EnumItem" +[Enum.FramerateManagerMode.Automatic] +struct = "EnumItem" + +[Enum.FramerateManagerMode.GetEnumItems] +args = [] +method = true + +[Enum.FramerateManagerMode.Off] +struct = "EnumItem" + +[Enum.FramerateManagerMode.On] +struct = "EnumItem" +[Enum.FriendRequestEvent.Accept] +struct = "EnumItem" + +[Enum.FriendRequestEvent.Deny] +struct = "EnumItem" + +[Enum.FriendRequestEvent.GetEnumItems] +args = [] +method = true + +[Enum.FriendRequestEvent.Issue] +struct = "EnumItem" + +[Enum.FriendRequestEvent.Revoke] +struct = "EnumItem" +[Enum.FriendStatus.Friend] +struct = "EnumItem" + +[Enum.FriendStatus.FriendRequestReceived] +struct = "EnumItem" + +[Enum.FriendStatus.FriendRequestSent] +struct = "EnumItem" + +[Enum.FriendStatus.GetEnumItems] +args = [] +method = true + +[Enum.FriendStatus.NotFriend] +struct = "EnumItem" + +[Enum.FriendStatus.Unknown] +struct = "EnumItem" +[Enum.FunctionalTestResult.Error] +struct = "EnumItem" + +[Enum.FunctionalTestResult.GetEnumItems] +args = [] +method = true + +[Enum.FunctionalTestResult.Passed] +struct = "EnumItem" + +[Enum.FunctionalTestResult.Warning] +struct = "EnumItem" +[Enum.GameAvatarType.GetEnumItems] +args = [] +method = true + +[Enum.GameAvatarType.PlayerChoice] +struct = "EnumItem" + +[Enum.GameAvatarType.R15] +struct = "EnumItem" + +[Enum.GameAvatarType.R6] +struct = "EnumItem" +[Enum.GearGenreSetting.AllGenres] +struct = "EnumItem" + +[Enum.GearGenreSetting.GetEnumItems] +args = [] +method = true + +[Enum.GearGenreSetting.MatchingGenreOnly] +struct = "EnumItem" +[Enum.GearType.BuildingTools] +struct = "EnumItem" + +[Enum.GearType.Explosives] +struct = "EnumItem" + +[Enum.GearType.GetEnumItems] +args = [] +method = true + +[Enum.GearType.MeleeWeapons] +struct = "EnumItem" + +[Enum.GearType.MusicalInstruments] +struct = "EnumItem" + +[Enum.GearType.NavigationEnhancers] +struct = "EnumItem" + +[Enum.GearType.PowerUps] +struct = "EnumItem" + +[Enum.GearType.RangedWeapons] +struct = "EnumItem" + +[Enum.GearType.SocialItems] +struct = "EnumItem" + +[Enum.GearType.Transport] +struct = "EnumItem" +[Enum.Genre.Adventure] +struct = "EnumItem" + +[Enum.Genre.All] +struct = "EnumItem" + +[Enum.Genre.Fantasy] +struct = "EnumItem" + +[Enum.Genre.Funny] +struct = "EnumItem" + +[Enum.Genre.GetEnumItems] +args = [] +method = true + +[Enum.Genre.Ninja] +struct = "EnumItem" + +[Enum.Genre.Pirate] +struct = "EnumItem" + +[Enum.Genre.Scary] +struct = "EnumItem" + +[Enum.Genre.SciFi] +struct = "EnumItem" + +[Enum.Genre.SkatePark] +struct = "EnumItem" + +[Enum.Genre.Sports] +struct = "EnumItem" + +[Enum.Genre.TownAndCity] +struct = "EnumItem" + +[Enum.Genre.Tutorial] +struct = "EnumItem" + +[Enum.Genre.War] +struct = "EnumItem" + +[Enum.Genre.WildWest] +struct = "EnumItem" +[Enum.GraphicsMode.Automatic] +struct = "EnumItem" + +[Enum.GraphicsMode.Direct3D11] +struct = "EnumItem" + +[Enum.GraphicsMode.Direct3D9] +struct = "EnumItem" + +[Enum.GraphicsMode.GetEnumItems] +args = [] +method = true + +[Enum.GraphicsMode.Metal] +struct = "EnumItem" + +[Enum.GraphicsMode.NoGraphics] +struct = "EnumItem" + +[Enum.GraphicsMode.OpenGL] +struct = "EnumItem" + +[Enum.GraphicsMode.Vulkan] +struct = "EnumItem" +[Enum.HandlesStyle.GetEnumItems] +args = [] +method = true + +[Enum.HandlesStyle.Movement] +struct = "EnumItem" + +[Enum.HandlesStyle.Resize] +struct = "EnumItem" +[Enum.HorizontalAlignment.Center] +struct = "EnumItem" + +[Enum.HorizontalAlignment.GetEnumItems] +args = [] +method = true + +[Enum.HorizontalAlignment.Left] +struct = "EnumItem" + +[Enum.HorizontalAlignment.Right] +struct = "EnumItem" +[Enum.HoverAnimateSpeed.Fast] +struct = "EnumItem" + +[Enum.HoverAnimateSpeed.GetEnumItems] +args = [] +method = true + +[Enum.HoverAnimateSpeed.Medium] +struct = "EnumItem" + +[Enum.HoverAnimateSpeed.Slow] +struct = "EnumItem" + +[Enum.HoverAnimateSpeed.VeryFast] +struct = "EnumItem" + +[Enum.HoverAnimateSpeed.VerySlow] +struct = "EnumItem" +[Enum.HttpCachePolicy.DataOnly] +struct = "EnumItem" + +[Enum.HttpCachePolicy.Default] +struct = "EnumItem" + +[Enum.HttpCachePolicy.Full] +struct = "EnumItem" + +[Enum.HttpCachePolicy.GetEnumItems] +args = [] +method = true + +[Enum.HttpCachePolicy.InternalRedirectRefresh] +struct = "EnumItem" + +[Enum.HttpCachePolicy.None] +struct = "EnumItem" +[Enum.HttpContentType.ApplicationJson] +struct = "EnumItem" + +[Enum.HttpContentType.ApplicationUrlEncoded] +struct = "EnumItem" + +[Enum.HttpContentType.ApplicationXml] +struct = "EnumItem" + +[Enum.HttpContentType.GetEnumItems] +args = [] +method = true + +[Enum.HttpContentType.TextPlain] +struct = "EnumItem" + +[Enum.HttpContentType.TextXml] +struct = "EnumItem" +[Enum.HttpError.Aborted] +struct = "EnumItem" + +[Enum.HttpError.ConnectFail] +struct = "EnumItem" + +[Enum.HttpError.DnsResolve] +struct = "EnumItem" + +[Enum.HttpError.GetEnumItems] +args = [] +method = true + +[Enum.HttpError.InvalidRedirect] +struct = "EnumItem" + +[Enum.HttpError.InvalidUrl] +struct = "EnumItem" + +[Enum.HttpError.NetFail] +struct = "EnumItem" + +[Enum.HttpError.OK] +struct = "EnumItem" + +[Enum.HttpError.OutOfMemory] +struct = "EnumItem" + +[Enum.HttpError.SslConnectFail] +struct = "EnumItem" + +[Enum.HttpError.TimedOut] +struct = "EnumItem" + +[Enum.HttpError.TooManyRedirects] +struct = "EnumItem" + +[Enum.HttpError.Unknown] +struct = "EnumItem" +[Enum.HttpRequestType.Analytics] +struct = "EnumItem" + +[Enum.HttpRequestType.Avatar] +struct = "EnumItem" + +[Enum.HttpRequestType.Chat] +struct = "EnumItem" + +[Enum.HttpRequestType.Default] +struct = "EnumItem" + +[Enum.HttpRequestType.GetEnumItems] +args = [] +method = true + +[Enum.HttpRequestType.Localization] +struct = "EnumItem" + +[Enum.HttpRequestType.MarketplaceService] +struct = "EnumItem" + +[Enum.HttpRequestType.Players] +struct = "EnumItem" +[Enum.HumanoidCollisionType.GetEnumItems] +args = [] +method = true + +[Enum.HumanoidCollisionType.InnerBox] +struct = "EnumItem" + +[Enum.HumanoidCollisionType.OuterBox] +struct = "EnumItem" +[Enum.HumanoidDisplayDistanceType.GetEnumItems] +args = [] +method = true + +[Enum.HumanoidDisplayDistanceType.None] +struct = "EnumItem" + +[Enum.HumanoidDisplayDistanceType.Subject] +struct = "EnumItem" + +[Enum.HumanoidDisplayDistanceType.Viewer] +struct = "EnumItem" +[Enum.HumanoidHealthDisplayType.AlwaysOff] +struct = "EnumItem" + +[Enum.HumanoidHealthDisplayType.AlwaysOn] +struct = "EnumItem" + +[Enum.HumanoidHealthDisplayType.DisplayWhenDamaged] +struct = "EnumItem" + +[Enum.HumanoidHealthDisplayType.GetEnumItems] +args = [] +method = true +[Enum.HumanoidRigType.GetEnumItems] +args = [] +method = true + +[Enum.HumanoidRigType.R15] +struct = "EnumItem" + +[Enum.HumanoidRigType.R6] +struct = "EnumItem" +[Enum.HumanoidStateType.Climbing] +struct = "EnumItem" + +[Enum.HumanoidStateType.Dead] +struct = "EnumItem" + +[Enum.HumanoidStateType.FallingDown] +struct = "EnumItem" + +[Enum.HumanoidStateType.Flying] +struct = "EnumItem" + +[Enum.HumanoidStateType.Freefall] +struct = "EnumItem" + +[Enum.HumanoidStateType.GetEnumItems] +args = [] +method = true + +[Enum.HumanoidStateType.GettingUp] +struct = "EnumItem" + +[Enum.HumanoidStateType.Jumping] +struct = "EnumItem" + +[Enum.HumanoidStateType.Landed] +struct = "EnumItem" + +[Enum.HumanoidStateType.None] +struct = "EnumItem" + +[Enum.HumanoidStateType.Physics] +struct = "EnumItem" + +[Enum.HumanoidStateType.PlatformStanding] +struct = "EnumItem" + +[Enum.HumanoidStateType.Ragdoll] +struct = "EnumItem" + +[Enum.HumanoidStateType.Running] +struct = "EnumItem" + +[Enum.HumanoidStateType.RunningNoPhysics] +struct = "EnumItem" + +[Enum.HumanoidStateType.Seated] +struct = "EnumItem" + +[Enum.HumanoidStateType.StrafingNoPhysics] +struct = "EnumItem" + +[Enum.HumanoidStateType.Swimming] +struct = "EnumItem" +[Enum.InOut.Center] +struct = "EnumItem" + +[Enum.InOut.Edge] +struct = "EnumItem" + +[Enum.InOut.GetEnumItems] +args = [] +method = true + +[Enum.InOut.Inset] +struct = "EnumItem" +[Enum.InfoType.Asset] +struct = "EnumItem" + +[Enum.InfoType.Bundle] +struct = "EnumItem" + +[Enum.InfoType.GamePass] +struct = "EnumItem" + +[Enum.InfoType.GetEnumItems] +args = [] +method = true + +[Enum.InfoType.Product] +struct = "EnumItem" + +[Enum.InfoType.Subscription] +struct = "EnumItem" +[Enum.InitialDockState.Bottom] +struct = "EnumItem" + +[Enum.InitialDockState.Float] +struct = "EnumItem" + +[Enum.InitialDockState.GetEnumItems] +args = [] +method = true + +[Enum.InitialDockState.Left] +struct = "EnumItem" + +[Enum.InitialDockState.Right] +struct = "EnumItem" + +[Enum.InitialDockState.Top] +struct = "EnumItem" +[Enum.InlineAlignment.Bottom] +struct = "EnumItem" + +[Enum.InlineAlignment.Center] +struct = "EnumItem" + +[Enum.InlineAlignment.GetEnumItems] +args = [] +method = true + +[Enum.InlineAlignment.Top] +struct = "EnumItem" +[Enum.InputType.Constant] +struct = "EnumItem" + +[Enum.InputType.GetEnumItems] +args = [] +method = true + +[Enum.InputType.NoInput] +struct = "EnumItem" + +[Enum.InputType.Sin] +struct = "EnumItem" +[Enum.JointCreationMode.All] +struct = "EnumItem" + +[Enum.JointCreationMode.GetEnumItems] +args = [] +method = true + +[Enum.JointCreationMode.None] +struct = "EnumItem" + +[Enum.JointCreationMode.Surface] +struct = "EnumItem" +[Enum.KeyCode.A] +struct = "EnumItem" + +[Enum.KeyCode.Ampersand] +struct = "EnumItem" + +[Enum.KeyCode.Asterisk] +struct = "EnumItem" + +[Enum.KeyCode.At] +struct = "EnumItem" + +[Enum.KeyCode.B] +struct = "EnumItem" + +[Enum.KeyCode.BackSlash] +struct = "EnumItem" + +[Enum.KeyCode.Backquote] +struct = "EnumItem" + +[Enum.KeyCode.Backspace] +struct = "EnumItem" + +[Enum.KeyCode.Break] +struct = "EnumItem" + +[Enum.KeyCode.ButtonA] +struct = "EnumItem" + +[Enum.KeyCode.ButtonB] +struct = "EnumItem" + +[Enum.KeyCode.ButtonL1] +struct = "EnumItem" + +[Enum.KeyCode.ButtonL2] +struct = "EnumItem" + +[Enum.KeyCode.ButtonL3] +struct = "EnumItem" + +[Enum.KeyCode.ButtonR1] +struct = "EnumItem" + +[Enum.KeyCode.ButtonR2] +struct = "EnumItem" + +[Enum.KeyCode.ButtonR3] +struct = "EnumItem" + +[Enum.KeyCode.ButtonSelect] +struct = "EnumItem" + +[Enum.KeyCode.ButtonStart] +struct = "EnumItem" + +[Enum.KeyCode.ButtonX] +struct = "EnumItem" + +[Enum.KeyCode.ButtonY] +struct = "EnumItem" + +[Enum.KeyCode.C] +struct = "EnumItem" + +[Enum.KeyCode.CapsLock] +struct = "EnumItem" + +[Enum.KeyCode.Caret] +struct = "EnumItem" + +[Enum.KeyCode.Clear] +struct = "EnumItem" + +[Enum.KeyCode.Colon] +struct = "EnumItem" + +[Enum.KeyCode.Comma] +struct = "EnumItem" + +[Enum.KeyCode.Compose] +struct = "EnumItem" + +[Enum.KeyCode.D] +struct = "EnumItem" + +[Enum.KeyCode.DPadDown] +struct = "EnumItem" + +[Enum.KeyCode.DPadLeft] +struct = "EnumItem" + +[Enum.KeyCode.DPadRight] +struct = "EnumItem" + +[Enum.KeyCode.DPadUp] +struct = "EnumItem" + +[Enum.KeyCode.Delete] +struct = "EnumItem" + +[Enum.KeyCode.Dollar] +struct = "EnumItem" + +[Enum.KeyCode.Down] +struct = "EnumItem" + +[Enum.KeyCode.E] +struct = "EnumItem" + +[Enum.KeyCode.Eight] +struct = "EnumItem" + +[Enum.KeyCode.End] +struct = "EnumItem" + +[Enum.KeyCode.Equals] +struct = "EnumItem" + +[Enum.KeyCode.Escape] +struct = "EnumItem" + +[Enum.KeyCode.Euro] +struct = "EnumItem" + +[Enum.KeyCode.F] +struct = "EnumItem" + +[Enum.KeyCode.F1] +struct = "EnumItem" + +[Enum.KeyCode.F10] +struct = "EnumItem" + +[Enum.KeyCode.F11] +struct = "EnumItem" + +[Enum.KeyCode.F12] +struct = "EnumItem" + +[Enum.KeyCode.F13] +struct = "EnumItem" + +[Enum.KeyCode.F14] +struct = "EnumItem" + +[Enum.KeyCode.F15] +struct = "EnumItem" + +[Enum.KeyCode.F2] +struct = "EnumItem" + +[Enum.KeyCode.F3] +struct = "EnumItem" + +[Enum.KeyCode.F4] +struct = "EnumItem" + +[Enum.KeyCode.F5] +struct = "EnumItem" + +[Enum.KeyCode.F6] +struct = "EnumItem" + +[Enum.KeyCode.F7] +struct = "EnumItem" + +[Enum.KeyCode.F8] +struct = "EnumItem" + +[Enum.KeyCode.F9] +struct = "EnumItem" + +[Enum.KeyCode.Five] +struct = "EnumItem" + +[Enum.KeyCode.Four] +struct = "EnumItem" + +[Enum.KeyCode.G] +struct = "EnumItem" + +[Enum.KeyCode.GetEnumItems] +args = [] +method = true + +[Enum.KeyCode.GreaterThan] +struct = "EnumItem" + +[Enum.KeyCode.H] +struct = "EnumItem" + +[Enum.KeyCode.Hash] +struct = "EnumItem" + +[Enum.KeyCode.Help] +struct = "EnumItem" + +[Enum.KeyCode.Home] +struct = "EnumItem" + +[Enum.KeyCode.I] +struct = "EnumItem" + +[Enum.KeyCode.Insert] +struct = "EnumItem" + +[Enum.KeyCode.J] +struct = "EnumItem" + +[Enum.KeyCode.K] +struct = "EnumItem" + +[Enum.KeyCode.KeypadDivide] +struct = "EnumItem" + +[Enum.KeyCode.KeypadEight] +struct = "EnumItem" + +[Enum.KeyCode.KeypadEnter] +struct = "EnumItem" + +[Enum.KeyCode.KeypadEquals] +struct = "EnumItem" + +[Enum.KeyCode.KeypadFive] +struct = "EnumItem" + +[Enum.KeyCode.KeypadFour] +struct = "EnumItem" + +[Enum.KeyCode.KeypadMinus] +struct = "EnumItem" + +[Enum.KeyCode.KeypadMultiply] +struct = "EnumItem" + +[Enum.KeyCode.KeypadNine] +struct = "EnumItem" + +[Enum.KeyCode.KeypadOne] +struct = "EnumItem" + +[Enum.KeyCode.KeypadPeriod] +struct = "EnumItem" + +[Enum.KeyCode.KeypadPlus] +struct = "EnumItem" + +[Enum.KeyCode.KeypadSeven] +struct = "EnumItem" + +[Enum.KeyCode.KeypadSix] +struct = "EnumItem" + +[Enum.KeyCode.KeypadThree] +struct = "EnumItem" + +[Enum.KeyCode.KeypadTwo] +struct = "EnumItem" + +[Enum.KeyCode.KeypadZero] +struct = "EnumItem" + +[Enum.KeyCode.L] +struct = "EnumItem" + +[Enum.KeyCode.Left] +struct = "EnumItem" + +[Enum.KeyCode.LeftAlt] +struct = "EnumItem" + +[Enum.KeyCode.LeftBracket] +struct = "EnumItem" + +[Enum.KeyCode.LeftControl] +struct = "EnumItem" + +[Enum.KeyCode.LeftCurly] +struct = "EnumItem" + +[Enum.KeyCode.LeftMeta] +struct = "EnumItem" + +[Enum.KeyCode.LeftParenthesis] +struct = "EnumItem" + +[Enum.KeyCode.LeftShift] +struct = "EnumItem" + +[Enum.KeyCode.LeftSuper] +struct = "EnumItem" + +[Enum.KeyCode.LessThan] +struct = "EnumItem" + +[Enum.KeyCode.M] +struct = "EnumItem" + +[Enum.KeyCode.Menu] +struct = "EnumItem" + +[Enum.KeyCode.Minus] +struct = "EnumItem" + +[Enum.KeyCode.Mode] +struct = "EnumItem" + +[Enum.KeyCode.N] +struct = "EnumItem" + +[Enum.KeyCode.Nine] +struct = "EnumItem" + +[Enum.KeyCode.NumLock] +struct = "EnumItem" + +[Enum.KeyCode.O] +struct = "EnumItem" + +[Enum.KeyCode.One] +struct = "EnumItem" + +[Enum.KeyCode.P] +struct = "EnumItem" + +[Enum.KeyCode.PageDown] +struct = "EnumItem" + +[Enum.KeyCode.PageUp] +struct = "EnumItem" + +[Enum.KeyCode.Pause] +struct = "EnumItem" + +[Enum.KeyCode.Percent] +struct = "EnumItem" + +[Enum.KeyCode.Period] +struct = "EnumItem" + +[Enum.KeyCode.Pipe] +struct = "EnumItem" + +[Enum.KeyCode.Plus] +struct = "EnumItem" + +[Enum.KeyCode.Power] +struct = "EnumItem" + +[Enum.KeyCode.Print] +struct = "EnumItem" + +[Enum.KeyCode.Q] +struct = "EnumItem" + +[Enum.KeyCode.Question] +struct = "EnumItem" + +[Enum.KeyCode.Quote] +struct = "EnumItem" + +[Enum.KeyCode.QuotedDouble] +struct = "EnumItem" + +[Enum.KeyCode.R] +struct = "EnumItem" + +[Enum.KeyCode.Return] +struct = "EnumItem" + +[Enum.KeyCode.Right] +struct = "EnumItem" + +[Enum.KeyCode.RightAlt] +struct = "EnumItem" + +[Enum.KeyCode.RightBracket] +struct = "EnumItem" + +[Enum.KeyCode.RightControl] +struct = "EnumItem" + +[Enum.KeyCode.RightCurly] +struct = "EnumItem" + +[Enum.KeyCode.RightMeta] +struct = "EnumItem" + +[Enum.KeyCode.RightParenthesis] +struct = "EnumItem" + +[Enum.KeyCode.RightShift] +struct = "EnumItem" + +[Enum.KeyCode.RightSuper] +struct = "EnumItem" + +[Enum.KeyCode.S] +struct = "EnumItem" + +[Enum.KeyCode.ScrollLock] +struct = "EnumItem" + +[Enum.KeyCode.Semicolon] +struct = "EnumItem" + +[Enum.KeyCode.Seven] +struct = "EnumItem" + +[Enum.KeyCode.Six] +struct = "EnumItem" + +[Enum.KeyCode.Slash] +struct = "EnumItem" + +[Enum.KeyCode.Space] +struct = "EnumItem" + +[Enum.KeyCode.SysReq] +struct = "EnumItem" + +[Enum.KeyCode.T] +struct = "EnumItem" + +[Enum.KeyCode.Tab] +struct = "EnumItem" + +[Enum.KeyCode.Three] +struct = "EnumItem" + +[Enum.KeyCode.Thumbstick1] +struct = "EnumItem" + +[Enum.KeyCode.Thumbstick2] +struct = "EnumItem" + +[Enum.KeyCode.Tilde] +struct = "EnumItem" + +[Enum.KeyCode.Two] +struct = "EnumItem" + +[Enum.KeyCode.U] +struct = "EnumItem" + +[Enum.KeyCode.Underscore] +struct = "EnumItem" + +[Enum.KeyCode.Undo] +struct = "EnumItem" + +[Enum.KeyCode.Unknown] +struct = "EnumItem" + +[Enum.KeyCode.Up] +struct = "EnumItem" + +[Enum.KeyCode.V] +struct = "EnumItem" + +[Enum.KeyCode.W] +struct = "EnumItem" + +[Enum.KeyCode.World0] +struct = "EnumItem" + +[Enum.KeyCode.World1] +struct = "EnumItem" + +[Enum.KeyCode.World10] +struct = "EnumItem" + +[Enum.KeyCode.World11] +struct = "EnumItem" + +[Enum.KeyCode.World12] +struct = "EnumItem" + +[Enum.KeyCode.World13] +struct = "EnumItem" + +[Enum.KeyCode.World14] +struct = "EnumItem" + +[Enum.KeyCode.World15] +struct = "EnumItem" + +[Enum.KeyCode.World16] +struct = "EnumItem" + +[Enum.KeyCode.World17] +struct = "EnumItem" + +[Enum.KeyCode.World18] +struct = "EnumItem" + +[Enum.KeyCode.World19] +struct = "EnumItem" + +[Enum.KeyCode.World2] +struct = "EnumItem" + +[Enum.KeyCode.World20] +struct = "EnumItem" + +[Enum.KeyCode.World21] +struct = "EnumItem" + +[Enum.KeyCode.World22] +struct = "EnumItem" + +[Enum.KeyCode.World23] +struct = "EnumItem" + +[Enum.KeyCode.World24] +struct = "EnumItem" + +[Enum.KeyCode.World25] +struct = "EnumItem" + +[Enum.KeyCode.World26] +struct = "EnumItem" + +[Enum.KeyCode.World27] +struct = "EnumItem" + +[Enum.KeyCode.World28] +struct = "EnumItem" + +[Enum.KeyCode.World29] +struct = "EnumItem" + +[Enum.KeyCode.World3] +struct = "EnumItem" + +[Enum.KeyCode.World30] +struct = "EnumItem" + +[Enum.KeyCode.World31] +struct = "EnumItem" + +[Enum.KeyCode.World32] +struct = "EnumItem" + +[Enum.KeyCode.World33] +struct = "EnumItem" + +[Enum.KeyCode.World34] +struct = "EnumItem" + +[Enum.KeyCode.World35] +struct = "EnumItem" + +[Enum.KeyCode.World36] +struct = "EnumItem" + +[Enum.KeyCode.World37] +struct = "EnumItem" + +[Enum.KeyCode.World38] +struct = "EnumItem" + +[Enum.KeyCode.World39] +struct = "EnumItem" + +[Enum.KeyCode.World4] +struct = "EnumItem" + +[Enum.KeyCode.World40] +struct = "EnumItem" + +[Enum.KeyCode.World41] +struct = "EnumItem" + +[Enum.KeyCode.World42] +struct = "EnumItem" + +[Enum.KeyCode.World43] +struct = "EnumItem" + +[Enum.KeyCode.World44] +struct = "EnumItem" + +[Enum.KeyCode.World45] +struct = "EnumItem" + +[Enum.KeyCode.World46] +struct = "EnumItem" + +[Enum.KeyCode.World47] +struct = "EnumItem" + +[Enum.KeyCode.World48] +struct = "EnumItem" + +[Enum.KeyCode.World49] +struct = "EnumItem" + +[Enum.KeyCode.World5] +struct = "EnumItem" + +[Enum.KeyCode.World50] +struct = "EnumItem" + +[Enum.KeyCode.World51] +struct = "EnumItem" + +[Enum.KeyCode.World52] +struct = "EnumItem" + +[Enum.KeyCode.World53] +struct = "EnumItem" + +[Enum.KeyCode.World54] +struct = "EnumItem" + +[Enum.KeyCode.World55] +struct = "EnumItem" + +[Enum.KeyCode.World56] +struct = "EnumItem" + +[Enum.KeyCode.World57] +struct = "EnumItem" + +[Enum.KeyCode.World58] +struct = "EnumItem" + +[Enum.KeyCode.World59] +struct = "EnumItem" + +[Enum.KeyCode.World6] +struct = "EnumItem" + +[Enum.KeyCode.World60] +struct = "EnumItem" + +[Enum.KeyCode.World61] +struct = "EnumItem" + +[Enum.KeyCode.World62] +struct = "EnumItem" + +[Enum.KeyCode.World63] +struct = "EnumItem" + +[Enum.KeyCode.World64] +struct = "EnumItem" + +[Enum.KeyCode.World65] +struct = "EnumItem" + +[Enum.KeyCode.World66] +struct = "EnumItem" + +[Enum.KeyCode.World67] +struct = "EnumItem" + +[Enum.KeyCode.World68] +struct = "EnumItem" + +[Enum.KeyCode.World69] +struct = "EnumItem" + +[Enum.KeyCode.World7] +struct = "EnumItem" + +[Enum.KeyCode.World70] +struct = "EnumItem" + +[Enum.KeyCode.World71] +struct = "EnumItem" + +[Enum.KeyCode.World72] +struct = "EnumItem" + +[Enum.KeyCode.World73] +struct = "EnumItem" + +[Enum.KeyCode.World74] +struct = "EnumItem" + +[Enum.KeyCode.World75] +struct = "EnumItem" + +[Enum.KeyCode.World76] +struct = "EnumItem" + +[Enum.KeyCode.World77] +struct = "EnumItem" + +[Enum.KeyCode.World78] +struct = "EnumItem" + +[Enum.KeyCode.World79] +struct = "EnumItem" + +[Enum.KeyCode.World8] +struct = "EnumItem" + +[Enum.KeyCode.World80] +struct = "EnumItem" + +[Enum.KeyCode.World81] +struct = "EnumItem" + +[Enum.KeyCode.World82] +struct = "EnumItem" + +[Enum.KeyCode.World83] +struct = "EnumItem" + +[Enum.KeyCode.World84] +struct = "EnumItem" + +[Enum.KeyCode.World85] +struct = "EnumItem" + +[Enum.KeyCode.World86] +struct = "EnumItem" + +[Enum.KeyCode.World87] +struct = "EnumItem" + +[Enum.KeyCode.World88] +struct = "EnumItem" + +[Enum.KeyCode.World89] +struct = "EnumItem" + +[Enum.KeyCode.World9] +struct = "EnumItem" + +[Enum.KeyCode.World90] +struct = "EnumItem" + +[Enum.KeyCode.World91] +struct = "EnumItem" + +[Enum.KeyCode.World92] +struct = "EnumItem" + +[Enum.KeyCode.World93] +struct = "EnumItem" + +[Enum.KeyCode.World94] +struct = "EnumItem" + +[Enum.KeyCode.World95] +struct = "EnumItem" + +[Enum.KeyCode.X] +struct = "EnumItem" + +[Enum.KeyCode.Y] +struct = "EnumItem" + +[Enum.KeyCode.Z] +struct = "EnumItem" + +[Enum.KeyCode.Zero] +struct = "EnumItem" +[Enum.KeywordFilterType.Exclude] +struct = "EnumItem" + +[Enum.KeywordFilterType.GetEnumItems] +args = [] +method = true + +[Enum.KeywordFilterType.Include] +struct = "EnumItem" +[Enum.Language.Default] +struct = "EnumItem" + +[Enum.Language.GetEnumItems] +args = [] +method = true +[Enum.LanguagePreference.English] +struct = "EnumItem" + +[Enum.LanguagePreference.GetEnumItems] +args = [] +method = true + +[Enum.LanguagePreference.SimplifiedChinese] +struct = "EnumItem" + +[Enum.LanguagePreference.SystemDefault] +struct = "EnumItem" +[Enum.LeftRight.Center] +struct = "EnumItem" + +[Enum.LeftRight.GetEnumItems] +args = [] +method = true + +[Enum.LeftRight.Left] +struct = "EnumItem" + +[Enum.LeftRight.Right] +struct = "EnumItem" +[Enum.LevelOfDetailSetting.GetEnumItems] +args = [] +method = true + +[Enum.LevelOfDetailSetting.High] +struct = "EnumItem" + +[Enum.LevelOfDetailSetting.Low] +struct = "EnumItem" + +[Enum.LevelOfDetailSetting.Medium] +struct = "EnumItem" +[Enum.Limb.GetEnumItems] +args = [] +method = true + +[Enum.Limb.Head] +struct = "EnumItem" + +[Enum.Limb.LeftArm] +struct = "EnumItem" + +[Enum.Limb.LeftLeg] +struct = "EnumItem" + +[Enum.Limb.RightArm] +struct = "EnumItem" + +[Enum.Limb.RightLeg] +struct = "EnumItem" + +[Enum.Limb.Torso] +struct = "EnumItem" + +[Enum.Limb.Unknown] +struct = "EnumItem" +[Enum.ListDisplayMode.GetEnumItems] +args = [] +method = true + +[Enum.ListDisplayMode.Horizontal] +struct = "EnumItem" + +[Enum.ListDisplayMode.Vertical] +struct = "EnumItem" +[Enum.ListenerType.CFrame] +struct = "EnumItem" + +[Enum.ListenerType.Camera] +struct = "EnumItem" + +[Enum.ListenerType.GetEnumItems] +args = [] +method = true + +[Enum.ListenerType.ObjectCFrame] +struct = "EnumItem" + +[Enum.ListenerType.ObjectPosition] +struct = "EnumItem" +[Enum.Material.Air] +struct = "EnumItem" + +[Enum.Material.Asphalt] +struct = "EnumItem" + +[Enum.Material.Basalt] +struct = "EnumItem" + +[Enum.Material.Brick] +struct = "EnumItem" + +[Enum.Material.Cobblestone] +struct = "EnumItem" + +[Enum.Material.Concrete] +struct = "EnumItem" + +[Enum.Material.CorrodedMetal] +struct = "EnumItem" + +[Enum.Material.CrackedLava] +struct = "EnumItem" + +[Enum.Material.DiamondPlate] +struct = "EnumItem" + +[Enum.Material.Fabric] +struct = "EnumItem" + +[Enum.Material.Foil] +struct = "EnumItem" + +[Enum.Material.ForceField] +struct = "EnumItem" + +[Enum.Material.GetEnumItems] +args = [] +method = true + +[Enum.Material.Glacier] +struct = "EnumItem" + +[Enum.Material.Glass] +struct = "EnumItem" + +[Enum.Material.Granite] +struct = "EnumItem" + +[Enum.Material.Grass] +struct = "EnumItem" + +[Enum.Material.Ground] +struct = "EnumItem" + +[Enum.Material.Ice] +struct = "EnumItem" + +[Enum.Material.LeafyGrass] +struct = "EnumItem" + +[Enum.Material.Limestone] +struct = "EnumItem" + +[Enum.Material.Marble] +struct = "EnumItem" + +[Enum.Material.Metal] +struct = "EnumItem" + +[Enum.Material.Mud] +struct = "EnumItem" + +[Enum.Material.Neon] +struct = "EnumItem" + +[Enum.Material.Pavement] +struct = "EnumItem" + +[Enum.Material.Pebble] +struct = "EnumItem" + +[Enum.Material.Plastic] +struct = "EnumItem" + +[Enum.Material.Rock] +struct = "EnumItem" + +[Enum.Material.Salt] +struct = "EnumItem" + +[Enum.Material.Sand] +struct = "EnumItem" + +[Enum.Material.Sandstone] +struct = "EnumItem" + +[Enum.Material.Slate] +struct = "EnumItem" + +[Enum.Material.SmoothPlastic] +struct = "EnumItem" + +[Enum.Material.Snow] +struct = "EnumItem" + +[Enum.Material.Water] +struct = "EnumItem" + +[Enum.Material.Wood] +struct = "EnumItem" + +[Enum.Material.WoodPlanks] +struct = "EnumItem" +[Enum.MembershipType.BuildersClub] +struct = "EnumItem" + +[Enum.MembershipType.GetEnumItems] +args = [] +method = true + +[Enum.MembershipType.None] +struct = "EnumItem" + +[Enum.MembershipType.OutrageousBuildersClub] +struct = "EnumItem" + +[Enum.MembershipType.Premium] +struct = "EnumItem" + +[Enum.MembershipType.TurboBuildersClub] +struct = "EnumItem" +[Enum.MeshType.Brick] +struct = "EnumItem" + +[Enum.MeshType.CornerWedge] +struct = "EnumItem" + +[Enum.MeshType.Cylinder] +struct = "EnumItem" + +[Enum.MeshType.FileMesh] +struct = "EnumItem" + +[Enum.MeshType.GetEnumItems] +args = [] +method = true + +[Enum.MeshType.Head] +struct = "EnumItem" + +[Enum.MeshType.ParallelRamp] +struct = "EnumItem" + +[Enum.MeshType.Prism] +struct = "EnumItem" + +[Enum.MeshType.Pyramid] +struct = "EnumItem" + +[Enum.MeshType.RightAngleRamp] +struct = "EnumItem" + +[Enum.MeshType.Sphere] +struct = "EnumItem" + +[Enum.MeshType.Torso] +struct = "EnumItem" + +[Enum.MeshType.Wedge] +struct = "EnumItem" +[Enum.MessageType.GetEnumItems] +args = [] +method = true + +[Enum.MessageType.MessageError] +struct = "EnumItem" + +[Enum.MessageType.MessageInfo] +struct = "EnumItem" + +[Enum.MessageType.MessageOutput] +struct = "EnumItem" + +[Enum.MessageType.MessageWarning] +struct = "EnumItem" +[Enum.ModifierKey.Alt] +struct = "EnumItem" + +[Enum.ModifierKey.Ctrl] +struct = "EnumItem" + +[Enum.ModifierKey.GetEnumItems] +args = [] +method = true + +[Enum.ModifierKey.Meta] +struct = "EnumItem" + +[Enum.ModifierKey.Shift] +struct = "EnumItem" +[Enum.MouseBehavior.Default] +struct = "EnumItem" + +[Enum.MouseBehavior.GetEnumItems] +args = [] +method = true + +[Enum.MouseBehavior.LockCenter] +struct = "EnumItem" + +[Enum.MouseBehavior.LockCurrentPosition] +struct = "EnumItem" +[Enum.MoveState.AirFree] +struct = "EnumItem" + +[Enum.MoveState.Coasting] +struct = "EnumItem" + +[Enum.MoveState.GetEnumItems] +args = [] +method = true + +[Enum.MoveState.Pushing] +struct = "EnumItem" + +[Enum.MoveState.Stopped] +struct = "EnumItem" + +[Enum.MoveState.Stopping] +struct = "EnumItem" +[Enum.NameOcclusion.EnemyOcclusion] +struct = "EnumItem" + +[Enum.NameOcclusion.GetEnumItems] +args = [] +method = true + +[Enum.NameOcclusion.NoOcclusion] +struct = "EnumItem" + +[Enum.NameOcclusion.OccludeAll] +struct = "EnumItem" +[Enum.NetworkOwnership.Automatic] +struct = "EnumItem" + +[Enum.NetworkOwnership.GetEnumItems] +args = [] +method = true + +[Enum.NetworkOwnership.Manual] +struct = "EnumItem" + +[Enum.NetworkOwnership.OnContact] +struct = "EnumItem" +[Enum.NormalId.Back] +struct = "EnumItem" + +[Enum.NormalId.Bottom] +struct = "EnumItem" + +[Enum.NormalId.Front] +struct = "EnumItem" + +[Enum.NormalId.GetEnumItems] +args = [] +method = true + +[Enum.NormalId.Left] +struct = "EnumItem" + +[Enum.NormalId.Right] +struct = "EnumItem" + +[Enum.NormalId.Top] +struct = "EnumItem" +[Enum.OutputLayoutMode.GetEnumItems] +args = [] +method = true + +[Enum.OutputLayoutMode.Horizontal] +struct = "EnumItem" + +[Enum.OutputLayoutMode.Vertical] +struct = "EnumItem" +[Enum.OverrideMouseIconBehavior.ForceHide] +struct = "EnumItem" + +[Enum.OverrideMouseIconBehavior.ForceShow] +struct = "EnumItem" + +[Enum.OverrideMouseIconBehavior.GetEnumItems] +args = [] +method = true + +[Enum.OverrideMouseIconBehavior.None] +struct = "EnumItem" +[Enum.PacketPriority.GetEnumItems] +args = [] +method = true + +[Enum.PacketPriority.HIGH_PRIORITY] +struct = "EnumItem" + +[Enum.PacketPriority.IMMEDIATE_PRIORITY] +struct = "EnumItem" + +[Enum.PacketPriority.LOW_PRIORITY] +struct = "EnumItem" + +[Enum.PacketPriority.MEDIUM_PRIORITY] +struct = "EnumItem" +[Enum.PartType.Ball] +struct = "EnumItem" + +[Enum.PartType.Block] +struct = "EnumItem" + +[Enum.PartType.Cylinder] +struct = "EnumItem" + +[Enum.PartType.GetEnumItems] +args = [] +method = true +[Enum.PathStatus.ClosestNoPath] +struct = "EnumItem" + +[Enum.PathStatus.ClosestOutOfRange] +struct = "EnumItem" + +[Enum.PathStatus.FailFinishNotEmpty] +struct = "EnumItem" + +[Enum.PathStatus.FailStartNotEmpty] +struct = "EnumItem" + +[Enum.PathStatus.GetEnumItems] +args = [] +method = true + +[Enum.PathStatus.NoPath] +struct = "EnumItem" + +[Enum.PathStatus.Success] +struct = "EnumItem" +[Enum.PathWaypointAction.GetEnumItems] +args = [] +method = true + +[Enum.PathWaypointAction.Jump] +struct = "EnumItem" + +[Enum.PathWaypointAction.Walk] +struct = "EnumItem" +[Enum.PermissionLevelShown.Game] +struct = "EnumItem" + +[Enum.PermissionLevelShown.GetEnumItems] +args = [] +method = true + +[Enum.PermissionLevelShown.Roblox] +struct = "EnumItem" + +[Enum.PermissionLevelShown.RobloxGame] +struct = "EnumItem" + +[Enum.PermissionLevelShown.RobloxScript] +struct = "EnumItem" + +[Enum.PermissionLevelShown.Studio] +struct = "EnumItem" +[Enum.Platform.Android] +struct = "EnumItem" + +[Enum.Platform.AndroidTV] +struct = "EnumItem" + +[Enum.Platform.BeOS] +struct = "EnumItem" + +[Enum.Platform.Chromecast] +struct = "EnumItem" + +[Enum.Platform.DOS] +struct = "EnumItem" + +[Enum.Platform.GetEnumItems] +args = [] +method = true + +[Enum.Platform.IOS] +struct = "EnumItem" + +[Enum.Platform.Linux] +struct = "EnumItem" + +[Enum.Platform.NX] +struct = "EnumItem" + +[Enum.Platform.None] +struct = "EnumItem" + +[Enum.Platform.OSX] +struct = "EnumItem" + +[Enum.Platform.Ouya] +struct = "EnumItem" + +[Enum.Platform.PS3] +struct = "EnumItem" + +[Enum.Platform.PS4] +struct = "EnumItem" + +[Enum.Platform.SteamOS] +struct = "EnumItem" + +[Enum.Platform.UWP] +struct = "EnumItem" + +[Enum.Platform.WebOS] +struct = "EnumItem" + +[Enum.Platform.WiiU] +struct = "EnumItem" + +[Enum.Platform.Windows] +struct = "EnumItem" + +[Enum.Platform.XBox360] +struct = "EnumItem" + +[Enum.Platform.XBoxOne] +struct = "EnumItem" +[Enum.PlaybackState.Begin] +struct = "EnumItem" + +[Enum.PlaybackState.Cancelled] +struct = "EnumItem" + +[Enum.PlaybackState.Completed] +struct = "EnumItem" + +[Enum.PlaybackState.Delayed] +struct = "EnumItem" + +[Enum.PlaybackState.GetEnumItems] +args = [] +method = true + +[Enum.PlaybackState.Paused] +struct = "EnumItem" + +[Enum.PlaybackState.Playing] +struct = "EnumItem" +[Enum.PlayerActions.CharacterBackward] +struct = "EnumItem" + +[Enum.PlayerActions.CharacterForward] +struct = "EnumItem" + +[Enum.PlayerActions.CharacterJump] +struct = "EnumItem" + +[Enum.PlayerActions.CharacterLeft] +struct = "EnumItem" + +[Enum.PlayerActions.CharacterRight] +struct = "EnumItem" + +[Enum.PlayerActions.GetEnumItems] +args = [] +method = true +[Enum.PlayerChatType.All] +struct = "EnumItem" + +[Enum.PlayerChatType.GetEnumItems] +args = [] +method = true + +[Enum.PlayerChatType.Team] +struct = "EnumItem" + +[Enum.PlayerChatType.Whisper] +struct = "EnumItem" +[Enum.PoseEasingDirection.GetEnumItems] +args = [] +method = true + +[Enum.PoseEasingDirection.In] +struct = "EnumItem" + +[Enum.PoseEasingDirection.InOut] +struct = "EnumItem" + +[Enum.PoseEasingDirection.Out] +struct = "EnumItem" +[Enum.PoseEasingStyle.Bounce] +struct = "EnumItem" + +[Enum.PoseEasingStyle.Constant] +struct = "EnumItem" + +[Enum.PoseEasingStyle.Cubic] +struct = "EnumItem" + +[Enum.PoseEasingStyle.Elastic] +struct = "EnumItem" + +[Enum.PoseEasingStyle.GetEnumItems] +args = [] +method = true + +[Enum.PoseEasingStyle.Linear] +struct = "EnumItem" +[Enum.PrivilegeType.Admin] +struct = "EnumItem" + +[Enum.PrivilegeType.Banned] +struct = "EnumItem" + +[Enum.PrivilegeType.GetEnumItems] +args = [] +method = true + +[Enum.PrivilegeType.Member] +struct = "EnumItem" + +[Enum.PrivilegeType.Owner] +struct = "EnumItem" + +[Enum.PrivilegeType.Visitor] +struct = "EnumItem" +[Enum.ProductPurchaseDecision.GetEnumItems] +args = [] +method = true + +[Enum.ProductPurchaseDecision.NotProcessedYet] +struct = "EnumItem" + +[Enum.ProductPurchaseDecision.PurchaseGranted] +struct = "EnumItem" +[Enum.QualityLevel.Automatic] +struct = "EnumItem" + +[Enum.QualityLevel.GetEnumItems] +args = [] +method = true + +[Enum.QualityLevel.Level01] +struct = "EnumItem" + +[Enum.QualityLevel.Level02] +struct = "EnumItem" + +[Enum.QualityLevel.Level03] +struct = "EnumItem" + +[Enum.QualityLevel.Level04] +struct = "EnumItem" + +[Enum.QualityLevel.Level05] +struct = "EnumItem" + +[Enum.QualityLevel.Level06] +struct = "EnumItem" + +[Enum.QualityLevel.Level07] +struct = "EnumItem" + +[Enum.QualityLevel.Level08] +struct = "EnumItem" + +[Enum.QualityLevel.Level09] +struct = "EnumItem" + +[Enum.QualityLevel.Level10] +struct = "EnumItem" + +[Enum.QualityLevel.Level11] +struct = "EnumItem" + +[Enum.QualityLevel.Level12] +struct = "EnumItem" + +[Enum.QualityLevel.Level13] +struct = "EnumItem" + +[Enum.QualityLevel.Level14] +struct = "EnumItem" + +[Enum.QualityLevel.Level15] +struct = "EnumItem" + +[Enum.QualityLevel.Level16] +struct = "EnumItem" + +[Enum.QualityLevel.Level17] +struct = "EnumItem" + +[Enum.QualityLevel.Level18] +struct = "EnumItem" + +[Enum.QualityLevel.Level19] +struct = "EnumItem" + +[Enum.QualityLevel.Level20] +struct = "EnumItem" + +[Enum.QualityLevel.Level21] +struct = "EnumItem" +[Enum.R15CollisionType.GetEnumItems] +args = [] +method = true + +[Enum.R15CollisionType.InnerBox] +struct = "EnumItem" + +[Enum.R15CollisionType.OuterBox] +struct = "EnumItem" +[Enum.RaycastFilterType.Blacklist] +struct = "EnumItem" + +[Enum.RaycastFilterType.GetEnumItems] +args = [] +method = true + +[Enum.RaycastFilterType.Whitelist] +struct = "EnumItem" +[Enum.RenderFidelity.Automatic] +struct = "EnumItem" + +[Enum.RenderFidelity.GetEnumItems] +args = [] +method = true + +[Enum.RenderFidelity.Precise] +struct = "EnumItem" +[Enum.RenderPriority.Camera] +struct = "EnumItem" + +[Enum.RenderPriority.Character] +struct = "EnumItem" + +[Enum.RenderPriority.First] +struct = "EnumItem" + +[Enum.RenderPriority.GetEnumItems] +args = [] +method = true + +[Enum.RenderPriority.Input] +struct = "EnumItem" + +[Enum.RenderPriority.Last] +struct = "EnumItem" +[Enum.RenderingTestComparisonMethod.GetEnumItems] +args = [] +method = true + +[Enum.RenderingTestComparisonMethod.diff] +struct = "EnumItem" + +[Enum.RenderingTestComparisonMethod.psnr] +struct = "EnumItem" +[Enum.ReturnKeyType.Default] +struct = "EnumItem" + +[Enum.ReturnKeyType.Done] +struct = "EnumItem" + +[Enum.ReturnKeyType.GetEnumItems] +args = [] +method = true + +[Enum.ReturnKeyType.Go] +struct = "EnumItem" + +[Enum.ReturnKeyType.Next] +struct = "EnumItem" + +[Enum.ReturnKeyType.Search] +struct = "EnumItem" + +[Enum.ReturnKeyType.Send] +struct = "EnumItem" +[Enum.ReverbType.Alley] +struct = "EnumItem" + +[Enum.ReverbType.Arena] +struct = "EnumItem" + +[Enum.ReverbType.Auditorium] +struct = "EnumItem" + +[Enum.ReverbType.Bathroom] +struct = "EnumItem" + +[Enum.ReverbType.CarpettedHallway] +struct = "EnumItem" + +[Enum.ReverbType.Cave] +struct = "EnumItem" + +[Enum.ReverbType.City] +struct = "EnumItem" + +[Enum.ReverbType.ConcertHall] +struct = "EnumItem" + +[Enum.ReverbType.Forest] +struct = "EnumItem" + +[Enum.ReverbType.GenericReverb] +struct = "EnumItem" + +[Enum.ReverbType.GetEnumItems] +args = [] +method = true + +[Enum.ReverbType.Hallway] +struct = "EnumItem" + +[Enum.ReverbType.Hangar] +struct = "EnumItem" + +[Enum.ReverbType.LivingRoom] +struct = "EnumItem" + +[Enum.ReverbType.Mountains] +struct = "EnumItem" + +[Enum.ReverbType.NoReverb] +struct = "EnumItem" + +[Enum.ReverbType.PaddedCell] +struct = "EnumItem" + +[Enum.ReverbType.ParkingLot] +struct = "EnumItem" + +[Enum.ReverbType.Plain] +struct = "EnumItem" + +[Enum.ReverbType.Quarry] +struct = "EnumItem" + +[Enum.ReverbType.Room] +struct = "EnumItem" + +[Enum.ReverbType.SewerPipe] +struct = "EnumItem" + +[Enum.ReverbType.StoneCorridor] +struct = "EnumItem" + +[Enum.ReverbType.StoneRoom] +struct = "EnumItem" + +[Enum.ReverbType.UnderWater] +struct = "EnumItem" +[Enum.RibbonTool.ColorPicker] +struct = "EnumItem" + +[Enum.RibbonTool.GetEnumItems] +args = [] +method = true + +[Enum.RibbonTool.Group] +struct = "EnumItem" + +[Enum.RibbonTool.MaterialPicker] +struct = "EnumItem" + +[Enum.RibbonTool.Move] +struct = "EnumItem" + +[Enum.RibbonTool.None] +struct = "EnumItem" + +[Enum.RibbonTool.Rotate] +struct = "EnumItem" + +[Enum.RibbonTool.Scale] +struct = "EnumItem" + +[Enum.RibbonTool.Select] +struct = "EnumItem" + +[Enum.RibbonTool.Transform] +struct = "EnumItem" + +[Enum.RibbonTool.Ungroup] +struct = "EnumItem" +[Enum.RollOffMode.GetEnumItems] +args = [] +method = true + +[Enum.RollOffMode.Inverse] +struct = "EnumItem" + +[Enum.RollOffMode.InverseTapered] +struct = "EnumItem" + +[Enum.RollOffMode.Linear] +struct = "EnumItem" + +[Enum.RollOffMode.LinearSquare] +struct = "EnumItem" +[Enum.RotationType.CameraRelative] +struct = "EnumItem" + +[Enum.RotationType.GetEnumItems] +args = [] +method = true + +[Enum.RotationType.MovementRelative] +struct = "EnumItem" +[Enum.RuntimeUndoBehavior.Aggregate] +struct = "EnumItem" + +[Enum.RuntimeUndoBehavior.GetEnumItems] +args = [] +method = true + +[Enum.RuntimeUndoBehavior.Hybrid] +struct = "EnumItem" + +[Enum.RuntimeUndoBehavior.Snapshot] +struct = "EnumItem" +[Enum.SaveFilter.GetEnumItems] +args = [] +method = true + +[Enum.SaveFilter.SaveAll] +struct = "EnumItem" + +[Enum.SaveFilter.SaveGame] +struct = "EnumItem" + +[Enum.SaveFilter.SaveWorld] +struct = "EnumItem" +[Enum.SavedQualitySetting.Automatic] +struct = "EnumItem" + +[Enum.SavedQualitySetting.GetEnumItems] +args = [] +method = true + +[Enum.SavedQualitySetting.QualityLevel1] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel10] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel2] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel3] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel4] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel5] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel6] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel7] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel8] +struct = "EnumItem" + +[Enum.SavedQualitySetting.QualityLevel9] +struct = "EnumItem" +[Enum.ScaleType.Crop] +struct = "EnumItem" + +[Enum.ScaleType.Fit] +struct = "EnumItem" + +[Enum.ScaleType.GetEnumItems] +args = [] +method = true + +[Enum.ScaleType.Slice] +struct = "EnumItem" + +[Enum.ScaleType.Stretch] +struct = "EnumItem" + +[Enum.ScaleType.Tile] +struct = "EnumItem" +[Enum.ScreenOrientation.GetEnumItems] +args = [] +method = true + +[Enum.ScreenOrientation.LandscapeLeft] +struct = "EnumItem" + +[Enum.ScreenOrientation.LandscapeRight] +struct = "EnumItem" + +[Enum.ScreenOrientation.LandscapeSensor] +struct = "EnumItem" + +[Enum.ScreenOrientation.Portrait] +struct = "EnumItem" + +[Enum.ScreenOrientation.Sensor] +struct = "EnumItem" +[Enum.ScrollBarInset.Always] +struct = "EnumItem" + +[Enum.ScrollBarInset.GetEnumItems] +args = [] +method = true + +[Enum.ScrollBarInset.None] +struct = "EnumItem" + +[Enum.ScrollBarInset.ScrollBar] +struct = "EnumItem" +[Enum.ScrollingDirection.GetEnumItems] +args = [] +method = true + +[Enum.ScrollingDirection.X] +struct = "EnumItem" + +[Enum.ScrollingDirection.XY] +struct = "EnumItem" + +[Enum.ScrollingDirection.Y] +struct = "EnumItem" +[Enum.ServerAudioBehavior.Enabled] +struct = "EnumItem" + +[Enum.ServerAudioBehavior.GetEnumItems] +args = [] +method = true + +[Enum.ServerAudioBehavior.Muted] +struct = "EnumItem" + +[Enum.ServerAudioBehavior.OnlineGame] +struct = "EnumItem" +[Enum.SizeConstraint.GetEnumItems] +args = [] +method = true + +[Enum.SizeConstraint.RelativeXX] +struct = "EnumItem" + +[Enum.SizeConstraint.RelativeXY] +struct = "EnumItem" + +[Enum.SizeConstraint.RelativeYY] +struct = "EnumItem" +[Enum.SortOrder.Custom] +struct = "EnumItem" + +[Enum.SortOrder.GetEnumItems] +args = [] +method = true + +[Enum.SortOrder.LayoutOrder] +struct = "EnumItem" + +[Enum.SortOrder.Name] +struct = "EnumItem" +[Enum.SoundType.Boing] +struct = "EnumItem" + +[Enum.SoundType.Bomb] +struct = "EnumItem" + +[Enum.SoundType.Break] +struct = "EnumItem" + +[Enum.SoundType.Click] +struct = "EnumItem" + +[Enum.SoundType.Clock] +struct = "EnumItem" + +[Enum.SoundType.GetEnumItems] +args = [] +method = true + +[Enum.SoundType.NoSound] +struct = "EnumItem" + +[Enum.SoundType.Page] +struct = "EnumItem" + +[Enum.SoundType.Ping] +struct = "EnumItem" + +[Enum.SoundType.Slingshot] +struct = "EnumItem" + +[Enum.SoundType.Snap] +struct = "EnumItem" + +[Enum.SoundType.Splat] +struct = "EnumItem" + +[Enum.SoundType.Step] +struct = "EnumItem" + +[Enum.SoundType.StepOn] +struct = "EnumItem" + +[Enum.SoundType.Swoosh] +struct = "EnumItem" + +[Enum.SoundType.Victory] +struct = "EnumItem" +[Enum.SpecialKey.ChatHotkey] +struct = "EnumItem" + +[Enum.SpecialKey.End] +struct = "EnumItem" + +[Enum.SpecialKey.GetEnumItems] +args = [] +method = true + +[Enum.SpecialKey.Home] +struct = "EnumItem" + +[Enum.SpecialKey.Insert] +struct = "EnumItem" + +[Enum.SpecialKey.PageDown] +struct = "EnumItem" + +[Enum.SpecialKey.PageUp] +struct = "EnumItem" +[Enum.StartCorner.BottomLeft] +struct = "EnumItem" + +[Enum.StartCorner.BottomRight] +struct = "EnumItem" + +[Enum.StartCorner.GetEnumItems] +args = [] +method = true + +[Enum.StartCorner.TopLeft] +struct = "EnumItem" + +[Enum.StartCorner.TopRight] +struct = "EnumItem" +[Enum.Status.Confusion] +struct = "EnumItem" + +[Enum.Status.GetEnumItems] +args = [] +method = true + +[Enum.Status.Poison] +struct = "EnumItem" +[Enum.StreamingPauseMode.ClientPhysicsPause] +struct = "EnumItem" + +[Enum.StreamingPauseMode.Default] +struct = "EnumItem" + +[Enum.StreamingPauseMode.Disabled] +struct = "EnumItem" + +[Enum.StreamingPauseMode.GetEnumItems] +args = [] +method = true +[Enum.StudioDataModelType.Edit] +struct = "EnumItem" + +[Enum.StudioDataModelType.GetEnumItems] +args = [] +method = true + +[Enum.StudioDataModelType.None] +struct = "EnumItem" + +[Enum.StudioDataModelType.PlayClient] +struct = "EnumItem" + +[Enum.StudioDataModelType.PlayServer] +struct = "EnumItem" + +[Enum.StudioDataModelType.RobloxPlugin] +struct = "EnumItem" + +[Enum.StudioDataModelType.UserPlugin] +struct = "EnumItem" +[Enum.StudioStyleGuideColor.Border] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.BrightText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Button] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ButtonBorder] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ButtonText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.CategoryItem] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.CheckedFieldBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.CheckedFieldBorder] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.CheckedFieldIndicator] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ColorPickerFrame] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.CurrentMarker] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Dark] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DebuggerCurrentLine] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DebuggerErrorLine] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DialogButton] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DialogButtonBorder] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DialogButtonText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DialogMainButton] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DialogMainButtonText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffFilePathBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffFilePathBorder] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffFilePathText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffLineNum] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffLineNumAdditionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffLineNumDeletionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffLineNumNoChangeBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffLineNumSeparatorBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextAddition] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextAdditionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextDeletion] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextDeletionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextHunkInfo] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextNoChange] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextNoChangeBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DiffTextSeparatorBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.DimmedText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Dropdown] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.EmulatorBar] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.EmulatorDropDown] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ErrorText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.GameSettingsTableItem] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.GameSettingsTooltip] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.GetEnumItems] +args = [] +method = true + +[Enum.StudioStyleGuideColor.HeaderSection] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.InfoText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.InputFieldBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.InputFieldBorder] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Item] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Light] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.LinkText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.MainBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.MainButton] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.MainText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Mid] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Midlight] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Notification] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.RibbonButton] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.RibbonTab] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.RibbonTabTopBar] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptBuiltInFunction] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptComment] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptError] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptFindSelectionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptKeyword] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptMatchingWordSelectionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptNumber] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptOperator] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptPreprocessor] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptSelectionBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptSelectionText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptSideWidget] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptString] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScriptWarning] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScrollBar] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ScrollBarBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.SensitiveText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Separator] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Shadow] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.StatusBar] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.SubText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Tab] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.TabBar] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.TableItem] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Titlebar] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.TitlebarText] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.Tooltip] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.ViewPortBackground] +struct = "EnumItem" + +[Enum.StudioStyleGuideColor.WarningText] +struct = "EnumItem" +[Enum.StudioStyleGuideModifier.Default] +struct = "EnumItem" + +[Enum.StudioStyleGuideModifier.Disabled] +struct = "EnumItem" + +[Enum.StudioStyleGuideModifier.GetEnumItems] +args = [] +method = true + +[Enum.StudioStyleGuideModifier.Hover] +struct = "EnumItem" + +[Enum.StudioStyleGuideModifier.Pressed] +struct = "EnumItem" + +[Enum.StudioStyleGuideModifier.Selected] +struct = "EnumItem" +[Enum.Style.AlternatingSupports] +struct = "EnumItem" + +[Enum.Style.BridgeStyleSupports] +struct = "EnumItem" + +[Enum.Style.GetEnumItems] +args = [] +method = true + +[Enum.Style.NoSupports] +struct = "EnumItem" +[Enum.SurfaceConstraint.GetEnumItems] +args = [] +method = true + +[Enum.SurfaceConstraint.Hinge] +struct = "EnumItem" + +[Enum.SurfaceConstraint.Motor] +struct = "EnumItem" + +[Enum.SurfaceConstraint.None] +struct = "EnumItem" + +[Enum.SurfaceConstraint.SteppingMotor] +struct = "EnumItem" +[Enum.SurfaceGuiSizingMode.FixedSize] +struct = "EnumItem" + +[Enum.SurfaceGuiSizingMode.GetEnumItems] +args = [] +method = true + +[Enum.SurfaceGuiSizingMode.PixelsPerStud] +struct = "EnumItem" +[Enum.SurfaceType.GetEnumItems] +args = [] +method = true + +[Enum.SurfaceType.Glue] +struct = "EnumItem" + +[Enum.SurfaceType.Hinge] +struct = "EnumItem" + +[Enum.SurfaceType.Inlet] +struct = "EnumItem" + +[Enum.SurfaceType.Motor] +struct = "EnumItem" + +[Enum.SurfaceType.Smooth] +struct = "EnumItem" + +[Enum.SurfaceType.SmoothNoOutlines] +struct = "EnumItem" + +[Enum.SurfaceType.SteppingMotor] +struct = "EnumItem" + +[Enum.SurfaceType.Studs] +struct = "EnumItem" + +[Enum.SurfaceType.Universal] +struct = "EnumItem" + +[Enum.SurfaceType.Weld] +struct = "EnumItem" +[Enum.SwipeDirection.Down] +struct = "EnumItem" + +[Enum.SwipeDirection.GetEnumItems] +args = [] +method = true + +[Enum.SwipeDirection.Left] +struct = "EnumItem" + +[Enum.SwipeDirection.None] +struct = "EnumItem" + +[Enum.SwipeDirection.Right] +struct = "EnumItem" + +[Enum.SwipeDirection.Up] +struct = "EnumItem" +[Enum.TableMajorAxis.ColumnMajor] +struct = "EnumItem" + +[Enum.TableMajorAxis.GetEnumItems] +args = [] +method = true + +[Enum.TableMajorAxis.RowMajor] +struct = "EnumItem" +[Enum.Technology.Compatibility] +struct = "EnumItem" + +[Enum.Technology.GetEnumItems] +args = [] +method = true + +[Enum.Technology.Legacy] +struct = "EnumItem" + +[Enum.Technology.ShadowMap] +struct = "EnumItem" + +[Enum.Technology.Voxel] +struct = "EnumItem" +[Enum.TeleportResult.Failure] +struct = "EnumItem" + +[Enum.TeleportResult.Flooded] +struct = "EnumItem" + +[Enum.TeleportResult.GameEnded] +struct = "EnumItem" + +[Enum.TeleportResult.GameFull] +struct = "EnumItem" + +[Enum.TeleportResult.GameNotFound] +struct = "EnumItem" + +[Enum.TeleportResult.GetEnumItems] +args = [] +method = true + +[Enum.TeleportResult.IsTeleporting] +struct = "EnumItem" + +[Enum.TeleportResult.Success] +struct = "EnumItem" + +[Enum.TeleportResult.Unauthorized] +struct = "EnumItem" +[Enum.TeleportState.Failed] +struct = "EnumItem" + +[Enum.TeleportState.GetEnumItems] +args = [] +method = true + +[Enum.TeleportState.InProgress] +struct = "EnumItem" + +[Enum.TeleportState.RequestedFromServer] +struct = "EnumItem" + +[Enum.TeleportState.Started] +struct = "EnumItem" + +[Enum.TeleportState.WaitingForServer] +struct = "EnumItem" +[Enum.TeleportType.GetEnumItems] +args = [] +method = true + +[Enum.TeleportType.ToInstance] +struct = "EnumItem" + +[Enum.TeleportType.ToPlace] +struct = "EnumItem" + +[Enum.TeleportType.ToReservedServer] +struct = "EnumItem" +[Enum.TextFilterContext.GetEnumItems] +args = [] +method = true + +[Enum.TextFilterContext.PrivateChat] +struct = "EnumItem" + +[Enum.TextFilterContext.PublicChat] +struct = "EnumItem" +[Enum.TextInputType.Default] +struct = "EnumItem" + +[Enum.TextInputType.Email] +struct = "EnumItem" + +[Enum.TextInputType.GetEnumItems] +args = [] +method = true + +[Enum.TextInputType.NoSuggestions] +struct = "EnumItem" + +[Enum.TextInputType.Number] +struct = "EnumItem" + +[Enum.TextInputType.Password] +struct = "EnumItem" + +[Enum.TextInputType.Phone] +struct = "EnumItem" +[Enum.TextTruncate.AtEnd] +struct = "EnumItem" + +[Enum.TextTruncate.GetEnumItems] +args = [] +method = true + +[Enum.TextTruncate.None] +struct = "EnumItem" +[Enum.TextXAlignment.Center] +struct = "EnumItem" + +[Enum.TextXAlignment.GetEnumItems] +args = [] +method = true + +[Enum.TextXAlignment.Left] +struct = "EnumItem" + +[Enum.TextXAlignment.Right] +struct = "EnumItem" +[Enum.TextYAlignment.Bottom] +struct = "EnumItem" + +[Enum.TextYAlignment.Center] +struct = "EnumItem" + +[Enum.TextYAlignment.GetEnumItems] +args = [] +method = true + +[Enum.TextYAlignment.Top] +struct = "EnumItem" +[Enum.TextureMode.GetEnumItems] +args = [] +method = true + +[Enum.TextureMode.Static] +struct = "EnumItem" + +[Enum.TextureMode.Stretch] +struct = "EnumItem" + +[Enum.TextureMode.Wrap] +struct = "EnumItem" +[Enum.TextureQueryType.GetEnumItems] +args = [] +method = true + +[Enum.TextureQueryType.Humanoid] +struct = "EnumItem" + +[Enum.TextureQueryType.HumanoidOrphaned] +struct = "EnumItem" + +[Enum.TextureQueryType.NonHumanoid] +struct = "EnumItem" + +[Enum.TextureQueryType.NonHumanoidOrphaned] +struct = "EnumItem" +[Enum.ThreadPoolConfig.Auto] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.GetEnumItems] +args = [] +method = true + +[Enum.ThreadPoolConfig.PerCore1] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.PerCore2] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.PerCore3] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.PerCore4] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.Threads1] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.Threads16] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.Threads2] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.Threads3] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.Threads4] +struct = "EnumItem" + +[Enum.ThreadPoolConfig.Threads8] +struct = "EnumItem" +[Enum.ThrottlingPriority.Default] +struct = "EnumItem" + +[Enum.ThrottlingPriority.ElevatedOnServer] +struct = "EnumItem" + +[Enum.ThrottlingPriority.Extreme] +struct = "EnumItem" + +[Enum.ThrottlingPriority.GetEnumItems] +args = [] +method = true +[Enum.ThumbnailSize.GetEnumItems] +args = [] +method = true + +[Enum.ThumbnailSize.Size100x100] +struct = "EnumItem" + +[Enum.ThumbnailSize.Size150x150] +struct = "EnumItem" + +[Enum.ThumbnailSize.Size180x180] +struct = "EnumItem" + +[Enum.ThumbnailSize.Size352x352] +struct = "EnumItem" + +[Enum.ThumbnailSize.Size420x420] +struct = "EnumItem" + +[Enum.ThumbnailSize.Size48x48] +struct = "EnumItem" + +[Enum.ThumbnailSize.Size60x60] +struct = "EnumItem" +[Enum.ThumbnailType.AvatarBust] +struct = "EnumItem" + +[Enum.ThumbnailType.AvatarThumbnail] +struct = "EnumItem" + +[Enum.ThumbnailType.GetEnumItems] +args = [] +method = true + +[Enum.ThumbnailType.HeadShot] +struct = "EnumItem" +[Enum.TickCountSampleMethod.Benchmark] +struct = "EnumItem" + +[Enum.TickCountSampleMethod.Fast] +struct = "EnumItem" + +[Enum.TickCountSampleMethod.GetEnumItems] +args = [] +method = true + +[Enum.TickCountSampleMethod.Precise] +struct = "EnumItem" +[Enum.TopBottom.Bottom] +struct = "EnumItem" + +[Enum.TopBottom.Center] +struct = "EnumItem" + +[Enum.TopBottom.GetEnumItems] +args = [] +method = true + +[Enum.TopBottom.Top] +struct = "EnumItem" +[Enum.TouchCameraMovementMode.Classic] +struct = "EnumItem" + +[Enum.TouchCameraMovementMode.Default] +struct = "EnumItem" + +[Enum.TouchCameraMovementMode.Follow] +struct = "EnumItem" + +[Enum.TouchCameraMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.TouchCameraMovementMode.Orbital] +struct = "EnumItem" +[Enum.TouchMovementMode.ClickToMove] +struct = "EnumItem" + +[Enum.TouchMovementMode.DPad] +struct = "EnumItem" + +[Enum.TouchMovementMode.Default] +struct = "EnumItem" + +[Enum.TouchMovementMode.DynamicThumbstick] +struct = "EnumItem" + +[Enum.TouchMovementMode.GetEnumItems] +args = [] +method = true + +[Enum.TouchMovementMode.Thumbpad] +struct = "EnumItem" + +[Enum.TouchMovementMode.Thumbstick] +struct = "EnumItem" +[Enum.TweenStatus.Canceled] +struct = "EnumItem" + +[Enum.TweenStatus.Completed] +struct = "EnumItem" + +[Enum.TweenStatus.GetEnumItems] +args = [] +method = true +[Enum.UITheme.Dark] +struct = "EnumItem" + +[Enum.UITheme.GetEnumItems] +args = [] +method = true + +[Enum.UITheme.Light] +struct = "EnumItem" +[Enum.UiMessageType.GetEnumItems] +args = [] +method = true + +[Enum.UiMessageType.UiMessageError] +struct = "EnumItem" + +[Enum.UiMessageType.UiMessageInfo] +struct = "EnumItem" +[Enum.UploadSetting.Always] +struct = "EnumItem" + +[Enum.UploadSetting.Ask] +struct = "EnumItem" + +[Enum.UploadSetting.GetEnumItems] +args = [] +method = true + +[Enum.UploadSetting.Never] +struct = "EnumItem" +[Enum.UserCFrame.GetEnumItems] +args = [] +method = true + +[Enum.UserCFrame.Head] +struct = "EnumItem" + +[Enum.UserCFrame.LeftHand] +struct = "EnumItem" + +[Enum.UserCFrame.RightHand] +struct = "EnumItem" +[Enum.UserInputState.Begin] +struct = "EnumItem" + +[Enum.UserInputState.Cancel] +struct = "EnumItem" + +[Enum.UserInputState.Change] +struct = "EnumItem" + +[Enum.UserInputState.End] +struct = "EnumItem" + +[Enum.UserInputState.GetEnumItems] +args = [] +method = true + +[Enum.UserInputState.None] +struct = "EnumItem" +[Enum.UserInputType.Accelerometer] +struct = "EnumItem" + +[Enum.UserInputType.Focus] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad1] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad2] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad3] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad4] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad5] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad6] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad7] +struct = "EnumItem" + +[Enum.UserInputType.Gamepad8] +struct = "EnumItem" + +[Enum.UserInputType.GetEnumItems] +args = [] +method = true + +[Enum.UserInputType.Gyro] +struct = "EnumItem" + +[Enum.UserInputType.InputMethod] +struct = "EnumItem" + +[Enum.UserInputType.Keyboard] +struct = "EnumItem" + +[Enum.UserInputType.MouseButton1] +struct = "EnumItem" + +[Enum.UserInputType.MouseButton2] +struct = "EnumItem" + +[Enum.UserInputType.MouseButton3] +struct = "EnumItem" + +[Enum.UserInputType.MouseMovement] +struct = "EnumItem" + +[Enum.UserInputType.MouseWheel] +struct = "EnumItem" + +[Enum.UserInputType.None] +struct = "EnumItem" + +[Enum.UserInputType.TextInput] +struct = "EnumItem" + +[Enum.UserInputType.Touch] +struct = "EnumItem" +[Enum.VRTouchpad.GetEnumItems] +args = [] +method = true + +[Enum.VRTouchpad.Left] +struct = "EnumItem" + +[Enum.VRTouchpad.Right] +struct = "EnumItem" +[Enum.VRTouchpadMode.ABXY] +struct = "EnumItem" + +[Enum.VRTouchpadMode.GetEnumItems] +args = [] +method = true + +[Enum.VRTouchpadMode.Touch] +struct = "EnumItem" + +[Enum.VRTouchpadMode.VirtualThumbstick] +struct = "EnumItem" +[Enum.VerticalAlignment.Bottom] +struct = "EnumItem" + +[Enum.VerticalAlignment.Center] +struct = "EnumItem" + +[Enum.VerticalAlignment.GetEnumItems] +args = [] +method = true + +[Enum.VerticalAlignment.Top] +struct = "EnumItem" +[Enum.VerticalScrollBarPosition.GetEnumItems] +args = [] +method = true + +[Enum.VerticalScrollBarPosition.Left] +struct = "EnumItem" + +[Enum.VerticalScrollBarPosition.Right] +struct = "EnumItem" +[Enum.VibrationMotor.GetEnumItems] +args = [] +method = true + +[Enum.VibrationMotor.Large] +struct = "EnumItem" + +[Enum.VibrationMotor.LeftHand] +struct = "EnumItem" + +[Enum.VibrationMotor.LeftTrigger] +struct = "EnumItem" + +[Enum.VibrationMotor.RightHand] +struct = "EnumItem" + +[Enum.VibrationMotor.RightTrigger] +struct = "EnumItem" + +[Enum.VibrationMotor.Small] +struct = "EnumItem" +[Enum.VideoQualitySettings.GetEnumItems] +args = [] +method = true + +[Enum.VideoQualitySettings.HighResolution] +struct = "EnumItem" + +[Enum.VideoQualitySettings.LowResolution] +struct = "EnumItem" + +[Enum.VideoQualitySettings.MediumResolution] +struct = "EnumItem" +[Enum.VirtualInputMode.GetEnumItems] +args = [] +method = true + +[Enum.VirtualInputMode.None] +struct = "EnumItem" + +[Enum.VirtualInputMode.Playing] +struct = "EnumItem" + +[Enum.VirtualInputMode.Recording] +struct = "EnumItem" +[Enum.WaterDirection.GetEnumItems] +args = [] +method = true + +[Enum.WaterDirection.NegX] +struct = "EnumItem" + +[Enum.WaterDirection.NegY] +struct = "EnumItem" + +[Enum.WaterDirection.NegZ] +struct = "EnumItem" + +[Enum.WaterDirection.X] +struct = "EnumItem" + +[Enum.WaterDirection.Y] +struct = "EnumItem" + +[Enum.WaterDirection.Z] +struct = "EnumItem" +[Enum.WaterForce.GetEnumItems] +args = [] +method = true + +[Enum.WaterForce.Max] +struct = "EnumItem" + +[Enum.WaterForce.Medium] +struct = "EnumItem" + +[Enum.WaterForce.None] +struct = "EnumItem" + +[Enum.WaterForce.Small] +struct = "EnumItem" + +[Enum.WaterForce.Strong] +struct = "EnumItem" +[Enum.ZIndexBehavior.GetEnumItems] +args = [] +method = true + +[Enum.ZIndexBehavior.Global] +struct = "EnumItem" + +[Enum.ZIndexBehavior.Sibling] +struct = "EnumItem" +[[Instance.new.args]] +type = ["Accoutrement", "Accessory", "Hat", "AdvancedDragger", "Animation", "AnimationController", "Animator", "Attachment", "Backpack", "HopperBin", "Tool", "Flag", "Beam", "BindableEvent", "BindableFunction", "BodyAngularVelocity", "BodyForce", "BodyGyro", "BodyPosition", "BodyThrust", "BodyVelocity", "RocketPropulsion", "Camera", "BodyColors", "CharacterMesh", "Pants", "Shirt", "ShirtGraphic", "Skin", "ClickDetector", "Configuration", "AlignOrientation", "AlignPosition", "AngularVelocity", "BallSocketConstraint", "HingeConstraint", "LineForce", "RodConstraint", "RopeConstraint", "CylindricalConstraint", "PrismaticConstraint", "SpringConstraint", "Torque", "VectorForce", "HumanoidController", "SkateboardController", "VehicleController", "CustomEvent", "CustomEventReceiver", "BlockMesh", "CylinderMesh", "FileMesh", "SpecialMesh", "DebuggerWatch", "Dialog", "DialogChoice", "Dragger", "Explosion", "Decal", "Texture", "Hole", "MotorFeature", "Fire", "FlyweightService", "CSGDictionaryService", "NonReplicatedCSGDictionaryService", "Folder", "ForceField", "FunctionalTest", "Frame", "ImageButton", "TextButton", "ImageLabel", "TextLabel", "ScrollingFrame", "TextBox", "VideoFrame", "ViewportFrame", "BillboardGui", "ScreenGui", "GuiMain", "SurfaceGui", "FloorWire", "SelectionBox", "BoxHandleAdornment", "ConeHandleAdornment", "CylinderHandleAdornment", "ImageHandleAdornment", "LineHandleAdornment", "SphereHandleAdornment", "ParabolaAdornment", "SelectionSphere", "ArcHandles", "Handles", "SurfaceSelection", "SelectionPartLasso", "SelectionPointLasso", "Humanoid", "HumanoidDescription", "RotateP", "RotateV", "Glue", "ManualGlue", "ManualWeld", "Motor", "Motor6D", "Rotate", "Snap", "VelocityMotor", "Weld", "Keyframe", "KeyframeMarker", "KeyframeSequence", "PointLight", "SpotLight", "SurfaceLight", "LocalizationTable", "Script", "LocalScript", "ModuleScript", "Message", "Hint", "NoCollisionConstraint", "CornerWedgePart", "Part", "FlagStand", "Seat", "SkateboardPlatform", "SpawnLocation", "WedgePart", "MeshPart", "PartOperation", "NegateOperation", "UnionOperation", "TrussPart", "VehicleSeat", "Model", "WorldModel", "PartOperationAsset", "ParticleEmitter", "Player", "PluginAction", "Pose", "BloomEffect", "BlurEffect", "ColorCorrectionEffect", "SunRaysEffect", "ReflectionMetadata", "ReflectionMetadataCallbacks", "ReflectionMetadataClasses", "ReflectionMetadataEnums", "ReflectionMetadataEvents", "ReflectionMetadataFunctions", "ReflectionMetadataClass", "ReflectionMetadataEnum", "ReflectionMetadataEnumItem", "ReflectionMetadataMember", "ReflectionMetadataProperties", "ReflectionMetadataYieldFunctions", "RemoteEvent", "RemoteFunction", "RenderingTest", "Sky", "Smoke", "Sound", "ChorusSoundEffect", "CompressorSoundEffect", "DistortionSoundEffect", "EchoSoundEffect", "EqualizerSoundEffect", "FlangeSoundEffect", "PitchShiftSoundEffect", "ReverbSoundEffect", "TremoloSoundEffect", "SoundGroup", "Sparkles", "StandalonePluginScripts", "StarterGear", "SurfaceAppearance", "Team", "TerrainRegion", "TestService", "Trail", "Tween", "UIAspectRatioConstraint", "UISizeConstraint", "UITextSizeConstraint", "UIGradient", "UIGridLayout", "UIInlineLayout", "UIListLayout", "UIPageLayout", "UITableLayout", "UIPadding", "UIScale", "BinaryStringValue", "BoolValue", "BrickColorValue", "CFrameValue", "Color3Value", "DoubleConstrainedValue", "IntConstrainedValue", "IntValue", "NumberValue", "ObjectValue", "RayValue", "StringValue", "Vector3Value", "VirtualInputManager", "WeldConstraint"] +[[NumberRange.new.args]] +type = "number" + +[[NumberRange.new.args]] +required = false +type = "number" +[[NumberSequence.new.args]] +type = "any" + +[[NumberSequence.new.args]] +required = false +type = "number" +[[NumberSequenceKeypoint.new.args]] +type = "number" + +[[NumberSequenceKeypoint.new.args]] +type = "number" + +[[NumberSequenceKeypoint.new.args]] +required = false +type = "number" +[[PhysicalProperties.new.args]] +type = "any" + +[[PhysicalProperties.new.args]] +required = false +type = "number" + +[[PhysicalProperties.new.args]] +required = false +type = "number" + +[[PhysicalProperties.new.args]] +required = false +type = "number" + +[[PhysicalProperties.new.args]] +required = false +type = "number" +[[Random.new.args]] +required = false +type = "number" +[[Ray.new.args]] +[Ray.new.args.type] +display = "Vector3" + +[[Ray.new.args]] +[Ray.new.args.type] +display = "Vector3" +[[Rect.new.args]] +type = "any" + +[[Rect.new.args]] +type = "any" + +[[Rect.new.args]] +required = false +type = "any" + +[[Rect.new.args]] +required = false +type = "any" +[[Region3.new.args]] +[Region3.new.args.type] +display = "Vector3" + +[[Region3.new.args]] +[Region3.new.args.type] +display = "Vector3" +[[Region3int16.new.args]] +[Region3int16.new.args.type] +display = "Vector3" + +[[Region3int16.new.args]] +[Region3int16.new.args.type] +display = "Vector3" +[[TweenInfo.new.args]] +required = false +type = "number" + +[[TweenInfo.new.args]] +required = false + +[TweenInfo.new.args.type] +display = "EasingStyle" + +[[TweenInfo.new.args]] +required = false + +[TweenInfo.new.args.type] +display = "EasingDirection" + +[[TweenInfo.new.args]] +required = false +type = "number" + +[[TweenInfo.new.args]] +required = false +type = "bool" + +[[TweenInfo.new.args]] +required = false +type = "number" +[[UDim.new.args]] +type = "number" + +[[UDim.new.args]] +type = "number" +[[UDim2.fromOffset.args]] +type = "number" + +[[UDim2.fromOffset.args]] +type = "number" +[[UDim2.fromScale.args]] +type = "number" + +[[UDim2.fromScale.args]] +type = "number" +[[UDim2.new.args]] +required = false +type = "any" + +[[UDim2.new.args]] +required = false +type = "any" + +[[UDim2.new.args]] +required = false +type = "any" + +[[UDim2.new.args]] +required = false +type = "any" + +[UserSettings] +args = [] +[[Vector2.new.args]] +required = false +type = "number" + +[[Vector2.new.args]] +required = false +type = "number" +[[Vector2int16.new.args]] +required = false +type = "number" + +[[Vector2int16.new.args]] +required = false +type = "number" +[[Vector3.FromAxis.args]] +[Vector3.FromAxis.args.type] +display = "Axis" +[[Vector3.FromNormalId.args]] +[Vector3.FromNormalId.args.type] +display = "NormalId" +[[Vector3.new.args]] +required = false +type = "number" + +[[Vector3.new.args]] +required = false +type = "number" + +[[Vector3.new.args]] +required = false +type = "number" +[[Vector3int16.new.args]] +required = false +type = "number" + +[[Vector3int16.new.args]] +required = false +type = "number" + +[[Vector3int16.new.args]] +required = false +type = "number" +[[bit32.arshift.args]] +type = "number" + +[[bit32.arshift.args]] +type = "number" +[[bit32.band.args]] +type = "number" +[[bit32.bnot.args]] +type = "number" +[[bit32.bor.args]] +type = "..." +[[bit32.btest.args]] +type = "..." +[[bit32.bxor.args]] +type = "..." +[[bit32.extract.args]] +type = "number" + +[[bit32.extract.args]] +type = "number" + +[[bit32.extract.args]] +required = false +type = "number" +[[bit32.lrotate.args]] +type = "number" + +[[bit32.lrotate.args]] +type = "number" +[[bit32.lshift.args]] +type = "number" + +[[bit32.lshift.args]] +type = "number" +[[bit32.replace.args]] +type = "number" + +[[bit32.replace.args]] +type = "number" + +[[bit32.replace.args]] +required = false +type = "number" +[[bit32.rrotate.args]] +type = "number" + +[[bit32.rrotate.args]] +type = "number" +[[bit32.rshift.args]] +type = "number" + +[[bit32.rshift.args]] +type = "number" +[[collectgarbage.args]] +type = ["count"] +[coroutine.isyieldable] +args = [] +[debug.debug] +removed = true + +[debug.getfenv] +removed = true + +[debug.gethook] +removed = true + +[debug.getinfo] +removed = true + +[debug.getmetatable] +removed = true + +[debug.getregistry] +removed = true + +[debug.getupvalue] +removed = true +[[debug.profilebegin.args]] +type = "string" + +[debug.profileend] +args = [] + +[debug.setfenv] +removed = true + +[debug.sethook] +removed = true + +[debug.setlocal] +removed = true + +[debug.setmetatable] +removed = true + +[debug.setupvalue] +removed = true +[[delay.args]] +type = "number" + +[[delay.args]] +type = "function" + +[dofile] +removed = true + +[game] +struct = "DataModel" + +[io] +removed = true + +[load] +removed = true + +[loadfile] +removed = true +[[math.clamp.args]] +type = "number" + +[[math.clamp.args]] +type = "number" + +[[math.clamp.args]] +type = "number" +[[math.log.args]] +type = "number" + +[[math.log.args]] +required = false +type = "number" +[[math.noise.args]] +type = "number" + +[[math.noise.args]] +required = false +type = "number" + +[[math.noise.args]] +required = false +type = "number" +[[math.sign.args]] +type = "number" + +[module] +removed = true +[os.clock] +removed = true + +[os.execute] +removed = true + +[os.exit] +removed = true + +[os.getenv] +removed = true + +[os.remove] +removed = true + +[os.rename] +removed = true + +[os.setlocale] +removed = true + +[os.tmpname] +removed = true + +[plugin] +struct = "Plugin" + +[script] +struct = "Script" + +[settings] +args = [] + +[shared] +property = true +writable = "new-fields" +[[spawn.args]] +type = "function" +[[string.split.args]] +type = "string" + +[[string.split.args]] +required = false +type = "string" +[[table.create.args]] +type = "number" + +[[table.create.args]] +required = false +type = "any" +[[table.find.args]] +type = "table" + +[[table.find.args]] +type = "any" + +[[table.find.args]] +required = false +type = "number" +[[table.move.args]] +type = "table" + +[[table.move.args]] +type = "number" + +[[table.move.args]] +type = "number" + +[[table.move.args]] +type = "number" + +[[table.move.args]] +required = false +type = "table" +[[table.pack.args]] +type = "..." +[[table.unpack.args]] +type = "table" + +[[table.unpack.args]] +required = false +type = "number" + +[[table.unpack.args]] +required = false +type = "number" + +[tick] +args = [] + +[time] +args = [] +[[typeof.args]] +type = "any" +[[utf8.char.args]] +required = "utf8.char should be used with an argument despite it not throwing" +type = "number" + +[[utf8.char.args]] +required = false +type = "..." + +[utf8.charpattern] +property = true +[[utf8.codepoint.args]] +type = "string" + +[[utf8.codepoint.args]] +required = false +type = "number" + +[[utf8.codepoint.args]] +required = false +type = "number" +[[utf8.codes.args]] +type = "string" +[[utf8.graphemes.args]] +type = "string" + +[[utf8.graphemes.args]] +required = false +type = "number" + +[[utf8.graphemes.args]] +required = false +type = "number" +[[utf8.len.args]] +type = "string" + +[[utf8.len.args]] +required = false +type = "number" + +[[utf8.len.args]] +required = false +type = "number" +[[utf8.nfcnormalize.args]] +type = "string" +[[utf8.nfdnormalize.args]] +type = "string" +[[utf8.offset.args]] +type = "string" + +[[utf8.offset.args]] +required = false +type = "number" + +[[utf8.offset.args]] +required = false +type = "number" +[[wait.args]] +required = false +type = "number" +[[warn.args]] +type = "string" + +[[warn.args]] +required = false +type = "..." + +[workspace] +struct = "Workspace" diff --git a/scripts/open-in-windows b/scripts/open-in-windows new file mode 100755 index 0000000..30563ce --- /dev/null +++ b/scripts/open-in-windows @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +powershell.exe /c "start $(wslpath -w $1)" diff --git a/scripts/upload_model.py b/scripts/upload_model.py new file mode 100644 index 0000000..14e97d3 --- /dev/null +++ b/scripts/upload_model.py @@ -0,0 +1,37 @@ +from argparse import ArgumentParser +import requests + +parser = ArgumentParser() +parser.add_argument("-a", "--assetid", dest="assetid", required=True) +parser.add_argument("-f", "--file", dest="filepath", required=True) +parser.add_argument("-r", "--roblosecurity", + dest="roblosecurity", required=True) + +args = parser.parse_args() + +url = "https://data.roblox.com/Data/Upload.ashx?assetid=" + args.assetid +cookies = {'.ROBLOSECURITY': args.roblosecurity} +headers = { + 'Content-Type': 'application/xml', + 'User-Agent': 'roblox', + 'x-csrf-token': ''} + +with open(args.filepath, 'rb') as file_reader: + payload = file_reader.read() + + response = requests.post( + url=url, + data=payload, + cookies=cookies, + headers=headers) + + if response.status_code == 403: + headers['x-csrf-token'] = response.headers['x-csrf-token'] + response = requests.post( + url=url, + data=payload, + cookies=cookies, + headers=headers) + + if response.status_code != 200: + raise Exception("Request did not succeed") diff --git a/selene.toml b/selene.toml new file mode 100644 index 0000000..2b7bbf6 --- /dev/null +++ b/selene.toml @@ -0,0 +1,4 @@ +std = "roblox-testez" + +[config.unused_variable] +allow_unused_self = true diff --git a/spec.server.lua b/spec.server.lua new file mode 100644 index 0000000..d126a81 --- /dev/null +++ b/spec.server.lua @@ -0,0 +1,13 @@ +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +local TestEZ = require(ReplicatedStorage.rbxts_include.node_modules.testez.src) + +local testRoots = { + ReplicatedStorage.out, +} +local results = TestEZ.TestBootstrap:run(testRoots, TestEZ.Reporters.TextReporter) + +-- Did something go wrong? +if #results.errors > 0 or results.failureCount > 0 then + error("Tests failed") +end diff --git a/src/classes/LockableValueHolder.ts b/src/classes/LockableValueHolder.ts new file mode 100644 index 0000000..9195b8b --- /dev/null +++ b/src/classes/LockableValueHolder.ts @@ -0,0 +1,102 @@ +import { Bin } from "@rbxts/bin"; +import { assertNotDestroyed, warnAlreadyDestroyed } from "@rbxts/destroyed-instance-logging"; +import { IReadOnlySignal } from "@rbxts/signals-tooling"; +import { BinFactory } from "factories/BinFactory"; +import { ValueHolderFactory } from "factories/ValueHolderFactory"; +import { ILockableValueHolder } from "interfaces/ILockableValueHolder"; +import { IValueHolder } from "interfaces/IValueHolder"; + +/** + * Standard implementation of ILockableValueHolder + */ +export class LockableValueHolder implements ILockableValueHolder { + public readonly valueChanged: IReadOnlySignal<(newValue: T, oldValue: T) => void>; + + private bin: Bin; + private currentLockKey: object | undefined; + private readonly internalValueHolder: IValueHolder; + private isDestroyed = false; + + private constructor(binFactory: BinFactory, initialValue: T, valueHolderFactory: ValueHolderFactory) { + this.bin = binFactory.createInstance(); + this.internalValueHolder = this.bin.add(valueHolderFactory.createInstance(initialValue)); + this.valueChanged = this.internalValueHolder.valueChanged; + } + + public static create(this: void, initialValue: T): ILockableValueHolder { + return new LockableValueHolder(new BinFactory(), initialValue, new ValueHolderFactory()); + } + + public destroy() { + if (this.isDestroyed) { + warnAlreadyDestroyed(this); + return; + } + + this.isDestroyed = true; + } + + public getValue() { + assertNotDestroyed(this.isDestroyed, this); + + return this.internalValueHolder.getValue(); + } + + public isLocked(): boolean { + assertNotDestroyed(this.isDestroyed, this); + + return this.currentLockKey !== undefined; + } + + public mustTakeLock(): object { + assertNotDestroyed(this.isDestroyed, this); + + if (this.currentLockKey !== undefined) { + throw `Lock is already taken`; + } + + this.currentLockKey = {}; + return this.currentLockKey; + } + + public releaseLock(lockKey: object): void { + assertNotDestroyed(this.isDestroyed, this); + + if (lockKey !== this.currentLockKey) { + throw `Attempt to unlock without matching key`; + } + + this.currentLockKey = undefined; + } + + public setValue(newValue: T, lockKey?: object) { + assertNotDestroyed(this.isDestroyed, this); + + if (this.currentLockKey !== undefined && lockKey !== this.currentLockKey) { + throw `Attempt to write to a locked value holder`; + } + + this.internalValueHolder.setValue(newValue); + } + + public tryTakeLock(): object | undefined { + assertNotDestroyed(this.isDestroyed, this); + + if (this.currentLockKey !== undefined) { + return undefined; + } + + this.currentLockKey = {}; + return this.currentLockKey; + } + + public updateValue(updateCallback: (currentValue: T) => T, lockKey?: object) { + assertNotDestroyed(this.isDestroyed, this); + + if (this.currentLockKey !== undefined && lockKey !== this.currentLockKey) { + throw `Attempt to write to a locked value holder`; + } + + this.internalValueHolder.updateValue(updateCallback); + } +} diff --git a/src/classes/ValueHolder.ts b/src/classes/ValueHolder.ts new file mode 100644 index 0000000..a644a6b --- /dev/null +++ b/src/classes/ValueHolder.ts @@ -0,0 +1,64 @@ +import { IValueHolder } from "interfaces/IValueHolder"; +import { Bin } from "@rbxts/bin"; +import { ISignal } from "@rbxts/signals-tooling"; +import { BinFactory } from "factories/BinFactory"; +import { SignalFactory } from "factories/SignalFactory"; +import { assertNotDestroyed, warnAlreadyDestroyed } from "@rbxts/destroyed-instance-logging"; + +/** + * Standard implementation of IValueHolder + */ +export class ValueHolder implements IValueHolder { + public readonly valueChanged: ISignal<(newValue: T, oldValue: T) => void>; + + private readonly bin: Bin; + private currentValue: T; + private isDestroyed = false; + + private constructor(binFactory: BinFactory, initialValue: T, signalFactory: SignalFactory) { + this.bin = binFactory.createInstance(); + this.currentValue = initialValue; + + this.valueChanged = this.bin.add(signalFactory.createInstance()); + } + + public static create(this: void, initialValue: T): IValueHolder { + return new ValueHolder(new BinFactory(), initialValue, new SignalFactory()); + } + + public destroy() { + if (this.isDestroyed) { + warnAlreadyDestroyed(this); + return; + } + + this.bin.destroy(); + this.isDestroyed = true; + } + + public getValue() { + assertNotDestroyed(this.isDestroyed, this); + + return this.currentValue; + } + + public setValue(newValue: T) { + assertNotDestroyed(this.isDestroyed, this); + + if (newValue === this.currentValue) { + return; + } + + const oldValue = this.currentValue; + this.currentValue = newValue; + + this.valueChanged.fire(newValue, oldValue); + } + + public updateValue(updateCallback: (currentValue: T) => T) { + assertNotDestroyed(this.isDestroyed, this); + + const newValue = updateCallback(this.currentValue); + this.setValue(newValue); + } +} diff --git a/src/factories/BinFactory.ts b/src/factories/BinFactory.ts new file mode 100644 index 0000000..91f5a5d --- /dev/null +++ b/src/factories/BinFactory.ts @@ -0,0 +1,8 @@ +import { Bin } from "@rbxts/bin"; + +/** @internal */ +export class BinFactory { + public createInstance() { + return new Bin(); + } +} diff --git a/src/factories/SignalFactory.ts b/src/factories/SignalFactory.ts new file mode 100644 index 0000000..a897716 --- /dev/null +++ b/src/factories/SignalFactory.ts @@ -0,0 +1,8 @@ +import { AnyArgs, ISignal, Signal } from "@rbxts/signals-tooling"; + +/** @internal */ +export class SignalFactory { + public createInstance void>(): ISignal { + return new Signal(); + } +} diff --git a/src/factories/ValueHolderFactory.ts b/src/factories/ValueHolderFactory.ts new file mode 100644 index 0000000..e2512ee --- /dev/null +++ b/src/factories/ValueHolderFactory.ts @@ -0,0 +1,8 @@ +import { ValueHolder } from "classes/ValueHolder"; + +/** @internal */ +export class ValueHolderFactory { + public createInstance(initialValue: T) { + return ValueHolder.create(initialValue); + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..7979dcd --- /dev/null +++ b/src/index.ts @@ -0,0 +1,6 @@ +export * from "classes/LockableValueHolder"; +export * from "classes/ValueHolder"; + +export * from "interfaces/ILockableValueHolder"; +export * from "interfaces/IReadonlyValueHolder"; +export * from "interfaces/IValueHolder"; diff --git a/src/interfaces/ILockableValueHolder.d.ts b/src/interfaces/ILockableValueHolder.d.ts new file mode 100644 index 0000000..9d58178 --- /dev/null +++ b/src/interfaces/ILockableValueHolder.d.ts @@ -0,0 +1,51 @@ +import { IReadonlyValueHolder } from "./IReadonlyValueHolder"; + +/** + * Defines a lockable value holder + */ +export interface ILockableValueHolder extends IReadonlyValueHolder { + /** + * Destroys the instance. + * Any further calls to methods on the instance will throw errors. + */ + destroy(): void; + + /** + * Checks whether the value holder is locked + */ + isLocked(): boolean; + + /** + * Tries to take the lock and returns a lock key object if successful, otherwise throws + * @returns The lock key object + * @throws Throws if taking the lock is unsuccessful + */ + mustTakeLock(): object; + + /** + * Releases the lock + * @param lockKey The lock key + */ + releaseLock(lockKey: object): void; + + /** + * Changes the value and fires valueChanged if the new value is not equal to the current value + * @param newValue The new value + * @param lockKey The lock key, if any + */ + setValue(newValue: T, lockKey?: object): void; + + /** + * Tries to take the lock and returns a lock key object if successful, otherwise returns undefined + * @returns The lock key object if successful, otherwise undefined + */ + tryTakeLock(): object | undefined; + + /** + * Calls the provided function and changes the value if the returned value is not equal to the current value + * If the value is changed, then valueChanged is fired + * @param updateCallback A function that takes a current value and returns a new value + * @param lockKey The lock key, if any + */ + updateValue(updateCallback: (currentValue: T) => T, lockKey?: object): void; +} diff --git a/src/interfaces/IReadonlyValueHolder.d.ts b/src/interfaces/IReadonlyValueHolder.d.ts new file mode 100644 index 0000000..09a5cef --- /dev/null +++ b/src/interfaces/IReadonlyValueHolder.d.ts @@ -0,0 +1,17 @@ +import { IDestroyable } from "@rbxts/dumpster"; +import { IReadOnlySignal } from "@rbxts/signals-tooling"; + +/** + * Defines a readonly value manager for a value of type T + */ +export interface IReadonlyValueHolder extends IDestroyable { + /** + * Fired when the value is changed + */ + readonly valueChanged: IReadOnlySignal<(newValue: T, oldValue: T) => void>; + + /** + * Gets the current value + */ + getValue(): T; +} diff --git a/src/interfaces/IValueHolder.d.ts b/src/interfaces/IValueHolder.d.ts new file mode 100644 index 0000000..a6b3e75 --- /dev/null +++ b/src/interfaces/IValueHolder.d.ts @@ -0,0 +1,25 @@ +import { IReadonlyValueHolder } from "./IReadonlyValueHolder"; + +/** + * Defines a writable value holder for a value of type T + */ +export interface IValueHolder extends IReadonlyValueHolder { + /** + * Destroys the instance. + * Any further calls to methods on the instance will throw errors. + */ + destroy(): void; + + /** + * Changes the value and fires valueChanged if the new value is not equal to the current value + * @param newValue The new value + */ + setValue(newValue: T): void; + + /** + * Calls the provided function and changes the value if the returned value is not equal to the current value + * If the value is changed, then valueChanged is fired + * @param updateCallback A function that takes a current value and returns a new value + */ + updateValue(updateCallback: (currentValue: T) => T): void; +} diff --git a/standalone-model.project.json b/standalone-model.project.json new file mode 100644 index 0000000..b0b45ba --- /dev/null +++ b/standalone-model.project.json @@ -0,0 +1,16 @@ +{ + "name": "value-holders", + "globIgnorePaths": [ + "**/package.json", + "**/tsconfig.json" + ], + "tree": { + "$path": "out", + "include": { + "$path": "include", + "node_modules": { + "$path": "node_modules/@rbxts" + } + } + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e5975fe --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + // required + "allowSyntheticDefaultImports": true, + "downlevelIteration": true, + "jsx": "react", + "jsxFactory": "Roact.createElement", + "jsxFragmentFactory": "Roact.Fragment", + "module": "commonjs", + "moduleResolution": "Node", + "noLib": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "target": "ESNext", + "typeRoots": ["node_modules/@rbxts"], + + // configurable + "rootDir": "src", + "outDir": "out", + "baseUrl": "src", + "incremental": true, + "tsBuildInfoFile": "out/tsconfig.tsbuildinfo", + "declaration": true + } +} diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..3e436bc --- /dev/null +++ b/typedoc.json @@ -0,0 +1,9 @@ +{ + "entryPoints": [ + "./src/index.ts" + ], + "excludePrivate": true, + "excludeInternal": true, + "plugin": "typedoc-plugin-markdown", + "readme": "none" +} \ No newline at end of file diff --git a/wally.lock b/wally.lock new file mode 100644 index 0000000..2d18dd4 --- /dev/null +++ b/wally.lock @@ -0,0 +1,8 @@ +# This file is automatically @generated by Wally. +# It is not intended for manual editing. +registry = "test" + +[[package]] +name = "bytebit/value-holders" +version = "0.0.1" +dependencies = [] diff --git a/wally.toml b/wally.toml new file mode 100644 index 0000000..1bf4230 --- /dev/null +++ b/wally.toml @@ -0,0 +1,9 @@ +[package] +name = "bytebit/value-holders" +description = "A module for passing any values around by sharing a pointer, as well as allowing consumers to subscribe to changes and allowing authors to hold locks on changing the value." +version = "0.0.1" +license = "MIT" +registry = "https://github.com/UpliftGames/wally-index" +realm = "shared" + +[dependencies]