@inploi/plugin-job-search 0.16.0 → 0.17.1

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