@scalar/helpers 0.0.2

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.
Files changed (127) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/dist/array/is-defined.d.ts +13 -0
  4. package/dist/array/is-defined.d.ts.map +1 -0
  5. package/dist/array/is-defined.js +5 -0
  6. package/dist/array/is-defined.js.map +7 -0
  7. package/dist/dom/freeze-element.d.ts +11 -0
  8. package/dist/dom/freeze-element.d.ts.map +1 -0
  9. package/dist/dom/freeze-element.js +45 -0
  10. package/dist/dom/freeze-element.js.map +7 -0
  11. package/dist/dom/scroll-to-id.d.ts +7 -0
  12. package/dist/dom/scroll-to-id.d.ts.map +1 -0
  13. package/dist/dom/scroll-to-id.js +29 -0
  14. package/dist/dom/scroll-to-id.js.map +7 -0
  15. package/dist/file/json2xml.d.ts +5 -0
  16. package/dist/file/json2xml.d.ts.map +1 -0
  17. package/dist/file/json2xml.js +47 -0
  18. package/dist/file/json2xml.js.map +7 -0
  19. package/dist/general/is-mac-os.d.ts +6 -0
  20. package/dist/general/is-mac-os.d.ts.map +1 -0
  21. package/dist/general/is-mac-os.js +13 -0
  22. package/dist/general/is-mac-os.js.map +7 -0
  23. package/dist/http/can-method-have-body.d.ts +8 -0
  24. package/dist/http/can-method-have-body.d.ts.map +1 -0
  25. package/dist/http/can-method-have-body.js +6 -0
  26. package/dist/http/can-method-have-body.js.map +7 -0
  27. package/dist/http/http-info.d.ts +116 -0
  28. package/dist/http/http-info.d.ts.map +1 -0
  29. package/dist/http/http-info.js +69 -0
  30. package/dist/http/http-info.js.map +7 -0
  31. package/dist/http/http-methods.d.ts +7 -0
  32. package/dist/http/http-methods.d.ts.map +1 -0
  33. package/dist/http/http-methods.js +7 -0
  34. package/dist/http/http-methods.js.map +7 -0
  35. package/dist/http/http-status-codes.d.ts +8 -0
  36. package/dist/http/http-status-codes.d.ts.map +1 -0
  37. package/dist/http/http-status-codes.js +321 -0
  38. package/dist/http/http-status-codes.js.map +7 -0
  39. package/dist/http/is-http-method.d.ts +4 -0
  40. package/dist/http/is-http-method.d.ts.map +1 -0
  41. package/dist/http/is-http-method.js +6 -0
  42. package/dist/http/is-http-method.js.map +7 -0
  43. package/dist/http/normalize-http-method.d.ts +7 -0
  44. package/dist/http/normalize-http-method.d.ts.map +1 -0
  45. package/dist/http/normalize-http-method.js +20 -0
  46. package/dist/http/normalize-http-method.js.map +7 -0
  47. package/dist/object/local-storage.d.ts +37 -0
  48. package/dist/object/local-storage.d.ts.map +1 -0
  49. package/dist/object/local-storage.js +30 -0
  50. package/dist/object/local-storage.js.map +7 -0
  51. package/dist/object/object-keys.d.ts +6 -0
  52. package/dist/object/object-keys.d.ts.map +1 -0
  53. package/dist/object/object-keys.js +5 -0
  54. package/dist/object/object-keys.js.map +7 -0
  55. package/dist/object/object-replace.d.ts +5 -0
  56. package/dist/object/object-replace.d.ts.map +1 -0
  57. package/dist/object/object-replace.js +13 -0
  58. package/dist/object/object-replace.js.map +7 -0
  59. package/dist/object/omit-undefined-values.d.ts +7 -0
  60. package/dist/object/omit-undefined-values.d.ts.map +1 -0
  61. package/dist/object/omit-undefined-values.js +19 -0
  62. package/dist/object/omit-undefined-values.js.map +7 -0
  63. package/dist/regex/find-variables.d.ts +5 -0
  64. package/dist/regex/find-variables.d.ts.map +1 -0
  65. package/dist/regex/find-variables.js +6 -0
  66. package/dist/regex/find-variables.js.map +7 -0
  67. package/dist/regex/regex-helpers.d.ts +10 -0
  68. package/dist/regex/regex-helpers.d.ts.map +1 -0
  69. package/dist/regex/regex-helpers.js +13 -0
  70. package/dist/regex/regex-helpers.js.map +7 -0
  71. package/dist/regex/replace-variables.d.ts +5 -0
  72. package/dist/regex/replace-variables.d.ts.map +1 -0
  73. package/dist/regex/replace-variables.js +15 -0
  74. package/dist/regex/replace-variables.js.map +7 -0
  75. package/dist/string/camel-to-title.d.ts +7 -0
  76. package/dist/string/camel-to-title.d.ts.map +1 -0
  77. package/dist/string/camel-to-title.js +5 -0
  78. package/dist/string/camel-to-title.js.map +7 -0
  79. package/dist/string/capitalize.d.ts +6 -0
  80. package/dist/string/capitalize.d.ts.map +1 -0
  81. package/dist/string/capitalize.js +5 -0
  82. package/dist/string/capitalize.js.map +7 -0
  83. package/dist/string/create-hash.d.ts +7 -0
  84. package/dist/string/create-hash.d.ts.map +1 -0
  85. package/dist/string/create-hash.js +18 -0
  86. package/dist/string/create-hash.js.map +7 -0
  87. package/dist/string/iterate-title.d.ts +5 -0
  88. package/dist/string/iterate-title.d.ts.map +1 -0
  89. package/dist/string/iterate-title.js +12 -0
  90. package/dist/string/iterate-title.js.map +7 -0
  91. package/dist/testing/console-spies.d.ts +17 -0
  92. package/dist/testing/console-spies.d.ts.map +1 -0
  93. package/dist/testing/console-spies.js +25 -0
  94. package/dist/testing/console-spies.js.map +7 -0
  95. package/dist/testing/measure.d.ts +26 -0
  96. package/dist/testing/measure.d.ts.map +1 -0
  97. package/dist/testing/measure.js +12 -0
  98. package/dist/testing/measure.js.map +7 -0
  99. package/dist/testing/sleep.d.ts +6 -0
  100. package/dist/testing/sleep.d.ts.map +1 -0
  101. package/dist/testing/sleep.js +5 -0
  102. package/dist/testing/sleep.js.map +7 -0
  103. package/dist/url/ensure-protocol.d.ts +3 -0
  104. package/dist/url/ensure-protocol.d.ts.map +1 -0
  105. package/dist/url/ensure-protocol.js +11 -0
  106. package/dist/url/ensure-protocol.js.map +7 -0
  107. package/dist/url/is-local-url.d.ts +5 -0
  108. package/dist/url/is-local-url.d.ts.map +1 -0
  109. package/dist/url/is-local-url.js +13 -0
  110. package/dist/url/is-local-url.js.map +7 -0
  111. package/dist/url/is-relative-path.d.ts +5 -0
  112. package/dist/url/is-relative-path.d.ts.map +1 -0
  113. package/dist/url/is-relative-path.js +14 -0
  114. package/dist/url/is-relative-path.js.map +7 -0
  115. package/dist/url/is-valid-url.d.ts +12 -0
  116. package/dist/url/is-valid-url.d.ts.map +1 -0
  117. package/dist/url/is-valid-url.js +11 -0
  118. package/dist/url/is-valid-url.js.map +7 -0
  119. package/dist/url/make-url-absolute.d.ts +5 -0
  120. package/dist/url/make-url-absolute.d.ts.map +1 -0
  121. package/dist/url/make-url-absolute.js +13 -0
  122. package/dist/url/make-url-absolute.js.map +7 -0
  123. package/dist/url/merge-urls.d.ts +15 -0
  124. package/dist/url/merge-urls.d.ts.map +1 -0
  125. package/dist/url/merge-urls.js +56 -0
  126. package/dist/url/merge-urls.js.map +7 -0
  127. package/package.json +95 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/url/merge-urls.ts"],
4
+ "sourcesContent": ["import { REGEX } from '@/regex/regex-helpers'\nimport { isRelativePath } from './is-relative-path'\nimport { ensureProtocol } from './ensure-protocol'\n\n/**\n * Merges multiple URLSearchParams objects, preserving multiple values per param\n * within each source, but later sources overwrite earlier ones completely\n * This should de-dupe our query params while allowing multiple keys for \"arrays\"\n */\nexport const mergeSearchParams = (...params: URLSearchParams[]): URLSearchParams => {\n // We keep a merged record to ensure the next group will overwrite the previous\n const merged: Record<string, string | string[]> = {}\n\n // Loops over each group and grabs unique keys\n params.forEach((p) => {\n const keys = Array.from(p.keys())\n const uniqueKeys = new Set(keys)\n\n uniqueKeys.forEach((key) => {\n const values = p.getAll(key)\n const value = values.length > 1 ? values : (values[0] ?? '')\n\n merged[key] = value\n })\n })\n\n const result = new URLSearchParams()\n\n // We maintain multiple values for each key if they existed\n Object.entries(merged).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => result.append(key, v))\n } else {\n result.append(key, value)\n }\n })\n\n return result\n}\n\n/** Combines a base URL and a path ensuring there's only one slash between them */\nexport const combineUrlAndPath = (url: string, path: string) => {\n if (!path || url === path) {\n return url.trim()\n }\n\n if (!url) {\n return path.trim()\n }\n\n return `${url.trim()}/${path.trim()}`.replace(REGEX.MULTIPLE_SLASHES, '/')\n}\n\n/**\n * Creates a URL from the path and server\n * also optionally merges query params if you include urlSearchParams\n * This was re-written without using URL to support variables in the scheme\n */\nexport const mergeUrls = (\n url: string,\n path: string,\n urlParams: URLSearchParams = new URLSearchParams(),\n /** To disable prefixing the url with the origin or a scheme*/\n disableOriginPrefix = false,\n) => {\n // Extract and merge all query params\n if (url && (!isRelativePath(url) || typeof window !== 'undefined')) {\n /** Prefix the url with the origin if it is relative and we wish to */\n const base = disableOriginPrefix\n ? url\n : isRelativePath(url)\n ? combineUrlAndPath(window.location.origin, url)\n : ensureProtocol(url)\n\n // Extract search params from base URL if any\n const [baseUrl = '', baseQuery] = base.split('?')\n const baseParams = new URLSearchParams(baseQuery || '')\n\n // Extract search params from path if any\n const [pathWithoutQuery = '', pathQuery] = path.split('?')\n const pathParams = new URLSearchParams(pathQuery || '')\n\n // Merge the baseUrl and path\n const mergedUrl = url === path ? baseUrl : combineUrlAndPath(baseUrl, pathWithoutQuery)\n\n // Merge all search params\n const mergedSearchParams = mergeSearchParams(baseParams, pathParams, urlParams)\n\n // Build the final URL\n const search = mergedSearchParams.toString()\n return search ? `${mergedUrl}?${search}` : mergedUrl\n }\n if (path) {\n return combineUrlAndPath(url, path)\n }\n return ''\n}\n"],
5
+ "mappings": "AAAA,SAAS,aAAa;AACtB,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAOxB,MAAM,oBAAoB,IAAI,WAA+C;AAElF,QAAM,SAA4C,CAAC;AAGnD,SAAO,QAAQ,CAAC,MAAM;AACpB,UAAM,OAAO,MAAM,KAAK,EAAE,KAAK,CAAC;AAChC,UAAM,aAAa,IAAI,IAAI,IAAI;AAE/B,eAAW,QAAQ,CAAC,QAAQ;AAC1B,YAAM,SAAS,EAAE,OAAO,GAAG;AAC3B,YAAM,QAAQ,OAAO,SAAS,IAAI,SAAU,OAAO,CAAC,KAAK;AAEzD,aAAO,GAAG,IAAI;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AAED,QAAM,SAAS,IAAI,gBAAgB;AAGnC,SAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,CAAC,MAAM,OAAO,OAAO,KAAK,CAAC,CAAC;AAAA,IAC5C,OAAO;AACL,aAAO,OAAO,KAAK,KAAK;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAGO,MAAM,oBAAoB,CAAC,KAAa,SAAiB;AAC9D,MAAI,CAAC,QAAQ,QAAQ,MAAM;AACzB,WAAO,IAAI,KAAK;AAAA,EAClB;AAEA,MAAI,CAAC,KAAK;AACR,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,QAAQ,MAAM,kBAAkB,GAAG;AAC3E;AAOO,MAAM,YAAY,CACvB,KACA,MACA,YAA6B,IAAI,gBAAgB,GAEjD,sBAAsB,UACnB;AAEH,MAAI,QAAQ,CAAC,eAAe,GAAG,KAAK,OAAO,WAAW,cAAc;AAElE,UAAM,OAAO,sBACT,MACA,eAAe,GAAG,IAChB,kBAAkB,OAAO,SAAS,QAAQ,GAAG,IAC7C,eAAe,GAAG;AAGxB,UAAM,CAAC,UAAU,IAAI,SAAS,IAAI,KAAK,MAAM,GAAG;AAChD,UAAM,aAAa,IAAI,gBAAgB,aAAa,EAAE;AAGtD,UAAM,CAAC,mBAAmB,IAAI,SAAS,IAAI,KAAK,MAAM,GAAG;AACzD,UAAM,aAAa,IAAI,gBAAgB,aAAa,EAAE;AAGtD,UAAM,YAAY,QAAQ,OAAO,UAAU,kBAAkB,SAAS,gBAAgB;AAGtF,UAAM,qBAAqB,kBAAkB,YAAY,YAAY,SAAS;AAG9E,UAAM,SAAS,mBAAmB,SAAS;AAC3C,WAAO,SAAS,GAAG,SAAS,IAAI,MAAM,KAAK;AAAA,EAC7C;AACA,MAAI,MAAM;AACR,WAAO,kBAAkB,KAAK,IAAI;AAAA,EACpC;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "@scalar/helpers",
3
+ "description": "A collection of dependency free helpers",
4
+ "license": "MIT",
5
+ "author": "Scalar (https://github.com/scalar)",
6
+ "homepage": "https://github.com/scalar/scalar",
7
+ "bugs": "https://github.com/scalar/scalar/issues/new/choose",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/scalar/scalar.git",
11
+ "directory": "packages/helpers"
12
+ },
13
+ "keywords": [
14
+ "helpers",
15
+ "js"
16
+ ],
17
+ "version": "0.0.2",
18
+ "engines": {
19
+ "node": ">=20"
20
+ },
21
+ "type": "module",
22
+ "main": "dist/index.js",
23
+ "exports": {
24
+ "./array/*": {
25
+ "import": "./dist/array/*.js",
26
+ "types": "./dist/array/*.d.ts",
27
+ "default": "./dist/array/*.js"
28
+ },
29
+ "./dom/*": {
30
+ "import": "./dist/dom/*.js",
31
+ "types": "./dist/dom/*.d.ts",
32
+ "default": "./dist/dom/*.js"
33
+ },
34
+ "./file/*": {
35
+ "import": "./dist/file/*.js",
36
+ "types": "./dist/file/*.d.ts",
37
+ "default": "./dist/file/*.js"
38
+ },
39
+ "./general/*": {
40
+ "import": "./dist/general/*.js",
41
+ "types": "./dist/general/*.d.ts",
42
+ "default": "./dist/general/*.js"
43
+ },
44
+ "./http/*": {
45
+ "import": "./dist/http/*.js",
46
+ "types": "./dist/http/*.d.ts",
47
+ "default": "./dist/http/*.js"
48
+ },
49
+ "./object/*": {
50
+ "import": "./dist/object/*.js",
51
+ "types": "./dist/object/*.d.ts",
52
+ "default": "./dist/object/*.js"
53
+ },
54
+ "./regex/*": {
55
+ "import": "./dist/regex/*.js",
56
+ "types": "./dist/regex/*.d.ts",
57
+ "default": "./dist/regex/*.js"
58
+ },
59
+ "./string/*": {
60
+ "import": "./dist/string/*.js",
61
+ "types": "./dist/string/*.d.ts",
62
+ "default": "./dist/string/*.js"
63
+ },
64
+ "./testing/*": {
65
+ "import": "./dist/testing/*.js",
66
+ "types": "./dist/testing/*.d.ts",
67
+ "default": "./dist/testing/*.js"
68
+ },
69
+ "./url/*": {
70
+ "import": "./dist/url/*.js",
71
+ "types": "./dist/url/*.d.ts",
72
+ "default": "./dist/url/*.js"
73
+ }
74
+ },
75
+ "files": [
76
+ "dist",
77
+ "CHANGELOG.md"
78
+ ],
79
+ "module": "dist/index.js",
80
+ "dependencies": {},
81
+ "devDependencies": {
82
+ "vite": "5.4.19",
83
+ "vitest": "^1.6.0",
84
+ "@scalar/build-tooling": "0.2.2"
85
+ },
86
+ "scripts": {
87
+ "build": "scalar-build-esbuild",
88
+ "lint:check": "biome lint --diagnostic-level=error",
89
+ "lint:fix": "biome lint --write",
90
+ "test": "vitest",
91
+ "test:coverage": "vitest run --coverage",
92
+ "types:build": "scalar-types-build",
93
+ "types:check": "scalar-types-check"
94
+ }
95
+ }