@pikku/cli 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @pikku/cli
2
2
 
3
+ ## 0.9.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 92c1926: feat: adding rpc and websocket client cli commands
8
+ - c18800d: feat: adding queue and scheduledTask to interactions
9
+ - Updated dependencies [c18800d]
10
+ - @pikku/core@0.9.4
11
+
3
12
  ## 0.9.3
4
13
 
5
14
  ### Patch Changes
@@ -0,0 +1,28 @@
1
+ import { Command } from 'commander'
2
+ import { CLILogger, PikkuCLIOptions } from '../src/utils.js'
3
+ import { getPikkuCLIConfig } from '../src/pikku-cli-config.js'
4
+ import { pikkuRPCClient } from '../src/wirings/rpc/pikku-command-rpc-client.js'
5
+
6
+ export const action = async (options: PikkuCLIOptions): Promise<void> => {
7
+ const logger = new CLILogger({ logLogo: true })
8
+
9
+ const cliConfig = await getPikkuCLIConfig(
10
+ options.config,
11
+ ['rootDir', 'schemaDirectory', 'configDir', 'fetchFile'],
12
+ {
13
+ tags: options.tags,
14
+ types: options.types,
15
+ directories: options.directories,
16
+ },
17
+ true
18
+ )
19
+ await pikkuRPCClient(logger, cliConfig)
20
+ }
21
+
22
+ export const rpc = (program: Command): void => {
23
+ program
24
+ .command('rpc')
25
+ .description('generate rpc wrapper')
26
+ .option('-c | --config <string>', 'The path to pikku cli config file')
27
+ .action(action)
28
+ }
package/bin/pikku.ts CHANGED
@@ -5,6 +5,8 @@ import { nextjs } from './pikku-nextjs.js'
5
5
  import { all } from './pikku-all.js'
6
6
  import { fetch } from './pikku-fetch.js'
7
7
  import { queue } from './pikku-queue-service.js'
8
+ import { websocket } from './pikku-websocket.js'
9
+ import { rpc } from './pikku-rpc.js'
8
10
 
9
11
  const program = new Command('pikku')
10
12
  program.usage('[command]')
@@ -12,6 +14,8 @@ program.usage('[command]')
12
14
  all(program)
13
15
  schemas(program)
14
16
  nextjs(program)
17
+ websocket(program)
18
+ rpc(program)
15
19
  fetch(program)
16
20
  queue(program)
17
21
 
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import { PikkuCLIOptions } from '../src/utils.js';
3
+ export declare const action: (options: PikkuCLIOptions) => Promise<void>;
4
+ export declare const rpc: (program: Command) => void;
@@ -0,0 +1,19 @@
1
+ import { CLILogger } from '../src/utils.js';
2
+ import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
+ import { pikkuRPCClient } from '../src/wirings/rpc/pikku-command-rpc-client.js';
4
+ export const action = async (options) => {
5
+ const logger = new CLILogger({ logLogo: true });
6
+ const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir', 'fetchFile'], {
7
+ tags: options.tags,
8
+ types: options.types,
9
+ directories: options.directories,
10
+ }, true);
11
+ await pikkuRPCClient(logger, cliConfig);
12
+ };
13
+ export const rpc = (program) => {
14
+ program
15
+ .command('rpc')
16
+ .description('generate rpc wrapper')
17
+ .option('-c | --config <string>', 'The path to pikku cli config file')
18
+ .action(action);
19
+ };
package/dist/bin/pikku.js CHANGED
@@ -5,11 +5,15 @@ import { nextjs } from './pikku-nextjs.js';
5
5
  import { all } from './pikku-all.js';
6
6
  import { fetch } from './pikku-fetch.js';
7
7
  import { queue } from './pikku-queue-service.js';
8
+ import { websocket } from './pikku-websocket.js';
9
+ import { rpc } from './pikku-rpc.js';
8
10
  const program = new Command('pikku');
9
11
  program.usage('[command]');
10
12
  all(program);
11
13
  schemas(program);
12
14
  nextjs(program);
15
+ websocket(program);
16
+ rpc(program);
13
17
  fetch(program);
14
18
  queue(program);
15
19
  program.parse(process.argv);
@@ -6,7 +6,7 @@ export const serializePikkuTypes = (userSessionTypeImport, userSessionTypeName,
6
6
  * This is used to provide the application types in the typescript project
7
7
  */
8
8
 
9
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, addHTTPMiddleware } from '@pikku/core'
9
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, addHTTPMiddleware, addMiddleware, addMiddlewareForTags, addPermission } from '@pikku/core'
10
10
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
11
11
  import { CoreHTTPFunctionWiring, AssertHTTPWiringParams, wireHTTP as wireHTTPCore } from '@pikku/core/http'
12
12
  import { CoreScheduledTask, wireScheduler as wireSchedulerCore } from '@pikku/core/scheduler'
@@ -111,7 +111,7 @@ type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<ChannelDat
111
111
  * Type definition for scheduled tasks that run at specified intervals.
112
112
  * These are sessionless functions that execute based on cron expressions.
113
113
  */
114
- type SchedulerWiring = CoreScheduledTask<PikkuFunctionSessionless<void, void>>
114
+ type SchedulerWiring = CoreScheduledTask<PikkuFunctionSessionless<void, void>, PikkuMiddleware>
115
115
 
116
116
  /**
117
117
  * Type definition for queue workers that process background jobs.
@@ -194,7 +194,7 @@ export const pikkuFunc = <In, Out = unknown>(
194
194
  export const pikkuSessionlessFunc = <In, Out = unknown>(
195
195
  func:
196
196
  | PikkuFunctionSessionless<In, Out>
197
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>>
197
+ | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>, PikkuMiddleware>
198
198
  ) => {
199
199
  return typeof func === 'function' ? func : func.func
200
200
  }
@@ -344,6 +344,78 @@ export const wireChannel = <ChannelData, Channel extends string>(
344
344
  */
345
345
  export { addHTTPMiddleware }
346
346
 
347
+ /**
348
+ * Adds global middleware for a specific tag.
349
+ *
350
+ * This function allows you to register middleware that will be applied to
351
+ * any wiring (HTTP, Channel, Queue, Scheduler, MCP) that includes the matching tag.
352
+ *
353
+ * @param tag - The tag that the middleware should apply to.
354
+ * @param middleware - The middleware array to apply for the specified tag.
355
+ *
356
+ * @throws Error if middleware for the tag already exists.
357
+ *
358
+ * @example
359
+ * \`\`\`typescript
360
+ * // Add admin middleware for admin endpoints
361
+ * addMiddleware('admin', [adminMiddleware])
362
+ *
363
+ * // Add authentication middleware for auth endpoints
364
+ * addMiddleware('auth', [authMiddleware])
365
+ *
366
+ * // Add logging middleware for all API endpoints
367
+ * addMiddleware('api', [loggingMiddleware])
368
+ * \`\`\`
369
+ */
370
+ export { addMiddleware }
371
+
372
+ /**
373
+ * Combines tag-based middleware with wiring-specific middleware.
374
+ *
375
+ * This helper function gets middleware for tags and combines it with any
376
+ * wiring-specific middleware, avoiding the need for manual spreading.
377
+ *
378
+ * @param wiringMiddleware - Wiring-specific middleware.
379
+ * @param tags - Array of tags to look up middleware for.
380
+ * @returns Combined array of tag-based and wiring-specific middleware.
381
+ *
382
+ * @example
383
+ * \`\`\`typescript
384
+ * // Instead of:
385
+ * const taggedMiddleware = getMiddlewareForTags(tags)
386
+ * const combined = [...taggedMiddleware, ...(middleware || [])]
387
+ *
388
+ * // Use:
389
+ * const combined = addMiddlewareForTags(middleware, tags)
390
+ * \`\`\`
391
+ */
392
+ export { addMiddlewareForTags }
393
+
394
+ /**
395
+ * Adds global permissions for a specific tag.
396
+ *
397
+ * This function allows you to register permissions that will be applied to
398
+ * any wiring (HTTP, Channel, Queue, Scheduler, MCP) that includes the matching tag.
399
+ *
400
+ * @param tag - The tag that the permissions should apply to.
401
+ * @param permissions - The permissions array to apply for the specified tag.
402
+ *
403
+ * @throws Error if permissions for the tag already exist.
404
+ *
405
+ * @example
406
+ * \`\`\`typescript
407
+ * // Add admin permissions for admin endpoints
408
+ * addPermission('admin', [adminPermission])
409
+ *
410
+ * // Add authentication permissions for auth endpoints
411
+ * addPermission('auth', [authPermission])
412
+ *
413
+ * // Add read permissions for all API endpoints
414
+ * addPermission('api', [readPermission])
415
+ * \`\`\`
416
+ */
417
+ export { addPermission }
418
+
347
419
  /**
348
420
  * Registers an HTTP wiring with the Pikku framework.
349
421
  *
@@ -1 +1 @@
1
- {"root":["../bin/pikku-all.ts","../bin/pikku-fetch.ts","../bin/pikku-nextjs.ts","../bin/pikku-openapi.ts","../bin/pikku-queue-service.ts","../bin/pikku-schemas.ts","../bin/pikku-websocket.ts","../bin/pikku.ts","../src/inspector-glob.ts","../src/pikku-cli-config.ts","../src/pikku-command-schemas.ts","../src/schema-generator.ts","../src/schemas.ts","../src/serialize-import-map.ts","../src/serialize-pikku-types.ts","../src/types.ts","../src/utils.ts","../src/runtimes/nextjs/pikku-command-nextjs.ts","../src/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/wirings/channels/pikku-channels.ts","../src/wirings/channels/pikku-command-channels-map.ts","../src/wirings/channels/pikku-command-channels.ts","../src/wirings/channels/pikku-command-websocket-typed.ts","../src/wirings/channels/serialize-typed-channel-map.ts","../src/wirings/channels/serialize-websocket-wrapper.ts","../src/wirings/fetch/index.ts","../src/wirings/functions/pikku-command-function-types.ts","../src/wirings/functions/pikku-command-functions.ts","../src/wirings/functions/pikku-command-services.ts","../src/wirings/functions/pikku-function-types.ts","../src/wirings/functions/serialize-function-imports.ts","../src/wirings/http/openapi-spec-generator.ts","../src/wirings/http/pikku-command-http-map.ts","../src/wirings/http/pikku-command-http-routes.ts","../src/wirings/http/pikku-command-openapi.ts","../src/wirings/http/pikku-http-routes.ts","../src/wirings/http/serialize-fetch-wrapper.ts","../src/wirings/http/serialize-typed-http-map.ts","../src/wirings/mcp/pikku-command-mcp-json.ts","../src/wirings/mcp/pikku-command-mcp.ts","../src/wirings/mcp/serialize-mcp-json.ts","../src/wirings/queue/pikku-command-queue-map.ts","../src/wirings/queue/pikku-command-queue-service.ts","../src/wirings/queue/pikku-command-queue.ts","../src/wirings/queue/pikku-queue-map.ts","../src/wirings/queue/pikku-queue.ts","../src/wirings/queue/serialize-queue-map.ts","../src/wirings/queue/serialize-queue-meta.ts","../src/wirings/queue/serialize-queue-wrapper.ts","../src/wirings/rpc/pikku-command-rpc-client.ts","../src/wirings/rpc/pikku-command-rpc-map.ts","../src/wirings/rpc/pikku-command-rpc.ts","../src/wirings/rpc/serialize-rpc-wrapper.ts","../src/wirings/rpc/serialize-typed-rpc-map.ts","../src/wirings/scheduler/pikku-command-scheduler.ts","../src/wirings/scheduler/serialize-scheduler-meta.ts"],"version":"5.9.2"}
1
+ {"root":["../bin/pikku-all.ts","../bin/pikku-fetch.ts","../bin/pikku-nextjs.ts","../bin/pikku-openapi.ts","../bin/pikku-queue-service.ts","../bin/pikku-rpc.ts","../bin/pikku-schemas.ts","../bin/pikku-websocket.ts","../bin/pikku.ts","../src/inspector-glob.ts","../src/pikku-cli-config.ts","../src/pikku-command-schemas.ts","../src/schema-generator.ts","../src/schemas.ts","../src/serialize-import-map.ts","../src/serialize-pikku-types.ts","../src/types.ts","../src/utils.ts","../src/runtimes/nextjs/pikku-command-nextjs.ts","../src/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/wirings/channels/pikku-channels.ts","../src/wirings/channels/pikku-command-channels-map.ts","../src/wirings/channels/pikku-command-channels.ts","../src/wirings/channels/pikku-command-websocket-typed.ts","../src/wirings/channels/serialize-typed-channel-map.ts","../src/wirings/channels/serialize-websocket-wrapper.ts","../src/wirings/fetch/index.ts","../src/wirings/functions/pikku-command-function-types.ts","../src/wirings/functions/pikku-command-functions.ts","../src/wirings/functions/pikku-command-services.ts","../src/wirings/functions/pikku-function-types.ts","../src/wirings/functions/serialize-function-imports.ts","../src/wirings/http/openapi-spec-generator.ts","../src/wirings/http/pikku-command-http-map.ts","../src/wirings/http/pikku-command-http-routes.ts","../src/wirings/http/pikku-command-openapi.ts","../src/wirings/http/pikku-http-routes.ts","../src/wirings/http/serialize-fetch-wrapper.ts","../src/wirings/http/serialize-typed-http-map.ts","../src/wirings/mcp/pikku-command-mcp-json.ts","../src/wirings/mcp/pikku-command-mcp.ts","../src/wirings/mcp/serialize-mcp-json.ts","../src/wirings/queue/pikku-command-queue-map.ts","../src/wirings/queue/pikku-command-queue-service.ts","../src/wirings/queue/pikku-command-queue.ts","../src/wirings/queue/pikku-queue-map.ts","../src/wirings/queue/pikku-queue.ts","../src/wirings/queue/serialize-queue-map.ts","../src/wirings/queue/serialize-queue-meta.ts","../src/wirings/queue/serialize-queue-wrapper.ts","../src/wirings/rpc/pikku-command-rpc-client.ts","../src/wirings/rpc/pikku-command-rpc-map.ts","../src/wirings/rpc/pikku-command-rpc.ts","../src/wirings/rpc/serialize-rpc-wrapper.ts","../src/wirings/rpc/serialize-typed-rpc-map.ts","../src/wirings/scheduler/pikku-command-scheduler.ts","../src/wirings/scheduler/serialize-scheduler-meta.ts"],"version":"5.9.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.9.3",
3
+ "version": "0.9.4",
4
4
  "author": "yasser.fadl@gmail.com",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@openapi-contrib/json-schema-to-openapi-schema": "^4.0.2",
25
- "@pikku/core": "^0.9.3",
25
+ "@pikku/core": "^0.9.4",
26
26
  "@pikku/inspector": "^0.9.3",
27
27
  "@types/cookie": "^1.0.0",
28
28
  "@types/uuid": "^10.0.0",
@@ -13,7 +13,7 @@ export const serializePikkuTypes = (
13
13
  * This is used to provide the application types in the typescript project
14
14
  */
15
15
 
16
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, addHTTPMiddleware } from '@pikku/core'
16
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, addHTTPMiddleware, addMiddleware, addMiddlewareForTags, addPermission } from '@pikku/core'
17
17
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
18
18
  import { CoreHTTPFunctionWiring, AssertHTTPWiringParams, wireHTTP as wireHTTPCore } from '@pikku/core/http'
19
19
  import { CoreScheduledTask, wireScheduler as wireSchedulerCore } from '@pikku/core/scheduler'
@@ -118,7 +118,7 @@ type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<ChannelDat
118
118
  * Type definition for scheduled tasks that run at specified intervals.
119
119
  * These are sessionless functions that execute based on cron expressions.
120
120
  */
121
- type SchedulerWiring = CoreScheduledTask<PikkuFunctionSessionless<void, void>>
121
+ type SchedulerWiring = CoreScheduledTask<PikkuFunctionSessionless<void, void>, PikkuMiddleware>
122
122
 
123
123
  /**
124
124
  * Type definition for queue workers that process background jobs.
@@ -201,7 +201,7 @@ export const pikkuFunc = <In, Out = unknown>(
201
201
  export const pikkuSessionlessFunc = <In, Out = unknown>(
202
202
  func:
203
203
  | PikkuFunctionSessionless<In, Out>
204
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>>
204
+ | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>, PikkuMiddleware>
205
205
  ) => {
206
206
  return typeof func === 'function' ? func : func.func
207
207
  }
@@ -351,6 +351,78 @@ export const wireChannel = <ChannelData, Channel extends string>(
351
351
  */
352
352
  export { addHTTPMiddleware }
353
353
 
354
+ /**
355
+ * Adds global middleware for a specific tag.
356
+ *
357
+ * This function allows you to register middleware that will be applied to
358
+ * any wiring (HTTP, Channel, Queue, Scheduler, MCP) that includes the matching tag.
359
+ *
360
+ * @param tag - The tag that the middleware should apply to.
361
+ * @param middleware - The middleware array to apply for the specified tag.
362
+ *
363
+ * @throws Error if middleware for the tag already exists.
364
+ *
365
+ * @example
366
+ * \`\`\`typescript
367
+ * // Add admin middleware for admin endpoints
368
+ * addMiddleware('admin', [adminMiddleware])
369
+ *
370
+ * // Add authentication middleware for auth endpoints
371
+ * addMiddleware('auth', [authMiddleware])
372
+ *
373
+ * // Add logging middleware for all API endpoints
374
+ * addMiddleware('api', [loggingMiddleware])
375
+ * \`\`\`
376
+ */
377
+ export { addMiddleware }
378
+
379
+ /**
380
+ * Combines tag-based middleware with wiring-specific middleware.
381
+ *
382
+ * This helper function gets middleware for tags and combines it with any
383
+ * wiring-specific middleware, avoiding the need for manual spreading.
384
+ *
385
+ * @param wiringMiddleware - Wiring-specific middleware.
386
+ * @param tags - Array of tags to look up middleware for.
387
+ * @returns Combined array of tag-based and wiring-specific middleware.
388
+ *
389
+ * @example
390
+ * \`\`\`typescript
391
+ * // Instead of:
392
+ * const taggedMiddleware = getMiddlewareForTags(tags)
393
+ * const combined = [...taggedMiddleware, ...(middleware || [])]
394
+ *
395
+ * // Use:
396
+ * const combined = addMiddlewareForTags(middleware, tags)
397
+ * \`\`\`
398
+ */
399
+ export { addMiddlewareForTags }
400
+
401
+ /**
402
+ * Adds global permissions for a specific tag.
403
+ *
404
+ * This function allows you to register permissions that will be applied to
405
+ * any wiring (HTTP, Channel, Queue, Scheduler, MCP) that includes the matching tag.
406
+ *
407
+ * @param tag - The tag that the permissions should apply to.
408
+ * @param permissions - The permissions array to apply for the specified tag.
409
+ *
410
+ * @throws Error if permissions for the tag already exist.
411
+ *
412
+ * @example
413
+ * \`\`\`typescript
414
+ * // Add admin permissions for admin endpoints
415
+ * addPermission('admin', [adminPermission])
416
+ *
417
+ * // Add authentication permissions for auth endpoints
418
+ * addPermission('auth', [authPermission])
419
+ *
420
+ * // Add read permissions for all API endpoints
421
+ * addPermission('api', [readPermission])
422
+ * \`\`\`
423
+ */
424
+ export { addPermission }
425
+
354
426
  /**
355
427
  * Registers an HTTP wiring with the Pikku framework.
356
428
  *