summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorkotontrion <[email protected]>2024-10-29 13:50:41 +0100
committerkotontrion <[email protected]>2024-10-29 13:50:41 +0100
commit57f20666e716fde56579b8aa638eed1264f793de (patch)
tree59b2ebbd770c80049cea4df82109d28f617675fe /core
parent4d9ae88b0bab75779876d465f986791d052414ca (diff)
parent7e484188e7492ac7945c854bcc3f26cec1863c91 (diff)
Merge branch 'main' into feat/cava
Diffstat (limited to 'core')
-rw-r--r--core/gjs/.gitignore4
-rw-r--r--core/gjs/eslint.config.mjs18
-rw-r--r--core/gjs/index.ts13
-rw-r--r--core/gjs/package-lock.json3209
-rw-r--r--core/gjs/package.json48
-rw-r--r--core/gjs/src/application.ts103
-rw-r--r--core/gjs/src/astalify.ts322
-rw-r--r--core/gjs/src/binding.ts89
-rw-r--r--core/gjs/src/file.ts44
-rw-r--r--core/gjs/src/gobject.ts178
-rw-r--r--core/gjs/src/imports.ts10
-rw-r--r--core/gjs/src/jsx/jsx-runtime.ts88
-rw-r--r--core/gjs/src/process.ts68
-rw-r--r--core/gjs/src/time.ts13
-rw-r--r--core/gjs/src/variable.ts231
-rw-r--r--core/gjs/src/widgets.ts154
-rw-r--r--core/gjs/tsconfig.json25
-rw-r--r--core/lua/astal-dev-1.rockspec31
-rw-r--r--core/lua/astal/application.lua94
-rw-r--r--core/lua/astal/binding.lua71
-rw-r--r--core/lua/astal/file.lua45
-rw-r--r--core/lua/astal/init.lua41
-rw-r--r--core/lua/astal/process.lua78
-rw-r--r--core/lua/astal/time.lua27
-rw-r--r--core/lua/astal/variable.lua276
-rw-r--r--core/lua/astal/widget.lua322
-rw-r--r--core/lua/stylua.toml3
-rw-r--r--core/meson.build27
-rw-r--r--core/meson_options.txt17
-rw-r--r--core/src/astal.vala375
-rw-r--r--core/src/cli.vala87
-rw-r--r--core/src/config.vala.in6
-rw-r--r--core/src/file.vala81
-rw-r--r--core/src/idle-inhibit.c114
-rw-r--r--core/src/idle-inhibit.h22
-rw-r--r--core/src/meson.build136
-rw-r--r--core/src/process.vala119
-rw-r--r--core/src/time.vala73
-rw-r--r--core/src/vapi/AstalInhibitManager.vapi13
-rw-r--r--core/src/variable.vala196
-rw-r--r--core/src/widget/box.vala62
-rw-r--r--core/src/widget/button.vala101
-rw-r--r--core/src/widget/centerbox.vala54
-rw-r--r--core/src/widget/circularprogress.vala182
-rw-r--r--core/src/widget/eventbox.vala66
-rw-r--r--core/src/widget/icon.vala107
-rw-r--r--core/src/widget/label.vala18
-rw-r--r--core/src/widget/levelbar.vala15
-rw-r--r--core/src/widget/overlay.vala59
-rw-r--r--core/src/widget/scrollable.vala42
-rw-r--r--core/src/widget/slider.vala73
-rw-r--r--core/src/widget/stack.vala26
-rw-r--r--core/src/widget/widget.vala157
-rw-r--r--core/src/widget/window.vala255
-rw-r--r--core/version1
55 files changed, 0 insertions, 8089 deletions
diff --git a/core/gjs/.gitignore b/core/gjs/.gitignore
deleted file mode 100644
index 53f4bc3..0000000
--- a/core/gjs/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules/
-result/
-dist/
-@girs/
diff --git a/core/gjs/eslint.config.mjs b/core/gjs/eslint.config.mjs
deleted file mode 100644
index 99dad7d..0000000
--- a/core/gjs/eslint.config.mjs
+++ /dev/null
@@ -1,18 +0,0 @@
-import eslint from "@eslint/js"
-import tseslint from "typescript-eslint"
-import stylistic from "@stylistic/eslint-plugin"
-
-export default tseslint.config({
- extends: [
- eslint.configs.recommended,
- ...tseslint.configs.recommended,
- stylistic.configs.customize({
- semi: false,
- indent: 4,
- quotes: "double",
- }),
- ],
- rules: {
- "@typescript-eslint/no-explicit-any": "off",
- },
-})
diff --git a/core/gjs/index.ts b/core/gjs/index.ts
deleted file mode 100644
index 901b264..0000000
--- a/core/gjs/index.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Gtk } from "./src/imports.js"
-
-export * from "./src/imports.js"
-export * from "./src/process.js"
-export * from "./src/time.js"
-export * from "./src/file.js"
-export { bind, default as Binding } from "./src/binding.js"
-export { Variable } from "./src/variable.js"
-export * as Widget from "./src/widgets.js"
-export { default as App } from "./src/application.js"
-
-// gjs crashes if a widget is constructed before Gtk.init
-Gtk.init(null)
diff --git a/core/gjs/package-lock.json b/core/gjs/package-lock.json
deleted file mode 100644
index aa679c8..0000000
--- a/core/gjs/package-lock.json
+++ /dev/null
@@ -1,3209 +0,0 @@
-{
- "name": "astal",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "astal",
- "version": "0.1.0",
- "license": "GPL",
- "os": [
- "linux"
- ],
- "devDependencies": {
- "@eslint/js": "^9.7.0",
- "@stylistic/eslint-plugin": "latest",
- "@ts-for-gir/cli": "latest",
- "@types/eslint__js": "^8.42.3",
- "eslint": "^8.57.0",
- "typescript": "^5.5.3",
- "typescript-eslint": "^7.16.1"
- },
- "engines": {
- "gjs": ">=1.79.0"
- },
- "funding": {
- "type": "kofi",
- "url": "https://ko-fi.com/aylur"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
- "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.24.7",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
- "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
- "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.24.7",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "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": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "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-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
- "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
- "dev": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/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/@eslint/js": {
- "version": "9.7.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.7.0.tgz",
- "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@gi.ts/parser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@gi.ts/parser/-/parser-2.0.0.tgz",
- "integrity": "sha512-Tz5T+3Ep+qY7rfBnYMGdVraCCUf1CKkDfxNd2fggfHLzjI7u5Th8a/piPgj0001jDs5czI+Ec3peh+6gkKPmHw==",
- "dev": true,
- "dependencies": {
- "fast-xml-parser": "^4.3.5"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/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/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true
- },
- "node_modules/@inquirer/figures": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.4.tgz",
- "integrity": "sha512-R7Gsg6elpuqdn55fBH2y9oYzrU/yKrSmIsDX4ROT51vohrECFzTf2zw9BfUbOW8xjfmM2QbVoVYdTwhrtEKWSQ==",
- "dev": true,
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "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/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@stylistic/eslint-plugin": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.3.0.tgz",
- "integrity": "sha512-rtiz6u5gRyyEZp36FcF1/gHJbsbT3qAgXZ1qkad6Nr/xJ9wrSJkiSFFQhpYVTIZ7FJNRJurEcumZDCwN9dEI4g==",
- "dev": true,
- "dependencies": {
- "@stylistic/eslint-plugin-js": "2.3.0",
- "@stylistic/eslint-plugin-jsx": "2.3.0",
- "@stylistic/eslint-plugin-plus": "2.3.0",
- "@stylistic/eslint-plugin-ts": "2.3.0",
- "@types/eslint": "^8.56.10"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-js": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.3.0.tgz",
- "integrity": "sha512-lQwoiYb0Fs6Yc5QS3uT8+T9CPKK2Eoxc3H8EnYJgM26v/DgtW+1lvy2WNgyBflU+ThShZaHm3a6CdD9QeKx23w==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "^8.56.10",
- "acorn": "^8.11.3",
- "eslint-visitor-keys": "^4.0.0",
- "espree": "^10.0.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-jsx": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.3.0.tgz",
- "integrity": "sha512-tsQ0IEKB195H6X9A4iUSgLLLKBc8gUBWkBIU8tp1/3g2l8stu+PtMQVV/VmK1+3bem5FJCyvfcZIQ/WF1fsizA==",
- "dev": true,
- "dependencies": {
- "@stylistic/eslint-plugin-js": "^2.3.0",
- "@types/eslint": "^8.56.10",
- "estraverse": "^5.3.0",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.3.0.tgz",
- "integrity": "sha512-xboPWGUU5yaPlR+WR57GwXEuY4PSlPqA0C3IdNA/+1o2MuBi95XgDJcZiJ9N+aXsqBXAPIpFFb+WQ7QEHo4f7g==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "^8.56.10",
- "@typescript-eslint/utils": "^7.12.0"
- },
- "peerDependencies": {
- "eslint": "*"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.3.0.tgz",
- "integrity": "sha512-wqOR38/uz/0XPnHX68ftp8sNMSAqnYGjovOTN7w00xnjS6Lxr3Sk7q6AaxWWqbMvOj7V2fQiMC5HWAbTruJsCg==",
- "dev": true,
- "dependencies": {
- "@stylistic/eslint-plugin-js": "2.3.0",
- "@types/eslint": "^8.56.10",
- "@typescript-eslint/utils": "^7.12.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
- },
- "node_modules/@ts-for-gir/cli": {
- "version": "4.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@ts-for-gir/cli/-/cli-4.0.0-beta.7.tgz",
- "integrity": "sha512-s345hGCB2su0NIFA7A10GIY9mLiNtrbSXp9ZscKsasx6Fm77QZybO09dLcIPMuePq8gbRlOpNp8MedAqO7zWRw==",
- "dev": true,
- "dependencies": {
- "@gi.ts/parser": "^2.0.0",
- "@ts-for-gir/generator-base": "^4.0.0-beta.7",
- "@ts-for-gir/generator-html-doc": "^4.0.0-beta.7",
- "@ts-for-gir/generator-typescript": "^4.0.0-beta.7",
- "@ts-for-gir/lib": "^4.0.0-beta.7",
- "colorette": "^2.0.20",
- "cosmiconfig": "^9.0.0",
- "glob": "^11.0.0",
- "inquirer": "^9.3.5",
- "prettier": "^3.3.3",
- "yargs": "^17.7.2"
- },
- "bin": {
- "ts-for-gir": "lib/start.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@ts-for-gir/generator-base": {
- "version": "4.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@ts-for-gir/generator-base/-/generator-base-4.0.0-beta.7.tgz",
- "integrity": "sha512-Z3dlwea0LvbGwcb51xjSqp33n5wvqmsX7r1EwbA4vEPuN7AgPm2LDbL68G5HO6QOmFDt05Fe0gjumfzjGE8Xlw==",
- "dev": true,
- "dependencies": {
- "@ts-for-gir/lib": "^4.0.0-beta.7"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@ts-for-gir/generator-html-doc": {
- "version": "4.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@ts-for-gir/generator-html-doc/-/generator-html-doc-4.0.0-beta.7.tgz",
- "integrity": "sha512-srz4nSSfcqCQUQcV4Ia5booXEy7gC54iv7Q1E80cdnM/cg0XWq4XaTfCbH27CqcY2zS+KsVUJm7PWI7LHeUeiw==",
- "dev": true,
- "dependencies": {
- "@ts-for-gir/generator-base": "^4.0.0-beta.7",
- "@ts-for-gir/lib": "^4.0.0-beta.7"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@ts-for-gir/generator-typescript": {
- "version": "4.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@ts-for-gir/generator-typescript/-/generator-typescript-4.0.0-beta.7.tgz",
- "integrity": "sha512-6WVPHVod6YINT5ZX1TSaPy8b1+A1t3TAi+1Byx/nH5aF4o1jPmn1KKorvxOIDcvlqnjux053r+rjweIR+1w9Zw==",
- "dev": true,
- "dependencies": {
- "@ts-for-gir/generator-base": "^4.0.0-beta.7",
- "@ts-for-gir/lib": "^4.0.0-beta.7",
- "ejs": "^3.1.10",
- "xml2js": "^0.6.2"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@ts-for-gir/lib": {
- "version": "4.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@ts-for-gir/lib/-/lib-4.0.0-beta.7.tgz",
- "integrity": "sha512-9hhCk3OBA0diIG5KuqSCJAy6D91hVUK2JiuLbxNfdmvAaMS+4BvYSGKg+DdXvmgoTip4LqCo4EsFTHfuo7QQHg==",
- "dev": true,
- "dependencies": {
- "@gi.ts/parser": "^2.0.0",
- "colorette": "^2.0.20",
- "ejs": "^3.1.10",
- "glob": "^11.0.0",
- "lodash": "^4.17.21"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@types/eslint": {
- "version": "8.56.10",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
- "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
- "dev": true,
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/eslint__js": {
- "version": "8.42.3",
- "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz",
- "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz",
- "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==",
- "dev": true,
- "dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.16.1",
- "@typescript-eslint/type-utils": "7.16.1",
- "@typescript-eslint/utils": "7.16.1",
- "@typescript-eslint/visitor-keys": "7.16.1",
- "graphemer": "^1.4.0",
- "ignore": "^5.3.1",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^7.0.0",
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz",
- "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "7.16.1",
- "@typescript-eslint/types": "7.16.1",
- "@typescript-eslint/typescript-estree": "7.16.1",
- "@typescript-eslint/visitor-keys": "7.16.1",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz",
- "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.16.1",
- "@typescript-eslint/visitor-keys": "7.16.1"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz",
- "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/typescript-estree": "7.16.1",
- "@typescript-eslint/utils": "7.16.1",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz",
- "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz",
- "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.16.1",
- "@typescript-eslint/visitor-keys": "7.16.1",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz",
- "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.16.1",
- "@typescript-eslint/types": "7.16.1",
- "@typescript-eslint/typescript-estree": "7.16.1"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz",
- "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.16.1",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "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-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/async": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
- "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
- "dev": true
- },
- "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/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "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/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "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/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "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": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "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/chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
- },
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
- "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-width": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
- "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
- "dev": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
- "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/colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/cosmiconfig": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
- "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
- "dev": true,
- "dependencies": {
- "env-paths": "^2.2.1",
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": 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.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
- "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/defaults": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
- "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
- "dev": true,
- "dependencies": {
- "clone": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "node_modules/ejs": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
- "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
- "dev": true,
- "dependencies": {
- "jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.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/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eslint": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
- "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.0",
- "@humanwhocodes/config-array": "^0.11.14",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
- "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/eslint/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/eslint/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/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/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/espree": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
- "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.12.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.0.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "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/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/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/external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dev": true,
- "dependencies": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fast-xml-parser": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz",
- "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/naturalintelligence"
- }
- ],
- "dependencies": {
- "strnum": "^1.0.5"
- },
- "bin": {
- "fxparser": "src/cli/cli.js"
- }
- },
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "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/filelist": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
- "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
- "dev": true,
- "dependencies": {
- "minimatch": "^5.0.1"
- }
- },
- "node_modules/filelist/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
- "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "dev": true
- },
- "node_modules/foreground-child": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
- "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/glob": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
- "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^4.0.1",
- "minimatch": "^10.0.0",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^2.0.0"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globals/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/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/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "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/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "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/ignore": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
- "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
- "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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "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/inquirer": {
- "version": "9.3.6",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.6.tgz",
- "integrity": "sha512-riK/iQB2ctwkpWYgjjWIRv3MBLt2gzb2Sj0JNQNbyTXgyXsLWcDPJ5WS5ZDTCx7BRFnJsARtYh+58fjP5M2Y0Q==",
- "dev": true,
- "dependencies": {
- "@inquirer/figures": "^1.0.3",
- "ansi-escapes": "^4.3.2",
- "cli-width": "^4.1.0",
- "external-editor": "^3.1.0",
- "mute-stream": "1.0.0",
- "ora": "^5.4.1",
- "run-async": "^3.0.0",
- "rxjs": "^7.8.1",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^6.2.0",
- "yoctocolors-cjs": "^2.1.2"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "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-interactive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "node_modules/jackspeak": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
- "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jake": {
- "version": "10.9.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
- "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
- "dev": true,
- "dependencies": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.4",
- "minimatch": "^3.1.2"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jake/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/jake/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/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": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "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/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lru-cache": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz",
- "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==",
- "dev": true,
- "engines": {
- "node": "20 || >=22"
- }
- },
- "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.7",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
- "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/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/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/minimatch": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
- "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "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/mute-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
- "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
- "dev": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "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.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ora": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
- "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
- "dev": true,
- "dependencies": {
- "bl": "^4.1.0",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-spinners": "^2.5.0",
- "is-interactive": "^1.0.0",
- "is-unicode-supported": "^0.1.0",
- "log-symbols": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
- },
- "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/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "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-scurry": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
- "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^11.0.0",
- "minipass": "^7.1.2"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "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/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "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": "3.3.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
- "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
- "dev": true,
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "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/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "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/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/restore-cursor/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "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==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/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/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/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/run-async": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
- "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "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/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/sax": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
- "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
- "dev": true
- },
- "node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
- "dev": true,
- "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/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "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/string-width-cjs": {
- "name": "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-ansi-cjs": {
- "name": "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/strnum": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
- "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
- "dev": true
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "node_modules/tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "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/ts-api-utils": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
- "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "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.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typescript": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
- "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
- "dev": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/typescript-eslint": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.1.tgz",
- "integrity": "sha512-889oE5qELj65q/tGeOSvlreNKhimitFwZqQ0o7PcWC7/lgRkAMknznsCsV8J8mZGTP/Z+cIbX8accf2DE33hrA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "7.16.1",
- "@typescript-eslint/parser": "7.16.1",
- "@typescript-eslint/utils": "7.16.1"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
- "dev": true,
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "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.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/xml2js": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
- "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
- "dev": true,
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yoctocolors-cjs": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
- "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
- "dev": true,
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/core/gjs/package.json b/core/gjs/package.json
deleted file mode 100644
index e829409..0000000
--- a/core/gjs/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "astal",
- "version": "0.1.0",
- "description": "Building blocks for buildin linux desktop shell",
- "type": "module",
- "author": "Aylur",
- "license": "GPL",
- "repository": {
- "type": "git",
- "url": "https://github.com/astal-sh/libastal.git",
- "directory": "gjs"
- },
- "funding": {
- "type": "kofi",
- "url": "https://ko-fi.com/aylur"
- },
- "exports": {
- ".": "./index.ts",
- "./application": "./src/application.ts",
- "./binding": "./src/binding.ts",
- "./file": "./src/file.ts",
- "./gobject": "./src/gobject.ts",
- "./process": "./src/process.ts",
- "./time": "./src/time.ts",
- "./variable": "./src/variable.ts",
- "./widgets": "./src/widgets.ts"
- },
- "engines": {
- "gjs": ">=1.79.0"
- },
- "os": [
- "linux"
- ],
- "publishConfig": {},
- "devDependencies": {
- "@eslint/js": "^9.7.0",
- "@stylistic/eslint-plugin": "latest",
- "@ts-for-gir/cli": "latest",
- "@types/eslint__js": "^8.42.3",
- "eslint": "^8.57.0",
- "typescript": "^5.5.3",
- "typescript-eslint": "^7.16.1"
- },
- "scripts": {
- "lint": "eslint . --fix",
- "types": "ts-for-gir generate -o @girs"
- }
-}
diff --git a/core/gjs/src/application.ts b/core/gjs/src/application.ts
deleted file mode 100644
index bf82cbe..0000000
--- a/core/gjs/src/application.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { Astal, GObject, Gio, GLib } from "./imports.js"
-
-type RequestHandler = {
- (request: string, res: (response: any) => void): void
-}
-
-type Config = Partial<{
- icons: string
- instanceName: string
- gtkTheme: string
- iconTheme: string
- cursorTheme: string
- css: string
- requestHandler: RequestHandler
- main(...args: string[]): void
- client(message: (msg: string) => string, ...args: string[]): void
- hold: boolean
-}>
-
-// @ts-expect-error missing types
-// https://github.com/gjsify/ts-for-gir/issues/164
-import { setConsoleLogDomain } from "console"
-import { exit, programArgs } from "system"
-
-export default new (class AstalJS extends Astal.Application {
- static { GObject.registerClass(this) }
-
- eval(body: string): Promise<any> {
- return new Promise((res, rej) => {
- try {
- const fn = Function(`return (async function() {
- ${body.includes(";") ? body : `return ${body};`}
- })`)
- fn()()
- .then(res)
- .catch(rej)
- }
- catch (error) {
- rej(error)
- }
- })
- }
-
- requestHandler?: RequestHandler
-
- vfunc_request(msg: string, conn: Gio.SocketConnection): void {
- if (typeof this.requestHandler === "function") {
- this.requestHandler(msg, (response) => {
- Astal.write_sock(conn, String(response), (_, res) =>
- Astal.write_sock_finish(res),
- )
- })
- }
- else {
- super.vfunc_request(msg, conn)
- }
- }
-
- apply_css(style: string, reset = false) {
- super.apply_css(style, reset)
- }
-
- quit(code?: number): void {
- super.quit()
- exit(code ?? 0)
- }
-
- start({ requestHandler, css, hold, main, client, icons, ...cfg }: Config = {}) {
- client ??= () => {
- print(`Astal instance "${this.instanceName}" already running`)
- exit(1)
- }
-
- Object.assign(this, cfg)
- setConsoleLogDomain(this.instanceName)
-
- this.requestHandler = requestHandler
- this.connect("activate", () => {
- const path: string[] = import.meta.url.split("/").slice(3)
- const file = path.at(-1)!.replace(".js", ".css")
- const css = `/${path.slice(0, -1).join("/")}/${file}`
- if (file.endsWith(".css") && GLib.file_test(css, GLib.FileTest.EXISTS))
- this.apply_css(css, false)
-
- main?.(...programArgs)
- })
-
- if (!this.acquire_socket())
- return client(msg => Astal.Application.send_message(this.instanceName, msg)!, ...programArgs)
-
- if (css)
- this.apply_css(css, false)
-
- if (icons)
- this.add_icons(icons)
-
- hold ??= true
- if (hold)
- this.hold()
-
- this.runAsync([])
- }
-})
diff --git a/core/gjs/src/astalify.ts b/core/gjs/src/astalify.ts
deleted file mode 100644
index c4cbc5c..0000000
--- a/core/gjs/src/astalify.ts
+++ /dev/null
@@ -1,322 +0,0 @@
-import Binding, { kebabify, snakeify, type Connectable, type Subscribable } from "./binding.js"
-import { Astal, Gtk, Gdk, GObject } from "./imports.js"
-import { execAsync } from "./process.js"
-import Variable from "./variable.js"
-
-function mergeBindings(array: any[]) {
- function getValues(...args: any[]) {
- let i = 0
- return array.map(value => value instanceof Binding
- ? args[i++]
- : value,
- )
- }
-
- const bindings = array.filter(i => i instanceof Binding)
-
- if (bindings.length === 0)
- return array
-
- if (bindings.length === 1)
- return bindings[0].as(getValues)
-
- return Variable.derive(bindings, getValues)()
-}
-
-function setProp(obj: any, prop: string, value: any) {
- try {
- // the setter method has to be used because
- // array like properties are not bound correctly as props
- const setter = `set_${snakeify(prop)}`
- if (typeof obj[setter] === "function")
- return obj[setter](value)
-
- return (obj[prop] = value)
- }
- catch (error) {
- console.error(`could not set property "${prop}" on ${obj}:`, error)
- }
-}
-
-export default function astalify<
- C extends { new(...args: any[]): Gtk.Widget },
->(cls: C) {
- class Widget extends cls {
- get css(): string { return Astal.widget_get_css(this) }
- set css(css: string) { Astal.widget_set_css(this, css) }
- get_css(): string { return this.css }
- set_css(css: string) { this.css = css }
-
- get className(): string { return Astal.widget_get_class_names(this).join(" ") }
- set className(className: string) { Astal.widget_set_class_names(this, className.split(/\s+/)) }
- get_class_name(): string { return this.className }
- set_class_name(className: string) { this.className = className }
-
- get cursor(): Cursor { return Astal.widget_get_cursor(this) as Cursor }
- set cursor(cursor: Cursor) { Astal.widget_set_cursor(this, cursor) }
- get_cursor(): Cursor { return this.cursor }
- set_cursor(cursor: Cursor) { this.cursor = cursor }
-
- get clickThrough(): boolean { return Astal.widget_get_click_through(this) }
- set clickThrough(clickThrough: boolean) { Astal.widget_set_click_through(this, clickThrough) }
- get_click_through(): boolean { return this.clickThrough }
- set_click_through(clickThrough: boolean) { this.clickThrough = clickThrough }
-
- declare __no_implicit_destroy: boolean
- get noImplicitDestroy(): boolean { return this.__no_implicit_destroy }
- set noImplicitDestroy(value: boolean) { this.__no_implicit_destroy = value }
-
- _setChildren(children: Gtk.Widget[]) {
- children = children.flat(Infinity).map(ch => ch instanceof Gtk.Widget
- ? ch
- : new Gtk.Label({ visible: true, label: String(ch) }))
-
- // remove
- if (this instanceof Gtk.Bin) {
- const ch = this.get_child()
- if (ch)
- this.remove(ch)
- if (ch && !children.includes(ch) && !this.noImplicitDestroy)
- ch?.destroy()
- }
- else if (this instanceof Gtk.Container) {
- for (const ch of this.get_children()) {
- this.remove(ch)
- if (!children.includes(ch) && !this.noImplicitDestroy)
- ch?.destroy()
- }
- }
-
- // TODO: add more container types
- if (this instanceof Astal.Box) {
- this.set_children(children)
- }
-
- else if (this instanceof Astal.Stack) {
- this.set_children(children)
- }
-
- else if (this instanceof Astal.CenterBox) {
- this.startWidget = children[0]
- this.centerWidget = children[1]
- this.endWidget = children[2]
- }
-
- else if (this instanceof Astal.Overlay) {
- const [child, ...overlays] = children
- this.set_child(child)
- this.set_overlays(overlays)
- }
-
- else if (this instanceof Gtk.Container) {
- for (const ch of children)
- this.add(ch)
- }
- }
-
- toggleClassName(cn: string, cond = true) {
- Astal.widget_toggle_class_name(this, cn, cond)
- }
-
- hook(
- object: Connectable,
- signal: string,
- callback: (self: this, ...args: any[]) => void,
- ): this
- hook(
- object: Subscribable,
- callback: (self: this, ...args: any[]) => void,
- ): this
- hook(
- object: Connectable | Subscribable,
- signalOrCallback: string | ((self: this, ...args: any[]) => void),
- callback?: (self: this, ...args: any[]) => void,
- ) {
- if (typeof object.connect === "function" && callback) {
- const id = object.connect(signalOrCallback, (_: any, ...args: unknown[]) => {
- callback(this, ...args)
- })
- this.connect("destroy", () => {
- (object.disconnect as Connectable["disconnect"])(id)
- })
- }
-
- else if (typeof object.subscribe === "function" && typeof signalOrCallback === "function") {
- const unsub = object.subscribe((...args: unknown[]) => {
- signalOrCallback(this, ...args)
- })
- this.connect("destroy", unsub)
- }
-
- return this
- }
-
- constructor(...params: any[]) {
- super()
- const [config] = params
-
- const { setup, child, children = [], ...props } = config
- props.visible ??= true
-
- if (child)
- children.unshift(child)
-
- // collect bindings
- const bindings = Object.keys(props).reduce((acc: any, prop) => {
- if (props[prop] instanceof Binding) {
- const binding = props[prop]
- delete props[prop]
- return [...acc, [prop, binding]]
- }
- return acc
- }, [])
-
- // collect signal handlers
- const onHandlers = Object.keys(props).reduce((acc: any, key) => {
- if (key.startsWith("on")) {
- const sig = kebabify(key).split("-").slice(1).join("-")
- const handler = props[key]
- delete props[key]
- return [...acc, [sig, handler]]
- }
- return acc
- }, [])
-
- // set children
- const mergedChildren = mergeBindings(children.flat(Infinity))
- if (mergedChildren instanceof Binding) {
- this._setChildren(mergedChildren.get())
- this.connect("destroy", mergedChildren.subscribe((v) => {
- this._setChildren(v)
- }))
- }
- else {
- if (mergedChildren.length > 0) {
- this._setChildren(mergedChildren)
- }
- }
-
- // setup signal handlers
- for (const [signal, callback] of onHandlers) {
- if (typeof callback === "function") {
- this.connect(signal, callback)
- }
- else {
- this.connect(signal, () => execAsync(callback)
- .then(print).catch(console.error))
- }
- }
-
- // setup bindings handlers
- for (const [prop, binding] of bindings) {
- if (prop === "child" || prop === "children") {
- this.connect("destroy", binding.subscribe((v: any) => {
- this._setChildren(v)
- }))
- }
- this.connect("destroy", binding.subscribe((v: any) => {
- setProp(this, prop, v)
- }))
- setProp(this, prop, binding.get())
- }
-
- Object.assign(this, props)
- setup?.(this)
- }
- }
-
- GObject.registerClass({
- GTypeName: `Astal_${cls.name}`,
- Properties: {
- "class-name": GObject.ParamSpec.string(
- "class-name", "", "", GObject.ParamFlags.READWRITE, "",
- ),
- "css": GObject.ParamSpec.string(
- "css", "", "", GObject.ParamFlags.READWRITE, "",
- ),
- "cursor": GObject.ParamSpec.string(
- "cursor", "", "", GObject.ParamFlags.READWRITE, "default",
- ),
- "click-through": GObject.ParamSpec.boolean(
- "click-through", "", "", GObject.ParamFlags.READWRITE, false,
- ),
- "no-implicit-destroy": GObject.ParamSpec.boolean(
- "no-implicit-destroy", "", "", GObject.ParamFlags.READWRITE, false,
- ),
- },
- }, Widget)
-
- return Widget
-}
-
-type BindableProps<T> = {
- [K in keyof T]: Binding<T[K]> | T[K];
-}
-
-type SigHandler<
- W extends InstanceType<typeof Gtk.Widget>,
- Args extends Array<unknown>,
-> = ((self: W, ...args: Args) => unknown) | string | string[]
-
-export type ConstructProps<
- Self extends InstanceType<typeof Gtk.Widget>,
- Props extends Gtk.Widget.ConstructorProps,
- Signals extends Record<`on${string}`, Array<unknown>> = Record<`on${string}`, any[]>,
-> = Partial<{
- // @ts-expect-error can't assign to unknown, but it works as expected though
- [S in keyof Signals]: SigHandler<Self, Signals[S]>
-}> & Partial<{
- [Key in `on${string}`]: SigHandler<Self, any[]>
-}> & BindableProps<Partial<Props> & {
- className?: string
- css?: string
- cursor?: string
- clickThrough?: boolean
-}> & {
- onDestroy?: (self: Self) => unknown
- onDraw?: (self: Self) => unknown
- onKeyPressEvent?: (self: Self, event: Gdk.Event) => unknown
- onKeyReleaseEvent?: (self: Self, event: Gdk.Event) => unknown
- onButtonPressEvent?: (self: Self, event: Gdk.Event) => unknown
- onButtonReleaseEvent?: (self: Self, event: Gdk.Event) => unknown
- onRealize?: (self: Self) => unknown
- setup?: (self: Self) => void
-}
-
-export type BindableChild = Gtk.Widget | Binding<Gtk.Widget>
-
-type Cursor =
- | "default"
- | "help"
- | "pointer"
- | "context-menu"
- | "progress"
- | "wait"
- | "cell"
- | "crosshair"
- | "text"
- | "vertical-text"
- | "alias"
- | "copy"
- | "no-drop"
- | "move"
- | "not-allowed"
- | "grab"
- | "grabbing"
- | "all-scroll"
- | "col-resize"
- | "row-resize"
- | "n-resize"
- | "e-resize"
- | "s-resize"
- | "w-resize"
- | "ne-resize"
- | "nw-resize"
- | "sw-resize"
- | "se-resize"
- | "ew-resize"
- | "ns-resize"
- | "nesw-resize"
- | "nwse-resize"
- | "zoom-in"
- | "zoom-out"
diff --git a/core/gjs/src/binding.ts b/core/gjs/src/binding.ts
deleted file mode 100644
index 95d905f..0000000
--- a/core/gjs/src/binding.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-export const snakeify = (str: string) => str
- .replace(/([a-z])([A-Z])/g, "$1_$2")
- .replaceAll("-", "_")
- .toLowerCase()
-
-export const kebabify = (str: string) => str
- .replace(/([a-z])([A-Z])/g, "$1-$2")
- .replaceAll("_", "-")
- .toLowerCase()
-
-export interface Subscribable<T = unknown> {
- subscribe(callback: (value: T) => void): () => void
- get(): T
- [key: string]: any
-}
-
-export interface Connectable {
- connect(signal: string, callback: (...args: any[]) => unknown): number
- disconnect(id: number): void
- [key: string]: any
-}
-
-export default class Binding<Value> {
- private transformFn = (v: any) => v
-
- #emitter: Subscribable<Value> | Connectable
- #prop?: string
-
- static bind<
- T extends Connectable,
- P extends keyof T,
- >(object: T, property: P): Binding<T[P]>
-
- static bind<T>(object: Subscribable<T>): Binding<T>
-
- static bind(emitter: Connectable | Subscribable, prop?: string) {
- return new Binding(emitter, prop)
- }
-
- private constructor(emitter: Connectable | Subscribable<Value>, prop?: string) {
- this.#emitter = emitter
- this.#prop = prop && kebabify(prop)
- }
-
- toString() {
- return `Binding<${this.#emitter}${this.#prop ? `, "${this.#prop}"` : ""}>`
- }
-
- as<T>(fn: (v: Value) => T): Binding<T> {
- const bind = new Binding(this.#emitter, this.#prop)
- bind.transformFn = (v: Value) => fn(this.transformFn(v))
- return bind as unknown as Binding<T>
- }
-
- get(): Value {
- if (typeof this.#emitter.get === "function")
- return this.transformFn(this.#emitter.get())
-
- if (typeof this.#prop === "string") {
- const getter = `get_${snakeify(this.#prop)}`
- if (typeof this.#emitter[getter] === "function")
- return this.transformFn(this.#emitter[getter]())
-
- return this.transformFn(this.#emitter[this.#prop])
- }
-
- throw Error("can not get value of binding")
- }
-
- subscribe(callback: (value: Value) => void): () => void {
- if (typeof this.#emitter.subscribe === "function") {
- return this.#emitter.subscribe(() => {
- callback(this.get())
- })
- }
- else if (typeof this.#emitter.connect === "function") {
- const signal = `notify::${this.#prop}`
- const id = this.#emitter.connect(signal, () => {
- callback(this.get())
- })
- return () => {
- (this.#emitter.disconnect as Connectable["disconnect"])(id)
- }
- }
- throw Error(`${this.#emitter} is not bindable`)
- }
-}
-
-export const { bind } = Binding
diff --git a/core/gjs/src/file.ts b/core/gjs/src/file.ts
deleted file mode 100644
index 90b33a1..0000000
--- a/core/gjs/src/file.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { Astal, Gio } from "./imports.js"
-
-export function readFile(path: string): string {
- return Astal.read_file(path) || ""
-}
-
-export function readFileAsync(path: string): Promise<string> {
- return new Promise((resolve, reject) => {
- Astal.read_file_async(path, (_, res) => {
- try {
- resolve(Astal.read_file_finish(res) || "")
- }
- catch (error) {
- reject(error)
- }
- })
- })
-}
-
-export function writeFile(path: string, content: string): void {
- Astal.write_file(path, content)
-}
-
-export function writeFileAsync(path: string, content: string): Promise<void> {
- return new Promise((resolve, reject) => {
- Astal.write_file_async(path, content, (_, res) => {
- try {
- resolve(Astal.write_file_finish(res))
- }
- catch (error) {
- reject(error)
- }
- })
- })
-}
-
-export function monitorFile(
- path: string,
- callback: (file: string, event: Gio.FileMonitorEvent) => void,
-): Gio.FileMonitor {
- return Astal.monitor_file(path, (file: string, event: Gio.FileMonitorEvent) => {
- callback(file, event)
- })!
-}
diff --git a/core/gjs/src/gobject.ts b/core/gjs/src/gobject.ts
deleted file mode 100644
index 2658555..0000000
--- a/core/gjs/src/gobject.ts
+++ /dev/null
@@ -1,178 +0,0 @@
-import GObject from "gi://GObject"
-export default GObject
-
-const meta = Symbol("meta")
-
-const { ParamSpec, ParamFlags } = GObject
-
-const kebabify = (str: string) => str
- .replace(/([a-z])([A-Z])/g, "$1-$2")
- .replaceAll("_", "-")
- .toLowerCase()
-
-type SignalDeclaration = {
- flags?: GObject.SignalFlags
- accumulator?: GObject.AccumulatorType
- return_type?: GObject.GType
- param_types?: Array<GObject.GType>
-}
-
-type PropertyDeclaration =
- | InstanceType<typeof GObject.ParamSpec>
- | { $gtype: GObject.GType }
- | typeof String
- | typeof Number
- | typeof Boolean
- | typeof Object
-
-type GObjectConstructor = {
- [meta]?: {
- Properties?: { [key: string]: GObject.ParamSpec }
- Signals?: { [key: string]: GObject.SignalDefinition }
- }
- new(...args: any[]): any
-}
-
-type MetaInfo = GObject.MetaInfo<never, Array<{ $gtype: GObject.GType }>, never>
-
-export function register(options: MetaInfo = {}) {
- return function (cls: GObjectConstructor) {
- GObject.registerClass({
- Signals: { ...cls[meta]?.Signals },
- Properties: { ...cls[meta]?.Properties },
- ...options,
- }, cls)
- }
-}
-
-export function property(declaration: PropertyDeclaration = Object) {
- return function (target: any, prop: any, desc?: PropertyDescriptor) {
- target.constructor[meta] ??= {}
- target.constructor[meta].Properties ??= {}
-
- const name = kebabify(prop)
-
- if (!desc) {
- let value = defaultValue(declaration)
-
- Object.defineProperty(target, prop, {
- get() {
- return value
- },
- set(v) {
- if (v !== value) {
- value = v
- this.notify(name)
- }
- },
- })
-
- Object.defineProperty(target, `set_${name.replace("-", "_")}`, {
- value: function (v: any) {
- this[prop] = v
- }
- })
-
- Object.defineProperty(target, `get_${name.replace("-", "_")}`, {
- value: function () {
- return this[prop]
- }
- })
-
- target.constructor[meta].Properties[kebabify(prop)] = pspec(name, ParamFlags.READWRITE, declaration)
- }
-
- else {
- let flags = 0
- if (desc.get) flags |= ParamFlags.READABLE
- if (desc.set) flags |= ParamFlags.WRITABLE
-
- target.constructor[meta].Properties[kebabify(prop)] = pspec(name, flags, declaration)
- }
- }
-}
-
-export function signal(...params: Array<{ $gtype: GObject.GType } | typeof Object>):
- (target: any, signal: any, desc?: PropertyDescriptor) => void
-
-export function signal(declaration?: SignalDeclaration):
- (target: any, signal: any, desc?: PropertyDescriptor) => void
-
-export function signal(
- declaration?: SignalDeclaration | { $gtype: GObject.GType } | typeof Object,
- ...params: Array<{ $gtype: GObject.GType } | typeof Object>
-) {
- return function (target: any, signal: any, desc?: PropertyDescriptor) {
- target.constructor[meta] ??= {}
- target.constructor[meta].Signals ??= {}
-
- const name = kebabify(signal)
-
- if (declaration || params.length > 0) {
- // @ts-expect-error TODO: type assert
- const arr = [declaration, ...params].map(v => v.$gtype)
- target.constructor[meta].Signals[name] = {
- param_types: arr,
- }
- }
- else {
- target.constructor[meta].Signals[name] = declaration
- }
-
- if (!desc) {
- Object.defineProperty(target, signal, {
- value: function (...args: any[]) {
- this.emit(name, ...args)
- },
- })
- }
- else {
- const og: ((...args: any[]) => void) = desc.value
- desc.value = function (...args: any[]) {
- // @ts-expect-error not typed
- this.emit(name, ...args)
- }
- Object.defineProperty(target, `on_${name.replace("-", "_")}`, {
- value: function (...args: any[]) {
- return og(...args)
- },
- })
- }
- }
-}
-
-function pspec(name: string, flags: number, declaration: PropertyDeclaration) {
- if (declaration instanceof ParamSpec)
- return declaration
-
- switch (declaration) {
- case String:
- return ParamSpec.string(name, "", "", flags, "")
- case Number:
- return ParamSpec.double(name, "", "", flags, -Number.MAX_VALUE, Number.MAX_VALUE, 0)
- case Boolean:
- return ParamSpec.boolean(name, "", "", flags, false)
- case Object:
- return ParamSpec.jsobject(name, "", "", flags)
- default:
- // @ts-expect-error misstyped
- return ParamSpec.object(name, "", "", flags, declaration.$gtype)
- }
-}
-
-function defaultValue(declaration: PropertyDeclaration) {
- if (declaration instanceof ParamSpec)
- return declaration.get_default_value()
-
- switch (declaration) {
- case String:
- return "default-string"
- case Number:
- return 0
- case Boolean:
- return false
- case Object:
- default:
- return null
- }
-}
diff --git a/core/gjs/src/imports.ts b/core/gjs/src/imports.ts
deleted file mode 100644
index cbed004..0000000
--- a/core/gjs/src/imports.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// this file's purpose is to have glib versions in one place
-// this is only really needed for Gtk/Astal because
-// ts-gir might generate gtk4 versions too
-
-export { default as Astal } from "gi://Astal?version=0.1"
-export { default as GObject } from "gi://GObject?version=2.0"
-export { default as Gio } from "gi://Gio?version=2.0"
-export { default as Gtk } from "gi://Gtk?version=3.0"
-export { default as Gdk } from "gi://Gdk?version=3.0"
-export { default as GLib } from "gi://GLib?version=2.0"
diff --git a/core/gjs/src/jsx/jsx-runtime.ts b/core/gjs/src/jsx/jsx-runtime.ts
deleted file mode 100644
index f40dc05..0000000
--- a/core/gjs/src/jsx/jsx-runtime.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { Gtk } from "../imports.js"
-import * as Widget from "../widgets.js"
-
-function isArrowFunction(func: any): func is (args: any) => any {
- return !Object.hasOwn(func, "prototype")
-}
-
-export function jsx(
- ctor: keyof typeof ctors | typeof Gtk.Widget,
- { children, ...props }: any,
-) {
- children ??= []
-
- if (!Array.isArray(children))
- children = [children]
-
- children = children.filter(Boolean)
-
- if (children.length === 1)
- props.child = children[0]
- else if (children.length > 1)
- props.children = children
-
- if (typeof ctor === "string") {
- return new ctors[ctor](props)
- }
-
- if (isArrowFunction(ctor))
- return ctor(props)
-
- // @ts-expect-error can be class or function
- return new ctor(props)
-}
-
-const ctors = {
- box: Widget.Box,
- button: Widget.Button,
- centerbox: Widget.CenterBox,
- circularprogress: Widget.CircularProgress,
- drawingarea: Widget.DrawingArea,
- entry: Widget.Entry,
- eventbox: Widget.EventBox,
- // TODO: fixed
- // TODO: flowbox
- icon: Widget.Icon,
- label: Widget.Label,
- levelbar: Widget.LevelBar,
- // TODO: listbox
- overlay: Widget.Overlay,
- revealer: Widget.Revealer,
- scrollable: Widget.Scrollable,
- slider: Widget.Slider,
- stack: Widget.Stack,
- switch: Widget.Switch,
- window: Widget.Window,
-}
-
-declare global {
- // eslint-disable-next-line @typescript-eslint/no-namespace
- namespace JSX {
- type Element = Gtk.Widget
- type ElementClass = Gtk.Widget
- interface IntrinsicElements {
- box: Widget.BoxProps
- button: Widget.ButtonProps
- centerbox: Widget.CenterBoxProps
- circularprogress: Widget.CircularProgressProps
- drawingarea: Widget.DrawingAreaProps
- entry: Widget.EntryProps
- eventbox: Widget.EventBoxProps
- // TODO: fixed
- // TODO: flowbox
- icon: Widget.IconProps
- label: Widget.LabelProps
- levelbar: Widget.LevelBarProps
- // TODO: listbox
- overlay: Widget.OverlayProps
- revealer: Widget.RevealerProps
- scrollable: Widget.ScrollableProps
- slider: Widget.SliderProps
- stack: Widget.StackProps
- switch: Widget.SwitchProps
- window: Widget.WindowProps
- }
- }
-}
-
-export const jsxs = jsx
diff --git a/core/gjs/src/process.ts b/core/gjs/src/process.ts
deleted file mode 100644
index bf8ea28..0000000
--- a/core/gjs/src/process.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { Astal } from "./imports.js"
-
-type Args = {
- cmd: string | string[]
- out?: (stdout: string) => void
- err?: (stderr: string) => void
-}
-
-export function subprocess(args: Args): Astal.Process
-
-export function subprocess(
- cmd: string | string[],
- onOut?: (stdout: string) => void,
- onErr?: (stderr: string) => void,
-): Astal.Process
-
-export function subprocess(
- argsOrCmd: Args | string | string[],
- onOut: (stdout: string) => void = print,
- onErr: (stderr: string) => void = printerr,
-) {
- const args = Array.isArray(argsOrCmd) || typeof argsOrCmd === "string"
- const { cmd, err, out } = {
- cmd: args ? argsOrCmd : argsOrCmd.cmd,
- err: args ? onErr : argsOrCmd.err || onErr,
- out: args ? onOut : argsOrCmd.out || onOut,
- }
-
- const proc = Array.isArray(cmd)
- ? Astal.Process.subprocessv(cmd)
- : Astal.Process.subprocess(cmd)
-
- proc.connect("stdout", (_, stdout: string) => out(stdout))
- proc.connect("stderr", (_, stderr: string) => err(stderr))
- return proc
-}
-
-/** @throws {GLib.Error} Throws stderr */
-export function exec(cmd: string | string[]) {
- return Array.isArray(cmd)
- ? Astal.Process.execv(cmd)
- : Astal.Process.exec(cmd)
-}
-
-export function execAsync(cmd: string | string[]): Promise<string> {
- return new Promise((resolve, reject) => {
- if (Array.isArray(cmd)) {
- Astal.Process.exec_asyncv(cmd, (_, res) => {
- try {
- resolve(Astal.Process.exec_asyncv_finish(res))
- }
- catch (error) {
- reject(error)
- }
- })
- }
- else {
- Astal.Process.exec_async(cmd, (_, res) => {
- try {
- resolve(Astal.Process.exec_finish(res))
- }
- catch (error) {
- reject(error)
- }
- })
- }
- })
-}
diff --git a/core/gjs/src/time.ts b/core/gjs/src/time.ts
deleted file mode 100644
index 4e28ad0..0000000
--- a/core/gjs/src/time.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Astal } from "./imports.js"
-
-export function interval(interval: number, callback?: () => void) {
- return Astal.Time.interval(interval, () => void callback?.())
-}
-
-export function timeout(timeout: number, callback?: () => void) {
- return Astal.Time.timeout(timeout, () => void callback?.())
-}
-
-export function idle(callback?: () => void) {
- return Astal.Time.idle(() => void callback?.())
-}
diff --git a/core/gjs/src/variable.ts b/core/gjs/src/variable.ts
deleted file mode 100644
index 8739ef6..0000000
--- a/core/gjs/src/variable.ts
+++ /dev/null
@@ -1,231 +0,0 @@
-import Binding, { type Connectable } from "./binding.js"
-import { Astal } from "./imports.js"
-import { interval, idle } from "./time.js"
-import { execAsync, subprocess } from "./process.js"
-
-class VariableWrapper<T> extends Function {
- private variable!: Astal.VariableBase
- private errHandler? = console.error
-
- private _value: T
- private _poll?: Astal.Time
- private _watch?: Astal.Process
-
- private pollInterval = 1000
- private pollExec?: string[] | string
- private pollTransform?: (stdout: string, prev: T) => T
- private pollFn?: (prev: T) => T | Promise<T>
-
- private watchTransform?: (stdout: string, prev: T) => T
- private watchExec?: string[] | string
-
- constructor(init: T) {
- super()
- this._value = init
- this.variable = new Astal.VariableBase()
- this.variable.connect("dropped", () => {
- this.stopWatch()
- this.stopPoll()
- })
- this.variable.connect("error", (_, err) => this.errHandler?.(err))
- return new Proxy(this, {
- apply: (target, _, args) => target._call(args[0]),
- })
- }
-
- private _call<R = T>(transform?: (value: T) => R): Binding<R> {
- const b = Binding.bind(this)
- return transform ? b.as(transform) : b as unknown as Binding<R>
- }
-
- toString() {
- return String(`Variable<${this.get()}>`)
- }
-
- get(): T { return this._value }
- set(value: T) {
- if (value !== this._value) {
- this._value = value
- this.variable.emit("changed")
- }
- }
-
- startPoll() {
- if (this._poll)
- return
-
- if (this.pollFn) {
- this._poll = interval(this.pollInterval, () => {
- const v = this.pollFn!(this.get())
- if (v instanceof Promise) {
- v.then(v => this.set(v))
- .catch(err => this.variable.emit("error", err))
- }
- else {
- this.set(v)
- }
- })
- }
- else if (this.pollExec) {
- this._poll = interval(this.pollInterval, () => {
- execAsync(this.pollExec!)
- .then(v => this.set(this.pollTransform!(v, this.get())))
- .catch(err => this.variable.emit("error", err))
- })
- }
- }
-
- startWatch() {
- if (this._watch)
- return
-
- this._watch = subprocess({
- cmd: this.watchExec!,
- out: out => this.set(this.watchTransform!(out, this.get())),
- err: err => this.variable.emit("error", err),
- })
- }
-
- stopPoll() {
- this._poll?.cancel()
- delete this._poll
- }
-
- stopWatch() {
- this._watch?.kill()
- delete this._watch
- }
-
- isPolling() { return !!this._poll }
- isWatching() { return !!this._watch }
-
- drop() {
- this.variable.emit("dropped")
- }
-
- onDropped(callback: () => void) {
- this.variable.connect("dropped", callback)
- return this as unknown as Variable<T>
- }
-
- onError(callback: (err: string) => void) {
- delete this.errHandler
- this.variable.connect("error", (_, err) => callback(err))
- return this as unknown as Variable<T>
- }
-
- subscribe(callback: (value: T) => void) {
- const id = this.variable.connect("changed", () => {
- callback(this.get())
- })
- return () => this.variable.disconnect(id)
- }
-
- poll(
- interval: number,
- exec: string | string[],
- transform?: (stdout: string, prev: T) => T
- ): Variable<T>
-
- poll(
- interval: number,
- callback: (prev: T) => T | Promise<T>
- ): Variable<T>
-
- poll(
- interval: number,
- exec: string | string[] | ((prev: T) => T | Promise<T>),
- transform: (stdout: string, prev: T) => T = out => out as T,
- ) {
- this.stopPoll()
- this.pollInterval = interval
- this.pollTransform = transform
- if (typeof exec === "function") {
- this.pollFn = exec
- delete this.pollExec
- }
- else {
- this.pollExec = exec
- delete this.pollFn
- }
- this.startPoll()
- return this as unknown as Variable<T>
- }
-
- watch(
- exec: string | string[],
- transform: (stdout: string, prev: T) => T = out => out as T,
- ) {
- this.stopWatch()
- this.watchExec = exec
- this.watchTransform = transform
- this.startWatch()
- return this as unknown as Variable<T>
- }
-
- observe(
- objs: Array<[obj: Connectable, signal: string]>,
- callback: (...args: any[]) => T,
- ): Variable<T>
-
- observe(
- obj: Connectable,
- signal: string,
- callback: (...args: any[]) => T,
- ): Variable<T>
-
- observe(
- objs: Connectable | Array<[obj: Connectable, signal: string]>,
- sigOrFn: string | ((obj: Connectable, ...args: any[]) => T),
- callback?: (obj: Connectable, ...args: any[]) => T,
- ) {
- const f = typeof sigOrFn === "function" ? sigOrFn : callback ?? (() => this.get())
- const set = (obj: Connectable, ...args: any[]) => this.set(f(obj, ...args))
-
- if (Array.isArray(objs)) {
- for (const obj of objs) {
- const [o, s] = obj
- const id = o.connect(s, set)
- this.onDropped(() => o.disconnect(id))
- }
- }
- else {
- if (typeof sigOrFn === "string") {
- const id = objs.connect(sigOrFn, set)
- this.onDropped(() => objs.disconnect(id))
- }
- }
-
- return this as unknown as Variable<T>
- }
-
- static derive<
- const Deps extends Array<Variable<any> | Binding<any>>,
- Args extends {
- [K in keyof Deps]: Deps[K] extends Variable<infer T>
- ? T : Deps[K] extends Binding<infer T> ? T : never
- },
- V = Args,
- >(deps: Deps, fn: (...args: Args) => V = (...args) => args as unknown as V) {
- const update = () => fn(...deps.map(d => d.get()) as Args)
- const derived = new Variable(update())
- const unsubs = deps.map(dep => dep.subscribe(() => derived.set(update())))
- derived.onDropped(() => unsubs.map(unsub => unsub()))
- return derived
- }
-}
-
-export interface Variable<T> extends Omit<VariableWrapper<T>, "bind"> {
- <R>(transform: (value: T) => R): Binding<R>
- (): Binding<T>
-}
-
-export const Variable = new Proxy(VariableWrapper as any, {
- apply: (_t, _a, args) => new VariableWrapper(args[0]),
-}) as {
- derive: typeof VariableWrapper["derive"]
- <T>(init: T): Variable<T>
- new <T>(init: T): Variable<T>
-}
-
-export default Variable
diff --git a/core/gjs/src/widgets.ts b/core/gjs/src/widgets.ts
deleted file mode 100644
index e14ca0b..0000000
--- a/core/gjs/src/widgets.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-/* eslint-disable max-len */
-import { Astal, GObject, Gtk } from "./imports.js"
-import astalify, { type ConstructProps, type BindableChild } from "./astalify.js"
-
-export { astalify, ConstructProps }
-
-// Box
-Object.defineProperty(Astal.Box.prototype, "children", {
- get() { return this.get_children() },
- set(v) { this.set_children(v) },
-})
-
-export type BoxProps = ConstructProps<Box, Astal.Box.ConstructorProps>
-export class Box extends astalify(Astal.Box) {
- static { GObject.registerClass({ GTypeName: "Box" }, this) }
- constructor(props?: BoxProps, ...children: Array<BindableChild>) { super({ children, ...props } as any) }
-}
-
-// Button
-export type ButtonProps = ConstructProps<Button, Astal.Button.ConstructorProps, {
- onClicked: []
- onClick: [event: Astal.ClickEvent]
- onClickRelease: [event: Astal.ClickEvent]
- onHover: [event: Astal.HoverEvent]
- onHoverLost: [event: Astal.HoverEvent]
- onScroll: [event: Astal.ScrollEvent]
-}>
-export class Button extends astalify(Astal.Button) {
- static { GObject.registerClass({ GTypeName: "Button" }, this) }
- constructor(props?: ButtonProps, child?: BindableChild) { super({ child, ...props } as any) }
-}
-
-// CenterBox
-export type CenterBoxProps = ConstructProps<CenterBox, Astal.CenterBox.ConstructorProps>
-export class CenterBox extends astalify(Astal.CenterBox) {
- static { GObject.registerClass({ GTypeName: "CenterBox" }, this) }
- constructor(props?: CenterBoxProps, ...children: Array<BindableChild>) { super({ children, ...props } as any) }
-}
-
-// CircularProgress
-export type CircularProgressProps = ConstructProps<CircularProgress, Astal.CircularProgress.ConstructorProps>
-export class CircularProgress extends astalify(Astal.CircularProgress) {
- static { GObject.registerClass({ GTypeName: "CircularProgress" }, this) }
- constructor(props?: CircularProgressProps, child?: BindableChild) { super({ child, ...props } as any) }
-}
-
-// DrawingArea
-export type DrawingAreaProps = ConstructProps<DrawingArea, Gtk.DrawingArea.ConstructorProps, {
- onDraw: [cr: any] // TODO: cairo types
-}>
-export class DrawingArea extends astalify(Gtk.DrawingArea) {
- static { GObject.registerClass({ GTypeName: "DrawingArea" }, this) }
- constructor(props?: DrawingAreaProps) { super(props as any) }
-}
-
-// Entry
-export type EntryProps = ConstructProps<Entry, Gtk.Entry.ConstructorProps, {
- onChanged: []
- onActivate: []
-}>
-export class Entry extends astalify(Gtk.Entry) {
- static { GObject.registerClass({ GTypeName: "Entry" }, this) }
- constructor(props?: EntryProps) { super(props as any) }
-}
-
-// EventBox
-export type EventBoxProps = ConstructProps<EventBox, Astal.EventBox.ConstructorProps, {
- onClick: [event: Astal.ClickEvent]
- onClickRelease: [event: Astal.ClickEvent]
- onHover: [event: Astal.HoverEvent]
- onHoverLost: [event: Astal.HoverEvent]
- onScroll: [event: Astal.ScrollEvent]
-}>
-export class EventBox extends astalify(Astal.EventBox) {
- static { GObject.registerClass({ GTypeName: "EventBox" }, this) }
- constructor(props?: EventBoxProps, child?: BindableChild) { super({ child, ...props } as any) }
-}
-
-// // TODO: Fixed
-// // TODO: FlowBox
-//
-// Icon
-export type IconProps = ConstructProps<Icon, Astal.Icon.ConstructorProps>
-export class Icon extends astalify(Astal.Icon) {
- static { GObject.registerClass({ GTypeName: "Icon" }, this) }
- constructor(props?: IconProps) { super(props as any) }
-}
-
-// Label
-export type LabelProps = ConstructProps<Label, Astal.Label.ConstructorProps>
-export class Label extends astalify(Astal.Label) {
- static { GObject.registerClass({ GTypeName: "Label" }, this) }
- constructor(props?: LabelProps) { super(props as any) }
-}
-
-// LevelBar
-export type LevelBarProps = ConstructProps<LevelBar, Astal.LevelBar.ConstructorProps>
-export class LevelBar extends astalify(Astal.LevelBar) {
- static { GObject.registerClass({ GTypeName: "LevelBar" }, this) }
- constructor(props?: LevelBarProps) { super(props as any) }
-}
-
-// TODO: ListBox
-
-// Overlay
-export type OverlayProps = ConstructProps<Overlay, Astal.Overlay.ConstructorProps>
-export class Overlay extends astalify(Astal.Overlay) {
- static { GObject.registerClass({ GTypeName: "Overlay" }, this) }
- constructor(props?: OverlayProps, ...children: Array<BindableChild>) { super({ children, ...props } as any) }
-}
-
-// Revealer
-export type RevealerProps = ConstructProps<Revealer, Gtk.Revealer.ConstructorProps>
-export class Revealer extends astalify(Gtk.Revealer) {
- static { GObject.registerClass({ GTypeName: "Revealer" }, this) }
- constructor(props?: RevealerProps, child?: BindableChild) { super({ child, ...props } as any) }
-}
-
-// Scrollable
-export type ScrollableProps = ConstructProps<Scrollable, Astal.Scrollable.ConstructorProps>
-export class Scrollable extends astalify(Astal.Scrollable) {
- static { GObject.registerClass({ GTypeName: "Scrollable" }, this) }
- constructor(props?: ScrollableProps, child?: BindableChild) { super({ child, ...props } as any) }
-}
-
-// Slider
-export type SliderProps = ConstructProps<Slider, Astal.Slider.ConstructorProps, {
- onDragged: []
-}>
-export class Slider extends astalify(Astal.Slider) {
- static { GObject.registerClass({ GTypeName: "Slider" }, this) }
- constructor(props?: SliderProps) { super(props as any) }
-}
-
-// Stack
-export type StackProps = ConstructProps<Stack, Astal.Stack.ConstructorProps>
-export class Stack extends astalify(Astal.Stack) {
- static { GObject.registerClass({ GTypeName: "Stack" }, this) }
- constructor(props?: StackProps, ...children: Array<BindableChild>) { super({ children, ...props } as any) }
-}
-
-// Switch
-export type SwitchProps = ConstructProps<Switch, Gtk.Switch.ConstructorProps>
-export class Switch extends astalify(Gtk.Switch) {
- static { GObject.registerClass({ GTypeName: "Switch" }, this) }
- constructor(props?: SwitchProps) { super(props as any) }
-}
-
-// Window
-export type WindowProps = ConstructProps<Window, Astal.Window.ConstructorProps>
-export class Window extends astalify(Astal.Window) {
- static { GObject.registerClass({ GTypeName: "Window" }, this) }
- constructor(props?: WindowProps, child?: BindableChild) { super({ child, ...props } as any) }
-}
diff --git a/core/gjs/tsconfig.json b/core/gjs/tsconfig.json
deleted file mode 100644
index b535a07..0000000
--- a/core/gjs/tsconfig.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "compilerOptions": {
- "experimentalDecorators": true,
- "target": "ESNext",
- "module": "ESNext",
- "lib": [
- "ESNext"
- ],
- "outDir": "dist",
- "declaration": true,
- "strict": true,
- "moduleResolution": "Bundler",
- "skipLibCheck": true,
- "checkJs": true,
- "allowJs": true,
- "jsx": "react-jsx",
- "jsxImportSource": "src/jsx",
- "baseUrl": ".",
- },
- "include": [
- "@girs",
- "src/**/*",
- "index.ts"
- ]
-}
diff --git a/core/lua/astal-dev-1.rockspec b/core/lua/astal-dev-1.rockspec
deleted file mode 100644
index 9a41fd1..0000000
--- a/core/lua/astal-dev-1.rockspec
+++ /dev/null
@@ -1,31 +0,0 @@
-package = "astal"
-version = "dev-1"
-
-source = {
- url = "git+https://github.com/aylur/astal",
-}
-
-description = {
- summary = "lua bindings for libastal.",
- homepage = "https://aylur.github.io/astal/",
- license = "GPL-3",
-}
-
-dependencies = {
- "lua >= 5.1, < 5.4",
- "lgi >= 0.9.2",
-}
-
-build = {
- type = "builtin",
- modules = {
- ["astal.application"] = "astal/application.lua",
- ["astal.binding"] = "astal/binding.lua",
- ["astal.init"] = "astal/init.lua",
- ["astal.process"] = "astal/process.lua",
- ["astal.time"] = "astal/time.lua",
- ["astal.variable"] = "astal/variable.lua",
- ["astal.widget"] = "astal/widget.lua",
- ["astal.file"] = "astal/file.lua",
- },
-}
diff --git a/core/lua/astal/application.lua b/core/lua/astal/application.lua
deleted file mode 100644
index 663a457..0000000
--- a/core/lua/astal/application.lua
+++ /dev/null
@@ -1,94 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-
-local AstalLua = Astal.Application:derive("AstalLua")
-local request_handler
-
-function AstalLua:do_request(msg, conn)
- if type(request_handler) == "function" then
- request_handler(msg, function(response)
- Astal.write_sock(conn, tostring(response), function(_, res)
- Astal.write_sock_finish(res)
- end)
- end)
- else
- Astal.Application.do_request(self, msg, conn)
- end
-end
-
-function AstalLua:quit(code)
- Astal.Application.quit(self)
- os.exit(code)
-end
-
-local app = AstalLua()
-
----@class StartConfig
----@field icons? string
----@field instance_name? string
----@field gtk_theme? string
----@field icon_theme? string
----@field cursor_theme? string
----@field css? string
----@field hold? boolean
----@field request_handler? fun(msg: string, response: fun(res: any))
----@field main? fun(...): unknown
----@field client? fun(message: fun(msg: string): string, ...): unknown
-
----@param config StartConfig | nil
-function Astal.Application:start(config)
- if config == nil then
- config = {}
- end
-
- if config.client == nil then
- config.client = function()
- print('Astal instance "' .. app.instance_name .. '" is already running')
- os.exit(1)
- end
- end
-
- if config.hold == nil then
- config.hold = true
- end
-
- request_handler = config.request_handler
-
- if config.css then
- self:apply_css(config.css)
- end
- if config.icons then
- self:add_icons(config.icons)
- end
- if config.instance_name then
- self.instance_name = config.instance_name
- end
- if config.gtk_theme then
- self.gtk_theme = config.gtk_theme
- end
- if config.icon_theme then
- self.icon_theme = config.icon_theme
- end
- if config.cursor_theme then
- self.cursor_theme = config.cursor_theme
- end
-
- app.on_activate = function()
- if type(config.main) == "function" then
- config.main(table.unpack(arg))
- end
- if config.hold then
- self:hold()
- end
- end
-
- if not app:acquire_socket() then
- return config.client(function(msg)
- return Astal.Application.send_message(self.instance_name, msg)
- end, table.unpack(arg))
- end
-
- self:run(nil)
-end
-
-return app
diff --git a/core/lua/astal/binding.lua b/core/lua/astal/binding.lua
deleted file mode 100644
index ba1e6e4..0000000
--- a/core/lua/astal/binding.lua
+++ /dev/null
@@ -1,71 +0,0 @@
-local lgi = require("lgi")
-local GObject = lgi.require("GObject", "2.0")
-
----@class Binding
----@field emitter table|Variable
----@field property? string
----@field transformFn function
-local Binding = {}
-
----@param emitter table
----@param property? string
----@return Binding
-function Binding.new(emitter, property)
- return setmetatable({
- emitter = emitter,
- property = property,
- transformFn = function(v)
- return v
- end,
- }, Binding)
-end
-
-function Binding:__tostring()
- local str = "Binding<" .. tostring(self.emitter)
- if self.property ~= nil then
- str = str .. ", " .. self.property
- end
- return str .. ">"
-end
-
-function Binding:get()
- if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then
- return self.transformFn(self.emitter[self.property])
- end
- if type(self.emitter.get) == "function" then
- return self.transformFn(self.emitter:get())
- end
- error("can not get: Not a GObject or a Variable " + self)
-end
-
----@param transform fun(value: any): any
----@return Binding
-function Binding:as(transform)
- local b = Binding.new(self.emitter, self.property)
- b.transformFn = function(v)
- return transform(self.transformFn(v))
- end
- return b
-end
-
----@param callback fun(value: any)
----@return function
-function Binding:subscribe(callback)
- if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then
- local id = self.emitter.on_notify:connect(function()
- callback(self:get())
- end, self.property, false)
- return function()
- GObject.signal_handler_disconnect(self.emitter, id)
- end
- end
- if type(self.emitter.subscribe) == "function" then
- return self.emitter:subscribe(function()
- callback(self:get())
- end)
- end
- error("can not subscribe: Not a GObject or a Variable " + self)
-end
-
-Binding.__index = Binding
-return Binding
diff --git a/core/lua/astal/file.lua b/core/lua/astal/file.lua
deleted file mode 100644
index ca5a592..0000000
--- a/core/lua/astal/file.lua
+++ /dev/null
@@ -1,45 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-local GObject = lgi.require("GObject", "2.0")
-
-local M = {}
-
----@param path string
----@return string
-function M.read_file(path)
- return Astal.read_file(path)
-end
-
----@param path string
----@param callback fun(content: string, err: string): nil
-function M.read_file_async(path, callback)
- Astal.read_file_async(path, function(_, res)
- local content, err = Astal.read_file_finish(res)
- callback(content, err)
- end)
-end
-
----@param path string
----@param content string
-function M.write_file(path, content)
- Astal.write_file(path, content)
-end
-
----@param path string
----@param content string
----@param callback? fun(err: string): nil
-function M.write_file_async(path, content, callback)
- Astal.write_file_async(path, content, function(_, res)
- if type(callback) == "function" then
- callback(Astal.write_file_finish(res))
- end
- end)
-end
-
----@param path string
----@param callback fun(file: string, event: integer): nil
-function M.monitor_file(path, callback)
- return Astal.monitor_file(path, GObject.Closure(callback))
-end
-
-return M
diff --git a/core/lua/astal/init.lua b/core/lua/astal/init.lua
deleted file mode 100644
index f56c3f5..0000000
--- a/core/lua/astal/init.lua
+++ /dev/null
@@ -1,41 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-local Gtk = lgi.require("Gtk", "3.0")
-local Gdk = lgi.require("Gdk", "3.0")
-local GObject = lgi.require("GObject", "2.0")
-local Widget = require("astal.widget")
-local Variable = require("astal.variable")
-local Binding = require("astal.binding")
-local App = require("astal.application")
-local Process = require("astal.process")
-local Time = require("astal.time")
-local File = require("astal.file")
-
-return {
- App = App,
- Variable = Variable,
- Widget = Widget,
- bind = Binding.new,
-
- interval = Time.interval,
- timeout = Time.timeout,
- idle = Time.idle,
-
- subprocess = Process.subprocess,
- exec = Process.exec,
- exec_async = Process.exec_async,
-
- read_file = File.read_file,
- read_file_async = File.read_file_async,
- write_file = File.write_file,
- write_file_async = File.write_file_async,
- monitor_file = File.monitor_file,
-
- Astal = Astal,
- Gtk = Gtk,
- Gdk = Gdk,
- GObject = GObject,
- GLib = lgi.require("GLib", "2.0"),
- Gio = lgi.require("Gio", "2.0"),
- require = lgi.require,
-}
diff --git a/core/lua/astal/process.lua b/core/lua/astal/process.lua
deleted file mode 100644
index 62360b3..0000000
--- a/core/lua/astal/process.lua
+++ /dev/null
@@ -1,78 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-
-local M = {}
-
----@param commandline string | string[]
----@param on_stdout? fun(out: string): nil
----@param on_stderr? fun(err: string): nil
----@return { kill: function } | nil proc
-function M.subprocess(commandline, on_stdout, on_stderr)
- if on_stdout == nil then
- on_stdout = function(out)
- io.stdout:write(tostring(out) .. "\n")
- end
- end
-
- if on_stderr == nil then
- on_stderr = function(err)
- io.stderr:write(tostring(err) .. "\n")
- end
- end
-
- local proc, err
- if type(commandline) == "table" then
- proc, err = Astal.Process.subprocessv(commandline)
- else
- proc, err = Astal.Process.subprocess(commandline)
- end
- if err ~= nil then
- err(err)
- return nil
- end
- proc.on_stdout = function(_, stdoud)
- on_stdout(stdoud)
- end
- proc.on_stderr = function(_, stderr)
- on_stderr(stderr)
- end
- return proc
-end
-
----@param commandline string | string[]
----@return string, string
-function M.exec(commandline)
- if type(commandline) == "table" then
- return Astal.Process.execv(commandline)
- else
- return Astal.Process.exec(commandline)
- end
-end
-
----@param commandline string | string[]
----@param callback? fun(out: string, err: string): nil
-function M.exec_async(commandline, callback)
- if callback == nil then
- callback = function(out, err)
- if err ~= nil then
- io.stdout:write(tostring(out) .. "\n")
- else
- io.stderr:write(tostring(err) .. "\n")
- end
- end
- end
-
- if type(commandline) == "table" then
- Astal.Process.exec_asyncv(commandline, function(_, res)
- local out, err = Astal.Process.exec_asyncv_finish(res)
- callback(out, err)
- end)
- else
- Astal.Process.exec_async(commandline, function(_, res)
- local out, err = Astal.Process.exec_finish(res)
- callback(out, err)
- end)
- end
-end
-
-return M
diff --git a/core/lua/astal/time.lua b/core/lua/astal/time.lua
deleted file mode 100644
index f4e2b81..0000000
--- a/core/lua/astal/time.lua
+++ /dev/null
@@ -1,27 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-local GObject = lgi.require("GObject", "2.0")
-
-local M = {}
-
----@param interval number
----@param fn function
----@return { cancel: function, on_now: function }
-function M.interval(interval, fn)
- return Astal.Time.interval(interval, GObject.Closure(fn))
-end
-
----@param timeout number
----@param fn function
----@return { cancel: function, on_now: function }
-function M.timeout(timeout, fn)
- return Astal.Time.timeout(timeout, GObject.Closure(fn))
-end
-
----@param fn function
----@return { cancel: function, on_now: function }
-function M.idle(fn)
- return Astal.Time.idle(GObject.Closure(fn))
-end
-
-return M
diff --git a/core/lua/astal/variable.lua b/core/lua/astal/variable.lua
deleted file mode 100644
index 662eee7..0000000
--- a/core/lua/astal/variable.lua
+++ /dev/null
@@ -1,276 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-local GObject = lgi.require("GObject", "2.0")
-local Binding = require("astal.binding")
-local Time = require("astal.time")
-local Process = require("astal.process")
-
----@class Variable
----@field private variable table
----@field private err_handler? function
----@field private _value any
----@field private _poll? table
----@field private _watch? table
----@field private poll_interval number
----@field private poll_exec? string[] | string
----@field private poll_transform? fun(next: any, prev: any): any
----@field private poll_fn? function
----@field private watch_transform? fun(next: any, prev: any): any
----@field private watch_exec? string[] | string
-local Variable = {}
-Variable.__index = Variable
-
----@param value any
----@return Variable
-function Variable.new(value)
- local v = Astal.VariableBase()
- local variable = setmetatable({
- variable = v,
- _value = value,
- }, Variable)
- v.on_dropped = function()
- variable:stop_watch()
- variable:stop_watch()
- end
- v.on_error = function(_, err)
- if variable.err_handler then
- variable.err_handler(err)
- end
- end
- return variable
-end
-
----@param transform function
----@return Binding
-function Variable:__call(transform)
- if transform == nil then
- transform = function(v)
- return v
- end
- return Binding.new(self)
- end
- return Binding.new(self):as(transform)
-end
-
-function Variable:__tostring()
- return "Variable<" .. tostring(self:get()) .. ">"
-end
-
-function Variable:get()
- return self._value or nil
-end
-
-function Variable:set(value)
- if value ~= self:get() then
- self._value = value
- self.variable:emit_changed()
- end
-end
-
-function Variable:start_poll()
- if self._poll ~= nil then
- return
- end
-
- if self.poll_fn then
- self._poll = Time.interval(self.poll_interval, function()
- self:set(self.poll_fn(self:get()))
- end)
- elseif self.poll_exec then
- self._poll = Time.interval(self.poll_interval, function()
- Process.exec_async(self.poll_exec, function(out, err)
- if err ~= nil then
- return self.variable.emit_error(err)
- end
- self:set(self.poll_transform(out, self:get()))
- end)
- end)
- end
-end
-
-function Variable:start_watch()
- if self._watch then
- return
- end
-
- self._watch = Process.subprocess(self.watch_exec, function(out)
- self:set(self.watch_transform(out, self:get()))
- end, function(err)
- self.variable.emit_error(err)
- end)
-end
-
-function Variable:stop_poll()
- if self._poll then
- self._poll.cancel()
- end
- self._poll = nil
-end
-
-function Variable:stop_watch()
- if self._watch then
- self._watch.kill()
- end
- self._watch = nil
-end
-
-function Variable:is_polling()
- return self._poll ~= nil
-end
-
-function Variable:is_watching()
- return self._watch ~= nil
-end
-
-function Variable:drop()
- self.variable.emit_dropped()
-end
-
----@param callback function
----@return Variable
-function Variable:on_dropped(callback)
- self.variable.on_dropped = callback
- return self
-end
-
----@param callback function
----@return Variable
-function Variable:on_error(callback)
- self.err_handler = nil
- self.variable.on_eror = function(_, err)
- callback(err)
- end
- return self
-end
-
----@param callback fun(value: any)
----@return function
-function Variable:subscribe(callback)
- local id = self.variable.on_changed:connect(function()
- callback(self:get())
- end)
- return function()
- GObject.signal_handler_disconnect(self.variable, id)
- end
-end
-
----@param interval number
----@param exec string | string[] | function
----@param transform? fun(next: any, prev: any): any
-function Variable:poll(interval, exec, transform)
- if transform == nil then
- transform = function(next)
- return next
- end
- end
- self:stop_poll()
- self.poll_interval = interval
- self.poll_transform = transform
-
- if type(exec) == "function" then
- self.poll_fn = exec
- self.poll_exec = nil
- else
- self.poll_exec = exec
- self.poll_fn = nil
- end
- self:start_poll()
- return self
-end
-
----@param exec string | string[]
----@param transform? fun(next: any, prev: any): any
-function Variable:watch(exec, transform)
- if transform == nil then
- transform = function(next)
- return next
- end
- end
- self:stop_poll()
- self.watch_exec = exec
- self.watch_transform = transform
- self:start_watch()
- return self
-end
-
----@param object table | table[]
----@param sigOrFn string | fun(...): any
----@param callback fun(...): any
----@return Variable
-function Variable:observe(object, sigOrFn, callback)
- local f
- if type(sigOrFn) == "function" then
- f = sigOrFn
- elseif type(callback) == "function" then
- f = callback
- else
- f = function()
- return self:get()
- end
- end
- local set = function(...)
- self:set(f(...))
- end
-
- if type(sigOrFn) == "string" then
- object["on_" .. sigOrFn]:connect(set)
- else
- for _, obj in ipairs(object) do
- obj[1]["on_" .. obj[2]]:connect(set)
- end
- end
- return self
-end
-
----@param deps Variable | (Binding | Variable)[]
----@param transform? fun(...): any
----@return Variable
-function Variable.derive(deps, transform)
- if type(transform) == "nil" then
- transform = function(...)
- return { ... }
- end
- end
-
- if getmetatable(deps) == Variable then
- local var = Variable.new(transform(deps:get()))
- deps:subscribe(function(v)
- var:set(transform(v))
- end)
- return var
- end
-
- for i, var in ipairs(deps) do
- if getmetatable(var) == Variable then
- deps[i] = Binding.new(var)
- end
- end
-
- local update = function()
- local params = {}
- for i, binding in ipairs(deps) do
- params[i] = binding:get()
- end
- return transform(table.unpack(params), 1, #deps)
- end
-
- local var = Variable.new(update())
-
- local unsubs = {}
- for i, b in ipairs(deps) do
- unsubs[i] = b:subscribe(update)
- end
-
- var.variable.on_dropped = function()
- for _, unsub in ipairs(unsubs) do
- unsub()
- end
- end
- return var
-end
-
-return setmetatable(Variable, {
- __call = function(_, v)
- return Variable.new(v)
- end,
-})
diff --git a/core/lua/astal/widget.lua b/core/lua/astal/widget.lua
deleted file mode 100644
index 8f49409..0000000
--- a/core/lua/astal/widget.lua
+++ /dev/null
@@ -1,322 +0,0 @@
-local lgi = require("lgi")
-local Astal = lgi.require("Astal", "0.1")
-local Gtk = lgi.require("Gtk", "3.0")
-local GObject = lgi.require("GObject", "2.0")
-local Binding = require("astal.binding")
-local Variable = require("astal.variable")
-local exec_async = require("astal.process").exec_async
-
-local function filter(tbl, fn)
- local copy = {}
- for key, value in pairs(tbl) do
- if fn(value, key) then
- if type(key) == "number" then
- table.insert(copy, value)
- else
- copy[key] = value
- end
- end
- end
- return copy
-end
-
-local function map(tbl, fn)
- local copy = {}
- for key, value in pairs(tbl) do
- copy[key] = fn(value)
- end
- return copy
-end
-
-local flatten
-flatten = function(tbl)
- local copy = {}
- for _, value in pairs(tbl) do
- if type(value) == "table" and getmetatable(value) == nil then
- for _, inner in pairs(flatten(value)) do
- table.insert(copy, inner)
- end
- else
- table.insert(copy, value)
- end
- end
- return copy
-end
-
-local function includes(tbl, elem)
- for _, value in pairs(tbl) do
- if value == elem then
- return true
- end
- end
- return false
-end
-
-local function set_children(parent, children)
- children = map(flatten(children), function(item)
- if Gtk.Widget:is_type_of(item) then
- return item
- end
- return Gtk.Label({
- visible = true,
- label = tostring(item),
- })
- end)
-
- -- remove
- if Gtk.Bin:is_type_of(parent) then
- local ch = parent:get_child()
- if ch ~= nil then
- parent:remove(ch)
- end
- if ch ~= nil and not includes(children, ch) and not parent.no_implicit_destroy then
- ch:destroy()
- end
- elseif Gtk.Container:is_type_of(parent) then
- for _, ch in ipairs(parent:get_children()) do
- parent:remove(ch)
- if ch ~= nil and not includes(children, ch) and not parent.no_implicit_destroy then
- ch:destroy()
- end
- end
- end
-
- -- TODO: add more container types
- if Astal.Box:is_type_of(parent) then
- parent:set_children(children)
- elseif Astal.Stack:is_type_of(parent) then
- parent:set_children(children)
- elseif Astal.CenterBox:is_type_of(parent) then
- parent.start_widget = children[1]
- parent.center_widget = children[2]
- parent.end_widget = children[3]
- elseif Astal.Overlay:is_type_of(parent) then
- parent:set_child(children[1])
- children[1] = nil
- parent:set_overlays(children)
- elseif Gtk.Container:is_type_of(parent) then
- for _, child in pairs(children) do
- if Gtk.Widget:is_type_of(child) then
- parent:add(child)
- end
- end
- end
-end
-
-local function merge_bindings(array)
- local function get_values(...)
- local args = { ... }
- local i = 0
- return map(array, function(value)
- if getmetatable(value) == Binding then
- i = i + 1
- return args[i]
- else
- return value
- end
- end)
- end
-
- local bindings = filter(array, function(v)
- return getmetatable(v) == Binding
- end)
-
- if #bindings == 0 then
- return array
- end
-
- if #bindings == 1 then
- return bindings[1]:as(get_values)
- end
-
- return Variable.derive(bindings, get_values)()
-end
-
-local function astalify(ctor)
- function ctor:hook(object, signalOrCallback, callback)
- if GObject.Object:is_type_of(object) and type(signalOrCallback) == "string" then
- local id
- if string.sub(signalOrCallback, 1, 8) == "notify::" then
- local prop = string.gsub(signalOrCallback, "notify::", "")
- id = object.on_notify:connect(function()
- callback(self, object[prop])
- end, prop, false)
- else
- id = object["on_" .. signalOrCallback]:connect(function(_, ...)
- callback(self, ...)
- end)
- end
- self.on_destroy = function()
- GObject.signal_handler_disconnect(object, id)
- end
- elseif type(object.subscribe) == "function" then
- local unsub = object.subscribe(function(...)
- signalOrCallback(self, ...)
- end)
- self.on_destroy = unsub
- else
- error("can not hook: not gobject+signal or subscribable")
- end
- end
-
- function ctor:toggle_class_name(name, on)
- Astal.widget_toggle_class_name(self, name, on)
- end
-
- return function(tbl)
- if tbl == nil then
- tbl = {}
- end
-
- local bindings = {}
- local setup = tbl.setup
-
- -- collect children
- local children = merge_bindings(flatten(filter(tbl, function(_, key)
- return type(key) == "number"
- end)))
-
- -- default visible to true
- if type(tbl.visible) ~= "boolean" then
- tbl.visible = true
- end
-
- -- collect props
- local props = filter(tbl, function(_, key)
- return type(key) == "string" and key ~= "setup"
- end)
-
- -- collect signal handlers
- for prop, value in pairs(props) do
- if string.sub(prop, 0, 2) == "on" and type(value) ~= "function" then
- props[prop] = function()
- exec_async(value, print)
- end
- end
- end
-
- -- collect bindings
- for prop, value in pairs(props) do
- if getmetatable(value) == Binding then
- bindings[prop] = value
- props[prop] = value:get()
- end
- end
-
- -- construct, attach bindings, add children
- local widget = ctor()
-
- if getmetatable(children) == Binding then
- set_children(widget, children:get())
- widget.on_destroy = children:subscribe(function(v)
- set_children(widget, v)
- end)
- else
- if #children > 0 then
- set_children(widget, children)
- end
- end
-
- for prop, binding in pairs(bindings) do
- widget.on_destroy = binding:subscribe(function(v)
- widget[prop] = v
- end)
- end
-
- for prop, value in pairs(props) do
- widget[prop] = value
- end
-
- if type(setup) == "function" then
- setup(widget)
- end
-
- return widget
- end
-end
-
-local Widget = {
- astalify = astalify,
- Box = astalify(Astal.Box),
- Button = astalify(Astal.Button),
- CenterBox = astalify(Astal.CenterBox),
- CircularProgress = astalify(Astal.CircularProgress),
- DrawingArea = astalify(Gtk.DrawingArea),
- Entry = astalify(Gtk.Entry),
- EventBox = astalify(Astal.EventBox),
- -- TODO: Fixed
- -- TODO: FlowBox
- Icon = astalify(Astal.Icon),
- Label = astalify(Gtk.Label),
- LevelBar = astalify(Astal.LevelBar),
- -- TODO: ListBox
- Overlay = astalify(Astal.Overlay),
- Revealer = astalify(Gtk.Revealer),
- Scrollable = astalify(Astal.Scrollable),
- Slider = astalify(Astal.Slider),
- Stack = astalify(Astal.Stack),
- Switch = astalify(Gtk.Switch),
- Window = astalify(Astal.Window),
-}
-
-Gtk.Widget._attribute.css = {
- get = Astal.widget_get_css,
- set = Astal.widget_set_css,
-}
-
-Gtk.Widget._attribute.class_name = {
- get = function(self)
- local result = ""
- local strings = Astal.widget_set_class_names(self)
- for i, str in ipairs(strings) do
- result = result .. str
- if i < #strings then
- result = result .. " "
- end
- end
- return result
- end,
- set = function(self, class_name)
- local names = {}
- for word in class_name:gmatch("%S+") do
- table.insert(names, word)
- end
- Astal.widget_set_class_names(self, names)
- end,
-}
-
-Gtk.Widget._attribute.cursor = {
- get = Astal.widget_get_cursor,
- set = Astal.widget_set_cursor,
-}
-
-Gtk.Widget._attribute.click_through = {
- get = Astal.widget_get_click_through,
- set = Astal.widget_set_click_through,
-}
-
-local no_implicit_destroy = {}
-Gtk.Widget._attribute.no_implicit_destroy = {
- get = function(self)
- return no_implicit_destroy[self] or false
- end,
- set = function(self, v)
- if no_implicit_destroy[self] == nil then
- self.on_destroy = function()
- no_implicit_destroy[self] = nil
- end
- end
- no_implicit_destroy[self] = v
- end,
-}
-
-Astal.Box._attribute.children = {
- get = Astal.Box.get_children,
- set = Astal.Box.set_children,
-}
-
-return setmetatable(Widget, {
- __call = function(_, ctor)
- return astalify(ctor)
- end,
-})
diff --git a/core/lua/stylua.toml b/core/lua/stylua.toml
deleted file mode 100644
index d4a4951..0000000
--- a/core/lua/stylua.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-indent_type = "Spaces"
-indent_width = 4
-column_width = 100
diff --git a/core/meson.build b/core/meson.build
deleted file mode 100644
index a2606db..0000000
--- a/core/meson.build
+++ /dev/null
@@ -1,27 +0,0 @@
-project(
- 'astal',
- 'vala',
- 'c',
- version: run_command('cat', join_paths(meson.project_source_root(), 'version')).stdout().strip(),
- meson_version: '>= 0.62.0',
- default_options: [
- 'warning_level=2',
- 'werror=false',
- 'c_std=gnu11',
- ],
-)
-
-prefix = get_option('prefix')
-libdir = get_option('prefix') / get_option('libdir')
-pkgdatadir = prefix / get_option('datadir') / 'astal'
-
-assert(
- get_option('lib') or get_option('cli'),
- 'Either lib or cli option must be set to true.',
-)
-
-if get_option('gjs')
- install_subdir('gjs', install_dir: pkgdatadir)
-endif
-
-subdir('src')
diff --git a/core/meson_options.txt b/core/meson_options.txt
deleted file mode 100644
index a60ff42..0000000
--- a/core/meson_options.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-option(
- 'lib',
- type: 'boolean',
- value: true,
-)
-
-option(
- 'cli',
- type: 'boolean',
- value: true,
-)
-
-option(
- 'gjs',
- type: 'boolean',
- value: true,
-)
diff --git a/core/src/astal.vala b/core/src/astal.vala
deleted file mode 100644
index 134293b..0000000
--- a/core/src/astal.vala
+++ /dev/null
@@ -1,375 +0,0 @@
-namespace Astal {
-[DBus (name="io.Astal.Application")]
-public class Application : Gtk.Application {
- private List<Gtk.CssProvider> css_providers = new List<Gtk.CssProvider>();
- private SocketService service;
- private DBusConnection conn;
- private string _instance_name;
-
- public string socket_path { get; private set; }
-
- [DBus (visible=false)]
- public signal void monitor_added(Gdk.Monitor monitor);
-
- [DBus (visible=false)]
- public signal void monitor_removed(Gdk.Monitor monitor);
-
- [DBus (visible=false)]
- public List<weak Gdk.Monitor> monitors {
- owned get {
- var display = Gdk.Display.get_default();
- var list = new List<weak Gdk.Monitor>();
- for (var i = 0; i <= display.get_n_monitors(); ++i) {
- var mon = display.get_monitor(i);
- if (mon != null) {
- list.append(mon);
- }
- }
- return list;
- }
- }
-
- [DBus (visible=false)]
- public string instance_name {
- get { return _instance_name; }
- set {
- application_id = "io.Astal." + value;
- _instance_name = value;
- }
- }
-
- [DBus (visible=false)]
- public List<Gtk.Window> windows {
- get { return get_windows(); }
- }
-
- [DBus (visible=false)]
- public Gtk.Settings settings {
- get { return Gtk.Settings.get_default(); }
- }
-
- [DBus (visible=false)]
- public Gdk.Screen screen {
- get { return Gdk.Screen.get_default(); }
- }
-
- [DBus (visible=false)]
- public string gtk_theme {
- owned get { return settings.gtk_theme_name; }
- set { settings.gtk_theme_name = value; }
- }
-
- [DBus (visible=false)]
- public string icon_theme {
- owned get { return settings.gtk_icon_theme_name; }
- set { settings.gtk_icon_theme_name = value; }
- }
-
- [DBus (visible=false)]
- public string cursor_theme {
- owned get { return settings.gtk_cursor_theme_name; }
- set { settings.gtk_cursor_theme_name = value; }
- }
-
- [DBus (visible=false)]
- public void reset_css() {
- foreach(var provider in css_providers) {
- Gtk.StyleContext.remove_provider_for_screen(screen, provider);
- }
- css_providers = new List<Gtk.CssProvider>();
- }
-
- public void inspector() throws DBusError, IOError {
- Gtk.Window.set_interactive_debugging(true);
- }
-
- [DBus (visible=false)]
- public Gtk.Window? get_window(string name) {
- foreach(var win in windows) {
- if (win.name == name)
- return win;
- }
-
- critical("no window with name \"%s\"".printf(name));
- return null;
- }
-
- public void toggle_window(string window) throws DBusError, IOError {
- var win = get_window(window);
- if (win != null) {
- win.visible = !win.visible;
- } else {
- throw new IOError.FAILED("window not found");
- }
- }
-
- [DBus (visible=false)]
- public void apply_css(string style, bool reset = false) {
- var provider = new Gtk.CssProvider();
-
- if (reset)
- reset_css();
-
- try {
- if (FileUtils.test(style, FileTest.EXISTS))
- provider.load_from_path(style);
- else
- provider.load_from_data(style);
- } catch (Error err) {
- critical(err.message);
- }
-
- Gtk.StyleContext.add_provider_for_screen(
- screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER);
-
- css_providers.append(provider);
- }
-
- [DBus (visible=false)]
- public void add_icons(string? path) {
- if (path != null)
- Gtk.IconTheme.get_default().prepend_search_path(path);
- }
-
- private async void _socket_request(SocketConnection conn) {
- string message = yield read_sock(conn);
- request(message != null ? message.strip() : "", conn);
- }
-
- [DBus (visible=false)]
- public virtual void request(string msg, SocketConnection conn) {
- write_sock.begin(conn, @"missing response implementation on $application_id");
- }
-
- /**
- * should be called before `run()`
- * the return value indicates if instance is already running
- */
- [DBus (visible=false)]
- public bool acquire_socket() {
- foreach (var instance in get_instances()) {
- if (instance == instance_name) {
- return false;
- }
- }
-
- var rundir = GLib.Environment.get_user_runtime_dir();
- socket_path = @"$rundir/$instance_name.sock";
-
- if (FileUtils.test(socket_path, GLib.FileTest.EXISTS)) {
- try {
- File.new_for_path(socket_path).delete(null);
- } catch (Error err) {
- critical(err.message);
- }
- }
-
- try {
- service = new SocketService();
- service.add_address(
- new UnixSocketAddress(socket_path),
- SocketType.STREAM,
- SocketProtocol.DEFAULT,
- null,
- null);
-
- service.incoming.connect((conn) => {
- _socket_request.begin(conn, (_, res) => _socket_request.end(res));
- return false;
- });
-
- Bus.own_name(
- BusType.SESSION,
- "io.Astal." + instance_name,
- BusNameOwnerFlags.NONE,
- (conn) => {
- try {
- this.conn = conn;
- conn.register_object("/io/Astal/Application", this);
- } catch (Error err) {
- critical(err.message);
- }
- },
- () => {},
- () => {});
-
- info("socket acquired: %s\n", socket_path);
- return true;
- } catch (Error err) {
- critical("could not acquire socket %s\n", application_id);
- critical(err.message);
- return false;
- }
- }
-
- public string message(string? msg) throws DBusError, IOError {
- var rundir = GLib.Environment.get_user_runtime_dir();
- var socket_path = @"$rundir/$instance_name.sock";
- var client = new SocketClient();
-
- if (msg == null)
- msg = "";
-
- try {
- var conn = client.connect(new UnixSocketAddress(socket_path), null);
- conn.output_stream.write(msg.concat("\x04").data);
-
- var stream = new DataInputStream(conn.input_stream);
- return stream.read_upto("\x04", -1, null, null);
- } catch (Error err) {
- printerr(err.message);
- return "";
- }
- }
-
- public new void quit() throws DBusError, IOError {
- if (service != null) {
- if (FileUtils.test(socket_path, GLib.FileTest.EXISTS)){
- try {
- File.new_for_path(socket_path).delete(null);
- } catch (Error err) {
- warning(err.message);
- }
- }
- }
-
- base.quit();
- }
-
- construct {
- if (instance_name == null)
- instance_name = "astal";
-
- activate.connect(() => {
- var display = Gdk.Display.get_default();
- display.monitor_added.connect((mon) => {
- monitor_added(mon);
- notify_property("monitors");
- });
- display.monitor_removed.connect((mon) => {
- monitor_removed(mon);
- notify_property("monitors");
- });
- });
-
- shutdown.connect(() => { try { quit(); } catch(Error err) {} });
- Unix.signal_add(1, () => { try { quit(); } catch(Error err) {} }, Priority.HIGH);
- Unix.signal_add(2, () => { try { quit(); } catch(Error err) {} }, Priority.HIGH);
- Unix.signal_add(15, () => { try { quit(); } catch(Error err) {} }, Priority.HIGH);
- }
-
- public static List<string> get_instances() {
- var list = new List<string>();
- var prefix = "io.Astal.";
-
- try {
- DBusImpl dbus = Bus.get_proxy_sync(
- BusType.SESSION,
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus"
- );
-
- foreach (var busname in dbus.list_names()) {
- if (busname.has_prefix(prefix))
- list.append(busname.replace(prefix, ""));
- }
- } catch (Error err) {
- critical(err.message);
- }
-
- return list;
- }
-
- public static void quit_instance(string instance) {
- try {
- IApplication proxy = Bus.get_proxy_sync(
- BusType.SESSION,
- "io.Astal." + instance,
- "/io/Astal/Application"
- );
-
- proxy.quit();
- } catch (Error err) {
- critical(err.message);
- }
- }
-
- public static void open_inspector(string instance) {
- try {
- IApplication proxy = Bus.get_proxy_sync(
- BusType.SESSION,
- "io.Astal." + instance,
- "/io/Astal/Application"
- );
-
- proxy.inspector();
- } catch (Error err) {
- critical(err.message);
- }
- }
-
- public static void toggle_window_by_name(string instance, string window) {
- try {
- IApplication proxy = Bus.get_proxy_sync(
- BusType.SESSION,
- "io.Astal." + instance,
- "/io/Astal/Application"
- );
-
- proxy.toggle_window(window);
- } catch (Error err) {
- critical(err.message);
- }
- }
-
- public static string send_message(string instance_name, string msg) {
- var rundir = GLib.Environment.get_user_runtime_dir();
- var socket_path = @"$rundir/$instance_name.sock";
- var client = new SocketClient();
-
- try {
- var conn = client.connect(new UnixSocketAddress(socket_path), null);
- conn.output_stream.write(msg.concat("\x04").data);
-
- var stream = new DataInputStream(conn.input_stream);
- return stream.read_upto("\x04", -1, null, null);
- } catch (Error err) {
- printerr(err.message);
- return "";
- }
- }
-}
-
-[DBus (name="org.freedesktop.DBus")]
-private interface DBusImpl : DBusProxy {
- public abstract string[] list_names() throws GLib.Error;
-}
-
-[DBus (name="io.Astal.Application")]
-private interface IApplication : DBusProxy {
- public abstract void quit() throws GLib.Error;
- public abstract void inspector() throws GLib.Error;
- public abstract void toggle_window(string window) throws GLib.Error;
- public abstract string message(string window) throws GLib.Error;
-}
-
-public async string read_sock(SocketConnection conn) {
- try {
- var stream = new DataInputStream(conn.input_stream);
- return yield stream.read_upto_async("\x04", -1, Priority.DEFAULT, null, null);
- } catch (Error err) {
- critical(err.message);
- return err.message;
- }
-}
-
-public async void write_sock(SocketConnection conn, string response) {
- try {
- yield conn.output_stream.write_async(
- response.concat("\x04").data,
- Priority.DEFAULT);
- } catch (Error err) {
- critical(err.message);
- }
-}
-}
diff --git a/core/src/cli.vala b/core/src/cli.vala
deleted file mode 100644
index 0b60cd1..0000000
--- a/core/src/cli.vala
+++ /dev/null
@@ -1,87 +0,0 @@
-private static bool version;
-private static bool help;
-private static bool list;
-private static bool quit;
-private static bool inspector;
-private static string? toggle_window;
-private static string? instance_name;
-
-private const GLib.OptionEntry[] options = {
- { "version", 'v', OptionFlags.NONE, OptionArg.NONE, ref version, null, null },
- { "help", 'h', OptionFlags.NONE, OptionArg.NONE, ref help, null, null },
- { "list", 'l', OptionFlags.NONE, OptionArg.NONE, ref list, null, null },
- { "quit", 'q', OptionFlags.NONE, OptionArg.NONE, ref quit, null, null },
- { "quit", 'q', OptionFlags.NONE, OptionArg.NONE, ref quit, null, null },
- { "inspector", 'I', OptionFlags.NONE, OptionArg.NONE, ref inspector, null, null },
- { "toggle-window", 't', OptionFlags.NONE, OptionArg.STRING, ref toggle_window, null, null },
- { "instance", 'i', OptionFlags.NONE, OptionArg.STRING, ref instance_name, null, null },
- { null },
-};
-
-int main(string[] argv) {
- try {
- var opts = new OptionContext();
- opts.add_main_entries(options, null);
- opts.set_help_enabled(false);
- opts.set_ignore_unknown_options(false);
- opts.parse(ref argv);
- } catch (OptionError err) {
- printerr (err.message);
- return 1;
- }
-
- if (help) {
- print("Client for Astal.Application instances\n\n");
- print("Usage:\n");
- print(" %s [flags] message\n\n", argv[0]);
- print("Flags:\n");
- print(" -h, --help Print this help and exit\n");
- print(" -v, --version Print version number and exit\n");
- print(" -l, --list List running Astal instances and exit\n");
- print(" -q, --quit Quit an Astal.Application instance\n");
- print(" -i, --instance Instance name of the Astal instance\n");
- print(" -I, --inspector Open up Gtk debug tool\n");
- print(" -t, --toggle-window Show or hide a window\n");
- return 0;
- }
-
- if (version) {
- print(Astal.VERSION);
- return 0;
- }
-
- if (instance_name == null)
- instance_name = "astal";
-
- if (list) {
- foreach (var name in Astal.Application.get_instances())
- stdout.printf("%s\n", name);
-
- return 0;
- }
-
- if (quit) {
- Astal.Application.quit_instance(instance_name);
- return 0;
- }
-
- if (inspector) {
- Astal.Application.open_inspector(instance_name);
- return 0;
- }
-
- if (toggle_window != null) {
- Astal.Application.toggle_window_by_name(instance_name, toggle_window);
- return 0;
- }
-
- var request = "";
- for (var i = 1; i < argv.length; ++i) {
- request = request.concat(" ", argv[i]);
- }
-
- var reply = Astal.Application.send_message(instance_name, request);
- print("%s\n", reply);
-
- return 0;
-}
diff --git a/core/src/config.vala.in b/core/src/config.vala.in
deleted file mode 100644
index 88bfe9c..0000000
--- a/core/src/config.vala.in
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Astal {
- public const int MAJOR_VERSION = @MAJOR_VERSION@;
- public const int MINOR_VERSION = @MINOR_VERSION@;
- public const int MICRO_VERSION = @MICRO_VERSION@;
- public const string VERSION = "@VERSION@";
-}
diff --git a/core/src/file.vala b/core/src/file.vala
deleted file mode 100644
index d8acccc..0000000
--- a/core/src/file.vala
+++ /dev/null
@@ -1,81 +0,0 @@
-namespace Astal {
-public string read_file(string path) {
- var str = "";
- try {
- FileUtils.get_contents(path, out str, null);
- } catch (Error error) {
- critical(error.message);
- }
- return str;
-}
-
-public async string read_file_async(string path) throws Error {
- uint8[] content;
- yield File.new_for_path(path).load_contents_async(null, out content, null);
- return (string)content;
-}
-
-public void write_file(string path, string content) {
- try {
- FileUtils.set_contents(path, content);
- } catch (Error error) {
- critical(error.message);
- }
-}
-
-public async void write_file_async(string path, string content) throws Error {
- yield File.new_for_path(path).replace_contents_async(
- content.data,
- null,
- false,
- GLib.FileCreateFlags.REPLACE_DESTINATION,
- null,
- null);
-}
-
-public FileMonitor? monitor_file(string path, Closure callback) {
- try {
- var file = File.new_for_path(path);
- var mon = file.monitor(GLib.FileMonitorFlags.NONE);
-
- mon.changed.connect((file, _file, event) => {
- var f = Value(Type.STRING);
- var e = Value(Type.INT);
- var ret = Value(Type.POINTER);
-
- f.set_string(file.get_path());
- e.set_int(event);
-
- callback.invoke(ref ret, { f, e });
- });
-
- if (FileUtils.test(path, FileTest.IS_DIR)) {
- var enumerator = file.enumerate_children("standard::*",
- FileQueryInfoFlags.NONE, null);
-
- var i = enumerator.next_file(null);
- while (i != null) {
- if (i.get_file_type() == FileType.DIRECTORY) {
- var filepath = file.get_child(i.get_name()).get_path();
- if (filepath != null) {
- var m = monitor_file(path, callback);
- mon.notify["cancelled"].connect(() => {
- m.cancel();
- });
- }
- }
- i = enumerator.next_file(null);
- }
- }
-
- mon.ref();
- mon.notify["cancelled"].connect(() => {
- mon.unref();
- });
- return mon;
- } catch (Error error) {
- critical(error.message);
- return null;
- }
-}
-}
diff --git a/core/src/idle-inhibit.c b/core/src/idle-inhibit.c
deleted file mode 100644
index 48f2471..0000000
--- a/core/src/idle-inhibit.c
+++ /dev/null
@@ -1,114 +0,0 @@
-#include "idle-inhibit.h"
-
-#include <gdk/gdk.h>
-#include <gdk/gdkwayland.h>
-#include <gio/gio.h>
-#include <glib-object.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <wayland-client-protocol.h>
-#include <wayland-client.h>
-
-#include "idle-inhibit-unstable-v1-client.h"
-
-struct _AstalInhibitManager {
- GObject parent_instance;
-};
-
-typedef struct {
- gboolean init;
- struct wl_registry* wl_registry;
- struct wl_display* display;
- struct zwp_idle_inhibit_manager_v1* idle_inhibit_manager;
-} AstalInhibitManagerPrivate;
-
-G_DEFINE_TYPE_WITH_PRIVATE(AstalInhibitManager, astal_inhibit_manager, G_TYPE_OBJECT)
-
-AstalInhibitor* astal_inhibit_manager_inhibit(AstalInhibitManager* self, GtkWindow* window) {
- AstalInhibitManagerPrivate* priv = astal_inhibit_manager_get_instance_private(self);
- g_assert_true(priv->init);
- GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(window));
- struct wl_surface* surface = gdk_wayland_window_get_wl_surface(gdk_window);
- return zwp_idle_inhibit_manager_v1_create_inhibitor(priv->idle_inhibit_manager, surface);
-}
-
-static void global_registry_handler(void* data, struct wl_registry* registry, uint32_t id,
- const char* interface, uint32_t version) {
- AstalInhibitManager* self = ASTAL_INHIBIT_MANAGER(data);
- AstalInhibitManagerPrivate* priv = astal_inhibit_manager_get_instance_private(self);
-
- if (strcmp(interface, zwp_idle_inhibit_manager_v1_interface.name) == 0) {
- priv->idle_inhibit_manager =
- wl_registry_bind(registry, id, &zwp_idle_inhibit_manager_v1_interface, 1);
- }
-}
-
-static void global_registry_remover(void* data, struct wl_registry* registry, uint32_t id) {
- // neither inhibit_manager nor inhibitor is going to be removed by the compositor, so we don't
- // need do anything here.
-}
-
-static const struct wl_registry_listener registry_listener = {global_registry_handler,
- global_registry_remover};
-
-static gboolean astal_inhibit_manager_wayland_init(AstalInhibitManager* self) {
- AstalInhibitManagerPrivate* priv = astal_inhibit_manager_get_instance_private(self);
-
- if (priv->init) return TRUE;
-
- GdkDisplay* gdk_display = gdk_display_get_default();
- priv->display = gdk_wayland_display_get_wl_display(gdk_display);
-
- priv->wl_registry = wl_display_get_registry(priv->display);
- wl_registry_add_listener(priv->wl_registry, &registry_listener, self);
-
- wl_display_roundtrip(priv->display);
-
- if (priv->idle_inhibit_manager == NULL) {
- g_critical("Can not connect idle inhibitor protocol");
- return FALSE;
- }
-
- priv->init = TRUE;
- return TRUE;
-}
-
-AstalInhibitManager* astal_inhibit_manager_get_default() {
- static AstalInhibitManager* self = NULL;
-
- if (self == NULL) {
- self = g_object_new(ASTAL_TYPE_INHIBIT_MANAGER, NULL);
- if (!astal_inhibit_manager_wayland_init(self)) {
- g_object_unref(self);
- self = NULL;
- }
- }
-
- return self;
-}
-
-static void astal_inhibit_manager_init(AstalInhibitManager* self) {
- AstalInhibitManagerPrivate* priv = astal_inhibit_manager_get_instance_private(self);
- priv->init = FALSE;
- priv->display = NULL;
- priv->wl_registry = NULL;
- priv->idle_inhibit_manager = NULL;
-}
-
-static void astal_inhibit_manager_finalize(GObject* object) {
- AstalInhibitManager* self = ASTAL_INHIBIT_MANAGER(object);
- AstalInhibitManagerPrivate* priv = astal_inhibit_manager_get_instance_private(self);
-
- if (priv->display != NULL) wl_display_roundtrip(priv->display);
-
- if (priv->wl_registry != NULL) wl_registry_destroy(priv->wl_registry);
- if (priv->idle_inhibit_manager != NULL)
- zwp_idle_inhibit_manager_v1_destroy(priv->idle_inhibit_manager);
-
- G_OBJECT_CLASS(astal_inhibit_manager_parent_class)->finalize(object);
-}
-
-static void astal_inhibit_manager_class_init(AstalInhibitManagerClass* class) {
- GObjectClass* object_class = G_OBJECT_CLASS(class);
- object_class->finalize = astal_inhibit_manager_finalize;
-}
diff --git a/core/src/idle-inhibit.h b/core/src/idle-inhibit.h
deleted file mode 100644
index 5e9a3ab..0000000
--- a/core/src/idle-inhibit.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef ASTAL_IDLE_INHIBITOR_H
-#define ASTAL_IDLE_INHIBITOR_H
-
-#include <glib-object.h>
-#include <gtk/gtk.h>
-
-#include "idle-inhibit-unstable-v1-client.h"
-
-G_BEGIN_DECLS
-
-#define ASTAL_TYPE_INHIBIT_MANAGER (astal_inhibit_manager_get_type())
-
-G_DECLARE_FINAL_TYPE(AstalInhibitManager, astal_inhibit_manager, ASTAL, INHIBIT_MANAGER, GObject)
-
-typedef struct zwp_idle_inhibitor_v1 AstalInhibitor;
-
-AstalInhibitManager* astal_inhibit_manager_get_default();
-AstalInhibitor* astal_inhibit_manager_inhibit(AstalInhibitManager* self, GtkWindow* window);
-
-G_END_DECLS
-
-#endif // !ASTAL_IDLE_INHIBITOR_H
diff --git a/core/src/meson.build b/core/src/meson.build
deleted file mode 100644
index b5adda2..0000000
--- a/core/src/meson.build
+++ /dev/null
@@ -1,136 +0,0 @@
-version_split = meson.project_version().split('.')
-api_version = version_split[0] + '.' + version_split[1]
-gir = 'Astal-' + api_version + '.gir'
-typelib = 'Astal-' + api_version + '.typelib'
-
-vapi_dir = meson.current_source_dir() / 'vapi'
-add_project_arguments(['--vapidir', vapi_dir], language: 'vala')
-
-config = configure_file(
- input: 'config.vala.in',
- output: 'config.vala',
- configuration: {
- 'VERSION': meson.project_version(),
- 'MAJOR_VERSION': version_split[0],
- 'MINOR_VERSION': version_split[1],
- 'MICRO_VERSION': version_split[2],
- },
-)
-
-pkgconfig_deps = [
- dependency('glib-2.0'),
- dependency('gio-unix-2.0'),
- dependency('gobject-2.0'),
- dependency('gio-2.0'),
- dependency('gtk+-3.0'),
- dependency('gdk-pixbuf-2.0'),
- dependency('gtk-layer-shell-0'),
- dependency('wayland-client'),
-]
-
-deps = pkgconfig_deps + meson.get_compiler('c').find_library('m')
-
-
-wayland_protos = dependency('wayland-protocols')
-wayland_scanner = find_program('wayland-scanner')
-
-wl_protocol_dir = wayland_protos.get_variable(pkgconfig: 'pkgdatadir')
-
-gen_client_header = generator(
- wayland_scanner,
- output: ['@[email protected]'],
- arguments: ['-c', 'client-header', '@INPUT@', '@BUILD_DIR@/@[email protected]'],
-)
-
-gen_private_code = generator(
- wayland_scanner,
- output: ['@[email protected]'],
- arguments: ['-c', 'private-code', '@INPUT@', '@BUILD_DIR@/@[email protected]'],
-)
-
-protocols = [
- join_paths(wl_protocol_dir, 'unstable/idle-inhibit/idle-inhibit-unstable-v1.xml')
-]
-
-client_protocol_srcs = []
-
-foreach protocol : protocols
- client_header = gen_client_header.process(protocol)
- code = gen_private_code.process(protocol)
- client_protocol_srcs += [client_header, code]
-endforeach
-
-sources = [
- config,
- 'widget/box.vala',
- 'widget/button.vala',
- 'widget/centerbox.vala',
- 'widget/circularprogress.vala',
- 'widget/eventbox.vala',
- 'widget/icon.vala',
- 'widget/label.vala',
- 'widget/levelbar.vala',
- 'widget/overlay.vala',
- 'widget/scrollable.vala',
- 'widget/slider.vala',
- 'widget/stack.vala',
- 'widget/widget.vala',
- 'widget/window.vala',
- 'astal.vala',
- 'file.vala',
- 'process.vala',
- 'time.vala',
- 'variable.vala',
- 'idle-inhibit.h',
- 'idle-inhibit.c',
-] + client_protocol_srcs
-
-if get_option('lib')
- lib = library(
- meson.project_name(),
- sources,
- dependencies: deps,
- vala_args: ['--pkg', 'AstalInhibitManager'],
- vala_header: meson.project_name() + '.h',
- vala_vapi: meson.project_name() + '-' + api_version + '.vapi',
- vala_gir: gir,
- version: meson.project_version(),
- install: true,
- install_dir: [true, true, true, true],
- )
-
- import('pkgconfig').generate(
- lib,
- name: meson.project_name(),
- filebase: meson.project_name() + '-' + api_version,
- version: meson.project_version(),
- subdirs: meson.project_name(),
- requires: pkgconfig_deps,
- install_dir: libdir / 'pkgconfig',
- )
-
- custom_target(
- typelib,
- command: [
- find_program('g-ir-compiler'),
- '--output', '@OUTPUT@',
- '--shared-library', libdir / '@PLAINNAME@',
- meson.current_build_dir() / gir,
- ],
- input: lib,
- output: typelib,
- depends: lib,
- install: true,
- install_dir: libdir / 'girepository-1.0',
- )
-endif
-
-if get_option('cli')
- executable(
- meson.project_name(),
- ['cli.vala', sources],
- vala_args: ['--pkg', 'AstalInhibitManager'],
- dependencies: deps,
- install: true,
- )
-endif
diff --git a/core/src/process.vala b/core/src/process.vala
deleted file mode 100644
index 073fe93..0000000
--- a/core/src/process.vala
+++ /dev/null
@@ -1,119 +0,0 @@
-public class Astal.Process : Object {
- private void read_stream(DataInputStream stream, bool err) {
- stream.read_line_utf8_async.begin(Priority.DEFAULT, null, (_, res) => {
- try {
- var output = stream.read_line_utf8_async.end(res);
- if (output != null) {
- if (err)
- stdout(output.strip());
- else
- stderr(output.strip());
-
- read_stream(stream, err);
- }
- } catch (Error err) {
- printerr("%s\n", err.message);
- }
- });
- }
-
- private DataInputStream out_stream;
- private DataInputStream err_stream;
- private DataOutputStream in_stream;
- private Subprocess process;
- public string[] argv { construct; get; }
-
- public signal void stdout (string out);
- public signal void stderr (string err);
-
- public void kill() {
- process.force_exit();
- }
-
- public void signal(int signal_num) {
- process.send_signal(signal_num);
- }
-
- public void write(string in) throws Error {
- in_stream.put_string(in);
- }
-
- public void write_async(string in) {
- in_stream.write_all_async.begin(
- in.data,
- Priority.DEFAULT, null, (_, res) => {
- try {
- in_stream.write_all_async.end(res, null);
- } catch (Error err) {
- printerr("%s\n", err.message);
- }
- }
- );
- }
-
- public Process.subprocessv(string[] cmd) throws Error {
- Object(argv: cmd);
- process = new Subprocess.newv(cmd,
- SubprocessFlags.STDIN_PIPE |
- SubprocessFlags.STDERR_PIPE |
- SubprocessFlags.STDOUT_PIPE
- );
- out_stream = new DataInputStream(process.get_stdout_pipe());
- err_stream = new DataInputStream(process.get_stderr_pipe());
- in_stream = new DataOutputStream(process.get_stdin_pipe());
- read_stream(out_stream, true);
- read_stream(err_stream, false);
- }
-
- public static Process subprocess(string cmd) throws Error {
- string[] argv;
- Shell.parse_argv(cmd, out argv);
- return new Process.subprocessv(argv);
- }
-
- public static string execv(string[] cmd) throws Error {
- var process = new Subprocess.newv(
- cmd,
- SubprocessFlags.STDERR_PIPE |
- SubprocessFlags.STDOUT_PIPE
- );
-
- string err_str, out_str;
- process.communicate_utf8(null, null, out out_str, out err_str);
- var success = process.get_successful();
- process.dispose();
- if (success)
- return out_str.strip();
- else
- throw new IOError.FAILED(err_str.strip());
- }
-
- public static string exec(string cmd) throws Error {
- string[] argv;
- Shell.parse_argv(cmd, out argv);
- return Process.execv(argv);
- }
-
- public static async string exec_asyncv(string[] cmd) throws Error {
- var process = new Subprocess.newv(
- cmd,
- SubprocessFlags.STDERR_PIPE |
- SubprocessFlags.STDOUT_PIPE
- );
-
- string err_str, out_str;
- yield process.communicate_utf8_async(null, null, out out_str, out err_str);
- var success = process.get_successful();
- process.dispose();
- if (success)
- return out_str.strip();
- else
- throw new IOError.FAILED(err_str.strip());
- }
-
- public static async string exec_async(string cmd) throws Error {
- string[] argv;
- Shell.parse_argv(cmd, out argv);
- return yield exec_asyncv(argv);
- }
-}
diff --git a/core/src/time.vala b/core/src/time.vala
deleted file mode 100644
index 4034c04..0000000
--- a/core/src/time.vala
+++ /dev/null
@@ -1,73 +0,0 @@
-namespace Astal {
-public class Time : Object {
- public signal void now ();
- public signal void cancelled ();
- private Cancellable cancellable;
- private uint timeout_id;
- private bool fulfilled = false;
-
- construct {
- cancellable = new Cancellable();
- cancellable.cancelled.connect(() => {
- if (!fulfilled) {
- Source.remove(timeout_id);
- cancelled();
- dispose();
- }
- });
- }
-
- private void connect_closure(Closure? closure) {
- if (closure == null)
- return;
-
- now.connect(() => {
- Value ret = Value(Type.POINTER); // void
- closure.invoke(ref ret, {});
- });
- }
-
- public Time.interval_prio(uint interval, int prio = Priority.DEFAULT, Closure? fn) {
- connect_closure(fn);
- Idle.add_once(() => now());
- timeout_id = Timeout.add(interval, () => {
- now();
- return Source.CONTINUE;
- }, prio);
- }
-
- public Time.timeout_prio(uint timeout, int prio = Priority.DEFAULT, Closure? fn) {
- connect_closure(fn);
- timeout_id = Timeout.add(timeout, () => {
- now();
- fulfilled = true;
- return Source.REMOVE;
- }, prio);
- }
-
- public Time.idle_prio(int prio = Priority.DEFAULT_IDLE, Closure? fn) {
- connect_closure(fn);
- timeout_id = Idle.add(() => {
- now();
- fulfilled = true;
- return Source.REMOVE;
- }, prio);
- }
-
- public static Time interval(uint interval, Closure? fn) {
- return new Time.interval_prio(interval, Priority.DEFAULT, fn);
- }
-
- public static Time timeout(uint timeout, Closure? fn) {
- return new Time.timeout_prio(timeout, Priority.DEFAULT, fn);
- }
-
- public static Time idle(Closure? fn) {
- return new Time.idle_prio(Priority.DEFAULT_IDLE, fn);
- }
-
- public void cancel() {
- cancellable.cancel();
- }
-}
-}
diff --git a/core/src/vapi/AstalInhibitManager.vapi b/core/src/vapi/AstalInhibitManager.vapi
deleted file mode 100644
index 6232a3c..0000000
--- a/core/src/vapi/AstalInhibitManager.vapi
+++ /dev/null
@@ -1,13 +0,0 @@
-[CCode (cprefix = "Astal", gir_namespace = "Astal", lower_case_cprefix = "astal_")]
-namespace Astal {
- [CCode (cheader_filename = "idle-inhibit.h", type_id = "astal_idle_inhibit_manager_get_type()")]
- public class InhibitManager : GLib.Object {
- public static unowned InhibitManager? get_default();
- public Inhibitor inhibit (Gtk.Window window);
- }
-
- [CCode (cheader_filename = "idle-inhibit.h", free_function = "zwp_idle_inhibitor_v1_destroy")]
- [Compact]
- public class Inhibitor {
- }
-}
diff --git a/core/src/variable.vala b/core/src/variable.vala
deleted file mode 100644
index c7edb16..0000000
--- a/core/src/variable.vala
+++ /dev/null
@@ -1,196 +0,0 @@
-namespace Astal {
-public class VariableBase : Object {
- public signal void changed ();
- public signal void dropped ();
- public signal void error (string err);
-
- // lua-lgi crashes when using its emitting mechanism
- public void emit_changed() { changed(); }
- public void emit_dropped() { dropped(); }
- public void emit_error(string err) { this.error(err); }
-
- ~VariableBase() {
- dropped();
- }
-}
-
-public class Variable : VariableBase {
- public Value value { owned get; set; }
-
- private uint poll_id = 0;
- private Process? watch_proc;
-
- private uint poll_interval { get; set; default = 1000; }
- private string[] poll_exec { get; set; }
- private Closure? poll_transform { get; set; }
- private Closure? poll_fn { get; set; }
-
- private Closure? watch_transform { get; set; }
- private string[] watch_exec { get; set; }
-
- public Variable(Value init) {
- Object(value: init);
- }
-
- public Variable poll(
- uint interval,
- string exec,
- Closure? transform
- ) throws Error {
- string[] argv;
- Shell.parse_argv(exec, out argv);
- return pollv(interval, argv, transform);
- }
-
- public Variable pollv(
- uint interval,
- string[] execv,
- Closure? transform
- ) throws Error {
- if (is_polling())
- stop_poll();
-
- poll_interval = interval;
- poll_exec = execv;
- poll_transform = transform;
- poll_fn = null;
- start_poll();
- return this;
- }
-
- public Variable pollfn(
- uint interval,
- Closure fn
- ) throws Error {
- if (is_polling())
- stop_poll();
-
- poll_interval = interval;
- poll_fn = fn;
- poll_exec = null;
- start_poll();
- return this;
- }
-
- public Variable watch(
- string exec,
- Closure? transform
- ) throws Error {
- string[] argv;
- Shell.parse_argv(exec, out argv);
- return watchv(argv, transform);
- }
-
- public Variable watchv(
- string[] execv,
- Closure? transform
- ) throws Error {
- if (is_watching())
- stop_watch();
-
- watch_exec = execv;
- watch_transform = transform;
- start_watch();
- return this;
- }
-
- construct {
- notify["value"].connect(() => changed());
- dropped.connect(() => {
- if (is_polling())
- stop_poll();
-
- if (is_watching())
- stop_watch();
- });
- }
-
- private void set_closure(string val, Closure? transform) {
- if (transform != null) {
- var str = Value(typeof(string));
- str.set_string(val);
-
- var ret_val = Value(this.value.type());
- transform.invoke(ref ret_val, { str, this.value });
- this.value = ret_val;
- }
- else {
- if (this.value.type() == Type.STRING && this.value.get_string() == val)
- return;
-
- var str = Value(typeof(string));
- str.set_string(val);
- this.value = str;
- }
- }
-
- private void set_fn() {
- var ret_val = Value(this.value.type());
- poll_fn.invoke(ref ret_val, { this.value });
- this.value = ret_val;
- }
-
- public void start_poll() throws Error {
- return_if_fail(poll_id == 0);
-
- if (poll_fn != null) {
- set_fn();
- poll_id = Timeout.add(poll_interval, () => {
- set_fn();
- return Source.CONTINUE;
- }, Priority.DEFAULT);
- }
- if (poll_exec != null) {
- Process.exec_asyncv.begin(poll_exec, (_, res) => {
- try {
- var str = Process.exec_asyncv.end(res);
- set_closure(str, poll_transform);
- } catch (Error err) {
- this.error(err.message);
- }
- });
- poll_id = Timeout.add(poll_interval, () => {
- Process.exec_asyncv.begin(poll_exec, (_, res) => {
- try {
- var str = Process.exec_asyncv.end(res);
- set_closure(str, poll_transform);
- } catch (Error err) {
- this.error(err.message);
- Source.remove(poll_id);
- poll_id = 0;
- }
- });
- return Source.CONTINUE;
- }, Priority.DEFAULT);
- }
- }
-
- public void start_watch() throws Error {
- return_if_fail(watch_proc == null);
- return_if_fail(watch_exec != null);
-
- watch_proc = new Process.subprocessv(watch_exec);
- watch_proc.stdout.connect((str) => set_closure(str, watch_transform));
- watch_proc.stderr.connect((str) => this.error(str));
- }
-
- public void stop_poll() {
- return_if_fail(poll_id != 0);
- Source.remove(poll_id);
- poll_id = 0;
- }
-
- public void stop_watch() {
- return_if_fail(watch_proc != null);
- watch_proc.kill();
- watch_proc = null;
- }
-
- public bool is_polling() { return poll_id > 0; }
- public bool is_watching() { return watch_proc != null; }
-
- ~Variable() {
- dropped();
- }
-}
-}
diff --git a/core/src/widget/box.vala b/core/src/widget/box.vala
deleted file mode 100644
index 943c821..0000000
--- a/core/src/widget/box.vala
+++ /dev/null
@@ -1,62 +0,0 @@
-namespace Astal {
-public class Box : Gtk.Box {
- [CCode (notify = false)]
- public bool vertical {
- get { return orientation == Gtk.Orientation.VERTICAL; }
- set { orientation = value ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; }
- }
-
- public List<weak Gtk.Widget> children {
- set { _set_children(value); }
- owned get { return get_children(); }
- }
-
- public new Gtk.Widget child {
- owned get { return _get_child(); }
- set { _set_child(value); }
- }
-
- construct {
- notify["orientation"].connect(() => {
- notify_property("vertical");
- });
- }
-
- private void _set_child(Gtk.Widget child) {
- var list = new List<weak Gtk.Widget>();
- list.append(child);
- _set_children(list);
- }
-
- private Gtk.Widget? _get_child() {
- foreach(var child in get_children())
- return child;
-
- return null;
- }
-
- private void _set_children(List<weak Gtk.Widget> arr) {
- foreach(var child in get_children()) {
- remove(child);
- }
-
- foreach(var child in arr)
- add(child);
- }
-
- public Box(bool vertical, List<weak Gtk.Widget> children) {
- this.vertical = vertical;
- _set_children(children);
- }
-
- public Box.newh(List<weak Gtk.Widget> children) {
- this.vertical = false;
- _set_children(children);
- }
-
- public Box.newv(List<weak Gtk.Widget> children) {
- this.vertical = true;
- _set_children(children);
- }
-}
-}
diff --git a/core/src/widget/button.vala b/core/src/widget/button.vala
deleted file mode 100644
index ad60da1..0000000
--- a/core/src/widget/button.vala
+++ /dev/null
@@ -1,101 +0,0 @@
-namespace Astal {
-public class Button : Gtk.Button {
- public signal void hover (HoverEvent event);
- public signal void hover_lost (HoverEvent event);
- public signal void click (ClickEvent event);
- public signal void click_release (ClickEvent event);
- public signal void scroll (ScrollEvent event);
-
- construct {
- add_events(Gdk.EventMask.SCROLL_MASK);
- add_events(Gdk.EventMask.SMOOTH_SCROLL_MASK);
-
- enter_notify_event.connect((self, event) => {
- hover(HoverEvent(event) { lost = false });
- });
-
- leave_notify_event.connect((self, event) => {
- hover_lost(HoverEvent(event) { lost = true });
- });
-
- button_press_event.connect((event) => {
- click(ClickEvent(event) { release = false });
- });
-
- button_release_event.connect((event) => {
- click_release(ClickEvent(event) { release = true });
- });
-
- scroll_event.connect((event) => {
- scroll(ScrollEvent(event));
- });
- }
-}
-
-public enum MouseButton {
- PRIMARY = 1,
- MIDDLE = 2,
- SECONDARY = 3,
- BACK = 4,
- FORWARD = 5,
-}
-
-// these structs are here because gjs converts every event
-// into a union Gdk.Event, which cannot be destructured
-// and are not as convinent to work with as a struct
-public struct ClickEvent {
- bool release;
- uint time;
- double x;
- double y;
- Gdk.ModifierType modifier;
- MouseButton button;
-
- public ClickEvent(Gdk.EventButton event) {
- this.time = event.time;
- this.x = event.x;
- this.y = event.y;
- this.button = (MouseButton)event.button;
- this.modifier = event.state;
- }
-}
-
-public struct HoverEvent {
- bool lost;
- uint time;
- double x;
- double y;
- Gdk.ModifierType modifier;
- Gdk.CrossingMode mode;
- Gdk.NotifyType detail;
-
- public HoverEvent(Gdk.EventCrossing event) {
- this.time = event.time;
- this.x = event.x;
- this.y = event.y;
- this.modifier = event.state;
- this.mode = event.mode;
- this.detail = event.detail;
- }
-}
-
-public struct ScrollEvent {
- uint time;
- double x;
- double y;
- Gdk.ModifierType modifier;
- Gdk.ScrollDirection direction;
- double delta_x;
- double delta_y;
-
- public ScrollEvent(Gdk.EventScroll event) {
- this.time = event.time;
- this.x = event.x;
- this.y = event.y;
- this.modifier = event.state;
- this.direction = event.direction;
- this.delta_x = event.delta_x;
- this.delta_y = event.delta_y;
- }
-}
-}
diff --git a/core/src/widget/centerbox.vala b/core/src/widget/centerbox.vala
deleted file mode 100644
index 0588828..0000000
--- a/core/src/widget/centerbox.vala
+++ /dev/null
@@ -1,54 +0,0 @@
-namespace Astal {
-public class CenterBox : Gtk.Box {
- [CCode (notify = false)]
- public bool vertical {
- get { return orientation == Gtk.Orientation.VERTICAL; }
- set { orientation = value ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; }
- }
-
- construct {
- notify["orientation"].connect(() => {
- notify_property("vertical");
- });
- }
-
- static construct {
- set_css_name("centerbox");
- }
-
- private Gtk.Widget _start_widget;
- public Gtk.Widget start_widget {
- get { return _start_widget; }
- set {
- if (_start_widget != null)
- remove(_start_widget);
-
- if (value != null)
- pack_start(value, true, true, 0);
- }
- }
-
- private Gtk.Widget _end_widget;
- public Gtk.Widget end_widget {
- get { return _end_widget; }
- set {
- if (_end_widget != null)
- remove(_end_widget);
-
- if (value != null)
- pack_end(value, true, true, 0);
- }
- }
-
- public Gtk.Widget center_widget {
- get { return get_center_widget(); }
- set {
- if (center_widget != null)
- remove(center_widget);
-
- if (value != null)
- set_center_widget(value);
- }
- }
-}
-}
diff --git a/core/src/widget/circularprogress.vala b/core/src/widget/circularprogress.vala
deleted file mode 100644
index 4e1410d..0000000
--- a/core/src/widget/circularprogress.vala
+++ /dev/null
@@ -1,182 +0,0 @@
-namespace Astal {
-public class CircularProgress : Gtk.Bin {
- public double start_at { get; set; }
- public double end_at { get; set; }
- public double value { get; set; }
- public bool inverted { get; set; }
- public bool rounded { get; set; }
-
- construct {
- notify["start-at"].connect(queue_draw);
- notify["end-at"].connect(queue_draw);
- notify["value"].connect(queue_draw);
- notify["inverted"].connect(queue_draw);
- notify["rounded"].connect(queue_draw);
- notify["child"].connect(queue_draw);
- }
-
- static construct {
- set_css_name("circular-progress");
- }
-
- public override void get_preferred_height(out int minh, out int nath) {
- var val = get_style_context().get_property("min-height", Gtk.StateFlags.NORMAL);
- if (val.get_int() <= 0) {
- minh = 40;
- nath = 40;
- }
-
- minh = val.get_int();
- nath = val.get_int();
- }
-
- public override void get_preferred_width(out int minw, out int natw) {
- var val = get_style_context().get_property("min-width", Gtk.StateFlags.NORMAL);
- if (val.get_int() <= 0) {
- minw = 40;
- natw = 40;
- }
-
- minw = val.get_int();
- natw = val.get_int();
- }
-
- private double to_radian(double percentage) {
- percentage = Math.floor(percentage * 100);
- return (percentage / 100) * (2 * Math.PI);
- }
-
- private bool is_full_circle(double start, double end, double epsilon = 1e-10) {
- // Ensure that start and end are between 0 and 1
- start = (start % 1 + 1) % 1;
- end = (end % 1 + 1) % 1;
-
- // Check if the difference between start and end is close to 1
- return Math.fabs(start - end) <= epsilon;
- }
-
- private double scale_arc_value(double start, double end, double value) {
- // Ensure that start and end are between 0 and 1
- start = (start % 1 + 1) % 1;
- end = (end % 1 + 1) % 1;
-
- // Calculate the length of the arc
- var arc_length = end - start;
- if (arc_length < 0)
- arc_length += 1; // Adjust for circular representation
-
- // Calculate the position on the arc based on the percentage value
- var scaled = arc_length + value;
-
- // Ensure the position is between 0 and 1
- return (scaled % 1 + 1) % 1;
- }
-
- private double min(double[] arr) {
- double min = arr[0];
- foreach(var i in arr)
- if (min > i) min = i;
- return min;
- }
-
- private double max(double[] arr) {
- double max = arr[0];
- foreach(var i in arr)
- if (max < i) max = i;
- return max;
- }
-
- public override bool draw(Cairo.Context cr) {
- Gtk.Allocation allocation;
- get_allocation(out allocation);
-
- var styles = get_style_context();
- var width = allocation.width;
- var height = allocation.height;
- var thickness = styles.get_property("font-size", Gtk.StateFlags.NORMAL).get_double();
- var margin = styles.get_margin(Gtk.StateFlags.NORMAL);
- var fg = styles.get_color(Gtk.StateFlags.NORMAL);
- var bg = styles.get_background_color(Gtk.StateFlags.NORMAL);
-
- var bg_stroke = thickness + min({margin.bottom, margin.top, margin.left, margin.right});
- var fg_stroke = thickness;
- var radius = min({width, height}) / 2.0 - max({bg_stroke, fg_stroke}) / 2.0;
- var center_x = width / 2;
- var center_y = height / 2;
-
- var start_background = to_radian(start_at);
- var end_background = to_radian(end_at);
- var ranged_value = value + start_at;
-
- var is_circle = is_full_circle(this.start_at, this.end_at);
-
- if (is_circle) {
- // Redefine end_draw in radius to create an accurate full circle
- end_background = start_background + 2 * Math.PI;
- ranged_value = to_radian(value);
- } else {
- // Range the value for the arc shape
- ranged_value = to_radian(scale_arc_value(
- start_at,
- end_at,
- value
- ));
- }
-
- double start_progress, end_progress;
-
- if (inverted) {
- start_progress = end_background - ranged_value;
- end_progress = end_background;
- } else {
- start_progress = start_background;
- end_progress = start_background + ranged_value;
- }
-
- // Draw background
- cr.set_source_rgba(bg.red, bg.green, bg.blue, bg.alpha);
- cr.arc(center_x, center_y, radius, start_background, end_background);
- cr.set_line_width(bg_stroke);
- cr.stroke();
-
- // Draw rounded background ends
- if (rounded) {
- var start_x = center_x + Math.cos(start_background) * radius;
- var start_y = center_y + Math.sin(start_background) * radius;
- var end_x = center_x + Math.cos(end_background) * radius;
- var end_y = center_y + Math.sin(end_background) * radius;
- cr.set_line_width(0);
- cr.arc(start_x, start_y, bg_stroke / 2, 0, 0 - 0.01);
- cr.fill();
- cr.arc(end_x, end_y, bg_stroke / 2, 0, 0 - 0.01);
- cr.fill();
- }
-
- // Draw progress
- cr.set_source_rgba(fg.red, fg.green, fg.blue, fg.alpha);
- cr.arc(center_x, center_y, radius, start_progress, end_progress);
- cr.set_line_width(fg_stroke);
- cr.stroke();
-
- // Draw rounded progress ends
- if (rounded) {
- var start_x = center_x + Math.cos(start_progress) * radius;
- var start_y = center_y + Math.sin(start_progress) * radius;
- var end_x = center_x + Math.cos(end_progress) * radius;
- var end_y = center_y + Math.sin(end_progress) * radius;
- cr.set_line_width(0);
- cr.arc(start_x, start_y, fg_stroke / 2, 0, 0 - 0.01);
- cr.fill();
- cr.arc(end_x, end_y, fg_stroke / 2, 0, 0 - 0.01);
- cr.fill();
- }
-
- if (get_child() != null) {
- get_child().size_allocate(allocation);
- propagate_draw(get_child(), cr);
- }
-
- return true;
- }
-}
-}
diff --git a/core/src/widget/eventbox.vala b/core/src/widget/eventbox.vala
deleted file mode 100644
index 6b715cc..0000000
--- a/core/src/widget/eventbox.vala
+++ /dev/null
@@ -1,66 +0,0 @@
-namespace Astal {
-public class EventBox : Gtk.EventBox {
- public signal void hover (HoverEvent event);
- public signal void hover_lost (HoverEvent event);
- public signal void click (ClickEvent event);
- public signal void click_release (ClickEvent event);
- public signal void scroll (ScrollEvent event);
- public signal void motion (MotionEvent event);
-
- static construct {
- set_css_name("eventbox");
- }
-
- construct {
- add_events(Gdk.EventMask.SCROLL_MASK);
- add_events(Gdk.EventMask.SMOOTH_SCROLL_MASK);
- add_events(Gdk.EventMask.POINTER_MOTION_MASK);
-
- enter_notify_event.connect((self, event) => {
- if (event.window == self.get_window() &&
- event.detail != Gdk.NotifyType.INFERIOR) {
- this.set_state_flags(Gtk.StateFlags.PRELIGHT, false);
- hover(HoverEvent(event) { lost = false });
- }
- });
-
- leave_notify_event.connect((self, event) => {
- if (event.window == self.get_window() &&
- event.detail != Gdk.NotifyType.INFERIOR) {
- this.unset_state_flags(Gtk.StateFlags.PRELIGHT);
- hover_lost(HoverEvent(event) { lost = true });
- }
- });
-
- button_press_event.connect((event) => {
- click(ClickEvent(event) { release = false });
- });
-
- button_release_event.connect((event) => {
- click_release(ClickEvent(event) { release = true });
- });
-
- scroll_event.connect((event) => {
- scroll(ScrollEvent(event));
- });
-
- motion_notify_event.connect((event) => {
- motion(MotionEvent(event));
- });
- }
-}
-
-public struct MotionEvent {
- uint time;
- double x;
- double y;
- Gdk.ModifierType modifier;
-
- public MotionEvent(Gdk.EventMotion event) {
- this.time = event.time;
- this.x = event.x;
- this.y = event.y;
- this.modifier = event.state;
- }
-}
-}
diff --git a/core/src/widget/icon.vala b/core/src/widget/icon.vala
deleted file mode 100644
index 4f1c7f1..0000000
--- a/core/src/widget/icon.vala
+++ /dev/null
@@ -1,107 +0,0 @@
-namespace Astal {
-public Gtk.IconInfo? lookup_icon(string icon) {
- var theme = Gtk.IconTheme.get_default();
- return theme.lookup_icon(icon, 16, Gtk.IconLookupFlags.USE_BUILTIN);
-}
-
-public class Icon : Gtk.Image {
- private IconType type = IconType.NAMED;
- private double size { get; set; default = 14; }
-
- public new Gdk.Pixbuf pixbuf { get; set; }
- public string icon { get; set; default = ""; }
- public GLib.Icon g_icon {get; set;}
-
- private async void display_icon() {
- switch(type) {
- case IconType.NAMED:
- icon_name = icon;
- pixel_size = (int)size;
- break;
- case IconType.FILE:
- try {
- var file = File.new_for_path(icon);
- var stream = yield file.read_async();
- var pb = yield new Gdk.Pixbuf.from_stream_at_scale_async(
- stream,
- (int)size * scale_factor,
- (int)size * scale_factor,
- true,
- null
- );
- var cs = Gdk.cairo_surface_create_from_pixbuf(pb, 0, this.get_window());
- set_from_surface(cs);
- } catch (Error err) {
- printerr(err.message);
- }
- break;
- case IconType.PIXBUF:
- var pb_scaled = pixbuf.scale_simple(
- (int)size * scale_factor,
- (int)size * scale_factor,
- Gdk.InterpType.BILINEAR
- );
- if (pb_scaled != null) {
- var cs = Gdk.cairo_surface_create_from_pixbuf(pb_scaled, 0, this.get_window());
- set_from_surface(cs);
- }
- break;
- case IconType.GICON:
- pixel_size = (int)size;
- gicon = g_icon;
- break;
-
- }
- }
-
- static construct {
- set_css_name("icon");
- }
-
- construct {
- notify["icon"].connect(() => {
- if(FileUtils.test(icon, GLib.FileTest.EXISTS))
- type = IconType.FILE;
- else if (lookup_icon(icon) != null)
- type = IconType.NAMED;
- else {
- type = IconType.NAMED;
- warning("cannot assign %s as icon, "+
- "it is not a file nor a named icon", icon);
- }
- display_icon.begin();
- });
-
- notify["pixbuf"].connect(() => {
- type = IconType.PIXBUF;
- display_icon.begin();
- });
-
- notify["g-icon"].connect(() => {
- type = IconType.GICON;
- display_icon.begin();
- });
-
- size_allocate.connect(() => {
- size = get_style_context()
- .get_property("font-size", Gtk.StateFlags.NORMAL).get_double();
-
- display_icon.begin();
- });
-
- get_style_context().changed.connect(() => {
- size = get_style_context()
- .get_property("font-size", Gtk.StateFlags.NORMAL).get_double();
-
- display_icon.begin();
- });
- }
-}
-
-private enum IconType {
- NAMED,
- FILE,
- PIXBUF,
- GICON,
-}
-}
diff --git a/core/src/widget/label.vala b/core/src/widget/label.vala
deleted file mode 100644
index 4063b6f..0000000
--- a/core/src/widget/label.vala
+++ /dev/null
@@ -1,18 +0,0 @@
-using Pango;
-
-public class Astal.Label : Gtk.Label {
- public bool truncate {
- set { ellipsize = value ? EllipsizeMode.END : EllipsizeMode.NONE; }
- get { return ellipsize == EllipsizeMode.END; }
- }
-
- public new bool justify_fill {
- set { justify = value ? Gtk.Justification.FILL : Gtk.Justification.LEFT; }
- get { return justify == Gtk.Justification.FILL; }
- }
-
- construct {
- notify["ellipsize"].connect(() => notify_property("truncate"));
- notify["justify"].connect(() => notify_property("justify_fill"));
- }
-}
diff --git a/core/src/widget/levelbar.vala b/core/src/widget/levelbar.vala
deleted file mode 100644
index 1db2cc7..0000000
--- a/core/src/widget/levelbar.vala
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace Astal {
-public class LevelBar : Gtk.LevelBar {
- [CCode (notify = false)]
- public bool vertical {
- get { return orientation == Gtk.Orientation.VERTICAL; }
- set { orientation = value ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; }
- }
-
- construct {
- notify["orientation"].connect(() => {
- notify_property("vertical");
- });
- }
-}
-}
diff --git a/core/src/widget/overlay.vala b/core/src/widget/overlay.vala
deleted file mode 100644
index 207aaa7..0000000
--- a/core/src/widget/overlay.vala
+++ /dev/null
@@ -1,59 +0,0 @@
-namespace Astal {
-public class Overlay : Gtk.Overlay {
- public bool pass_through { get; set; }
-
- public Gtk.Widget? overlay {
- get { return overlays.nth_data(0); }
- set {
- foreach (var ch in get_children()) {
- if (ch != child)
- remove(ch);
- }
-
- if (value != null)
- add_overlay(value);
- }
- }
-
- public List<weak Gtk.Widget> overlays {
- owned get { return get_children(); }
- set {
- foreach (var ch in get_children()) {
- if (ch != child)
- remove(ch);
- }
-
- foreach (var ch in value)
- add_overlay(ch);
- }
- }
-
- public new Gtk.Widget? child {
- get { return get_child(); }
- set {
- var ch = get_child();
- if (ch != null)
- remove(ch);
-
- if (value != null)
- add(value);
- }
- }
-
- construct {
- notify["pass-through"].connect(() => {
- update_pass_through();
- });
- }
-
- private void update_pass_through() {
- foreach (var child in get_children())
- set_overlay_pass_through(child, pass_through);
- }
-
- public new void add_overlay(Gtk.Widget widget) {
- base.add_overlay(widget);
- set_overlay_pass_through(widget, pass_through);
- }
-}
-}
diff --git a/core/src/widget/scrollable.vala b/core/src/widget/scrollable.vala
deleted file mode 100644
index 1a0e081..0000000
--- a/core/src/widget/scrollable.vala
+++ /dev/null
@@ -1,42 +0,0 @@
-namespace Astal {
-public class Scrollable : Gtk.ScrolledWindow {
- private Gtk.PolicyType _hscroll = Gtk.PolicyType.AUTOMATIC;
- private Gtk.PolicyType _vscroll = Gtk.PolicyType.AUTOMATIC;
-
- public Gtk.PolicyType hscroll {
- get { return _hscroll; }
- set {
- _hscroll = value;
- set_policy(value, vscroll);
- }
- }
-
- public Gtk.PolicyType vscroll {
- get { return _vscroll; }
- set {
- _vscroll = value;
- set_policy(hscroll, value);
- }
- }
-
- static construct {
- set_css_name("scrollable");
- }
-
- construct {
- if (hadjustment != null)
- hadjustment = new Gtk.Adjustment(0,0,0,0,0,0);
-
- if (vadjustment != null)
- vadjustment = new Gtk.Adjustment(0,0,0,0,0,0);
- }
-
- public new Gtk.Widget get_child() {
- var ch = base.get_child();
- if (ch is Gtk.Viewport) {
- return ch.get_child();
- }
- return ch;
- }
-}
-}
diff --git a/core/src/widget/slider.vala b/core/src/widget/slider.vala
deleted file mode 100644
index 16e6bd2..0000000
--- a/core/src/widget/slider.vala
+++ /dev/null
@@ -1,73 +0,0 @@
-namespace Astal {
-public class Slider : Gtk.Scale {
- [CCode (notify = false)]
- public bool vertical {
- get { return orientation == Gtk.Orientation.VERTICAL; }
- set { orientation = value ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; }
- }
-
- // emitted when the user drags the slider
- public signal void dragged ();
-
- construct {
- draw_value = false;
-
- if (adjustment == null)
- adjustment = new Gtk.Adjustment(0,0,0,0,0,0);
-
- if (max == 0 && min == 0) {
- max = 1;
- }
-
- if (step == 0) {
- step = 0.05;
- }
-
- notify["orientation"].connect(() => {
- notify_property("vertical");
- });
-
- button_press_event.connect(() => { dragging = true; });
- key_press_event.connect(() => { dragging = true; });
- button_release_event.connect(() => { dragging = false; });
- key_release_event.connect(() => { dragging = false; });
- scroll_event.connect((event) => {
- dragging = true;
- if (event.delta_y > 0)
- value -= step;
- else
- value += step;
- dragging = false;
- });
-
- value_changed.connect(() => {
- if (dragging)
- dragged();
- });
- }
-
- public bool dragging { get; private set; }
-
- public double value {
- get { return adjustment.value; }
- set { if (!dragging) adjustment.value = value; }
- }
-
- public double min {
- get { return adjustment.lower; }
- set { adjustment.lower = value; }
- }
-
- public double max {
- get { return adjustment.upper; }
- set { adjustment.upper = value; }
- }
-
- public double step {
- get { return adjustment.step_increment; }
- set { adjustment.step_increment = value; }
- }
-
- // TODO: marks
-}
-}
diff --git a/core/src/widget/stack.vala b/core/src/widget/stack.vala
deleted file mode 100644
index 02f9959..0000000
--- a/core/src/widget/stack.vala
+++ /dev/null
@@ -1,26 +0,0 @@
-public class Astal.Stack : Gtk.Stack {
- public string shown {
- get { return visible_child_name; }
- set { visible_child_name = value; }
- }
-
- public List<weak Gtk.Widget> children {
- set { _set_children(value); }
- owned get { return get_children(); }
- }
-
- private void _set_children(List<weak Gtk.Widget> arr) {
- foreach(var child in get_children()) {
- remove(child);
- }
-
- var i = 0;
- foreach(var child in arr) {
- if (child.name != null) {
- add_named(child, child.name);
- } else {
- add_named(child, (++i).to_string());
- }
- }
- }
-}
diff --git a/core/src/widget/widget.vala b/core/src/widget/widget.vala
deleted file mode 100644
index 2506bc8..0000000
--- a/core/src/widget/widget.vala
+++ /dev/null
@@ -1,157 +0,0 @@
-namespace Astal {
-private class Css {
- private static HashTable<Gtk.Widget, Gtk.CssProvider> _providers;
- public static HashTable<Gtk.Widget, Gtk.CssProvider> providers {
- get {
- if (_providers == null) {
- _providers = new HashTable<Gtk.Widget, Gtk.CssProvider>(
- (w) => (uint)w,
- (a, b) => a == b);
- }
-
- return _providers;
- }
- }
-}
-
-private void remove_provider(Gtk.Widget widget) {
- var providers = Css.providers;
-
- if (providers.contains(widget)) {
- var p = providers.get(widget);
- widget.get_style_context().remove_provider(p);
- providers.remove(widget);
- p.dispose();
- }
-}
-
-public void widget_set_css(Gtk.Widget widget, string css) {
- var providers = Css.providers;
-
- if (providers.contains(widget)) {
- remove_provider(widget);
- } else {
- widget.destroy.connect(() => {
- remove_provider(widget);
- });
- }
-
- var style = !css.contains("{") || !css.contains("}")
- ? "* { ".concat(css, "}") : css;
-
- var p = new Gtk.CssProvider();
- widget.get_style_context()
- .add_provider(p, Gtk.STYLE_PROVIDER_PRIORITY_USER);
-
- try {
- p.load_from_data(style, style.length);
- providers.set(widget, p);
- } catch (Error err) {
- warning(err.message);
- }
-}
-
-public string widget_get_css(Gtk.Widget widget) {
- var providers = Css.providers;
-
- if (providers.contains(widget))
- return providers.get(widget).to_string();
-
- return "";
-}
-
-public void widget_set_class_names(Gtk.Widget widget, string[] class_names) {
- foreach (var name in widget_get_class_names(widget))
- widget_toggle_class_name(widget, name, false);
-
- foreach (var name in class_names)
- widget_toggle_class_name(widget, name, true);
-}
-
-public List<weak string> widget_get_class_names(Gtk.Widget widget) {
- return widget.get_style_context().list_classes();
-}
-
-public void widget_toggle_class_name(
- Gtk.Widget widget,
- string class_name,
- bool condition = true
-) {
- var c = widget.get_style_context();
- if (condition)
- c.add_class(class_name);
- else
- c.remove_class(class_name);
-}
-
-private class Cursor {
- private static HashTable<Gtk.Widget, string> _cursors;
- public static HashTable<Gtk.Widget, string> cursors {
- get {
- if (_cursors == null) {
- _cursors = new HashTable<Gtk.Widget, string>(
- (w) => (uint)w,
- (a, b) => a == b);
- }
- return _cursors;
- }
- }
-}
-
-private void widget_setup_cursor(Gtk.Widget widget) {
- widget.add_events(Gdk.EventMask.ENTER_NOTIFY_MASK);
- widget.add_events(Gdk.EventMask.LEAVE_NOTIFY_MASK);
- widget.enter_notify_event.connect(() => {
- widget.get_window().set_cursor(
- new Gdk.Cursor.from_name(
- Gdk.Display.get_default(),
- Cursor.cursors.get(widget)));
- return false;
- });
- widget.leave_notify_event.connect(() => {
- widget.get_window().set_cursor(
- new Gdk.Cursor.from_name(
- Gdk.Display.get_default(),
- "default"));
- return false;
- });
- widget.destroy.connect(() => {
- if (Cursor.cursors.contains(widget))
- Cursor.cursors.remove(widget);
- });
-}
-
-public void widget_set_cursor(Gtk.Widget widget, string cursor) {
- if (!Cursor.cursors.contains(widget))
- widget_setup_cursor(widget);
-
- Cursor.cursors.set(widget, cursor);
-}
-
-public string widget_get_cursor(Gtk.Widget widget) {
- return Cursor.cursors.get(widget);
-}
-
-private class ClickThrough {
- private static HashTable<Gtk.Widget, bool> _click_through;
- public static HashTable<Gtk.Widget, bool> click_through {
- get {
- if (_click_through == null) {
- _click_through = new HashTable<Gtk.Widget, bool>(
- (w) => (uint)w,
- (a, b) => a == b);
- }
- return _click_through;
- }
- }
-}
-
-public void widget_set_click_through(Gtk.Widget widget, bool click_through) {
- ClickThrough.click_through.set(widget, click_through);
- widget.input_shape_combine_region(click_through ? new Cairo.Region() : null);
-}
-
-public bool widget_get_click_through(Gtk.Widget widget) {
- return ClickThrough.click_through.get(widget);
-}
-}
diff --git a/core/src/widget/window.vala b/core/src/widget/window.vala
deleted file mode 100644
index f1a377f..0000000
--- a/core/src/widget/window.vala
+++ /dev/null
@@ -1,255 +0,0 @@
-using GtkLayerShell;
-
-namespace Astal {
-public enum WindowAnchor {
- NONE = 0,
- TOP = 1,
- RIGHT = 2,
- LEFT = 4,
- BOTTOM = 8,
-}
-
-public enum Exclusivity {
- NORMAL,
- EXCLUSIVE,
- IGNORE,
-}
-
-public enum Layer {
- BACKGROUND = 0, // GtkLayerShell.Layer.BACKGROUND
- BOTTOM = 1, // GtkLayerShell.Layer.BOTTOM
- TOP = 2, // GtkLayerShell.Layer.TOP
- OVERLAY = 3, // GtkLayerShell.Layer.OVERLAY
-}
-
-public enum Keymode {
- NONE = 0, // GtkLayerShell.KeyboardMode.NONE
- ON_DEMAND = 1, // GtkLayerShell.KeyboardMode.ON_DEMAND
- EXCLUSIVE = 2, // GtkLayerShell.KeyboardMode.EXCLUSIVE
-}
-
-public class Window : Gtk.Window {
- private static bool check(string action) {
- if (!is_supported()) {
- critical(@"can not $action on window: layer shell not supported");
- print("tip: running from an xwayland terminal can cause this, for example VsCode");
- return true;
- }
- return false;
- }
-
- private InhibitManager? inhibit_manager;
- private Inhibitor? inhibitor;
-
- construct {
- if (check("initialize layer shell"))
- return;
-
- height_request = 1;
- width_request = 1;
- init_for_window(this);
- inhibit_manager = InhibitManager.get_default();
- }
-
- public bool inhibit {
- set {
- if (inhibit_manager == null) {
- return;
- }
- if (value && inhibitor == null) {
- inhibitor = inhibit_manager.inhibit(this);
- }
- else if (!value && inhibitor != null) {
- inhibitor = null;
- }
- }
- get {
- return inhibitor != null;
- }
- }
-
- public override void show() {
- base.show();
- if(inhibit) {
- inhibitor = inhibit_manager.inhibit(this);
- }
- }
-
- public string namespace {
- get { return get_namespace(this); }
- set { set_namespace(this, value); }
- }
-
- public int anchor {
- set {
- if (check("set anchor"))
- return;
-
- set_anchor(this, Edge.TOP, WindowAnchor.TOP in value);
- set_anchor(this, Edge.BOTTOM, WindowAnchor.BOTTOM in value);
- set_anchor(this, Edge.LEFT, WindowAnchor.LEFT in value);
- set_anchor(this, Edge.RIGHT, WindowAnchor.RIGHT in value);
- }
- get {
- var a = WindowAnchor.NONE;
- if (get_anchor(this, Edge.TOP))
- a = a | WindowAnchor.TOP;
-
- if (get_anchor(this, Edge.RIGHT))
- a = a | WindowAnchor.RIGHT;
-
- if (get_anchor(this, Edge.LEFT))
- a = a | WindowAnchor.LEFT;
-
- if (get_anchor(this, Edge.BOTTOM))
- a = a | WindowAnchor.BOTTOM;
-
- return a;
- }
- }
-
- public Exclusivity exclusivity {
- set {
- if (check("set exclusivity"))
- return;
-
- switch (value) {
- case Exclusivity.NORMAL:
- set_exclusive_zone(this, 0);
- break;
- case Exclusivity.EXCLUSIVE:
- auto_exclusive_zone_enable(this);
- break;
- case Exclusivity.IGNORE:
- set_exclusive_zone(this, -1);
- break;
- }
- }
- get {
- if (auto_exclusive_zone_is_enabled(this))
- return Exclusivity.EXCLUSIVE;
-
- if (get_exclusive_zone(this) == -1)
- return Exclusivity.IGNORE;
-
- return Exclusivity.NORMAL;
- }
- }
-
- public Layer layer {
- get { return (Layer)get_layer(this); }
- set {
- if (check("set layer"))
- return;
-
- set_layer(this, (GtkLayerShell.Layer)value);
- }
- }
-
- public Keymode keymode {
- get { return (Keymode)get_keyboard_mode(this); }
- set {
- if (check("set keymode"))
- return;
-
- set_keyboard_mode(this, (GtkLayerShell.KeyboardMode)value);
- }
- }
-
- public Gdk.Monitor gdkmonitor {
- get { return get_monitor(this); }
- set {
- if (check("set gdkmonitor"))
- return;
-
- set_monitor (this, value);
- }
- }
-
- public new int margin_top {
- get { return GtkLayerShell.get_margin(this, Edge.TOP); }
- set {
- if (check("set margin_top"))
- return;
-
- GtkLayerShell.set_margin(this, Edge.TOP, value);
- }
- }
-
- public new int margin_bottom {
- get { return GtkLayerShell.get_margin(this, Edge.BOTTOM); }
- set {
- if (check("set margin_bottom"))
- return;
-
- GtkLayerShell.set_margin(this, Edge.BOTTOM, value);
- }
- }
-
- public new int margin_left {
- get { return GtkLayerShell.get_margin(this, Edge.LEFT); }
- set {
- if (check("set margin_left"))
- return;
-
- GtkLayerShell.set_margin(this, Edge.LEFT, value);
- }
- }
-
- public new int margin_right {
- get { return GtkLayerShell.get_margin(this, Edge.RIGHT); }
- set {
- if (check("set margin_right"))
- return;
-
- GtkLayerShell.set_margin(this, Edge.RIGHT, value);
- }
- }
-
- public new int margin {
- set {
- if (check("set margin"))
- return;
-
- margin_top = value;
- margin_right = value;
- margin_bottom = value;
- margin_left = value;
- }
- }
-
- /**
- * CAUTION: the id might not be the same mapped by the compositor
- * to reset and let the compositor map it pass a negative number
- */
- public int monitor {
- set {
- if (check("set monitor"))
- return;
-
- if (value < 0)
- set_monitor(this, (Gdk.Monitor)null);
-
- var m = Gdk.Display.get_default().get_monitor(value);
- set_monitor(this, m);
- }
- get {
- var m = get_monitor(this);
- var d = Gdk.Display.get_default();
- for (var i = 0; i < d.get_n_monitors(); ++i) {
- if (m == d.get_monitor(i))
- return i;
- }
-
- return -1;
- }
- }
-}
-
-/**
- * CAUTION: the id might not be the same mapped by the compositor
- */
-public uint get_num_monitors() {
- return Gdk.Display.get_default().get_n_monitors();
-}
-}
diff --git a/core/version b/core/version
deleted file mode 100644
index 6e8bf73..0000000
--- a/core/version
+++ /dev/null
@@ -1 +0,0 @@
-0.1.0