Skip to content

Refactor Sass handling and improve manifest configuration - #114

Merged
atldays merged 25 commits into
mainfrom
develop
Oct 27, 2026
Merged

atldays merged 25 commits into
mainfrom
develop

Conversation

@atldays

@atldays atldays commented Oct 27, 2026

Copy link
Copy Markdown
Member

No description provided.

github-actions Bot and others added 25 commits September 29, 2026 14:05
Prepare standalone and merged styles with their original filenames so
local Sass requests and complete literal URLs retain their origin.
Resolve resources in imported partials through Sass source maps while
preserving one CSS module, shared-to-app order and existing style layers.

Track existing and missing Sass candidates for bare and explicit relative
requests so watch builds recover when modules are created or restored.
Keep preparation internal and reuse an existing URL loader when supplied
by another plugin.

Cover multi-app assets, font mixins, native loader loading and watch
recovery with unit and build tests. Document supported URL patterns and
source-map limitations.

BREAKING CHANGE: Relative resources in Sass partials now resolve from the
partial instead of the entry stylesheet, including builds with
mergeStyles disabled. Update paths that relied on the entry directory.
Local Sass module requests now retain the declaring file's directory.
Repeated variable assignments and configured module loads are preserved,
and late @use/@forward directives are rejected. Correct configurations
that previously depended on deduplication or directive reordering.
Replace html-rspack-tags-plugin with @rspackjs/plugin-html-tags and own
HTML contracts in the shared types layer. Keep entrypoint options static
and validate them once through ViewParser; let the tags plugin validate
resolved config.html values.

Cover metadata, static options and configuration forms at their owning
layers, with real parser fixtures and focused build/type integrations.

Validation: 229 suites / 2361 tests passed, followed by 45 parser tests
and source/package type checks for 49 fixtures after fixture cleanup.
Package build, typecheck, inventory, Prettier and diff checks passed.

BREAKING CHANGE: Require Node.js >=22.12.0. Meta tags must be objects with
attributes; string values and arrays containing strings are rejected.
The files option in entrypoints now raises an error instead of being
ignored. config.html values of null, an empty string or zero now fail
instead of being skipped.
Keep asynchronous containers and offscreen/sandbox init and main unchanged.
Warn when an untyped Vanilla render returns a Promise or thenable.

BREAKING CHANGE: ViewRenderHandler no longer accepts Promise results and
ViewRenderReactComponent now requires a synchronous component instead of FC.
Move asynchronous loading to a separate function or a React effect and return
the initial UI synchronously. Type reusable components with
ViewRenderReactComponent<Props>, keep their inferred return type, or wrap an
existing synchronous React.FC with props => <Report {...props} />.
Recalculate automatic name, manifest version, and filename defaults from
final configuration inputs while preserving explicit values and the
single callback invocation. Let Safari default to MV2 when --mv2 is absent.

Separate environment and plugin-list resolution, move workspace paths
and plugin handlers into dedicated modules, remove unused string helpers,
and document CLI ownership in an English README.

Add real-c12 and CLI build regression coverage, preserve explicit manifest
targets in integration fixtures, and update default app expectations.

BREAKING CHANGE: The default app changes from "myapp" to "addon", affecting
the default manifest name, output directory, APP environment variable,
and multi-workspace application path. Set app: "myapp" or pass --app myapp
to retain the previous layout, or rename the application directory to addon.
Invalidate the merged raw cache on raw() and merge generated commands into a fresh object
to preserve the cached raw values.

Cover MV2 and MV3 updates after reads, clearing internal commands, and a real CLI build
using a manifest callback.
Export named manifest and browser-specific types from adnbn. Keep compilation
dependency types internal and use ManifestBase<Manifest> in the factory and
Rspack plugin without changing manifest generation or watch behavior.

Rename the private Chrome manifest base alias to distinguish it from the builder.
Verify public exports and builder boundaries against source and package declarations.

BREAKING CHANGE: ManifestBuilder no longer exposes setDependencies(), including
configuration callbacks and plugin handlers. Compilation dependency injection
is reserved for framework internals.
…points

Discover options, newtab, history and bookmarks only as <type>.<ext>,
<name>.<type>.<ext>, <type>/index.<ext> and <name>.<type>/index.<ext>
in each scanned app or shared source directory.

Declare this policy through allowGroupedDirectories(), independently
of allowMultiple(). Preserve grouping and nested fallback discovery
for other entrypoints. Files in former locations remain available as
ordinary imports. Keep build filters, workspace precedence and explicit
plugin entrypoints unchanged.

Cover the policy in the base finder, Options, override and Popup tests,
and add a build integration for adjacent modules, templates, styles
and resources. Update the integration test inventory documentation.

BREAKING CHANGE: Automatic workspace discovery for options, newtab,
history and bookmarks no longer scans grouping directories such as
newtabs/ and histories/, or searches for additional candidates inside
<type>/. Direct <type>/index.<ext> entrypoints remain supported.

Ignored nested layouts are <type>/<type>.<ext>,
<type>/<name>.<type>.<ext>, <type>/<type>/index.<ext> and
<type>/<name>.<type>/index.<ext>. The same four candidate forms under
newtabs/ for newtab and histories/ for history are also ignored.

Move options/options.tsx to options/index.tsx,
options/account.options.tsx to account.options.tsx, and
newtabs/main.newtab.tsx to main.newtab.tsx.
Named directory variants such as main.newtab/index.tsx remain supported.
All paths are relative to the scanned source directory. Explicitly
supplied plugin entrypoints are unaffected.
Check direct instance lookup in BaseTransport while preserving object identity,
context checks, optional manager lookup, and remote proxy behavior.

Add runtime regressions and concrete source/package type assertions for direct
getters and registration providers. Document the local Relay exception.

BREAKING CHANGE: Direct getters now throw synchronously when an instance is
missing instead of returning undefined. Callers that checked for undefined
must handle the exception.
Use forward slashes for module alias keys and generated TypeScript paths
while keeping filesystem targets native. Cover nested paths and relative
prefixes, and include stderr in CLI build failures.
Add the tooltip option for literal text and locale keys. Preserve View title
behavior and the initial action title fallback. Resolve localized tooltips
through browser i18n when changing popups, preserving the current tooltip
when the option is omitted and allowing explicit empty values.

Update generated runtime metadata, public types, examples, and focused
parser, runtime, build, and browser coverage. Clarify ManifestPopup.title
as manifest default_title data without referring to Popup configuration.

BREAKING CHANGE: Popup title now controls only the document and View props.
Move toolbar tooltip values to tooltip and read getPopups() metadata from
tooltip instead of title. ManifestPopup.title remains unchanged.
Update Browser to 0.12.0, Storage to 0.8.3 and Inject Script to 0.5.1
so they share one Browser dependency. Align Chrome types on 0.3.5.
Use label for the native sidebar UI and resolve locale keys through
browser i18n when switching. Apply configured icons where supported,
preserve omitted values and propagate native errors.

Keep ManifestSidebar.title as manifest data and emit only default_path
for Chrome side_panel. Update types, documentation and parser, runtime,
build and browser checks.

BREAKING CHANGE: Sidebar title now controls only the HTML document and
render props. Use label for the browser sidebar title and tooltip.
getSidebars() entries expose label instead of title. changeSidebar()
also applies the selected sidebar icon when the browser supports it.
Update vulnerable dependencies, remove the unused Rspack CLI, and pin
release-it's undici to a patched version. Declare memfs explicitly for
the existing bundler tests.

Give the isolated styles watch fixture its own package.json so polling
does not scan shared temporary directories. Keep all timeouts unchanged.

Validation: npm run check passes on Node 22 and 24 (2490 tests each).
The dependency audit is reduced from 45 findings to 8, with no critical
findings. Deferred Zod, basic-ftp, and tsup esbuild changes are excluded.
Move utility-types to dependencies because the public declarations import
it. Keep the existing version so clean consumer projects receive complete
types without installing an undeclared development dependency.

Validated strict consumer typechecks from the packed package on Node 22
and 24, including container callback inference with skipLibCheck disabled.
Normalize root-relative filesystem paths before generating entrypoint
imports and preserve JavaScript file extensions for ESM resolution.
Resolve React packages from the project root and scheduler from react-dom,
including ancestor and nested installations, while keeping React optional.

Cover relative and absolute CLI/API roots, consecutive projects, watch
updates, and JavaScript index entrypoints without increasing timeouts.

Validated 2508 non-browser tests, builds and fixture typechecks on Node 22
and 24. Clean tarball installations pass 26 build scenarios per version,
strict declaration checks, and separate React rendering checks in Chrome.
@atldays
atldays merged commit 6b2b351 into main Oct 27, 2026
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant