From a8412b98f23ebf0a6678f269a672e3aa84ce4b75 Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 08:26:44 -0300 Subject: [PATCH 01/17] Adds Types to BrsDoc comments on public functions --- package-lock.json | 559 +++++++---------------------------------- package.json | 2 +- src/source/promises.bs | 92 +++++-- 3 files changed, 160 insertions(+), 493 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2dfe957..4754701 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@types/fs-extra": "^11.0.1", "@types/node": "^20.6.0", - "brighterscript": "^0.65.5", + "brighterscript": "^0.69.4", "dotenv": "^16.3.1", "fs-extra": "^11.1.1", "roku-deploy": "^3.10.3", @@ -161,10 +161,11 @@ "dev": true }, "node_modules/@rokucommunity/logger": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.9.tgz", - "integrity": "sha512-j4DK7dF2klMhoclJZ6P7h1bT4bMVt/ynfCi3GSMozXld0M1HbpRyY3TCxu6dnxPl16l6PtIosNHELjQxKzFp6g==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.10.tgz", + "integrity": "sha512-cKSFv78RqH1fZ5cKIsgORr0iaXavTcVb9QQS86dThTbMn1i28rKtP42K9RPHqHRFKicZRRQj6zOjrUsL45yPxQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "date-fns": "^2.30.0", @@ -492,12 +493,6 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "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-flat-polyfill": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", @@ -605,41 +600,48 @@ } }, "node_modules/brighterscript": { - "version": "0.65.5", - "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.65.5.tgz", - "integrity": "sha512-xDkWIZhjTLhp6dVZ6lX7zWRyNvjdiAwZncJRnErSbqRhteNJFL7ic2UDJew9zCOYTQDrG7B85lpPpXc/1JlV+Q==", + "version": "0.69.4", + "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.4.tgz", + "integrity": "sha512-6bBkdd14/KKGedtUWcjUZbDv3urCOlELgf8E5+MBcK6qwsX0f00XjLTOZTOV2blYhEOmLe1+KXi0yglwfJ5mwA==", "dev": true, + "license": "MIT", "dependencies": { "@rokucommunity/bslib": "^0.1.1", + "@rokucommunity/logger": "^0.3.10", "@xml-tools/parser": "^1.0.7", "array-flat-polyfill": "^1.0.1", "chalk": "^2.4.2", "chevrotain": "^7.0.1", - "chokidar": "^3.5.1", + "chokidar": "^3.6.0", "clear": "^0.1.0", - "coveralls-next": "^4.2.0", "cross-platform-clear-console": "^2.3.0", "debounce-promise": "^3.1.0", "eventemitter3": "^4.0.0", "fast-glob": "^3.2.12", "file-url": "^3.0.0", "fs-extra": "^8.1.0", + "ignore": "^5.3.1", "jsonc-parser": "^2.3.0", + "lodash.isequal": "^4.5.0", "long": "^3.2.0", "luxon": "^2.5.2", + "micromatch": "^4.0.4", "minimatch": "^3.0.4", "moment": "^2.23.0", "p-settle": "^2.1.0", "parse-ms": "^2.1.0", "readline": "^1.3.0", "require-relative": "^0.8.7", - "roku-deploy": "^3.10.3", + "roku-deploy": "^3.12.4", + "safe-json-stringify": "^1.2.0", "serialize-error": "^7.0.1", "source-map": "^0.7.4", - "vscode-languageserver": "7.0.0", - "vscode-languageserver-protocol": "3.16.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^2.1.1", + "thenby": "^1.3.4", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.0.8", "xml2js": "^0.5.0", "yargs": "^16.2.0" }, @@ -786,25 +788,6 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/coveralls-next": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/coveralls-next/-/coveralls-next-4.2.0.tgz", - "integrity": "sha512-zg41a/4QDSASPtlV6gp+6owoU43U5CguxuPZR3nPZ26M5ZYdEK3MdUe7HwE+AnCZPkucudfhqqJZehCNkz2rYg==", - "dev": true, - "dependencies": { - "form-data": "4.0.0", - "js-yaml": "4.1.0", - "lcov-parse": "1.0.0", - "log-driver": "1.2.7", - "minimist": "1.2.7" - }, - "bin": { - "coveralls": "bin/coveralls.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -1122,20 +1105,6 @@ "node": "*" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -1469,18 +1438,6 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "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/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -1541,15 +1498,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", - "dev": true, - "bin": { - "lcov-parse": "bin/cli.js" - } - }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -1572,15 +1520,6 @@ "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", "dev": true }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true, - "engines": { - "node": ">=0.8.6" - } - }, "node_modules/long": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", @@ -1669,15 +1608,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -2185,84 +2115,6 @@ "roku-debug": "dist/cli.js" } }, - "node_modules/roku-debug/node_modules/brighterscript": { - "version": "0.69.3", - "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.3.tgz", - "integrity": "sha512-o0GmdYI41CihI3nCD5o/ndZpFLa1HuL793trJVCVijEQZSRjr6NjtvdXSlq9QNzvWKb9t0W1ZyA0dyD4Q5k3bw==", - "dev": true, - "dependencies": { - "@rokucommunity/bslib": "^0.1.1", - "@rokucommunity/logger": "^0.3.9", - "@xml-tools/parser": "^1.0.7", - "array-flat-polyfill": "^1.0.1", - "chalk": "^2.4.2", - "chevrotain": "^7.0.1", - "chokidar": "^3.6.0", - "clear": "^0.1.0", - "cross-platform-clear-console": "^2.3.0", - "debounce-promise": "^3.1.0", - "eventemitter3": "^4.0.0", - "fast-glob": "^3.2.12", - "file-url": "^3.0.0", - "fs-extra": "^8.1.0", - "ignore": "^5.3.1", - "jsonc-parser": "^2.3.0", - "lodash.isequal": "^4.5.0", - "long": "^3.2.0", - "luxon": "^2.5.2", - "micromatch": "^4.0.4", - "minimatch": "^3.0.4", - "moment": "^2.23.0", - "p-settle": "^2.1.0", - "parse-ms": "^2.1.0", - "readline": "^1.3.0", - "require-relative": "^0.8.7", - "roku-deploy": "^3.12.4", - "safe-json-stringify": "^1.2.0", - "serialize-error": "^7.0.1", - "source-map": "^0.7.4", - "thenby": "^1.3.4", - "vscode-languageserver": "^9.0.1", - "vscode-languageserver-protocol": "^3.17.5", - "vscode-languageserver-textdocument": "^1.0.11", - "vscode-languageserver-types": "^3.17.5", - "vscode-uri": "^3.0.8", - "xml2js": "^0.5.0", - "yargs": "^16.2.0" - }, - "bin": { - "bsc": "dist/cli.js" - } - }, - "node_modules/roku-debug/node_modules/brighterscript/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/roku-debug/node_modules/brighterscript/node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/roku-debug/node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -2334,49 +2186,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/roku-debug/node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/roku-debug/node_modules/vscode-languageserver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", - "dev": true, - "dependencies": { - "vscode-languageserver-protocol": "3.17.5" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/roku-debug/node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "dev": true, - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "node_modules/roku-debug/node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true - }, - "node_modules/roku-debug/node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true - }, "node_modules/roku-deploy": { "version": "3.12.4", "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.12.4.tgz", @@ -2444,15 +2253,6 @@ "rooibos": "dist/cli.js" } }, - "node_modules/rooibos-roku/node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/rooibos-roku/node_modules/vscode-languageserver": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz", @@ -2465,22 +2265,6 @@ "installServerIntoExtension": "bin/installServerIntoExtension" } }, - "node_modules/rooibos-roku/node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "dev": true, - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "node_modules/rooibos-roku/node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2885,34 +2669,37 @@ "dev": true }, "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0 || >=10.0.0" + "node": ">=14.0.0" } }, "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", "dev": true, + "license": "MIT", "dependencies": { - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "dev": true, + "license": "MIT", "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, "node_modules/vscode-languageserver-textdocument": { @@ -2922,16 +2709,18 @@ "dev": true }, "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", - "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -3171,9 +2960,9 @@ "dev": true }, "@rokucommunity/logger": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.9.tgz", - "integrity": "sha512-j4DK7dF2klMhoclJZ6P7h1bT4bMVt/ynfCi3GSMozXld0M1HbpRyY3TCxu6dnxPl16l6PtIosNHELjQxKzFp6g==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.10.tgz", + "integrity": "sha512-cKSFv78RqH1fZ5cKIsgORr0iaXavTcVb9QQS86dThTbMn1i28rKtP42K9RPHqHRFKicZRRQj6zOjrUsL45yPxQ==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -3443,12 +3232,6 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "array-flat-polyfill": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", @@ -3541,41 +3324,47 @@ } }, "brighterscript": { - "version": "0.65.5", - "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.65.5.tgz", - "integrity": "sha512-xDkWIZhjTLhp6dVZ6lX7zWRyNvjdiAwZncJRnErSbqRhteNJFL7ic2UDJew9zCOYTQDrG7B85lpPpXc/1JlV+Q==", + "version": "0.69.4", + "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.4.tgz", + "integrity": "sha512-6bBkdd14/KKGedtUWcjUZbDv3urCOlELgf8E5+MBcK6qwsX0f00XjLTOZTOV2blYhEOmLe1+KXi0yglwfJ5mwA==", "dev": true, "requires": { "@rokucommunity/bslib": "^0.1.1", + "@rokucommunity/logger": "^0.3.10", "@xml-tools/parser": "^1.0.7", "array-flat-polyfill": "^1.0.1", "chalk": "^2.4.2", "chevrotain": "^7.0.1", - "chokidar": "^3.5.1", + "chokidar": "^3.6.0", "clear": "^0.1.0", - "coveralls-next": "^4.2.0", "cross-platform-clear-console": "^2.3.0", "debounce-promise": "^3.1.0", "eventemitter3": "^4.0.0", "fast-glob": "^3.2.12", "file-url": "^3.0.0", "fs-extra": "^8.1.0", + "ignore": "^5.3.1", "jsonc-parser": "^2.3.0", + "lodash.isequal": "^4.5.0", "long": "^3.2.0", "luxon": "^2.5.2", + "micromatch": "^4.0.4", "minimatch": "^3.0.4", "moment": "^2.23.0", "p-settle": "^2.1.0", "parse-ms": "^2.1.0", "readline": "^1.3.0", "require-relative": "^0.8.7", - "roku-deploy": "^3.10.3", + "roku-deploy": "^3.12.4", + "safe-json-stringify": "^1.2.0", "serialize-error": "^7.0.1", "source-map": "^0.7.4", - "vscode-languageserver": "7.0.0", - "vscode-languageserver-protocol": "3.16.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^2.1.1", + "thenby": "^1.3.4", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.0.8", "xml2js": "^0.5.0", "yargs": "^16.2.0" }, @@ -3698,19 +3487,6 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "coveralls-next": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/coveralls-next/-/coveralls-next-4.2.0.tgz", - "integrity": "sha512-zg41a/4QDSASPtlV6gp+6owoU43U5CguxuPZR3nPZ26M5ZYdEK3MdUe7HwE+AnCZPkucudfhqqJZehCNkz2rYg==", - "dev": true, - "requires": { - "form-data": "4.0.0", - "js-yaml": "4.1.0", - "lcov-parse": "1.0.0", - "log-driver": "1.2.7", - "minimist": "1.2.7" - } - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -3956,17 +3732,6 @@ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -4216,15 +3981,6 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -4282,12 +4038,6 @@ "setimmediate": "^1.0.5" } }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", - "dev": true - }, "lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -4309,12 +4059,6 @@ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "dev": true }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, "long": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", @@ -4379,12 +4123,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -4774,74 +4512,6 @@ "yargs": "^16.2.0" }, "dependencies": { - "brighterscript": { - "version": "0.69.3", - "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.3.tgz", - "integrity": "sha512-o0GmdYI41CihI3nCD5o/ndZpFLa1HuL793trJVCVijEQZSRjr6NjtvdXSlq9QNzvWKb9t0W1ZyA0dyD4Q5k3bw==", - "dev": true, - "requires": { - "@rokucommunity/bslib": "^0.1.1", - "@rokucommunity/logger": "^0.3.9", - "@xml-tools/parser": "^1.0.7", - "array-flat-polyfill": "^1.0.1", - "chalk": "^2.4.2", - "chevrotain": "^7.0.1", - "chokidar": "^3.6.0", - "clear": "^0.1.0", - "cross-platform-clear-console": "^2.3.0", - "debounce-promise": "^3.1.0", - "eventemitter3": "^4.0.0", - "fast-glob": "^3.2.12", - "file-url": "^3.0.0", - "fs-extra": "^8.1.0", - "ignore": "^5.3.1", - "jsonc-parser": "^2.3.0", - "lodash.isequal": "^4.5.0", - "long": "^3.2.0", - "luxon": "^2.5.2", - "micromatch": "^4.0.4", - "minimatch": "^3.0.4", - "moment": "^2.23.0", - "p-settle": "^2.1.0", - "parse-ms": "^2.1.0", - "readline": "^1.3.0", - "require-relative": "^0.8.7", - "roku-deploy": "^3.12.4", - "safe-json-stringify": "^1.2.0", - "serialize-error": "^7.0.1", - "source-map": "^0.7.4", - "thenby": "^1.3.4", - "vscode-languageserver": "^9.0.1", - "vscode-languageserver-protocol": "^3.17.5", - "vscode-languageserver-textdocument": "^1.0.11", - "vscode-languageserver-types": "^3.17.5", - "vscode-uri": "^3.0.8", - "xml2js": "^0.5.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "requires": { - "type-fest": "^0.13.1" - } - } - } - }, "dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -4893,43 +4563,6 @@ "dev": true } } - }, - "vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "dev": true - }, - "vscode-languageserver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", - "dev": true, - "requires": { - "vscode-languageserver-protocol": "3.17.5" - } - }, - "vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "dev": true, - "requires": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true - }, - "vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true } } }, @@ -4992,12 +4625,6 @@ "yargs": "^16.2.0" }, "dependencies": { - "vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "dev": true - }, "vscode-languageserver": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz", @@ -5006,22 +4633,6 @@ "requires": { "vscode-languageserver-protocol": "^3.15.3" } - }, - "vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "dev": true, - "requires": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true } } }, @@ -5317,28 +4928,28 @@ } }, "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", "dev": true }, "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", "dev": true, "requires": { - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.5" } }, "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "dev": true, "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, "vscode-languageserver-textdocument": { @@ -5348,15 +4959,15 @@ "dev": true }, "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", "dev": true }, "vscode-uri": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", - "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index 087bf0b..b18ef58 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "devDependencies": { "@types/fs-extra": "^11.0.1", "@types/node": "^20.6.0", - "brighterscript": "^0.65.5", + "brighterscript": "^0.69.4", "dotenv": "^16.3.1", "fs-extra": "^11.1.1", "roku-deploy": "^3.10.3", diff --git a/src/source/promises.bs b/src/source/promises.bs index b2667cb..bcf0757 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -3,6 +3,7 @@ namespace promises ' Create a new promise + ' @return {roSGNodePromise } function create() as dynamic 'create a unique ID for this promise id = "promise-" + promises.internal.createUuid() @@ -24,16 +25,30 @@ namespace promises end function ' TODO rename this to `then` once BrighterScript supports using keywords as namespaced function names + ' + ' @param {roSGNodePromise} promise + ' @param {Function} [callback=promises.internal.defaultThenCallback] + ' @param {object} [context="__INVALID__"] + ' @return {roSGNodePromise} function onThen(promise as dynamic, callback = promises.internal.defaultThenCallback as function, context = "__INVALID__" as object) as dynamic return promises.internal.on("then", promise, callback, context) end function ' TODO rename this to `catch` once BrighterScript supports using keywords as namespaced function names + ' + ' @param {roSGNodePromise} promise + ' @param {Function} [callback=promises.internal.defaultThenCallback] + ' @param {object} [context="__INVALID__"] + ' @return {roSGNodePromise} function onCatch(promise as dynamic, callback = promises.internal.defaultCatchCallback as function, context = "__INVALID__" as object) as dynamic return promises.internal.on("catch", promise, callback, context) end function ' TODO rename this to `finally` once BrighterScript supports using keywords as namespaced function names + ' @param {roSGNodePromise} promise + ' @param {Function} [callback=promises.internal.defaultThenCallback] + ' @param {object} [context="__INVALID__"] + ' @return {roSGNodePromise} function onFinally(promise as dynamic, callback = promises.internal.defaultFinallyCallback as function, context = "__INVALID__" as object) as dynamic return promises.internal.on("finally", promise, callback, context) end function @@ -53,6 +68,9 @@ namespace promises ' Takes an array of promises as input and returns a single Promise. ' This returned promise fulfills when all of the input's promises fulfill (including when an empty array is passed), with an array of the fulfillment values. ' It rejects when any of the input's promises rejects, with this first rejection reason. + ' + ' @param {roSGNodePromise[]} promiseArray + ' @return {roSGNodePromise} function all(promiseArray as dynamic) as dynamic ' Create a deferred to be resolved later deferred = promises.create() @@ -89,7 +107,7 @@ namespace promises promises.resolve(context.state.results, context.state.deferred) end if end if - end sub, { state: state, index: i }) + end sub, {state: state, index: i}) promises.onCatch(promise, sub(error as dynamic, state as dynamic) ' This shouldn't happen but if we somehow get a rejected promise after @@ -137,6 +155,9 @@ namespace promises ' Takes an array of promises as input and returns a single Promise. ' This returned promise fulfills when all of the input's promises settle (including when an empty array is passed), ' with an array of objects that describe the outcome of each promise. + ' + ' @param {roSGNodePromise[]} promiseArray + ' @return {roSGNodePromise} function allSettled(promiseArray as dynamic) as dynamic ' Create a deferred to be resolved later deferred = promises.create() @@ -163,7 +184,7 @@ namespace promises if not context.state.done then ' Always assign the result to the origin index so results are in the same ' order as the supplied promiseArray - context.state.results[context.index] = { status: promises.PromiseState.resolved, value: result } + context.state.results[context.index] = {status: promises.PromiseState.resolved, value: result} context.state.resolvedCount++ if context.state.resolvedCount = context.state.total then @@ -173,7 +194,7 @@ namespace promises promises.resolve(context.state.results, context.state.deferred) end if end if - end sub, { state: state, index: i }) + end sub, {state: state, index: i}) promises.onCatch(promise, sub(error as dynamic, context as dynamic) ' Do not process any promises that come in late @@ -181,7 +202,7 @@ namespace promises if not context.state.done then ' Always assign the result to the origin index so results are in the same ' order as the supplied promiseArray - context.state.results[context.index] = { status: promises.PromiseState.rejected, reason: error } + context.state.results[context.index] = {status: promises.PromiseState.rejected, reason: error} context.state.resolvedCount++ if context.state.resolvedCount = context.state.total then @@ -191,11 +212,11 @@ namespace promises promises.resolve(context.state.results, context.state.deferred) end if end if - end sub, { state: state, index: i }) + end sub, {state: state, index: i}) else ' The value in the promise array is not a promise. ' Immediately set the result. - state.results[i] = { status: promises.PromiseState.resolved, value: promise } + state.results[i] = {status: promises.PromiseState.resolved, value: promise} state.resolvedCount++ if state.resolvedCount = state.total then @@ -226,6 +247,9 @@ namespace promises ' Takes an array of promises as input and returns a single Promise. ' This returned promise fulfills when any of the input's promises fulfills, with this first fulfillment value. ' It rejects when all of the input's promises reject (including when an empty array is passed), with an AggregateError containing an array of rejection reasons. + ' + ' @param {roSGNodePromise[]} promiseArray + ' @return {roSGNodePromise} function any(promiseArray as dynamic) as dynamic ' Create a deferred to be resolved later deferred = promises.create() @@ -274,13 +298,13 @@ namespace promises ' Resolve the deferred and make the state as complete context.state.done = true try - throw { message: "All promises were rejected", errors: context.state.errors } + throw {message: "All promises were rejected", errors: context.state.errors} catch e promises.reject(e, context.state.deferred) end try end if end if - end sub, { state: state, index: i }) + end sub, {state: state, index: i}) end if else ' The value in the promise array is not a promise. @@ -294,7 +318,7 @@ namespace promises else ' We can't resolve with a promise if there are no promises to resolve try - throw { message: "All promises were rejected", errors: [] } + throw {message: "All promises were rejected", errors: []} catch e promises.reject(e, deferred) end try @@ -305,6 +329,9 @@ namespace promises ' Takes an array of promises as input and returns a single Promise. ' This returned promise settles with the eventual state of the first promise that settles. + ' + ' @param {roSGNodePromise[]} promiseArray + ' @return {roSGNodePromise} function race(promiseArray as dynamic) as dynamic ' Create a deferred to be resolved later deferred = promises.create() @@ -362,7 +389,7 @@ namespace promises else ' We can't resolve with a promise if there are no promises to resolve try - throw { message: "All promises were rejected", errors: [] } + throw {message: "All promises were rejected", errors: []} catch e promises.reject(e, deferred) end try @@ -371,6 +398,10 @@ namespace promises return deferred end function + ' + ' @param {dynamic} result + ' @param {roSGNodePromise} [promise=invalid] + ' @return {roSGNodePromise} function resolve(result as dynamic, promise = invalid as dynamic) as object if not promises.isPromise(promise) then promise = promises.create() @@ -379,15 +410,19 @@ namespace promises ' console.trace("[promises.resolve]", promise.id) if type(result) = "roAssociativeArray" then promise.removeField("promiseResult") - promise.addFields({ promiseResult: result }) + promise.addFields({promiseResult: result}) else - promise.update({ promiseResult: result }, true) + promise.update({promiseResult: result}, true) end if promise.promiseState = promises.PromiseState.resolved end if return promise end function + ' + ' @param {dynamic} error + ' @param {roSGNodePromise} [promise=invalid] + ' @return {roSGNodePromise} function reject(error as dynamic, promise = invalid as dynamic) as object if not promises.isPromise(promise) then promise = promises.create() @@ -396,15 +431,19 @@ namespace promises ' console.trace("[promises.reject]", promise.id) if type(error) = "roAssociativeArray" then promise.removeField("promiseResult") - promise.addFields({ promiseResult: error }) + promise.addFields({promiseResult: error}) else - promise.update({ promiseResult: error }, true) + promise.update({promiseResult: error}, true) end if promise.promiseState = promises.PromiseState.rejected end if return promise end function + ' + ' + ' @param {roSGNodePromise} promise + ' @return {boolean} function isComplete(promise as object) as boolean if not promises.isPromise(promise) then return false state = promise.promiseState @@ -417,6 +456,9 @@ namespace promises ' - the SubType exactly equals "Promise" ' - the subtype ends with "_promise" case insensitive ' - the node has a field called "promiseState" + ' + ' @param {dynamic} promise + ' @return {boolean} function isPromise(promise as dynamic) as boolean if not type(promise) = "roSGNode" then return false @@ -450,7 +492,18 @@ namespace promises end for end sub + interface PromiseChain + function then(callback as function) as PromiseChain + function catch(callback as function) as PromiseChain + function finally(callback as function) as PromiseChain + function toPromise() as roSGNodePromise + end interface + 'Allows chaining multiple promise operations in a row in a clean syntax + ' + ' @param {roSGNodePromise} initialPromise + ' @param {object} [context="__INVALID__"] + ' @return {PromiseChain} function chain(initialPromise as object, context = "__INVALID__" as object) as object return { _lastPromise: initialPromise @@ -477,6 +530,9 @@ namespace promises end function ' Makes sure the value supplied is a promise + ' + ' @param {object} value + ' @return {roSGNodePromise} function ensurePromise(value as object) as object if promises.isPromise(value) then return value return promises.resolve(value) @@ -500,7 +556,7 @@ namespace promises.configuration globalNode = m.global if type(globalNode) = "roSGNode" then if enabled then - globalNode.update({ __promises__crashLoggingEnabled: enabled }, true) + globalNode.update({__promises__crashLoggingEnabled: enabled}, true) else globalNode.removeField("__promises__crashLoggingEnabled") end if @@ -553,7 +609,7 @@ namespace promises.internal 'run the notification nexttick to prevent stackoverflow due to cascading promises all resolving in sequence promises.internal.delay(sub(context) promises.internal.notifyListeners(context.event) - end sub, { event: event }) + end sub, {event: event}) end sub) storage = { @@ -586,7 +642,7 @@ namespace promises.internal if promiseState = promises.PromiseState.resolved or promiseState = promises.PromiseState.rejected then promises.internal.delay(sub (details as object) details.promise.promiseState = details.promiseState - end sub, { promise: promise, promiseState: promiseState }) + end sub, {promise: promise, promiseState: promiseState}) end if #if PROMISES_DEBUG print "[promises.watch]", newPromise.id, "is watching", promise.id, eventName @@ -833,7 +889,7 @@ namespace promises.internal ' @param {Float} [duration] - the amount of delay before invoking the callback sub delay(callback as function, context as dynamic, duration = 0.0001 as float) timer = createObject("roSGNode", "Timer") - timer.update({ duration: duration, repeat: false, id: "__delay_" + promises.internal.createUuid() }, true) + timer.update({duration: duration, repeat: false, id: "__delay_" + promises.internal.createUuid()}, true) m[timer.id] = { timer: timer From db0ad1324677c11c46ba7f73e5c0c1c16070e6cd Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:52:48 -0300 Subject: [PATCH 02/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index bcf0757..336e3ef 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -27,8 +27,8 @@ namespace promises ' TODO rename this to `then` once BrighterScript supports using keywords as namespaced function names ' ' @param {roSGNodePromise} promise - ' @param {Function} [callback=promises.internal.defaultThenCallback] - ' @param {object} [context="__INVALID__"] + ' @param {Function} [callback] - The function to be invoked when the promise resolves. This function takes a dynamic result as the first parameter and if a context was supplied a dynamic context as the second parameter. + ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} function onThen(promise as dynamic, callback = promises.internal.defaultThenCallback as function, context = "__INVALID__" as object) as dynamic return promises.internal.on("then", promise, callback, context) From 888731df50470a0421b2616cad97de29d60f27eb Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:52:55 -0300 Subject: [PATCH 03/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index 336e3ef..b18aa4c 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -37,8 +37,8 @@ namespace promises ' TODO rename this to `catch` once BrighterScript supports using keywords as namespaced function names ' ' @param {roSGNodePromise} promise - ' @param {Function} [callback=promises.internal.defaultThenCallback] - ' @param {object} [context="__INVALID__"] + ' @param {Function} [callback] - The function to be invoked when the promise rejects. This function takes a dynamic error as the first parameter and if a context was supplied a dynamic context as the second parameter. + ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} function onCatch(promise as dynamic, callback = promises.internal.defaultCatchCallback as function, context = "__INVALID__" as object) as dynamic return promises.internal.on("catch", promise, callback, context) From 1038928cecf5c91540fa78c24129f3dc34d4d450 Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:01 -0300 Subject: [PATCH 04/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index b18aa4c..9824f4b 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -46,8 +46,9 @@ namespace promises ' TODO rename this to `finally` once BrighterScript supports using keywords as namespaced function names ' @param {roSGNodePromise} promise - ' @param {Function} [callback=promises.internal.defaultThenCallback] - ' @param {object} [context="__INVALID__"] +```suggestion + ' @param {Function} [callback] - The function to be invoked when the promise resolves or rejects. If a context was supplied this function takes a dynamic context as the first parameter. + ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} function onFinally(promise as dynamic, callback = promises.internal.defaultFinallyCallback as function, context = "__INVALID__" as object) as dynamic return promises.internal.on("finally", promise, callback, context) From 144d54e2f63e719cbd60f69756a0ef0b1fa410ba Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:08 -0300 Subject: [PATCH 05/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/source/promises.bs b/src/source/promises.bs index 9824f4b..f586a70 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -31,6 +31,7 @@ namespace promises ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} function onThen(promise as dynamic, callback = promises.internal.defaultThenCallback as function, context = "__INVALID__" as object) as dynamic + ' TODO rename this to `then` once BrighterScript supports using keywords as namespaced function names return promises.internal.on("then", promise, callback, context) end function From 46ab2b07479fa69136f6e107427c27a67482b0b8 Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:14 -0300 Subject: [PATCH 06/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index f586a70..6983322 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -24,7 +24,7 @@ namespace promises return node end function - ' TODO rename this to `then` once BrighterScript supports using keywords as namespaced function names + ' Used to register a callback on promise resolution ' ' @param {roSGNodePromise} promise ' @param {Function} [callback] - The function to be invoked when the promise resolves. This function takes a dynamic result as the first parameter and if a context was supplied a dynamic context as the second parameter. From b6492f20d89eab62f7002284c80538c0f9637176 Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:20 -0300 Subject: [PATCH 07/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index 6983322..e1bc7fa 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -3,7 +3,7 @@ namespace promises ' Create a new promise - ' @return {roSGNodePromise } + ' @return {roSGNodePromise} function create() as dynamic 'create a unique ID for this promise id = "promise-" + promises.internal.createUuid() From 11c26b4a505aac4bc4b52ade71926c2ee279357f Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:26 -0300 Subject: [PATCH 08/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index e1bc7fa..c67dec0 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -35,7 +35,7 @@ namespace promises return promises.internal.on("then", promise, callback, context) end function - ' TODO rename this to `catch` once BrighterScript supports using keywords as namespaced function names + ' Used to register a callback on promise rejection ' ' @param {roSGNodePromise} promise ' @param {Function} [callback] - The function to be invoked when the promise rejects. This function takes a dynamic error as the first parameter and if a context was supplied a dynamic context as the second parameter. From e253961b81df660cd770c80d152c0ed00b18d2fa Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:37 -0300 Subject: [PATCH 09/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/source/promises.bs b/src/source/promises.bs index c67dec0..552d726 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -42,6 +42,7 @@ namespace promises ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} function onCatch(promise as dynamic, callback = promises.internal.defaultCatchCallback as function, context = "__INVALID__" as object) as dynamic + ' TODO rename this to `catch` once BrighterScript supports using keywords as namespaced function names return promises.internal.on("catch", promise, callback, context) end function From ea69215f9965392eaa4d21ec8d5687eecee3d2df Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:53:49 -0300 Subject: [PATCH 10/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index 552d726..6a10bf0 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -46,7 +46,8 @@ namespace promises return promises.internal.on("catch", promise, callback, context) end function - ' TODO rename this to `finally` once BrighterScript supports using keywords as namespaced function names + ' Used to register a callback on promise completion regardless of resolved or rejected status. + ' ' @param {roSGNodePromise} promise ```suggestion ' @param {Function} [callback] - The function to be invoked when the promise resolves or rejects. If a context was supplied this function takes a dynamic context as the first parameter. From 7add2f0a8b9cb81b16bbd8d391713b10ee4c1595 Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:54:01 -0300 Subject: [PATCH 11/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/source/promises.bs b/src/source/promises.bs index 6a10bf0..39afb2e 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -54,6 +54,7 @@ namespace promises ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} function onFinally(promise as dynamic, callback = promises.internal.defaultFinallyCallback as function, context = "__INVALID__" as object) as dynamic + ' TODO rename this to `finally` once BrighterScript supports using keywords as namespaced function names return promises.internal.on("finally", promise, callback, context) end function From 57b62bbb614aea76d857354241b0f3582ce7b8de Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:54:15 -0300 Subject: [PATCH 12/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index 39afb2e..de121f5 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -403,9 +403,10 @@ namespace promises return deferred end function + ' Takes a value to resolve on a promise. If no promise is supplied the value will be wrapped with a new promise. ' - ' @param {dynamic} result - ' @param {roSGNodePromise} [promise=invalid] + ' @param {dynamic} result - The final value from the promise work + ' @param {roSGNodePromise} [promise] - A promise to resolve with the supplied result ' @return {roSGNodePromise} function resolve(result as dynamic, promise = invalid as dynamic) as object if not promises.isPromise(promise) then From 01066a83b42e29781e6a1d6b5998e7633514274f Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:54:25 -0300 Subject: [PATCH 13/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index de121f5..a6cb8b0 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -425,9 +425,10 @@ namespace promises return promise end function + ' Takes a value to reject on a promise. If no promise is supplied the value will be wrapped with a new promise. ' - ' @param {dynamic} error - ' @param {roSGNodePromise} [promise=invalid] + ' @param {dynamic} error - the reason the promise was rejected. Typically an exception object. + ' @param {roSGNodePromise} [promise] - the promise to be rejected. If not promise is supplied a new promise will be created with the supplied error ' @return {roSGNodePromise} function reject(error as dynamic, promise = invalid as dynamic) as object if not promises.isPromise(promise) then From ed03772f9439a25a889c878178d56be57a6fda0f Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:54:33 -0300 Subject: [PATCH 14/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index a6cb8b0..24d0d51 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -508,8 +508,8 @@ namespace promises 'Allows chaining multiple promise operations in a row in a clean syntax ' - ' @param {roSGNodePromise} initialPromise - ' @param {object} [context="__INVALID__"] + ' @param {roSGNodePromise} initialPromise - The first promise to then chain off of + ' @param {object} [context] - A value used to store state across callbacks within this chain; passed by value for primitives and by reference for objects (never cloned) ' @return {PromiseChain} function chain(initialPromise as object, context = "__INVALID__" as object) as object return { From cc2e861f41a1007581dab47e1f6e01ffc8332c9c Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Tue, 1 Apr 2025 15:54:40 -0300 Subject: [PATCH 15/17] Update src/source/promises.bs Co-authored-by: Christopher Dwyer-Perkins --- src/source/promises.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index 24d0d51..8778a88 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -447,7 +447,7 @@ namespace promises return promise end function - ' + ' Checks if a promise if resolved or rejected. ' ' @param {roSGNodePromise} promise ' @return {boolean} From 8549e89d5cc5343ae9a8d6b3d6db726a1e7626a9 Mon Sep 17 00:00:00 2001 From: Christopher Dwyer-Perkins Date: Thu, 5 Jun 2025 10:29:47 -0300 Subject: [PATCH 16/17] Fixed formatting and syntax issue --- src/source/promises.bs | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/source/promises.bs b/src/source/promises.bs index 8778a88..73de1f2 100644 --- a/src/source/promises.bs +++ b/src/source/promises.bs @@ -46,10 +46,9 @@ namespace promises return promises.internal.on("catch", promise, callback, context) end function - ' Used to register a callback on promise completion regardless of resolved or rejected status. + ' Used to register a callback on promise completion regardless of resolved or rejected status. ' ' @param {roSGNodePromise} promise -```suggestion ' @param {Function} [callback] - The function to be invoked when the promise resolves or rejects. If a context was supplied this function takes a dynamic context as the first parameter. ' @param {object} [context] - state information that will be provided to the callback; passed by value for primitives and by reference for objects (never cloned). ' @return {roSGNodePromise} @@ -112,7 +111,7 @@ namespace promises promises.resolve(context.state.results, context.state.deferred) end if end if - end sub, {state: state, index: i}) + end sub, { state: state, index: i }) promises.onCatch(promise, sub(error as dynamic, state as dynamic) ' This shouldn't happen but if we somehow get a rejected promise after @@ -189,7 +188,7 @@ namespace promises if not context.state.done then ' Always assign the result to the origin index so results are in the same ' order as the supplied promiseArray - context.state.results[context.index] = {status: promises.PromiseState.resolved, value: result} + context.state.results[context.index] = { status: promises.PromiseState.resolved, value: result } context.state.resolvedCount++ if context.state.resolvedCount = context.state.total then @@ -199,7 +198,7 @@ namespace promises promises.resolve(context.state.results, context.state.deferred) end if end if - end sub, {state: state, index: i}) + end sub, { state: state, index: i }) promises.onCatch(promise, sub(error as dynamic, context as dynamic) ' Do not process any promises that come in late @@ -207,7 +206,7 @@ namespace promises if not context.state.done then ' Always assign the result to the origin index so results are in the same ' order as the supplied promiseArray - context.state.results[context.index] = {status: promises.PromiseState.rejected, reason: error} + context.state.results[context.index] = { status: promises.PromiseState.rejected, reason: error } context.state.resolvedCount++ if context.state.resolvedCount = context.state.total then @@ -217,11 +216,11 @@ namespace promises promises.resolve(context.state.results, context.state.deferred) end if end if - end sub, {state: state, index: i}) + end sub, { state: state, index: i }) else ' The value in the promise array is not a promise. ' Immediately set the result. - state.results[i] = {status: promises.PromiseState.resolved, value: promise} + state.results[i] = { status: promises.PromiseState.resolved, value: promise } state.resolvedCount++ if state.resolvedCount = state.total then @@ -303,13 +302,13 @@ namespace promises ' Resolve the deferred and make the state as complete context.state.done = true try - throw {message: "All promises were rejected", errors: context.state.errors} + throw { message: "All promises were rejected", errors: context.state.errors } catch e promises.reject(e, context.state.deferred) end try end if end if - end sub, {state: state, index: i}) + end sub, { state: state, index: i }) end if else ' The value in the promise array is not a promise. @@ -323,7 +322,7 @@ namespace promises else ' We can't resolve with a promise if there are no promises to resolve try - throw {message: "All promises were rejected", errors: []} + throw { message: "All promises were rejected", errors: [] } catch e promises.reject(e, deferred) end try @@ -394,7 +393,7 @@ namespace promises else ' We can't resolve with a promise if there are no promises to resolve try - throw {message: "All promises were rejected", errors: []} + throw { message: "All promises were rejected", errors: [] } catch e promises.reject(e, deferred) end try @@ -416,9 +415,9 @@ namespace promises ' console.trace("[promises.resolve]", promise.id) if type(result) = "roAssociativeArray" then promise.removeField("promiseResult") - promise.addFields({promiseResult: result}) + promise.addFields({ promiseResult: result }) else - promise.update({promiseResult: result}, true) + promise.update({ promiseResult: result }, true) end if promise.promiseState = promises.PromiseState.resolved end if @@ -438,16 +437,16 @@ namespace promises ' console.trace("[promises.reject]", promise.id) if type(error) = "roAssociativeArray" then promise.removeField("promiseResult") - promise.addFields({promiseResult: error}) + promise.addFields({ promiseResult: error }) else - promise.update({promiseResult: error}, true) + promise.update({ promiseResult: error }, true) end if promise.promiseState = promises.PromiseState.rejected end if return promise end function - ' Checks if a promise if resolved or rejected. + ' Checks if a promise if resolved or rejected. ' ' @param {roSGNodePromise} promise ' @return {boolean} @@ -563,7 +562,7 @@ namespace promises.configuration globalNode = m.global if type(globalNode) = "roSGNode" then if enabled then - globalNode.update({__promises__crashLoggingEnabled: enabled}, true) + globalNode.update({ __promises__crashLoggingEnabled: enabled }, true) else globalNode.removeField("__promises__crashLoggingEnabled") end if @@ -616,7 +615,7 @@ namespace promises.internal 'run the notification nexttick to prevent stackoverflow due to cascading promises all resolving in sequence promises.internal.delay(sub(context) promises.internal.notifyListeners(context.event) - end sub, {event: event}) + end sub, { event: event }) end sub) storage = { @@ -649,7 +648,7 @@ namespace promises.internal if promiseState = promises.PromiseState.resolved or promiseState = promises.PromiseState.rejected then promises.internal.delay(sub (details as object) details.promise.promiseState = details.promiseState - end sub, {promise: promise, promiseState: promiseState}) + end sub, { promise: promise, promiseState: promiseState }) end if #if PROMISES_DEBUG print "[promises.watch]", newPromise.id, "is watching", promise.id, eventName @@ -896,7 +895,7 @@ namespace promises.internal ' @param {Float} [duration] - the amount of delay before invoking the callback sub delay(callback as function, context as dynamic, duration = 0.0001 as float) timer = createObject("roSGNode", "Timer") - timer.update({duration: duration, repeat: false, id: "__delay_" + promises.internal.createUuid()}, true) + timer.update({ duration: duration, repeat: false, id: "__delay_" + promises.internal.createUuid() }, true) m[timer.id] = { timer: timer From 9036ed3d3b5778eaa2a2f2dea8c09fe44aae4b51 Mon Sep 17 00:00:00 2001 From: Christopher Dwyer-Perkins Date: Thu, 5 Jun 2025 10:36:08 -0300 Subject: [PATCH 17/17] moved to brighterscript v0.67.4 --- package-lock.json | 209 ++++++++++++++++++++++++++++++++++++++-------- package.json | 2 +- 2 files changed, 173 insertions(+), 38 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4754701..afa5dbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@types/fs-extra": "^11.0.1", "@types/node": "^20.6.0", - "brighterscript": "^0.69.4", + "brighterscript": "^0.67.4", "dotenv": "^16.3.1", "fs-extra": "^11.1.1", "roku-deploy": "^3.10.3", @@ -161,11 +161,10 @@ "dev": true }, "node_modules/@rokucommunity/logger": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.10.tgz", - "integrity": "sha512-cKSFv78RqH1fZ5cKIsgORr0iaXavTcVb9QQS86dThTbMn1i28rKtP42K9RPHqHRFKicZRRQj6zOjrUsL45yPxQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.11.tgz", + "integrity": "sha512-yQWa+rRVYkZeEYFePHzNtB6/DL+wPjjL/xt9wM0gQPDugSl8kJZ3ywyUtrFS+y/wzY0Nc2M+1704GVx0vdOO9A==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "date-fns": "^2.30.0", @@ -600,19 +599,18 @@ } }, "node_modules/brighterscript": { - "version": "0.69.4", - "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.4.tgz", - "integrity": "sha512-6bBkdd14/KKGedtUWcjUZbDv3urCOlELgf8E5+MBcK6qwsX0f00XjLTOZTOV2blYhEOmLe1+KXi0yglwfJ5mwA==", + "version": "0.67.4", + "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.67.4.tgz", + "integrity": "sha512-1EbX2Po9WbIyi4r557fk6txkYR0VvbnGm1caS9AVlVek2R6d9+QsQxr+f24PePM4l/TOBvZ1JieBt6NheM4P2Q==", "dev": true, - "license": "MIT", "dependencies": { "@rokucommunity/bslib": "^0.1.1", - "@rokucommunity/logger": "^0.3.10", + "@rokucommunity/logger": "^0.3.9", "@xml-tools/parser": "^1.0.7", "array-flat-polyfill": "^1.0.1", "chalk": "^2.4.2", "chevrotain": "^7.0.1", - "chokidar": "^3.6.0", + "chokidar": "^3.5.1", "clear": "^0.1.0", "cross-platform-clear-console": "^2.3.0", "debounce-promise": "^3.1.0", @@ -620,23 +618,18 @@ "fast-glob": "^3.2.12", "file-url": "^3.0.0", "fs-extra": "^8.1.0", - "ignore": "^5.3.1", "jsonc-parser": "^2.3.0", - "lodash.isequal": "^4.5.0", "long": "^3.2.0", "luxon": "^2.5.2", - "micromatch": "^4.0.4", "minimatch": "^3.0.4", "moment": "^2.23.0", "p-settle": "^2.1.0", "parse-ms": "^2.1.0", "readline": "^1.3.0", "require-relative": "^0.8.7", - "roku-deploy": "^3.12.4", - "safe-json-stringify": "^1.2.0", + "roku-deploy": "^3.12.1", "serialize-error": "^7.0.1", "source-map": "^0.7.4", - "thenby": "^1.3.4", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", @@ -2115,6 +2108,85 @@ "roku-debug": "dist/cli.js" } }, + "node_modules/roku-debug/node_modules/brighterscript": { + "version": "0.69.10", + "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.10.tgz", + "integrity": "sha512-E8QCzN5bueG+SYJUdQ+1vw/frIV3WrpvoLgbNkAhYLOC6bSwoqmETwmgaiXpnY66Qe2zeAapXCbBcWVVIA7AQA==", + "dev": true, + "dependencies": { + "@rokucommunity/bslib": "^0.1.1", + "@rokucommunity/logger": "^0.3.11", + "@xml-tools/parser": "^1.0.7", + "array-flat-polyfill": "^1.0.1", + "chalk": "^2.4.2", + "chevrotain": "^7.0.1", + "chokidar": "^3.6.0", + "clear": "^0.1.0", + "cross-platform-clear-console": "^2.3.0", + "debounce-promise": "^3.1.0", + "eventemitter3": "^4.0.0", + "fast-glob": "^3.2.12", + "file-url": "^3.0.0", + "fs-extra": "^8.1.0", + "ignore": "^5.3.1", + "jsonc-parser": "^2.3.0", + "lodash.isequal": "^4.5.0", + "long": "^3.2.0", + "luxon": "^2.5.2", + "micromatch": "^4.0.4", + "minimatch": "^3.0.4", + "moment": "^2.23.0", + "p-settle": "^2.1.0", + "parse-ms": "^2.1.0", + "readline": "^1.3.0", + "require-relative": "^0.8.7", + "roku-deploy": "^3.12.6", + "safe-json-stringify": "^1.2.0", + "serialize-error": "^7.0.1", + "source-map": "^0.7.4", + "thenby": "^1.3.4", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.0.8", + "xml2js": "^0.5.0", + "yargs": "^16.2.0" + }, + "bin": { + "bsc": "dist/cli.js", + "bsc0": "dist/cli.js" + } + }, + "node_modules/roku-debug/node_modules/brighterscript/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/roku-debug/node_modules/brighterscript/node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/roku-debug/node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -2187,9 +2259,9 @@ } }, "node_modules/roku-deploy": { - "version": "3.12.4", - "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.12.4.tgz", - "integrity": "sha512-XRiLkGRppo2hcSJfkvTOkgCyxVdDLOVq2vlH41WiDE9h/7qycxFLKrQBxwhE+3L+FI5AobVCQ/v08dEQEyTqBw==", + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.12.6.tgz", + "integrity": "sha512-3qne2rwD0Yt4VMGUpiV75UHiarQYSgrQh5DtwpHjUVu0ozAzUw6psa46wA/jMbJgSNIDgKi4JsvdXkiAcE6P+g==", "dev": true, "dependencies": { "@types/request": "^2.47.0", @@ -2960,9 +3032,9 @@ "dev": true }, "@rokucommunity/logger": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.10.tgz", - "integrity": "sha512-cKSFv78RqH1fZ5cKIsgORr0iaXavTcVb9QQS86dThTbMn1i28rKtP42K9RPHqHRFKicZRRQj6zOjrUsL45yPxQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@rokucommunity/logger/-/logger-0.3.11.tgz", + "integrity": "sha512-yQWa+rRVYkZeEYFePHzNtB6/DL+wPjjL/xt9wM0gQPDugSl8kJZ3ywyUtrFS+y/wzY0Nc2M+1704GVx0vdOO9A==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -3324,18 +3396,18 @@ } }, "brighterscript": { - "version": "0.69.4", - "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.4.tgz", - "integrity": "sha512-6bBkdd14/KKGedtUWcjUZbDv3urCOlELgf8E5+MBcK6qwsX0f00XjLTOZTOV2blYhEOmLe1+KXi0yglwfJ5mwA==", + "version": "0.67.4", + "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.67.4.tgz", + "integrity": "sha512-1EbX2Po9WbIyi4r557fk6txkYR0VvbnGm1caS9AVlVek2R6d9+QsQxr+f24PePM4l/TOBvZ1JieBt6NheM4P2Q==", "dev": true, "requires": { "@rokucommunity/bslib": "^0.1.1", - "@rokucommunity/logger": "^0.3.10", + "@rokucommunity/logger": "^0.3.9", "@xml-tools/parser": "^1.0.7", "array-flat-polyfill": "^1.0.1", "chalk": "^2.4.2", "chevrotain": "^7.0.1", - "chokidar": "^3.6.0", + "chokidar": "^3.5.1", "clear": "^0.1.0", "cross-platform-clear-console": "^2.3.0", "debounce-promise": "^3.1.0", @@ -3343,23 +3415,18 @@ "fast-glob": "^3.2.12", "file-url": "^3.0.0", "fs-extra": "^8.1.0", - "ignore": "^5.3.1", "jsonc-parser": "^2.3.0", - "lodash.isequal": "^4.5.0", "long": "^3.2.0", "luxon": "^2.5.2", - "micromatch": "^4.0.4", "minimatch": "^3.0.4", "moment": "^2.23.0", "p-settle": "^2.1.0", "parse-ms": "^2.1.0", "readline": "^1.3.0", "require-relative": "^0.8.7", - "roku-deploy": "^3.12.4", - "safe-json-stringify": "^1.2.0", + "roku-deploy": "^3.12.1", "serialize-error": "^7.0.1", "source-map": "^0.7.4", - "thenby": "^1.3.4", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", @@ -4512,6 +4579,74 @@ "yargs": "^16.2.0" }, "dependencies": { + "brighterscript": { + "version": "0.69.10", + "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.69.10.tgz", + "integrity": "sha512-E8QCzN5bueG+SYJUdQ+1vw/frIV3WrpvoLgbNkAhYLOC6bSwoqmETwmgaiXpnY66Qe2zeAapXCbBcWVVIA7AQA==", + "dev": true, + "requires": { + "@rokucommunity/bslib": "^0.1.1", + "@rokucommunity/logger": "^0.3.11", + "@xml-tools/parser": "^1.0.7", + "array-flat-polyfill": "^1.0.1", + "chalk": "^2.4.2", + "chevrotain": "^7.0.1", + "chokidar": "^3.6.0", + "clear": "^0.1.0", + "cross-platform-clear-console": "^2.3.0", + "debounce-promise": "^3.1.0", + "eventemitter3": "^4.0.0", + "fast-glob": "^3.2.12", + "file-url": "^3.0.0", + "fs-extra": "^8.1.0", + "ignore": "^5.3.1", + "jsonc-parser": "^2.3.0", + "lodash.isequal": "^4.5.0", + "long": "^3.2.0", + "luxon": "^2.5.2", + "micromatch": "^4.0.4", + "minimatch": "^3.0.4", + "moment": "^2.23.0", + "p-settle": "^2.1.0", + "parse-ms": "^2.1.0", + "readline": "^1.3.0", + "require-relative": "^0.8.7", + "roku-deploy": "^3.12.6", + "safe-json-stringify": "^1.2.0", + "serialize-error": "^7.0.1", + "source-map": "^0.7.4", + "thenby": "^1.3.4", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.0.8", + "xml2js": "^0.5.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "requires": { + "type-fest": "^0.13.1" + } + } + } + }, "dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -4567,9 +4702,9 @@ } }, "roku-deploy": { - "version": "3.12.4", - "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.12.4.tgz", - "integrity": "sha512-XRiLkGRppo2hcSJfkvTOkgCyxVdDLOVq2vlH41WiDE9h/7qycxFLKrQBxwhE+3L+FI5AobVCQ/v08dEQEyTqBw==", + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.12.6.tgz", + "integrity": "sha512-3qne2rwD0Yt4VMGUpiV75UHiarQYSgrQh5DtwpHjUVu0ozAzUw6psa46wA/jMbJgSNIDgKi4JsvdXkiAcE6P+g==", "dev": true, "requires": { "@types/request": "^2.47.0", diff --git a/package.json b/package.json index b18ef58..7eefeba 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "devDependencies": { "@types/fs-extra": "^11.0.1", "@types/node": "^20.6.0", - "brighterscript": "^0.69.4", + "brighterscript": "^0.67.4", "dotenv": "^16.3.1", "fs-extra": "^11.1.1", "roku-deploy": "^3.10.3",