@knime/utils 1.11.1 → 1.11.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 (86) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +67 -14
  3. package/dist/globals.d.ts +8 -0
  4. package/dist/index.js +714 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/capitalize.d.ts +20 -0
  7. package/dist/src/capitalize.d.ts.map +1 -0
  8. package/dist/src/dateMinMaxCheck.d.ts +19 -0
  9. package/dist/src/dateMinMaxCheck.d.ts.map +1 -0
  10. package/dist/src/debounce.d.ts +4 -0
  11. package/dist/src/debounce.d.ts.map +1 -0
  12. package/dist/src/fileExtensions.d.ts +33 -0
  13. package/dist/src/fileExtensions.d.ts.map +1 -0
  14. package/dist/src/filters.d.ts +13 -0
  15. package/dist/src/filters.d.ts.map +1 -0
  16. package/dist/src/format.d.ts +39 -0
  17. package/dist/src/format.d.ts.map +1 -0
  18. package/dist/src/formatHotkeys.d.ts +17 -0
  19. package/dist/src/formatHotkeys.d.ts.map +1 -0
  20. package/dist/src/getDeepActiveElement.d.ts +3 -0
  21. package/dist/src/getDeepActiveElement.d.ts.map +1 -0
  22. package/{src/getWrappedAroundIndex.ts → dist/src/getWrappedAroundIndex.d.ts} +3 -2
  23. package/dist/src/getWrappedAroundIndex.d.ts.map +1 -0
  24. package/{src/hotkeys.ts → dist/src/hotkeys.d.ts} +4 -17
  25. package/dist/src/hotkeys.d.ts.map +1 -0
  26. package/dist/src/index.d.ts +29 -0
  27. package/dist/src/index.d.ts.map +1 -0
  28. package/dist/src/intervalUtils.d.ts +114 -0
  29. package/dist/src/intervalUtils.d.ts.map +1 -0
  30. package/{src/localTimezone.ts → dist/src/localTimezone.d.ts} +3 -2
  31. package/dist/src/localTimezone.d.ts.map +1 -0
  32. package/dist/src/navigator.d.ts +11 -0
  33. package/dist/src/navigator.d.ts.map +1 -0
  34. package/{src/numIntegerDigits.ts → dist/src/numIntegerDigits.d.ts} +3 -2
  35. package/dist/src/numIntegerDigits.d.ts.map +1 -0
  36. package/dist/src/promise/createAbortablePromise.d.ts +32 -0
  37. package/dist/src/promise/createAbortablePromise.d.ts.map +1 -0
  38. package/dist/src/promise/createUnwrappedPromise.d.ts +7 -0
  39. package/dist/src/promise/createUnwrappedPromise.d.ts.map +1 -0
  40. package/dist/src/promise/index.d.ts +4 -0
  41. package/dist/src/promise/index.d.ts.map +1 -0
  42. package/dist/src/promise/retryPromise.d.ts +16 -0
  43. package/dist/src/promise/retryPromise.d.ts.map +1 -0
  44. package/dist/src/sanitization.d.ts +8 -0
  45. package/dist/src/sanitization.d.ts.map +1 -0
  46. package/dist/src/sleep.d.ts +5 -0
  47. package/dist/src/sleep.d.ts.map +1 -0
  48. package/dist/src/truncateString.d.ts +3 -0
  49. package/dist/src/truncateString.d.ts.map +1 -0
  50. package/dist/src/updateDate.d.ts +11 -0
  51. package/dist/src/updateDate.d.ts.map +1 -0
  52. package/{src/updateTime.ts → dist/src/updateTime.d.ts} +3 -11
  53. package/dist/src/updateTime.d.ts.map +1 -0
  54. package/dist/test-utils/index.d.ts +3 -0
  55. package/dist/test-utils/index.d.ts.map +1 -0
  56. package/dist/test-utils/index.js +40 -0
  57. package/dist/test-utils/index.js.map +1 -0
  58. package/dist/test-utils/muteConsole.d.ts +8 -0
  59. package/dist/test-utils/muteConsole.d.ts.map +1 -0
  60. package/package.json +51 -33
  61. package/src/capitalize.ts +0 -45
  62. package/src/dateMinMaxCheck.ts +0 -68
  63. package/src/debounce.ts +0 -28
  64. package/src/fileExtensions.ts +0 -87
  65. package/src/filters.ts +0 -114
  66. package/src/format.ts +0 -113
  67. package/src/formatHotkeys.ts +0 -98
  68. package/src/getDeepActiveElement.ts +0 -9
  69. package/src/index.ts +0 -76
  70. package/src/intervalUtils.ts +0 -434
  71. package/src/navigator.ts +0 -13
  72. package/src/promise/createAbortablePromise.ts +0 -56
  73. package/src/promise/createUnwrappedPromise.ts +0 -17
  74. package/src/promise/index.ts +0 -3
  75. package/src/promise/retryPromise.ts +0 -45
  76. package/src/sanitization.ts +0 -72
  77. package/src/sleep.ts +0 -6
  78. package/src/truncateString.ts +0 -7
  79. package/src/updateDate.ts +0 -23
  80. package/src/uploadManager/index.ts +0 -370
  81. package/test-utils/index.ts +0 -3
  82. package/test-utils/muteConsole.ts +0 -54
  83. /package/{src/audit → audit}/README.md +0 -0
  84. /package/{src/audit → audit}/bulkAudit.js +0 -0
  85. /package/{src/audit → audit}/cli.js +0 -0
  86. /package/{src/config/globals.d.ts → globals.d.ts} +0 -0
@@ -0,0 +1,32 @@
1
+ export declare class AbortError extends Error {
2
+ }
3
+ /**
4
+ * Helper to create an abortable promise. Returns an AbortController and a Function
5
+ * that you can pass your async handler to. Whenever the AbortController signal is
6
+ * aborted then the async handler's promise will reject with an AbortError
7
+ *
8
+ * Example:
9
+ * ```
10
+ * import { abortUtils } from "@knime/utils"
11
+ * const myFetchCall = async (params...) => {...};
12
+ *
13
+ * try {
14
+ * const { runAbortablePromise, abortController } = createAbortablePromise(() =>
15
+ * myFetchCall(params...),
16
+ * );
17
+ * } catch (e) {
18
+ * if (e instanceof abortUtils.AbortError) {
19
+ * console.info('ignore due to abort');
20
+ * return;
21
+ * }
22
+ * }
23
+ *
24
+ * // somewhere else (while request is in-flight)
25
+ * abortController.abort(new abortUtils.AbortError('reason here'))
26
+ * ```
27
+ */
28
+ export declare const createAbortablePromise: () => {
29
+ abortController: AbortController;
30
+ runAbortablePromise: <T = unknown>(request: () => Promise<T>) => Promise<T>;
31
+ };
32
+ //# sourceMappingURL=createAbortablePromise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAbortablePromise.d.ts","sourceRoot":"","sources":["../../../src/promise/createAbortablePromise.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAExC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,sBAAsB;;0BAGJ,CAAC,qBAAqB,MAAM,OAAO,CAAC,CAAC,CAAC;CAyBpE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type UnwrappedPromise<T = unknown> = {
2
+ resolve: (value: T | PromiseLike<T>) => void;
3
+ reject: (reason?: unknown) => void;
4
+ promise: Promise<T>;
5
+ };
6
+ export declare const createUnwrappedPromise: <T>() => UnwrappedPromise<T>;
7
+ //# sourceMappingURL=createUnwrappedPromise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createUnwrappedPromise.d.ts","sourceRoot":"","sources":["../../../src/promise/createUnwrappedPromise.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,OAAK,gBAAgB,CAAC,CAAC,CAU9D,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './createAbortablePromise';
2
+ export * from './createUnwrappedPromise';
3
+ export * from './retryPromise';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/promise/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare const DEFAULT_RETRY_DELAY_MS = 0;
2
+ export declare const DEFAULT_RETRY_COUNT = 5;
3
+ /**
4
+ * Helper to add retry capability to an async function
5
+ * @param fn async function
6
+ * @param retryCount max number of retries. defaults to 5
7
+ * @param retryDelayMS delay in-between retries in millisecs. defaults to 0
8
+ * @param excludeError predicate fn to exclude specific errors from causing a retry
9
+ */
10
+ export declare function retryPromise<T>({ fn, retryCount, retryDelayMS, excludeError, }: {
11
+ fn: () => Promise<T>;
12
+ retryCount?: number;
13
+ retryDelayMS?: number;
14
+ excludeError?: (error: Error) => boolean;
15
+ }): Promise<T>;
16
+ //# sourceMappingURL=retryPromise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryPromise.d.ts","sourceRoot":"","sources":["../../../src/promise/retryPromise.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,EACpC,EAAE,EACF,UAAgC,EAChC,YAAqC,EACrC,YAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;CAC1C,cAsBA"}
@@ -0,0 +1,8 @@
1
+ export declare const sanitization: {
2
+ sanitizeHTML: (rawHTML: string, options?: {
3
+ allowStyleAttribute?: boolean;
4
+ allowHyperlinks?: boolean;
5
+ }) => string;
6
+ stripHTML: (rawHTML: string) => string;
7
+ };
8
+ //# sourceMappingURL=sanitization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/sanitization.ts"],"names":[],"mappings":"AAuEA,eAAO,MAAM,YAAY;4BA7Bd,MAAM,YACN;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;yBAwB3C,MAAM;CAIqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Returns promise that resolves after ms.
3
+ */
4
+ export default function sleep(ms: number): Promise<unknown>;
5
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/sleep.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,EAAE,MAAM,oBAEvC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: (string?: string, maxLength?: number) => string;
2
+ export default _default;
3
+ //# sourceMappingURL=truncateString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncateString.d.ts","sourceRoot":"","sources":["../../src/truncateString.ts"],"names":[],"mappings":"yBAGgB,eAAW,EAAE,kBAA4B;AAAzD,wBAGE"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Updates the date part (year, day and month) of a date object (base)
3
+ * time, offset (timezone) and so on will be left untouched.
4
+ *
5
+ * @param base - Date which will be used (copied) to set day, month and year.
6
+ * @param date - Extract day, month and year from this date object.
7
+ * @returns Copy of base with day, month and year of date.
8
+ */
9
+ declare const _default: (base: Date, date: Date | null) => Date;
10
+ export default _default;
11
+ //# sourceMappingURL=updateDate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateDate.d.ts","sourceRoot":"","sources":["../../src/updateDate.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;yBACa,MAAM,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI;AAA7C,wBAaE"}
@@ -6,14 +6,6 @@
6
6
  * @param date - Extract hour, minute, second and millisecond from this date object.
7
7
  * @returns Copy of base with hour, minute, second and millisecond changed.
8
8
  */
9
- export default (base: Date, date: Date | null) => {
10
- const d = new Date(base);
11
- // ignore falsy dates
12
- if (date) {
13
- d.setHours(date.getHours());
14
- d.setMinutes(date.getMinutes());
15
- d.setSeconds(date.getSeconds());
16
- d.setMilliseconds(date.getMilliseconds());
17
- }
18
- return d;
19
- };
9
+ declare const _default: (base: Date, date: Date | null) => Date;
10
+ export default _default;
11
+ //# sourceMappingURL=updateTime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTime.d.ts","sourceRoot":"","sources":["../../src/updateTime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;yBACa,MAAM,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI;AAA7C,wBAUE"}
@@ -0,0 +1,3 @@
1
+ import { default as muteConsole } from './muteConsole';
2
+ export { muteConsole };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ const methods = ["log", "warn", "error", "info"];
2
+ const muteConsole = (f) => {
3
+ const originals = methods.map((method) => console[method]);
4
+ methods.forEach((method) => {
5
+ console[method] = () => {
6
+ };
7
+ });
8
+ let originalConsola;
9
+ if (global.consola) {
10
+ originalConsola = global.consola;
11
+ global.consola = consola.create({
12
+ level: -1
13
+ });
14
+ }
15
+ const restoreOriginals = () => {
16
+ methods.forEach((method, i) => {
17
+ console[method] = originals[i];
18
+ });
19
+ if (originalConsola) {
20
+ global.consola = originalConsola;
21
+ }
22
+ };
23
+ if (f.constructor.name === "AsyncFunction") {
24
+ const result = f();
25
+ if (result instanceof Promise) {
26
+ return result.finally(restoreOriginals);
27
+ }
28
+ } else {
29
+ try {
30
+ return f();
31
+ } catch (e) {
32
+ throw e;
33
+ } finally {
34
+ restoreOriginals();
35
+ }
36
+ }
37
+ };
38
+
39
+ export { muteConsole };
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../test-utils/muteConsole.ts"],"sourcesContent":["/* eslint-disable no-console */\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\" | \"info\";\nconst methods: ConsoleMethod[] = [\"log\", \"warn\", \"error\", \"info\"];\n\n/**\n * Helper function to run code suppressing all console output\n * @param f The function to run. Can be async.\n * @returns The original function's return value\n */\nexport default (f: (...args: never[]) => Promise<unknown>) => {\n const originals = methods.map((method) => console[method]);\n methods.forEach((method) => {\n console[method] = () => {};\n });\n\n let originalConsola: typeof consola;\n // @ts-expect-error Property 'consola' does not exist on type 'typeof globalThis'.\n if (global.consola) {\n // @ts-expect-error Property 'consola' does not exist on type 'typeof globalThis'.\n originalConsola = global.consola;\n // @ts-expect-error Property 'consola' does not exist on type 'typeof globalThis'.\n global.consola = consola.create({\n level: -1,\n });\n }\n\n const restoreOriginals = () => {\n methods.forEach((method, i) => {\n console[method] = originals[i];\n });\n if (originalConsola) {\n // @ts-expect-error Property 'consola' does not exist on type 'typeof globalThis'.\n global.consola = originalConsola;\n }\n };\n\n if (f.constructor.name === \"AsyncFunction\") {\n // async\n const result = f();\n if (result instanceof Promise) {\n return result.finally(restoreOriginals);\n }\n } else {\n // sync\n try {\n return f();\n } catch (e) {\n throw e;\n } finally {\n restoreOriginals();\n }\n }\n};\n"],"names":[],"mappings":"AAGA,MAAM,OAAA,GAA2B,CAAC,KAAA,EAAO,MAAA,EAAQ,SAAS,MAAM,CAAA;AAOhE,oBAAe,CAAC,CAAA,KAA8C;AAC5D,EAAA,MAAM,YAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,OAAA,CAAQ,MAAM,CAAC,CAAA;AACzD,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC1B,IAAA,OAAA,CAAQ,MAAM,IAAI,MAAM;AAAA,IAAC,CAAA;AAAA,EAC3B,CAAC,CAAA;AAED,EAAA,IAAI,eAAA;AAEJ,EAAA,IAAI,OAAO,OAAA,EAAS;AAElB,IAAA,eAAA,GAAkB,MAAA,CAAO,OAAA;AAEzB,IAAA,MAAA,CAAO,OAAA,GAAU,QAAQ,MAAA,CAAO;AAAA,MAC9B,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,EAAQ,CAAA,KAAM;AAC7B,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA;AAAA,IAC/B,CAAC,CAAA;AACD,IAAA,IAAI,eAAA,EAAiB;AAEnB,MAAA,MAAA,CAAO,OAAA,GAAU,eAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAA,CAAE,WAAA,CAAY,IAAA,KAAS,eAAA,EAAiB;AAE1C,IAAA,MAAM,SAAS,CAAA,EAAE;AACjB,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,OAAO,MAAA,CAAO,QAAQ,gBAAgB,CAAA;AAAA,IACxC;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,IAAI;AACF,MAAA,OAAO,CAAA,EAAE;AAAA,IACX,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,gBAAA,EAAiB;AAAA,IACnB;AAAA,EACF;AACF,CAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Helper function to run code suppressing all console output
3
+ * @param f The function to run. Can be async.
4
+ * @returns The original function's return value
5
+ */
6
+ declare const _default: (f: (...args: never[]) => Promise<unknown>) => Promise<unknown> | undefined;
7
+ export default _default;
8
+ //# sourceMappingURL=muteConsole.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muteConsole.d.ts","sourceRoot":"","sources":["../../test-utils/muteConsole.ts"],"names":[],"mappings":"AAKA;;;;GAIG;yBACa,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC;AAAzD,wBA2CE"}
package/package.json CHANGED
@@ -1,60 +1,78 @@
1
1
  {
2
2
  "name": "@knime/utils",
3
- "version": "1.11.1",
3
+ "version": "1.11.2",
4
4
  "description": "Internal utility functions and constants shared across @knime packages.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "https://github.com/knime/webapps-common.git",
7
+ "url": "https://github.com/knime/knime-designsystem.git",
8
8
  "directory": "packages/utils"
9
9
  },
10
- "homepage": "https://knime.github.io/webapps-common/",
11
10
  "license": "GPL 3 and Additional Permissions according to Sec. 7 (SEE the file LICENSE)",
12
11
  "author": "KNIME AG, Zurich, Switzerland",
13
12
  "type": "module",
14
- "dependencies": {
15
- "date-fns": "2.30.0",
16
- "date-fns-tz": "2.0.0",
17
- "dompurify": "^3.4.7",
18
- "filesize": "10.0.6"
19
- },
20
- "peerDependencies": {
21
- "consola": "3.x"
22
- },
23
- "devDependencies": {
24
- "consola": "3.4.2",
25
- "flush-promises": "^1.0.2",
26
- "mock-xmlhttprequest": "^8.3.0"
27
- },
28
- "main": "src/index.ts",
29
- "module": "src/index.ts",
30
- "files": [
31
- "src",
32
- "!src/**/__tests__/*",
33
- "test-utils",
34
- "CHANGELOG.md"
35
- ],
36
- "sideEffects": false,
13
+ "main": "./dist/index.js",
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/src/index.d.ts",
37
16
  "bin": {
38
- "pnpm-bulk-audit": "./src/audit/cli.js"
17
+ "pnpm-bulk-audit": "./audit/cli.js"
39
18
  },
40
19
  "exports": {
41
20
  ".": {
42
- "import": "./src/index.ts"
21
+ "types": "./dist/src/index.d.ts",
22
+ "import": "./dist/index.js"
43
23
  },
44
24
  "./audit": {
45
- "import": "./src/audit/bulkAudit.js"
25
+ "import": "./audit/bulkAudit.js"
46
26
  },
47
27
  "./globals.d.ts": {
48
- "import": "./src/config/globals.d.ts"
28
+ "import": "./globals.d.ts"
49
29
  },
50
30
  "./test-utils": {
51
- "import": "./test-utils/index.ts"
31
+ "types": "./dist/test-utils/index.d.ts",
32
+ "import": "./dist/test-utils/index.js"
52
33
  }
53
34
  },
35
+ "files": [
36
+ "dist",
37
+ "audit",
38
+ "globals.d.ts",
39
+ "CHANGELOG.md"
40
+ ],
41
+ "sideEffects": false,
42
+ "peerDependencies": {
43
+ "consola": "^3.4.2"
44
+ },
45
+ "dependencies": {
46
+ "date-fns": "2.30.0",
47
+ "date-fns-tz": "2.0.0",
48
+ "dompurify": "^3.4.11",
49
+ "filesize": "10.0.6"
50
+ },
51
+ "devDependencies": {
52
+ "@tsconfig/node24": "^24.0.4",
53
+ "@types/node": "^25.9.1",
54
+ "consola": "^3.4.2",
55
+ "flush-promises": "^1.0.2",
56
+ "mock-xmlhttprequest": "^8.3.0",
57
+ "typescript": "^5.9.3",
58
+ "vite": "^7.3.2",
59
+ "vite-plugin-dts": "^4.5.4",
60
+ "vue-tsc": "^3.3.4"
61
+ },
54
62
  "engines": {
55
- "node": ">=22 <25"
63
+ "node": "24.10.0",
64
+ "npm": "please-use-pnpm"
56
65
  },
57
66
  "scripts": {
58
- "test:unit": "TZ='Europe/Berlin' vitest"
67
+ "build": "pnpm run type-check && pnpm run build-only",
68
+ "build-only": "vite build",
69
+ "type-check": "vue-tsc --build",
70
+ "format": "prettier --cache --write .",
71
+ "format:check": "prettier --cache --check .",
72
+ "lint": "eslint . --cache --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
73
+ "lint:js": "eslint . --cache --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts",
74
+ "audit": "pnpm audit --prod",
75
+ "test:unit": "vitest",
76
+ "coverage": "vitest run --coverage"
59
77
  }
60
78
  }
package/src/capitalize.ts DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * Uppercases first letter of string
3
- * @param string to be capitalized first string, e.g. "workflow"
4
- * @return Capitalized String, e.g. "Workflow"
5
- */
6
- export const capitalize = (input: string) =>
7
- input.charAt(0).toUpperCase() + input.substring(1);
8
-
9
- const formats = {
10
- customFormat: (input: string, delimiter: string) =>
11
- capitalize(input.replace(delimiter, " ").toLowerCase()),
12
-
13
- kebabFormat: (input: string) => formats.customFormat(input, "-"),
14
- snakeFormat: (input: string) => formats.customFormat(input, "_"),
15
-
16
- camelPascalCase: (input: string) =>
17
- capitalize(
18
- (input.match(/([A-Z]?[^A-Z]*)/g) ?? [])
19
- .slice(0, -1)
20
- .join(" ")
21
- .toLowerCase(),
22
- ),
23
- } as const;
24
-
25
- type CaseFormatterOptions = {
26
- string: string;
27
- delimiter?: string;
28
- format?: keyof typeof formats;
29
- };
30
-
31
- export const caseFormatter = ({
32
- string,
33
- delimiter,
34
- format,
35
- }: CaseFormatterOptions) => {
36
- if (delimiter) {
37
- return formats.customFormat(string, delimiter);
38
- }
39
-
40
- if (format) {
41
- return formats[format](string, delimiter ?? "");
42
- }
43
-
44
- return capitalize(string);
45
- };
@@ -1,68 +0,0 @@
1
- import { isAfter, isBefore } from "date-fns";
2
-
3
- import updateDate from "./updateDate";
4
- import updateTime from "./updateTime";
5
-
6
- /**
7
- * Check if date is before min.
8
- * @param date
9
- * @param min
10
- * @param checkDate - check date part (year, day, month).
11
- * @param checkTime - check time part (hour, minutes etc.).
12
- * @returns whether limit is kept or not.
13
- */
14
- export const isBeforeMinDate = (
15
- date: Date,
16
- min: Date | null,
17
- checkDate: boolean,
18
- checkTime: boolean,
19
- ) => {
20
- if (min) {
21
- if (checkTime && checkDate) {
22
- return isBefore(date, min);
23
- }
24
- if (checkTime) {
25
- // only time is visible so ignore date: use same datre as base
26
- const base = new Date(0);
27
- return isBefore(updateTime(base, date), updateTime(base, min));
28
- }
29
- if (checkDate) {
30
- // only date is visible so ignore time: use same time as base
31
- const base = new Date(0);
32
- return isBefore(updateDate(base, date), updateDate(base, min));
33
- }
34
- }
35
- return false;
36
- };
37
-
38
- /**
39
- * Check
40
- * @param date - date to check.
41
- * @param max - maximum date.
42
- * @param checkDate - check date part (year, day, month).
43
- * @param checkTime - check time part (hour, minutes etc.).
44
- * @returns whether limit is kept or not.
45
- */
46
- export const isAfterMaxDate = (
47
- date: Date,
48
- max: Date | null,
49
- checkDate: boolean,
50
- checkTime: boolean,
51
- ) => {
52
- if (max) {
53
- if (checkTime && checkDate) {
54
- return isAfter(date, max);
55
- }
56
- if (checkTime) {
57
- // only time is visible so ignore date: use same datre as base
58
- const base = new Date(0);
59
- return isAfter(updateTime(base, date), updateTime(base, max));
60
- }
61
- if (checkDate) {
62
- // use same time base
63
- const base = new Date(0);
64
- return isAfter(updateDate(base, date), updateDate(base, max));
65
- }
66
- }
67
- return false;
68
- };
package/src/debounce.ts DELETED
@@ -1,28 +0,0 @@
1
- // Use this method to reduce many method calls to a few.
2
- // It's an 'immediate' implementation, so it will call the callbackindex: number once immediately an then again after the given wait.
3
-
4
- type CallbackFunc<T> = (value: T, index: number) => void;
5
-
6
- const debounce = <T>(callback: CallbackFunc<T>, wait: number) => {
7
- let timer: ReturnType<typeof setTimeout>;
8
- let lastCall = 0;
9
-
10
- return (...args: Parameters<typeof callback>) => {
11
- const [value, index] = args;
12
- clearTimeout(timer);
13
- const now = Date.now();
14
- const timeFromLastCall = now - lastCall;
15
-
16
- if (timeFromLastCall > wait) {
17
- lastCall = now;
18
- callback(value, index);
19
- } else {
20
- timer = setTimeout(() => {
21
- lastCall = now;
22
- callback(value, index);
23
- }, wait);
24
- }
25
- };
26
- };
27
-
28
- export default debounce;
@@ -1,87 +0,0 @@
1
- /**
2
- * Gets the file extension
3
- * @param nameOrPath can take a full file name (e.g "file.txt") or a path to a file
4
- * (e.g "file://path/to/file.txt" OR "/path/to/file.txt")
5
- * @returns just the file extension (e.g "txt")
6
- */
7
- export const getFileExtension = (nameOrPath: string): string => {
8
- const basename = nameOrPath.split(/[\\/]/).pop() ?? "";
9
-
10
- const parts = basename.split(".");
11
-
12
- if (basename === "" || parts.length === 1) {
13
- return "";
14
- }
15
-
16
- return parts.at(-1) ?? "";
17
- };
18
-
19
- /**
20
- * Metadata for .knar files, which corresponds to exported KNIME Workflow Groups
21
- * or Components
22
- */
23
- const KNAR = Object.freeze({
24
- extension: "knar",
25
- mimeType: "application/vnd.knime.workflow-group+zip",
26
- matches(file: File) {
27
- const extension = getFileExtension(file.name);
28
- return extension === this.extension;
29
- },
30
- });
31
-
32
- /**
33
- * Metadata for .knwf files, which corresponds to exported KNIME Workflows
34
- */
35
- const KNWF = Object.freeze({
36
- extension: "knwf",
37
- mimeType: "application/vnd.knime.workflow+zip",
38
- matches(file: File) {
39
- const extension = getFileExtension(file.name);
40
- return extension === this.extension;
41
- },
42
- /**
43
- * Gets the name of a .knwf file without the extension. If the file is not
44
- * matched as a .knwf file then this function will return the default value,
45
- * which is empty string ("") if param is not provided
46
- */
47
- getNameOrDefault(file: File, defaultValue = ""): string {
48
- if (!this.matches(file)) {
49
- return defaultValue;
50
- }
51
-
52
- return file.name.replace(`.${this.extension}`, "");
53
- },
54
- });
55
-
56
- export const knimeFileFormats = { KNAR, KNWF };
57
-
58
- /**
59
- * Gets the mime type from a given file. Defaults to `application/octet-stream`
60
- * if mimeType cannot be detected
61
- * @param file File
62
- * @returns mimeType
63
- */
64
- export const getFileMimeType = (file: File): string => {
65
- const DEFAULT_MIMETYPE = "application/octet-stream";
66
-
67
- const extension = getFileExtension(file.name);
68
-
69
- if (!extension) {
70
- return DEFAULT_MIMETYPE;
71
- }
72
-
73
- if (KNWF.matches(file)) {
74
- return KNWF.mimeType;
75
- }
76
-
77
- if (KNAR.matches(file)) {
78
- return KNAR.mimeType;
79
- }
80
-
81
- // file has extension but unrecognizable mime type
82
- if (!file.type) {
83
- return DEFAULT_MIMETYPE;
84
- }
85
-
86
- return file.type;
87
- };