@inploi/plugin-job-search 0.16.0 → 0.17.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.
package/dist/index.cjs CHANGED
@@ -575,6 +575,377 @@ function j$2(t2, c2, l2, u2, f2, h2, d2) {
575
575
  return Array.isArray(G2) ? [Y2].concat(G2, [X2]) : "string" != typeof G2 ? [Y2, G2, X2] : Y2 + G2 + X2;
576
576
  }
577
577
  var D$2 = /* @__PURE__ */ new Set(["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]);
578
+ var default_format = "RFC3986";
579
+ var formatters = {
580
+ RFC1738: (v2) => String(v2).replace(/%20/g, "+"),
581
+ RFC3986: (v2) => String(v2)
582
+ };
583
+ var RFC1738 = "RFC1738";
584
+ var is_array = Array.isArray;
585
+ var hex_table = (() => {
586
+ const array2 = [];
587
+ for (let i2 = 0; i2 < 256; ++i2) {
588
+ array2.push("%" + ((i2 < 16 ? "0" : "") + i2.toString(16)).toUpperCase());
589
+ }
590
+ return array2;
591
+ })();
592
+ var limit = 1024;
593
+ var encode = (str, _defaultEncoder, charset, _kind, format) => {
594
+ if (str.length === 0) {
595
+ return str;
596
+ }
597
+ let string2 = str;
598
+ if (typeof str === "symbol") {
599
+ string2 = Symbol.prototype.toString.call(str);
600
+ } else if (typeof str !== "string") {
601
+ string2 = String(str);
602
+ }
603
+ if (charset === "iso-8859-1") {
604
+ return escape(string2).replace(/%u[0-9a-f]{4}/gi, function($0) {
605
+ return "%26%23" + parseInt($0.slice(2), 16) + "%3B";
606
+ });
607
+ }
608
+ let out = "";
609
+ for (let j2 = 0; j2 < string2.length; j2 += limit) {
610
+ const segment = string2.length >= limit ? string2.slice(j2, j2 + limit) : string2;
611
+ const arr = [];
612
+ for (let i2 = 0; i2 < segment.length; ++i2) {
613
+ let c2 = segment.charCodeAt(i2);
614
+ if (c2 === 45 || // -
615
+ c2 === 46 || // .
616
+ c2 === 95 || // _
617
+ c2 === 126 || // ~
618
+ c2 >= 48 && c2 <= 57 || // 0-9
619
+ c2 >= 65 && c2 <= 90 || // a-z
620
+ c2 >= 97 && c2 <= 122 || // A-Z
621
+ format === RFC1738 && (c2 === 40 || c2 === 41)) {
622
+ arr[arr.length] = segment.charAt(i2);
623
+ continue;
624
+ }
625
+ if (c2 < 128) {
626
+ arr[arr.length] = hex_table[c2];
627
+ continue;
628
+ }
629
+ if (c2 < 2048) {
630
+ arr[arr.length] = hex_table[192 | c2 >> 6] + hex_table[128 | c2 & 63];
631
+ continue;
632
+ }
633
+ if (c2 < 55296 || c2 >= 57344) {
634
+ arr[arr.length] = hex_table[224 | c2 >> 12] + hex_table[128 | c2 >> 6 & 63] + hex_table[128 | c2 & 63];
635
+ continue;
636
+ }
637
+ i2 += 1;
638
+ c2 = 65536 + ((c2 & 1023) << 10 | segment.charCodeAt(i2) & 1023);
639
+ arr[arr.length] = hex_table[240 | c2 >> 18] + hex_table[128 | c2 >> 12 & 63] + hex_table[128 | c2 >> 6 & 63] + hex_table[128 | c2 & 63];
640
+ }
641
+ out += arr.join("");
642
+ }
643
+ return out;
644
+ };
645
+ function is_buffer(obj) {
646
+ if (!obj || typeof obj !== "object") {
647
+ return false;
648
+ }
649
+ return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
650
+ }
651
+ function maybe_map(val, fn2) {
652
+ if (is_array(val)) {
653
+ const mapped = [];
654
+ for (let i2 = 0; i2 < val.length; i2 += 1) {
655
+ mapped.push(fn2(val[i2]));
656
+ }
657
+ return mapped;
658
+ }
659
+ return fn2(val);
660
+ }
661
+ var has3 = Object.prototype.hasOwnProperty;
662
+ var array_prefix_generators = {
663
+ brackets(prefix) {
664
+ return String(prefix) + "[]";
665
+ },
666
+ comma: "comma",
667
+ indices(prefix, key) {
668
+ return String(prefix) + "[" + key + "]";
669
+ },
670
+ repeat(prefix) {
671
+ return String(prefix);
672
+ }
673
+ };
674
+ var is_array2 = Array.isArray;
675
+ var push = Array.prototype.push;
676
+ var push_to_array = function(arr, value_or_array) {
677
+ push.apply(arr, is_array2(value_or_array) ? value_or_array : [value_or_array]);
678
+ };
679
+ var to_ISO = Date.prototype.toISOString;
680
+ var defaults2 = {
681
+ addQueryPrefix: false,
682
+ allowDots: false,
683
+ allowEmptyArrays: false,
684
+ arrayFormat: "indices",
685
+ charset: "utf-8",
686
+ charsetSentinel: false,
687
+ delimiter: "&",
688
+ encode: true,
689
+ encodeDotInKeys: false,
690
+ encoder: encode,
691
+ encodeValuesOnly: false,
692
+ format: default_format,
693
+ formatter: formatters[default_format],
694
+ /** @deprecated */
695
+ indices: false,
696
+ serializeDate(date) {
697
+ return to_ISO.call(date);
698
+ },
699
+ skipNulls: false,
700
+ strictNullHandling: false
701
+ };
702
+ function is_non_nullish_primitive(v2) {
703
+ return typeof v2 === "string" || typeof v2 === "number" || typeof v2 === "boolean" || typeof v2 === "symbol" || typeof v2 === "bigint";
704
+ }
705
+ var sentinel = {};
706
+ function inner_stringify(object2, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {
707
+ let obj = object2;
708
+ let tmp_sc = sideChannel;
709
+ let step = 0;
710
+ let find_flag = false;
711
+ while ((tmp_sc = tmp_sc.get(sentinel)) !== void 0 && !find_flag) {
712
+ const pos = tmp_sc.get(object2);
713
+ step += 1;
714
+ if (typeof pos !== "undefined") {
715
+ if (pos === step) {
716
+ throw new RangeError("Cyclic object value");
717
+ } else {
718
+ find_flag = true;
719
+ }
720
+ }
721
+ if (typeof tmp_sc.get(sentinel) === "undefined") {
722
+ step = 0;
723
+ }
724
+ }
725
+ if (typeof filter === "function") {
726
+ obj = filter(prefix, obj);
727
+ } else if (obj instanceof Date) {
728
+ obj = serializeDate == null ? void 0 : serializeDate(obj);
729
+ } else if (generateArrayPrefix === "comma" && is_array2(obj)) {
730
+ obj = maybe_map(obj, function(value) {
731
+ if (value instanceof Date) {
732
+ return serializeDate == null ? void 0 : serializeDate(value);
733
+ }
734
+ return value;
735
+ });
736
+ }
737
+ if (obj === null) {
738
+ if (strictNullHandling) {
739
+ return encoder && !encodeValuesOnly ? (
740
+ // @ts-expect-error
741
+ encoder(prefix, defaults2.encoder, charset, "key", format)
742
+ ) : prefix;
743
+ }
744
+ obj = "";
745
+ }
746
+ if (is_non_nullish_primitive(obj) || is_buffer(obj)) {
747
+ if (encoder) {
748
+ const key_value = encodeValuesOnly ? prefix : (
749
+ // @ts-expect-error
750
+ encoder(prefix, defaults2.encoder, charset, "key", format)
751
+ );
752
+ return [
753
+ (formatter == null ? void 0 : formatter(key_value)) + "=" + // @ts-expect-error
754
+ (formatter == null ? void 0 : formatter(encoder(obj, defaults2.encoder, charset, "value", format)))
755
+ ];
756
+ }
757
+ return [(formatter == null ? void 0 : formatter(prefix)) + "=" + (formatter == null ? void 0 : formatter(String(obj)))];
758
+ }
759
+ const values = [];
760
+ if (typeof obj === "undefined") {
761
+ return values;
762
+ }
763
+ let obj_keys;
764
+ if (generateArrayPrefix === "comma" && is_array2(obj)) {
765
+ if (encodeValuesOnly && encoder) {
766
+ obj = maybe_map(obj, encoder);
767
+ }
768
+ obj_keys = [{ value: obj.length > 0 ? obj.join(",") || null : void 0 }];
769
+ } else if (is_array2(filter)) {
770
+ obj_keys = filter;
771
+ } else {
772
+ const keys = Object.keys(obj);
773
+ obj_keys = sort ? keys.sort(sort) : keys;
774
+ }
775
+ const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix);
776
+ const adjusted_prefix = commaRoundTrip && is_array2(obj) && obj.length === 1 ? encoded_prefix + "[]" : encoded_prefix;
777
+ if (allowEmptyArrays && is_array2(obj) && obj.length === 0) {
778
+ return adjusted_prefix + "[]";
779
+ }
780
+ for (let j2 = 0; j2 < obj_keys.length; ++j2) {
781
+ const key = obj_keys[j2];
782
+ const value = (
783
+ // @ts-expect-error
784
+ typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj[key]
785
+ );
786
+ if (skipNulls && value === null) {
787
+ continue;
788
+ }
789
+ const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key;
790
+ const key_prefix = is_array2(obj) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix : adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]");
791
+ sideChannel.set(object2, step);
792
+ const valueSideChannel = /* @__PURE__ */ new WeakMap();
793
+ valueSideChannel.set(sentinel, sideChannel);
794
+ push_to_array(
795
+ values,
796
+ inner_stringify(
797
+ value,
798
+ key_prefix,
799
+ generateArrayPrefix,
800
+ commaRoundTrip,
801
+ allowEmptyArrays,
802
+ strictNullHandling,
803
+ skipNulls,
804
+ encodeDotInKeys,
805
+ // @ts-expect-error
806
+ generateArrayPrefix === "comma" && encodeValuesOnly && is_array2(obj) ? null : encoder,
807
+ filter,
808
+ sort,
809
+ allowDots,
810
+ serializeDate,
811
+ format,
812
+ formatter,
813
+ encodeValuesOnly,
814
+ charset,
815
+ valueSideChannel
816
+ )
817
+ );
818
+ }
819
+ return values;
820
+ }
821
+ function normalize_stringify_options(opts = defaults2) {
822
+ if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") {
823
+ throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");
824
+ }
825
+ if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") {
826
+ throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");
827
+ }
828
+ if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") {
829
+ throw new TypeError("Encoder has to be a function.");
830
+ }
831
+ const charset = opts.charset || defaults2.charset;
832
+ if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") {
833
+ throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");
834
+ }
835
+ let format = default_format;
836
+ if (typeof opts.format !== "undefined") {
837
+ if (!has3.call(formatters, opts.format)) {
838
+ throw new TypeError("Unknown format option provided.");
839
+ }
840
+ format = opts.format;
841
+ }
842
+ const formatter = formatters[format];
843
+ let filter = defaults2.filter;
844
+ if (typeof opts.filter === "function" || is_array2(opts.filter)) {
845
+ filter = opts.filter;
846
+ }
847
+ let arrayFormat;
848
+ if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {
849
+ arrayFormat = opts.arrayFormat;
850
+ } else if ("indices" in opts) {
851
+ arrayFormat = opts.indices ? "indices" : "repeat";
852
+ } else {
853
+ arrayFormat = defaults2.arrayFormat;
854
+ }
855
+ if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") {
856
+ throw new TypeError("`commaRoundTrip` must be a boolean, or absent");
857
+ }
858
+ const allowDots = typeof opts.allowDots === "undefined" ? !!opts.encodeDotInKeys === true ? true : defaults2.allowDots : !!opts.allowDots;
859
+ return {
860
+ addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults2.addQueryPrefix,
861
+ // @ts-ignore
862
+ allowDots,
863
+ allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays,
864
+ arrayFormat,
865
+ charset,
866
+ charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel,
867
+ commaRoundTrip: !!opts.commaRoundTrip,
868
+ delimiter: typeof opts.delimiter === "undefined" ? defaults2.delimiter : opts.delimiter,
869
+ encode: typeof opts.encode === "boolean" ? opts.encode : defaults2.encode,
870
+ encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults2.encodeDotInKeys,
871
+ encoder: typeof opts.encoder === "function" ? opts.encoder : defaults2.encoder,
872
+ encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults2.encodeValuesOnly,
873
+ filter,
874
+ format,
875
+ formatter,
876
+ serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults2.serializeDate,
877
+ skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults2.skipNulls,
878
+ // @ts-expect-error
879
+ sort: typeof opts.sort === "function" ? opts.sort : null,
880
+ strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling
881
+ };
882
+ }
883
+ function stringify(object2, opts = {}) {
884
+ let obj = object2;
885
+ const options = normalize_stringify_options(opts);
886
+ let obj_keys;
887
+ let filter;
888
+ if (typeof options.filter === "function") {
889
+ filter = options.filter;
890
+ obj = filter("", obj);
891
+ } else if (is_array2(options.filter)) {
892
+ filter = options.filter;
893
+ obj_keys = filter;
894
+ }
895
+ const keys = [];
896
+ if (typeof obj !== "object" || obj === null) {
897
+ return "";
898
+ }
899
+ const generateArrayPrefix = array_prefix_generators[options.arrayFormat];
900
+ const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip;
901
+ if (!obj_keys) {
902
+ obj_keys = Object.keys(obj);
903
+ }
904
+ if (options.sort) {
905
+ obj_keys.sort(options.sort);
906
+ }
907
+ const sideChannel = /* @__PURE__ */ new WeakMap();
908
+ for (let i2 = 0; i2 < obj_keys.length; ++i2) {
909
+ const key = obj_keys[i2];
910
+ if (options.skipNulls && obj[key] === null) {
911
+ continue;
912
+ }
913
+ push_to_array(
914
+ keys,
915
+ inner_stringify(
916
+ obj[key],
917
+ key,
918
+ // @ts-expect-error
919
+ generateArrayPrefix,
920
+ commaRoundTrip,
921
+ options.allowEmptyArrays,
922
+ options.strictNullHandling,
923
+ options.skipNulls,
924
+ options.encodeDotInKeys,
925
+ options.encode ? options.encoder : null,
926
+ options.filter,
927
+ options.sort,
928
+ options.allowDots,
929
+ options.serializeDate,
930
+ options.format,
931
+ options.formatter,
932
+ options.encodeValuesOnly,
933
+ options.charset,
934
+ sideChannel
935
+ )
936
+ );
937
+ }
938
+ const joined = keys.join(options.delimiter);
939
+ let prefix = options.addQueryPrefix === true ? "?" : "";
940
+ if (options.charsetSentinel) {
941
+ if (options.charset === "iso-8859-1") {
942
+ prefix += "utf8=%26%2310003%3B&";
943
+ } else {
944
+ prefix += "utf8=%E2%9C%93&";
945
+ }
946
+ }
947
+ return joined.length > 0 ? prefix + joined : "";
948
+ }
578
949
  var ValiError = class extends Error {
579
950
  /**
580
951
  * Creates a Valibot error with useful information.
@@ -1234,8 +1605,19 @@ const JobSearchResponseSchema = transform(
1234
1605
  results: schema.data
1235
1606
  })
1236
1607
  );
1608
+ const getFilterValue = (filterValue) => {
1609
+ if (!filterValue)
1610
+ return null;
1611
+ if (Array.isArray(filterValue) && filterValue.length === 0)
1612
+ return null;
1613
+ return filterValue;
1614
+ };
1237
1615
  const filtersToPayload = (filters) => {
1238
- return Object.fromEntries(Object.entries(filters).map(([key, filter]) => [key, (filter == null ? void 0 : filter.value) ?? null]));
1616
+ return Object.fromEntries(
1617
+ Object.entries(filters).map(([key, filter]) => {
1618
+ return [key, getFilterValue(filter == null ? void 0 : filter.value)];
1619
+ })
1620
+ );
1239
1621
  };
1240
1622
  const getAvailableFilters = async ({
1241
1623
  apiClient,
@@ -1244,11 +1626,13 @@ const getAvailableFilters = async ({
1244
1626
  signal
1245
1627
  }) => {
1246
1628
  try {
1247
- const response = await apiClient.fetch(`/search/filters`, {
1248
- method: "POST",
1249
- body: JSON.stringify({
1629
+ const searchParams = new URLSearchParams(
1630
+ stringify({
1250
1631
  filters: filtersToPayload(filters)
1251
- }),
1632
+ })
1633
+ );
1634
+ const baseUrl = "/search/filters";
1635
+ const response = await apiClient.fetch([baseUrl, searchParams.toString()].filter(Boolean).join("?"), {
1252
1636
  signal
1253
1637
  });
1254
1638
  return parse(AvailablePropertiesSchema, response);
@@ -1269,11 +1653,15 @@ const getJobSearchResults = async ({
1269
1653
  page = 1
1270
1654
  }) => {
1271
1655
  try {
1272
- const response = await apiClient.fetch(`/search/results?page=${page}&per_page=${PAGE_SIZE}`, {
1273
- method: "POST",
1274
- body: JSON.stringify({
1656
+ const searchParams = new URLSearchParams(
1657
+ stringify({
1275
1658
  filters: filtersToPayload(filters)
1276
- }),
1659
+ })
1660
+ );
1661
+ searchParams.set("page", page.toString());
1662
+ searchParams.set("per_page", PAGE_SIZE.toString());
1663
+ const baseUrl = "/search/results";
1664
+ const response = await apiClient.fetch([baseUrl, searchParams.toString()].filter(Boolean).join("?"), {
1277
1665
  signal
1278
1666
  });
1279
1667
  return parse(JobSearchResponseSchema, response);