/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import assert from 'node:assert/strict'; import { describe, test } from 'node:test'; import { bareCssImportSpecifiers } from './third-party-closure.mjs'; // The bundle recorder cannot see a package reached only through a CSS // `@import` of pure rules — Vite inlines it at transform time, so it never // becomes a module, and with no `url()` asset it emits nothing either. The // notice generator therefore reads the stylesheets, and this is the reader. describe('bareCssImportSpecifiers', () => { test('finds package names behind every @import spelling', () => { const css = ` @import "normalize.css"; @import 'modern-css-reset'; @import url("some-pkg/theme.css"); @import "@scope/pkg/dist/base.css" layer(components); @import "@scope/only-root"; @import "tokens.css" screen and (min-width: 40em); @import url(unquoted-pkg/base.css); @import url( spaced-pkg ); `; assert.deepEqual(bareCssImportSpecifiers(css).sort(), [ '@scope/only-root', '@scope/pkg', 'modern-css-reset', 'normalize.css', 'some-pkg', 'spaced-pkg', 'tokens.css', 'unquoted-pkg', ]); }); test('ignores anything that is not a package name', () => { const css = ` @import "./cascade-layers.css"; @import "../shared/base.css"; @import "/absolute.css"; @import url("https://fonts.example/font.css"); @import url("data:text/css,body{}"); `; assert.deepEqual(bareCssImportSpecifiers(css), []); }); test('reports a scoped package once however deeply it is imported', () => { const css = ` @import "@astryxdesign/core/reset.css"; @import "@astryxdesign/core/astryx.css" layer(astryx-components); `; assert.deepEqual(bareCssImportSpecifiers(css), ['@astryxdesign/core']); }); });