Comparing version 2.1.2 to 2.2.0
@@ -18,2 +18,3 @@ # SBP API | ||
- [`'sbp/selectors/unsafe'`](#sbpselectorsunsafe) | ||
- [`'sbp/selectors/lock'`](#sbpselectorslock) | ||
- [`'sbp/filters/global/add'`](#sbpfiltersglobaladd) | ||
@@ -64,3 +65,3 @@ - [`'sbp/filters/domain/add'`](#sbpfiltersdomainadd) | ||
Overwrite the implementation of a selector. | ||
Overwrite the implementation of a selector. Remember to call `'sbp/selectors/lock'` after overwriting. | ||
@@ -83,2 +84,3 @@ Only works on selectors that were marked unsafe using [`'sbp/selectors/unsafe'`](#sbpselectorsunsafe). | ||
}) | ||
sbp('sbp/selectors/lock', ['gi.db/get', 'gi.db/set', 'gi.db/delete']) | ||
} | ||
@@ -95,8 +97,22 @@ ``` | ||
- Function signature: `function (doms: [string])` | ||
- Function signature: `function (sels: [string])` | ||
Marks these selectors as overwritable via [`'sbp/selectors/overwrite'`](#sbpselectorsoverwrite). | ||
To use, must be called before registering any selectors. | ||
To use, must be called before registering these selectors. | ||
Selectors that are overwritten will also have access to the internal state of the domain via the `this` variable! | ||
Remember to call `'sbp/selectors/lock'` after overwriting! | ||
### `'sbp/selectors/lock'` | ||
- Function signature: `function (sels: [string])` | ||
Prevers these selectors from being overwritten again. | ||
Always call this after overwriting selectors unless they're designed to be left unsafe. | ||
Remember that | ||
### `'sbp/filters/global/add'` | ||
@@ -103,0 +119,0 @@ |
# History | ||
#### 2.2.0 | ||
- Added `'sbp/selectors/lock'`. Make sure to call this after overwriting any unsafe selectors! | ||
- Improved console warnings | ||
#### 2.1.2 | ||
@@ -4,0 +9,0 @@ |
19
index.js
@@ -47,4 +47,8 @@ // @flow | ||
if (selectors[selector]) { | ||
(console.warn || console.log)(`[SBP WARN]: not registering already registered selector: ${selector}`) | ||
(console.warn || console.log)(`[SBP WARN]: not registering already registered selector: '${selector}'`) | ||
} else if (typeof sels[selector] === 'function') { | ||
if (unsafeSelectors[selector]) { | ||
// important warning in case we loaded any malware beforehand and aren't expecting this | ||
(console.warn || console.log)(`[SBP WARN]: registering unsafe selector: '${selector}' (remember to lock after overwriting)`) | ||
} | ||
const fn = selectors[selector] = sels[selector] | ||
@@ -77,7 +81,14 @@ registered.push(selector) | ||
'sbp/selectors/unsafe': function (sels: [string]) { | ||
if (Object.keys(domains).length > 1) { // 1 because 'sbp' is registered first thing | ||
throw new Error('must be called before registering any selectors') | ||
for (const selector of sels) { | ||
if (selectors[selector]) { | ||
throw new Error('unsafe must be called before registering selector') | ||
} | ||
unsafeSelectors[selector] = true | ||
} | ||
sels.forEach(s => { unsafeSelectors[s] = true }) | ||
}, | ||
'sbp/selectors/lock': function (sels: [string]) { | ||
for (const selector of sels) { | ||
delete unsafeSelectors[selector] | ||
} | ||
}, | ||
'sbp/selectors/fn': function (sel: string): Function { | ||
@@ -84,0 +95,0 @@ return selectors[sel] |
{ | ||
"name": "@sbp/sbp", | ||
"version": "2.1.2", | ||
"version": "2.2.0", | ||
"description": "Selector-based Programming: JavaScript Edition", | ||
@@ -5,0 +5,0 @@ "main": "dist/main.cjs", |
@@ -9,3 +9,3 @@ # SBP: A Programming Paradigm for Building Secure Software and Operating Systems | ||
- SBP replaces the need for OOP in many situations | ||
- SBP is based on message-passing (an idea from Smalltalk) and comes with all of the benefits that message-passing architectures afford | ||
- SBP is inspired by message-passing (ObjC/Smalltalk/etc) and comes with all of the benefits that message-passing architectures afford | ||
- SBP embraces the LISP idea that `code = data` and gives you all of the benefits and possibilities that affords | ||
@@ -176,3 +176,3 @@ - SBP makes it easier to debug and understand your code | ||
The JavaScript SBP library comes with 8 predefined core selectors: | ||
SBP comes with the following predefined core selectors: | ||
@@ -184,2 +184,3 @@ - `'sbp/selectors/register'` | ||
- `'sbp/selectors/unsafe'` | ||
- `'sbp/selectors/lock'` | ||
- `'sbp/filters/global/add'` | ||
@@ -186,0 +187,0 @@ - `'sbp/filters/domain/add'` |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
51465
368
268