From 612c6b29a6bad321764d1b0d48d28ada56677f85 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 26 May 2023 14:27:40 -0500 Subject: [PATCH] feat: add `prepare` command for local types support (#124) --- example/package.json | 4 ++-- example/tsconfig.json | 2 +- package.json | 7 ++++++- pnpm-lock.yaml | 3 +++ src/cli.ts | 16 ++++++++++++---- src/prepare.ts | 30 ++++++++++++++++++++++++++++++ 6 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 src/prepare.ts diff --git a/example/package.json b/example/package.json index ec1d2dd..46b58a5 100644 --- a/example/package.json +++ b/example/package.json @@ -17,10 +17,10 @@ "dist" ], "scripts": { - "prepack": "jiti ../src/cli.ts", + "prepack": "JITI_ESM_RESOLVE=1 jiti ../src/cli.ts", "dev": "nuxi dev playground", "dev:build": "nuxi build playground", - "dev:prepare": "jiti ../src/cli.ts --stub && nuxi prepare playground" + "dev:prepare": "JITI_ESM_RESOLVE=1 jiti ../src/cli.ts --stub && JITI_ESM_RESOLVE=1 jiti ../src/cli.ts prepare" }, "dependencies": { "@nuxt/kit": "^3.5.1" diff --git a/example/tsconfig.json b/example/tsconfig.json index 9dd826f..4b34df1 100644 --- a/example/tsconfig.json +++ b/example/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "./playground/.nuxt/tsconfig.json" + "extends": "./.nuxt/tsconfig.json" } diff --git a/package.json b/package.json index 0f51239..01a7772 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "build": "unbuild", "example:build": "pnpm nuxt-module-build ./example", "lint": "eslint --ext .ts,.js,.mjs .", - "nuxt-module-build": "jiti ./src/cli.ts", + "nuxt-module-build": "JITI_ESM_RESOLVE=1 jiti ./src/cli.ts", "prepack": "pnpm build", "release": "pnpm test && standard-version && git push --follow-tags && npm publish", "test": "pnpm vitest" @@ -36,6 +36,10 @@ "pathe": "^1.1.0", "unbuild": "^1.2.1" }, + "peerDependencies": { + "@nuxt/kit": "^3.5.0", + "nuxi": "^3.5.0" + }, "devDependencies": { "@nuxt/kit": "^3.5.1", "@nuxt/schema": "^3.5.1", @@ -45,6 +49,7 @@ "@vitest/coverage-c8": "^0.31.1", "eslint": "^8.41.0", "jiti": "^1.18.2", + "nuxi": "^3.5.1", "nuxt": "^3.5.1", "standard-version": "^9.5.0", "vitest": "^0.31.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0b6c9a..c8f88eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: jiti: specifier: ^1.18.2 version: 1.18.2 + nuxi: + specifier: ^3.5.1 + version: 3.5.1 nuxt: specifier: ^3.5.1 version: 3.5.1(@types/node@20.1.3)(eslint@8.41.0)(rollup@3.22.1)(typescript@5.0.4) diff --git a/src/cli.ts b/src/cli.ts index ae217a0..2213c2e 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -4,12 +4,20 @@ import mri from 'mri' import { resolve } from 'pathe' import { buildModule } from './build' +import { prepareModule } from './prepare' -async function main () { +// TODO: use citty +function main () { const args = mri(process.argv.slice(2)) - const rootDir = resolve(args._[0] || '.') - await buildModule({ - rootDir, + + if (args._[0] === 'prepare') { + return prepareModule({ + rootDir: resolve(args._[1] || '.') + }) + } + + return buildModule({ + rootDir: resolve(args._[0] || '.'), outDir: args.outDir, stub: args.stub }) diff --git a/src/prepare.ts b/src/prepare.ts new file mode 100644 index 0000000..d1137b4 --- /dev/null +++ b/src/prepare.ts @@ -0,0 +1,30 @@ +import { resolve } from 'pathe' + +export interface PrepareModuleOptions { + rootDir: string +} + +export async function prepareModule (options: PrepareModuleOptions) { + const { runCommand } = await import('nuxi') + + return runCommand('prepare', [options.rootDir], { + overrides: { + typescript: { + builder: 'shared' + }, + imports: { + autoImport: false + }, + modules: [ + resolve(options.rootDir, './src/module'), + function (_options, nuxt) { + nuxt.hooks.hook('app:templates', (app) => { + for (const template of app.templates) { + template.write = true + } + }) + } + ] + } + }) +}