feat(kernel): wave 2 guest OS surface and operator parity

- Extend capability model (featureBits2) and align ADR, protocol, /proc, verify scripts
- Add seed RPC + /proc mirrors for replication queue, MBR failover hints, optional attestation
- Pear bridge: IPC request/response, mirror-drive / HDMS pairing hints, dev diagnostics
- Initd: IdleSec for socket units, units.d drop-ins, richer readiness (e.g. exec:)
- Cron: @reboot and JitterSec-style scheduling
- VFS: Linux-shaped /proc stubs (cgroups, tcp), bounded vfs.watch on safe pseudo paths
- Shell: gated parameter expansion v2; /bin/env -S and --env-file (staged script without ESM export)
- Schemas under docs/schemas; expand contract tests; kernel.ext.d → /proc extensions registry
- Refresh handbook, developer-guide, reference index, package READMEs; keep seeder kernel tree in sync
This commit is contained in:
Raven Scott
2026-04-04 02:04:59 -04:00
parent 8c3151319d
commit 2919f606ce
50 changed files with 2252 additions and 602 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ Files in this directory are **read from disk by the seeder** (or copied into `pa
Pear bundles use the **vendored** tree under `packages/bare-os-seeder/kernel/`; keep it in sync by running the same builds before `pear stage`. **`npm test`** runs **`scripts/verify-kernel-seeder-parity.mjs`** and **`scripts/verify-ctx-api-feature-bits.mjs`** (after **`bare-os-coreutils`** and **`bare-os-bare-libs`** builds) so the two trees match byte-for-byte and every **`kernel/bin/*`** file contains the **`BARE_OS_BIN_API`** pragma (coreutils **`runtime.js`** and hand-written stubs such as **`systemctl`** / **`journalctl`**).
Optional **system** image examples: **`etc/bare-os/boot.allow.example`** (copy to **`boot.allow`** when using host **`BARE_OS_BOOT_ALLOWLIST=1`**), **`etc/bare-os/boot.policy.example.json`** (install as **`boot.policy.json`** when using **`BARE_OS_BOOT_POLICY=1`**; v2 fields **`maxExecLineDepth`**, **`denyEnvKeys`**, **`requireProcNodes`**), **`etc/bare-os/rc.profile.full`** (sample full profile referenced from **`profile`**), **`etc/bare-os/crontab.example`** (system-wide cron lines merged ahead of user **`~/.crontab`**), **`etc/bare-os/timers/*.timer.example`** (copy to **`~/.config/bare-os/timers/*.timer`** for **`OnCalendar=`** or **`EveryMs=`** jobs).
Optional **system** image examples: **`etc/bare-os/boot.allow.example`** (copy to **`boot.allow`** when using host **`BARE_OS_BOOT_ALLOWLIST=1`**), **`etc/bare-os/boot.policy.example.json`** (install as **`boot.policy.json`** when using **`BARE_OS_BOOT_POLICY=1`**; v2 fields **`maxExecLineDepth`**, **`denyEnvKeys`**, **`requireProcNodes`**; JSON Schema: [`docs/schemas/boot.policy.schema.json`](../docs/schemas/boot.policy.schema.json)), **`etc/bare-os/rc.profile.full`** (sample full profile referenced from **`profile`**), **`etc/bare-os/crontab.example`** (system-wide cron lines merged ahead of user **`~/.crontab`**), **`etc/bare-os/timers/*.timer.example`** (copy to **`~/.config/bare-os/timers/*.timer`** for **`OnCalendar=`** or **`EveryMs=`** jobs). **`kernel.ext.d`** scripts register into **`/proc/bare_os/extensions.json`** when the booter provides **`ctx.bareOsRegisterKernelExtensionRecord`**.
## See also
+171 -2
View File
@@ -106,9 +106,107 @@ function parseEnvLeadingAssigns(rest) {
return { assigns, utility: rest.slice(i) }
}
/**
* GNU-like splitting for `env -S` (bounded).
* @param {string} s
* @returns {string[] | null}
*/
function splitEnvDashS(s) {
const maxStr = 4096
const maxArgs = 64
if (typeof s !== 'string' || s.length > maxStr) return null
/** @type {string[]} */
const out = []
let i = 0
while (i < s.length) {
while (i < s.length && /\s/.test(s[i])) i++
if (i >= s.length) break
if (out.length >= maxArgs) return null
/** @type {string} */
let arg = ''
const q = s[i]
if (q === "'" || q === '"') {
i++
while (i < s.length && s[i] !== q) {
if (q === '"' && s[i] === '\\' && i + 1 < s.length) {
arg += s[i + 1]
i += 2
continue
}
arg += s[i++]
}
if (s[i] !== q) return null
i++
} else {
while (i < s.length && !/\s/.test(s[i])) arg += s[i++]
}
out.push(arg)
}
return out
}
/**
* Subset: KEY=VAL lines, # comments, optional leading `export `.
* @param {string} text
* @returns {Record<string, string>}
*/
function parseEnvFileSubset(text) {
/** @type {Record<string, string>} */
const out = {}
let lines = 0
const maxLines = 512
for (const raw of text.split(/\r?\n/)) {
if (lines++ > maxLines) break
const line = raw.trim()
if (!line || line.startsWith('#')) continue
let t = line
if (/^export\s+/i.test(t)) t = t.replace(/^export\s+/i, '')
const eq = t.indexOf('=')
if (eq <= 0) continue
const name = t.slice(0, eq).trim()
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) continue
let val = t.slice(eq + 1)
if (
(val.startsWith('"') && val.endsWith('"')) ||
(val.startsWith("'") && val.endsWith("'"))
) {
val = val.slice(1, -1)
}
if (val.length > 8192) val = val.slice(0, 8192)
out[name] = val
}
return out
}
/**
* @param {Record<string, unknown>} ctx
* @param {string} path
* @returns {Promise<Record<string, string>>}
*/
async function readEnvFileIntoAssigns(ctx, path) {
const vfs = ctx.vfs
if (!vfs || typeof vfs.readFile !== 'function') return {}
try {
const buf = await vfs.readFile(path)
if (!buf) return {}
const text = ctx.b4a.toString(buf)
return parseEnvFileSubset(text)
} catch {
return {}
}
}
async function run(ctx, argv) {
const dashSOn =
ctx.vfs?.env?.BARE_OS_ENV_DASH_S === '1' ||
ctx.vfs?.env?.BARE_OS_ENV_DASH_S === 'true'
let ignore = false
let i = 1
/** @type {string[]} */
const splitPrefix = []
/** @type {Record<string, string>} */
const fileAssigns = {}
for (; i < argv.length; i++) {
const a = argv[i]
if (a === '--') {
@@ -119,6 +217,76 @@ async function run(ctx, argv) {
ignore = true
continue
}
if (dashSOn && a === '-S') {
const next = argv[i + 1]
if (next == null) {
ctx.console.error('env: option requires an argument -- S')
ctx.exitCode = 1
return
}
const parts = splitEnvDashS(String(next))
if (!parts) {
ctx.console.error('env: invalid -S string')
ctx.exitCode = 1
return
}
splitPrefix.push(...parts)
i++
continue
}
if (dashSOn && a.startsWith('-S=')) {
const parts = splitEnvDashS(a.slice(3))
if (!parts) {
ctx.console.error('env: invalid -S string')
ctx.exitCode = 1
return
}
splitPrefix.push(...parts)
continue
}
if (dashSOn && a === '--split-string') {
const next = argv[i + 1]
if (next == null) {
ctx.console.error('env: option requires an argument -- split-string')
ctx.exitCode = 1
return
}
const parts = splitEnvDashS(String(next))
if (!parts) {
ctx.console.error('env: invalid --split-string')
ctx.exitCode = 1
return
}
splitPrefix.push(...parts)
i++
continue
}
if (dashSOn && a.startsWith('--split-string=')) {
const parts = splitEnvDashS(a.slice('--split-string='.length))
if (!parts) {
ctx.console.error('env: invalid --split-string')
ctx.exitCode = 1
return
}
splitPrefix.push(...parts)
continue
}
if (dashSOn && a === '--env-file') {
const next = argv[i + 1]
if (next == null) {
ctx.console.error('env: option requires an argument -- env-file')
ctx.exitCode = 1
return
}
Object.assign(fileAssigns, await readEnvFileIntoAssigns(ctx, String(next)))
i++
continue
}
if (dashSOn && a.startsWith('--env-file=')) {
const p = a.slice('--env-file='.length)
Object.assign(fileAssigns, await readEnvFileIntoAssigns(ctx, p))
continue
}
if (a.startsWith('-')) {
ctx.console.error('env: unsupported option ' + a)
ctx.exitCode = 1
@@ -127,9 +295,10 @@ async function run(ctx, argv) {
break
}
const rest = argv.slice(i)
const { assigns, utility } = parseEnvLeadingAssigns(rest)
const mergedRest = [...splitPrefix, ...rest]
const { assigns, utility } = parseEnvLeadingAssigns(mergedRest)
const base = ignore ? {} : { ...ctx.vfs.env }
const newEnv = Object.assign(base, assigns)
const newEnv = Object.assign(base, fileAssigns, assigns)
if (!utility.length) {
for (const k of Object.keys(newEnv).sort()) {
+6
View File
@@ -714,6 +714,12 @@ async function runKernelExtDropins(ctx) {
continue
}
await run(imgPath)
if (typeof ctx.bareOsRegisterKernelExtensionRecord === 'function') {
ctx.bareOsRegisterKernelExtensionRecord({
dropin: name,
script: imgPath
})
}
}
} catch (e) {
console.error(`kernel.ext.d/${name}: ` + ((e && e.message) || String(e)))
+230 -230
View File
@@ -1,18 +1,18 @@
{
"version": 1,
"bundles": [
{
"path": "/lib/bare/bundles/safetyCatch.js",
"keys": [
"safetyCatch"
]
},
{
"path": "/lib/bare/bundles/hypercoreIdEncoding.js",
"keys": [
"hypercoreIdEncoding"
]
},
{
"path": "/lib/bare/bundles/safetyCatch.js",
"keys": [
"safetyCatch"
]
},
{
"path": "/lib/bare/bundles/b4a.js",
"keys": [
@@ -25,6 +25,12 @@
"compactEncoding"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareUrl"
]
},
{
"path": "/lib/bare/bundles/protomux.js",
"keys": [
@@ -32,9 +38,9 @@
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"path": "/lib/bare/bundles/bareEvents.js",
"keys": [
"bareUrl"
"bareEvents"
]
},
{
@@ -49,42 +55,12 @@
"barePath"
]
},
{
"path": "/lib/bare/bundles/bareEvents.js",
"keys": [
"bareEvents"
]
},
{
"path": "/lib/bare/bundles/bareAbort.js",
"keys": [
"bareAbort"
]
},
{
"path": "/lib/bare/bundles/bareAbortController.js",
"keys": [
"bareAbortController"
]
},
{
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
"bareAddonResolve"
]
},
{
"path": "/lib/bare/bundles/bareReadline.js",
"keys": [
"bareReadline"
]
},
{
"path": "/lib/bare/bundles/bareCrypto.js",
"keys": [
"bareCrypto"
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"keys": [
@@ -92,21 +68,27 @@
]
},
{
"path": "/lib/bare/bundles/bareAppKit.js",
"path": "/lib/bare/bundles/bareAbortController.js",
"keys": [
"bareAppKit"
"bareAbortController"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"path": "/lib/bare/bundles/bareReadline.js",
"keys": [
"bareApk"
"bareReadline"
]
},
{
"path": "/lib/bare/bundles/bareAtomics.js",
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
"bareAtomics"
"bareAddonResolve"
]
},
{
"path": "/lib/bare/bundles/bareCrypto.js",
"keys": [
"bareCrypto"
]
},
{
@@ -116,9 +98,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAssert.js",
"path": "/lib/bare/bundles/bareAppKit.js",
"keys": [
"bareAssert"
"bareAppKit"
]
},
{
@@ -127,6 +109,24 @@
"fetch"
]
},
{
"path": "/lib/bare/bundles/bareAtomics.js",
"keys": [
"bareAtomics"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
]
},
{
"path": "/lib/bare/bundles/bareAssert.js",
"keys": [
"bareAssert"
]
},
{
"path": "/lib/bare/bundles/bareBmp.js",
"keys": [
@@ -176,9 +176,9 @@
]
},
{
"path": "/lib/bare/bundles/bareChannel.js",
"path": "/lib/bare/bundles/bareDebugLog.js",
"keys": [
"bareChannel"
"bareDebugLog"
]
},
{
@@ -187,42 +187,42 @@
"bareBundleId"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareDebugLog.js",
"keys": [
"bareDebugLog"
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"keys": [
"bareDaemon"
]
},
{
"path": "/lib/bare/bundles/bareChannel.js",
"keys": [
"bareChannel"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareDns.js",
"keys": [
"bareDns"
]
},
{
"path": "/lib/bare/bundles/bareEnv.js",
"keys": [
"bareEnv"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
"bareDiagnosticsChannel"
]
},
{
"path": "/lib/bare/bundles/bareEnv.js",
"keys": [
"bareEnv"
]
},
{
"path": "/lib/bare/bundles/bareExif.js",
"keys": [
@@ -253,12 +253,6 @@
"bareFfmpegEncodings"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
"bareFormat"
]
},
{
"path": "/lib/bare/bundles/bareFormData.js",
"keys": [
@@ -272,9 +266,9 @@
]
},
{
"path": "/lib/bare/bundles/bareGtk.js",
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
"bareGtk"
"bareFormat"
]
},
{
@@ -283,24 +277,24 @@
"bareFileLogger"
]
},
{
"path": "/lib/bare/bundles/bareHeif.js",
"keys": [
"bareHeif"
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareFs"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
"bareHrtime"
]
},
{
"path": "/lib/bare/bundles/bareGtk.js",
"keys": [
"bareGtk"
]
},
{
"path": "/lib/bare/bundles/bareHeif.js",
"keys": [
"bareHeif"
]
},
{
"path": "/lib/bare/bundles/bareHttpParser.js",
"keys": [
@@ -308,9 +302,9 @@
]
},
{
"path": "/lib/bare/bundles/bareIco.js",
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareIco"
"bareFs"
]
},
{
@@ -319,6 +313,12 @@
"bareImageResample"
]
},
{
"path": "/lib/bare/bundles/bareIco.js",
"keys": [
"bareIco"
]
},
{
"path": "/lib/bare/bundles/bareInspect.js",
"keys": [
@@ -337,12 +337,6 @@
"bareHttps"
]
},
{
"path": "/lib/bare/bundles/bareJpeg.js",
"keys": [
"bareJpeg"
]
},
{
"path": "/lib/bare/bundles/bareIntl.js",
"keys": [
@@ -350,21 +344,9 @@
]
},
{
"path": "/lib/bare/bundles/bareIpc.js",
"path": "/lib/bare/bundles/bareJpeg.js",
"keys": [
"bareIpc"
]
},
{
"path": "/lib/bare/bundles/bareLogger.js",
"keys": [
"bareLogger"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
"bareJpeg"
]
},
{
@@ -374,9 +356,15 @@
]
},
{
"path": "/lib/bare/bundles/bareMake.js",
"path": "/lib/bare/bundles/bareLogger.js",
"keys": [
"bareMake"
"bareLogger"
]
},
{
"path": "/lib/bare/bundles/bareIpc.js",
"keys": [
"bareIpc"
]
},
{
@@ -385,6 +373,24 @@
"bareLink"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareModuleResolve.js",
"keys": [
"bareModuleResolve"
]
},
{
"path": "/lib/bare/bundles/bareMake.js",
"keys": [
"bareMake"
]
},
{
"path": "/lib/bare/bundles/bareModuleLexer.js",
"keys": [
@@ -397,24 +403,12 @@
"bareModule"
]
},
{
"path": "/lib/bare/bundles/bareModuleResolve.js",
"keys": [
"bareModuleResolve"
]
},
{
"path": "/lib/bare/bundles/bareNdk.js",
"keys": [
"bareNdk"
]
},
{
"path": "/lib/bare/bundles/bareModuleTraverse.js",
"keys": [
"bareModuleTraverse"
]
},
{
"path": "/lib/bare/bundles/bareNative.js",
"keys": [
@@ -422,15 +416,9 @@
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"path": "/lib/bare/bundles/bareModuleTraverse.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
"bareMedia"
"bareModuleTraverse"
]
},
{
@@ -445,12 +433,24 @@
"bareOpen"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareOs.js",
"keys": [
"bareOs"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
"bareMedia"
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"keys": [
@@ -458,15 +458,9 @@
]
},
{
"path": "/lib/bare/bundles/barePack.js",
"path": "/lib/bare/bundles/barePng.js",
"keys": [
"barePack"
]
},
{
"path": "/lib/bare/bundles/barePipe.js",
"keys": [
"barePipe"
"barePng"
]
},
{
@@ -482,9 +476,15 @@
]
},
{
"path": "/lib/bare/bundles/barePng.js",
"path": "/lib/bare/bundles/barePack.js",
"keys": [
"barePng"
"barePack"
]
},
{
"path": "/lib/bare/bundles/barePipe.js",
"keys": [
"barePipe"
]
},
{
@@ -499,6 +499,12 @@
"barePunycode"
]
},
{
"path": "/lib/bare/bundles/bareQuerystring.js",
"keys": [
"bareQuerystring"
]
},
{
"path": "/lib/bare/bundles/barePrebuild.js",
"keys": [
@@ -512,9 +518,9 @@
]
},
{
"path": "/lib/bare/bundles/bareQuerystring.js",
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
"bareQuerystring"
"bareProcess"
]
},
{
@@ -523,36 +529,12 @@
"bareRealm"
]
},
{
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
"bareProcess"
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"barePromClient"
]
},
{
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/bareRepl.js",
"keys": [
"bareRepl"
]
},
{
"path": "/lib/bare/bundles/bareSemver.js",
"keys": [
"bareSemver"
]
},
{
"path": "/lib/bare/bundles/bareRuntime.js",
"keys": [
@@ -566,15 +548,21 @@
]
},
{
"path": "/lib/bare/bundles/bareSidecar.js",
"path": "/lib/bare/bundles/bareSemver.js",
"keys": [
"bareSidecar"
"bareSemver"
]
},
{
"path": "/lib/bare/bundles/bareRun.js",
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRun"
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/bareSidecar.js",
"keys": [
"bareSidecar"
]
},
{
@@ -583,24 +571,24 @@
"bareSignals"
]
},
{
"path": "/lib/bare/bundles/bareRun.js",
"keys": [
"bareRun"
]
},
{
"path": "/lib/bare/bundles/bareRepl.js",
"keys": [
"bareRepl"
]
},
{
"path": "/lib/bare/bundles/bareStringDecoder.js",
"keys": [
"bareStringDecoder"
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
"bareStorage"
]
},
{
"path": "/lib/bare/bundles/bareSvg.js",
"keys": [
"bareSvg"
]
},
{
"path": "/lib/bare/bundles/bareStream.js",
"keys": [
@@ -608,9 +596,9 @@
]
},
{
"path": "/lib/bare/bundles/bareStdio.js",
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
"bareStdio"
"bareStorage"
]
},
{
@@ -619,12 +607,24 @@
"bareStructuredClone"
]
},
{
"path": "/lib/bare/bundles/bareStdio.js",
"keys": [
"bareStdio"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
]
},
{
"path": "/lib/bare/bundles/bareSvg.js",
"keys": [
"bareSvg"
]
},
{
"path": "/lib/bare/bundles/bareTiff.js",
"keys": [
@@ -632,9 +632,9 @@
]
},
{
"path": "/lib/bare/bundles/bareTap.js",
"path": "/lib/bare/bundles/bareTimers.js",
"keys": [
"bareTap"
"bareTimers"
]
},
{
@@ -644,9 +644,9 @@
]
},
{
"path": "/lib/bare/bundles/bareTimers.js",
"path": "/lib/bare/bundles/bareTap.js",
"keys": [
"bareTimers"
"bareTap"
]
},
{
@@ -656,9 +656,9 @@
]
},
{
"path": "/lib/bare/bundles/bareTpl.js",
"path": "/lib/bare/bundles/bareTcp.js",
"keys": [
"bareTpl"
"bareTcp"
]
},
{
@@ -668,15 +668,9 @@
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"path": "/lib/bare/bundles/bareTpl.js",
"keys": [
"bareUiKit"
]
},
{
"path": "/lib/bare/bundles/bareTcp.js",
"keys": [
"bareTcp"
"bareTpl"
]
},
{
@@ -685,48 +679,54 @@
"bareTls"
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
"bareUnpack"
]
},
{
"path": "/lib/bare/bundles/bareTty.js",
"keys": [
"bareTty"
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"keys": [
"bareUiKit"
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
"bareUnpack"
]
},
{
"path": "/lib/bare/bundles/bareV8.js",
"keys": [
"bareV8"
]
},
{
"path": "/lib/bare/bundles/bareWalkHandles.js",
"keys": [
"bareWalkHandles"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareVm.js",
"keys": [
"bareVm"
]
},
{
"path": "/lib/bare/bundles/bareWalkHandles.js",
"keys": [
"bareWalkHandles"
]
},
{
"path": "/lib/bare/bundles/bareWebKit.js",
"keys": [
"bareWebKit"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareWebp.js",
"keys": [
@@ -740,15 +740,15 @@
]
},
{
"path": "/lib/bare/bundles/bareWhich.js",
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareWhich"
"bareUtils"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"path": "/lib/bare/bundles/bareWhich.js",
"keys": [
"bareV8ToIstanbul"
"bareWhich"
]
},
{
@@ -758,15 +758,15 @@
]
},
{
"path": "/lib/bare/bundles/bareXdiff.js",
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareXdiff"
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"path": "/lib/bare/bundles/bareXdiff.js",
"keys": [
"bareUtils"
"bareXdiff"
]
},
{
@@ -775,18 +775,18 @@
"bareZlib"
]
},
{
"path": "/lib/bare/bundles/bareWs.js",
"keys": [
"bareWs"
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareZmq"
]
},
{
"path": "/lib/bare/bundles/bareWs.js",
"keys": [
"bareWs"
]
},
{
"path": "/lib/bare/bundles/bareWorker.js",
"keys": [
File diff suppressed because one or more lines are too long