diff --git a/workspace/marqua/package.json b/workspace/marqua/package.json index a223d97..560a7dc 100644 --- a/workspace/marqua/package.json +++ b/workspace/marqua/package.json @@ -36,13 +36,15 @@ "types": "./index.d.ts", "default": "./src/transform/index.js" }, - "./styles/*.css": "./styles/*.css", + "./styles/*.css": { + "types": "./styles/index.d.ts", + "default": "./styles/*.css" + }, "./package.json": "./package.json" }, "files": [ - "artisan/*.d.ts", "src/**/*.js", - "styles/", + "styles/*.css", "index.d.ts", "index.d.ts.map" ], diff --git a/workspace/marqua/scripts/compile-types.ts b/workspace/marqua/scripts/compile-types.ts index 20a907e..4b0583b 100644 --- a/workspace/marqua/scripts/compile-types.ts +++ b/workspace/marqua/scripts/compile-types.ts @@ -1,3 +1,4 @@ +import * as fs from 'node:fs'; import { createBundle } from 'dts-buddy'; import { exports } from '../package.json'; @@ -8,3 +9,13 @@ await createBundle({ return { ...acc, ['marqua' + key.slice(1)]: exports[key].default }; }, {}), }); + +for (const subpath of Object.keys(exports).filter((k) => k.includes('*'))) { + const parent = subpath.slice(0, subpath.lastIndexOf('/')); + const ext = subpath.slice(subpath.lastIndexOf('*') + 1); + const files = fs.readdirSync(parent).filter((f) => f.endsWith(ext)); + fs.writeFileSync( + `${parent}/index.d.ts`, + files.map((f) => `declare module 'marqua/${parent.slice(2)}/${f}' {}`).join('\n'), + ); +} diff --git a/workspace/marqua/src/fs/index.js b/workspace/marqua/src/fs/index.js index 4ab12b7..5cecf26 100644 --- a/workspace/marqua/src/fs/index.js +++ b/workspace/marqua/src/fs/index.js @@ -36,8 +36,8 @@ export function traverse( const tree = fs.readdirSync(entry).map((name) => { const path = join(entry, name); return { - /** @type {any} - discriminated union without multiple returns */ - type: fs.lstatSync(path).isDirectory() ? 'directory' : 'file', + /** @type {any} - trick TS to enable discriminated union */ + type: fs.statSync(path).isDirectory() ? 'directory' : 'file', breadcrumb: path.split(/[/\\]/).reverse(), get buffer() { return this.type === 'file' ? fs.readFileSync(path) : void 0;