diff --git a/packages/cli/src/app/templates/client.tpl.ts b/packages/cli/src/app/templates/client.tpl.ts index e1f635323e..be5f6dc614 100644 --- a/packages/cli/src/app/templates/client.tpl.ts +++ b/packages/cli/src/app/templates/client.tpl.ts @@ -4,7 +4,7 @@ import { AppGeneratorContext } from '../index' const template = ({}: AppGeneratorContext) => `import { feathers } from '@feathersjs/feathers' -import type { Service, TransportConnection, Params } from '@feathersjs/feathers' +import type { Paginated, ClientService, TransportConnection, Params } from '@feathersjs/feathers' export interface ServiceTypes { // A mapping of client side services diff --git a/packages/cli/src/app/templates/tsconfig.json.tpl.ts b/packages/cli/src/app/templates/tsconfig.json.tpl.ts index 7f818513ac..adc3432ae8 100644 --- a/packages/cli/src/app/templates/tsconfig.json.tpl.ts +++ b/packages/cli/src/app/templates/tsconfig.json.tpl.ts @@ -17,8 +17,7 @@ export const generate = (ctx: AppGeneratorContext) => rootDir: `./${lib}`, declaration: true, strict: true, - esModuleInterop: true, - skipLibCheck: true + esModuleInterop: true }, include: [lib], exclude: ['test'] diff --git a/packages/cli/src/authentication/templates/knex.tpl.ts b/packages/cli/src/authentication/templates/knex.tpl.ts index e398bca6d4..dcacd96937 100644 --- a/packages/cli/src/authentication/templates/knex.tpl.ts +++ b/packages/cli/src/authentication/templates/knex.tpl.ts @@ -31,9 +31,10 @@ export async function down(knex: Knex): Promise { table.dropColumn('email') table.dropColumn('password')` : ` - table.dropColumn('${name}Id')` + table.dropColumn('${name}Id') + ` ) - .join(',\n')} + .join('\n')} }) } ` diff --git a/packages/cli/src/service/templates/client.tpl.ts b/packages/cli/src/service/templates/client.tpl.ts index 2b38b268a0..65b8108fac 100644 --- a/packages/cli/src/service/templates/client.tpl.ts +++ b/packages/cli/src/service/templates/client.tpl.ts @@ -3,14 +3,26 @@ import { ServiceGeneratorContext } from '../index' const schemaImports = ({ upperName, folder, fileName }: ServiceGeneratorContext) => `import type { ${upperName}Data, + ${upperName}Patch, ${upperName}Result, ${upperName}Query, } from './services/${folder.join('/')}/${fileName}.schema' -export * from './services/${folder.join('/')}/${fileName}.schema'` +export type { + ${upperName}Data, + ${upperName}Patch, + ${upperName}Result, + ${upperName}Query, +}` const declarationTemplate = ({ path, upperName }: ServiceGeneratorContext) => - ` '${path}': Service<${upperName}Result, ${upperName}Data, Params<${upperName}Query>>` + ` '${path}': ClientService< + ${upperName}Result, + ${upperName}Data, + ${upperName}Patch, + Paginated<${upperName}Result>, + Params<${upperName}Query> + >` const toClientFile = toFile(({ lib }) => [lib, 'client.ts']) diff --git a/packages/feathers/src/declarations.ts b/packages/feathers/src/declarations.ts index b03e613a25..0cd91a5138 100644 --- a/packages/feathers/src/declarations.ts +++ b/packages/feathers/src/declarations.ts @@ -26,6 +26,33 @@ export interface ServiceOptions { routeParams?: { [key: string]: any } } +export interface ClientService< + Result = any, + Data = Partial, + PatchData = Data, + FindResult = Paginated, + P = Params +> { + find(params?: P): Promise + + get(id: Id, params?: P): Promise + + create(data: Data[], params?: P): Promise + create(data: Data, params?: P): Promise + + update(id: Id, data: Data, params?: P): Promise + update(id: NullableId, data: Data, params?: P): Promise + update(id: null, data: Data, params?: P): Promise + + patch(id: NullableId, data: PatchData, params?: P): Promise + patch(id: Id, data: PatchData, params?: P): Promise + patch(id: null, data: PatchData, params?: P): Promise + + remove(id: NullableId, params?: P): Promise + remove(id: Id, params?: P): Promise + remove(id: null, params?: P): Promise +} + export interface ServiceMethods, P = Params> { find(params?: P): Promise