@blamejs/core 0.9.8 → 0.9.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/lib/cli.js +9 -3
- package/lib/db-schema.js +4 -1
- package/lib/external-db-migrate.js +4 -1
- package/lib/migrations.js +3 -1
- package/lib/seeders.js +3 -1
- package/lib/vendor-data.js +40 -16
- package/package.json +5 -3
- package/sbom.cdx.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,10 @@ upgrading across more than a few patches at a time.
|
|
|
8
8
|
|
|
9
9
|
## v0.9.x
|
|
10
10
|
|
|
11
|
+
- v0.9.12 (2026-05-13) — **Republish of v0.9.10 / v0.9.11 — `npm audit signatures` grep widened for the npm-message variant that fires post-v0.9.11**. The publish workflow's "Verify npm registry signing chain" step treats an empty-tree result as success (the framework's zero-runtime-deps posture means `npm audit signatures --omit dev` finds nothing to audit). The exact phrasing has drifted across npm versions: older npm prints `found no installed dependencies to audit`; newer npm (the version on the GH Actions runner post-v0.9.11) prints `found no dependencies to audit that were installed from a supported registry`. The shell guard's grep only matched the older phrasing, so v0.9.11's publish failed at the audit-signatures gate even though every other step succeeded. The grep is now `no (installed )?dependencies to audit` — covers both known empty-tree variants. v0.9.10's broken-smoke fix (added `npm install` before smoke) plus v0.9.12's audit-signatures-grep fix together complete the publish-pipeline repair. v0.9.12 is functionally identical to v0.9.10's intended surface. Operators stuck at v0.9.9 (because v0.9.10 + v0.9.11 never reached the npm registry) jump directly to v0.9.12.
|
|
12
|
+
- v0.9.11 (2026-05-13) — **Republish of v0.9.10 — npm-publish.yml now installs devDependencies before smoke**. v0.9.10's tag was pushed and the GitHub release published, but `npm-publish.yml`'s Framework-smoke step ran `node test/smoke.js` without first running `npm install`. The new bundler-output gate added in v0.9.10 requires `esbuild` (a devDependency) to be present, so the publish workflow failed at the smoke step before reaching the publish step — the v0.9.10 npm tarball was never published. The fix adds `npm install --no-audit --no-fund` to `.github/workflows/npm-publish.yml` directly before the smoke step (mirroring the same fix already present in `.github/workflows/ci.yml`). Operators consuming via `npm install @blamejs/core` should pull v0.9.11; functionally identical to the intended-v0.9.10 surface. Zero runtime deps invariant preserved.
|
|
13
|
+
- v0.9.10 (2026-05-13) — **Bundler-output e2e gate** — `test/layer-5-integration/bundler-output.test.js`. Bundles the framework via `esbuild --bundle --platform=node` (also `--minify`), runs the bundled consumer, and asserts the four-layer vendor-data integrity surface (dual-hash + SLH-DSA signature + canary) survives bundling. The PSL canary roundtrips through `b.publicSuffix.isPublicSuffix(...)` after bundle exec — proves the `.data.js` payloads physically reached the bundle bytes, not just the runtime require shape. Plus a byte-search sentinel that grep's the produced bundle for the canary tokens directly (defense-in-depth, independent failure mode from the runtime path). Plus a SEA gate (Linux + Node >= 22 only) that runs `--experimental-sea-config` + `postject` to produce an actual single-executable binary and runs it. The whole class of bugs — dynamic-require breaks bundling, SEA `assets` map missing, esbuild static-trace failures — is now smoke-gated. Had this test existed when v0.9.8 published, it would have refused that release at smoke-time (the v0.9.8 dynamic-require defect produced bundles that exited with `vendor-data/module-missing` on first vendor-data access; this gate's `BUNDLE-OK psl=co.uk entries=3` stdout-check refuses that exit). No framework-surface changes.
|
|
14
|
+
- v0.9.9 (2026-05-13) — **`b.vendorData`: replace dynamic `require(variable)` with static literal-string requires so SEA / esbuild / pkg bundling actually works**. v0.9.8 shipped `b.vendorData` to remove `__dirname`-relative `fs.readFileSync` calls and make the loader packaging-mode-invariant. The implementation looked up each `.data.js` module via `require(entry.module)` where `entry.module` was read from a frozen lookup table — a *dynamic* require, opaque to every bundler's static-analysis pass. esbuild, webpack, ncc, rollup, pkg, nexe, Bun's bundler, and Deno's bundler all trace `require("./literal")` calls; none of them trace `require(variable)`. Result: the three `.data.js` payload modules never made it into SEA / pkg / esbuild bundles, defeating the v0.9.8 promise at boot ("vendor-data/module-missing" thrown by every consumer that bundled the framework). v0.9.9 replaces the lookup with a `_MODULES` table whose three values are each a top-level `var X = require("./vendor/<name>.data")` — literal string, statically traceable. Caught by hermitstash-sync operator review post-v0.9.8 publish. Net surface change: zero (the public `b.vendorData.get` / `getAsString` / `verifyAll` / `inventory` shape is identical); the fix is internal-only. **New codebase-patterns drift detector** `testNoDynamicRequires` refuses any future `require(variable)` in `lib/`; legitimate operator-extensibility points (`b.cli`, migrations, seeders) carry an explicit `allow:dynamic-require` marker with rationale. **Operators upgrade from v0.9.8 to v0.9.9 if they bundle the framework via SEA / esbuild / pkg / Bun-compile** — direct `node` consumers were unaffected (Node's runtime require always resolves dynamic strings correctly).
|
|
11
15
|
- v0.9.8 (2026-05-13) — **`b.vendorData` — packaging-mode-invariant + signed + canary-guarded loader for vendored data files**. The three plaintext vendor data files (`public-suffix-list.dat`, `common-passwords-top-10000.txt`, `bimi-trust-anchors.pem`) are now loaded via inline `Buffer.from(base64)` modules (`<name>.data.js`), eliminating the `__dirname`-relative `fs.readFileSync` paths that broke under Single Executable Application (SEA), `pkg`, `nexe`, esbuild, Bun compile, Deno compile, and AWS Lambda layer bundling. Every load runs four orthogonal integrity checks before returning a byte: SHA-256 + SHA3-512 + SLH-DSA-SHAKE-256f signature against the maintainer's pinned public key (`lib/vendor/.vendor-data-pubkey`) + in-payload canary entry that the parsed structure must surface. Tamper at any layer throws `VendorDataError` at module-load — fail-fast rather than first-request-touches-PSL surprise. **Public API**: `b.vendorData.get(name)` returns the verified Buffer; `b.vendorData.getAsString(name)` returns UTF-8 string; `b.vendorData.verifyAll()` runs all four layers across every registered vendor data file and is invoked at framework boot; `b.vendorData.inventory()` returns per-file metadata (name, source, fetchedAt, sha256, sha3_512, signedBy, canary, byteLength, description) for compliance reporting + SBOM emission. **Migrated call sites**: `b.publicSuffix` (PSL load), `b.auth.password._loadBundledCommon` (common-passwords), `b.mail.bimi` (trust anchors) now route through `b.vendorData` — removes any downstream consumer's need to patch the loader for SEA / bundler builds. **Maintainer signing infrastructure**: vendor data files signed at refresh time by a maintainer-held SLH-DSA-SHAKE-256f keypair (private key stays in `.keys/` and is never committed; public key ships in `lib/vendor/.vendor-data-pubkey` in every npm tarball). Adds a fourth orthogonal trust root alongside SSH-signed release tags + SLSA L3 npm provenance + Sigstore-keyless SBOM signatures. **MANIFEST.json**: per-vendor-data entry gains `runtime_artifact` + `integrity_layers` + dual-file `hashes` (raw `.dat/.txt/.pem` + companion `.data.js`). **New scripts**: `scripts/vendor-data-keygen.js` (one-time keypair generation), `scripts/vendor-data-gen.js` (generator invoked by `scripts/vendor-update.sh --refresh-data`).
|
|
12
16
|
- v0.9.7 (2026-05-13) — **SECURITY.md: release-tag verification path documented + signed-tag invariant from v0.9.7+**. SECURITY.md gains a "Verifying release authenticity" section documenting how operators verify a release tag's authenticity independently of GitHub's UI. The maintainer Ed25519 SSH signing key fingerprint (`SHA256:5oF/XWhFpMde9TRfEX2GAHiApAq/MXOS4vti5zQbD7g`) is published alongside the public-key retrieval URL (`https://github.com/dotCooCoo.keys`) and a `git tag -v` recipe that bypasses the "Verified" badge. From v0.9.7 onward, every release tag is an annotated SSH-signed tag; the repository's `release-tags` ruleset's `required_signatures` rule refuses any unsigned or lightweight tag push at the server side. Earlier tags (v0.9.6 and prior) remain as lightweight commits and don't verify via `git tag -v`; they continue to verify via the SLSA L3 npm provenance + Sigstore-keyless SBOM signatures already attached to those releases (the `cosign verify-blob` recipe is in the same SECURITY.md section). No framework-surface changes; this release ships the documentation + invariant only.
|
|
13
17
|
- v0.9.6 (2026-05-12) — **`b.vex` (OASIS CSAF 2.1 VEX) + framework-control compliance posture sweep**. *(PR feedback: CSAF-conformance fixes folded in pre-merge — `cwes` is now a list per §3.2.3.4 instead of a singleton `cwe` field; CWE alone is no longer accepted as a vulnerability identity per §3.2.3.2 (operator supplies `cveId` or `ids[]: [{ systemName, text }]` per §3.2.3.5); TLP allowlist corrected to TLP 2.0 (FIRST 2022) per §3.2.1.12.1.1 — `CLEAR / GREEN / AMBER / AMBER+STRICT / RED` (added the previously-omitted `AMBER+STRICT` restriction tier and removed the legacy TLP 1.0 `WHITE` label, which was renamed `CLEAR` in TLP 2.0). Public opt name `cwe` is now `cweId` to mirror `cveId`; this is a v0.9.6 surface that never shipped to npm so the rename is not a breaking change.)* Closes the framework-side findings from the 2026-05-11 exceptd framework-gap-analysis (49 gaps across CVE-triage / framework-compliance / threat-modeling / AI-security / identity-assurance / crypto-posture / supply-chain / sector-specific). **`b.vex.statement({ cveId, status, productIds, justification?, impactStatement?, references?, firstReleased?, lastUpdated? })`** builds an OASIS CSAF 2.1 §3.2.3 vulnerability statement with `product_status` keyed by status enum (`known_not_affected` / `affected` / `fixed` / `under_investigation`), `flags[].label` for §3.2.2.7 justifications (`component_not_present` / `vulnerable_code_not_present` / `vulnerable_code_not_in_execute_path` / `vulnerable_code_cannot_be_controlled_by_adversary` / `inline_mitigations_already_exist`), and `notes[].text` for impact narrative. Refuses missing CVE/CWE id, malformed CVE shape, unknown status, missing productIds, and `known_not_affected` without justification. **`b.vex.document({ documentId, title, publisher, trackingId, trackingVersion, currentReleaseDate, initialReleaseDate, statements, tlp? })`** assembles the §3.2 CSAF document envelope with category `csaf_vex`, csaf_version `2.1`, publisher category `vendor`, tracking status `final`, and `distribution.tlp.label` (default `CLEAR`; refuses non-TLP labels). **`b.vex.serialize(doc)`** routes through `b.canonicalJson.stringify` for byte-stable sorted-key output then re-indents at 2 spaces for human-diffable artifacts. Exports `STATUS_VALUES` / `JUSTIFICATION_VALUES` / `TLP_LABELS` / `CSAF_VERSION` / `VexError`. **25 new compliance postures** added to `b.compliance.KNOWN_POSTURES` (with matching `POSTURE_DEFAULTS` cascade entries): `nist-800-53` (NIST SP 800-53 Rev 5 control catalog), `nist-ai-rmf-1.0` (NIST AI Risk Management Framework 1.0), `iso-42001-2023` (AI management systems), `iso-23894-2023` (AI risk management guidance), `owasp-llm-top-10-2025` (LLM application risk catalog), `owasp-asvs-v5.0` (Application Security Verification Standard v5.0), `nist-800-218-ssdf` (Secure Software Development Framework), `nist-800-82-r3` (industrial control systems), `nist-800-63b-rev4` (digital identity authenticator guidance), `iec-62443-3-3` (industrial security), `fedramp-rev5-moderate` (federal cloud baseline), `hipaa-security-rule` (45 CFR §164.302-318 administrative + technical safeguards), `hitrust-csf-v11.4` (healthcare common security framework), `nerc-cip-007-6` (bulk electric system cyber asset security), `psd2-rts-sca` (PSD2 Regulatory Technical Standards for Strong Customer Authentication), `swift-cscf-v2026` (SWIFT Customer Security Controls Framework 2026), `slsa-v1.0-build-l3` (SLSA build-track L3 provenance), `vex-csaf-2.1` (the standard `b.vex` emits), `cyclonedx-v1.6` (already shipped via `sbom.cdx.json`), `spdx-v3.0` (SPDX 3.0 software bill of materials), `owasp-wstg-v5` (Web Security Testing Guide v5), `ptes` (Penetration Testing Execution Standard), `nist-800-115` (technical guide to information security testing), `cwe-top-25-2024` (CWE most dangerous software weaknesses 2024), `cis-controls-v8` (Center for Internet Security Critical Controls v8), `cmmc-2.0-level-2` (DoD CMMC Level 2 advanced; complements the existing `cmmc-2.0` posture). Each cascade entry encodes the regime's data-tier mandate (encrypted backups + signed audit chain + TLS 1.3 minimum + vacuum-after-erase where applicable).
|
package/lib/cli.js
CHANGED
|
@@ -426,14 +426,20 @@ var API_SNAPSHOT_USAGE = [
|
|
|
426
426
|
].join("\n");
|
|
427
427
|
|
|
428
428
|
function _resolveTargetModule(modulePath, ctx) {
|
|
429
|
-
// Default: load index.js from the framework root (one level up from lib/cli.js)
|
|
429
|
+
// Default: load index.js from the framework root (one level up from lib/cli.js).
|
|
430
|
+
// Dynamic require by design — the CLI loads either the framework root index.js
|
|
431
|
+
// or an operator-supplied module path from the command line. Operator-
|
|
432
|
+
// extensibility surfaces by definition can't be statically traced by a
|
|
433
|
+
// bundler — anyone bundling this CLI surface into SEA/pkg accepts that
|
|
434
|
+
// runtime --module=<path> arguments won't resolve. Internal framework
|
|
435
|
+
// code never reaches this path.
|
|
430
436
|
if (!modulePath) {
|
|
431
437
|
var root = path.resolve(__dirname, "..");
|
|
432
|
-
return require(path.join(root, "index.js"));
|
|
438
|
+
return require(path.join(root, "index.js")); // allow:dynamic-require — operator-extensibility entry point
|
|
433
439
|
}
|
|
434
440
|
var abs = path.isAbsolute(modulePath) ? modulePath : path.resolve(ctx.cwd, modulePath);
|
|
435
441
|
delete require.cache[require.resolve(abs)];
|
|
436
|
-
return require(abs);
|
|
442
|
+
return require(abs); // allow:dynamic-require — operator-extensibility entry point
|
|
437
443
|
}
|
|
438
444
|
|
|
439
445
|
function _runApiSnapshot(args, ctx) {
|
package/lib/db-schema.js
CHANGED
|
@@ -283,7 +283,10 @@ function runMigrations(database, migrationDir) {
|
|
|
283
283
|
var fullPath = path.join(migrationDir, file);
|
|
284
284
|
var mig;
|
|
285
285
|
try {
|
|
286
|
-
|
|
286
|
+
// Operator-supplied migration file — by definition not statically
|
|
287
|
+
// require-able by a bundler. Anyone bundling this surface into SEA
|
|
288
|
+
// accepts that runtime migration loading won't resolve.
|
|
289
|
+
mig = require(fullPath); // allow:dynamic-require — operator-supplied migration
|
|
287
290
|
} catch (e) {
|
|
288
291
|
throw new Error("migration '" + file + "' failed to load: " + e.message);
|
|
289
292
|
}
|
|
@@ -290,7 +290,10 @@ function _loadMigration(file, dir) {
|
|
|
290
290
|
// new content. Matches lib/migrations.js semantics.
|
|
291
291
|
try { delete require.cache[require.resolve(fullPath)]; } catch (_e) { /* not yet cached */ }
|
|
292
292
|
var mod;
|
|
293
|
-
|
|
293
|
+
// Operator-supplied migration file — dynamic by design, won't survive
|
|
294
|
+
// SEA / pkg bundling. External DB migration tooling is host-CLI scope,
|
|
295
|
+
// not framework-internal scope.
|
|
296
|
+
try { mod = require(fullPath); } // allow:dynamic-require — operator-supplied migration
|
|
294
297
|
catch (e) {
|
|
295
298
|
throw _err("externaldb-migrate/load-failed",
|
|
296
299
|
"migration '" + file + "' failed to load: " + ((e && e.message) || String(e)));
|
package/lib/migrations.js
CHANGED
|
@@ -241,7 +241,9 @@ function _loadMigration(file, dir) {
|
|
|
241
241
|
// keeps test fixtures sane.
|
|
242
242
|
try { delete require.cache[require.resolve(fullPath)]; } catch (_e) { /* not yet cached */ }
|
|
243
243
|
var mod;
|
|
244
|
-
|
|
244
|
+
// Operator-supplied migration — dynamic by design, can't be bundle-
|
|
245
|
+
// traced. Host-CLI scope; deploying via SEA / pkg drops this surface.
|
|
246
|
+
try { mod = require(fullPath); } // allow:dynamic-require — operator-supplied migration
|
|
245
247
|
catch (e) {
|
|
246
248
|
throw new MigrationError("migrations/load-failed",
|
|
247
249
|
"migration '" + file + "' failed to load: " + ((e && e.message) || String(e)),
|
package/lib/seeders.js
CHANGED
|
@@ -176,7 +176,9 @@ function _loadSeed(rootDir, env, file) {
|
|
|
176
176
|
// between calls picks it up. Production restarts the process anyway.
|
|
177
177
|
try { delete require.cache[require.resolve(fullPath)]; } catch (_e) { /* not yet cached */ }
|
|
178
178
|
var mod;
|
|
179
|
-
|
|
179
|
+
// Operator-supplied seed — dynamic by design, can't be bundle-traced.
|
|
180
|
+
// Host-CLI scope; deploying via SEA / pkg drops this surface.
|
|
181
|
+
try { mod = require(fullPath); } // allow:dynamic-require — operator-supplied seed
|
|
180
182
|
catch (e) {
|
|
181
183
|
throw _err("LOAD_FAILED",
|
|
182
184
|
"seed '" + env + "/" + file + "' failed to load: " + ((e && e.message) || String(e)));
|
package/lib/vendor-data.js
CHANGED
|
@@ -52,21 +52,46 @@ var pqcSoftware = require("./pqc-software");
|
|
|
52
52
|
// rotates (scripts/vendor-data-keygen.js).
|
|
53
53
|
var PUBKEY_PEM = require("./vendor/vendor-data-pubkey");
|
|
54
54
|
|
|
55
|
+
// Static require()s — every modern bundler (esbuild, webpack, ncc,
|
|
56
|
+
// rollup, Bun's bundler, Deno's bundler) traces these at bundle time
|
|
57
|
+
// only when the require() argument is a STRING LITERAL. A dynamic
|
|
58
|
+
// `require(variable)` is opaque to static analysis: bundlers can't
|
|
59
|
+
// determine what files to include, so the .data.js payloads silently
|
|
60
|
+
// fall out of the SEA / pkg / nexe / esbuild blob and the SEA-mode
|
|
61
|
+
// promise of v0.9.8 is defeated at boot. Each require below sits at
|
|
62
|
+
// column 0 with a literal-string argument so static analysis traces
|
|
63
|
+
// them; codebase-patterns enforces this via the testNoDynamicRequires
|
|
64
|
+
// + testNoInlineRequires detectors.
|
|
65
|
+
var _PSL_DATA = require("./vendor/public-suffix-list.data");
|
|
66
|
+
var _COMMON_PW_DATA = require("./vendor/common-passwords-top-10000.data");
|
|
67
|
+
var _BIMI_ANCHORS_DATA = require("./vendor/bimi-trust-anchors.data");
|
|
68
|
+
|
|
69
|
+
var _MODULES = {
|
|
70
|
+
"public-suffix-list": _PSL_DATA,
|
|
71
|
+
"common-passwords-top-10000": _COMMON_PW_DATA,
|
|
72
|
+
"bimi-trust-anchors": _BIMI_ANCHORS_DATA,
|
|
73
|
+
};
|
|
74
|
+
|
|
55
75
|
var VendorDataError = defineClass("VendorDataError", { alwaysPermanent: true });
|
|
56
76
|
|
|
57
77
|
// KNOWN_VENDOR_DATA — the canonical list of vendored data names. Each
|
|
58
|
-
// entry
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
78
|
+
// entry carries the canary token the payload must contain after parse
|
|
79
|
+
// (where applicable) and a description for the inventory surface.
|
|
80
|
+
//
|
|
81
|
+
// The `module` string is documentation-only as of v0.9.9 — the runtime
|
|
82
|
+
// uses the `_MODULES` table above (static literal-string requires) so
|
|
83
|
+
// bundlers can statically trace the .data.js dependency. The `module`
|
|
84
|
+
// field stays exported for downstream tooling that inspects
|
|
85
|
+
// `b.vendorData.KNOWN_VENDOR_DATA[name].module` for diagnostics or
|
|
86
|
+
// vendor-refresh tooling. NEVER call `require(entry.module)` — dynamic
|
|
87
|
+
// require(variable) breaks SEA / esbuild / pkg bundling.
|
|
63
88
|
var KNOWN_VENDOR_DATA = Object.freeze({
|
|
64
89
|
"public-suffix-list": {
|
|
65
90
|
module: "./vendor/public-suffix-list.data",
|
|
66
91
|
canary: "_blamejs_canary_v0_9_8_.local",
|
|
67
|
-
// Canary parse check — operator-side `b.publicSuffix.isPublicSuffix(canary)`
|
|
68
|
-
//
|
|
69
|
-
//
|
|
92
|
+
// Canary parse check — operator-side `b.publicSuffix.isPublicSuffix(canary)`
|
|
93
|
+
// MUST return true after the PSL parser ingests the data. The check
|
|
94
|
+
// is run by every `get()` via the .data.js's canaryCheck closure.
|
|
70
95
|
description: "Mozilla Public Suffix List (PSL). Used by b.publicSuffix for organizational-domain + public-suffix lookups.",
|
|
71
96
|
},
|
|
72
97
|
"common-passwords-top-10000": {
|
|
@@ -102,14 +127,13 @@ function _loadAndVerify(name) {
|
|
|
102
127
|
"Registered names: " + Object.keys(KNOWN_VENDOR_DATA).join(", "));
|
|
103
128
|
}
|
|
104
129
|
|
|
105
|
-
var mod;
|
|
106
|
-
|
|
107
|
-
mod = require(entry.module);
|
|
108
|
-
} catch (e) {
|
|
130
|
+
var mod = _MODULES[name];
|
|
131
|
+
if (!mod) {
|
|
109
132
|
throw new VendorDataError("vendor-data/module-missing",
|
|
110
|
-
"vendorData: '" + name + "' module not
|
|
111
|
-
"
|
|
112
|
-
"
|
|
133
|
+
"vendorData: '" + name + "' .data.js module not statically " +
|
|
134
|
+
"require'd by lib/vendor-data.js. Add the literal-string require " +
|
|
135
|
+
"to the _MODULES table at the top of the file — dynamic " + // allow:dynamic-require — diagnostic message text
|
|
136
|
+
"require(variable) breaks SEA / esbuild bundling."); // allow:dynamic-require — diagnostic message text
|
|
113
137
|
}
|
|
114
138
|
|
|
115
139
|
// Module-shape gate
|
|
@@ -298,7 +322,7 @@ function inventory() {
|
|
|
298
322
|
var name = names[i];
|
|
299
323
|
var entry = KNOWN_VENDOR_DATA[name];
|
|
300
324
|
_loadAndVerify(name);
|
|
301
|
-
var mod =
|
|
325
|
+
var mod = _MODULES[name];
|
|
302
326
|
var meta = mod.metadata;
|
|
303
327
|
out.push({
|
|
304
328
|
name: name,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blamejs/core",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.12",
|
|
4
4
|
"description": "The Node framework that owns its stack.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "blamejs contributors",
|
|
@@ -74,6 +74,8 @@
|
|
|
74
74
|
"prepack": "node scripts/check-pack-against-gitignore.js",
|
|
75
75
|
"check:vendor-currency": "node scripts/check-vendor-currency.js"
|
|
76
76
|
},
|
|
77
|
-
"
|
|
78
|
-
|
|
77
|
+
"devDependencies": {
|
|
78
|
+
"esbuild": "0.28.0",
|
|
79
|
+
"postject": "1.0.0-alpha.6"
|
|
80
|
+
}
|
|
79
81
|
}
|
package/sbom.cdx.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json",
|
|
3
3
|
"bomFormat": "CycloneDX",
|
|
4
4
|
"specVersion": "1.6",
|
|
5
|
-
"serialNumber": "urn:uuid:
|
|
5
|
+
"serialNumber": "urn:uuid:d4b77800-e22b-4c36-be2e-cecdcb0c34da",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-05-
|
|
8
|
+
"timestamp": "2026-05-13T16:54:10.092Z",
|
|
9
9
|
"lifecycles": [
|
|
10
10
|
{
|
|
11
11
|
"phase": "build"
|
|
@@ -19,14 +19,14 @@
|
|
|
19
19
|
}
|
|
20
20
|
],
|
|
21
21
|
"component": {
|
|
22
|
-
"bom-ref": "@blamejs/core@0.9.
|
|
22
|
+
"bom-ref": "@blamejs/core@0.9.12",
|
|
23
23
|
"type": "library",
|
|
24
24
|
"name": "blamejs",
|
|
25
|
-
"version": "0.9.
|
|
25
|
+
"version": "0.9.12",
|
|
26
26
|
"scope": "required",
|
|
27
27
|
"author": "blamejs contributors",
|
|
28
28
|
"description": "The Node framework that owns its stack.",
|
|
29
|
-
"purl": "pkg:npm/%40blamejs/core@0.9.
|
|
29
|
+
"purl": "pkg:npm/%40blamejs/core@0.9.12",
|
|
30
30
|
"properties": [],
|
|
31
31
|
"externalReferences": [
|
|
32
32
|
{
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"components": [],
|
|
55
55
|
"dependencies": [
|
|
56
56
|
{
|
|
57
|
-
"ref": "@blamejs/core@0.9.
|
|
57
|
+
"ref": "@blamejs/core@0.9.12",
|
|
58
58
|
"dependsOn": []
|
|
59
59
|
}
|
|
60
60
|
]
|