open-index/open-npm huggingface dataset:
npm package: @lumjs/build
Description: An internal development package for other `@lumjs` packages to use. Not meant for use outside that scope.
Latest version: 1.2.0

# lum.build.js

An internal development package for other `@lumjs` packages to use.
Not meant for use outside that scope.

Currently has a script for building some meta-docs that can be included with
the documentation generated by jsdocs, as well as a jsdoc configuration 
builder with a bunch of my own default rules.

As I'm planning to support ES modules and possibly Typescript in the future,
this will be the package that gets the build tools for doing any transpiling.

## TODO

I want to overhaul this significantly, making a cleaner, more modular API.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.build.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/build)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/compat
Description: Compatibility helpers.
Latest version: 2.0.0

# lum.compat.js

Compatibility helpers.

As of version 2.0, this is a nano-package with zero dependencies that
currently provides a simple bridge between CommonJS and ES Modules.

## Branches

### `main`

The `2.x` releases are from this branch.

### `v1.x`

The original package was a bunch of compatibility wrappers for [@lumjs/core],
and covered versions `1.0.0` through `1.4.0`.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.compat.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/compat)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[@lumjs/core]: https://github.com/supernovus/lum.core.js
npm package: @lumjs/core
Description: Some small *core* constants, functions, classes, and objects. Things that make working with objects in Javascript slightly nicer, and work in CommonJS/Node.js and modern browsers without any modifications.
Latest version: 1.38.8

# lum.core.js

Some small *core* constants, functions, classes, and objects.
Things that make working with objects in Javascript slightly nicer,
and work in CommonJS/Node.js and modern browsers without any modifications.

Used by all the rest of my *Lum.js* libraries.

## Notes

As of version `1.30.0` the `opt.Opts` class has been split into its the new
[@lumjs/opts] package, which itself depends on a new [@lumjs/errors] package.

Until the next major release (`2.0`), this package will have
a dependency on the split-away pacakages, so that it can have a deprecated
alias to the old class name available. As of `2.0` that alias will be
removed, and the dependencies will also be removed.

## Documentation

### [API Docs](https://supernovus.github.io/docs/js/@lumjs/core/)

The documentation is written in [JSDoc 3](https://jsdoc.app/) format.

You can compile the documentation using `npm run build-docs`
which will put the generated docs into the `./docs/api` folder.

### [Changelog](./docs/changelogs/1.x.md)
### [TODO](./docs/TODO.md)
### [Homepage](https://supernovus.github.io/)

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.core.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/core)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

---

[@lumjs/opts]: https://github.com/supernovus/lum.opts.js
[@lumjs/errors]: https://github.com/supernovus/lum.errors.js
npm package: @lumjs/cp
Description: Functions and classes for copying properties and cloning objects.
Latest version: 1.0.0

# lum.cp.js

Functions and classes for copying properties and cloning objects.

Most everything in here is overkill and will likely be retired in the future.

## TODO

- Write tests for everything in here.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.cp.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/cp)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/debug
Description: Some simple debugging helpers.
Latest version: 1.0.0

# lum.debug.js

Some simple debugging helpers.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.debug.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/debug)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/defer
Description: A few helpers for providing *deferred* functionality using standard Javascript objects and functions like `Promise`, `setTimeout`, etc.
Latest version: 1.0.0

# lum.defer.js

A few helpers for providing *deferred* functionality using standard
Javascript objects and functions like `Promise`, `setTimeout`, etc.

## Exports

If it exports multiple items from a module object, you can list them in a
table format, and give a short description.

| Name                 | Description                                          |
| -------------------- | ---------------------------------------------------- |
| ItemName             | A short description of the item.                     | 

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.defer.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/defer)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/describe
Description: A package designed to describe various kinds of JS values in a human-friendly fashion. Meant for use in testing and such.
Latest version: 1.0.0

# lum.describe.js

A package designed to describe various kinds of JS values
in a human-friendly fashion. Meant for use in testing and such.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.describe.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/describe)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/dom
Description: A small set of DOM helpers wrapped in a minimalist core.
Latest version: 1.4.0

# lum.dom.js

A small set of DOM helpers wrapped in a minimalist core.

## Features

- Wraps a `window` object so it works in browser or Node.js with `jsdom`.
- Has a bunch of simple type tests.
- Simple method wrappers for common functionality:
  - `dom.elem()` → `document.createElement()`
  - `dom.frag()` → `document.createDocumentFragment()`
  - `dom.parse()` → `(new DOMParser()).parseFromString()`
  - `dom.html()` → Use `dom.parse()` forcing HTML, and return the element(s).
    Can optionally run `dom.extend()` on the returned value automatically.
  - `dom.xml()` → Use `dom.parse()` forcing XML, and return the document 
    element. Can optionally run `dom.extend()` automatically.
- A `Query` library which extends `querySelector` and `querySelectorAll`.
  - Use `dom.query` for access to a default library instance.
  - Has a `dom.find()` shortcut method to find multiple nodes.
    Can *optionally* return an `HTMLCollection` instead of a `NodeList`.
  - Has a `dom.get()` shortcut method to find a single node.
  - With `dom.options.extendQueries` set to `true`, results from
    either of the shortcut methods use `dom.extend()` automatically.
- An `Events` library to make working with event handlers easier.
  - Supports building delegated event handlers automatically.
  - Use `dom.events` for access to a default library instance.
  - Has `dom.on(), dom.off(), dom.trigger()` shortcut methods.
- An `Extender` library to add additional methods and accessor properties 
  to `Node`, `NodeList`, or `HTMLCollection` object instances.
  - Use `dom.extender` for access to a default library instance.
  - Has a `dom.extend()` shortcut method.
- A `ListCompiler` library for building `NodeList` and `HTMLCollection`
  objects, which normally cannot be constructed manually.
  - Use `dom.listCompiler` for access to a default library instance.
  - Used by the `Query` library to build composite lists, and to
    convert `NodeList` results into `HTMLCollection` results when asked to.
  - Can be easily extended to add other DOM objects without constructors. 

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.dom.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/dom)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/dotjs
Description: A minimalistic library for using JS configuration files, along with defaults passed as objects.
Latest version: 1.1.0

# lum.dotjs.js

A minimalistic library for using JS configuration files,
along with defaults passed as objects.

Supports both ESM and CommonJS module formats.

## Examples

First off import the library. If using ES Modules:

```js
import dotjs from '@lumjs/dotjs';
```

Or if using CommonJS:

```js
const dotjs = require('@lumjs/dotjs');
```

Now that it's loaded, the sytax is the same.

```js
const DEFAULT_OPTS = {someOption: true, anotherOption: false};
const config = await dotjs(DEFAULT_OPTS, 'config.defaults.js', 'config.js');
```

It will ignore any files that don't exist. Also, all file paths are relative
to the current _working directory_, so keep that in mind.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.dotjs.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/dotjs)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/doxs
Description: ## NOTE: Inactive project
Latest version: 1.1.0

# lum.doxs.js

## NOTE: Inactive project

This thing had some cool ideas, but overall is way too convoluted.
So I'm shelving it for now (as well as the PHP library that inspired it.)
I may end up tearing out the core without any rendering engine plugins
and releasing it separately as a new package at some point. I'll leave the
code up in case anyone wants to use parts of it as a basis for something else,
but no further development will go into this.

## Description

A document markup format integrating multiple rendering engines into
a single component. The default set being [Twing], [Marked], and [Textile].

Inspired by my older [lum-wiki] PHP library, but meant for in-browser 
rendering instead of server-side, and abandoning all the wiki-formatting 
stuff in favour of making it more flexible instead.

It also has [DOMPurify] and FrontMatter (YAML-headers) support.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.doxs.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/doxs)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[Twing]: https://github.com/NightlyCommit/twing
[Marked]: https://github.com/markedjs/marked
[Textile]: https://github.com/borgar/textile-js
[DOMPurify]: https://github.com/cure53/DOMPurify
[lum-wiki]: https://github.com/supernovus/lum.wiki.php
npm package: @lumjs/encode
Description: A bunch of encoding libraries.
Latest version: 2.6.1

# lum.encode.js

A bunch of encoding libraries.

## 2.x Release Notes

Version `2.0` is pretty much a complete rewrite, and as the major version
change indicates, is not 100% backwards compatible. I've tried to make the
migration process as painless as possible, but some changes will be required.

- Split the [Safe64] libraries into their own package.
- Rewrote the `base64` and `hash` libraries to use modern `ES2015+` APIs.
- Dropped the dependency on the legacy `crypto-js` package.
- The `base64` libraries now have additional `async` functions for working
  with arbitrary data in addition to the synchronous ones for Unicode text.
- The `hash` library now uses `async` methods due to the `SubtleCrypto` API
  that we're now using for generating the hashes.
- Minor cleanups in `base91` and `utils` modules.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.encode.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/encode)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

---

[Safe64]: https://github.com/supernovus/lum.safe64-data.js
npm package: @lumjs/errors
Description: A simple class for handling error messages with support for a lot of customization and flexibility.
Latest version: 1.0.0

# lum.errors.js

A simple class for handling error messages with support for a lot
of customization and flexibility.

### Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.errors.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/errors)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/events
Description: An empty template for new Lum.js npm packages.
Latest version: 1.0.0

# lum.events.js

An empty template for new Lum.js npm packages.

## Exports

### Function
### Class

If the library exports a single function/class, use one of the singular names.
Then describe the function/class here.

### Classes
### Functions
### Objects
### Constants

If it exports multiple items from a module object, you can list them in a
table format, and give a short description.

| Name                 | Description                                          |
| -------------------- | ---------------------------------------------------- |
| ItemName             | A short description of the item.                     | 

#### AnotherItemName

Another way to list items is using a sub-list.

## NPM Scripts

List any custom NPM `scripts` defined in the `package.json` here.

## CLI Scripts

List any command line scripts in a `bin` directory here.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.events.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/events)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/events-observable
Description: An implementation of the _Observable_ API using the [@lumjs/events] library.
Latest version: 1.0.1

# lum.events-observable.js

An implementation of the _Observable_ API using the [@lumjs/events] library.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.events-observable.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/events-observable)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[@lumjs/events]: https://github.com/supernovus/lum.events.js
npm package: @lumjs/expressions
Description: A simple expression parser.
Latest version: 1.0.1

# lum.expressions.js

A simple expression parser.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.expressions.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/expressions)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/finder
Description: A library with a few functions meant for basic filtering basic data models.
Latest version: 1.0.1

# lum.finder.js

A library with a few functions meant for basic filtering basic data models.

It's not meant to be a comprehensive library, but a starting point for
your own models. It's designed primarily for arrays containing object items.

## Dependencies

Version 1.0 of this library has _zero_ runtime dependencies. It doesn't even
depend on [@lumjs/core] like most of my @lumjs libraries. That _may_ change
when version 2.0 of my core library is released, but that could be a while.

This does have a couple _development_ dependencies, but as I'm the only 
developer on the @lumjs libraries, that shouldn't affect anyone else.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.finder.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/finder)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[@lumjs/core]: https://github.com/supernovus/lum.core.js
npm package: @lumjs/formatting
Description: Classes for formatting various text formats.
Latest version: 1.0.0

# lum.formatting.js

Classes for formatting various text formats.

Currently only supports `JSON` and `XML`.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.formatting.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/formatting)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/given-when
Description: A class that can return specific values and/or run callbacks depending on the values passed to it, using flexible rules.
Latest version: 1.0.0

# lum.given-when.js

A class that can return specific values and/or run callbacks depending on
the values passed to it, using flexible rules.

See the tests for a few examples.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.given-when.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/given-when)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/grid
Description: An extremely basic class for calculating flexible grids. This version has no actual code related to a user interface, it simply generates the grid as a Javascript object.
Latest version: 1.0.0

# lum.grid.js

An extremely basic class for calculating flexible grids.
This version has no actual code related to a user interface, it simply
generates the grid as a Javascript object.

See below for extensions that provide different UI use-cases.

## Exports

| Name                    | Description                                       |
| ----------------------- | ------------------------------------------------- |
| `@lumjs/grid`           | The Grid class with default conflict methods.     |
| `@lumjs/grid/grid`      | The core Grid class with _no_ conflict methods.   |
| `@lumjs/grid/resolvers` | The default set of conflict resolution methods.   |

## Extensions

* [@lumjs/web-grid](https://github.com/supernovus/lum.web-grid.js)
* [@lumjs/jquery-ui-grid](https://github.com/supernovus/lum.jquery-ui-grid.js)

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.grid.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/grid)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/gulp-helper
Description: Helper library for Lum gulpfiles
Latest version: 2.0.1

# Lum Gulp Helper

## Summary

Just a helper library for own project gulpfiles.
May or may not be useful for anyone else.

Supports both monolithic `gulpfile.js`, or modular `gulpfile.js/index.js`
style files. Will continue to grow as my libraries are split up further.

## Description

Many of my libraries and apps that use gulpfiles have a few very common
types of tasks/rules, and I figured if they're almost always the same,
why continue to duplicate the functionality in multiple places.

So this library simply acts as a wrapper around `gulp` and a few of the
common plugins and tasks I use such as `del`, `gulp-terser`, `gulp-sass`,
`gulp-sourcemaps`, `gulp-concat`, `gulp-file-cache`, etc.

It also has optional support for `gulp-babel`, but I'm currently not using
any transcoding in my own apps as every *supported* browser supports modern
Javascript/ECMAScript, so I'm not too worried about it.

## Package Versions

This package was originally published *before* I had introduced the `@lumjs`
namespace for my `npm` packages, and used the `lum-gulp-helper` package name
for the `1.x` branch.

For the `2.x` branch, this has moved to the `@lumjs/gulp-helper` package name,
and the [@lumjs/core] package is used, replacing any placeholder functions I'd
used with proper library imports.

## Future Plans

I am thinking at some point I will split the library up into standalone
modules that can be used independently of each other, as well as offering
some kind of integration with my [@lumjs/webpack-helper] library 
to make Gulp and Webpack work together in cases where both may be required.

## Official URLs

This library can be found in three places:

 * [Github](https://github.com/supernovus/lum.gulp-helper.js)
 * [NPM, new package](https://www.npmjs.com/package/@lumjs/gulp-helper)
 * [NPM, old package](https://www.npmjs.com/package/lum-gulp-helper)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[@lumjs/core]: https://github.com/supernovus/lum.core.js
[@lumjs/webpack-helper]: https://github.com/supernovus/lum.webpack-helper.js
npm package: @lumjs/html-xml
Description: A collection of constants, functions, sample documents (for tests), and other  useful components for working with `HTML`, `XML`, and/or `XHTML` documents.
Latest version: 1.0.0

# lum.html-xml.js

A collection of constants, functions, sample documents (for tests), and other 
useful components for working with `HTML`, `XML`, and/or `XHTML` documents.

Does not require either [@lumjs/web-core] or [@lumjs/dom] as dependencies.
Both [@lumjs/tests-dom] and [@lumjs/web-tests] use this package to provide 
common declarations and utility functions for their testing integrations.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.html-xml.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/html-xml)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)


[@lumjs/dom]: https://github.com/supernovus/lum.dom.js
[@lumjs/web-core]: https://github.com/supernovus/lum.web-core.js
[@lumjs/tests-dom]: https://github.com/supernovus/lum.tests-dom.js
[@lumjs/web-tests]: https://github.com/supernovus/lum.web-tests.js
npm package: @lumjs/jquery-formatting
Description: Simple jQuery plugins for any exported function modules in the  [@lumjs/formatting](https://github.com/supernovus/lum.formatting.js) package.
Latest version: 1.0.0

# lum.jquery-formatting.js

Simple jQuery plugins for any exported function modules in the 
[@lumjs/formatting](https://github.com/supernovus/lum.formatting.js) package.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.jquery-formatting.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/jquery-formatting)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/jquery-plugins
Description: A collection of jQuery plugins from my orignal Lum.js collection, now split off into their own package.
Latest version: 1.2.0

# lum.jquery-plugins.js

A collection of jQuery plugins from my orignal Lum.js collection, now
split off into their own package.

They've been redesigned to be modular, and can be disabled again, which
will restore jQuery to its previous state.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.jquery-plugins.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/jquery-plugins)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/jquery-ui-grid
Description: A class for calculating flexible grids in web apps with [jQuery UI] providing the key layout and event handling capabilities.
Latest version: 1.0.0-beta.1

# lum.jquery-ui-grid.js

A class for calculating flexible grids in web apps with [jQuery UI]
providing the key layout and event handling capabilities.

## Stability Status

I am still in the process of testing this after porting the code
from the old monolithic library set, and there's strange bugs that
show up in the conflict resolution methods in this version that don't
happen in the Lum.sh v4 version. Until I figure out why, I will not mark
this as the stable `1.0.0`.

## Exports

| Name                         | Description                                  |
| ---------------------------- | -------------------------------------------- |
| `@lumjs/jquery-ui-grid`      | The class with default conflict methods.     |
| `@lumjs/jquery-ui-grid/grid` | The class with _no_ conflict methods.        |
| `@lumjs/jquery-ui-grid/jqui` | A virtual package to load jQuery UI.         |

## Extends

* [@lumjs/web-grid](https://github.com/supernovus/lum.web-grid.js)
  * [@lumjs/grid](https://github.com/supernovus/lum.grid.js)

## Deprecation Notice

[jQuery UI is deprecated], and so is this. I'm planning on writing a
replacement using modern HTML5 DOM technologies, so this one can be retired.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.jquery-ui-grid.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/jquery-ui-grid)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)


[jQuery UI]: https://jqueryui.com/
[jQuery UI is deprecated]: https://blog.jqueryui.com/2021/10/jquery-maintainers-update-and-transition-jquery-ui-as-part-of-overall-modernization-efforts/
npm package: @lumjs/lists
Description: Some classes and functions related to arrays, maps, sets, etc.
Latest version: 1.0.0

# lum.lists.js

Some classes and functions related to arrays, maps, sets, etc.

These used to be part of the [@lumjs/core] `arrays` sub-module, 
but most of these things were pretty specialized and didn't belong
in the core package, so they've been moved here.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.lists.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/lists)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)


[@lumjs/core]: https://github.com/supernovus/lum.core.js
npm package: @lumjs/mongo-utils
Description: Simple helpers for working with MongoDB JSON data structures.
Latest version: 1.0.0

# lum.mongo-utils.js

Simple helpers for working with MongoDB JSON data structures.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.mongo-utils.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/mongo-utils)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/opts
Description: A class for handling options with multiple sources.
Latest version: 1.0.0

# lum.opts.js

A class for handling options with multiple sources.

It extends the functions in the `opt` module of the [@lumjs/core] package.
It used to live in that module as `@lumjs/core/opt.Opts`, but as it's fairly
specialized, I've extracted it to be a standalone single-export package.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.opts.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/opts)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

---

[@lumjs/core]: https://github.com/supernovus/lum.core.js
npm package: @lumjs/oquery
Description: A library for performing queries on an array of objects.
Latest version: 1.1.0

# lum.oquery.js

A library for performing queries on an array of objects.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.oquery.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/oquery)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/proxy-model
Description: A base class for creating data models that use a Proxy to handle conversion of data to and from its serialized format, as well as offering observable-like events that can watch for changes to the data.
Latest version: 1.3.0

# lum.proxy-model.js

A base class for creating data models that use a Proxy to
handle conversion of data to and from its serialized format,
as well as offering observable-like events that can watch
for changes to the data.

Comes with a couple pre-defined type converters for data
serialized from MongoDB into its Extended JSON (v2) format.

It's not perfect by any stretch, nor is it complete, and it's 
entirely undocumented at the moment with no test suite. 
All things I plan to fix in the next release, I promise!

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.proxy-model.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/proxy-model)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/safe64-data
Description: A pure-JS implementation of my [Safe64] data serialization format.
Latest version: 2.0.0

# lum.safe64-data.js

A pure-JS implementation of my [Safe64] data serialization format.

This used to be part of the [@lumjs/encode] package, but has been split
out into its own standalone package as it's pretty specialized.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.safe64-data.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/safe64-data)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

---

[Safe64]: https://github.com/supernovus/lum.encode.php
[@lumjs/encode]: https://github.com/supernovus/lum.encode.js
npm package: @lumjs/service-worker
Description: Helper classes for working with Service Workers.
Latest version: 0.21.0

# lum.service-worker.js

Helper classes for working with Service Workers.

## Status

This package is still in development, and does not have a stable API yet.

## Exports

### `@lumjs/service-worker/context`

A class for use inside a Service Worker context. Provides a few simplistic
methods and sub-classes for handling caches and a few other features.

### `@lumjs/service-worker/window`

A class for use in a browser window to register, active, and commuicate with
a Service Worker.

### `@lumjs/service-worker`

Returns the `context` class if loaded in a Service Worker,
or the `window` class if loaded in a browser window.

If the current JS context is neither a window or a service worker,
(e.g. called directly from node.js) an error object will be returned.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.service-worker.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/service-worker)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/simple-data
Description: Some classes for working with simple data structures.
Latest version: 1.1.0

# lum.simple-data.js

Some classes for working with simple data structures.

## Exports

### `@lumjs/simple-data`

This simply re-exports the classes from the `model` and `cache` modules
as `Model` and `Cache` respectively. It's a quick way to get all of the
currently exported modules in a single import.

### `@lumjs/simple-data/model`

A *base class* for building data models in a way that is at least slightly
less convoluted than the [@lumjs/proxy-model] package. Classes extending this
simply generate (customizable) accessor properties on instances.

Unlike the aforementioned package, this does not include any pre-defined
type converters, but using functions from the [@lumjs/mongo-utils] package
(or similar libraries) is fairly easy to set up by adding explicit accessors
to your model classes, or by using an optional `setupProps()` method.

At some point I plan to make an optional *property accessor factory*, 
as well as some plugin packages to make the process of defining customized
accessors even easier than it already is.

To give an idea of how much simpler the code is, over half the lines in the
main class file are *documentation comments*!

### `@lumjs/simple-data/cache`

An extremely minimalist class for making simple data caches.

This extends the JS `Map` class, overriding the `get()` method so that you
can specify a closure function that will return a value to be cached if the
specified key was not already found in the map entries. That's it! If you
want more features than that, you can write a class that extends this.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.simple-data.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/simple-data)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[@lumjs/proxy-model]: https://github.com/supernovus/lum.proxy-model.js
npm package: @lumjs/simple-loader
Description: A simple resource loader, mostly meant for web browser use, but can be used in a limited way in other places.
Latest version: 3.1.0

# lum.simple-loader.js

A simple resource loader, mostly meant for web browser use, but can be used
in a limited way in other places.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.simple-loader.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/simple-loader)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/tax
Description: Extremely minimal tax calculation functions.
Latest version: 2.0.0

# lum.tax.js

Extremely minimal tax calculation functions.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.tax.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/tax)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/tests
Description: An extremely simple and minimal testing framework.
Latest version: 2.2.0

# lum.tests.js

An extremely simple and minimal testing framework.

This is nowhere near as advanced as many of the other options out there,
but does what I need it to do, and works with the TAP testing protocol that
the Perl and Raku programming languages popularized.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.tests.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/tests)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/tests-dom
Description: Helpers for working with tests that use the (now deprecated) [@lumjs/dom](https://github.com/supernovus/lum.dom.js) package.
Latest version: 2.0.0

# lum.tests-dom.js

Helpers for working with tests that use the (now deprecated)
[@lumjs/dom](https://github.com/supernovus/lum.dom.js) package.

I will shortly release an alternative to this package that uses my new
[@lumjs/web-core](https://github.com/supernovus/lum.web-core.js) library.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.tests-dom.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/tests-dom)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/traits
Description: A traits system that I wrote as a sub-module of [@lumjs/core], but don't think really belonged there. So now it's got its own package.
Latest version: 1.0.0

# lum.traits.js

A traits system that I wrote as a sub-module of [@lumjs/core], but don't think
really belonged there. So now it's got its own package.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.traits.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/traits)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[@lumjs/core]: https://github.com/supernovus/lum.core.js
npm package: @lumjs/tyst
Description: A small set of functions for working with _typed strings_.
Latest version: 1.0.0

# lum.tyst.js

A small set of functions for working with _typed strings_.

This is not a universal serialisation system, as it does not by default
store any type information in the serialised strings. Instead it is based
on a model where you know exactly what type a specific value should be.

I guess you could use this as the foundation for a more universal system,
but it's designed more for being a simple wrapper around storage systems that
only support strings, but where you may need to store values that cannot be
directly encoded as JSON but which are simple enough to encode as a string.

## Exports

### `getValueType(value, opts)`

Get a type name and handler function (if applicable) for any JS value.
The names are mostly just what `typeof` returns, but uses `'null'` instead
of calling null and object, and by default uses `int` and `float` instead
of `number` for slightly more flexibility when dealing with numeric values.

### `parseFunction(str, opts)`

Parses a string representation of a JS function into a Function.
It supports a multitude of function string formats, including:

```js
function name(arg1, arg2) { ... } // variable args, regular body
function(arg1, arg2) { ... }      // variable args, regular body
arg => statement                  // single arg, single statement
(arg1, arg2) => statement         // variable args, single statement
arg => { ... }                    // single arg, regular body
(arg1, arg2) => { ... }           // variable args, regular body
```

Function names are ignored, single-statement functions will by default 
have `'return '` prepended to the body, and all functions are generated 
using `new Function()`; see the actual documentation for more details.

### `parseTypedString(strval, defval, opts)`

Given a string representing a JS value, and a default value (which isn't 
optional as it is used to determine what type of value to decode the string
into), this uses getValueType() to get the type info, and will use 
parseFunction() if the type name is `function` (assuming that no custom 
`function` handler was set in the options that is).

Read the function docs for info on how it handles all the other types.

### `toTypedString(value, opts)`

This uses getValueType(), and then will serialise the value into a format
that parseTypedString() will be able to parse. If you use custom handlers
when serialising, you'll obviously need to make sure you have corresponding
handlers to pass to parseTypedString() as well.

### Transcoder

A class that you can create an instance of, passing options that will
be used as defaults for both encoding and decoding.

You can also make sub-classes with specially named methods that will
be used to automatically generate custom handlers.

## TODO

- Tests

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.tyst.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/tyst)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/web-app
Description: A minimalist framework for building web apps using the `@lumjs` libraries.
Latest version: 1.5.1

# lum.web-app.js

A minimalist framework for building web apps using the `@lumjs` libraries.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-app.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-app)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/web-core
Description: A small collection of basic fundamental functions and classes for web apps.
Latest version: 1.11.0

# lum.web-core.js

A small collection of basic fundamental functions and classes for web apps.

Just as [@lumjs/core] is the foundation upon which all of my `@lumjs/*` 
packages are built, `@lumjs/web-core` will become the foundation for 
all of my `@lumjs/web-*` pacakges.

## Related `@lumjs` packages

There are several packages that are either direct extensions of this one,
or are related to it in one way or another.

### Active/Current

* [web-core-extra] → An extension package to provide useful features
  that are outside the scope of the minimalistic `web-core` package.
  Currently includes a wrapper class. More to come later.

### Planned/In-development

* [web-tests] → A complimentary package for connecting the [@lumjs/tests]
  package to the `web-core` package, with _modular_ test environments, 
  including _optional_ [jsdom] support.

### Deprecated/Retired

* [@lumjs/dom] → My first attempt at a web-app foundation.
  This supported using [jsdom] directly on the server-side and due to
  several questinable design choices was entirely overkill for basic needs.
* [tests-dom] → A package extending [@lumjs/tests] to support the older 
  [@lumjs/dom] package. A lot of `web-tests` will be based on this, but
  re-written to work with `web-core` instead of `@lumjs/dom`.

### Other...

There's also an entire collection of `@lumjs/web-*` packages (most are still 
in planning, only a few are published) that will make writing web apps fun!
(I won't say _easy_, as nothing in web development is *ever* easy... 🤪)

And of course the rest of the `@lumjs/*` packages that aren't specifically
designed for use in web apps, but many of which work just fine in that
environment (generally if it isn't using _Node.js_ specific features, it
can be _compiled_ with your bundler of choice to use it in web apps.)

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-core.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-core)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)


[jsdom]: https://github.com/jsdom/jsdom
[@lumjs/core]: https://github.com/supernovus/lum.core.js
[@lumjs/tests]: https://github.com/supernovus/lum.tests.js
[web-core-extra]: https://github.com/supernovus/lum.web-core-extra.js
[web-tests]: https://github.com/supernovus/lum.web-tests.js
[@lumjs/dom]: https://github.com/supernovus/lum.dom.js
[tests-dom]: https://github.com/supernovus/lum.tests-dom.js
npm package: @lumjs/web-core-extra
Description: These are useful functions and classes that are outside the scope of the minimalistic [@lumjs/web-core] package, but are small enough that they  don't warrant having their own standalone package.
Latest version: 1.2.0

# lum.web-core-extra.js

These are useful functions and classes that are outside the scope of the
minimalistic [@lumjs/web-core] package, but are small enough that they 
don't warrant having their own standalone package.

This includes a `Wrapper` class that can handle a single element,
or a collection of elements, and provides a bunch of useful
methods and properties that in many cases simply wrap the `web-core` 
functionality in a more object-oriented shell.
 
There's not much else here yet, but this package will likely grow over time.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-core-extra.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-core-extra)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)


[@lumjs/web-core]: https://github.com/supernovus/lum.web-core.js
npm package: @lumjs/web-css
Description: A class offering CSS helpers for in the browser.
Latest version: 1.1.0

# lum.web-css.js

A class offering CSS helpers for in the browser.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-css.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-css)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/web-debug
Description: Extensions of [@lumjs/debug](https://github.com/supernovus/lum.debug.js) with added features specifically use in web browsers.
Latest version: 1.1.0

# lum.web-debug.js

Extensions of [@lumjs/debug](https://github.com/supernovus/lum.debug.js) with
added features specifically use in web browsers.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-debug.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-debug)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/web-dialog
Description: Helpers for working with dialog elements
Latest version: 1.1.0

# lum.web-dialog.js

Helpers for working with dialog elements

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-dialog.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-dialog)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/web-draggable-list
Description: A class for making lists that allow drag-and-drop reordering of items. Includes the [drag-drop-touch] wrapper class for ensuring the drag-and-drop features work on touch screen devices as well.
Latest version: 1.2.1

# lum.web-draggable-list.js

A class for making lists that allow drag-and-drop reordering of items.
Includes the [drag-drop-touch] wrapper class for ensuring the drag-and-drop
features work on touch screen devices as well.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-draggable-list.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-draggable-list)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)

[drag-drop-touch]: https://github.com/drag-drop-touch-js/dragdroptouch
npm package: @lumjs/web-grid
Description: A class for calculating flexible grids for use in web apps. Currently has only very basic UI capabilities.
Latest version: 1.0.1

# lum.web-grid.js

A class for calculating flexible grids for use in web apps.
Currently has only very basic UI capabilities.

See below for extensions that add to the capabilities.

## Exports

| Name                    | Description                                       |
| ----------------------- | ------------------------------------------------- |
| `@lumjs/web-grid`       | The WebGrid class with default conflict methods.  |
| `@lumjs/web-grid/grid`  | The WebGrid class with _no_ conflict methods.     |

## Extends

* [@lumjs/grid](https://github.com/supernovus/lum.grid.js)

## Extensions

* [@lumjs/jquery-ui-grid](https://github.com/supernovus/lum.jquery-ui-grid.js)

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-grid.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-grid)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)
npm package: @lumjs/web-service
Description: A package for defining web service APIs in web apps.
Latest version: 1.3.1

# lum.web-service.js

A package for defining web service APIs in web apps.

## Summary

Is not a port of my old webservice.js from the old Lum.js/Nano.js collection.
Instead it is an entirely new package written from the ground up, and uses
the [Fetch], [URL], and [File] APIs that all modern browsers support.

If the client browser doesn't support those APIs, this library is useless,
but if the browser doesn't support those APIs, it's ancient, obsolete,
and entirely unsupported. YMMV.

## TODO

Nothing too high up on the priority list, but a few _would like_ features:

- Helpers to make working with binary (`Blob`, etc.) _Request_ data easier.
- Helpers to make working with `FormData` _Request_ data easier.
- Helpers to make working with binary _Response_ data easier.

## [Examples](docs/EXAMPLES.md)

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-service.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-service)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)


[Fetch]: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
[URL]: https://developer.mozilla.org/en-US/docs/Web/API/URL_API
[File]: https://developer.mozilla.org/en-US/docs/Web/API/File_API
npm package: @lumjs/web-status-messages
Description: A class for showing temporary messages that fade in then fade out again.
Latest version: 1.0.0

# lum.web-status-messages.js

A class for showing temporary messages that fade in then fade out again.

## Official URLs

This library can be found in two places:

 * [Github](https://github.com/supernovus/lum.web-status-messages.js)
 * [NPM](https://www.npmjs.com/package/@lumjs/web-status-messages)

## Author

Timothy Totten <2010@totten.ca>

## License

[MIT](https://spdx.org/licenses/MIT.html)