@aamini/config 0.0.20 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -20
- package/dist/anti-slop/index.d.mts +6 -0
- package/dist/anti-slop/index.mjs +2414 -0
- package/dist/anti-slop/index.mjs.map +1 -0
- package/dist/merge-BEomHgbw.d.mts +21 -0
- package/dist/merge-DThKwm_6.mjs +193 -0
- package/dist/merge-DThKwm_6.mjs.map +1 -0
- package/dist/playwright.d.mts +8 -3
- package/dist/playwright.mjs +20 -11
- package/dist/playwright.mjs.map +1 -1
- package/dist/root-U5B4x0aj.mjs +15 -0
- package/dist/root-U5B4x0aj.mjs.map +1 -0
- package/dist/tanstack/index.d.mts +45 -0
- package/dist/tanstack/index.mjs +191 -0
- package/dist/tanstack/index.mjs.map +1 -0
- package/dist/vite-plus/index.d.mts +101 -0
- package/dist/vite-plus/index.mjs +2 -0
- package/dist/vitest/browser.d.mts +22 -0
- package/dist/vitest/browser.mjs +84 -0
- package/dist/vitest/browser.mjs.map +1 -0
- package/dist/vitest/db.d.mts +28 -0
- package/dist/vitest/db.mjs +42 -0
- package/dist/vitest/db.mjs.map +1 -0
- package/dist/vitest/index.d.mts +29 -0
- package/dist/vitest/index.mjs +2 -0
- package/dist/vitest/react.d.mts +34 -0
- package/dist/vitest/react.mjs +43 -0
- package/dist/vitest/react.mjs.map +1 -0
- package/dist/vitest/server.d.mts +13 -0
- package/dist/vitest/server.mjs +28 -0
- package/dist/vitest/server.mjs.map +1 -0
- package/dist/vitest-CXdvqyRH.mjs +169 -0
- package/dist/vitest-CXdvqyRH.mjs.map +1 -0
- package/package.json +169 -95
- package/tsconfig/astro.json +9 -0
- package/tsconfig/{tsconfig.strict.json → base.json} +8 -0
- package/tsconfig/react.json +9 -0
- package/dist/setup/styles.d.mts +0 -1
- package/dist/setup/styles.mjs +0 -2
- package/dist/test/browser.d.mts +0 -17
- package/dist/test/browser.mjs +0 -35
- package/dist/test/browser.mjs.map +0 -1
- package/dist/test/db.d.mts +0 -41
- package/dist/test/db.mjs +0 -93
- package/dist/test/db.mjs.map +0 -1
- package/dist/test/server.d.mts +0 -16
- package/dist/test/server.mjs +0 -30
- package/dist/test/server.mjs.map +0 -1
- package/dist/test/visual-page.d.mts +0 -30
- package/dist/test/visual-page.mjs +0 -40
- package/dist/test/visual-page.mjs.map +0 -1
- package/dist/vite.d.mts +0 -73
- package/dist/vite.mjs +0 -211
- package/dist/vite.mjs.map +0 -1
- package/tsconfig/tsconfig.lib.json +0 -19
- package/tsconfig/tsconfig.tanstack.json +0 -17
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { expect } from "./browser.mjs";
|
|
2
|
-
import { createElement } from "react";
|
|
3
|
-
import { page } from "vite-plus/test/browser";
|
|
4
|
-
import { render } from "vitest-browser-react";
|
|
5
|
-
//#region src/test/visual-page.tsx
|
|
6
|
-
async function waitForImages() {
|
|
7
|
-
await Promise.all(Array.from(document.images, (image) => {
|
|
8
|
-
if (image.complete) return Promise.resolve();
|
|
9
|
-
return image.decode().catch(() => void 0);
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
|
-
async function expectComponentScreenshot({ component, name, waitFor, prepare, setup, target = (screen) => screen.container, fullPage = true, viewport = {
|
|
13
|
-
width: 1280,
|
|
14
|
-
height: 720
|
|
15
|
-
} }) {
|
|
16
|
-
localStorage.clear();
|
|
17
|
-
document.body.replaceChildren();
|
|
18
|
-
await setup?.();
|
|
19
|
-
await page.viewport(viewport.width, viewport.height);
|
|
20
|
-
const container = document.body.appendChild(document.createElement("div"));
|
|
21
|
-
container.style.width = "100vw";
|
|
22
|
-
container.style.minHeight = "100vh";
|
|
23
|
-
const screen = await render(createElement(component), { container });
|
|
24
|
-
await prepare?.(screen);
|
|
25
|
-
await expect.element(waitFor(screen)).toBeVisible();
|
|
26
|
-
await document.fonts.ready;
|
|
27
|
-
await waitForImages();
|
|
28
|
-
if (fullPage) {
|
|
29
|
-
const frame = window.frameElement;
|
|
30
|
-
if (frame) {
|
|
31
|
-
frame.style.width = `${document.body.scrollWidth}px`;
|
|
32
|
-
frame.style.height = `${document.body.scrollHeight}px`;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
await expect.element(target(screen)).toMatchScreenshot(`${name}.png`, { screenshotOptions: { scale: "css" } });
|
|
36
|
-
}
|
|
37
|
-
//#endregion
|
|
38
|
-
export { expectComponentScreenshot };
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=visual-page.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visual-page.mjs","names":[],"sources":["../../src/test/visual-page.tsx"],"sourcesContent":["import { createElement, type ComponentType } from 'react'\nimport { page } from 'vite-plus/test/browser'\nimport { render } from 'vitest-browser-react'\n\nimport { expect } from './browser'\n\nasync function waitForImages() {\n\tawait Promise.all(\n\t\tArray.from(document.images, (image) => {\n\t\t\tif (image.complete) return Promise.resolve()\n\t\t\treturn image.decode().catch(() => undefined)\n\t\t}),\n\t)\n}\n\ntype ScreenshotOptions = {\n\tcomponent: ComponentType\n\tname: string\n\twaitFor: (\n\t\tscreen: Awaited<ReturnType<typeof render>>,\n\t) => HTMLElement | SVGElement | null\n\tprepare?: (screen: Awaited<ReturnType<typeof render>>) => void | Promise<void>\n\tsetup?: () => void | Promise<void>\n\ttarget?: (screen: Awaited<ReturnType<typeof render>>) => HTMLElement\n\tfullPage?: boolean\n\tviewport?: { width: number; height: number }\n}\n\nexport async function expectComponentScreenshot({\n\tcomponent,\n\tname,\n\twaitFor,\n\tprepare,\n\tsetup,\n\ttarget = (screen) => screen.container,\n\tfullPage = true,\n\tviewport = { width: 1280, height: 720 },\n}: ScreenshotOptions) {\n\tlocalStorage.clear()\n\tdocument.body.replaceChildren()\n\tawait setup?.()\n\tawait page.viewport(viewport.width, viewport.height)\n\n\tconst container = document.body.appendChild(document.createElement('div'))\n\tcontainer.style.width = '100vw'\n\tcontainer.style.minHeight = '100vh'\n\n\tconst screen = await render(createElement(component), { container })\n\tawait prepare?.(screen)\n\tawait expect.element(waitFor(screen)).toBeVisible()\n\tawait document.fonts.ready\n\tawait waitForImages()\n\n\tif (fullPage) {\n\t\tconst frame = window.frameElement as HTMLIFrameElement | null\n\t\tif (frame) {\n\t\t\tframe.style.width = `${document.body.scrollWidth}px`\n\t\t\tframe.style.height = `${document.body.scrollHeight}px`\n\t\t}\n\t}\n\n\tawait expect.element(target(screen)).toMatchScreenshot(`${name}.png`, {\n\t\tscreenshotOptions: { scale: 'css' },\n\t})\n}\n"],"mappings":";;;;;AAMA,eAAe,gBAAgB;CAC9B,MAAM,QAAQ,IACb,MAAM,KAAK,SAAS,SAAS,UAAU;EACtC,IAAI,MAAM,UAAU,OAAO,QAAQ,SAAS;EAC5C,OAAO,MAAM,QAAQ,CAAC,YAAY,KAAA,EAAU;GAC3C,CACF;;AAgBF,eAAsB,0BAA0B,EAC/C,WACA,MACA,SACA,SACA,OACA,UAAU,WAAW,OAAO,WAC5B,WAAW,MACX,WAAW;CAAE,OAAO;CAAM,QAAQ;CAAK,IAClB;CACrB,aAAa,OAAO;CACpB,SAAS,KAAK,iBAAiB;CAC/B,MAAM,SAAS;CACf,MAAM,KAAK,SAAS,SAAS,OAAO,SAAS,OAAO;CAEpD,MAAM,YAAY,SAAS,KAAK,YAAY,SAAS,cAAc,MAAM,CAAC;CAC1E,UAAU,MAAM,QAAQ;CACxB,UAAU,MAAM,YAAY;CAE5B,MAAM,SAAS,MAAM,OAAO,cAAc,UAAU,EAAE,EAAE,WAAW,CAAC;CACpE,MAAM,UAAU,OAAO;CACvB,MAAM,OAAO,QAAQ,QAAQ,OAAO,CAAC,CAAC,aAAa;CACnD,MAAM,SAAS,MAAM;CACrB,MAAM,eAAe;CAErB,IAAI,UAAU;EACb,MAAM,QAAQ,OAAO;EACrB,IAAI,OAAO;GACV,MAAM,MAAM,QAAQ,GAAG,SAAS,KAAK,YAAY;GACjD,MAAM,MAAM,SAAS,GAAG,SAAS,KAAK,aAAa;;;CAIrD,MAAM,OAAO,QAAQ,OAAO,OAAO,CAAC,CAAC,kBAAkB,GAAG,KAAK,OAAO,EACrE,mBAAmB,EAAE,OAAO,OAAO,EACnC,CAAC"}
|
package/dist/vite.d.mts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { TestProjectConfiguration, UserConfig } from "vite-plus";
|
|
2
|
-
|
|
3
|
-
//#region src/vite.d.ts
|
|
4
|
-
declare const fmt: {
|
|
5
|
-
singleQuote: true;
|
|
6
|
-
semi: false;
|
|
7
|
-
useTabs: true;
|
|
8
|
-
experimentalTailwindcss: {};
|
|
9
|
-
printWidth: number;
|
|
10
|
-
experimentalSortPackageJson: boolean;
|
|
11
|
-
proseWrap: "always";
|
|
12
|
-
ignorePatterns: string[];
|
|
13
|
-
overrides: {
|
|
14
|
-
files: string[];
|
|
15
|
-
options: {
|
|
16
|
-
useTabs: false;
|
|
17
|
-
};
|
|
18
|
-
}[];
|
|
19
|
-
};
|
|
20
|
-
declare const lint: {
|
|
21
|
-
plugins: ("eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "jsdoc" | "jsx-a11y" | "react-perf" | "promise" | "node")[];
|
|
22
|
-
categories: {};
|
|
23
|
-
options: {
|
|
24
|
-
typeAware: true;
|
|
25
|
-
typeCheck: true;
|
|
26
|
-
};
|
|
27
|
-
rules: {
|
|
28
|
-
'no-empty-pattern': "off";
|
|
29
|
-
'no-console': ["error", {
|
|
30
|
-
allow: string[];
|
|
31
|
-
}];
|
|
32
|
-
};
|
|
33
|
-
settings: {
|
|
34
|
-
'jsx-a11y': {
|
|
35
|
-
components: {};
|
|
36
|
-
attributes: {};
|
|
37
|
-
};
|
|
38
|
-
react: {
|
|
39
|
-
formComponents: any[];
|
|
40
|
-
linkComponents: any[];
|
|
41
|
-
};
|
|
42
|
-
jsdoc: {
|
|
43
|
-
ignorePrivate: false;
|
|
44
|
-
ignoreInternal: false;
|
|
45
|
-
ignoreReplacesDocs: true;
|
|
46
|
-
overrideReplacesDocs: true;
|
|
47
|
-
augmentsExtendsReplacesDocs: false;
|
|
48
|
-
implementsReplacesDocs: false;
|
|
49
|
-
exemptDestructuredRootsFromChecks: false;
|
|
50
|
-
tagNamePreference: {};
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
env: {
|
|
54
|
-
builtin: true;
|
|
55
|
-
};
|
|
56
|
-
globals: {};
|
|
57
|
-
ignorePatterns: string[];
|
|
58
|
-
};
|
|
59
|
-
interface ProjectOverrides {
|
|
60
|
-
server?: TestProjectConfiguration;
|
|
61
|
-
browser?: TestProjectConfiguration;
|
|
62
|
-
}
|
|
63
|
-
declare const test: (projectOverrides?: ProjectOverrides) => UserConfig["test"];
|
|
64
|
-
declare const createAppConfig: ({
|
|
65
|
-
root,
|
|
66
|
-
projectOverrides
|
|
67
|
-
}: {
|
|
68
|
-
root?: string;
|
|
69
|
-
projectOverrides?: ProjectOverrides;
|
|
70
|
-
}) => UserConfig;
|
|
71
|
-
//#endregion
|
|
72
|
-
export { createAppConfig, fmt, lint, test };
|
|
73
|
-
//# sourceMappingURL=vite.d.mts.map
|
package/dist/vite.mjs
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { nitro } from "nitro/vite";
|
|
2
|
-
import { devtools } from "@tanstack/devtools-vite";
|
|
3
|
-
import { tanstackStart } from "@tanstack/react-start/plugin/vite";
|
|
4
|
-
import viteReact, { reactCompilerPreset } from "@vitejs/plugin-react";
|
|
5
|
-
import tailwindcss from "@tailwindcss/vite";
|
|
6
|
-
import babel from "@rolldown/plugin-babel";
|
|
7
|
-
import svgr from "vite-plugin-svgr";
|
|
8
|
-
import { resolve } from "node:path";
|
|
9
|
-
import { mergeConfig } from "vite-plus";
|
|
10
|
-
import { playwright } from "vite-plus/test/browser-playwright";
|
|
11
|
-
import { existsSync } from "node:fs";
|
|
12
|
-
//#region src/plugins/virtual-modules.ts
|
|
13
|
-
const HANDLER_LOCATIONS = [
|
|
14
|
-
"tests/__mocks__/http.ts",
|
|
15
|
-
"tests/__mocks__/http.js",
|
|
16
|
-
"__mocks__/handlers.ts",
|
|
17
|
-
"__mocks__/handlers.js",
|
|
18
|
-
"src/mocks/handlers.ts",
|
|
19
|
-
"src/mocks/handlers.js"
|
|
20
|
-
];
|
|
21
|
-
const STYLES_LOCATIONS = [
|
|
22
|
-
"src/styles.css",
|
|
23
|
-
"src/index.css",
|
|
24
|
-
"src/app.css"
|
|
25
|
-
];
|
|
26
|
-
function createVirtualFilePlugin({ locations, moduleId, name, sideEffectOnly = false }) {
|
|
27
|
-
const resolvedModuleId = `\0${moduleId}`;
|
|
28
|
-
let root = process.cwd();
|
|
29
|
-
return {
|
|
30
|
-
name,
|
|
31
|
-
configResolved(config) {
|
|
32
|
-
root = config.root;
|
|
33
|
-
},
|
|
34
|
-
resolveId(id) {
|
|
35
|
-
if (id === moduleId) return resolvedModuleId;
|
|
36
|
-
},
|
|
37
|
-
load(id) {
|
|
38
|
-
if (id !== resolvedModuleId) return void 0;
|
|
39
|
-
for (const location of locations) {
|
|
40
|
-
const fullPath = resolve(root, location);
|
|
41
|
-
if (existsSync(fullPath)) {
|
|
42
|
-
if (sideEffectOnly) return `import ${JSON.stringify(fullPath)}`;
|
|
43
|
-
return `export { default } from ${JSON.stringify(fullPath)}`;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
throw new Error(`No file found for ${moduleId}. Expected one of:\n${locations.map((location) => ` - ${resolve(root, location)}`).join("\n")}`);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function createMswHandlersPlugin() {
|
|
51
|
-
return createVirtualFilePlugin({
|
|
52
|
-
locations: HANDLER_LOCATIONS,
|
|
53
|
-
moduleId: "@test/handlers",
|
|
54
|
-
name: "aamini-msw-handlers"
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
function createStylesPlugin() {
|
|
58
|
-
return createVirtualFilePlugin({
|
|
59
|
-
locations: STYLES_LOCATIONS,
|
|
60
|
-
moduleId: "@test/styles",
|
|
61
|
-
name: "aamini-test-styles",
|
|
62
|
-
sideEffectOnly: true
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
//#endregion
|
|
66
|
-
//#region src/vite.ts
|
|
67
|
-
const stylesSetup = "@aamini/config/setup/styles";
|
|
68
|
-
const routeFileIgnorePattern = "(__tests__|\\.test\\.tsx$)";
|
|
69
|
-
const fmt = {
|
|
70
|
-
singleQuote: true,
|
|
71
|
-
semi: false,
|
|
72
|
-
useTabs: true,
|
|
73
|
-
experimentalTailwindcss: {},
|
|
74
|
-
printWidth: 80,
|
|
75
|
-
experimentalSortPackageJson: false,
|
|
76
|
-
proseWrap: "always",
|
|
77
|
-
ignorePatterns: [
|
|
78
|
-
"**/.output",
|
|
79
|
-
"**/dist/**",
|
|
80
|
-
"pnpm-lock.yaml",
|
|
81
|
-
"**/routeTree.gen.ts"
|
|
82
|
-
],
|
|
83
|
-
overrides: [{
|
|
84
|
-
files: ["*.{yaml,yml}"],
|
|
85
|
-
options: { useTabs: false }
|
|
86
|
-
}]
|
|
87
|
-
};
|
|
88
|
-
const lint = {
|
|
89
|
-
plugins: [
|
|
90
|
-
"eslint",
|
|
91
|
-
"unicorn",
|
|
92
|
-
"typescript",
|
|
93
|
-
"oxc",
|
|
94
|
-
"react",
|
|
95
|
-
"react-perf",
|
|
96
|
-
"import",
|
|
97
|
-
"jsdoc",
|
|
98
|
-
"jsx-a11y",
|
|
99
|
-
"node",
|
|
100
|
-
"promise"
|
|
101
|
-
],
|
|
102
|
-
categories: {},
|
|
103
|
-
options: {
|
|
104
|
-
typeAware: true,
|
|
105
|
-
typeCheck: true
|
|
106
|
-
},
|
|
107
|
-
rules: {
|
|
108
|
-
"no-empty-pattern": "off",
|
|
109
|
-
"no-console": ["error", { allow: ["warn", "error"] }]
|
|
110
|
-
},
|
|
111
|
-
settings: {
|
|
112
|
-
"jsx-a11y": {
|
|
113
|
-
components: {},
|
|
114
|
-
attributes: {}
|
|
115
|
-
},
|
|
116
|
-
react: {
|
|
117
|
-
formComponents: [],
|
|
118
|
-
linkComponents: []
|
|
119
|
-
},
|
|
120
|
-
jsdoc: {
|
|
121
|
-
ignorePrivate: false,
|
|
122
|
-
ignoreInternal: false,
|
|
123
|
-
ignoreReplacesDocs: true,
|
|
124
|
-
overrideReplacesDocs: true,
|
|
125
|
-
augmentsExtendsReplacesDocs: false,
|
|
126
|
-
implementsReplacesDocs: false,
|
|
127
|
-
exemptDestructuredRootsFromChecks: false,
|
|
128
|
-
tagNamePreference: {}
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
env: { builtin: true },
|
|
132
|
-
globals: {},
|
|
133
|
-
ignorePatterns: ["**/dist/**"]
|
|
134
|
-
};
|
|
135
|
-
const test = (projectOverrides) => ({
|
|
136
|
-
passWithNoTests: true,
|
|
137
|
-
projects: [
|
|
138
|
-
{
|
|
139
|
-
extends: true,
|
|
140
|
-
test: {
|
|
141
|
-
name: "unit",
|
|
142
|
-
include: ["src/**/*.test.unit.ts"]
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
mergeConfig({
|
|
146
|
-
extends: true,
|
|
147
|
-
plugins: [createMswHandlersPlugin()],
|
|
148
|
-
test: {
|
|
149
|
-
name: "server",
|
|
150
|
-
include: ["src/**/*.test.ts"],
|
|
151
|
-
testTimeout: 3e4,
|
|
152
|
-
fileParallelism: false
|
|
153
|
-
}
|
|
154
|
-
}, projectOverrides?.server ?? {}),
|
|
155
|
-
mergeConfig({
|
|
156
|
-
extends: true,
|
|
157
|
-
plugins: [createMswHandlersPlugin(), createStylesPlugin()],
|
|
158
|
-
test: {
|
|
159
|
-
name: "browser",
|
|
160
|
-
include: ["src/**/*.test.tsx", "tests/**/*.test.tsx"],
|
|
161
|
-
setupFiles: [stylesSetup],
|
|
162
|
-
browser: {
|
|
163
|
-
instances: [{ browser: "chromium" }],
|
|
164
|
-
provider: playwright(),
|
|
165
|
-
enabled: true,
|
|
166
|
-
headless: true
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}, projectOverrides?.browser ?? {})
|
|
170
|
-
]
|
|
171
|
-
});
|
|
172
|
-
const createAppConfig = ({ root = process.cwd(), projectOverrides }) => ({
|
|
173
|
-
root,
|
|
174
|
-
resolve: {
|
|
175
|
-
tsconfigPaths: true,
|
|
176
|
-
dedupe: ["react", "react-dom"],
|
|
177
|
-
alias: [
|
|
178
|
-
{
|
|
179
|
-
find: "@/mocks",
|
|
180
|
-
replacement: resolve(root, "__mocks__")
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
find: "@",
|
|
184
|
-
replacement: resolve(root, "src")
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
find: "@tests",
|
|
188
|
-
replacement: resolve(root, "tests")
|
|
189
|
-
}
|
|
190
|
-
]
|
|
191
|
-
},
|
|
192
|
-
plugins: [
|
|
193
|
-
tanstackStart({ router: { routeFileIgnorePattern } }),
|
|
194
|
-
...process.env.VITEST === "true" ? [] : [devtools({ injectSource: { enabled: false } }), nitro()],
|
|
195
|
-
tailwindcss(),
|
|
196
|
-
viteReact(),
|
|
197
|
-
babel({ presets: [reactCompilerPreset()] }),
|
|
198
|
-
svgr({
|
|
199
|
-
include: "**/*.svg",
|
|
200
|
-
svgrOptions: { exportType: "default" }
|
|
201
|
-
})
|
|
202
|
-
],
|
|
203
|
-
fmt,
|
|
204
|
-
lint,
|
|
205
|
-
staged: { "*.{js,ts,tsx}": "vp check --fix" },
|
|
206
|
-
test: test(projectOverrides)
|
|
207
|
-
});
|
|
208
|
-
//#endregion
|
|
209
|
-
export { createAppConfig, fmt, lint, test };
|
|
210
|
-
|
|
211
|
-
//# sourceMappingURL=vite.mjs.map
|
package/dist/vite.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vite.mjs","names":[],"sources":["../src/plugins/virtual-modules.ts","../src/vite.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport type { Plugin } from 'vite'\n\nconst HANDLER_LOCATIONS = [\n\t'tests/__mocks__/http.ts',\n\t'tests/__mocks__/http.js',\n\t'__mocks__/handlers.ts',\n\t'__mocks__/handlers.js',\n\t'src/mocks/handlers.ts',\n\t'src/mocks/handlers.js',\n]\n\nconst STYLES_LOCATIONS = ['src/styles.css', 'src/index.css', 'src/app.css']\n\nfunction createVirtualFilePlugin({\n\tlocations,\n\tmoduleId,\n\tname,\n\tsideEffectOnly = false,\n}: {\n\tlocations: string[]\n\tmoduleId: string\n\tname: string\n\tsideEffectOnly?: boolean\n}): Plugin {\n\tconst resolvedModuleId = `\\0${moduleId}`\n\tlet root = process.cwd()\n\n\treturn {\n\t\tname,\n\t\tconfigResolved(config) {\n\t\t\troot = config.root\n\t\t},\n\t\tresolveId(id) {\n\t\t\tif (id === moduleId) return resolvedModuleId\n\t\t\treturn undefined\n\t\t},\n\t\tload(id) {\n\t\t\tif (id !== resolvedModuleId) return undefined\n\n\t\t\tfor (const location of locations) {\n\t\t\t\tconst fullPath = resolve(root, location)\n\t\t\t\tif (existsSync(fullPath)) {\n\t\t\t\t\tif (sideEffectOnly) return `import ${JSON.stringify(fullPath)}`\n\t\t\t\t\treturn `export { default } from ${JSON.stringify(fullPath)}`\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`No file found for ${moduleId}. Expected one of:\\n${locations\n\t\t\t\t\t.map((location) => ` - ${resolve(root, location)}`)\n\t\t\t\t\t.join('\\n')}`,\n\t\t\t)\n\t\t},\n\t}\n}\n\nexport function createMswHandlersPlugin() {\n\treturn createVirtualFilePlugin({\n\t\tlocations: HANDLER_LOCATIONS,\n\t\tmoduleId: '@test/handlers',\n\t\tname: 'aamini-msw-handlers',\n\t})\n}\n\nexport function createStylesPlugin() {\n\treturn createVirtualFilePlugin({\n\t\tlocations: STYLES_LOCATIONS,\n\t\tmoduleId: '@test/styles',\n\t\tname: 'aamini-test-styles',\n\t\tsideEffectOnly: true,\n\t})\n}\n","import { nitro } from 'nitro/vite'\nimport { devtools } from '@tanstack/devtools-vite'\nimport { tanstackStart } from '@tanstack/react-start/plugin/vite'\nimport viteReact, { reactCompilerPreset } from '@vitejs/plugin-react'\nimport tailwindcss from '@tailwindcss/vite'\nimport babel from '@rolldown/plugin-babel'\nimport svgr from 'vite-plugin-svgr'\nimport { resolve } from 'node:path'\nimport {\n\tmergeConfig,\n\ttype UserConfig,\n\ttype TestProjectConfiguration,\n} from 'vite-plus'\nimport { playwright } from 'vite-plus/test/browser-playwright'\nimport {\n\tcreateMswHandlersPlugin,\n\tcreateStylesPlugin,\n} from './plugins/virtual-modules.ts'\n\nconst stylesSetup = '@aamini/config/setup/styles'\nconst routeFileIgnorePattern = '(__tests__|\\\\.test\\\\.tsx$)'\n\nexport const fmt = {\n\tsingleQuote: true,\n\tsemi: false,\n\tuseTabs: true,\n\texperimentalTailwindcss: {},\n\tprintWidth: 80,\n\texperimentalSortPackageJson: false,\n\tproseWrap: 'always',\n\tignorePatterns: [\n\t\t'**/.output',\n\t\t'**/dist/**',\n\t\t'pnpm-lock.yaml',\n\t\t'**/routeTree.gen.ts',\n\t],\n\toverrides: [\n\t\t{\n\t\t\tfiles: ['*.{yaml,yml}'],\n\t\t\toptions: { useTabs: false },\n\t\t},\n\t],\n} satisfies UserConfig['fmt']\n\nexport const lint = {\n\tplugins: [\n\t\t'eslint',\n\t\t'unicorn',\n\t\t'typescript',\n\t\t'oxc',\n\t\t'react',\n\t\t'react-perf',\n\t\t'import',\n\t\t'jsdoc',\n\t\t'jsx-a11y',\n\t\t'node',\n\t\t'promise',\n\t],\n\tcategories: {},\n\toptions: {\n\t\ttypeAware: true,\n\t\ttypeCheck: true,\n\t},\n\trules: {\n\t\t'no-empty-pattern': 'off',\n\t\t'no-console': ['error', { allow: ['warn', 'error'] }],\n\t},\n\tsettings: {\n\t\t'jsx-a11y': { components: {}, attributes: {} },\n\t\treact: { formComponents: [], linkComponents: [] },\n\t\tjsdoc: {\n\t\t\tignorePrivate: false,\n\t\t\tignoreInternal: false,\n\t\t\tignoreReplacesDocs: true,\n\t\t\toverrideReplacesDocs: true,\n\t\t\taugmentsExtendsReplacesDocs: false,\n\t\t\timplementsReplacesDocs: false,\n\t\t\texemptDestructuredRootsFromChecks: false,\n\t\t\ttagNamePreference: {},\n\t\t},\n\t},\n\tenv: { builtin: true },\n\tglobals: {},\n\tignorePatterns: ['**/dist/**'],\n} satisfies UserConfig['lint']\n\ninterface ProjectOverrides {\n\tserver?: TestProjectConfiguration\n\tbrowser?: TestProjectConfiguration\n}\n\nexport const test = (\n\tprojectOverrides?: ProjectOverrides,\n): UserConfig['test'] => ({\n\tpassWithNoTests: true,\n\tprojects: [\n\t\t{\n\t\t\textends: true,\n\t\t\ttest: {\n\t\t\t\tname: 'unit',\n\t\t\t\tinclude: ['src/**/*.test.unit.ts'],\n\t\t\t},\n\t\t},\n\t\tmergeConfig(\n\t\t\t{\n\t\t\t\textends: true,\n\t\t\t\tplugins: [createMswHandlersPlugin()],\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'server',\n\t\t\t\t\tinclude: ['src/**/*.test.ts'],\n\t\t\t\t\ttestTimeout: 30_000,\n\t\t\t\t\tfileParallelism: false,\n\t\t\t\t},\n\t\t\t} satisfies TestProjectConfiguration as Record<string, unknown>,\n\t\t\t(projectOverrides?.server ?? {}) as Record<string, unknown>,\n\t\t),\n\t\tmergeConfig(\n\t\t\t{\n\t\t\t\textends: true,\n\t\t\t\tplugins: [createMswHandlersPlugin(), createStylesPlugin()],\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'browser',\n\t\t\t\t\tinclude: ['src/**/*.test.tsx', 'tests/**/*.test.tsx'],\n\t\t\t\t\tsetupFiles: [stylesSetup],\n\t\t\t\t\tbrowser: {\n\t\t\t\t\t\tinstances: [{ browser: 'chromium' }],\n\t\t\t\t\t\tprovider: playwright(),\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\theadless: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} satisfies TestProjectConfiguration as Record<string, unknown>,\n\t\t\t(projectOverrides?.browser ?? {}) as Record<string, unknown>,\n\t\t),\n\t],\n})\n\nexport const createAppConfig = ({\n\troot = process.cwd(),\n\tprojectOverrides,\n}: {\n\troot?: string\n\tprojectOverrides?: ProjectOverrides\n}): UserConfig => ({\n\troot,\n\tresolve: {\n\t\ttsconfigPaths: true,\n\t\tdedupe: ['react', 'react-dom'],\n\t\talias: [\n\t\t\t{ find: '@/mocks', replacement: resolve(root, '__mocks__') },\n\t\t\t{ find: '@', replacement: resolve(root, 'src') },\n\t\t\t{ find: '@tests', replacement: resolve(root, 'tests') },\n\t\t],\n\t},\n\tplugins: [\n\t\ttanstackStart({ router: { routeFileIgnorePattern } }),\n\t\t...(process.env.VITEST === 'true'\n\t\t\t? []\n\t\t\t: [devtools({ injectSource: { enabled: false } }), nitro()]),\n\t\ttailwindcss(),\n\t\tviteReact(),\n\t\tbabel({ presets: [reactCompilerPreset()] }),\n\t\tsvgr({\n\t\t\tinclude: '**/*.svg',\n\t\t\tsvgrOptions: { exportType: 'default' },\n\t\t}),\n\t],\n\tfmt: fmt,\n\tlint: lint,\n\tstaged: {\n\t\t'*.{js,ts,tsx}': 'vp check --fix',\n\t},\n\ttest: test(projectOverrides),\n})\n"],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json.schemastore.org/tsconfig",
|
|
3
|
-
"extends": "./tsconfig.strict.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"noEmit": true,
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"esModuleInterop": true,
|
|
9
|
-
"incremental": false,
|
|
10
|
-
"isolatedModules": true,
|
|
11
|
-
"lib": ["es2022", "DOM", "DOM.Iterable"],
|
|
12
|
-
"module": "NodeNext",
|
|
13
|
-
"moduleDetection": "force",
|
|
14
|
-
"moduleResolution": "NodeNext",
|
|
15
|
-
"resolveJsonModule": true,
|
|
16
|
-
"skipLibCheck": true,
|
|
17
|
-
"target": "ES2022"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json.schemastore.org/tsconfig",
|
|
3
|
-
"extends": "./tsconfig.strict.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"target": "ES2022",
|
|
6
|
-
"jsx": "react-jsx",
|
|
7
|
-
"module": "ESNext",
|
|
8
|
-
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
9
|
-
"types": ["vite-plus/client"],
|
|
10
|
-
|
|
11
|
-
/* Bundler mode */
|
|
12
|
-
"moduleResolution": "bundler",
|
|
13
|
-
"allowImportingTsExtensions": true,
|
|
14
|
-
"verbatimModuleSyntax": false,
|
|
15
|
-
"noEmit": true
|
|
16
|
-
}
|
|
17
|
-
}
|