Tooling packages

GitHub
@vinicunca/vite-config, tsconfig, node-utils, and commitlint-config — published 1.0.1 from the Taman repo.

These live under internal/ in the source repo and are installed from npm in generated projects. All 1.0.1.

@vinicunca/vite-config

Opinionated Vite config for Vue apps and libraries. Peers: vite ^8, unocss ^66 (you own uno.config.ts).

import { defineConfig } from '@vinicunca/vite-config';

export default defineConfig(async () => ({
  application: {
    licenseOptions: { copyright: 'Copyright (C) 2026 Acme' },
    printInfoMap: { Docs: 'https://vinicunca.dev/taman' },
  },
  vite: {
    server: { warmup: { clientFiles: ['./src/main.ts'] } },
  },
}));

defineConfig uses application mode when index.html exists, otherwise library. Pass 'application' | 'library' as the second argument to force it. The vite object is mergeConfig'd last (arrays such as server.warmup.clientFiles are appended).

Application options

Precedence: package defaults → env vars → application. Boolean env flags are false when unset.

OptionDefaultNotes
archiver / archiverPluginOptionsenv VITE_ARCHIVERZip dist
compress / compressTypesenv VITE_COMPRESSgzip, brotli
devtoolsenv VITE_DEVTOOLSVue DevTools, dev only
extraAppConfigtrueBuild only; runtime _TAMAN_ADMIN_DEV_CONFIG_
htmltruehtml-minifier-terser
i18ntrue@intlify/unplugin-vue-i18n, composition-only
importmap / importmapOptionsoffCDN for vue/pinia/vue-router/vue-demi
injectAppLoadingenv VITE_INJECT_APP_LOADING./loading.html or bundled default
injectMetadatatrue__TAMAN_METADATA__, import.meta.env.VITE_APP_VERSION
license / licenseOptionstrueBanner; fields fall back to package.json
print / printInfoMapdev onlyExtra lines under URLs
pwa / pwaOptionsenv VITE_PWAManifest name from VITE_APP_TITLE
visualizerenv VITE_VISUALIZERrollup-plugin-visualizer

Other env: VITE_BASE (default /), VITE_PORT (default 5173), VITE_APP_TITLE, VITE_APP_NAMESPACE. Loaded from .env, .env.local, .env.[mode], .env.[mode].local.

Runtime contracts: window._TAMAN_ADMIN_DEV_CONFIG_, __TAMAN_METADATA__, loading-screen data-app-loading + preferences theme key. Full detail is in internal/vite-config/README.md.

Library options

Builds src/index.ts → dist/index.mjs, externalizes dependencies and peerDependencies. Options: dts (default false), injectMetadata, devtools, visualizer.

@vinicunca/tsconfig

JSON presets (no JS runtime):

FileUse
base.jsonStrict ESNext, verbatimModuleSyntax, skipLibCheck: true, ${configDir} excludes
web.jsonVue JSX, DOM libs, vite/client, declaration: false
library.jsonLike web but declaration: true, noEmit: false
node.jsonNodeNext / NodeNext
node-bundler.jsonESNext + bundler resolution, @types/node
{ "extends": "@vinicunca/tsconfig/web.json" }

@vinicunca/node-utils

Node helpers for tooling (not the Vue app):

formatNow();
ensureFile / outputJSON / readJSON;
getStagedFiles();
generatorContentHash(content);
findMonorepoRoot();
getPackages() / getPackagesSync();
toPosixPath(path);
UNICODE;
colors; // chalk
consola;
execa;
fs; // node:fs/promises
readPackageJSON();

@vinicunca/commitlint-config

import { defineConfig } from '@vinicunca/commitlint-config';

export default defineConfig(); // or defineConfig({ cwd, scopes })

Peers: @commitlint/cli ^21; optional czg. Taman's .commitlintrc.js re-exports the default.

  • Extends @commitlint/config-conventional
  • function-rules/scope-enum: workspace package names (full and unscoped short form) plus project, style, lint, ci, dev, deploy, other
  • Types: feat, fix, perf, style, docs, test, refactor, build, ci, chore, revert, types, release
  • Header max 108; body leading blank required
  • cz-git aliases: :b bump deps, :c chore config, :f docs typos, :r README, :s format