mirror of
				https://github.com/AmberGraceRblx/luau-promise.git
				synced 2025-11-03 19:49:17 +00:00 
			
		
		
		
	Format with stylua
This commit is contained in:
		
							parent
							
								
									81dc283f32
								
							
						
					
					
						commit
						6c38e41422
					
				
					 1 changed files with 56 additions and 86 deletions
				
			
		
							
								
								
									
										142
									
								
								lib/init.lua
									
									
									
									
									
								
							
							
						
						
									
										142
									
								
								lib/init.lua
									
									
									
									
									
								
							| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
local ERROR_NON_PROMISE_IN_LIST = "Non-promise value passed into %s at index %s"
 | 
					local ERROR_NON_PROMISE_IN_LIST = "Non-promise value passed into %s at index %s"
 | 
				
			||||||
local ERROR_NON_LIST = "Please pass a list of promises to %s"
 | 
					local ERROR_NON_LIST = "Please pass a list of promises to %s"
 | 
				
			||||||
local ERROR_NON_FUNCTION = "Please pass a handler function to %s!"
 | 
					local ERROR_NON_FUNCTION = "Please pass a handler function to %s!"
 | 
				
			||||||
local MODE_KEY_METATABLE = {__mode = "k"}
 | 
					local MODE_KEY_METATABLE = { __mode = "k" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--[[
 | 
					--[[
 | 
				
			||||||
	Creates an enum dictionary with some metamethods to prevent common mistakes.
 | 
						Creates an enum dictionary with some metamethods to prevent common mistakes.
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,8 @@ end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@class Error
 | 
						@class Error
 | 
				
			||||||
]=]
 | 
					]=]
 | 
				
			||||||
local Error do
 | 
					local Error
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
	Error = {
 | 
						Error = {
 | 
				
			||||||
		Kind = makeEnum("Promise.Error.Kind", {
 | 
							Kind = makeEnum("Promise.Error.Kind", {
 | 
				
			||||||
			"ExecutionError",
 | 
								"ExecutionError",
 | 
				
			||||||
| 
						 | 
					@ -100,10 +101,13 @@ local Error do
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, runtimeError in ipairs(self:getErrorChain()) do
 | 
							for _, runtimeError in ipairs(self:getErrorChain()) do
 | 
				
			||||||
			table.insert(errorStrings, table.concat({
 | 
								table.insert(
 | 
				
			||||||
				runtimeError.trace or runtimeError.error,
 | 
									errorStrings,
 | 
				
			||||||
				runtimeError.context,
 | 
									table.concat({
 | 
				
			||||||
			}, "\n"))
 | 
										runtimeError.trace or runtimeError.error,
 | 
				
			||||||
 | 
										runtimeError.context,
 | 
				
			||||||
 | 
									}, "\n")
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return table.concat(errorStrings, "\n")
 | 
							return table.concat(errorStrings, "\n")
 | 
				
			||||||
| 
						 | 
					@ -200,7 +204,7 @@ end
 | 
				
			||||||
]=]
 | 
					]=]
 | 
				
			||||||
local Promise = {
 | 
					local Promise = {
 | 
				
			||||||
	Error = Error,
 | 
						Error = Error,
 | 
				
			||||||
	Status = makeEnum("Promise.Status", {"Started", "Resolved", "Rejected", "Cancelled"}),
 | 
						Status = makeEnum("Promise.Status", { "Started", "Resolved", "Rejected", "Cancelled" }),
 | 
				
			||||||
	_getTime = os.clock,
 | 
						_getTime = os.clock,
 | 
				
			||||||
	_timeEvent = game:GetService("RunService").Heartbeat,
 | 
						_timeEvent = game:GetService("RunService").Heartbeat,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -273,13 +277,7 @@ function Promise._new(traceback, callback, parent)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	coroutine.wrap(function()
 | 
						coroutine.wrap(function()
 | 
				
			||||||
		local ok, _, result = runExecutor(
 | 
							local ok, _, result = runExecutor(self._source, callback, resolve, reject, onCancel)
 | 
				
			||||||
			self._source,
 | 
					 | 
				
			||||||
			callback,
 | 
					 | 
				
			||||||
			resolve,
 | 
					 | 
				
			||||||
			reject,
 | 
					 | 
				
			||||||
			onCancel
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if not ok then
 | 
							if not ok then
 | 
				
			||||||
			reject(result[1])
 | 
								reject(result[1])
 | 
				
			||||||
| 
						 | 
					@ -518,21 +516,18 @@ function Promise._all(traceback, promises, amount)
 | 
				
			||||||
		-- We can assume the values inside `promises` are all promises since we
 | 
							-- We can assume the values inside `promises` are all promises since we
 | 
				
			||||||
		-- checked above.
 | 
							-- checked above.
 | 
				
			||||||
		for i, promise in ipairs(promises) do
 | 
							for i, promise in ipairs(promises) do
 | 
				
			||||||
			newPromises[i] = promise:andThen(
 | 
								newPromises[i] = promise:andThen(function(...)
 | 
				
			||||||
				function(...)
 | 
									resolveOne(i, ...)
 | 
				
			||||||
					resolveOne(i, ...)
 | 
								end, function(...)
 | 
				
			||||||
				end,
 | 
									rejectedCount = rejectedCount + 1
 | 
				
			||||||
				function(...)
 | 
					 | 
				
			||||||
					rejectedCount = rejectedCount + 1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if amount == nil or #promises - rejectedCount < amount then
 | 
									if amount == nil or #promises - rejectedCount < amount then
 | 
				
			||||||
						cancel()
 | 
										cancel()
 | 
				
			||||||
						done = true
 | 
										done = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						reject(...)
 | 
										reject(...)
 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			)
 | 
								end)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if done then
 | 
							if done then
 | 
				
			||||||
| 
						 | 
					@ -718,11 +713,9 @@ function Promise.allSettled(promises)
 | 
				
			||||||
		-- We can assume the values inside `promises` are all promises since we
 | 
							-- We can assume the values inside `promises` are all promises since we
 | 
				
			||||||
		-- checked above.
 | 
							-- checked above.
 | 
				
			||||||
		for i, promise in ipairs(promises) do
 | 
							for i, promise in ipairs(promises) do
 | 
				
			||||||
			newPromises[i] = promise:finally(
 | 
								newPromises[i] = promise:finally(function(...)
 | 
				
			||||||
				function(...)
 | 
									resolveOne(i, ...)
 | 
				
			||||||
					resolveOne(i, ...)
 | 
								end)
 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end)
 | 
						end)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -769,7 +762,7 @@ function Promise.race(promises)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local function finalize(callback)
 | 
							local function finalize(callback)
 | 
				
			||||||
			return function (...)
 | 
								return function(...)
 | 
				
			||||||
				cancel()
 | 
									cancel()
 | 
				
			||||||
				finished = true
 | 
									finished = true
 | 
				
			||||||
				return callback(...)
 | 
									return callback(...)
 | 
				
			||||||
| 
						 | 
					@ -1197,22 +1190,12 @@ function Promise.prototype:_andThen(traceback, successHandler, failureHandler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local successCallback = resolve
 | 
							local successCallback = resolve
 | 
				
			||||||
		if successHandler then
 | 
							if successHandler then
 | 
				
			||||||
			successCallback = createAdvancer(
 | 
								successCallback = createAdvancer(traceback, successHandler, resolve, reject)
 | 
				
			||||||
				traceback,
 | 
					 | 
				
			||||||
				successHandler,
 | 
					 | 
				
			||||||
				resolve,
 | 
					 | 
				
			||||||
				reject
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local failureCallback = reject
 | 
							local failureCallback = reject
 | 
				
			||||||
		if failureHandler then
 | 
							if failureHandler then
 | 
				
			||||||
			failureCallback = createAdvancer(
 | 
								failureCallback = createAdvancer(traceback, failureHandler, resolve, reject)
 | 
				
			||||||
				traceback,
 | 
					 | 
				
			||||||
				failureHandler,
 | 
					 | 
				
			||||||
				resolve,
 | 
					 | 
				
			||||||
				reject
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if self._status == Promise.Status.Started then
 | 
							if self._status == Promise.Status.Started then
 | 
				
			||||||
| 
						 | 
					@ -1434,12 +1417,7 @@ function Promise.prototype:_finally(traceback, finallyHandler, onlyOk)
 | 
				
			||||||
	return Promise._new(traceback, function(resolve, reject)
 | 
						return Promise._new(traceback, function(resolve, reject)
 | 
				
			||||||
		local finallyCallback = resolve
 | 
							local finallyCallback = resolve
 | 
				
			||||||
		if finallyHandler then
 | 
							if finallyHandler then
 | 
				
			||||||
			finallyCallback = createAdvancer(
 | 
								finallyCallback = createAdvancer(traceback, finallyHandler, resolve, reject)
 | 
				
			||||||
				traceback,
 | 
					 | 
				
			||||||
				finallyHandler,
 | 
					 | 
				
			||||||
				resolve,
 | 
					 | 
				
			||||||
				reject
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if onlyOk then
 | 
							if onlyOk then
 | 
				
			||||||
| 
						 | 
					@ -1739,8 +1717,7 @@ function Promise.prototype:_resolve(...)
 | 
				
			||||||
		-- Without this warning, arguments sometimes mysteriously disappear
 | 
							-- Without this warning, arguments sometimes mysteriously disappear
 | 
				
			||||||
		if select("#", ...) > 1 then
 | 
							if select("#", ...) > 1 then
 | 
				
			||||||
			local message = string.format(
 | 
								local message = string.format(
 | 
				
			||||||
				"When returning a Promise from andThen, extra arguments are " ..
 | 
									"When returning a Promise from andThen, extra arguments are " .. "discarded! See:\n\n%s",
 | 
				
			||||||
				"discarded! See:\n\n%s",
 | 
					 | 
				
			||||||
				self._source
 | 
									self._source
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
			warn(message)
 | 
								warn(message)
 | 
				
			||||||
| 
						 | 
					@ -1748,36 +1725,33 @@ function Promise.prototype:_resolve(...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local chainedPromise = ...
 | 
							local chainedPromise = ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local promise = chainedPromise:andThen(
 | 
							local promise = chainedPromise:andThen(function(...)
 | 
				
			||||||
			function(...)
 | 
								self:_resolve(...)
 | 
				
			||||||
				self:_resolve(...)
 | 
							end, function(...)
 | 
				
			||||||
			end,
 | 
								local maybeRuntimeError = chainedPromise._values[1]
 | 
				
			||||||
			function(...)
 | 
					 | 
				
			||||||
				local maybeRuntimeError = chainedPromise._values[1]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
				-- Backwards compatibility < v2
 | 
								-- Backwards compatibility < v2
 | 
				
			||||||
				if chainedPromise._error then
 | 
								if chainedPromise._error then
 | 
				
			||||||
					maybeRuntimeError = Error.new({
 | 
									maybeRuntimeError = Error.new({
 | 
				
			||||||
						error = chainedPromise._error,
 | 
										error = chainedPromise._error,
 | 
				
			||||||
						kind = Error.Kind.ExecutionError,
 | 
										kind = Error.Kind.ExecutionError,
 | 
				
			||||||
						context = "[No stack trace available as this Promise originated from an older version of the Promise library (< v2)]",
 | 
										context = "[No stack trace available as this Promise originated from an older version of the Promise library (< v2)]",
 | 
				
			||||||
					})
 | 
									})
 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				if Error.isKind(maybeRuntimeError, Error.Kind.ExecutionError) then
 | 
					 | 
				
			||||||
					return self:_reject(maybeRuntimeError:extend({
 | 
					 | 
				
			||||||
						error = "This Promise was chained to a Promise that errored.",
 | 
					 | 
				
			||||||
						trace = "",
 | 
					 | 
				
			||||||
						context = string.format(
 | 
					 | 
				
			||||||
							"The Promise at:\n\n%s\n...Rejected because it was chained to the following Promise, which encountered an error:\n",
 | 
					 | 
				
			||||||
							self._source
 | 
					 | 
				
			||||||
						),
 | 
					 | 
				
			||||||
					}))
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				self:_reject(...)
 | 
					 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		)
 | 
					
 | 
				
			||||||
 | 
								if Error.isKind(maybeRuntimeError, Error.Kind.ExecutionError) then
 | 
				
			||||||
 | 
									return self:_reject(maybeRuntimeError:extend({
 | 
				
			||||||
 | 
										error = "This Promise was chained to a Promise that errored.",
 | 
				
			||||||
 | 
										trace = "",
 | 
				
			||||||
 | 
										context = string.format(
 | 
				
			||||||
 | 
											"The Promise at:\n\n%s\n...Rejected because it was chained to the following Promise, which encountered an error:\n",
 | 
				
			||||||
 | 
											self._source
 | 
				
			||||||
 | 
										),
 | 
				
			||||||
 | 
									}))
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								self:_reject(...)
 | 
				
			||||||
 | 
							end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if promise._status == Promise.Status.Cancelled then
 | 
							if promise._status == Promise.Status.Cancelled then
 | 
				
			||||||
			self:cancel()
 | 
								self:cancel()
 | 
				
			||||||
| 
						 | 
					@ -1832,11 +1806,7 @@ function Promise.prototype:_reject(...)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			-- Build a reasonable message
 | 
								-- Build a reasonable message
 | 
				
			||||||
			local message = string.format(
 | 
								local message = string.format("Unhandled Promise rejection:\n\n%s\n\n%s", err, self._source)
 | 
				
			||||||
				"Unhandled Promise rejection:\n\n%s\n\n%s",
 | 
					 | 
				
			||||||
				err,
 | 
					 | 
				
			||||||
				self._source
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if Promise.TEST then
 | 
								if Promise.TEST then
 | 
				
			||||||
				-- Don't spam output when we're running tests.
 | 
									-- Don't spam output when we're running tests.
 | 
				
			||||||
| 
						 | 
					@ -1938,7 +1908,7 @@ function Promise.retry(callback, times, ...)
 | 
				
			||||||
	assert(type(callback) == "function", "Parameter #1 to Promise.retry must be a function")
 | 
						assert(type(callback) == "function", "Parameter #1 to Promise.retry must be a function")
 | 
				
			||||||
	assert(type(times) == "number", "Parameter #2 to Promise.retry must be a number")
 | 
						assert(type(times) == "number", "Parameter #2 to Promise.retry must be a number")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local args, length = {...}, select("#", ...)
 | 
						local args, length = { ... }, select("#", ...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return Promise.resolve(callback(...)):catch(function(...)
 | 
						return Promise.resolve(callback(...)):catch(function(...)
 | 
				
			||||||
		if times > 0 then
 | 
							if times > 0 then
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue