Classes for your scripts
This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/389765/1785927/CommonUtils.js
Shared utility classes for WME (Waze Map Editor) userscripts.
// @require https://greasyfork.org/scripts/389765-common-utils/code/CommonUtils.js?version=XXX
See last available version on the GreasyFork homepage
npm install
npm run build # one-off build → dist/Utils.user.js
npm run watch # rebuild on changes
Source is written in TypeScript under src/, built with Rollup into dist/Utils.user.js.
src/
├── meta.ts # userscript header
├── container.ts # Container class
├── simple-cache.ts # SimpleCache extends Container
├── settings.ts # Settings extends Container
├── tools.ts # Tools static class
└── index.ts # exposes all classes to global scope
A nested key-value store with path-based access:
let container = new Container()
// set nested values
container.set(['options', 'theme'], 'dark')
container.set(['options', 'lang'], 'uk')
// get nested values
container.get('options', 'theme') // 'dark'
container.get('options') // { theme: 'dark', lang: 'uk' }
container.get() // entire container
// check existence
container.has('options', 'theme') // true
container.has('options', 'color') // false
Simplified Container with flat key-value interface:
let cache = new SimpleCache()
cache.set('key', result)
cache.has('key') // true
cache.get('key') // result
Container backed by localStorage. Loads on construction, merges stored values over defaults:
// load settings (merges localStorage data over defaults)
let settings = new Settings('my-script', {
enabled: true,
radius: 200
})
// read
settings.get('enabled') // true
settings.get('radius') // 200
// update
settings.set(['radius'], 500)
// save to localStorage (call before page unload)
settings.save()
With jQuery:
$(window).on('beforeunload', () => settings.save())
Static utility methods:
// deep merge objects (preserves nested structure)
let result = Tools.mergeDeep({}, defaults, overrides)
// check if value is a plain object
Tools.isObject({}) // true
Tools.isObject([]) // false
Tools.isObject(null) // false
Author homepage: https://anton.shevchuk.name/
Script homepage: https://github.com/AntonShevchuk/common.utils
GreasyFork: https://greasyfork.org/uk/scripts/389765-common-utils