From 5d93badb9efd4c5e6ff4e274fff49120fcc9cde4 Mon Sep 17 00:00:00 2001 From: 117 <16513382+117@users.noreply.github.com> Date: Sun, 11 Aug 2024 01:42:44 -0400 Subject: [PATCH] init --- .github/workflows/deploy.yml | 21 +++++++++++++++++ LICENSE.md | 20 ++++++++++++++++ README.md | 44 ++++++++++++++++++++++++++++++++++++ deno.json | 10 ++++++++ deno.lock | 38 +++++++++++++++++++++++++++++++ mod.ts | 1 + src/sleep.ts | 12 ++++++++++ src/sleep_test.ts | 16 +++++++++++++ 8 files changed, 162 insertions(+) create mode 100644 .github/workflows/deploy.yml create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 deno.json create mode 100644 deno.lock create mode 100644 mod.ts create mode 100644 src/sleep.ts create mode 100644 src/sleep_test.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a51cc64 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,21 @@ +name: deploy +on: + push: + branches: + - main +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@v4 + - name: set up Deno + uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - name: run Deno tests + run: deno test + - name: publish to JSR + run: npx jsr publish diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..b143b10 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2024 github.com/117 + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..53d5c75 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# sleep + +![version](https://img.shields.io/jsr/v/%40117/sleep?style=flat-square&color=%23ff51bc&label=version) +![status](https://img.shields.io/github/actions/workflow/status/117/sleep/deploy.yml?style=flat-square) + +A promise-based sleep function for Deno. + +## Contents + +- [Features](#features) +- [Install](#install) +- [Example](#example) +- [Contributing](#contributing) + +## Features + +- [x] Minimal and easy to use. +- [x] Can be used to `await` for a specified amount of time. + +## Install + +For Deno: + +```sh +$ deno add @117/sleep +``` + +## Example + +```ts +import { sleep } from "@117/sleep"; + +const work = async () => { + console.log("please wait for 2 seconds"); + await sleep(2000); + console.log("thanks for waiting"); +}; + +work(); +``` + +## Contributing + +Feel free to contribute and PR to your 💖's content. diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..8a87c3a --- /dev/null +++ b/deno.json @@ -0,0 +1,10 @@ +{ + "name": "@117/sleep", + "description": "A promise-based sleep function for Deno.", + "version": "1.0.0", + "exports": "./mod.ts", + "imports": { + "@/": "./", + "assert": "https://deno.land/std@0.224.0/assert/mod.ts" + } +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..83fe0e7 --- /dev/null +++ b/deno.lock @@ -0,0 +1,38 @@ +{ + "version": "3", + "remote": { + "https://deno.land/std@0.224.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975", + "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", + "https://deno.land/std@0.224.0/assert/assert_almost_equals.ts": "9e416114322012c9a21fa68e187637ce2d7df25bcbdbfd957cd639e65d3cf293", + "https://deno.land/std@0.224.0/assert/assert_array_includes.ts": "14c5094471bc8e4a7895fc6aa5a184300d8a1879606574cb1cd715ef36a4a3c7", + "https://deno.land/std@0.224.0/assert/assert_equals.ts": "3bbca947d85b9d374a108687b1a8ba3785a7850436b5a8930d81f34a32cb8c74", + "https://deno.land/std@0.224.0/assert/assert_exists.ts": "43420cf7f956748ae6ed1230646567b3593cb7a36c5a5327269279c870c5ddfd", + "https://deno.land/std@0.224.0/assert/assert_false.ts": "3e9be8e33275db00d952e9acb0cd29481a44fa0a4af6d37239ff58d79e8edeff", + "https://deno.land/std@0.224.0/assert/assert_greater.ts": "5e57b201fd51b64ced36c828e3dfd773412c1a6120c1a5a99066c9b261974e46", + "https://deno.land/std@0.224.0/assert/assert_greater_or_equal.ts": "9870030f997a08361b6f63400273c2fb1856f5db86c0c3852aab2a002e425c5b", + "https://deno.land/std@0.224.0/assert/assert_instance_of.ts": "e22343c1fdcacfaea8f37784ad782683ec1cf599ae9b1b618954e9c22f376f2c", + "https://deno.land/std@0.224.0/assert/assert_is_error.ts": "f856b3bc978a7aa6a601f3fec6603491ab6255118afa6baa84b04426dd3cc491", + "https://deno.land/std@0.224.0/assert/assert_less.ts": "60b61e13a1982865a72726a5fa86c24fad7eb27c3c08b13883fb68882b307f68", + "https://deno.land/std@0.224.0/assert/assert_less_or_equal.ts": "d2c84e17faba4afe085e6c9123a63395accf4f9e00150db899c46e67420e0ec3", + "https://deno.land/std@0.224.0/assert/assert_match.ts": "ace1710dd3b2811c391946954234b5da910c5665aed817943d086d4d4871a8b7", + "https://deno.land/std@0.224.0/assert/assert_not_equals.ts": "78d45dd46133d76ce624b2c6c09392f6110f0df9b73f911d20208a68dee2ef29", + "https://deno.land/std@0.224.0/assert/assert_not_instance_of.ts": "3434a669b4d20cdcc5359779301a0588f941ffdc2ad68803c31eabdb4890cf7a", + "https://deno.land/std@0.224.0/assert/assert_not_match.ts": "df30417240aa2d35b1ea44df7e541991348a063d9ee823430e0b58079a72242a", + "https://deno.land/std@0.224.0/assert/assert_not_strict_equals.ts": "37f73880bd672709373d6dc2c5f148691119bed161f3020fff3548a0496f71b8", + "https://deno.land/std@0.224.0/assert/assert_object_match.ts": "411450fd194fdaabc0089ae68f916b545a49d7b7e6d0026e84a54c9e7eed2693", + "https://deno.land/std@0.224.0/assert/assert_rejects.ts": "4bee1d6d565a5b623146a14668da8f9eb1f026a4f338bbf92b37e43e0aa53c31", + "https://deno.land/std@0.224.0/assert/assert_strict_equals.ts": "b4f45f0fd2e54d9029171876bd0b42dd9ed0efd8f853ab92a3f50127acfa54f5", + "https://deno.land/std@0.224.0/assert/assert_string_includes.ts": "496b9ecad84deab72c8718735373feb6cdaa071eb91a98206f6f3cb4285e71b8", + "https://deno.land/std@0.224.0/assert/assert_throws.ts": "c6508b2879d465898dab2798009299867e67c570d7d34c90a2d235e4553906eb", + "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", + "https://deno.land/std@0.224.0/assert/equal.ts": "bddf07bb5fc718e10bb72d5dc2c36c1ce5a8bdd3b647069b6319e07af181ac47", + "https://deno.land/std@0.224.0/assert/fail.ts": "0eba674ffb47dff083f02ced76d5130460bff1a9a68c6514ebe0cdea4abadb68", + "https://deno.land/std@0.224.0/assert/mod.ts": "48b8cb8a619ea0b7958ad7ee9376500fe902284bb36f0e32c598c3dc34cbd6f3", + "https://deno.land/std@0.224.0/assert/unimplemented.ts": "8c55a5793e9147b4f1ef68cd66496b7d5ba7a9e7ca30c6da070c1a58da723d73", + "https://deno.land/std@0.224.0/assert/unreachable.ts": "5ae3dbf63ef988615b93eb08d395dda771c96546565f9e521ed86f6510c29e19", + "https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5", + "https://deno.land/std@0.224.0/internal/diff.ts": "6234a4b493ebe65dc67a18a0eb97ef683626a1166a1906232ce186ae9f65f4e6", + "https://deno.land/std@0.224.0/internal/format.ts": "0a98ee226fd3d43450245b1844b47003419d34d210fa989900861c79820d21c2", + "https://deno.land/std@0.224.0/internal/mod.ts": "534125398c8e7426183e12dc255bb635d94e06d0f93c60a297723abe69d3b22e" + } +} diff --git a/mod.ts b/mod.ts new file mode 100644 index 0000000..f36f0a7 --- /dev/null +++ b/mod.ts @@ -0,0 +1 @@ +export { sleep } from "@/src/sleep.ts"; diff --git a/src/sleep.ts b/src/sleep.ts new file mode 100644 index 0000000..a77562d --- /dev/null +++ b/src/sleep.ts @@ -0,0 +1,12 @@ +/** @module sleep */ + +/** + * Pauses the execution for a specified number of milliseconds. + * + * @param {number} milliseconds - The duration for which to pause the execution, in milliseconds. + * @returns {Promise} A promise that resolves after the specified duration. + */ +const sleep = (milliseconds: number): Promise => + new Promise((resolve) => setTimeout(resolve, milliseconds)); + +export { sleep }; diff --git a/src/sleep_test.ts b/src/sleep_test.ts new file mode 100644 index 0000000..25a9d57 --- /dev/null +++ b/src/sleep_test.ts @@ -0,0 +1,16 @@ +import { assert } from "assert"; + +import { sleep } from "@/src/sleep.ts"; + +Deno.test("does not resolve before the delay", async () => { + const start = Date.now(); + const delay = 100; + + await sleep(delay); + + const end = Date.now(); + const elapsed = end - start; + + // check if the elapsed time is at least the delay + assert(elapsed >= delay); +});