@zapier/zapier-sdk-cli 0.4.4 → 0.5.0

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.
@@ -22,8 +22,8 @@ interface ResolvableParameter {
22
22
 
23
23
  interface ResolverContext {
24
24
  sdk: ZapierSdk;
25
- currentParams: any;
26
- resolvedParams: any;
25
+ currentParams: Record<string, unknown>;
26
+ resolvedParams: Record<string, unknown>;
27
27
  }
28
28
 
29
29
  // ============================================================================
@@ -33,9 +33,9 @@ interface ResolverContext {
33
33
  export class SchemaParameterResolver {
34
34
  async resolveParameters(
35
35
  schema: z.ZodSchema,
36
- providedParams: any,
36
+ providedParams: unknown,
37
37
  sdk: ZapierSdk,
38
- ): Promise<any> {
38
+ ): Promise<unknown> {
39
39
  // 1. Try to parse with current parameters
40
40
  const parseResult = schema.safeParse(providedParams);
41
41
 
@@ -102,11 +102,11 @@ export class SchemaParameterResolver {
102
102
  return parseResult.data;
103
103
  }
104
104
 
105
- // 2. Resolve functionally required parameters and their dependencies first
106
- const resolvedParams = { ...providedParams };
105
+ // 2. Resolve functionally required parameters first
106
+ const resolvedParams = { ...(providedParams as Record<string, unknown>) };
107
107
  const context: ResolverContext = {
108
108
  sdk,
109
- currentParams: providedParams,
109
+ currentParams: providedParams as Record<string, unknown>,
110
110
  resolvedParams,
111
111
  };
112
112
 
@@ -356,7 +356,10 @@ export class SchemaParameterResolver {
356
356
  }
357
357
 
358
358
  private async resolveFieldsRecursively(
359
- resolver: any,
359
+ resolver: {
360
+ fetch: (sdk: unknown, params: unknown) => Promise<unknown[]>;
361
+ prompt: (items: unknown[], params: unknown) => unknown;
362
+ },
360
363
  context: ResolverContext,
361
364
  param: ResolvableParameter,
362
365
  ): Promise<Record<string, any>> {
@@ -399,7 +402,11 @@ export class SchemaParameterResolver {
399
402
 
400
403
  // Find new fields that we haven't processed yet
401
404
  const newFields = fields.filter(
402
- (field: any) => !processedFieldKeys.has(field.key),
405
+ (field: unknown) =>
406
+ !(
407
+ (field as { key: string }).key &&
408
+ processedFieldKeys.has((field as { key: string }).key)
409
+ ),
403
410
  );
404
411
 
405
412
  if (newFields.length === 0) {
@@ -409,10 +416,10 @@ export class SchemaParameterResolver {
409
416
 
410
417
  // Separate new required and optional fields
411
418
  const newRequiredFields = newFields.filter(
412
- (field: any) => field.required,
419
+ (field: unknown) => (field as { required: boolean }).required,
413
420
  );
414
421
  const newOptionalFields = newFields.filter(
415
- (field: any) => !field.required,
422
+ (field: unknown) => !(field as { required: boolean }).required,
416
423
  );
417
424
 
418
425
  // Prompt for new required fields
@@ -424,7 +431,7 @@ export class SchemaParameterResolver {
424
431
  );
425
432
  for (const field of newRequiredFields) {
426
433
  await this.promptForField(field, inputs);
427
- processedFieldKeys.add(field.key);
434
+ processedFieldKeys.add((field as { key: string }).key);
428
435
  }
429
436
  }
430
437
 
@@ -458,12 +465,12 @@ export class SchemaParameterResolver {
458
465
  console.log(chalk.cyan(`\nOptional fields:`));
459
466
  for (const field of newOptionalFields) {
460
467
  await this.promptForField(field, inputs);
461
- processedFieldKeys.add(field.key);
468
+ processedFieldKeys.add((field as { key: string }).key);
462
469
  }
463
470
  } else {
464
471
  // Mark these fields as processed even if skipped to avoid re-asking
465
- newOptionalFields.forEach((field: any) =>
466
- processedFieldKeys.add(field.key),
472
+ newOptionalFields.forEach((field: unknown) =>
473
+ processedFieldKeys.add((field as { key: string }).key),
467
474
  );
468
475
  }
469
476
  }
@@ -488,48 +495,73 @@ export class SchemaParameterResolver {
488
495
  return inputs;
489
496
  }
490
497
 
491
- private getNestedValue(obj: any, path: string[]): any {
492
- return path.reduce((current, key) => current?.[key], obj);
498
+ private getNestedValue(obj: unknown, path: string[]): unknown {
499
+ return path.reduce(
500
+ (current, key) => (current as Record<string, unknown>)?.[key],
501
+ obj,
502
+ );
493
503
  }
494
504
 
495
- private setNestedValue(obj: any, path: string[], value: any): void {
505
+ private setNestedValue(obj: unknown, path: string[], value: unknown): void {
496
506
  const lastKey = path[path.length - 1];
497
507
  const parent = path.slice(0, -1).reduce((current, key) => {
498
- if (!(key in current)) {
499
- current[key] = {};
508
+ const currentObj = current as Record<string, unknown>;
509
+ if (!(key in currentObj)) {
510
+ currentObj[key] = {};
500
511
  }
501
- return current[key];
502
- }, obj);
512
+ return currentObj[key];
513
+ }, obj) as Record<string, unknown>;
503
514
  parent[lastKey] = value;
504
515
  }
505
516
 
506
517
  private async promptForField(
507
- field: any,
518
+ field: unknown,
508
519
  inputs: Record<string, any>,
509
520
  ): Promise<void> {
510
- const fieldPrompt = {
511
- type: field.type === "boolean" ? "confirm" : "input",
512
- name: field.key,
513
- message: `${field.label || field.key}${field.required ? " (required)" : " (optional)"}:`,
514
- ...(field.helpText && { prefix: chalk.gray(`ℹ ${field.helpText}\n`) }),
515
- ...(field.default && { default: field.default }),
521
+ const fieldObj = field as {
522
+ type?: string;
523
+ key: string;
524
+ label?: string;
525
+ required?: boolean;
526
+ helpText?: string;
527
+ default?: unknown;
528
+ choices?: Array<{ label?: string; value: unknown }>;
516
529
  };
517
530
 
518
- if (field.choices && field.choices.length > 0) {
531
+ const fieldPrompt: Record<string, unknown> = {
532
+ type: fieldObj.type === "boolean" ? "confirm" : "input",
533
+ name: fieldObj.key,
534
+ message: `${fieldObj.label || fieldObj.key}${fieldObj.required ? " (required)" : " (optional)"}:`,
535
+ };
536
+
537
+ if (fieldObj.helpText) {
538
+ fieldPrompt.prefix = chalk.gray(`ℹ ${fieldObj.helpText}\n`);
539
+ }
540
+
541
+ if (fieldObj.default !== undefined) {
542
+ fieldPrompt.default = fieldObj.default;
543
+ }
544
+
545
+ if (fieldObj.choices && fieldObj.choices.length > 0) {
519
546
  fieldPrompt.type = "list";
520
- (fieldPrompt as any).choices = field.choices.map((choice: any) => ({
521
- name: choice.label || choice.value,
522
- value: choice.value,
523
- }));
547
+ (fieldPrompt as { choices: unknown[] }).choices = fieldObj.choices.map(
548
+ (choice: unknown) => {
549
+ const choiceObj = choice as { label?: unknown; value: unknown };
550
+ return {
551
+ name: choiceObj.label || choiceObj.value,
552
+ value: choiceObj.value,
553
+ };
554
+ },
555
+ );
524
556
  }
525
557
 
526
558
  try {
527
559
  const answer = await inquirer.prompt([fieldPrompt as any]);
528
560
 
529
- if (answer[field.key] !== undefined && answer[field.key] !== "") {
530
- inputs[field.key] = answer[field.key];
531
- } else if (field.required) {
532
- throw new Error(`Required field ${field.key} cannot be empty`);
561
+ if (answer[fieldObj.key] !== undefined && answer[fieldObj.key] !== "") {
562
+ inputs[fieldObj.key] = answer[fieldObj.key];
563
+ } else if (fieldObj.required) {
564
+ throw new Error(`Required field ${fieldObj.key} cannot be empty`);
533
565
  }
534
566
  } catch (error) {
535
567
  if (this.isUserCancellation(error)) {
@@ -540,11 +572,16 @@ export class SchemaParameterResolver {
540
572
  }
541
573
  }
542
574
 
543
- private isUserCancellation(error: any): boolean {
575
+ private isUserCancellation(error: unknown): boolean {
576
+ const errorObj = error as {
577
+ name?: string;
578
+ message?: string;
579
+ isTTYError?: boolean;
580
+ };
544
581
  return (
545
- error?.name === "ExitPromptError" ||
546
- error?.message?.includes("User force closed") ||
547
- error?.isTTYError
582
+ errorObj?.name === "ExitPromptError" ||
583
+ errorObj?.message?.includes("User force closed") ||
584
+ errorObj?.isTTYError === true
548
585
  );
549
586
  }
550
587
  }