@wener/utils 1.1.12 → 1.1.14

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 (114) hide show
  1. package/dist/LICENSE.txt +1 -135
  2. package/dist/cjs/globalThis-ee7c1669.js +2 -0
  3. package/dist/cjs/globalThis-ee7c1669.js.map +1 -0
  4. package/dist/cjs/index.cjs +2 -2
  5. package/dist/cjs/index.cjs.map +1 -1
  6. package/dist/cjs/server.cjs +1 -1
  7. package/dist/cjs/server.cjs.map +1 -1
  8. package/dist/esm/globalThis-000611c3.js +2 -0
  9. package/dist/esm/globalThis-000611c3.js.map +1 -0
  10. package/dist/esm/index.js +4 -4
  11. package/dist/esm/index.js.map +1 -1
  12. package/dist/esm/server.js +1 -1
  13. package/dist/esm/server.js.map +1 -1
  14. package/dist/system/globalThis-7bba6592.js +2 -0
  15. package/dist/system/globalThis-7bba6592.js.map +1 -0
  16. package/dist/system/index.js +4 -4
  17. package/dist/system/index.js.map +1 -1
  18. package/dist/system/server.js +1 -1
  19. package/dist/system/server.js.map +1 -1
  20. package/lib/asyncs/timeout.js +3 -1
  21. package/lib/asyncs/timeout.js.map +1 -1
  22. package/lib/browsers/copy.js.map +1 -1
  23. package/lib/browsers/download.js +3 -1
  24. package/lib/browsers/download.js.map +1 -1
  25. package/lib/browsers/loaders.js +6 -2
  26. package/lib/browsers/loaders.js.map +1 -1
  27. package/lib/crypto/getRandomValues.js +1 -0
  28. package/lib/crypto/getRandomValues.js.map +1 -1
  29. package/lib/crypto/randomUUID.js +2 -0
  30. package/lib/crypto/randomUUID.js.map +1 -1
  31. package/lib/i18n/createTranslate.js +2 -1
  32. package/lib/i18n/createTranslate.js.map +1 -1
  33. package/lib/index.js +1 -0
  34. package/lib/index.js.map +1 -1
  35. package/lib/io/ArrayBuffers.js +1 -0
  36. package/lib/io/ArrayBuffers.js.map +1 -1
  37. package/lib/io/isTransferable.js +2 -0
  38. package/lib/io/isTransferable.js.map +1 -1
  39. package/lib/isomorphics/getGlobalThis.js.map +1 -1
  40. package/lib/isomorphics/globalThis.js +6 -0
  41. package/lib/isomorphics/globalThis.js.map +1 -0
  42. package/lib/isomorphics/structuredClone.js +1 -0
  43. package/lib/isomorphics/structuredClone.js.map +1 -1
  44. package/lib/logging/createLogger.js +15 -5
  45. package/lib/logging/createLogger.js.map +1 -1
  46. package/lib/server.js +3 -1
  47. package/lib/server.js.map +1 -1
  48. package/lib/servers/createFetchWithProxy.js +13 -0
  49. package/lib/servers/createFetchWithProxy.js.map +1 -0
  50. package/lib/servers/{createProxyFetch.js → createFetchWithProxyByNodeFetch.js} +8 -3
  51. package/lib/servers/createFetchWithProxyByNodeFetch.js.map +1 -0
  52. package/lib/servers/createFetchWithProxyByUndici.js +28 -0
  53. package/lib/servers/createFetchWithProxyByUndici.js.map +1 -0
  54. package/lib/servers/polyfillCrypto.js +2 -0
  55. package/lib/servers/polyfillCrypto.js.map +1 -1
  56. package/lib/servers/polyfillJsDom.js +2 -0
  57. package/lib/servers/polyfillJsDom.js.map +1 -1
  58. package/package.json +20 -28
  59. package/src/asyncs/createLazyPromise.test.ts +21 -21
  60. package/src/asyncs/timeout.ts +1 -1
  61. package/src/browsers/copy.ts +1 -1
  62. package/src/browsers/download.ts +1 -1
  63. package/src/browsers/loaders.ts +2 -2
  64. package/src/crypto/getRandomValues.ts +1 -0
  65. package/src/crypto/hashing.test.ts +10 -12
  66. package/src/crypto/pem/__snapshots__/pem.test.ts.snap +18 -0
  67. package/src/crypto/pem/pem.test.ts +14 -17
  68. package/src/crypto/randomUUID.ts +2 -0
  69. package/src/crypto/ulid.test.ts +9 -9
  70. package/src/i18n/createTranslate.test.ts +76 -88
  71. package/src/i18n/createTranslate.ts +2 -1
  72. package/src/index.ts +1 -0
  73. package/src/io/ArrayBuffer.test-d.ts +4 -2
  74. package/src/io/ArrayBuffers.base64.test.ts +17 -17
  75. package/src/io/ArrayBuffers.test.ts +8 -8
  76. package/src/io/ArrayBuffers.ts +1 -0
  77. package/src/io/Buffer.test.ts +4 -4
  78. package/src/io/isBuffer.test.ts +4 -4
  79. package/src/io/isTransferable.test.ts +7 -6
  80. package/src/io/isTransferable.ts +2 -0
  81. package/src/isomorphics/getGlobalThis.ts +3 -1
  82. package/src/isomorphics/globalThis.ts +3 -0
  83. package/src/isomorphics/structuredClone.test.ts +4 -4
  84. package/src/isomorphics/structuredClone.ts +1 -0
  85. package/src/langs/deepEqual.test.ts +4 -4
  86. package/src/langs/langs.test.ts +3 -3
  87. package/src/libs/ms.test.ts +311 -0
  88. package/src/logging/createLogger.ts +5 -5
  89. package/src/logging/logger.test.ts +8 -8
  90. package/src/modules/parseModuleId.test.ts +3 -3
  91. package/src/objects/get.test-d.ts +30 -22
  92. package/src/objects/parseObjectPath.test.ts +3 -3
  93. package/src/objects/set.test.ts +98 -117
  94. package/src/server.ts +3 -1
  95. package/src/servers/createFetchWithLogger.ts +75 -0
  96. package/src/servers/createFetchWithProxy.ts +12 -0
  97. package/src/servers/{createProxyFetch.ts → createFetchWithProxyByNodeFetch.ts} +6 -2
  98. package/src/servers/createFetchWithProxyByUndici.ts +36 -0
  99. package/src/servers/polyfillBrowser.test.ts +9 -9
  100. package/src/servers/polyfillCrypto.ts +3 -1
  101. package/src/servers/polyfillJsDom.ts +1 -0
  102. package/src/servers/polyfillWebSocket.ts +1 -0
  103. package/src/strings/renderTemplate.test.ts +6 -9
  104. package/src/validations/parseTimestamp.test.ts +4 -4
  105. package/dist/cjs/index-da9513d6.js +0 -13
  106. package/dist/cjs/index-da9513d6.js.map +0 -1
  107. package/dist/esm/index-c696799a.js +0 -13
  108. package/dist/esm/index-c696799a.js.map +0 -1
  109. package/dist/system/index-2dfef0f3.js +0 -13
  110. package/dist/system/index-2dfef0f3.js.map +0 -1
  111. package/lib/servers/createProxyFetch.js.map +0 -1
  112. package/src/crypto/pem/pem.test.ts.md +0 -24
  113. package/src/crypto/pem/pem.test.ts.snap +0 -0
  114. package/src/objects/get.test.ts +0 -63
@@ -0,0 +1,28 @@
1
+ function createFetchWithProxyByUndici({
2
+ proxy,
3
+ fetch,
4
+ undici
5
+ } = {}) {
6
+ if (!proxy) {
7
+ return fetch || globalThis.fetch;
8
+ }
9
+ let agent;
10
+ return async (...args) => {
11
+ const init = args[1] || (args[1] = {});
12
+ if (init.body instanceof ReadableStream) {
13
+ init.duplex || (init.duplex = "half");
14
+ }
15
+ if (!agent) {
16
+ undici || (undici = import('undici'));
17
+ const mod = await undici;
18
+ const ProxyAgent = mod.ProxyAgent;
19
+ fetch || (fetch = mod.fetch);
20
+ agent = new ProxyAgent(proxy);
21
+ }
22
+ init.dispatcher = agent;
23
+ return await fetch(...args);
24
+ };
25
+ }
26
+
27
+ export { createFetchWithProxyByUndici };
28
+ //# sourceMappingURL=createFetchWithProxyByUndici.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFetchWithProxyByUndici.js","sources":["../../src/servers/createFetchWithProxyByUndici.ts"],"sourcesContent":["import { MaybePromise } from 'rollup';\nimport { FetchLike } from '../fetch';\n\nexport function createFetchWithProxyByUndici({\n proxy,\n fetch,\n undici,\n}: {\n proxy?: string;\n fetch?: FetchLike;\n undici?: MaybePromise<{ fetch: any; ProxyAgent: any }>;\n} = {}): FetchLike {\n if (!proxy) {\n return fetch || globalThis.fetch;\n }\n let agent: any;\n return async (...args) => {\n const init: RequestInit & { duplex?: string; dispatcher?: any } = (args[1] ||= {});\n if (init.body instanceof ReadableStream) {\n // https://github.com/nodejs/node/issues/46221\n init.duplex ||= 'half';\n }\n if (!agent) {\n // if in next use 'next/dist/compiled/undici'\n undici ||= import('undici');\n const mod = await undici;\n const ProxyAgent = mod.ProxyAgent;\n fetch ||= mod.fetch;\n agent = new ProxyAgent(proxy);\n // https://github.com/nodejs/node/issues/43187#issuecomment-1134634174\n // (global as any)[Symbol.for('undici.globalDispatcher.1')] = agent;\n }\n init.dispatcher = agent;\n return await fetch!(...args);\n };\n}\n"],"names":[],"mappings":"AAGO,SAAS,4BAA6B,CAAA;AAAA,EAC3C,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AACF,CAAA,GAII,EAAe,EAAA;AACjB,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,SAAS,UAAW,CAAA,KAAA,CAAA;AAAA,GAC7B;AACA,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,OAAO,UAAU,IAAS,KAAA;AACxB,IAAM,MAAA,IAAA,GAA6D,sBAAY,EAAC,CAAA,CAAA;AAChF,IAAI,IAAA,IAAA,CAAK,gBAAgB,cAAgB,EAAA;AAEvC,MAAK,IAAA,CAAA,MAAA,KAAL,KAAK,MAAW,GAAA,MAAA,CAAA,CAAA;AAAA,KAClB;AACA,IAAA,IAAI,CAAC,KAAO,EAAA;AAEV,MAAA,MAAA,KAAA,MAAA,GAAW,OAAO,QAAQ,CAAA,CAAA,CAAA;AAC1B,MAAA,MAAM,MAAM,MAAM,MAAA,CAAA;AAClB,MAAA,MAAM,aAAa,GAAI,CAAA,UAAA,CAAA;AACvB,MAAA,KAAA,KAAA,KAAA,GAAU,GAAI,CAAA,KAAA,CAAA,CAAA;AACd,MAAQ,KAAA,GAAA,IAAI,WAAW,KAAK,CAAA,CAAA;AAAA,KAG9B;AACA,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAClB,IAAO,OAAA,MAAM,KAAO,CAAA,GAAG,IAAI,CAAA,CAAA;AAAA,GAC7B,CAAA;AACF;;;;"}
@@ -1,3 +1,5 @@
1
+ import { globalThis } from '../isomorphics/globalThis.js';
2
+
1
3
  async function polyfillCrypto() {
2
4
  if ("crypto" in globalThis) {
3
5
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"polyfillCrypto.js","sources":["../../src/servers/polyfillCrypto.ts"],"sourcesContent":["export async function polyfillCrypto() {\n if ('crypto' in globalThis) {\n return false;\n }\n globalThis.crypto = (await import('node:crypto')).webcrypto as Crypto;\n return true;\n}\n"],"names":[],"mappings":"AAAA,eAAsB,cAAiB,GAAA;AACrC,EAAA,IAAI,YAAY,UAAY,EAAA;AAC1B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAA,UAAA,CAAW,MAAU,GAAA,CAAA,MAAM,OAAO,aAAa,CAAG,EAAA,SAAA,CAAA;AAClD,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"polyfillCrypto.js","sources":["../../src/servers/polyfillCrypto.ts"],"sourcesContent":["import { globalThis } from '../isomorphics/globalThis';\n\nexport async function polyfillCrypto() {\n if ('crypto' in globalThis) {\n return false;\n }\n (globalThis as any).crypto = (await import('node:crypto')).webcrypto as Crypto;\n return true;\n}\n"],"names":[],"mappings":";;AAEA,eAAsB,cAAiB,GAAA;AACrC,EAAA,IAAI,YAAY,UAAY,EAAA;AAC1B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAC,UAAmB,CAAA,MAAA,GAAA,CAAU,MAAM,OAAO,aAAa,CAAG,EAAA,SAAA,CAAA;AAC3D,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
@@ -1,3 +1,5 @@
1
+ import { globalThis } from '../isomorphics/globalThis.js';
2
+
1
3
  async function polyfillJsDom() {
2
4
  if (typeof window !== "undefined") {
3
5
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"polyfillJsDom.js","sources":["../../src/servers/polyfillJsDom.ts"],"sourcesContent":["import type { ConstructorOptions, ResourceLoaderConstructorOptions } from 'jsdom';\n\nexport async function polyfillJsDom() {\n if (typeof window !== 'undefined') {\n return false;\n }\n\n const { ResourceLoader, JSDOM } = await import('jsdom');\n\n // https://github.com/lukechilds/window/blob/master/src/index.js\n // eslint-disable-next-line @typescript-eslint/no-extraneous-class\n class Window {\n constructor(opts: ResourceLoaderConstructorOptions & ConstructorOptions = {}) {\n const { proxy, strictSSL, userAgent, ...jsdomOpts } = opts;\n const resources = new ResourceLoader({\n proxy,\n strictSSL,\n userAgent,\n });\n return new JSDOM(\n '',\n Object.assign(jsdomOpts, {\n resources,\n }),\n ).window;\n }\n }\n\n // https://github.com/lukechilds/browser-env/blob/master/src/index.js\n // Default jsdom config.\n // These settings must override any custom settings to make sure we can iterate\n // over the window object.\n const defaultJsdomConfig = {\n // features: {\n // FetchExternalResources: false,\n // ProcessExternalResources: false,\n // },\n };\n // IIFE executed on import to return an array of global Node.js properties that\n // conflict with global browser properties.\n const protectedProperties = (() =>\n Object.getOwnPropertyNames(new Window(defaultJsdomConfig)).filter(\n (prop) => typeof globalThis[prop as keyof typeof globalThis] !== 'undefined',\n ))();\n\n function installEnv(...args: any[]) {\n // Sets up global browser environment\n // Extract options from args\n const properties = args.filter((arg: any) => Array.isArray(arg))[0];\n const userJsdomConfig = args.filter((arg: any) => !Array.isArray(arg))[0];\n\n // Create window object\n const window = new Window(Object.assign({}, userJsdomConfig, defaultJsdomConfig));\n\n // Get all global browser properties\n Object.getOwnPropertyNames(window)\n\n // Remove protected properties\n .filter((prop) => !protectedProperties.includes(prop))\n\n // If we're only applying specific required properties remove everything else\n .filter((prop) => !(properties && properties.indexOf(prop) === -1))\n .filter((prop) => {\n switch (prop) {\n case 'undefined':\n return false;\n }\n return true;\n })\n\n // Copy what's left to the Node.js global scope\n .forEach((prop) => {\n // console.debug(`define globalThis.${prop}`);\n Object.defineProperty(globalThis, prop, {\n configurable: true,\n get: () => window[prop as keyof Window] as any,\n });\n });\n\n return window;\n }\n\n installEnv({ url: 'http://localhost' });\n return true;\n}\n"],"names":["window"],"mappings":"AAEA,eAAsB,aAAgB,GAAA;AACpC,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,EAAE,cAAgB,EAAA,KAAA,EAAU,GAAA,MAAM,OAAO,OAAO,CAAA,CAAA;AAItD,EAAA,MAAM,MAAO,CAAA;AAAA,IACX,WAAA,CAAY,IAA8D,GAAA,EAAI,EAAA;AAC5E,MAAA,MAAM,EAAE,KAAO,EAAA,SAAA,EAAW,SAAW,EAAA,GAAG,WAAc,GAAA,IAAA,CAAA;AACtD,MAAM,MAAA,SAAA,GAAY,IAAI,cAAe,CAAA;AAAA,QACnC,KAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,OACD,CAAA,CAAA;AACD,MAAA,OAAO,IAAI,KAAA;AAAA,QACT,EAAA;AAAA,QACA,MAAA,CAAO,OAAO,SAAW,EAAA;AAAA,UACvB,SAAA;AAAA,SACD,CAAA;AAAA,OACD,CAAA,MAAA,CAAA;AAAA,KACJ;AAAA,GACF;AAMA,EAAA,MAAM,kBAAqB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAK3B,CAAA;AAGA,EAAM,MAAA,mBAAA,GAAA,CAAuB,MAC3B,MAAO,CAAA,mBAAA,CAAoB,IAAI,MAAO,CAAA,kBAAkB,CAAC,CAAE,CAAA,MAAA;AAAA,IACzD,CAAC,IAAA,KAAS,OAAO,UAAA,CAAW,IAA+B,CAAM,KAAA,WAAA;AAAA,GAChE,GAAA,CAAA;AAEL,EAAA,SAAS,cAAc,IAAa,EAAA;AAGlC,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,MAAA,CAAO,CAAC,GAAA,KAAa,MAAM,OAAQ,CAAA,GAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA;AAClE,IAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,MAAA,CAAO,CAAC,GAAA,KAAa,CAAC,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA;AAGxE,IAAMA,MAAAA,OAAAA,GAAS,IAAI,MAAO,CAAA,MAAA,CAAO,OAAO,EAAC,EAAG,eAAiB,EAAA,kBAAkB,CAAC,CAAA,CAAA;AAGhF,IAAO,MAAA,CAAA,mBAAA,CAAoBA,OAAM,CAAA,CAG9B,MAAO,CAAA,CAAC,SAAS,CAAC,mBAAA,CAAoB,QAAS,CAAA,IAAI,CAAC,CAAA,CAGpD,OAAO,CAAC,IAAA,KAAS,EAAE,UAAA,IAAc,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAG,CAAA,CAAA,CAAA,CACjE,MAAO,CAAA,CAAC,IAAS,KAAA;AAChB,MAAA,QAAQ,IAAM;AAAA,QACZ,KAAK,WAAA;AACH,UAAO,OAAA,KAAA,CAAA;AAAA,OACX;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACR,CAAA,CAGA,OAAQ,CAAA,CAAC,IAAS,KAAA;AAEjB,MAAO,MAAA,CAAA,cAAA,CAAe,YAAY,IAAM,EAAA;AAAA,QACtC,YAAc,EAAA,IAAA;AAAA,QACd,GAAA,EAAK,MAAMA,OAAAA,CAAO,IAAoB,CAAA;AAAA,OACvC,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAEH,IAAOA,OAAAA,OAAAA,CAAAA;AAAA,GACT;AAEA,EAAW,UAAA,CAAA,EAAE,GAAK,EAAA,kBAAA,EAAoB,CAAA,CAAA;AACtC,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"polyfillJsDom.js","sources":["../../src/servers/polyfillJsDom.ts"],"sourcesContent":["import type { ConstructorOptions, ResourceLoaderConstructorOptions } from 'jsdom';\nimport { globalThis } from '../isomorphics/globalThis';\n\nexport async function polyfillJsDom() {\n if (typeof window !== 'undefined') {\n return false;\n }\n\n const { ResourceLoader, JSDOM } = await import('jsdom');\n\n // https://github.com/lukechilds/window/blob/master/src/index.js\n // eslint-disable-next-line @typescript-eslint/no-extraneous-class\n class Window {\n constructor(opts: ResourceLoaderConstructorOptions & ConstructorOptions = {}) {\n const { proxy, strictSSL, userAgent, ...jsdomOpts } = opts;\n const resources = new ResourceLoader({\n proxy,\n strictSSL,\n userAgent,\n });\n return new JSDOM(\n '',\n Object.assign(jsdomOpts, {\n resources,\n }),\n ).window;\n }\n }\n\n // https://github.com/lukechilds/browser-env/blob/master/src/index.js\n // Default jsdom config.\n // These settings must override any custom settings to make sure we can iterate\n // over the window object.\n const defaultJsdomConfig = {\n // features: {\n // FetchExternalResources: false,\n // ProcessExternalResources: false,\n // },\n };\n // IIFE executed on import to return an array of global Node.js properties that\n // conflict with global browser properties.\n const protectedProperties = (() =>\n Object.getOwnPropertyNames(new Window(defaultJsdomConfig)).filter(\n (prop) => typeof globalThis[prop as keyof typeof globalThis] !== 'undefined',\n ))();\n\n function installEnv(...args: any[]) {\n // Sets up global browser environment\n // Extract options from args\n const properties = args.filter((arg: any) => Array.isArray(arg))[0];\n const userJsdomConfig = args.filter((arg: any) => !Array.isArray(arg))[0];\n\n // Create window object\n const window = new Window(Object.assign({}, userJsdomConfig, defaultJsdomConfig));\n\n // Get all global browser properties\n Object.getOwnPropertyNames(window)\n\n // Remove protected properties\n .filter((prop) => !protectedProperties.includes(prop))\n\n // If we're only applying specific required properties remove everything else\n .filter((prop) => !(properties && properties.indexOf(prop) === -1))\n .filter((prop) => {\n switch (prop) {\n case 'undefined':\n return false;\n }\n return true;\n })\n\n // Copy what's left to the Node.js global scope\n .forEach((prop) => {\n // console.debug(`define globalThis.${prop}`);\n Object.defineProperty(globalThis, prop, {\n configurable: true,\n get: () => window[prop as keyof Window] as any,\n });\n });\n\n return window;\n }\n\n installEnv({ url: 'http://localhost' });\n return true;\n}\n"],"names":["window"],"mappings":";;AAGA,eAAsB,aAAgB,GAAA;AACpC,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,EAAE,cAAgB,EAAA,KAAA,EAAU,GAAA,MAAM,OAAO,OAAO,CAAA,CAAA;AAItD,EAAA,MAAM,MAAO,CAAA;AAAA,IACX,WAAA,CAAY,IAA8D,GAAA,EAAI,EAAA;AAC5E,MAAA,MAAM,EAAE,KAAO,EAAA,SAAA,EAAW,SAAW,EAAA,GAAG,WAAc,GAAA,IAAA,CAAA;AACtD,MAAM,MAAA,SAAA,GAAY,IAAI,cAAe,CAAA;AAAA,QACnC,KAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,OACD,CAAA,CAAA;AACD,MAAA,OAAO,IAAI,KAAA;AAAA,QACT,EAAA;AAAA,QACA,MAAA,CAAO,OAAO,SAAW,EAAA;AAAA,UACvB,SAAA;AAAA,SACD,CAAA;AAAA,OACD,CAAA,MAAA,CAAA;AAAA,KACJ;AAAA,GACF;AAMA,EAAA,MAAM,kBAAqB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAK3B,CAAA;AAGA,EAAM,MAAA,mBAAA,GAAA,CAAuB,MAC3B,MAAO,CAAA,mBAAA,CAAoB,IAAI,MAAO,CAAA,kBAAkB,CAAC,CAAE,CAAA,MAAA;AAAA,IACzD,CAAC,IAAA,KAAS,OAAO,UAAA,CAAW,IAA+B,CAAM,KAAA,WAAA;AAAA,GAChE,GAAA,CAAA;AAEL,EAAA,SAAS,cAAc,IAAa,EAAA;AAGlC,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,MAAA,CAAO,CAAC,GAAA,KAAa,MAAM,OAAQ,CAAA,GAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA;AAClE,IAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,MAAA,CAAO,CAAC,GAAA,KAAa,CAAC,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA;AAGxE,IAAMA,MAAAA,OAAAA,GAAS,IAAI,MAAO,CAAA,MAAA,CAAO,OAAO,EAAC,EAAG,eAAiB,EAAA,kBAAkB,CAAC,CAAA,CAAA;AAGhF,IAAO,MAAA,CAAA,mBAAA,CAAoBA,OAAM,CAAA,CAG9B,MAAO,CAAA,CAAC,SAAS,CAAC,mBAAA,CAAoB,QAAS,CAAA,IAAI,CAAC,CAAA,CAGpD,OAAO,CAAC,IAAA,KAAS,EAAE,UAAA,IAAc,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAG,CAAA,CAAA,CAAA,CACjE,MAAO,CAAA,CAAC,IAAS,KAAA;AAChB,MAAA,QAAQ,IAAM;AAAA,QACZ,KAAK,WAAA;AACH,UAAO,OAAA,KAAA,CAAA;AAAA,OACX;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACR,CAAA,CAGA,OAAQ,CAAA,CAAC,IAAS,KAAA;AAEjB,MAAO,MAAA,CAAA,cAAA,CAAe,YAAY,IAAM,EAAA;AAAA,QACtC,YAAc,EAAA,IAAA;AAAA,QACd,GAAA,EAAK,MAAMA,OAAAA,CAAO,IAAoB,CAAA;AAAA,OACvC,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAEH,IAAOA,OAAAA,OAAAA,CAAAA;AAAA,GACT;AAEA,EAAW,UAAA,CAAA,EAAE,GAAK,EAAA,kBAAA,EAAoB,CAAA,CAAA;AACtC,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wener/utils",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
4
4
  "type": "module",
5
5
  "description": "Utils for daily use",
6
6
  "repository": {
@@ -16,11 +16,8 @@
16
16
  ".": {
17
17
  "types": "./src/index.ts",
18
18
  "typescript": "./src/index.ts",
19
- "import": "./lib/index.js",
20
- "system": {
21
- "default": "./dist/system/index.js"
22
- },
23
- "require": "./dist/cjs/index.cjs"
19
+ "system": "./dist/system/index.js",
20
+ "import": "./lib/index.js"
24
21
  },
25
22
  "./types": {
26
23
  "types": "./types.d.ts"
@@ -28,11 +25,8 @@
28
25
  "./server": {
29
26
  "types": "./src/server.ts",
30
27
  "typescript": "./src/server.ts",
31
- "import": "./lib/server.js",
32
- "system": {
33
- "default": "./dist/system/server.js"
34
- },
35
- "require": "./dist/cjs/server.cjs"
28
+ "system": "./dist/system/server.js",
29
+ "import": "./lib/server.js"
36
30
  },
37
31
  "./src/*": "./src/*",
38
32
  "./package.json": "./package.json"
@@ -57,29 +51,28 @@
57
51
  "lodash"
58
52
  ],
59
53
  "devDependencies": {
60
- "@types/lodash": "^4.14.191",
54
+ "@types/lodash": "^4.14.194",
61
55
  "@types/ws": "^8.5.4",
62
- "ava": "^5.1.1",
63
56
  "https-proxy-agent": "^5.0.1",
64
- "lodash": "^4.17.21",
65
- "tsd": "^0.25.0"
57
+ "lodash": "^4.17.21"
66
58
  },
67
59
  "publishConfig": {
68
60
  "registry": "https://registry.npmjs.org",
69
61
  "access": "public"
70
62
  },
71
- "sideEffects": false,
72
- "ava": {
73
- "extensions": {
74
- "ts": "module"
63
+ "peerDependencies": {
64
+ "https-proxy-agent": "*",
65
+ "undici": "*"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "undici": {
69
+ "optional": true
75
70
  },
76
- "nodeArguments": [
77
- "--conditions=typescript",
78
- "--experimental-import-meta-resolve",
79
- "--require=@wener/wode/suppress-experimental.cjs",
80
- "--loader=tsx"
81
- ]
71
+ "https-proxy-agent": {
72
+ "optional": true
73
+ }
82
74
  },
75
+ "sideEffects": false,
83
76
  "rollup": {
84
77
  "input": [
85
78
  "./src/index.ts",
@@ -90,9 +83,8 @@
90
83
  "node-fetch"
91
84
  ]
92
85
  },
93
- "typedoc": {
94
- "entryPoint": "./src/typedoc.ts",
95
- "readmeFile": "./README.md"
86
+ "dependencies": {
87
+ "undici": "^5.22.0"
96
88
  },
97
89
  "scripts": {
98
90
  "build": "make prepublish",
@@ -1,54 +1,54 @@
1
- import test from 'ava';
1
+ import { test, expect } from 'vitest';
2
2
  import { createLazyPromise } from './createLazyPromise';
3
3
  import { sleep } from './sleep';
4
4
 
5
- test('basic', async (t) => {
5
+ test('basic', async () => {
6
6
  const promise = createLazyPromise();
7
7
  let r = 0;
8
8
  void promise.then((v) => (r = v));
9
- t.is(r, 0);
9
+ expect(r).toBe(0);
10
10
  const { resolve, reject } = promise;
11
- t.truthy(resolve);
12
- t.truthy(reject);
11
+ expect(resolve).toBeTruthy();
12
+ expect(reject).toBeTruthy();
13
13
  resolve(1);
14
- t.is(r, 0);
14
+ expect(r).toBe(0);
15
15
  await promise;
16
- t.is(r, 1);
16
+ expect(r).toBe(1);
17
17
  });
18
18
 
19
- test('manual resolve skip exec', async (t) => {
19
+ test('manual resolve skip exec', async () => {
20
20
  const promise = createLazyPromise<number>(() => {
21
- t.fail();
21
+ expect.fail();
22
22
  });
23
23
  promise.resolve(-1);
24
- t.is(await promise, -1);
24
+ expect(await promise).toBe(-1);
25
25
  });
26
26
 
27
- test('exec', async (t) => {
27
+ test('exec', async () => {
28
28
  let r = 0;
29
29
  const promise = createLazyPromise((resolve) => {
30
30
  r++;
31
31
  resolve(10);
32
32
  });
33
33
  await sleep(10);
34
- t.is(r, 0);
35
- t.is(await promise, 10);
36
- t.is(r, 1);
34
+ expect(r).toBe(0);
35
+ expect(await promise).toBe(10);
36
+ expect(r).toBe(1);
37
37
  promise.resolve(20);
38
- t.is(await promise, 10);
38
+ expect(await promise).toBe(10);
39
39
  });
40
40
 
41
- test('exec auto', async (t) => {
41
+ test('exec auto', async () => {
42
42
  let r = 0;
43
43
  const promise = createLazyPromise(() => {
44
44
  r++;
45
45
  return 10;
46
46
  });
47
47
  await sleep(10);
48
- t.is(r, 0);
48
+ expect(r).toBe(0);
49
49
  void promise.then(() => undefined);
50
- t.is(await promise, 10);
51
- t.is(r, 1);
52
- t.is(await promise, 10);
53
- t.is(r, 1);
50
+ expect(await promise).toBe(10);
51
+ expect(r).toBe(1);
52
+ expect(await promise).toBe(10);
53
+ expect(r).toBe(1);
54
54
  });
@@ -4,7 +4,7 @@ export function timeout<T = any>(v: Promise<T>, ms: number): Promise<T> {
4
4
  return Promise.race([
5
5
  v,
6
6
  new Promise((_resolve, reject) => {
7
- timeout = setTimeout(() => reject(error), ms);
7
+ timeout = setTimeout(() => { reject(error); }, ms);
8
8
  }),
9
9
  ]).then(
10
10
  (v) => {
@@ -1,6 +1,6 @@
1
1
  import type { MaybePromise } from '../asyncs/MaybePromise';
2
2
 
3
- let _copy: (s: any) => void;
3
+ let _copy: (s: any) => MaybePromise<void>;
4
4
 
5
5
  // https://gist.github.com/rproenca/64781c6a1329b48a455b645d361a9aa3
6
6
  function initCopy() {
@@ -26,7 +26,7 @@ export function download(filename: string, data: any, { type = 'application/octe
26
26
 
27
27
  if (data instanceof File || data instanceof Blob || data instanceof MediaSource) {
28
28
  a.href = URL.createObjectURL(data);
29
- closer = () => URL.revokeObjectURL(a.href);
29
+ closer = () => { URL.revokeObjectURL(a.href); };
30
30
  } else {
31
31
  console.error(`invalid download data`, data);
32
32
  throw new Error(`can not download ${Object.getPrototypeOf(data)}`);
@@ -4,13 +4,13 @@ function load(
4
4
  reject: (v: any) => void,
5
5
  options: { attributes: Record<string, string> } | undefined,
6
6
  ) {
7
- el.onload = () => resolve(el);
7
+ el.onload = () => { resolve(el); };
8
8
  el.onerror = (e) => {
9
9
  el.remove();
10
10
  reject(e);
11
11
  };
12
12
  const { attributes = {} } = options || {};
13
- Object.entries(attributes).forEach(([k, v]) => el.setAttribute(k, v));
13
+ Object.entries(attributes).forEach(([k, v]) => { el.setAttribute(k, v); });
14
14
 
15
15
  document.head.appendChild(el);
16
16
  }
@@ -1,5 +1,6 @@
1
1
  // eslint-disable-next-line @typescript-eslint/consistent-type-imports
2
2
  import type { TypedArray } from '../io/ArrayBuffers';
3
+ import { globalThis } from '../isomorphics/globalThis';
3
4
  import { getNodeCrypto } from './getNodeCrypto';
4
5
 
5
6
  export let getRandomValues: <T extends Exclude<TypedArray, Float32Array | Float64Array>>(typedArray: T) => T =
@@ -1,30 +1,28 @@
1
- import test from 'ava';
1
+ import { test, beforeAll, expect } from 'vitest';
2
2
  import { polyfillCrypto } from '../servers/polyfillCrypto';
3
3
  import { isUUID } from '../validations/isUUID';
4
4
  import { hex } from './base';
5
5
  import { sha1, sha256, sha384, sha512 } from './hashing';
6
6
  import { _randomUUID } from './randomUUID';
7
7
 
8
- test.before(async () => {
8
+ beforeAll(async () => {
9
9
  await polyfillCrypto();
10
10
  });
11
11
 
12
- test('sha', async (t) => {
13
- t.is(hex(await sha1('')), 'da39a3ee5e6b4b0d3255bfef95601890afd80709');
14
- t.is(hex(await sha1('abc')), 'a9993e364706816aba3e25717850c26c9cd0d89d');
15
- t.is(hex(await sha256('')), 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855');
16
- t.is(
17
- hex(await sha384('')),
12
+ test('sha', async () => {
13
+ expect(hex(await sha1(''))).toBe('da39a3ee5e6b4b0d3255bfef95601890afd80709');
14
+ expect(hex(await sha1('abc'))).toBe('a9993e364706816aba3e25717850c26c9cd0d89d');
15
+ expect(hex(await sha256(''))).toBe('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855');
16
+ expect(hex(await sha384(''))).toBe(
18
17
  '38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b',
19
18
  );
20
- t.is(
21
- hex(await sha512('')),
19
+ expect(hex(await sha512(''))).toBe(
22
20
  'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e',
23
21
  );
24
22
  });
25
23
 
26
- test('randomUUID', (t) => {
24
+ test('randomUUID', () => {
27
25
  for (let i = 0; i < 20; i++) {
28
- t.true(isUUID(_randomUUID()));
26
+ expect(isUUID(_randomUUID())).toBeTruthy();
29
27
  }
30
28
  });
@@ -0,0 +1,18 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`cases 1`] = `
4
+ "-----BEGIN RSA PRIVATE KEY-----
5
+ SGVsbG8=
6
+ -----END RSA PRIVATE KEY-----
7
+ "
8
+ `;
9
+
10
+ exports[`cases 2`] = `
11
+ "-----BEGIN RSA PRIVATE KEY-----
12
+ Name: N-:1/=
13
+ Age: 1234
14
+
15
+ TmljZQ==
16
+ -----END RSA PRIVATE KEY-----
17
+ "
18
+ `;
@@ -1,10 +1,10 @@
1
- import test from 'ava';
1
+ import { expect, test } from 'vitest';
2
2
  import { ArrayBuffers } from '../../io/ArrayBuffers';
3
3
  import { PEM } from './pem';
4
4
 
5
5
  const { decode, encode } = PEM;
6
6
 
7
- test('pem', (t) => {
7
+ test('pem', () => {
8
8
  const pem = `-----BEGIN RSA PRIVATE KEY-----
9
9
  Proc-Type: 4,ENCRYPTED
10
10
  DEK-Info: DES-EDE3-CBC,ABC
@@ -27,10 +27,10 @@ MDAwMDAwMDAwMDAwMDAwMA==
27
27
  head: 'Nice\n',
28
28
  tail: 'Hello\n',
29
29
  };
30
- t.deepEqual(decode(input), out);
31
- t.is(encode(out.block), pem);
30
+ expect(decode(input)).toEqual(out);
31
+ expect(encode(out.block)).toBe(pem);
32
32
  });
33
- test('cases', (t) => {
33
+ test('cases', () => {
34
34
  for (const b of [
35
35
  {
36
36
  type: 'RSA PRIVATE KEY',
@@ -47,17 +47,14 @@ test('cases', (t) => {
47
47
  ]) {
48
48
  const s = encode(b);
49
49
  const act = decode(s);
50
- t.deepEqual(
51
- {
52
- ...act.block,
53
- bytes: ArrayBuffers.toString(act.block.bytes),
54
- },
55
- {
56
- header: {},
57
- ...b,
58
- bytes: ArrayBuffers.toString(b.bytes),
59
- },
60
- );
61
- t.snapshot(s);
50
+ expect({
51
+ ...act.block,
52
+ bytes: ArrayBuffers.toString(act.block.bytes),
53
+ }).toStrictEqual({
54
+ header: {},
55
+ ...b,
56
+ bytes: ArrayBuffers.toString(b.bytes),
57
+ });
58
+ expect(s).matchSnapshot();
62
59
  }
63
60
  });
@@ -1,3 +1,5 @@
1
+ import { globalThis } from '../isomorphics/globalThis';
2
+
1
3
  /**
2
4
  * generate random UUIDv4
3
5
  */
@@ -1,7 +1,7 @@
1
- import test from 'ava';
1
+ import { expect, test } from 'vitest';
2
2
  import { createULID, isULID, parseULID } from './ulid';
3
3
 
4
- test('ulid', (t) => {
4
+ test('ulid', () => {
5
5
  // monotonic
6
6
  {
7
7
  let lastTime = 0;
@@ -13,18 +13,18 @@ test('ulid', (t) => {
13
13
  });
14
14
 
15
15
  const ulid1 = ulid();
16
- t.is(parseULID(ulid1).timestamp, lastTime);
17
- t.true(isULID(ulid1), ulid1);
16
+ expect(parseULID(ulid1).timestamp).toBe(lastTime);
17
+ expect(isULID(ulid1), ulid1).toBeTruthy();
18
18
 
19
19
  const ulid2 = ulid();
20
- t.true(ulid1 < ulid2);
21
- t.true(isULID(ulid2), ulid2);
22
- t.is(parseULID(ulid2).timestamp, lastTime);
20
+ expect(ulid1 < ulid2).toBeTruthy();
21
+ expect(isULID(ulid2), ulid2).toBeTruthy();
22
+ expect(parseULID(ulid2).timestamp).toBe(lastTime);
23
23
  }
24
24
 
25
25
  {
26
26
  const next = createULID();
27
- t.true(isULID(next().toLowerCase()));
28
- t.true(isULID('ttttttttttrrrrrrrrrrrrrrrr'));
27
+ expect(isULID(next().toLowerCase())).toBeTruthy();
28
+ expect(isULID('ttttttttttrrrrrrrrrrrrrrrr')).toBeTruthy();
29
29
  }
30
30
  });