parcel-bundler/parcel · error · Error

Bundle is not inline and unable to retrieve contents

Error message

Bundle is not inline and unable to retrieve contents

What it means

`getInlineBundleContents` is a plugin-facing API on PackagerRunner that returns the bytes of a bundle whose `bundleBehavior` is `'inline'`. Inline bundles are embedded inside their parent (e.g. for service workers or data URLs). Calling this API on a regular bundle is a contract violation: the bundle was never materialized as standalone content, so there is nothing to return.

Source

Thrown at packages/core/core/src/PackagerRunner.js:481

        bundleConfig: bundleConfigs.get(name)?.result,
        bundle,
        bundleGraph: new BundleGraph<NamedBundleType>(
          bundleGraph,
          NamedBundle.get.bind(NamedBundle),
          this.options,
        ),
        getSourceMapReference: map => {
          return this.getSourceMapReference(bundle, map);
        },
        options: this.pluginOptions,
        logger: new PluginLogger({origin: name}),
        tracer: new PluginTracer({origin: name, category: 'package'}),
        getInlineBundleContents: async (
          bundle: BundleType,
          bundleGraph: BundleGraphType<NamedBundleType>,
        ) => {
          if (bundle.bundleBehavior !== 'inline') {
            throw new Error(
              'Bundle is not inline and unable to retrieve contents',
            );
          }

          let contents = await this.getInlineBundleContents(
            bundleToInternalBundle(bundle),
            // $FlowFixMe
            bundleGraphToInternalBundleGraph(bundleGraph),
            configs,
            bundleConfigs,
          );
          return {contents};
        },
      });
      if (Array.isArray(res)) {
        return res;
      }
      return [res];

View on GitHub (pinned to 59484858a1)

Solutions

  1. Guard the call: only invoke when `bundle.bundleBehavior === 'inline'`.
  2. Use the regular bundle-reading path (e.g. `getBundleResult`) for non-inline bundles.
  3. If you expect the bundle to be inline, check that the entry asset/target sets `bundleBehavior: 'inline'`.

Example fix

// before
const {contents} = await getInlineBundleContents(bundle, bundleGraph);

// after
if (bundle.bundleBehavior !== 'inline') return null;
const {contents} = await getInlineBundleContents(bundle, bundleGraph);
Defensive patterns

Strategy: validation

Validate before calling

// Verify bundle behavior before requesting inline contents.
if (bundle.bundleBehavior !== 'inline') {
  return null; // or use the regular bundle-read path
}
const {contents} = await getInlineBundleContents(bundle, bundleGraph);

Type guard

function isInlineBundle(b: {bundleBehavior?: string}): boolean {
  return b.bundleBehavior === 'inline';
}

Prevention

When it happens

Trigger: A custom packager/optimizer plugin calls `getInlineBundleContents(bundle, bundleGraph)` for a bundle whose `bundle.bundleBehavior !== 'inline'`.

Common situations: Writing a packager that iterates all child bundles without filtering by behavior; assuming every bundle in a group is inline.

Related errors


AI-assisted analysis of parcel-bundler/parcel@59484858a1 (2026-08-13). Data as JSON: /api/errors/b83ac3e37d4fd08e. Report an issue: GitHub.