Observed since 20 Oct, 22:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A collection of tools for roughly (but quickly) parsing CSS, HTML and JavaScript
A collection of tools for roughly (but quickly) parsing CSS, HTML and JavaScript.
∅ Version: 0.0.6
∅ NPM: https://www.npmjs.com/package/@0bdx/semi-parser
∅ Repo: https://github.com/0bdx/semi-parser
∅ Homepage: https://0bdx.com/semi-parser
@TODO add an overview
npm i @0bdx/semi-parser
Require an LTS Node version (v14.0.0+).
@TODO add the redactJs() description
import { equal } from 'assert';
import { redactJs } from '@0bdx/semi-parser';
// In this JavaScript source code, we'd like to replace the identifier
// `foo` with `ok`, without changing the comment, or the string 'foo',
const source = `let foo = 'foo'; console.log(foo); // displays "foo"`;
console.log(`source:\n ${source}`);
// Define a simple regular expression which finds "foo" multiple times.
// The `g` flag makes exec() search repeatedly - tinyurl.com/mr2puud2
const rx = /foo/g;
// "foo" appears four times in `source`, ending at 7, 14, 32 and 51.
const endPositions = [];
while (rx.exec(source)) endPositions.push(rx.lastIndex);
equal(endPositions.join(), '7,14,32,51');
// Fill the string with dashes, and replace the comment with spaces.
const result = redactJs(source); // no 2nd argument, so default options
equal(result, "let foo = '---'; console.log(foo); ");
// "foo" only appears twice in `result`, ending at positions 7 and 32.
// Fill an array with the parts of `source` which do not contain "foo".
let parts = [], from = 0;
while (rx.exec(result)) {
const endPos = rx.lastIndex;
parts.push(source.slice(from, endPos - 3)); // 'foo' length is 3
from = endPos;
}
parts.push(source.slice(from)); // the part after the final "foo"
// Join the parts into a string, with 'ok' placed between each part.
const replaced = parts.join('ok');
equal(replaced, `let ok = 'foo'; console.log(ok); // displays "foo"`);
console.log(`replaced:\n ${replaced}`);
You can find the redactJs() example in the
src/redact-js/ directory, and run it using:
npm run example-1
git --version # should be 'git version 2.20.1' or greaternode --version # should be 'v14.0.0' or greatertsc --version # should be 'Version 4.9.4' or greatertsserver to highlight errors in src/ JavaScript filestsc is needed to generate the semi-parser.d.ts type declarationcode --version # should be '1.74.3' or greaterjeremyljackson.vs-docblock
extension.dnamsons.kimbie-dark-plus
theme.Clone the repository, and cd into it.
git clone git@github.com:0bdx/semi-parser.git && cd semi-parser
Install Rollup, the only dependency.
npm i
Rollup 3.10.1 adds 2 packages, 2.5 MB, 29 items.
Open semi-parser in VS Code.
code .
Run all tests on the in-development source code:
npm test
Run each example, one by one:
npm run example:1
npm run example:2
Or run all the examples:
npm run examples
Build semi-parser.js and semi-parser.d.ts:
npm run build:production
npm run build:typings
Run all tests on the built semi-parser.js file:
npm run preflight:test
Check that semi-parser.js uses all types correctly:
npm run preflight:types
Or run all the build and preflight steps in one line, eg before committing:
npm run build && npm run preflight
Display what will be published:
npm publish --dry-run
Publish to npmjs.com/package/@0bdx/semi-parser:
npm publish
npm · 90 observations shown. Missing days are unknown.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-20 – 2026-10-20 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-19 – 2026-10-19 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-18 – 2026-10-18 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-17 – 2026-10-17 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-16 – 2026-10-16 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-15 – 2026-10-15 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-14 – 2026-10-14 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-13 – 2026-10-13 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-12 – 2026-10-12 | 8 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-11 – 2026-10-11 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-10 – 2026-10-10 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-09 – 2026-10-09 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-08 – 2026-10-08 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-07 – 2026-10-07 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-06 – 2026-10-06 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-05 – 2026-10-05 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-04 – 2026-10-04 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-03 – 2026-10-03 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-02 – 2026-10-02 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-10-01 – 2026-10-01 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-30 – 2026-09-30 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-29 – 2026-09-29 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-28 – 2026-09-28 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-27 – 2026-09-27 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-26 – 2026-09-26 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-25 – 2026-09-25 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-24 – 2026-09-24 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-23 – 2026-09-23 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-22 – 2026-09-22 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-21 – 2026-09-21 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-20 – 2026-09-20 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-19 – 2026-09-19 | 3 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-18 – 2026-09-18 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-17 – 2026-09-17 | 38 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-16 – 2026-09-16 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-15 – 2026-09-15 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-14 – 2026-09-14 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-13 – 2026-09-13 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-12 – 2026-09-12 | 12 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-11 – 2026-09-11 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-10 – 2026-09-10 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-09 – 2026-09-09 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-08 – 2026-09-08 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-07 – 2026-09-07 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-06 – 2026-09-06 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-05 – 2026-09-05 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-04 – 2026-09-04 | 31 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-03 – 2026-09-03 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-02 – 2026-09-02 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-09-01 – 2026-09-01 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-31 – 2026-08-31 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-30 – 2026-08-30 | 9 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-29 – 2026-08-29 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-28 – 2026-08-28 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-27 – 2026-08-27 | 3 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-26 – 2026-08-26 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-25 – 2026-08-25 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-24 – 2026-08-24 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-23 – 2026-08-23 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-22 – 2026-08-22 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-21 – 2026-08-21 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-20 – 2026-08-20 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-19 – 2026-08-19 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-18 – 2026-08-18 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-17 – 2026-08-17 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-16 – 2026-08-16 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-15 – 2026-08-15 | 51 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-14 – 2026-08-14 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-13 – 2026-08-13 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-12 – 2026-08-12 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-11 – 2026-08-11 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-10 – 2026-08-10 | 10 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-09 – 2026-08-09 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-08 – 2026-08-08 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-07 – 2026-08-07 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-06 – 2026-08-06 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-05 – 2026-08-05 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-04 – 2026-08-04 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-03 – 2026-08-03 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-02 – 2026-08-02 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-08-01 – 2026-08-01 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-31 – 2026-07-31 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-30 – 2026-07-30 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-29 – 2026-07-29 | 1 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-28 – 2026-07-28 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-27 – 2026-07-27 | 0 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-26 – 2026-07-26 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-25 – 2026-07-25 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-24 – 2026-07-24 | 6 | 2026-10-21T15:14:26.9685319Z |
| 2026-07-23 – 2026-07-23 | 0 | 2026-10-21T15:14:26.9685319Z |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:bd93e00317773bf78ec15cb08fc69e427f59b3039e03c68bed0d50ef4d277fd0