@aamini/config 0.0.16 → 0.0.18

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.
@@ -6,6 +6,7 @@ import { Pool } from "pg";
6
6
 
7
7
  //#region src/test/db.d.ts
8
8
  interface DbConfig {
9
+ root?: string;
9
10
  schemaPath?: string;
10
11
  migrationsPath?: string;
11
12
  postgresImage?: string;
package/dist/test/db.mjs CHANGED
@@ -1,4 +1,5 @@
1
- import { resolve } from "node:path";
1
+ import { dirname, resolve } from "node:path";
2
+ import { existsSync } from "node:fs";
2
3
  import { afterEach, beforeEach, describe, expect, test as test$1, vi } from "vite-plus/test";
3
4
  import { setupServer } from "msw/node";
4
5
  //#region src/test/db.ts
@@ -6,6 +7,16 @@ const DEFAULT_SCHEMA_PATH = "src/db/tables.ts";
6
7
  const DEFAULT_MIGRATIONS_PATH = "src/db/migrations";
7
8
  const DEFAULT_IMAGE = "postgres:17";
8
9
  const DEFAULT_EXTENSIONS = ["pg_trgm"];
10
+ const ROOT_MARKERS = [
11
+ "vite.config.ts",
12
+ "vite.config.mts",
13
+ "vite.config.js",
14
+ "vite.config.mjs",
15
+ "vitest.config.ts",
16
+ "vitest.config.mts",
17
+ "vitest.config.js",
18
+ "vitest.config.mjs"
19
+ ];
9
20
  let dbConfig = {};
10
21
  let mswServer;
11
22
  let seedFunction = async () => {};
@@ -16,6 +27,15 @@ async function ensureMswServer() {
16
27
  }
17
28
  return mswServer;
18
29
  }
30
+ function findProjectRoot(start = process.cwd()) {
31
+ let directory = start;
32
+ while (true) {
33
+ if (ROOT_MARKERS.some((marker) => existsSync(resolve(directory, marker)))) return directory;
34
+ const parent = dirname(directory);
35
+ if (parent === directory) return start;
36
+ directory = parent;
37
+ }
38
+ }
19
39
  const test = test$1.extend({
20
40
  server: [async ({}, use) => {
21
41
  const server = await ensureMswServer();
@@ -36,8 +56,9 @@ const test = test$1.extend({
36
56
  const { drizzle } = await import("drizzle-orm/node-postgres");
37
57
  const { Wait } = await import("testcontainers");
38
58
  const { Pool } = await import("pg");
39
- const schemaPath = resolve(process.cwd(), dbConfig.schemaPath ?? DEFAULT_SCHEMA_PATH);
40
- const migrationsFolder = resolve(process.cwd(), dbConfig.migrationsPath ?? DEFAULT_MIGRATIONS_PATH);
59
+ const root = dbConfig.root ?? findProjectRoot();
60
+ const schemaPath = resolve(root, dbConfig.schemaPath ?? DEFAULT_SCHEMA_PATH);
61
+ const migrationsFolder = resolve(root, dbConfig.migrationsPath ?? DEFAULT_MIGRATIONS_PATH);
41
62
  const container = await new PostgreSqlContainer(dbConfig.postgresImage ?? DEFAULT_IMAGE).withWaitStrategy(Wait.forHealthCheck()).start();
42
63
  const client = new Pool({ connectionString: container.getConnectionUri() });
43
64
  const db = Object.assign(drizzle({ client }), { $client: client });
@@ -1 +1 @@
1
- {"version":3,"file":"db.mjs","names":["baseTest"],"sources":["../../src/test/db.ts"],"sourcesContent":["import { setupServer, type SetupServer } from 'msw/node'\nimport { resolve } from 'node:path'\nimport { test as baseTest } from 'vite-plus/test'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport type { Pool } from 'pg'\n\nconst DEFAULT_SCHEMA_PATH = 'src/db/tables.ts'\nconst DEFAULT_MIGRATIONS_PATH = 'src/db/migrations'\nconst DEFAULT_IMAGE = 'postgres:17'\nconst DEFAULT_EXTENSIONS = ['pg_trgm']\n\nexport interface DbConfig {\n\tschemaPath?: string\n\tmigrationsPath?: string\n\tpostgresImage?: string\n}\n\nexport type Database = NodePgDatabase & {\n\t$client: Pool\n}\n\nexport interface DbFixture {\n\tserver: SetupServer\n\t_cleanup: void\n\tdb: Database\n\tseedFunction: (db: Database) => Promise<void> | void\n}\n\nlet dbConfig: DbConfig = {}\nlet mswServer: SetupServer | undefined\nlet seedFunction: (db: Database) => Promise<void> | void = async () => {}\n\nasync function ensureMswServer(): Promise<SetupServer> {\n\tif (!mswServer) {\n\t\tconst { default: handlers } = await import('@test/handlers')\n\t\tmswServer = setupServer(...handlers)\n\t}\n\treturn mswServer\n}\n\nexport const test = baseTest.extend<DbFixture>({\n\tserver: [\n\t\tasync ({}, use) => {\n\t\t\tconst server = await ensureMswServer()\n\t\t\tserver.listen({ onUnhandledRequest: 'bypass' })\n\t\t\tawait use(server)\n\t\t\tserver.close()\n\t\t},\n\t\t{ auto: true, scope: 'worker' },\n\t],\n\t_cleanup: [\n\t\tasync ({ server }, use) => {\n\t\t\tawait use()\n\t\t\tserver.resetHandlers()\n\t\t},\n\t\t{ auto: true },\n\t],\n\tseedFunction: [async ({}, use) => use(seedFunction), { scope: 'file' }],\n\tdb: [\n\t\tasync ({ seedFunction }, use) => {\n\t\t\tconst { PostgreSqlContainer } = await import('@testcontainers/postgresql')\n\t\t\tconst { drizzle } = await import('drizzle-orm/node-postgres')\n\t\t\tconst { Wait } = await import('testcontainers')\n\t\t\tconst { Pool } = await import('pg')\n\t\t\tconst schemaPath = resolve(\n\t\t\t\tprocess.cwd(),\n\t\t\t\tdbConfig.schemaPath ?? DEFAULT_SCHEMA_PATH,\n\t\t\t)\n\t\t\tconst migrationsFolder = resolve(\n\t\t\t\tprocess.cwd(),\n\t\t\t\tdbConfig.migrationsPath ?? DEFAULT_MIGRATIONS_PATH,\n\t\t\t)\n\t\t\tconst container = await new PostgreSqlContainer(\n\t\t\t\tdbConfig.postgresImage ?? DEFAULT_IMAGE,\n\t\t\t)\n\t\t\t\t.withWaitStrategy(Wait.forHealthCheck())\n\t\t\t\t.start()\n\t\t\tconst client = new Pool({\n\t\t\t\tconnectionString: container.getConnectionUri(),\n\t\t\t})\n\t\t\tconst db = Object.assign(drizzle({ client }), { $client: client })\n\n\t\t\ttry {\n\t\t\t\tawait seedDatabase(db, { schemaPath, migrationsFolder, seedFunction })\n\t\t\t\tawait use(db)\n\t\t\t} finally {\n\t\t\t\tawait db.$client.end()\n\t\t\t\tawait container.stop()\n\t\t\t}\n\t\t},\n\t\t{ scope: 'file' },\n\t],\n})\n\nexport { afterEach, beforeEach, describe, expect, vi } from 'vite-plus/test'\n\nexport function initDb(\n\tseed: (db: Database) => Promise<void> | void,\n\tconfig: DbConfig = {},\n) {\n\tdbConfig = config\n\tseedFunction = seed\n}\n\nexport interface SeedDatabaseOptions {\n\tschemaPath: string\n\tmigrationsFolder: string\n\tseedFunction?: (db: Database) => Promise<void> | void\n\textensions?: string[]\n}\n\nexport async function seedDatabase(\n\tdb: Database,\n\t{\n\t\tschemaPath,\n\t\tmigrationsFolder,\n\t\tseedFunction,\n\t\textensions = DEFAULT_EXTENSIONS,\n\t}: SeedDatabaseOptions,\n) {\n\tconst { migrate } = await import('drizzle-orm/node-postgres/migrator')\n\tconst { reset } = await import('drizzle-seed')\n\tconst schema = await import(/* @vite-ignore */ schemaPath)\n\n\tfor (const ext of extensions) {\n\t\tawait db.execute(`CREATE EXTENSION IF NOT EXISTS \"${ext}\"`)\n\t}\n\tawait migrate(db, { migrationsFolder })\n\tawait reset(db, schema)\n\tif (seedFunction) await seedFunction(db)\n}\n"],"mappings":";;;;AAMA,MAAM,sBAAsB;AAC5B,MAAM,0BAA0B;AAChC,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,UAAU;AAmBtC,IAAI,WAAqB,EAAE;AAC3B,IAAI;AACJ,IAAI,eAAuD,YAAY;AAEvE,eAAe,kBAAwC;CACtD,IAAI,CAAC,WAAW;EACf,MAAM,EAAE,SAAS,aAAa,MAAM,OAAO;EAC3C,YAAY,YAAY,GAAG,SAAS;;CAErC,OAAO;;AAGR,MAAa,OAAOA,OAAS,OAAkB;CAC9C,QAAQ,CACP,OAAO,IAAI,QAAQ;EAClB,MAAM,SAAS,MAAM,iBAAiB;EACtC,OAAO,OAAO,EAAE,oBAAoB,UAAU,CAAC;EAC/C,MAAM,IAAI,OAAO;EACjB,OAAO,OAAO;IAEf;EAAE,MAAM;EAAM,OAAO;EAAU,CAC/B;CACD,UAAU,CACT,OAAO,EAAE,UAAU,QAAQ;EAC1B,MAAM,KAAK;EACX,OAAO,eAAe;IAEvB,EAAE,MAAM,MAAM,CACd;CACD,cAAc,CAAC,OAAO,IAAI,QAAQ,IAAI,aAAa,EAAE,EAAE,OAAO,QAAQ,CAAC;CACvE,IAAI,CACH,OAAO,EAAE,gBAAgB,QAAQ;EAChC,MAAM,EAAE,wBAAwB,MAAM,OAAO;EAC7C,MAAM,EAAE,YAAY,MAAM,OAAO;EACjC,MAAM,EAAE,SAAS,MAAM,OAAO;EAC9B,MAAM,EAAE,SAAS,MAAM,OAAO;EAC9B,MAAM,aAAa,QAClB,QAAQ,KAAK,EACb,SAAS,cAAc,oBACvB;EACD,MAAM,mBAAmB,QACxB,QAAQ,KAAK,EACb,SAAS,kBAAkB,wBAC3B;EACD,MAAM,YAAY,MAAM,IAAI,oBAC3B,SAAS,iBAAiB,cAC1B,CACC,iBAAiB,KAAK,gBAAgB,CAAC,CACvC,OAAO;EACT,MAAM,SAAS,IAAI,KAAK,EACvB,kBAAkB,UAAU,kBAAkB,EAC9C,CAAC;EACF,MAAM,KAAK,OAAO,OAAO,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,QAAQ,CAAC;EAElE,IAAI;GACH,MAAM,aAAa,IAAI;IAAE;IAAY;IAAkB;IAAc,CAAC;GACtE,MAAM,IAAI,GAAG;YACJ;GACT,MAAM,GAAG,QAAQ,KAAK;GACtB,MAAM,UAAU,MAAM;;IAGxB,EAAE,OAAO,QAAQ,CACjB;CACD,CAAC;AAIF,SAAgB,OACf,MACA,SAAmB,EAAE,EACpB;CACD,WAAW;CACX,eAAe;;AAUhB,eAAsB,aACrB,IACA,EACC,YACA,kBACA,cACA,aAAa,sBAEb;CACD,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,SAAS,MAAM;;EAA0B;;CAE/C,KAAK,MAAM,OAAO,YACjB,MAAM,GAAG,QAAQ,mCAAmC,IAAI,GAAG;CAE5D,MAAM,QAAQ,IAAI,EAAE,kBAAkB,CAAC;CACvC,MAAM,MAAM,IAAI,OAAO;CACvB,IAAI,cAAc,MAAM,aAAa,GAAG"}
1
+ {"version":3,"file":"db.mjs","names":["baseTest"],"sources":["../../src/test/db.ts"],"sourcesContent":["import { setupServer, type SetupServer } from 'msw/node'\nimport { existsSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { test as baseTest } from 'vite-plus/test'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport type { Pool } from 'pg'\n\nconst DEFAULT_SCHEMA_PATH = 'src/db/tables.ts'\nconst DEFAULT_MIGRATIONS_PATH = 'src/db/migrations'\nconst DEFAULT_IMAGE = 'postgres:17'\nconst DEFAULT_EXTENSIONS = ['pg_trgm']\nconst ROOT_MARKERS = [\n\t'vite.config.ts',\n\t'vite.config.mts',\n\t'vite.config.js',\n\t'vite.config.mjs',\n\t'vitest.config.ts',\n\t'vitest.config.mts',\n\t'vitest.config.js',\n\t'vitest.config.mjs',\n]\n\nexport interface DbConfig {\n\troot?: string\n\tschemaPath?: string\n\tmigrationsPath?: string\n\tpostgresImage?: string\n}\n\nexport type Database = NodePgDatabase & {\n\t$client: Pool\n}\n\nexport interface DbFixture {\n\tserver: SetupServer\n\t_cleanup: void\n\tdb: Database\n\tseedFunction: (db: Database) => Promise<void> | void\n}\n\nlet dbConfig: DbConfig = {}\nlet mswServer: SetupServer | undefined\nlet seedFunction: (db: Database) => Promise<void> | void = async () => {}\n\nasync function ensureMswServer(): Promise<SetupServer> {\n\tif (!mswServer) {\n\t\tconst { default: handlers } = await import('@test/handlers')\n\t\tmswServer = setupServer(...handlers)\n\t}\n\treturn mswServer\n}\n\nfunction findProjectRoot(start = process.cwd()) {\n\tlet directory = start\n\n\twhile (true) {\n\t\tif (ROOT_MARKERS.some((marker) => existsSync(resolve(directory, marker)))) {\n\t\t\treturn directory\n\t\t}\n\n\t\tconst parent = dirname(directory)\n\t\tif (parent === directory) return start\n\t\tdirectory = parent\n\t}\n}\n\nexport const test = baseTest.extend<DbFixture>({\n\tserver: [\n\t\tasync ({}, use) => {\n\t\t\tconst server = await ensureMswServer()\n\t\t\tserver.listen({ onUnhandledRequest: 'bypass' })\n\t\t\tawait use(server)\n\t\t\tserver.close()\n\t\t},\n\t\t{ auto: true, scope: 'worker' },\n\t],\n\t_cleanup: [\n\t\tasync ({ server }, use) => {\n\t\t\tawait use()\n\t\t\tserver.resetHandlers()\n\t\t},\n\t\t{ auto: true },\n\t],\n\tseedFunction: [async ({}, use) => use(seedFunction), { scope: 'file' }],\n\tdb: [\n\t\tasync ({ seedFunction }, use) => {\n\t\t\tconst { PostgreSqlContainer } = await import('@testcontainers/postgresql')\n\t\t\tconst { drizzle } = await import('drizzle-orm/node-postgres')\n\t\t\tconst { Wait } = await import('testcontainers')\n\t\t\tconst { Pool } = await import('pg')\n\t\t\tconst root = dbConfig.root ?? findProjectRoot()\n\t\t\tconst schemaPath = resolve(\n\t\t\t\troot,\n\t\t\t\tdbConfig.schemaPath ?? DEFAULT_SCHEMA_PATH,\n\t\t\t)\n\t\t\tconst migrationsFolder = resolve(\n\t\t\t\troot,\n\t\t\t\tdbConfig.migrationsPath ?? DEFAULT_MIGRATIONS_PATH,\n\t\t\t)\n\t\t\tconst container = await new PostgreSqlContainer(\n\t\t\t\tdbConfig.postgresImage ?? DEFAULT_IMAGE,\n\t\t\t)\n\t\t\t\t.withWaitStrategy(Wait.forHealthCheck())\n\t\t\t\t.start()\n\t\t\tconst client = new Pool({\n\t\t\t\tconnectionString: container.getConnectionUri(),\n\t\t\t})\n\t\t\tconst db = Object.assign(drizzle({ client }), { $client: client })\n\n\t\t\ttry {\n\t\t\t\tawait seedDatabase(db, { schemaPath, migrationsFolder, seedFunction })\n\t\t\t\tawait use(db)\n\t\t\t} finally {\n\t\t\t\tawait db.$client.end()\n\t\t\t\tawait container.stop()\n\t\t\t}\n\t\t},\n\t\t{ scope: 'file' },\n\t],\n})\n\nexport { afterEach, beforeEach, describe, expect, vi } from 'vite-plus/test'\n\nexport function initDb(\n\tseed: (db: Database) => Promise<void> | void,\n\tconfig: DbConfig = {},\n) {\n\tdbConfig = config\n\tseedFunction = seed\n}\n\nexport interface SeedDatabaseOptions {\n\tschemaPath: string\n\tmigrationsFolder: string\n\tseedFunction?: (db: Database) => Promise<void> | void\n\textensions?: string[]\n}\n\nexport async function seedDatabase(\n\tdb: Database,\n\t{\n\t\tschemaPath,\n\t\tmigrationsFolder,\n\t\tseedFunction,\n\t\textensions = DEFAULT_EXTENSIONS,\n\t}: SeedDatabaseOptions,\n) {\n\tconst { migrate } = await import('drizzle-orm/node-postgres/migrator')\n\tconst { reset } = await import('drizzle-seed')\n\tconst schema = await import(/* @vite-ignore */ schemaPath)\n\n\tfor (const ext of extensions) {\n\t\tawait db.execute(`CREATE EXTENSION IF NOT EXISTS \"${ext}\"`)\n\t}\n\tawait migrate(db, { migrationsFolder })\n\tawait reset(db, schema)\n\tif (seedFunction) await seedFunction(db)\n}\n"],"mappings":";;;;;AAOA,MAAM,sBAAsB;AAC5B,MAAM,0BAA0B;AAChC,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,UAAU;AACtC,MAAM,eAAe;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAoBD,IAAI,WAAqB,EAAE;AAC3B,IAAI;AACJ,IAAI,eAAuD,YAAY;AAEvE,eAAe,kBAAwC;CACtD,IAAI,CAAC,WAAW;EACf,MAAM,EAAE,SAAS,aAAa,MAAM,OAAO;EAC3C,YAAY,YAAY,GAAG,SAAS;;CAErC,OAAO;;AAGR,SAAS,gBAAgB,QAAQ,QAAQ,KAAK,EAAE;CAC/C,IAAI,YAAY;CAEhB,OAAO,MAAM;EACZ,IAAI,aAAa,MAAM,WAAW,WAAW,QAAQ,WAAW,OAAO,CAAC,CAAC,EACxE,OAAO;EAGR,MAAM,SAAS,QAAQ,UAAU;EACjC,IAAI,WAAW,WAAW,OAAO;EACjC,YAAY;;;AAId,MAAa,OAAOA,OAAS,OAAkB;CAC9C,QAAQ,CACP,OAAO,IAAI,QAAQ;EAClB,MAAM,SAAS,MAAM,iBAAiB;EACtC,OAAO,OAAO,EAAE,oBAAoB,UAAU,CAAC;EAC/C,MAAM,IAAI,OAAO;EACjB,OAAO,OAAO;IAEf;EAAE,MAAM;EAAM,OAAO;EAAU,CAC/B;CACD,UAAU,CACT,OAAO,EAAE,UAAU,QAAQ;EAC1B,MAAM,KAAK;EACX,OAAO,eAAe;IAEvB,EAAE,MAAM,MAAM,CACd;CACD,cAAc,CAAC,OAAO,IAAI,QAAQ,IAAI,aAAa,EAAE,EAAE,OAAO,QAAQ,CAAC;CACvE,IAAI,CACH,OAAO,EAAE,gBAAgB,QAAQ;EAChC,MAAM,EAAE,wBAAwB,MAAM,OAAO;EAC7C,MAAM,EAAE,YAAY,MAAM,OAAO;EACjC,MAAM,EAAE,SAAS,MAAM,OAAO;EAC9B,MAAM,EAAE,SAAS,MAAM,OAAO;EAC9B,MAAM,OAAO,SAAS,QAAQ,iBAAiB;EAC/C,MAAM,aAAa,QAClB,MACA,SAAS,cAAc,oBACvB;EACD,MAAM,mBAAmB,QACxB,MACA,SAAS,kBAAkB,wBAC3B;EACD,MAAM,YAAY,MAAM,IAAI,oBAC3B,SAAS,iBAAiB,cAC1B,CACC,iBAAiB,KAAK,gBAAgB,CAAC,CACvC,OAAO;EACT,MAAM,SAAS,IAAI,KAAK,EACvB,kBAAkB,UAAU,kBAAkB,EAC9C,CAAC;EACF,MAAM,KAAK,OAAO,OAAO,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,QAAQ,CAAC;EAElE,IAAI;GACH,MAAM,aAAa,IAAI;IAAE;IAAY;IAAkB;IAAc,CAAC;GACtE,MAAM,IAAI,GAAG;YACJ;GACT,MAAM,GAAG,QAAQ,KAAK;GACtB,MAAM,UAAU,MAAM;;IAGxB,EAAE,OAAO,QAAQ,CACjB;CACD,CAAC;AAIF,SAAgB,OACf,MACA,SAAmB,EAAE,EACpB;CACD,WAAW;CACX,eAAe;;AAUhB,eAAsB,aACrB,IACA,EACC,YACA,kBACA,cACA,aAAa,sBAEb;CACD,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,SAAS,MAAM;;EAA0B;;CAE/C,KAAK,MAAM,OAAO,YACjB,MAAM,GAAG,QAAQ,mCAAmC,IAAI,GAAG;CAE5D,MAAM,QAAQ,IAAI,EAAE,kBAAkB,CAAC;CACvC,MAAM,MAAM,IAAI,OAAO;CACvB,IAAI,cAAc,MAAM,aAAa,GAAG"}
package/dist/vite.d.mts CHANGED
@@ -1,81 +1,73 @@
1
- import { TestProjectConfiguration } from "vite-plus";
1
+ import { TestProjectConfiguration, UserConfig } from "vite-plus";
2
2
 
3
- //#region src/workspace.d.ts
4
- declare const workspaceConfig: {
5
- fmt: {
6
- singleQuote: boolean;
7
- semi: boolean;
8
- useTabs: boolean;
9
- experimentalTailwindcss: {};
10
- printWidth: number;
11
- experimentalSortPackageJson: boolean;
12
- proseWrap: string;
13
- ignorePatterns: string[];
14
- overrides: {
15
- files: string[];
16
- options: {
17
- useTabs: boolean;
18
- };
19
- }[];
20
- };
21
- lint: {
22
- plugins: string[];
23
- categories: {};
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[];
24
15
  options: {
25
- typeAware: boolean;
26
- typeCheck: boolean;
16
+ useTabs: false;
27
17
  };
28
- rules: {
29
- 'no-empty-pattern': string;
30
- 'no-console': (string | {
31
- allow: string[];
32
- })[];
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: {};
33
37
  };
34
- settings: {
35
- 'jsx-a11y': {
36
- components: {};
37
- attributes: {};
38
- };
39
- react: {
40
- formComponents: any[];
41
- linkComponents: any[];
42
- };
43
- jsdoc: {
44
- ignorePrivate: boolean;
45
- ignoreInternal: boolean;
46
- ignoreReplacesDocs: boolean;
47
- overrideReplacesDocs: boolean;
48
- augmentsExtendsReplacesDocs: boolean;
49
- implementsReplacesDocs: boolean;
50
- exemptDestructuredRootsFromChecks: boolean;
51
- tagNamePreference: {};
52
- };
38
+ react: {
39
+ formComponents: any[];
40
+ linkComponents: any[];
53
41
  };
54
- env: {
55
- builtin: boolean;
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: {};
56
51
  };
57
- globals: {};
58
- ignorePatterns: string[];
59
52
  };
60
- staged: {
61
- '*.{js,ts,tsx}': string;
53
+ env: {
54
+ builtin: true;
62
55
  };
56
+ globals: {};
57
+ ignorePatterns: string[];
63
58
  };
64
- //#endregion
65
- //#region src/vite.d.ts
66
59
  interface ProjectOverrides {
67
60
  server?: TestProjectConfiguration;
68
61
  browser?: TestProjectConfiguration;
69
62
  }
70
- interface AppConfigOptions {
71
- root?: string;
72
- projectOverrides?: ProjectOverrides;
73
- }
63
+ declare const test: (projectOverrides?: ProjectOverrides) => UserConfig["test"];
74
64
  declare const createAppConfig: ({
75
65
  root,
76
66
  projectOverrides
77
- }?: AppConfigOptions) => Record<string, unknown>;
78
- declare const viteConfig: typeof createAppConfig;
67
+ }: {
68
+ root?: string;
69
+ projectOverrides?: ProjectOverrides;
70
+ }) => UserConfig;
79
71
  //#endregion
80
- export { AppConfigOptions, createAppConfig, viteConfig, workspaceConfig };
72
+ export { createAppConfig, fmt, lint, test };
81
73
  //# sourceMappingURL=vite.d.mts.map
package/dist/vite.mjs CHANGED
@@ -60,79 +60,113 @@ function createStylesPlugin() {
60
60
  sideEffectOnly: true
61
61
  });
62
62
  }
63
- const workspaceConfig = {
64
- fmt: {
65
- singleQuote: true,
66
- semi: false,
67
- useTabs: true,
68
- experimentalTailwindcss: {},
69
- printWidth: 80,
70
- experimentalSortPackageJson: false,
71
- proseWrap: "always",
72
- ignorePatterns: [
73
- "**/.output",
74
- "**/dist/**",
75
- "pnpm-lock.yaml",
76
- "**/routeTree.gen.ts"
77
- ],
78
- overrides: [{
79
- files: ["*.{yaml,yml}"],
80
- options: { useTabs: false }
81
- }]
63
+ //#endregion
64
+ //#region src/vite.ts
65
+ const stylesSetup = "@aamini/config/setup/styles";
66
+ const fmt = {
67
+ singleQuote: true,
68
+ semi: false,
69
+ useTabs: true,
70
+ experimentalTailwindcss: {},
71
+ printWidth: 80,
72
+ experimentalSortPackageJson: false,
73
+ proseWrap: "always",
74
+ ignorePatterns: [
75
+ "**/.output",
76
+ "**/dist/**",
77
+ "pnpm-lock.yaml",
78
+ "**/routeTree.gen.ts"
79
+ ],
80
+ overrides: [{
81
+ files: ["*.{yaml,yml}"],
82
+ options: { useTabs: false }
83
+ }]
84
+ };
85
+ const lint = {
86
+ plugins: [
87
+ "eslint",
88
+ "unicorn",
89
+ "typescript",
90
+ "oxc",
91
+ "react",
92
+ "react-perf",
93
+ "import",
94
+ "jsdoc",
95
+ "jsx-a11y",
96
+ "node",
97
+ "promise"
98
+ ],
99
+ categories: {},
100
+ options: {
101
+ typeAware: true,
102
+ typeCheck: true
82
103
  },
83
- lint: {
84
- plugins: [
85
- "eslint",
86
- "unicorn",
87
- "typescript",
88
- "oxc",
89
- "react",
90
- "react-perf",
91
- "import",
92
- "jsdoc",
93
- "jsx-a11y",
94
- "node",
95
- "promise"
96
- ],
97
- categories: {},
98
- options: {
99
- typeAware: true,
100
- typeCheck: true
104
+ rules: {
105
+ "no-empty-pattern": "off",
106
+ "no-console": ["error", { allow: ["warn", "error"] }]
107
+ },
108
+ settings: {
109
+ "jsx-a11y": {
110
+ components: {},
111
+ attributes: {}
101
112
  },
102
- rules: {
103
- "no-empty-pattern": "off",
104
- "no-console": ["error", { allow: ["warn", "error"] }]
113
+ react: {
114
+ formComponents: [],
115
+ linkComponents: []
105
116
  },
106
- settings: {
107
- "jsx-a11y": {
108
- components: {},
109
- attributes: {}
110
- },
111
- react: {
112
- formComponents: [],
113
- linkComponents: []
114
- },
115
- jsdoc: {
116
- ignorePrivate: false,
117
- ignoreInternal: false,
118
- ignoreReplacesDocs: true,
119
- overrideReplacesDocs: true,
120
- augmentsExtendsReplacesDocs: false,
121
- implementsReplacesDocs: false,
122
- exemptDestructuredRootsFromChecks: false,
123
- tagNamePreference: {}
124
- }
125
- },
126
- env: { builtin: true },
127
- globals: {},
128
- ignorePatterns: ["**/dist/**"]
117
+ jsdoc: {
118
+ ignorePrivate: false,
119
+ ignoreInternal: false,
120
+ ignoreReplacesDocs: true,
121
+ overrideReplacesDocs: true,
122
+ augmentsExtendsReplacesDocs: false,
123
+ implementsReplacesDocs: false,
124
+ exemptDestructuredRootsFromChecks: false,
125
+ tagNamePreference: {}
126
+ }
129
127
  },
130
- staged: { "*.{js,ts,tsx}": "vp check --fix" }
128
+ env: { builtin: true },
129
+ globals: {},
130
+ ignorePatterns: ["**/dist/**"]
131
131
  };
132
- //#endregion
133
- //#region src/vite.ts
134
- const stylesSetup = "@aamini/config/setup/styles";
135
- const createAppConfig = ({ root = process.cwd(), projectOverrides } = {}) => ({
132
+ const test = (projectOverrides) => ({
133
+ passWithNoTests: true,
134
+ projects: [
135
+ {
136
+ extends: true,
137
+ test: {
138
+ name: "unit",
139
+ include: ["src/**/*.test.unit.ts"]
140
+ }
141
+ },
142
+ mergeConfig({
143
+ extends: true,
144
+ plugins: [createMswHandlersPlugin()],
145
+ test: {
146
+ name: "server",
147
+ include: ["src/**/*.test.ts"],
148
+ testTimeout: 3e4,
149
+ fileParallelism: false
150
+ }
151
+ }, projectOverrides?.server ?? {}),
152
+ mergeConfig({
153
+ extends: true,
154
+ plugins: [createMswHandlersPlugin(), createStylesPlugin()],
155
+ test: {
156
+ name: "browser",
157
+ include: ["src/**/*.test.tsx", "tests/**/*.test.tsx"],
158
+ setupFiles: [stylesSetup],
159
+ browser: {
160
+ instances: [{ browser: "chromium" }],
161
+ provider: playwright(),
162
+ enabled: true,
163
+ headless: true
164
+ }
165
+ }
166
+ }, projectOverrides?.browser ?? {})
167
+ ]
168
+ });
169
+ const createAppConfig = ({ root = process.cwd(), projectOverrides }) => ({
136
170
  root,
137
171
  resolve: {
138
172
  tsconfigPaths: true,
@@ -163,49 +197,12 @@ const createAppConfig = ({ root = process.cwd(), projectOverrides } = {}) => ({
163
197
  svgrOptions: { exportType: "default" }
164
198
  })
165
199
  ],
166
- fmt: workspaceConfig.fmt,
167
- lint: workspaceConfig.lint,
168
- staged: workspaceConfig.staged,
169
- test: {
170
- passWithNoTests: true,
171
- projects: [
172
- {
173
- extends: true,
174
- test: {
175
- name: "unit",
176
- include: ["src/**/*.test.unit.ts"]
177
- }
178
- },
179
- mergeConfig({
180
- extends: true,
181
- plugins: [createMswHandlersPlugin()],
182
- test: {
183
- name: "server",
184
- include: ["src/**/*.test.ts"],
185
- testTimeout: 3e4,
186
- fileParallelism: false
187
- }
188
- }, projectOverrides?.server ?? {}),
189
- mergeConfig({
190
- extends: true,
191
- plugins: [createMswHandlersPlugin(), createStylesPlugin()],
192
- test: {
193
- name: "browser",
194
- include: ["src/**/*.test.tsx", "tests/**/*.test.tsx"],
195
- setupFiles: [stylesSetup],
196
- browser: {
197
- instances: [{ browser: "chromium" }],
198
- provider: playwright(),
199
- enabled: true,
200
- headless: true
201
- }
202
- }
203
- }, projectOverrides?.browser ?? {})
204
- ]
205
- }
200
+ fmt,
201
+ lint,
202
+ staged: { "*.{js,ts,tsx}": "vp check --fix" },
203
+ test: test(projectOverrides)
206
204
  });
207
- const viteConfig = createAppConfig;
208
205
  //#endregion
209
- export { createAppConfig, viteConfig, workspaceConfig };
206
+ export { createAppConfig, fmt, lint, test };
210
207
 
211
208
  //# sourceMappingURL=vite.mjs.map
package/dist/vite.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.mjs","names":[],"sources":["../src/plugins/virtual-modules.ts","../src/workspace.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'__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","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}\n\nconst 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}\n\nexport const workspaceConfig = {\n\tfmt,\n\tlint,\n\tstaged: {\n\t\t'*.{js,ts,tsx}': 'vp check --fix',\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 { mergeConfig, type TestProjectConfiguration } from 'vite-plus'\nimport { playwright } from 'vite-plus/test/browser-playwright'\nimport {\n\tcreateMswHandlersPlugin,\n\tcreateStylesPlugin,\n} from './plugins/virtual-modules.ts'\nimport { workspaceConfig } from './workspace.ts'\n\nconst stylesSetup = '@aamini/config/setup/styles'\n\ninterface ProjectOverrides {\n\tserver?: TestProjectConfiguration\n\tbrowser?: TestProjectConfiguration\n}\n\nexport interface AppConfigOptions {\n\troot?: string\n\tprojectOverrides?: ProjectOverrides\n}\n\nexport const createAppConfig = ({\n\troot = process.cwd(),\n\tprojectOverrides,\n}: AppConfigOptions = {}): Record<string, unknown> => ({\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(),\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: workspaceConfig.fmt,\n\tlint: workspaceConfig.lint,\n\tstaged: workspaceConfig.staged,\n\ttest: {\n\t\tpassWithNoTests: true,\n\t\tprojects: [\n\t\t\t{\n\t\t\t\textends: true,\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'unit',\n\t\t\t\t\tinclude: ['src/**/*.test.unit.ts'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tmergeConfig(\n\t\t\t\t{\n\t\t\t\t\textends: true,\n\t\t\t\t\tplugins: [createMswHandlersPlugin()],\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tname: 'server',\n\t\t\t\t\t\tinclude: ['src/**/*.test.ts'],\n\t\t\t\t\t\ttestTimeout: 30_000,\n\t\t\t\t\t\tfileParallelism: false,\n\t\t\t\t\t},\n\t\t\t\t} satisfies TestProjectConfiguration as Record<string, unknown>,\n\t\t\t\t(projectOverrides?.server ?? {}) as Record<string, unknown>,\n\t\t\t),\n\t\t\tmergeConfig(\n\t\t\t\t{\n\t\t\t\t\textends: true,\n\t\t\t\t\tplugins: [createMswHandlersPlugin(), createStylesPlugin()],\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tname: 'browser',\n\t\t\t\t\t\tinclude: ['src/**/*.test.tsx', 'tests/**/*.test.tsx'],\n\t\t\t\t\t\tsetupFiles: [stylesSetup],\n\t\t\t\t\t\tbrowser: {\n\t\t\t\t\t\t\tinstances: [{ browser: 'chromium' }],\n\t\t\t\t\t\t\tprovider: playwright(),\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\theadless: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies TestProjectConfiguration as Record<string, unknown>,\n\t\t\t\t(projectOverrides?.browser ?? {}) as Record<string, unknown>,\n\t\t\t),\n\t\t],\n\t},\n})\n\nexport const viteConfig: typeof createAppConfig = createAppConfig\nexport { workspaceConfig } from './workspace.ts'\n"],"mappings":"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"}
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'__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'\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(),\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":";;;;;;;;;;;;AAIA,MAAM,oBAAoB;CACzB;CACA;CACA;CACA;CACA;AAED,MAAM,mBAAmB;CAAC;CAAkB;CAAiB;CAAc;AAE3E,SAAS,wBAAwB,EAChC,WACA,UACA,MACA,iBAAiB,SAMP;CACV,MAAM,mBAAmB,KAAK;CAC9B,IAAI,OAAO,QAAQ,KAAK;CAExB,OAAO;EACN;EACA,eAAe,QAAQ;GACtB,OAAO,OAAO;;EAEf,UAAU,IAAI;GACb,IAAI,OAAO,UAAU,OAAO;;EAG7B,KAAK,IAAI;GACR,IAAI,OAAO,kBAAkB,OAAO,KAAA;GAEpC,KAAK,MAAM,YAAY,WAAW;IACjC,MAAM,WAAW,QAAQ,MAAM,SAAS;IACxC,IAAI,WAAW,SAAS,EAAE;KACzB,IAAI,gBAAgB,OAAO,UAAU,KAAK,UAAU,SAAS;KAC7D,OAAO,2BAA2B,KAAK,UAAU,SAAS;;;GAI5D,MAAM,IAAI,MACT,qBAAqB,SAAS,sBAAsB,UAClD,KAAK,aAAa,OAAO,QAAQ,MAAM,SAAS,GAAG,CACnD,KAAK,KAAK,GACZ;;EAEF;;AAGF,SAAgB,0BAA0B;CACzC,OAAO,wBAAwB;EAC9B,WAAW;EACX,UAAU;EACV,MAAM;EACN,CAAC;;AAGH,SAAgB,qBAAqB;CACpC,OAAO,wBAAwB;EAC9B,WAAW;EACX,UAAU;EACV,MAAM;EACN,gBAAgB;EAChB,CAAC;;;;ACnDH,MAAM,cAAc;AAEpB,MAAa,MAAM;CAClB,aAAa;CACb,MAAM;CACN,SAAS;CACT,yBAAyB,EAAE;CAC3B,YAAY;CACZ,6BAA6B;CAC7B,WAAW;CACX,gBAAgB;EACf;EACA;EACA;EACA;EACA;CACD,WAAW,CACV;EACC,OAAO,CAAC,eAAe;EACvB,SAAS,EAAE,SAAS,OAAO;EAC3B,CACD;CACD;AAED,MAAa,OAAO;CACnB,SAAS;EACR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,YAAY,EAAE;CACd,SAAS;EACR,WAAW;EACX,WAAW;EACX;CACD,OAAO;EACN,oBAAoB;EACpB,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,QAAQ,EAAE,CAAC;EACrD;CACD,UAAU;EACT,YAAY;GAAE,YAAY,EAAE;GAAE,YAAY,EAAE;GAAE;EAC9C,OAAO;GAAE,gBAAgB,EAAE;GAAE,gBAAgB,EAAE;GAAE;EACjD,OAAO;GACN,eAAe;GACf,gBAAgB;GAChB,oBAAoB;GACpB,sBAAsB;GACtB,6BAA6B;GAC7B,wBAAwB;GACxB,mCAAmC;GACnC,mBAAmB,EAAE;GACrB;EACD;CACD,KAAK,EAAE,SAAS,MAAM;CACtB,SAAS,EAAE;CACX,gBAAgB,CAAC,aAAa;CAC9B;AAOD,MAAa,QACZ,sBACyB;CACzB,iBAAiB;CACjB,UAAU;EACT;GACC,SAAS;GACT,MAAM;IACL,MAAM;IACN,SAAS,CAAC,wBAAwB;IAClC;GACD;EACD,YACC;GACC,SAAS;GACT,SAAS,CAAC,yBAAyB,CAAC;GACpC,MAAM;IACL,MAAM;IACN,SAAS,CAAC,mBAAmB;IAC7B,aAAa;IACb,iBAAiB;IACjB;GACD,EACA,kBAAkB,UAAU,EAAE,CAC/B;EACD,YACC;GACC,SAAS;GACT,SAAS,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;GAC1D,MAAM;IACL,MAAM;IACN,SAAS,CAAC,qBAAqB,sBAAsB;IACrD,YAAY,CAAC,YAAY;IACzB,SAAS;KACR,WAAW,CAAC,EAAE,SAAS,YAAY,CAAC;KACpC,UAAU,YAAY;KACtB,SAAS;KACT,UAAU;KACV;IACD;GACD,EACA,kBAAkB,WAAW,EAAE,CAChC;EACD;CACD;AAED,MAAa,mBAAmB,EAC/B,OAAO,QAAQ,KAAK,EACpB,wBAIkB;CAClB;CACA,SAAS;EACR,eAAe;EACf,QAAQ,CAAC,SAAS,YAAY;EAC9B,OAAO;GACN;IAAE,MAAM;IAAW,aAAa,QAAQ,MAAM,YAAY;IAAE;GAC5D;IAAE,MAAM;IAAK,aAAa,QAAQ,MAAM,MAAM;IAAE;GAChD;IAAE,MAAM;IAAU,aAAa,QAAQ,MAAM,QAAQ;IAAE;GACvD;EACD;CACD,SAAS;EACR,eAAe;EACf,GAAI,QAAQ,IAAI,WAAW,SACxB,EAAE,GACF,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;EAC5D,aAAa;EACb,WAAW;EACX,MAAM,EAAE,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;EAC3C,KAAK;GACJ,SAAS;GACT,aAAa,EAAE,YAAY,WAAW;GACtC,CAAC;EACF;CACI;CACC;CACN,QAAQ,EACP,iBAAiB,kBACjB;CACD,MAAM,KAAK,iBAAiB;CAC5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aamini/config",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "repository": {
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "scripts": {
33
33
  "build": "vp pack",
34
+ "build:watch": "vp pack --watch",
34
35
  "bump": "npm version patch --no-git-tag-version",
35
36
  "pack": "vp pack",
36
37
  "prepublishOnly": "vp run build"
package/dist/msw.d.mts DELETED
@@ -1,3 +0,0 @@
1
- import { HttpResponse, RequestHandler, graphql, http } from "msw";
2
- import { SetupWorker, setupWorker } from "msw/browser";
3
- export { HttpResponse, type RequestHandler, type SetupWorker, graphql, http, setupWorker };
package/dist/msw.mjs DELETED
@@ -1,3 +0,0 @@
1
- import { HttpResponse, graphql, http } from "msw";
2
- import { setupWorker } from "msw/browser";
3
- export { HttpResponse, graphql, http, setupWorker };