@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.
- package/CHANGELOG.md +6 -0
- package/README.md +67 -14
- package/dist/globals.d.ts +8 -0
- package/dist/index.js +714 -0
- package/dist/index.js.map +1 -0
- package/dist/src/capitalize.d.ts +20 -0
- package/dist/src/capitalize.d.ts.map +1 -0
- package/dist/src/dateMinMaxCheck.d.ts +19 -0
- package/dist/src/dateMinMaxCheck.d.ts.map +1 -0
- package/dist/src/debounce.d.ts +4 -0
- package/dist/src/debounce.d.ts.map +1 -0
- package/dist/src/fileExtensions.d.ts +33 -0
- package/dist/src/fileExtensions.d.ts.map +1 -0
- package/dist/src/filters.d.ts +13 -0
- package/dist/src/filters.d.ts.map +1 -0
- package/dist/src/format.d.ts +39 -0
- package/dist/src/format.d.ts.map +1 -0
- package/dist/src/formatHotkeys.d.ts +17 -0
- package/dist/src/formatHotkeys.d.ts.map +1 -0
- package/dist/src/getDeepActiveElement.d.ts +3 -0
- package/dist/src/getDeepActiveElement.d.ts.map +1 -0
- package/{src/getWrappedAroundIndex.ts → dist/src/getWrappedAroundIndex.d.ts} +3 -2
- package/dist/src/getWrappedAroundIndex.d.ts.map +1 -0
- package/{src/hotkeys.ts → dist/src/hotkeys.d.ts} +4 -17
- package/dist/src/hotkeys.d.ts.map +1 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/intervalUtils.d.ts +114 -0
- package/dist/src/intervalUtils.d.ts.map +1 -0
- package/{src/localTimezone.ts → dist/src/localTimezone.d.ts} +3 -2
- package/dist/src/localTimezone.d.ts.map +1 -0
- package/dist/src/navigator.d.ts +11 -0
- package/dist/src/navigator.d.ts.map +1 -0
- package/{src/numIntegerDigits.ts → dist/src/numIntegerDigits.d.ts} +3 -2
- package/dist/src/numIntegerDigits.d.ts.map +1 -0
- package/dist/src/promise/createAbortablePromise.d.ts +32 -0
- package/dist/src/promise/createAbortablePromise.d.ts.map +1 -0
- package/dist/src/promise/createUnwrappedPromise.d.ts +7 -0
- package/dist/src/promise/createUnwrappedPromise.d.ts.map +1 -0
- package/dist/src/promise/index.d.ts +4 -0
- package/dist/src/promise/index.d.ts.map +1 -0
- package/dist/src/promise/retryPromise.d.ts +16 -0
- package/dist/src/promise/retryPromise.d.ts.map +1 -0
- package/dist/src/sanitization.d.ts +8 -0
- package/dist/src/sanitization.d.ts.map +1 -0
- package/dist/src/sleep.d.ts +5 -0
- package/dist/src/sleep.d.ts.map +1 -0
- package/dist/src/truncateString.d.ts +3 -0
- package/dist/src/truncateString.d.ts.map +1 -0
- package/dist/src/updateDate.d.ts +11 -0
- package/dist/src/updateDate.d.ts.map +1 -0
- package/{src/updateTime.ts → dist/src/updateTime.d.ts} +3 -11
- package/dist/src/updateTime.d.ts.map +1 -0
- package/dist/test-utils/index.d.ts +3 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +40 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/muteConsole.d.ts +8 -0
- package/dist/test-utils/muteConsole.d.ts.map +1 -0
- package/package.json +51 -33
- package/src/capitalize.ts +0 -45
- package/src/dateMinMaxCheck.ts +0 -68
- package/src/debounce.ts +0 -28
- package/src/fileExtensions.ts +0 -87
- package/src/filters.ts +0 -114
- package/src/format.ts +0 -113
- package/src/formatHotkeys.ts +0 -98
- package/src/getDeepActiveElement.ts +0 -9
- package/src/index.ts +0 -76
- package/src/intervalUtils.ts +0 -434
- package/src/navigator.ts +0 -13
- package/src/promise/createAbortablePromise.ts +0 -56
- package/src/promise/createUnwrappedPromise.ts +0 -17
- package/src/promise/index.ts +0 -3
- package/src/promise/retryPromise.ts +0 -45
- package/src/sanitization.ts +0 -72
- package/src/sleep.ts +0 -6
- package/src/truncateString.ts +0 -7
- package/src/updateDate.ts +0 -23
- package/src/uploadManager/index.ts +0 -370
- package/test-utils/index.ts +0 -3
- package/test-utils/muteConsole.ts +0 -54
- /package/{src/audit → audit}/README.md +0 -0
- /package/{src/audit → audit}/bulkAudit.js +0 -0
- /package/{src/audit → audit}/cli.js +0 -0
- /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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 @@
|
|
|
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.
|
|
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/
|
|
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
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
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": "./
|
|
17
|
+
"pnpm-bulk-audit": "./audit/cli.js"
|
|
39
18
|
},
|
|
40
19
|
"exports": {
|
|
41
20
|
".": {
|
|
42
|
-
"
|
|
21
|
+
"types": "./dist/src/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
43
23
|
},
|
|
44
24
|
"./audit": {
|
|
45
|
-
"import": "./
|
|
25
|
+
"import": "./audit/bulkAudit.js"
|
|
46
26
|
},
|
|
47
27
|
"./globals.d.ts": {
|
|
48
|
-
"import": "./
|
|
28
|
+
"import": "./globals.d.ts"
|
|
49
29
|
},
|
|
50
30
|
"./test-utils": {
|
|
51
|
-
"
|
|
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": "
|
|
63
|
+
"node": "24.10.0",
|
|
64
|
+
"npm": "please-use-pnpm"
|
|
56
65
|
},
|
|
57
66
|
"scripts": {
|
|
58
|
-
"
|
|
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
|
-
};
|
package/src/dateMinMaxCheck.ts
DELETED
|
@@ -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;
|
package/src/fileExtensions.ts
DELETED
|
@@ -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
|
-
};
|