mod-arch-shared 1.15.3 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ResourceNameTooltip.d.ts +1 -1
- package/dist/components/ResourceNameTooltip.js +1 -1
- package/dist/components/design/utils.js +22 -22
- package/package.json +6 -6
- package/dist/__tests__/unit/FieldGroupHelpLabelIcon.test.d.ts +0 -2
- package/dist/__tests__/unit/FieldGroupHelpLabelIcon.test.d.ts.map +0 -1
- package/dist/__tests__/unit/FieldGroupHelpLabelIcon.test.js +0 -43
- package/dist/__tests__/unit/FieldGroupHelpLabelIcon.test.js.map +0 -1
- package/dist/__tests__/unit/jest.setup.d.ts +0 -3
- package/dist/__tests__/unit/jest.setup.d.ts.map +0 -1
- package/dist/__tests__/unit/jest.setup.js +0 -5
- package/dist/__tests__/unit/jest.setup.js.map +0 -1
- package/dist/config/transform.file.d.ts +0 -3
- package/dist/config/transform.file.d.ts.map +0 -1
- package/dist/config/transform.file.js +0 -4
- package/dist/config/transform.file.js.map +0 -1
- package/dist/config/transform.style.d.ts +0 -2
- package/dist/config/transform.style.d.ts.map +0 -1
- package/dist/config/transform.style.js +0 -4
- package/dist/config/transform.style.js.map +0 -1
- package/dist/jest.config.d.ts +0 -22
- package/dist/jest.config.d.ts.map +0 -1
- package/dist/jest.config.js +0 -43
- package/dist/jest.config.js.map +0 -1
- package/dist/utilities/__tests__/markdown.spec.d.ts +0 -2
- package/dist/utilities/__tests__/markdown.spec.d.ts.map +0 -1
- package/dist/utilities/__tests__/markdown.spec.js +0 -17
- package/dist/utilities/__tests__/markdown.spec.js.map +0 -1
- package/dist/utilities/__tests__/string.spec.d.ts +0 -2
- package/dist/utilities/__tests__/string.spec.d.ts.map +0 -1
- package/dist/utilities/__tests__/string.spec.js +0 -51
- package/dist/utilities/__tests__/string.spec.js.map +0 -1
- package/dist/utilities/__tests__/time.spec.d.ts +0 -2
- package/dist/utilities/__tests__/time.spec.d.ts.map +0 -1
- package/dist/utilities/__tests__/time.spec.js +0 -61
- package/dist/utilities/__tests__/time.spec.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { K8sResourceCommon } from '../types';
|
|
3
|
-
import '
|
|
3
|
+
import '../components/NotebookController.scss';
|
|
4
4
|
type ResourceNameTooltipProps = {
|
|
5
5
|
resource: K8sResourceCommon;
|
|
6
6
|
children: React.ReactNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ClipboardCopy, DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm, Flex, FlexItem, Popover, Stack, StackItem, } from '@patternfly/react-core';
|
|
3
3
|
import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons';
|
|
4
|
-
import '
|
|
4
|
+
import '../components/NotebookController.scss';
|
|
5
5
|
import DashboardPopupIconButton from '../components/dashboard/DashboardPopupIconButton';
|
|
6
6
|
const ResourceNameTooltip = ({ children, resource, wrap = true, }) => (React.createElement("div", { style: { display: wrap ? 'block' : 'inline-flex' } },
|
|
7
7
|
React.createElement(Flex, { gap: { default: 'gapXs' }, alignItems: { default: 'alignItemsCenter' } },
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import projectImg from '
|
|
2
|
-
import notebookImg from '
|
|
3
|
-
import pipelineImg from '
|
|
4
|
-
import pipelineRunImg from '
|
|
5
|
-
import clusterStorageImg from '
|
|
6
|
-
import modelServerImg from '
|
|
7
|
-
import registeredModelsImg from '
|
|
8
|
-
import deployedModelsImg from '
|
|
9
|
-
import deployingModelsImg from '
|
|
10
|
-
import dataConnectionImg from '
|
|
11
|
-
import userImg from '
|
|
12
|
-
import groupImg from '
|
|
13
|
-
import projectEmptyStateImg from '
|
|
14
|
-
import notebookEmptyStateImg from '
|
|
15
|
-
import pipelineEmptyStateImg from '
|
|
16
|
-
import clusterStorageEmptyStateImg from '
|
|
17
|
-
import modelServerEmptyStateImg from '
|
|
18
|
-
import dataConnectionEmptyStateImg from '
|
|
19
|
-
import modelRegistryEmptyStateImg from '
|
|
20
|
-
import storageClassesEmptyStateImg from '
|
|
21
|
-
import modelRegistryMissingModelImg from '
|
|
22
|
-
import modelRegistryMissingVersionImg from '
|
|
1
|
+
import projectImg from '../../images/UI_icon-Folder-RGB.svg';
|
|
2
|
+
import notebookImg from '../../images/UI_icon-Wrench-RGB.svg';
|
|
3
|
+
import pipelineImg from '../../images/UI_icon-Branch-RGB.svg';
|
|
4
|
+
import pipelineRunImg from '../../images/UI_icon-Double_arrow_right-RGB.svg';
|
|
5
|
+
import clusterStorageImg from '../../images/UI_icon-Storage-RGB.svg';
|
|
6
|
+
import modelServerImg from '../../images/UI_icon-Server-RGB.svg';
|
|
7
|
+
import registeredModelsImg from '../../images/Icon-Layered_A_Black-RGB.svg';
|
|
8
|
+
import deployedModelsImg from '../../images/UI_icon-Cubes-RGB.svg';
|
|
9
|
+
import deployingModelsImg from '../../images/UI_icon-Server_upload-RGB.svg';
|
|
10
|
+
import dataConnectionImg from '../../images/UI_icon-Connected-RGB.svg';
|
|
11
|
+
import userImg from '../../images/UI_icon-User-RGB.svg';
|
|
12
|
+
import groupImg from '../../images/UI_icon-Shared_workspace-RGB.svg';
|
|
13
|
+
import projectEmptyStateImg from '../../images/empty-state-project-overview.svg';
|
|
14
|
+
import notebookEmptyStateImg from '../../images/empty-state-notebooks.svg';
|
|
15
|
+
import pipelineEmptyStateImg from '../../images/empty-state-pipelines.svg';
|
|
16
|
+
import clusterStorageEmptyStateImg from '../../images/empty-state-cluster-storage.svg';
|
|
17
|
+
import modelServerEmptyStateImg from '../../images/empty-state-model-serving.svg';
|
|
18
|
+
import dataConnectionEmptyStateImg from '../../images/empty-state-data-connections.svg';
|
|
19
|
+
import modelRegistryEmptyStateImg from '../../images/empty-state-model-registries.svg';
|
|
20
|
+
import storageClassesEmptyStateImg from '../../images/empty-state-storage-classes.svg';
|
|
21
|
+
import modelRegistryMissingModelImg from '../../images/no-models-model-registry.svg';
|
|
22
|
+
import modelRegistryMissingVersionImg from '../../images/no-versions-model-registry.svg';
|
|
23
23
|
import './vars.scss';
|
|
24
24
|
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
25
25
|
// These conditions are required for future object types that may be added later.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mod-arch-shared",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.0",
|
|
4
4
|
"description": "Shared UI components and utilities for modular architecture micro-frontend projects",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"LICENSE"
|
|
19
19
|
],
|
|
20
20
|
"scripts": {
|
|
21
|
-
"build": "
|
|
21
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json && npm run copy-assets && tsc-alias -p tsconfig.build.json",
|
|
22
22
|
"copy-assets": "mkdir -p dist/images && cp -r images/* dist/images/ && find components \\( -name '*.scss' -o -name '*.css' \\) -exec rsync -R {} dist/ \\;",
|
|
23
23
|
"test": "run-s test:lint test:unit test:type-check",
|
|
24
24
|
"test:jest": "jest --passWithNoTests",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"mod-arch-core": ">=1.
|
|
54
|
-
"mod-arch-kubeflow": ">=1.
|
|
53
|
+
"mod-arch-core": ">=1.16.0",
|
|
54
|
+
"mod-arch-kubeflow": ">=1.16.0",
|
|
55
55
|
"react": ">=16.8.0",
|
|
56
56
|
"react-dom": ">=16.8.0",
|
|
57
57
|
"react-router-dom": ">=6.4.0"
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
"ts-jest": "^29.2.6",
|
|
87
87
|
"tsc-alias": "^1.8.15",
|
|
88
88
|
"typescript": "^5.0.4",
|
|
89
|
-
"mod-arch-core": "1.
|
|
90
|
-
"mod-arch-kubeflow": "1.
|
|
89
|
+
"mod-arch-core": "1.16.0",
|
|
90
|
+
"mod-arch-kubeflow": "1.16.0"
|
|
91
91
|
},
|
|
92
92
|
"dependencies": {
|
|
93
93
|
"@patternfly/patternfly": "^6.4.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FieldGroupHelpLabelIcon.test.d.ts","sourceRoot":"","sources":["../../../__tests__/unit/FieldGroupHelpLabelIcon.test.tsx"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { render, screen, fireEvent } from '@testing-library/react';
|
|
4
|
-
import FieldGroupHelpLabelIcon from '../../components/FieldGroupHelpLabelIcon';
|
|
5
|
-
describe('FieldGroupHelpLabelIcon', () => {
|
|
6
|
-
it('should render with content', () => {
|
|
7
|
-
render(React.createElement(FieldGroupHelpLabelIcon, { content: "Test help content" }));
|
|
8
|
-
const button = screen.getByRole('button', { name: 'More info' });
|
|
9
|
-
expect(button).toBeInTheDocument();
|
|
10
|
-
});
|
|
11
|
-
it('should render with React element as content', () => {
|
|
12
|
-
const content = (React.createElement("div", null,
|
|
13
|
-
React.createElement("strong", null, "Help title"),
|
|
14
|
-
React.createElement("p", null, "Help description")));
|
|
15
|
-
render(React.createElement(FieldGroupHelpLabelIcon, { content: content }));
|
|
16
|
-
const button = screen.getByRole('button', { name: 'More info' });
|
|
17
|
-
expect(button).toBeInTheDocument();
|
|
18
|
-
});
|
|
19
|
-
it('should call onClick handler when provided', () => {
|
|
20
|
-
const handleClick = jest.fn();
|
|
21
|
-
render(React.createElement(FieldGroupHelpLabelIcon, { content: "Test help content", onClick: handleClick }));
|
|
22
|
-
const button = screen.getByRole('button', { name: 'More info' });
|
|
23
|
-
fireEvent.click(button);
|
|
24
|
-
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
25
|
-
});
|
|
26
|
-
it('should work without onClick handler (backward compatibility)', () => {
|
|
27
|
-
render(React.createElement(FieldGroupHelpLabelIcon, { content: "Test help content" }));
|
|
28
|
-
const button = screen.getByRole('button', { name: 'More info' });
|
|
29
|
-
// Should not throw error when clicked without onClick handler
|
|
30
|
-
fireEvent.click(button);
|
|
31
|
-
expect(button).toBeInTheDocument();
|
|
32
|
-
});
|
|
33
|
-
it('should call onClick multiple times when clicked multiple times', () => {
|
|
34
|
-
const handleClick = jest.fn();
|
|
35
|
-
render(React.createElement(FieldGroupHelpLabelIcon, { content: "Test help content", onClick: handleClick }));
|
|
36
|
-
const button = screen.getByRole('button', { name: 'More info' });
|
|
37
|
-
fireEvent.click(button);
|
|
38
|
-
fireEvent.click(button);
|
|
39
|
-
fireEvent.click(button);
|
|
40
|
-
expect(handleClick).toHaveBeenCalledTimes(3);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=FieldGroupHelpLabelIcon.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FieldGroupHelpLabelIcon.test.js","sourceRoot":"","sources":["../../../__tests__/unit/FieldGroupHelpLabelIcon.test.tsx"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,uBAAuB,MAAM,sCAAsC,CAAC;AAE3E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,oBAAC,uBAAuB,IAAC,OAAO,EAAC,mBAAmB,GAAG,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,CACd;YACE,iDAA2B;YAC3B,kDAAuB,CACnB,CACP,CAAC;QACF,MAAM,CAAC,oBAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE9B,MAAM,CAAC,oBAAC,uBAAuB,IAAC,OAAO,EAAC,mBAAmB,EAAC,OAAO,EAAE,WAAW,GAAI,CAAC,CAAC;QAEtF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,oBAAC,uBAAuB,IAAC,OAAO,EAAC,mBAAmB,GAAG,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAEjE,8DAA8D;QAC9D,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE9B,MAAM,CAAC,oBAAC,uBAAuB,IAAC,OAAO,EAAC,mBAAmB,EAAC,OAAO,EAAE,WAAW,GAAI,CAAC,CAAC;QAEtF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAEjE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../../../__tests__/unit/jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,gCAAgC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["../../../__tests__/unit/jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,gCAAgC,CAAC;AAExC,sDAAsD;AACtD,+DAA+D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform.file.d.ts","sourceRoot":"","sources":["../../config/transform.file.js"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform.file.js","sourceRoot":"","sources":["../../config/transform.file.js"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform.style.d.ts","sourceRoot":"","sources":["../../config/transform.style.js"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform.style.js","sourceRoot":"","sources":["../../config/transform.style.js"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC"}
|
package/dist/jest.config.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export let roots: string[];
|
|
2
|
-
export let testMatch: string[];
|
|
3
|
-
export let testPathIgnorePatterns: string[];
|
|
4
|
-
export let modulePathIgnorePatterns: string[];
|
|
5
|
-
export let clearMocks: boolean;
|
|
6
|
-
export let moduleDirectories: string[];
|
|
7
|
-
export let moduleNameMapper: {
|
|
8
|
-
'\\.(css|less|sass|scss)$': string;
|
|
9
|
-
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': string;
|
|
10
|
-
'~/(.*)': string;
|
|
11
|
-
'#~/(.*)': string;
|
|
12
|
-
};
|
|
13
|
-
export let testEnvironment: string;
|
|
14
|
-
export let transform: {
|
|
15
|
-
'^.+\\.(t|j)sx?$': string;
|
|
16
|
-
};
|
|
17
|
-
export let transformIgnorePatterns: string[];
|
|
18
|
-
export let snapshotSerializers: never[];
|
|
19
|
-
export let setupFilesAfterEnv: string[];
|
|
20
|
-
export let coverageDirectory: string;
|
|
21
|
-
export let collectCoverageFrom: string[];
|
|
22
|
-
//# sourceMappingURL=jest.config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jest.config.d.ts","sourceRoot":"","sources":["../jest.config.js"],"names":[],"mappings":""}
|
package/dist/jest.config.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// For a detailed explanation regarding each configuration property, visit:
|
|
3
|
-
// https://jestjs.io/docs/en/configuration.html
|
|
4
|
-
module.exports = {
|
|
5
|
-
roots: ['<rootDir>/'],
|
|
6
|
-
testMatch: [
|
|
7
|
-
'**/__tests__/unit/**/?(*.)+(spec|test).ts?(x)',
|
|
8
|
-
'**/__tests__/?(*.)+(spec|test).ts?(x)',
|
|
9
|
-
'**/utilities/__tests__/?(*.)+(spec|test).ts?(x)',
|
|
10
|
-
],
|
|
11
|
-
testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/dist/'],
|
|
12
|
-
modulePathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/dist/'],
|
|
13
|
-
// Automatically clear mock calls and instances between every test
|
|
14
|
-
clearMocks: true,
|
|
15
|
-
// An array of directory names to be searched recursively up from the requiring module's location
|
|
16
|
-
moduleDirectories: ['node_modules', '<rootDir>/'],
|
|
17
|
-
// A map from regular expressions to module names that allow to stub out resources with a single module
|
|
18
|
-
moduleNameMapper: {
|
|
19
|
-
'\\.(css|less|sass|scss)$': '<rootDir>/config/transform.style.js',
|
|
20
|
-
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/config/transform.file.js',
|
|
21
|
-
'~/(.*)': '<rootDir>/$1',
|
|
22
|
-
'#~/(.*)': '<rootDir>/$1',
|
|
23
|
-
},
|
|
24
|
-
// The test environment that will be used for testing.
|
|
25
|
-
testEnvironment: 'jest-environment-jsdom',
|
|
26
|
-
// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
|
|
27
|
-
transform: {
|
|
28
|
-
'^.+\\.(t|j)sx?$': 'ts-jest', // Process .js, .jsx, .ts, .tsx files with ts-jest
|
|
29
|
-
},
|
|
30
|
-
// include projects from node_modules as required
|
|
31
|
-
transformIgnorePatterns: ['node_modules/(?!yaml|lodash-es|uuid|delaunator)'],
|
|
32
|
-
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
|
|
33
|
-
snapshotSerializers: [],
|
|
34
|
-
setupFilesAfterEnv: ['<rootDir>/__tests__/unit/jest.setup.ts'],
|
|
35
|
-
coverageDirectory: 'jest-coverage',
|
|
36
|
-
collectCoverageFrom: [
|
|
37
|
-
'<rootDir>/**/*.{ts,tsx}',
|
|
38
|
-
'!<rootDir>/__tests__/**',
|
|
39
|
-
'!<rootDir>/__mocks__/**',
|
|
40
|
-
'!**/*.spec.{ts,tsx}',
|
|
41
|
-
],
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=jest.config.js.map
|
package/dist/jest.config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../jest.config.js"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,+CAA+C;AAE/C,MAAM,CAAC,OAAO,GAAG;IACf,KAAK,EAAE,CAAC,YAAY,CAAC;IACrB,SAAS,EAAE;QACT,+CAA+C;QAC/C,uCAAuC;QACvC,iDAAiD;KAClD;IACD,sBAAsB,EAAE,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;IACtE,wBAAwB,EAAE,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;IACxE,kEAAkE;IAClE,UAAU,EAAE,IAAI;IAEhB,iGAAiG;IACjG,iBAAiB,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;IAEjD,uGAAuG;IACvG,gBAAgB,EAAE;QAChB,0BAA0B,EAAE,qCAAqC;QACjE,qFAAqF,EACnF,oCAAoC;QACtC,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,cAAc;KAC1B;IAED,sDAAsD;IACtD,eAAe,EAAE,wBAAwB;IAEzC,oIAAoI;IACpI,SAAS,EAAE;QACT,iBAAiB,EAAE,SAAS,EAAE,kDAAkD;KACjF;IAED,iDAAiD;IACjD,uBAAuB,EAAE,CAAC,iDAAiD,CAAC;IAE5E,sFAAsF;IACtF,mBAAmB,EAAE,EAAE;IAEvB,kBAAkB,EAAE,CAAC,wCAAwC,CAAC;IAE9D,iBAAiB,EAAE,eAAe;IAElC,mBAAmB,EAAE;QACnB,yBAAyB;QACzB,yBAAyB;QACzB,yBAAyB;QACzB,qBAAqB;KACtB;CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.spec.d.ts","sourceRoot":"","sources":["../../../utilities/__tests__/markdown.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { markdownConverter } from '../markdown';
|
|
2
|
-
describe('markdownConverter', () => {
|
|
3
|
-
// Helper function to convert HTML string to a DOM node
|
|
4
|
-
const htmlToNode = (html) => {
|
|
5
|
-
const container = document.createElement('div');
|
|
6
|
-
container.innerHTML = html;
|
|
7
|
-
return container;
|
|
8
|
-
};
|
|
9
|
-
it('should convert markdown to sanitized HTML and add hook to transform anchor tags', () => {
|
|
10
|
-
const mockMarkdown = '## Heading\n\n[Link](https://example.com)';
|
|
11
|
-
const expectedHtml = htmlToNode('<h2>Heading</h2>\n' +
|
|
12
|
-
'<p><a href="https://example.com" rel="noopener noreferrer" target="_blank">Link</a></p>');
|
|
13
|
-
const result = htmlToNode(markdownConverter.makeHtml(mockMarkdown));
|
|
14
|
-
expect(result.isEqualNode(expectedHtml)).toBe(true);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=markdown.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.spec.js","sourceRoot":"","sources":["../../../utilities/__tests__/markdown.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,uDAAuD;IACvD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAkB,EAAE;QAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,YAAY,GAAG,2CAA2C,CAAC;QACjE,MAAM,YAAY,GAAG,UAAU,CAC7B,oBAAoB;YAClB,yFAAyF,CAC5F,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"string.spec.d.ts","sourceRoot":"","sources":["../../../utilities/__tests__/string.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { genRandomChars } from '../string';
|
|
2
|
-
describe('genRandomChars', () => {
|
|
3
|
-
it('should return a string of default length 6', () => {
|
|
4
|
-
const result = genRandomChars();
|
|
5
|
-
expect(typeof result).toBe('string');
|
|
6
|
-
expect(result.length).toBe(6);
|
|
7
|
-
});
|
|
8
|
-
it('should return a string of specified length', () => {
|
|
9
|
-
const length = 10;
|
|
10
|
-
const result = genRandomChars(length);
|
|
11
|
-
expect(typeof result).toBe('string');
|
|
12
|
-
expect(result.length).toBe(length);
|
|
13
|
-
});
|
|
14
|
-
it('should return different strings on multiple calls', () => {
|
|
15
|
-
const result1 = genRandomChars();
|
|
16
|
-
const result2 = genRandomChars();
|
|
17
|
-
expect(result1).not.toBe(result2);
|
|
18
|
-
});
|
|
19
|
-
it('should only contain alphanumeric characters', () => {
|
|
20
|
-
const result = genRandomChars(20);
|
|
21
|
-
// Should only contain lowercase letters and numbers
|
|
22
|
-
expect(result).toMatch(/^[a-z0-9]+$/);
|
|
23
|
-
});
|
|
24
|
-
it('should handle edge case of length 0', () => {
|
|
25
|
-
const result = genRandomChars(0);
|
|
26
|
-
expect(result).toBe('');
|
|
27
|
-
});
|
|
28
|
-
it('should handle length 1', () => {
|
|
29
|
-
const result = genRandomChars(1);
|
|
30
|
-
expect(result.length).toBe(1);
|
|
31
|
-
expect(result).toMatch(/^[a-z0-9]$/);
|
|
32
|
-
});
|
|
33
|
-
it('should be consistent with its character set across multiple runs', () => {
|
|
34
|
-
// Generate multiple strings and ensure they all follow the same pattern
|
|
35
|
-
const results = Array.from({ length: 10 }, () => genRandomChars(10));
|
|
36
|
-
results.forEach((result) => {
|
|
37
|
-
expect(result).toMatch(/^[a-z0-9]+$/);
|
|
38
|
-
expect(result.length).toBe(10);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
it('should not include special characters or uppercase letters', () => {
|
|
42
|
-
// Run multiple times to increase confidence
|
|
43
|
-
for (let i = 0; i < 20; i++) {
|
|
44
|
-
const result = genRandomChars(15);
|
|
45
|
-
// Should not contain uppercase letters, special characters, or whitespace
|
|
46
|
-
expect(result).not.toMatch(/[A-Z]/);
|
|
47
|
-
expect(result).not.toMatch(/[^a-z0-9]/);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=string.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"string.spec.js","sourceRoot":"","sources":["../../../utilities/__tests__/string.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time.spec.d.ts","sourceRoot":"","sources":["../../../utilities/__tests__/time.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { relativeTime } from '../time';
|
|
2
|
-
describe('relativeTime', () => {
|
|
3
|
-
it('should convert milliseconds to minutes and seconds', () => {
|
|
4
|
-
expect(relativeTime(102, 30)).toBe('Just now');
|
|
5
|
-
});
|
|
6
|
-
it('should print ago if the current time is less than the previous', () => {
|
|
7
|
-
expect(relativeTime(62000, 1)).toBe('1 minute ago');
|
|
8
|
-
});
|
|
9
|
-
it('should print in if the elapsed time is less than 0', () => {
|
|
10
|
-
expect(relativeTime(1, 700000)).toBe('in 12 minutes');
|
|
11
|
-
});
|
|
12
|
-
it('should print in if the elapsed time is less than 0', () => {
|
|
13
|
-
expect(relativeTime(1, 62000)).toBe('in 1 minute');
|
|
14
|
-
});
|
|
15
|
-
it('should return just now when previous is NaN', () => {
|
|
16
|
-
expect(relativeTime(1000, NaN)).toBe('Just now');
|
|
17
|
-
});
|
|
18
|
-
it('should return just now if elapsed is less than 0', () => {
|
|
19
|
-
expect(relativeTime(1000, 2000)).toBe('Just now');
|
|
20
|
-
});
|
|
21
|
-
it('should return formatted time in minutes when elapsed time is less than an hour', () => {
|
|
22
|
-
const current = 1708976688173;
|
|
23
|
-
const previous = current - 30 * 60 * 1000; // 30 minutes ago
|
|
24
|
-
expect(relativeTime(current, previous)).toBe('30 minutes ago');
|
|
25
|
-
});
|
|
26
|
-
it('should return formatted time in hours when elapsed time is less than a day', () => {
|
|
27
|
-
const current = 1708976688173;
|
|
28
|
-
const previous = current - 6 * 60 * 60 * 1000; // 6 hours ago
|
|
29
|
-
expect(relativeTime(current, previous)).toBe('6 hours ago');
|
|
30
|
-
});
|
|
31
|
-
it('should return formatted time in days when elapsed time is less than a month', () => {
|
|
32
|
-
const current = 1708976688173;
|
|
33
|
-
const previous = current - 2 * 24 * 60 * 60 * 1000; // 2 days ago
|
|
34
|
-
expect(relativeTime(current, previous)).toBe('2 days ago');
|
|
35
|
-
});
|
|
36
|
-
it('should return formatted time in months when elapsed time is less than a year', () => {
|
|
37
|
-
const current = 1708976688173;
|
|
38
|
-
const previous = current - 2 * 30 * 24 * 60 * 60 * 1000; // 2 months ago
|
|
39
|
-
expect(relativeTime(current, previous)).toBe('2 months ago');
|
|
40
|
-
});
|
|
41
|
-
it('should return formatted date when elapsed time is more than a year', () => {
|
|
42
|
-
const current = 1708976688173;
|
|
43
|
-
const previous = current - 2 * 365 * 24 * 60 * 60 * 1000; // 2 years ago
|
|
44
|
-
expect(relativeTime(current, previous)).toMatch(/\d{1,2} [A-Za-z]+ \d{4}/); // Matches "01 Jan 2022" format
|
|
45
|
-
});
|
|
46
|
-
it('should get the correct month', () => {
|
|
47
|
-
expect(relativeTime(2500, 1610859600000).split(' ')[1]).toBe('Jan');
|
|
48
|
-
expect(relativeTime(2500, 1613538000000).split(' ')[1]).toBe('Feb');
|
|
49
|
-
expect(relativeTime(2500, 1615953600000).split(' ')[1]).toBe('Mar');
|
|
50
|
-
expect(relativeTime(2500, 1618632000000).split(' ')[1]).toBe('April');
|
|
51
|
-
expect(relativeTime(2500, 1621224000000).split(' ')[1]).toBe('May');
|
|
52
|
-
expect(relativeTime(2500, 1623902400000).split(' ')[1]).toBe('June');
|
|
53
|
-
expect(relativeTime(2500, 1626494400000).split(' ')[1]).toBe('July');
|
|
54
|
-
expect(relativeTime(2500, 1629172800000).split(' ')[1]).toBe('August');
|
|
55
|
-
expect(relativeTime(2500, 1631851200000).split(' ')[1]).toBe('Sept');
|
|
56
|
-
expect(relativeTime(2500, 1634443200000).split(' ')[1]).toBe('Oct');
|
|
57
|
-
expect(relativeTime(2500, 1637125200000).split(' ')[1]).toBe('Nov');
|
|
58
|
-
expect(relativeTime(2500, 1639717200000).split(' ')[1]).toBe('Dec');
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=time.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time.spec.js","sourceRoot":"","sources":["../../../utilities/__tests__/time.spec.ts"],"names":[],"mappings":"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"}
|