2026-04-05

This commit is contained in:
gcch 2026-04-05 13:11:21 +02:00
commit 2971f5516d
62 changed files with 439 additions and 497 deletions

View file

@ -1,3 +1,11 @@
import config from "@gcch/configuration-oxlint";
import gcchConfig from "@gcch/configuration-oxlint";
import { OxlintConfig } from "oxlint";
const config: OxlintConfig = {
...gcchConfig,
globals: {
Bun: "readonly",
},
};
export default config;

View file

@ -2,24 +2,6 @@ import { defineConfig, devices } from "@playwright/test";
export default defineConfig({
fullyParallel: true,
reporter: "list",
retries: 1,
testDir: "../tests",
timeout: 10_000,
workers: "100%",
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: "https://haikuatelier.gcch.local",
trace: "retry-with-trace",
clientCertificates: [
{
origin: "https://haikuatelier.gcch.local",
certPath: "../containers/data/certs/_wildcard.gcch.local.pem",
keyPath: "../containers/data/certs/_wildcard.gcch.local-key.pem",
},
],
ignoreHTTPSErrors: true,
},
projects: [
{
name: "desktop-chromium-1920",
@ -62,4 +44,22 @@ export default defineConfig({
// use: { ...devices["Pixel 7 landscape"] },
// },
],
reporter: "list",
retries: 1,
testDir: "../tests",
timeout: 10_000,
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: "https://haikuatelier.gcch.local",
trace: "retry-with-trace",
clientCertificates: [
{
origin: "https://haikuatelier.gcch.local",
certPath: "../containers/data/certs/_wildcard.gcch.local.pem",
keyPath: "../containers/data/certs/_wildcard.gcch.local-key.pem",
},
],
ignoreHTTPSErrors: true,
},
workers: "100%",
});

View file

@ -1,40 +1,59 @@
// @ts-expect-error -- La dépendance ne dispose pas de types.
import { pipe, Array as FxArray } from "effect";
import type stylelint from "stylelint";
import { propertyGroups } from "stylelint-config-clean-order";
/** @type {string[][]} */
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- Impossible de typer correctement avec JSDoc.
const groupesProprietes = Array.from(/** @type {GroupeProprietes} */ propertyGroups);
/**
* Définition d'un groupe de Propriétés _CSS_ du plugin `stylelint-config-clean-order` pour _Stylelint_.
*/
type StylelintConfigCleanOrderPropertyGroup = {
emptyLineBefore: "never" | "threshold";
noEmptyLineBetween: boolean;
properties: ReadonlyArray<string> | string;
};
/** @import { StylelintConfigCleanOrderPropertyGroup } from "./lib/stylelint" */
/** @type {Array<StylelintConfigCleanOrderPropertyGroup>} */
const ordreProprietes = groupesProprietes.map((properties) => ({
emptyLineBefore: "never",
noEmptyLineBetween: true,
properties,
}));
const ordreProprietes: ReadonlyArray<StylelintConfigCleanOrderPropertyGroup> = pipe(
Array.from(propertyGroups),
FxArray.map((properties: ReadonlyArray<string>) => ({
emptyLineBefore: "never",
noEmptyLineBetween: true,
properties,
})),
);
/** @type {import("stylelint").Config} */
export default {
const stylelintConfig: stylelint.Config = {
extends: ["stylelint-config-standard-scss", "stylelint-config-sass-guidelines", "stylelint-config-clean-order"],
plugins: ["stylelint-declaration-block-no-ignored-properties"],
rules: {
"@stylistic/function-parentheses-space-inside": null,
"@stylistic/selector-list-comma-newline-after": null,
"@stylistic/string-quotes": null,
"custom-property-pattern": null,
"@stylistic/function-parentheses-space-inside": undefined,
"@stylistic/selector-list-comma-newline-after": undefined,
"@stylistic/string-quotes": undefined,
"custom-property-pattern": undefined,
"declaration-block-no-duplicate-custom-properties": true,
"declaration-block-no-duplicate-properties": true,
"declaration-block-no-redundant-longhand-properties": true,
"declaration-block-no-shorthand-property-overrides": true,
"max-nesting-depth": null,
"no-descending-specificity": null,
"no-duplicate-selectors": [true, { disallowInList: false }],
"order/properties-order": [ordreProprietes, { severity: "error", unspecified: "bottomAlphabetical" }],
"max-nesting-depth": undefined,
"no-descending-specificity": undefined,
"no-duplicate-selectors": [
true,
{
disallowInList: false,
},
],
"order/properties-order": [
ordreProprietes,
{
severity: "error",
unspecified: "bottomAlphabetical",
},
],
"plugin/declaration-block-no-ignored-properties": true,
"selector-class-pattern": null,
"selector-id-pattern": null,
"selector-max-compound-selectors": null,
"selector-max-id": null,
"selector-no-qualifying-type": null,
"selector-class-pattern": undefined,
"selector-id-pattern": undefined,
"selector-max-compound-selectors": undefined,
"selector-max-id": undefined,
"selector-no-qualifying-type": undefined,
},
};
export default stylelintConfig;

View file

@ -17,7 +17,6 @@ export default defineConfig(({ mode }) => {
return {
base: "/",
cacheDir: ".cache/vite",
build: {
assetsDir: ".",
cssMinify: "lightningcss",
@ -40,6 +39,7 @@ export default defineConfig(({ mode }) => {
target: "es2020",
write: true,
},
cacheDir: ".cache/vite",
css: {
devSourcemap: true,
transformer: "lightningcss",