@wix/sdk-types 1.13.14 → 1.13.16

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.
@@ -1,5 +1,5 @@
1
1
  import { MonitoringClient } from '@wix/monitoring-types';
2
- import { ConditionalExcept, EmptyObject, Simplify, Paths, SetRequiredDeep } from 'type-fest';
2
+ import { ConditionalExcept, EmptyObject, Simplify, Paths, SetRequiredDeep, JsonObject } from 'type-fest';
3
3
 
4
4
  interface BiLogger {
5
5
  log(params: LogParams, context?: LogOptions): Promise<any>;
@@ -366,4 +366,474 @@ type NonNullablePaths<T, K extends Paths<T>> = globalThis.SDKTypeMode extends {
366
366
  strict: true;
367
367
  } ? SetRequiredDeep<T, K> : T;
368
368
 
369
- export { type APIMetadata, type AmbassadorFactory, type AmbassadorFunctionDescriptor, type AmbassadorRequestOptions, type AuthenticationStrategy, type BaseEventMetadata, type BoundAuthenticationStrategy, type BuildAmbassadorFunction, type BuildDescriptors, type BuildEventDefinition, type BuildRESTFunction, type BuildServicePluginDefinition, type Descriptors, EventDefinition, type EventHandler, type EventIdentity, type ExposeFieldsBasedOnToggle, type HTTPMethod, type Host, type HostModule, type HostModuleAPI, type HttpClient, type HttpResponse, type MaybeContext, type Method, type NonNullablePaths, type PublicMetadata, type RESTFunctionDescriptor, type RequestContext, type RequestOptions, type RequestOptionsFactory, type RestModuleMeta, SERVICE_PLUGIN_ERROR_TYPE, type ServicePluginContract, ServicePluginDefinition, type ServicePluginMethodInput, type ServicePluginMethodMetadata };
369
+ /**
370
+ * Constant used to indicate all applicable operators for a field type
371
+ */
372
+ declare const ALL_APPLICABLE_OPERATORS: "*";
373
+ /**
374
+ * Operators available for string fields
375
+ */
376
+ type StringOperators = '$eq' | '$ne' | '$gt' | '$lt' | '$gte' | '$lte' | '$isEmpty' | '$exists' | '$in' | '$nin' | '$startsWith';
377
+ /**
378
+ * Operators available for number fields
379
+ */
380
+ type NumberOperators = '$eq' | '$ne' | '$gt' | '$lt' | '$gte' | '$lte' | '$exists' | '$in' | '$nin';
381
+ /**
382
+ * Operators available for boolean fields
383
+ */
384
+ type BooleanOperators = '$eq' | '$ne' | '$exists' | '$in' | '$nin';
385
+ /**
386
+ * Operators available for date fields
387
+ */
388
+ type DateOperators = '$eq' | '$ne' | '$gt' | '$lt' | '$gte' | '$lte' | '$exists' | '$in' | '$nin';
389
+ /**
390
+ * Operators available for object fields
391
+ */
392
+ type ObjectOperators = '$exists';
393
+ /**
394
+ * Base operators available for all array types
395
+ */
396
+ type ArrayBaseOperators = '$isEmpty' | '$exists';
397
+ /**
398
+ * Operators available for arrays of primitive values
399
+ */
400
+ type ArrayOfPrimitivesOperators = '$hasAll' | '$hasSome' | ArrayBaseOperators;
401
+ /**
402
+ * Operators available for arrays of objects
403
+ */
404
+ type ArrayOfObjectsOperators = ArrayBaseOperators | '$matchItems';
405
+ type OperatorsWithBooleanValues = '$isEmpty' | '$exists';
406
+ type OperatorsWithArrayValues = '$in' | '$nin' | '$hasAll' | '$hasSome';
407
+ type OperatorForArrayFiltering = '$matchItems';
408
+
409
+ /**
410
+ * Cursor-based paging configuration
411
+ */
412
+ interface CursorPaging {
413
+ /** Maximum number of items to return in the results (0-100) */
414
+ limit?: number | null;
415
+ /**
416
+ * Pointer to the next or previous page in the results
417
+ * Pass the cursor token from the pagingMetadata of the previous response
418
+ */
419
+ cursor?: string | null;
420
+ }
421
+ /**
422
+ * Offset-based paging configuration
423
+ */
424
+ interface OffsetPaging {
425
+ /** Number of items to load */
426
+ limit?: number | null;
427
+ /** Number of items to skip in the current sort order */
428
+ offset?: number | null;
429
+ }
430
+ /**
431
+ * Supported paging types for search APIs
432
+ */
433
+ type PagingType = 'cursor' | 'offset';
434
+ /**
435
+ * Paging type based on the SearchSpec's paging type
436
+ */
437
+ type Paging<Spec extends {
438
+ paging?: PagingType;
439
+ }> = Spec['paging'] extends 'cursor' ? {
440
+ cursorPaging: CursorPaging;
441
+ } : Spec['paging'] extends 'offset' ? {
442
+ paging: OffsetPaging;
443
+ } : {};
444
+
445
+ /**
446
+ * Sort direction type for requests
447
+ */
448
+ type SortOrder = 'ASC' | 'DESC';
449
+ /**
450
+ * Sort capability type for defining field sort options in SearchSpec
451
+ */
452
+ type SortCapability = SortOrder | 'BOTH' | 'NONE';
453
+ /**
454
+ * Constants for sort directions
455
+ */
456
+ declare const SORT_DIRECTIONS: {
457
+ readonly ASC: "ASC";
458
+ readonly DESC: "DESC";
459
+ };
460
+ /**
461
+ * Constants for sort capabilities
462
+ */
463
+ declare const SORT_CAPABILITIES: {
464
+ readonly BOTH: "BOTH";
465
+ readonly NONE: "NONE";
466
+ readonly ASC: "ASC";
467
+ readonly DESC: "DESC";
468
+ };
469
+ /**
470
+ * Helper type to get the fields from a WQL group
471
+ * @template WQLGroup The WQL group type
472
+ */
473
+ type WQLFields<WQLGroup> = WQLGroup extends {
474
+ fields: readonly string[];
475
+ } ? WQLGroup['fields'][number] : never;
476
+ /**
477
+ * Sorting configuration for search results
478
+ * @template Spec The search specification type
479
+ */
480
+ type Sorting<Spec extends SearchSpec> = Spec['wql'] extends {
481
+ length: 0;
482
+ } | [] ? {
483
+ fieldName?: string;
484
+ order?: SortOrder;
485
+ selectItemsBy?: Record<string, any>[] | null;
486
+ } : {
487
+ [WQLGroupIndex in keyof Spec['wql']]: Spec['wql'][WQLGroupIndex] extends {
488
+ fields: readonly string[];
489
+ sort: infer GroupSortCapability;
490
+ } ? GroupSortCapability extends typeof SORT_DIRECTIONS.ASC ? {
491
+ fieldName: WQLFields<Spec['wql'][WQLGroupIndex]>;
492
+ order: typeof SORT_DIRECTIONS.ASC;
493
+ selectItemsBy?: Record<string, any>[] | null;
494
+ } : GroupSortCapability extends typeof SORT_DIRECTIONS.DESC ? {
495
+ fieldName: WQLFields<Spec['wql'][WQLGroupIndex]>;
496
+ order: typeof SORT_DIRECTIONS.DESC;
497
+ selectItemsBy?: Record<string, any>[] | null;
498
+ } : GroupSortCapability extends typeof SORT_CAPABILITIES.BOTH ? {
499
+ fieldName: WQLFields<Spec['wql'][WQLGroupIndex]>;
500
+ order: SortOrder;
501
+ selectItemsBy?: Record<string, any>[] | null;
502
+ } : GroupSortCapability extends typeof SORT_CAPABILITIES.NONE ? {
503
+ fieldName?: never;
504
+ order?: never;
505
+ selectItemsBy?: Record<string, any>[] | null;
506
+ } : never : never;
507
+ }[keyof Spec['wql']];
508
+
509
+ /**
510
+ * Defines a group of fields that share the same operator and sorting capabilities
511
+ * This is part of the Wix Query Language (WQL) specification
512
+ * @example
513
+ * const wql: WQL = {
514
+ * operators: ['$eq', '$ne', '$startsWith'],
515
+ * fields: ['name', 'description'],
516
+ * sort: 'BOTH'
517
+ * };
518
+ */
519
+ interface WQL {
520
+ /**
521
+ * List of operators that can be used with these fields
522
+ * If not specified, uses ALL_APPLICABLE_OPERATORS
523
+ */
524
+ operators?: typeof ALL_APPLICABLE_OPERATORS | readonly string[];
525
+ /**
526
+ * List of fields that share these operator capabilities
527
+ * These fields can be used in filters and sorting
528
+ */
529
+ fields: readonly string[];
530
+ /**
531
+ * Sort capabilities for fields in this group
532
+ * If omitted, sorting is not allowed for these fields
533
+ */
534
+ sort?: SortCapability;
535
+ }
536
+
537
+ /**
538
+ * Specification for a search API
539
+ * Defines what fields can be filtered, sorted, searched, and aggregated
540
+ * @example
541
+ * interface MySearchSpec extends SearchSpec {
542
+ * wql: [{
543
+ * operators: ['$eq', '$ne'], // or 'typeof ALL_APPLICABLE_OPERATORS' for all operators that can be used based on the field type
544
+ * fields: ['id', 'title'],
545
+ * sort: 'BOTH' // or 'ASC' / 'DESC' for specific sorting
546
+ * }],
547
+ * paging: 'offset', // or 'cursor' for cursor-based pagination
548
+ * searchable: ['title', 'description'],
549
+ * aggregatable: ['category', 'price']
550
+ * };
551
+ */
552
+ interface SearchSpec {
553
+ /**
554
+ * Groups of fields with shared operator and sorting capabilities
555
+ * Each group defines what operations can be performed on its fields
556
+ */
557
+ wql: readonly WQL[];
558
+ /**
559
+ * Supported paging type for this search API
560
+ * - 'cursor': Uses cursor-based pagination
561
+ * - 'offset': Uses offset-based pagination
562
+ */
563
+ paging: PagingType;
564
+ /**
565
+ * Fields that can be used for full-text search
566
+ * If not specified, all fields are searchable
567
+ */
568
+ searchable?: readonly string[];
569
+ /**
570
+ * Fields that can be used for aggregations
571
+ * These fields must be searchable and not contain PII
572
+ */
573
+ aggregatable?: readonly string[];
574
+ }
575
+
576
+ /**
577
+ * Gets the type of a field at a nested path
578
+ */
579
+ type GetNestedType<Entity, Path extends string> = Path extends keyof Entity ? Entity[Path] extends (infer ArrayElement)[] | null | undefined ? ArrayElement : Exclude<Entity[Path], null | undefined> : Path extends `${infer FirstPathPart}.${infer RemainingPath}` ? FirstPathPart extends keyof Entity ? Entity[FirstPathPart] extends (infer ArrayElement)[] | null | undefined ? GetNestedType<NonNullable<ArrayElement>, RemainingPath> : Entity[FirstPathPart] extends object | null | undefined ? GetNestedType<NonNullable<Entity[FirstPathPart]>, RemainingPath> : never : never : never;
580
+ /**
581
+ * Extracts all filterable field paths from a search spec
582
+ * @template Spec The search specification type
583
+ * // Results in a union type of all field paths that can be filtered
584
+ */
585
+ type FilterableFields<Spec extends SearchSpec> = Spec['wql'][number]['fields'][number];
586
+ /**
587
+ * Extracts all searchable field paths from a search spec
588
+ * @template Spec The search specification type
589
+ * // Results in a union type of all field paths that can be searched
590
+ */
591
+ type SearchableFields<Spec extends SearchSpec> = Spec extends {
592
+ searchable: readonly string[];
593
+ } ? Spec['searchable'][number] : string;
594
+
595
+ /**
596
+ * Determines operators applicable to a field based on its type
597
+ * @template Entity The entity type
598
+ * @template Path The field path to check
599
+ */
600
+ type ApplicableOperators<Entity, Path extends string> = Path extends keyof Entity ? Entity[Path] extends string | null | undefined ? StringOperators : Entity[Path] extends number | null | undefined ? NumberOperators : Entity[Path] extends boolean | null | undefined ? BooleanOperators : Entity[Path] extends Date | null | undefined ? DateOperators : Entity[Path] extends (infer E)[] | null | undefined ? E extends object ? ArrayOfObjectsOperators : ArrayOfPrimitivesOperators : Entity[Path] extends object | null | undefined ? ObjectOperators : never : Path extends `${infer K}.${infer R}` ? K extends keyof Entity ? Entity[K] extends (infer U)[] | null | undefined ? ApplicableOperators<NonNullable<U>, R> : Entity[K] extends object | null | undefined ? ApplicableOperators<NonNullable<Entity[K]>, R> : never : never : never;
601
+ /**
602
+ * Determines allowed operators for a field based on the search spec
603
+ * @template Entity The entity type
604
+ * @template Spec The search specification type
605
+ * @template Field The field to check
606
+ */
607
+ type AllowedOperators<Entity, Spec extends SearchSpec, Field extends FilterableFields<Spec>> = Spec['wql'][number] extends infer WQLGroup ? WQLGroup extends WQL ? Field extends WQLGroup['fields'][number] ? WQLGroup['operators'] extends typeof ALL_APPLICABLE_OPERATORS ? ApplicableOperators<Entity, Field & string> : WQLGroup['operators'] extends readonly string[] ? WQLGroup['operators'][number] : never : never : never : never;
608
+ /**
609
+ * Filter operations type for individual field conditions
610
+ * @template Entity The entity type
611
+ * @template Spec The search specification type
612
+ * @template Field The field to filter on
613
+ */
614
+ type FilterOps<Entity, Spec extends SearchSpec, Field extends FilterableFields<Spec>> = Simplify<{
615
+ [Op in AllowedOperators<Entity, Spec, Field>]?: Op extends OperatorsWithBooleanValues ? boolean : Op extends OperatorForArrayFiltering ? JsonObject[] : Op extends OperatorsWithArrayValues ? GetNestedType<Entity, Field & string>[] : GetNestedType<Entity, Field & string>;
616
+ }>;
617
+ /**
618
+ * Filter type for building type-safe query filters
619
+ * @template Entity The entity type
620
+ * @template Spec The search specification type
621
+ * @example
622
+ * // Simple filter
623
+ * const filter: Filter<Product, ProductSpec> = {
624
+ * name: { $eq: 'iPhone' },
625
+ * price: { $gte: 100 }
626
+ * };
627
+ *
628
+ * // Complex filter with logical operators
629
+ * const filter: Filter<Product, ProductSpec> = {
630
+ * $and: [
631
+ * { name: { $startsWith: 'i' } },
632
+ * { $or: [
633
+ * { price: { $lt: 1000 } },
634
+ * { onSale: { $eq: true } }
635
+ * ]}
636
+ * ]
637
+ * };
638
+ */
639
+ type Filter<Entity, Spec extends SearchSpec> = Simplify<{
640
+ [Field in FilterableFields<Spec>]?: AllowedOperators<Entity, Spec, Field> extends infer AllowedOps ? AllowedOps extends '$eq' ? GetNestedType<Entity, Field & string> | FilterOps<Entity, Spec, Field> : FilterOps<Entity, Spec, Field> : never;
641
+ } | {
642
+ $and?: Filter<Entity, Spec>[];
643
+ $or?: Filter<Entity, Spec>[];
644
+ $not?: Filter<Entity, Spec>;
645
+ }>;
646
+
647
+ /**
648
+ * Type of scalar aggregation to perform
649
+ */
650
+ type ScalarType = 'COUNT_DISTINCT' | 'MIN' | 'MAX' | 'SUM' | 'AVG';
651
+ /**
652
+ * Sort type for value aggregations
653
+ */
654
+ type ValueSortType = 'COUNT' | 'VALUE';
655
+ /**
656
+ * Sort direction for value aggregations
657
+ */
658
+ type ValueSortDirection = 'DESC' | 'ASC';
659
+ /**
660
+ * Missing values handling for value aggregations
661
+ */
662
+ type MissingValues = 'EXCLUDE' | 'INCLUDE';
663
+ /**
664
+ * Date histogram interval
665
+ */
666
+ type DateHistogramInterval = 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND';
667
+ /**
668
+ * Range bucket for range aggregations
669
+ */
670
+ interface RangeBucket {
671
+ from?: number | null;
672
+ to?: number | null;
673
+ }
674
+ /**
675
+ * Value aggregation configuration
676
+ */
677
+ interface ValueAggregation {
678
+ sortType?: ValueSortType;
679
+ sortDirection?: ValueSortDirection;
680
+ limit?: number | null;
681
+ missingValues?: MissingValues;
682
+ includeOptions?: {
683
+ addToBucket?: string;
684
+ };
685
+ }
686
+ /**
687
+ * Range aggregation configuration
688
+ */
689
+ interface RangeAggregation {
690
+ buckets?: RangeBucket[];
691
+ }
692
+ /**
693
+ * Scalar aggregation configuration
694
+ */
695
+ interface ScalarAggregation {
696
+ type?: ScalarType;
697
+ }
698
+ /**
699
+ * Date histogram aggregation configuration
700
+ */
701
+ interface DateHistogramAggregation {
702
+ interval?: DateHistogramInterval;
703
+ }
704
+ /**
705
+ * Base aggregation type that can be used for both top-level and nested aggregations
706
+ */
707
+ type BaseAggregation<Spec extends SearchSpec> = {
708
+ name?: string | null;
709
+ fieldPath?: AggregatableFields<Spec>;
710
+ } & ({
711
+ type?: 'VALUE';
712
+ value?: ValueAggregation;
713
+ } | {
714
+ type?: 'RANGE';
715
+ range?: RangeAggregation;
716
+ } | {
717
+ type?: 'SCALAR';
718
+ scalar?: ScalarAggregation;
719
+ } | {
720
+ type?: 'DATE_HISTOGRAM';
721
+ dateHistogram?: DateHistogramAggregation;
722
+ });
723
+ /**
724
+ * Nested aggregation item
725
+ */
726
+ type NestedAggregationItem<Spec extends SearchSpec> = BaseAggregation<Spec>;
727
+ /**
728
+ * Nested aggregation configuration
729
+ */
730
+ interface NestedAggregation<Spec extends SearchSpec> {
731
+ nestedAggregations?: NestedAggregationItem<Spec>[];
732
+ }
733
+ /**
734
+ * Extracts all aggregatable field paths from a search spec
735
+ * @template Spec The search specification type
736
+ */
737
+ type AggregatableFields<Spec extends SearchSpec> = Spec extends {
738
+ aggregatable: readonly string[];
739
+ } ? Spec['aggregatable'][number] : string;
740
+ /**
741
+ * Base aggregation interface
742
+ * @template Spec The search specification type
743
+ */
744
+ type Aggregation<Spec extends SearchSpec> = BaseAggregation<Spec> | {
745
+ type?: 'NESTED';
746
+ fieldPath?: AggregatableFields<Spec>;
747
+ nested?: NestedAggregation<Spec>;
748
+ };
749
+
750
+ /**
751
+ * Configuration for full-text search functionality
752
+ * @template Spec The search specification type
753
+ * @example
754
+ * const search: SearchDetails<MySearchSpec> = {
755
+ * expression: 'urgent task',
756
+ * mode: 'AND',
757
+ * fields: ['title', 'description'],
758
+ * fuzzy: true
759
+ * };
760
+ */
761
+ interface SearchDetails<Spec extends SearchSpec> {
762
+ /**
763
+ * The search query text
764
+ * @example 'urgent task'
765
+ */
766
+ expression?: string | null;
767
+ /**
768
+ * How to combine multiple search terms
769
+ * - 'AND': All terms must match
770
+ * - 'OR': Any term can match
771
+ */
772
+ mode?: 'AND' | 'OR';
773
+ /**
774
+ * Fields to search within
775
+ * If not specified, searches all searchable fields
776
+ */
777
+ fields?: SearchableFields<Spec>[];
778
+ /**
779
+ * Whether to enable fuzzy matching
780
+ * Fuzzy matching allows for approximate matches
781
+ */
782
+ fuzzy?: boolean;
783
+ }
784
+ /**
785
+ * Base search request without paging
786
+ * @template Entity The entity type being searched
787
+ * @template Spec The search specification type
788
+ */
789
+ type BaseSearch<Entity, Spec extends SearchSpec> = {
790
+ /**
791
+ * Filter conditions for the search
792
+ * @example { status: { $eq: 'PUBLISHED' } }
793
+ */
794
+ filter?: Filter<Entity, Spec>;
795
+ /**
796
+ * Sorting options for the results
797
+ * @example [{ fieldName: 'createdAt', order: 'DESC' }]
798
+ */
799
+ sort?: Sorting<Spec>[];
800
+ /**
801
+ * Full-text search configuration
802
+ * @example { expression: 'urgent', mode: 'AND' }
803
+ */
804
+ search?: SearchDetails<Spec>;
805
+ /**
806
+ * Aggregations for data analysis
807
+ * Aggregations provide summaries about data partitions
808
+ */
809
+ aggregations?: Aggregation<Spec>[];
810
+ /**
811
+ * Timezone for date-related queries
812
+ * Affects how date fields are interpreted
813
+ */
814
+ timeZone?: string | null;
815
+ };
816
+ /**
817
+ * Complete search request for an entity type
818
+ * @template Entity The entity type being searched
819
+ * @template Spec The search specification type
820
+ * @example
821
+ * // Define a search type for products
822
+ * type SearchProducts = Search<Product, ProductSearchSpec>;
823
+ *
824
+ * // Create a search request
825
+ * const search: SearchProducts = {
826
+ * filter: { price: { $gte: 10 } },
827
+ * sort: [{ fieldName: 'price', order: 'ASC' }],
828
+ * search: { expression: 'shirt', mode: 'AND' },
829
+ *
830
+ * // For offset paging:
831
+ * paging: { limit: 20, offset: 0 }
832
+ *
833
+ * // For cursor paging:
834
+ * cursorPaging: { limit: 20, cursor: "..." }
835
+ * };
836
+ */
837
+ type Search<Entity, Spec extends SearchSpec> = BaseSearch<Entity, Spec> & Partial<Paging<Spec>>;
838
+
839
+ export { type APIMetadata, type AmbassadorFactory, type AmbassadorFunctionDescriptor, type AmbassadorRequestOptions, type AuthenticationStrategy, type BaseEventMetadata, type BoundAuthenticationStrategy, type BuildAmbassadorFunction, type BuildDescriptors, type BuildEventDefinition, type BuildRESTFunction, type BuildServicePluginDefinition, type Descriptors, EventDefinition, type EventHandler, type EventIdentity, type ExposeFieldsBasedOnToggle, type HTTPMethod, type Host, type HostModule, type HostModuleAPI, type HttpClient, type HttpResponse, type MaybeContext, type Method, type NonNullablePaths, type PublicMetadata, type RESTFunctionDescriptor, type RequestContext, type RequestOptions, type RequestOptionsFactory, type RestModuleMeta, SERVICE_PLUGIN_ERROR_TYPE, type Search, type SearchSpec, type ServicePluginContract, ServicePluginDefinition, type ServicePluginMethodInput, type ServicePluginMethodMetadata };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/sdk-types",
3
- "version": "1.13.14",
3
+ "version": "1.13.16",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Ronny Ringel",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "scripts": {
23
23
  "build": "tsup",
24
- "test": "tsup --config tsup.test.config.ts",
24
+ "test": "tsc --noEmit && tsup --config tsup.test.config.ts && vitest run",
25
25
  "lint": "eslint --max-warnings=0 .",
26
26
  "typecheck": "tsc --noEmit"
27
27
  },
@@ -30,14 +30,15 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@wix/monitoring-types": "^0.12.0",
33
- "type-fest": "^4.40.0"
33
+ "type-fest": "^4.40.1"
34
34
  },
35
35
  "devDependencies": {
36
- "@types/node": "^20.17.31",
36
+ "@types/node": "^20.17.32",
37
37
  "eslint": "^8.57.1",
38
38
  "eslint-config-sdk": "0.0.0",
39
39
  "tsup": "^7.3.0",
40
- "typescript": "^5.8.3"
40
+ "typescript": "^5.8.3",
41
+ "vitest": "^1.6.1"
41
42
  },
42
43
  "eslintConfig": {
43
44
  "extends": "sdk"
@@ -59,5 +60,5 @@
59
60
  "wallaby": {
60
61
  "autoDetect": true
61
62
  },
62
- "falconPackageHash": "e8c7a2114fdfae638045161695e21c8f3aa21f9ea1b73c2cd4a8af8e"
63
+ "falconPackageHash": "387a57f5c8cb61f2a227b7b60ee0a58a0f929b26b186b01ec3436e6d"
63
64
  }