diff --git a/package.json b/package.json index 30828e58..83e93b4d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "packages/*" ], "scripts": { - "build:aspida": "yarn workspace aspida build", + "dev:aspida": "yarn build:aspida && cd packages/aspida && node bin/index.js --build", + "build:aspida": "cd packages/aspida && rimraf dist && tsc --project tsconfig.build.json", "build:aspida-axios": "yarn workspace @aspida/axios build", "build:aspida-fetch": "yarn workspace @aspida/fetch build", "build:aspida-ky": "yarn workspace @aspida/ky build", @@ -12,7 +13,6 @@ "release": "standard-version --skip.tag", "lint": "eslint --ext .js,.ts --ignore-path .gitignore .", "lint:fix": "npm run lint -- --fix", - "snapshot:aspida": "ts-node packages/aspida/__tests__/utils/updateSnapshot", "snapshot:mock": "ts-node packages/axios-mock-server/__tests__/utils/updateSnapshot", "test": "jest", "test:watch": "npm test -- --watch", @@ -23,6 +23,7 @@ "@commitlint/config-conventional": "^8.3.4", "@types/jest": "^24.0.25", "@types/minimist": "^1.2.0", + "@types/rimraf": "^2.0.3", "@typescript-eslint/eslint-plugin": "2.15.0", "@typescript-eslint/parser": "^2.15.0", "axios": "^0.19.0", diff --git a/packages/aspida/__tests__/apis/$api.ts b/packages/aspida/__tests__/apis/$api.ts index 6d93db6f..b2073999 100644 --- a/packages/aspida/__tests__/apis/$api.ts +++ b/packages/aspida/__tests__/apis/$api.ts @@ -12,7 +12,7 @@ import { Methods as Methods6 } from './v1.1/users/_userId@number' import { Methods as Methods7 } from './v2.0/index' const api = (client: AspidaClient, baseURL?: string) => { - const prefix = (baseURL === undefined ? 'https://example.com' : baseURL).replace(/\/$/, '') + const prefix = (baseURL === undefined ? '' : baseURL).replace(/\/$/, '') return { v1_1: { diff --git a/packages/aspida/__tests__/index.spec.ts b/packages/aspida/__tests__/index.spec.ts index bb23e626..e374f943 100644 --- a/packages/aspida/__tests__/index.spec.ts +++ b/packages/aspida/__tests__/index.spec.ts @@ -3,7 +3,6 @@ import build from '~/aspida/src/buildTemplate' describe('cli test', () => { test('main', () => { - const baseurl = 'https://example.com' const paths = [ { input: 'packages/aspida/__tests__/apis', @@ -26,7 +25,7 @@ describe('cli test', () => { paths.forEach(({ input, resultDirPath }) => { const resultFilePath = `${resultDirPath}/$api.ts` const result = fs.readFileSync(resultFilePath, 'utf8') - const { text, filePath } = build(input, baseurl) + const { text, filePath } = build(input) expect(text).toBe(result) expect(filePath).toBe(resultFilePath) diff --git a/packages/aspida/__tests__/utils/updateSnapshot.ts b/packages/aspida/__tests__/utils/updateSnapshot.ts deleted file mode 100644 index 107036ef..00000000 --- a/packages/aspida/__tests__/utils/updateSnapshot.ts +++ /dev/null @@ -1,7 +0,0 @@ -import build from '../../src/buildTemplate' -import write from '../../src/writeRouteFile' - -const input = 'packages/aspida/__tests__/apis' -const baseurl = 'https://example.com' - -write(build(input, baseurl)) diff --git a/packages/aspida/aspida.config.js b/packages/aspida/aspida.config.js new file mode 100644 index 00000000..584bf6c4 --- /dev/null +++ b/packages/aspida/aspida.config.js @@ -0,0 +1,3 @@ +module.exports = { + aspida: { input: '__tests__/apis' } +} diff --git a/packages/aspida/package.json b/packages/aspida/package.json index 1b844731..27dd4ae8 100644 --- a/packages/aspida/package.json +++ b/packages/aspida/package.json @@ -23,9 +23,6 @@ "ajax", "promise" ], - "scripts": { - "build": "rimraf dist && tsc --project tsconfig.build.json" - }, "dependencies": { "chokidar": "^3.3.1", "minimist": "^1.2.0", diff --git a/packages/aspida/src/cli.ts b/packages/aspida/src/cli.ts index 2f410ca2..0a4b180b 100644 --- a/packages/aspida/src/cli.ts +++ b/packages/aspida/src/cli.ts @@ -1,7 +1,6 @@ import fs from 'fs' import minimist from 'minimist' import getConfig, { Config } from './getConfig' -import read from './getInputs' import write from './writeRouteFile' import watch from './watchInputDir' import { Build, Watch, CommandToBuild } from './cli/build' @@ -15,12 +14,10 @@ const options: minimist.Opts = { const getBuildCommandFactory = (config: Config) => CommandToBuild.getFactory(config, { - read, write, watch, - remove(filePath: string, callback: () => void) { - fs.unlink(filePath, callback) - } + read: ({ input }) => (Array.isArray(input) ? input : [input]), + remove: (filePath: string, callback: () => void) => fs.unlink(filePath, callback) }) export const run = (args: string[]) => { diff --git a/packages/aspida/src/cli/build.ts b/packages/aspida/src/cli/build.ts index fe895e14..ffda05ca 100644 --- a/packages/aspida/src/cli/build.ts +++ b/packages/aspida/src/cli/build.ts @@ -20,7 +20,7 @@ export class CommandToBuild implements Command { ) {} exec() { - this.io.read(this.config.input).forEach(input => { + this.io.read(this.config).forEach(input => { this.command.run(input, this.io) }) } @@ -31,7 +31,7 @@ interface BuildCommand { } export interface BuildIO { - read(input?: string | string[]): string[] + read(config: Config): string[] write(template: Template): void remove(filePath: string, callback: () => void): void watch(input: string, callback: () => void): void @@ -41,7 +41,7 @@ export class Build implements BuildCommand { run(input: string, io: BuildIO): void { const template = build(input) - io.write(template) + io.remove(template.filePath, () => io.write(template)) } } @@ -51,11 +51,6 @@ export class Watch implements BuildCommand { run(input: string, io: BuildIO): void { this.build.run(input, io) - - io.watch(input, () => { - const result = build(input) - - io.remove(result.filePath, () => io.write(result)) - }) + io.watch(input, () => this.build.run(input, io)) } } diff --git a/packages/aspida/src/getConfig.ts b/packages/aspida/src/getConfig.ts index 4b5b90c7..f2c2ba2a 100644 --- a/packages/aspida/src/getConfig.ts +++ b/packages/aspida/src/getConfig.ts @@ -1,14 +1,11 @@ import fs from 'fs' +import path from 'path' -export type Config = { - input?: string | string[] -} +export type Config = { input: string | string[] } -export const apiFileRegExp = /\/\$[^/]+\.(js|ts)$/ +const defaultConfig: Config = { input: 'apis' } -export const defaultConfig = { - input: 'apis' -} - -export default (rcFilePath = '.aspidarc'): Config => - fs.existsSync(rcFilePath) ? JSON.parse(fs.readFileSync(rcFilePath, 'utf8')) : {} +export default (configPath = 'aspida.config.js'): Config => + (fs.existsSync(configPath) && + require(path.join(process.cwd(), configPath))[require('../package.json').name]) || + defaultConfig diff --git a/packages/aspida/src/getInputs.ts b/packages/aspida/src/getInputs.ts deleted file mode 100644 index 7459a702..00000000 --- a/packages/aspida/src/getInputs.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { defaultConfig } from './getConfig' - -export default (input?: string | string[]) => - Array.isArray(input) ? input : [input || defaultConfig.input] diff --git a/packages/aspida/src/watchInputDir.ts b/packages/aspida/src/watchInputDir.ts index ff3d4f70..38ecab42 100644 --- a/packages/aspida/src/watchInputDir.ts +++ b/packages/aspida/src/watchInputDir.ts @@ -1,6 +1,5 @@ import chokidar from 'chokidar' -import { apiFileRegExp } from './getConfig' export default (input: string, callback: (...args: any) => void) => { - chokidar.watch(input, { ignoreInitial: true, ignored: apiFileRegExp }).on('all', callback) + chokidar.watch(input, { ignoreInitial: true, ignored: /\/\$[^/]+\.(js|ts)$/ }).on('all', callback) }