🚀 Tiny goodies for Continuation-Passing-Style functions, fully tested

Overview
                                //  ) )     
    ___      ___      ___   __//__         
  //   ) ) //   ) ) ((   ) ) //   //   / / 
 //       //___/ /   \ \    //   ((___/ /  
((____   //       //   ) ) //        / /   

(Generated with http://patorjk.com/software/taag)

cpsfy

npm version install size bundlephobia Build Status CircleCI dependencies devDependencies Depfu Known Vulnerabilities Renovate badge Coverage Status codecov Language grade: JavaScript CodeFactor codebeat badge Codacy Badge Maintainability DeepScan grade GitHub last commit npm downloads MIT License

Tiny but powerful goodies for Continuation-Passing-Style (CPS) functions with functional composability backed by category theory foundations.

npm install cpsfy

(Or pnpm install cpsfy to save disc space.)

No dependency policy. For maximum security, this package is intended to be kept minimal and transparent with no dependencies ever.

Quick demo

We want to read the content of name.txt into string str and remove spaces from both ends of str. If the resulting str is nonempty, we read the content of the file with that name into string content, otherwise do nothing. Finally we split the content string into array of lines. If there are any errors on the way, we want to handle them at the very end in a separate function without any change to our main code.

//function returning CPS function with 2 callbacks
const readFileCps = file => (onRes, onErr) =>  
  require('fs').readFile(file, (err, content) => {
    err ? onErr(err) : onRes(content)
  })

// CPS wraps a CPS function to provide the API methods
const getLines = CPS(readFileCps('name.txt'))
  // map applies function to the file content
  .map(file => file.trim()) 
  .filter(file => file.length > 0)
  // chain applies function that returns CPS function
  .chain(file => readFileCps(file))
  .map(text => text.split('\n'))
// => CPS function with 2 callbacks

// To use, simply pass callbacks in the same order
getLines(
  lines => console.log(lines),  // onRes callback
  err => console.error(err)  // onErr callback
)

Note how we handle error at the end without affecting the main logic!

But can't I do it with promises?

Ok, let us have another example where you can't, shall we? At least not as easy. And maybe ... not really another. 😉

Reading from static files is easy but boring. Data is rarely static. What if we have to react to data changing in real time? Like our file names arriving as data stream? Let us use the popular websocket library:

const WebSocket = require('ws')
// general purpose CPS function listening to websocket
const wsMessageListenerCps = url => cb => 
  new WebSocket(url).on('message', cb)

And here is the crux:

wsMessageListenerCps(url) is just another CPS function!

So we can simply drop it instead of readFileCps('name.txt') into exactly the same code and be done with it:

const getLinesFromWS = CPS(wsMessageListenerCps(someUrl))
  .map(file => file.trim()) 
  .filter(file => file.length > 0)
  .chain(file => readFileCps(file))
  .map(text => text.split('\n'))

And if you paid attention, the new CPS function has only one callback, while the old one had two! Yet we have used exactly the same code! How so? Because we haven't done anything to other callbacks. The only difference is in how the final function is called - with one callback instead of two. As wsMessageListenerCps(url) accepts one callback, so does getLinesFromWS when we call it:

getLinesFromWS(lines => console.log(lines))

That will print all lines for all files whose names we receive from our websocket. And if we feel overwhelmed and only want to see lines containing say "breakfast", nothing can be easier:

// just add a filter
const breakfastLines = CPS(getLinesFromWS)
  .filter(line => /[Bb]reakfast/.test(line))
// call it exactly the same way
breakfastLines(lines => console.log(lines))

And from now on we'll never miss a breakfast. 😄

CPS function

Any function

const cpsFn = (cb1, cb2, ...) => { ... } 

that expects to be called with several (possibly zero) functions (callbacks) as arguments. The number of callbacks may vary each time cpsFn is called. Once called and running, cpsFn may call any of its callbacks any (possibly zero) number of times with any number m of arguments (x1, ..., xm), where m may also vary from call to call. The m-tuple (vector) (x1, ..., xm) is regarded as the output of cpsFn from the nthe callback cbn:

// (x1, ..., xm) becomes output from nth callback whenever
cbn(x1, ..., xm)  // is called, where n = 1, 2, ..., m

In other words, a CPS function receives any number of callbacks that it may call in any order any number of times at any moments immediately or in the future with any number of arguments.

API in brief

const { map, chain, filter, scan, ap, CPS, pipeline } 
  = require('cpsfy')

Each of the map, chain, filter, scan operators can be used in 3 ways:

// 'map' as curried function
map(f)(cpsFn)
// 'map' method provided by the 'CPS' wrapper
CPS(cpsFn).map(f)
// 'cpsFn' is piped into 'map(f)' via 'pipeline' operator
pipeline(cpsFn)(map(f))

The wrapped CPS function CPS(cpsFn) has all operators available as methods, while it remains a plain CPS function, i.e. can be called with the same callbacks:

CPS(cpsFn)(f1, f2, ...) // is equivalent to
cpsFn(f1, f2, ...)

pipeline(...arguments)(...functions)

Pass any number of arguments to a sequence of functions, one after another, similar to the UNIX pipe (x1, ..., xn) | f1 | f2 | ... | fm. Allows to write functional composition in the intiutive linear way.

Examples of pipeline

pipeline(1, 2)(
  (x, y) => x + y,
  sum => sum * 2,
  doubleSum => -doubleSum
) //=> -6

chaining

The CPS factory provides the same methods for simple chaining:

CPS(cpsFn).map(f).chain(g).filter(h)

However, the need to wrap a plain function might feel as overhead. The pipeline operator allows to write the same code in functional style without the need to wrap:

// pass cpsFn directly as argument
pipeline(cpsFn)(
  map(f),
  chain(g),
  filter(h)
)

But the most important advantage of the pipeline style is that you can drop there arbitrary functions without any need to patch object prototypes. For instance, using the above example, we can start our pipe with url or even insert some intermediate function to compute the correct url for us:

pipeline(path)(               // begin with path
  path => 'https://' + path  // compute url on the spot
  url => {console.log(url); return url} // check for debugging
  wsMessageListenerCps,       // return CPS function
  map(f),                     // use CPS operators as usual
  chain(g),
  filter(h)
)

map(...functions)(cpsFunction)

// these are equivalent
map(f1, f2, ...)(cpsFn)
CPS(cpsFn).map(f1, f2, ...)
pipeline(cpsFn)(map(f1, f2, ...))

For each n, apply fn to each output from the nth callback of cpsFn.

Result of applying map

New CPS function that calls its nth callback cbn as

cbn(fn(x1, x2, ...))

whenever cpsFn calls its nth callback.

Example of map

Using readFileCps as above.

// read file and convert all letters to uppercase
const getCaps = map(str => str.toUpperCase())(
  readFileCps('message.txt')
)
// or
const getCaps = CPS(readFileCps('message.txt'))
  .map(str => str.toUpperCase())
// or
const getCaps = pipeline(readFileCps('message.txt'))(
  map(str => str.toUpperCase())
)

// getCaps is CPS function, call with any callback
getCaps((err, data) => err 
  ? console.error(err) 
  : console.log(data)
) // => file content is capitalized and printed

chain(...functions)(cpsFunction)

// these are equivalent
chain(f1, f2, ...)(cpsFn)
CPS(cpsFn).chain(f1, f2, ...)
pipeline(cpsFn)(chain(f1, f2, ...))

where each fn is a curried function

// fn is expected to return a CPS function
const fn = (x1, x2, ...) => (cb1, cb2, ...) => { ... }

The chain operator applies each fn to each output from the nth callback of cpsFn, however, the CPS ouptup of fn is passed ahead instead of the return value.

Result of applying chain

New CPS function newCpsFn that calls fn(x1, x2, ...) whenever cpsFn passes output (x1, x2, ...) into its nth callback, and collects all outputs from all callbacks of all fns. Then for each fixed m, outputs from the mth callbacks of all fns are collected and passed into the mth callback cbm of newCpsFn:

cbm(y1, y2, ...)  // is called whenever 
cbmFn(y1, y2, ...)  // is called where
// cbmFn is the mth callback of fn

Example of chain

Using readFileCps as above.

// write version of readFileCps
const writeFileCps = (file, content) => (onRes, onErr) =>  
  require('fs').writeFile(file, content, (err, message) => {
    err ? onErr(err) : onRes(message)
  })

const copy = chain(
  // function that returns CPS function
  text => writeFileCps('target.txt', text)
)(
  readFileCps('source.txt')  // CPS function
)
// or as method
const copy = CPS(readFileCps('source.txt'))
  .chain(text => writeFileCps('target.txt', text))
// or with pipeline operator
const copy = pipeline(readFileCps('source.txt'))(
  chain(text => writeFileCps('target.txt', text))
)

// copy is a CPS function, call it with any callback
copy((err, data) => err 
  ? console.error(err) 
  : console.log(data)
) // => file content is capitalized and printed

filter(...predicates)(cpsFunction)

// these are equivalent
filter(pred1, pred2, ...)(cpsFn)
CPS(cpsFn).filter(pred1, pred2, ...)
pipeline(cpsFn)(filter(pred1, pred2, ...))

where each predn is the nth predicate function used to filter output from the nth callback of cpsFn.

Result of applying filter

New CPS function that calls its nth callback cbn(x1, x2, ...) whenever (x1, x2, ...) is an output from the nth callback of cpsFun and

predn(x1, x2, ...) == true

Example of filter

Using readFileCps and writeFileCps as above.

// only copy text if it is not empty
const copyNotEmpty = CPS(readFileCps('source.txt'))
  .filter(text => text.length > 0)
  .chain(text => writeFileCps('target.txt', text))

// copyNotEmpty is CPS function, call with any callback
copyNotEmpty(err => console.error(err))

scan(...reducers)(init)(cpsFunction)

Similar to reduce, except that all partial accumulated values are passed into callback whenever there is new output.

// these are equivalent
scan(red1, red2, ...)(init)(cpsFn)
(cpsFn).scan(red1, red2, ...)(init)
pipeline(cpsFn)(scan(red1, red2, ...)(init))

where each redn is a reducer and init is the initial accumulated value.

// compute new accumulator value from the old one 
// and the tuple of current values (y1, y2, ...)
const redn = (acc, y1, y2, ...) => ... 

Result of applying scan

New CPS function whose output from the first callback is the accumulated value. For each output (y1, y2, ...) from the nth callback, the nth reducer redn is used to compute the new acculated value redn(acc, y1, y2, ...), where acc starts with init, similar to reduce.

Example of scan

// CPS function with 2 callbacks, clicking on one
// of the buttons sends '1' into respective callback
const getVotes = (onUpvote, onDownvote) => {
  upvoteButton.addEventListener('click', 
    ev => onUpvote(1)
  )
  downvoteButton.addEventListener('click', 
    ev => onDownvote(1)
  )  
}
// count numbers of up- and downvotes and 
// pass into respective callbacks
const countVotes = CPS(getVotes)
  .scan(
    ([up, down], upvote) => [up + upvote, down], 
    ([up, down], downvote) => [up, down + downvote]
   )([0,0])

// countVotes is CPS function that we can call 
// with any callback
countVotes(
  votes => console.log('Total votes: ', votes),
)

ap(...cpsFunctions)(cpsFunction)

See running CPS functions in parallel. Inspired by the Applicative Functor interface, see e.g. https://funkia.github.io/jabz/#ap

lift(...functions)(cpsFunction) (TODO)

See lifting functions of multiple arguments The "sister" of ap, apply functions with multiple arguments to outputs of CPS functions running in parallel, derived from ap, see e.g. https://funkia.github.io/jabz/#lift

merge(...cpsFunctions) (TODO)

See CPS.merge. Merge outputs from multiple CPS functions, separately in each callback. E.g. separately merge results and errors from multiple promises running in parallel.

More details?

This README.md is kept minimal to reduce the package size. For more human introduction, motivation, use cases and other details, please see DOCUMENTATION.

License

MIT © Dmitri Zaitsev

Comments
  • Update ava to the latest version 🚀

    Update ava to the latest version 🚀

    The devDependency ava was updated from 2.4.0 to 3.0.0.

    This version is not covered by your current version range.

    If you don’t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Publisher: novemberborn License: MIT

    Release Notes for 3.0.0

    We're proud to introduce AVA 3! 🚀

    When we began AVA, JavaScript was very different. Most syntax you find familiar today was not supported by Node.js. Instead we relied on Babel to support that syntax before it made its way to Node.js itself.

    These days most new stage-4 syntax is adopted quickly. It's often not necessary to transpile anything. Therefore we're removing our built-in Babel support from AVA itself.

    Without Babel you'll have to resort to using require() functions in your JavaScript files. But, you say, Node.js 13 supports ECMAScript Modules!

    Well, we're getting there. For a start, AVA now also looks for .cjs files. And .mjs files are recognized too, but can't be loaded just yet. This also impacts ava.config.js files. If you'd like to help out delivering full .mjs support check out the issues in the ESM support project.

    Removing Babel allowed us to simplify how test files are selected. Likely non-test files, inside "fixture" or "helper" directories are ignored. The same for files that are inside an underscore-prefixed directory. We've made some other breaking changes in this area so please do read the full release notes.

    You can again pass glob patterns on the CLI. However these now filter the test files that AVA already selected based on the configuration. In other words you can't run files that wouldn't be run by invoking npx ava.

    AVA now interrupts your tests if there's no progress for 10 seconds. Use the timeout configuration or --timeout CLI option to change this.

    New features

    Built-in debug mode

    You can now debug individual test files using the V8 Inspector:

    npx ava debug test.js

    Connect to the debugger with Chrome DevTools. Or set up a debugger in VSCode.

    Configurable Node.js arguments

    You can now configure the arguments passed to Node.js itself when AVA starts its worker processes. Use the nodeArguments configuration or combine with the --node-arguments CLI option.

    All breaking changes

    Supported Node.js versions

    We now support Node.js 10, 12 and 13. The minimal versions are 10.18.0, 12.14.0 and 13.5.0 respectively.

    Removing Babel

    Utilize Babel with AVA by installing our @ava/babel package and then enabling Babel by setting babel: true in the AVA configuration. Having this as a separate package means it can evolve independently.

    The compileEnhancements setting has been moved into the babel configuration. Consequently, the t.assert() assertion will only print its detailed information when you use Babel. And we won't be able to catch typical mistakes with t.throws() as well as we could before.

    The ava/stage-4 preset is now available from @ava/babel/stage-4. Our old @ava/babel-preset-transform-test-files and @ava/babel-preset-stage-4 packages are no longer maintained and not installed with AVA itself.

    ECMAScript Module Support

    AVA now also looks for .cjs and .mjs test files. That said, .mjs files cannot be loaded just yet.

    Also, when you add "type": "module" , AVA would really like to treat .js files as ECMAScript Modules, but can't just yet.

    Similarly,ava.config.cjs configuration files are now supported. ava.config.mjs files not just yet.

    With AVA 2, we loaded ava.config.js files using the esm package. To avoid confusion between the different module formats we now only support export default statements. No import, no __filename. Configuration files that have dependencies should be written as a .cjs file for now.

    Configuration files can only have .cjs, .js and .mjs extensions.

    The remaining work is tracked in the ESM support project.

    File selection

    When you use the default configuration AVA will no longer select files matching the following glob patterns:

    • **/__tests__/**/__helper__/**/*
    • **/__tests__/**/__helpers__/**/*
    • **/__tests__/**/__fixture__/**/*
    • **/__tests__/**/__fixtures__/**/*
    • **/test/**/helper/**/*
    • **/test/**/helpers/**/*
    • **/test/**/fixture/**/*
    • **/test/**/fixtures/**/*
    • **/tests/**/helper/**/*
    • **/tests/**/helpers/**/*
    • **/tests/**/fixture/**/*
    • **/tests/**/fixtures/**/*

    Additionally, when a file has a parent directory that starts with a single underscore, it can never be a test file.

    test.js files are only selected if they're next to the package.json file, or inside top-level src and source directories.

    We've removed the configuration of helpers. Previously, files selected by the helpers glob patterns were never considered test files. Now that this configuration is no longer supported you'll need to ensure the files patterns exclude your helper files. If you're using Babel, you can configure the compilation of additional files .

    The sources configuration has also been removed. Instead, use the ignoredByWatcher configuration. Changes to files matched by these glob patterns will not cause the watcher to rerun tests.

    Negated sources patterns must be used without the negation in ignoredByWatcher:

     export default {
    -  sources: ['!examples/**/*']
    +  ignoredByWatcher: ['examples/**/*']
     }

    CLI changes

    Internally we've replaced meow by yargs. We're not expecting things to break because of this, but you never know.

    Resetting the cache

    The --reset-cache argument has been replaced by a proper reset-cache command:

    npx ava reset-cache

    File selection (again!)

    AVA again accepts glob patterns via the CLI:

    npx ava '**/api/**/*'

    The way this work is that AVA first finds all test files, according to the configuration, and then filters to select just the files that also match the glob patterns passed via the CLI.

    You can still pass paths to specific files:

    npx ava src/api/test/my-api-test.js

    However unlike with AVA 2, you can no longer specify test files that aren't already selected by AVA's configuration.

    t.throws() and t.throwsAsync() assertions

    The second argument passed to these assertions must now be an expectation object. You can no longer pass the expected constructor, error message or regular expression.

    Other breaking changes

    • Support for old esm versions has been removed.
    • We've set a default test timeout of 10 seconds. This means that if no test results are received for 10 seconds, AVA forces its worker processes to quit.
    • The NODE_PATH environment variable is no longer rewritten to ensure values are absolute paths.
    • AVA longer fakes the TTY in worker processes.

    Other changes

    • We've simplified how we identify observables. Any object returned by a test implementation that has a subscribe function is assumed to be an observable. AVA's type definition has been updated accordingly.
    • The TAP reporter now reports hook failures as test failures.
    • We've added an example of module path mapping to our TypeScript recipe.
    • We've added a Selenium WebDriver JS recipe.

    All changes

    v2.4.0...v3.0.0

    Thanks

    Thank you @tymfear, @HeathNaylor, @grnch, @alexdrans, @MoppetX, @jimmywarting, @micaelmbagira, @aptester, @theashraf, @sramam and @maximelkin. We couldn't have done this without you!

    Commits

    The new version differs by 86 commits.

    • b4cfc8d 3.0.0
    • 776788f Ship v3 🎉
    • 0d11ff7 More issue template tweaks
    • 9983976 Update various contributing documents and GitHub configuration
    • 5a33572 Fix fail-fast interrupt test
    • 61e0d05 Fix VSCode debugging instructions
    • 630aac3 Fix remaining AVA link
    • 5c8bcec Fix AVA link in snapshot reports
    • 7b20f6c Allow Node arguments to be configured
    • ad27246 3.0.0-beta.2
    • ae948d8 Lowercase CLI argument description asides
    • ac8c852 Update dependencies
    • 2bd890f Disable timeouts in debug mode
    • 15d73ca Make console & process globals available to ava.config.js files
    • efa8635 Fix patterns and unpin picomatch

    There are 86 commits in total.

    See the full diff


    FAQ and help

    There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 4
  • Upgrade ava: 3.11.0 → 3.11.1 (patch)

    Upgrade ava: 3.11.0 → 3.11.1 (patch)

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ ava (3.11.0 → 3.11.1) · Repo

    Release Notes

    3.11.1

    This release fixes corrupted output of the default reporter when test or program code writes to standard out. 5ddc9fd

    Also, thanks to @jonathansamines we've taken another step to using AVA to test AVA. 1150991

    See v3.11.0...v3.11.1 for all changes.

    Does any of this look wrong? Please let us know.

    Commits

    See the full diff on Github. The new version differs by 3 commits:


    Depfu Status

    Depfu will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with @depfu rebase.

    All Depfu comment commands
    @​depfu rebase
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Ignores all future updates for this dependency and closes this PR
    @​depfu pause [minor|major]
    Ignores all future minor/major updates for this dependency and closes this PR
    @​depfu resume
    Future versions of this dependency will create PRs again (leaves this PR as is)
    depfu 
    opened by depfu[bot] 3
  • [security] chore(deps-dev): bump standard-version from 8.0.0 to 8.0.1

    [security] chore(deps-dev): bump standard-version from 8.0.0 to 8.0.1

    Bumps standard-version from 8.0.0 to 8.0.1.

    Release notes

    Sourced from standard-version's releases.

    standard-version v8.0.1

    Bug Fixes

    • deps: update dependency conventional-changelog to v3.1.21 (#586) (fd456c9)
    • deps: update dependency conventional-changelog-conventionalcommits to v4.3.0 (#587) (b3b5eed)
    • deps: update dependency conventional-recommended-bump to v6.0.9 (#588) (d4d2ac2)
    • deps: update dependency git-semver-tags to v4 (#589) (a0f0e81)
    • Vulnerability Report GHSL-2020-11101 (9d978ac)
    Changelog

    Sourced from standard-version's changelog.

    8.0.1 (2020-07-12)

    Bug Fixes

    • deps: update dependency conventional-changelog to v3.1.21 (#586) (fd456c9)
    • deps: update dependency conventional-changelog-conventionalcommits to v4.3.0 (#587) (b3b5eed)
    • deps: update dependency conventional-recommended-bump to v6.0.9 (#588) (d4d2ac2)
    • deps: update dependency git-semver-tags to v4 (#589) (a0f0e81)
    • Vulnerability Report GHSL-2020-11101 (9d978ac)
    Commits
    • 57e4e25 chore: release 8.0.1 (#611)
    • 58105e1 chore: Adds basic issue templates (#613)
    • 9d978ac fix: Vulnerability Report GHSL-2020-11101
    • 267d78d chore: stop pinning deps (#615)
    • da84ec4 test(windows): skip mock-git tests for Windows (#616)
    • 871201f Merge pull request from GHSA-7xcx-6wjh-7xp2
    • a0f0e81 fix(deps): update dependency git-semver-tags to v4 (#589)
    • fd456c9 fix(deps): update dependency conventional-changelog to v3.1.21 (#586)
    • b3b5eed fix(deps): update dependency conventional-changelog-conventionalcommits to v4...
    • d4d2ac2 fix(deps): update dependency conventional-recommended-bump to v6.0.9 (#588)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies security 
    opened by dependabot-preview[bot] 3
  • chore(deps-dev): bump documentation from 13.1.1 to 13.2.1

    chore(deps-dev): bump documentation from 13.1.1 to 13.2.1

    Bumps documentation from 13.1.1 to 13.2.1.

    Changelog

    Sourced from documentation's changelog.

    13.2.1 (2021-04-06)

    13.2.0 (2021-03-13)

    Features

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • chore(deps-dev): bump standard-version from 9.1.1 to 9.2.0

    chore(deps-dev): bump standard-version from 9.1.1 to 9.2.0

    Bumps standard-version from 9.1.1 to 9.2.0.

    Release notes

    Sourced from standard-version's releases.

    standard-version v9.2.0

    Features

    • allows seperate prefixTag version sequences (#573) (3bbba02)
    Changelog

    Sourced from standard-version's changelog.

    9.2.0 (2021-04-06)

    Features

    • allows seperate prefixTag version sequences (#573) (3bbba02)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • chore(deps): [security] bump y18n from 4.0.0 to 4.0.2

    chore(deps): [security] bump y18n from 4.0.0 to 4.0.2

    Bumps y18n from 4.0.0 to 4.0.2. This update includes a security fix.

    Vulnerabilities fixed

    Sourced from The GitHub Security Advisory Database.

    Prototype Pollution

    Overview

    The npm package y18n before versions 3.2.2, 4.0.1, and 5.0.5 is vulnerable to Prototype Pollution.

    POC

    const y18n = require('y18n')();
    

    y18n.setLocale('proto'); y18n.updateLocale({polluted: true});

    console.log(polluted); // true

    Recommendation

    Upgrade to version 3.2.2, 4.0.1, 5.0.5 or later.

    Affected versions: = 4.0.0

    Changelog

    Sourced from y18n's changelog.

    4.0.2 (2021-04-07)

    Bug Fixes

    • security: ensure entry exists for backport (#120) (b22c0df)

    5.0.4 (2020-10-16)

    Bug Fixes

    • exports: node 13.0 and 13.1 require the dotted object form with a string fallback (#105) (4f85d80)

    5.0.3 (2020-10-16)

    Bug Fixes

    • exports: node 13.0-13.6 require a string fallback (#103) (e39921e)

    5.0.2 (2020-10-01)

    Bug Fixes

    5.0.1 (2020-09-05)

    Bug Fixes

    5.0.0 (2020-09-05)

    ⚠ BREAKING CHANGES

    • exports maps are now used, which modifies import behavior.
    • drops Node 6 and 4. begin following Node.js LTS schedule (#89)

    Features

    Build System

    ... (truncated)

    Commits
    • bcfdd05 chore: release (#122)
    • af90f17 build: fix json in manifest
    • d65aef1 build: add default branch
    • 910ff4c build: use appropriate releaser
    • b22c0df fix(security): ensure entry exists for backport (#120)
    • a9ac604 fix: address prototype pollution issue (#108)
    • 61a8b9a chore: release 5.0.4 (#106)
    • 4f85d80 fix(exports): node 13.0 and 13.1 require the dotted object form with a stri...
    • 3c4e241 chore: release 5.0.3 (#104)
    • e39921e fix(exports): node 13.0-13.6 require a string fallback (#103)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by oss-bot, a new releaser for y18n since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies security 
    opened by dependabot-preview[bot] 2
  • chore(deps): update dependency standard-version to v9.2.0 - autoclosed

    chore(deps): update dependency standard-version to v9.2.0 - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | standard-version | 9.1.1 -> 9.2.0 | age | adoption | passing | confidence |


    Release Notes

    conventional-changelog/standard-version

    v9.2.0

    Compare Source

    Features
    9.1.1 (2021-02-06)
    Bug Fixes
    • deps: update dependency conventional-recommended-bump to v6.1.0 (#​695) (65dd070)
    • deps: update dependency yargs to v16 (#​660) (f6a7430)

    Configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 2
  • chore(deps): [security] bump y18n from 4.0.0 to 4.0.1

    chore(deps): [security] bump y18n from 4.0.0 to 4.0.1

    Bumps y18n from 4.0.0 to 4.0.1. This update includes a security fix.

    Vulnerabilities fixed

    Sourced from The GitHub Security Advisory Database.

    Prototype Pollution

    Overview

    The npm package y18n before versions 3.2.2, 4.0.1, and 5.0.5 is vulnerable to Prototype Pollution.

    POC

    const y18n = require('y18n')();
    

    y18n.setLocale('proto'); y18n.updateLocale({polluted: true});

    console.log(polluted); // true

    Recommendation

    Upgrade to version 3.2.2, 4.0.1, 5.0.5 or later.

    Affected versions: = 4.0.0

    Changelog

    Sourced from y18n's changelog.

    Change Log

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    5.0.5 (2020-10-25)

    Bug Fixes

    5.0.4 (2020-10-16)

    Bug Fixes

    • exports: node 13.0 and 13.1 require the dotted object form with a string fallback (#105) (4f85d80)

    5.0.3 (2020-10-16)

    Bug Fixes

    • exports: node 13.0-13.6 require a string fallback (#103) (e39921e)

    5.0.2 (2020-10-01)

    Bug Fixes

    5.0.1 (2020-09-05)

    Bug Fixes

    5.0.0 (2020-09-05)

    ⚠ BREAKING CHANGES

    • exports maps are now used, which modifies import behavior.
    • drops Node 6 and 4. begin following Node.js LTS schedule (#89)

    Features

    ... (truncated)

    Commits
    Maintainer changes

    This version was pushed to npm by oss-bot, a new releaser for y18n since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies security 
    opened by dependabot-preview[bot] 2
  • chore(deps-dev): bump documentation from 13.1.1 to 13.2.0

    chore(deps-dev): bump documentation from 13.1.1 to 13.2.0

    Bumps documentation from 13.1.1 to 13.2.0.

    Changelog

    Sourced from documentation's changelog.

    13.2.0 (2021-03-13)

    Features

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • chore(deps): update dependency documentation to v13.2.1 - autoclosed

    chore(deps): update dependency documentation to v13.2.1 - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | documentation (source) | 13.2.0 -> 13.2.1 | age | adoption | passing | confidence |


    Release Notes

    documentationjs/documentation

    v13.2.1

    Compare Source


    Configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 2
  • Upgrade ava: 3.11.1 → 3.12.1 (minor)

    Upgrade ava: 3.11.1 → 3.12.1 (minor)

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ ava (3.11.1 → 3.12.1) · Repo

    Release Notes

    3.12.1

    Configure how AVA loads test files

    Normally, AVA loads all files as CommonJS, except for mjs files and if you've configured "type": "module" in your package.json.

    As an experiment, you can now configure how AVA loads other file extensions. This is useful if you want to use Node.js' experimental loaders feature. Read more in our documentation. Thank you @macarie for working on this! 5c9dbb9

    Comparison bugfix

    There was a bug in our comparison library which meant that negative-index properties on lists were not compared. This was fixed in a patch release, which will definitely be installed when you install AVA 3.12. Your tests may have been passing, even though they should have been failing. They'll fail now. Snapshots may also be different, causing tests to fail.

    All changes

    See v3.11.1...v3.12.1 for all changes.

    Thank you @AnthumChris for making sure our ESM example used ESM syntax (20bc781).

    Does any of this look wrong? Please let us know.

    Commits

    See the full diff on Github. The new version differs by 11 commits:


    Depfu Status

    Depfu will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with @depfu rebase.

    All Depfu comment commands
    @​depfu rebase
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Ignores all future updates for this dependency and closes this PR
    @​depfu pause [minor|major]
    Ignores all future minor/major updates for this dependency and closes this PR
    @​depfu resume
    Future versions of this dependency will create PRs again (leaves this PR as is)
    depfu 
    opened by depfu[bot] 2
  • ):

    ):

    https://github.com/dmitriz/cpsfy/blob/b044e2e4f6314998dc0442af77aaaabe1fd7e158/DOCUMENTATION.md#L1735-L1738


    This issue was generated by todo based on a TODO comment in b044e2e4f6314998dc0442af77aaaabe1fd7e158. It's been assigned to @dmitriz because they committed the code.
    todo :spiral_notepad: 
    opened by todo[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Ignored or Blocked

    These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

    Detected dependencies

    circleci
    .circleci/config.yml
    • circleci/node 17
    github-actions
    .github/workflows/codecov.yml
    • codecov/codecov-action v3
    .github/workflows/codeql.yml
    • actions/checkout v3
    • github/codeql-action v2
    • github/codeql-action v2
    • github/codeql-action v2
    .github/workflows/test.yml
    • actions/checkout v3
    npm
    package.json
    • ava 5.1.0
    • markdown-toc 1.2.0
    • tape ^4.16.1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(zenodo)
Memoize promise-returning functions. Includes cache expire and prefetch.

promise-memoize Memoize promise-returning functions. Includes cache expire and prefetch. When data expire mode enabled, new values are fetched in adva

Nodeca 56 Nov 1, 2022
Promisify a callback-style function

pify Promisify a callback-style function Install $ npm install pify Usage const fs = require('fs'); const pify = require('pify'); (async () => { //

Sindre Sorhus 1.5k Jan 4, 2023
Plain functions for a more functional Deku approach to creating stateless React components, with functional goodies such as compose, memoize, etc... for free.

"Keo" is the Vietnamese translation for glue. Plain functions for a more functional Deku approach to creating stateless React components, with functio

Adam Timberlake 225 Sep 24, 2022
Continuation of the Nebulous.io hack: Official bots made by Nyaanity.

How to install & use (for noobs) https://youtu.be/IC2kKSdM6Ik Setup (if u know what to do) Install requirements npm i Run (development build) npm run

null 11 Jan 5, 2023
A complete, fully tested and documented data structure library written in pure JavaScript.

Buckets A JavaScript Data Structure Library Buckets is a complete, fully tested and documented data structure library written in pure JavaScript. Incl

Mauricio 1.2k Jan 4, 2023
Small utility for react-redux's `useSelector` that allows passing args.

use-selector-with Monorepo for the following two packages: use-selector-with: Small utility for react-redux's useSelector that allows passing args. es

Codecademy 5 Jan 28, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
Adapter application for consuming web3 messages from ie. wallets, and passing them on to starknet

?? StarknNet web3 account Development setup Clone deps with submodules git clone --recurse-submodules [email protected]:software-mansion-labs/starknet-we

Software Mansion – Labs 20 Nov 21, 2022
Well-tested utility functions dealing with async iterables

aitertools This library provides a well-tested collection of small utility functions dealing with async iterables. You can think of it as LINQ or aite

Hong Minhee (洪 民憙) 11 Aug 15, 2022
A solid, fast Promises/A+ and when() implementation, plus other async goodies.

when.js When.js is a rock solid, battle-tested Promises/A+ and when() implementation, including a complete ES6 Promise shim. It's a powerful combinati

The Javascript Architectural Toolkit 3.4k Dec 18, 2022
Kysely dialects, plugins and other goodies for SurrealDB

kysely-surrealdb Kysely dialects, plugins and other goodies for SurrealDB. SurrealQL is based on SQL, so why not? Installation NPM 7+ npm i kysely-sur

Igal Klebanov 16 Jan 6, 2023
This repo contains a fully configured nuxt 3 instance supporting TypeScript and several considered as useful libraries, fully configured and ready to use in real world projects!

Nuxt 3 Starter This repo contains a fully configured nuxt 3 instance supporting TypeScript and several considered as useful libraries, fully configure

Ali Soueidan 26 Dec 27, 2022
Fully typed hooks and utility functions for the React Native StyleSheet API

react-native-style-utilities Fully typed hooks and utility functions for the React Native StyleSheet API npm i react-native-style-utilities ESLint Set

Marc Rousavy 73 Dec 17, 2022
Functions Recipes is a library of examples to help you getting started with Salesforce Functions and get used to their main features.

Functions Recipes Introduction Salesforce Functions lets you use the Salesforce Platform for building event-driven, elastically scalable apps and expe

Trailhead Apps 172 Dec 29, 2022
Simple to use, blazing fast and thoroughly tested WebSocket client and server for Node.js

ws: a Node.js WebSocket library ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and server implementation. Passes the quit

WebSockets 19.2k Jan 4, 2023
Web-pack based Todo-List Website built using HTML, CSS and JavaScript. Tested Using Jest.

To-DO List Live Link Additional description about the project and its features: Built With HTML and CSS Javascript HTML & CSS3 & JavaScript Linters Gi

Saadat Ali 8 Mar 31, 2022
Launchpad Pro Mk3 Controller Script for Bitwig (Tested on 4+, should work on 3.2.5+)

Launchpad Pro Mk3 for Bitwig (Bitwig Controller Script) A Bitwig controller script that matches (and expands) the functionality that Novation and Able

wes koop 34 Dec 20, 2022
Data structures & algorithms implementations and coding problem solutions. Written in Typescript and tested with Jest. Coding problems are pulled from LeetCode and Daily Coding Problem.

technical-interview-prep Data structures & algorithms implementations and coding problem solutions. Written in Typescript and tested with Jest. Coding

Lesley Chang 7 Aug 5, 2022