From 2fd82b10b5dadb1c69d9b668b331dddb5d532dea Mon Sep 17 00:00:00 2001 From: vadson71 Date: Tue, 17 Sep 2024 13:12:31 +0300 Subject: [PATCH 1/9] Object Page Add Custom Section quick action (#2335) * feat: op custom section quick action implementation * fix: cleanup * fix: changeset added * fix: unit test fix * fix: linter * feat: simple quick action classes optimization * fix: work on pr comments * fix: linter * fix: pr comments * fix: template name carrier change * fix: unit test fix * fix: pr comments --------- Co-authored-by: Nafees Ahmed <120391284+nahmed22@users.noreply.github.com> --- .changeset/weak-dolphins-matter.md | 7 + .vscode/launch.json | 17 +++ .../adp-tooling/src/preview/change-handler.ts | 44 +++++- packages/adp-tooling/src/types.ts | 1 + .../rta/common/op-custom-section.xml | 17 +++ .../test/unit/preview/change-handler.test.ts | 52 ++++++- .../src/adp/command-executor.ts | 4 +- .../adp/controllers/AddFragment.controller.ts | 18 ++- .../common/add-controller-to-page.ts | 34 ++--- .../common/op-add-custom-section.ts | 35 +++++ .../common/op-add-header-field.ts | 39 +---- .../fe-v2/lr-toggle-clear-filter-bar.ts | 39 ++--- .../src/adp/quick-actions/fe-v2/registry.ts | 4 +- .../fe-v4/lr-toggle-clear-filter-bar.ts | 30 ++-- .../src/adp/quick-actions/fe-v4/registry.ts | 4 +- .../quick-actions/simple-quick-action-base.ts | 53 +++++++ .../src/messagebundle.properties | 1 + .../AddFragment.controller.test.ts | 133 +++++++++++++++- .../test/unit/adp/quick-actions/fe-v2.test.ts | 143 +++++++++++++++++- .../test/unit/adp/quick-actions/fe-v4.test.ts | 18 ++- .../types/sap.ui.fl.d.ts | 11 +- .../types/sap.ui.rta.d.ts | 4 +- 22 files changed, 582 insertions(+), 126 deletions(-) create mode 100644 .changeset/weak-dolphins-matter.md create mode 100644 packages/adp-tooling/templates/rta/common/op-custom-section.xml create mode 100644 packages/preview-middleware-client/src/adp/quick-actions/common/op-add-custom-section.ts create mode 100644 packages/preview-middleware-client/src/adp/quick-actions/simple-quick-action-base.ts diff --git a/.changeset/weak-dolphins-matter.md b/.changeset/weak-dolphins-matter.md new file mode 100644 index 0000000000..1470e78c06 --- /dev/null +++ b/.changeset/weak-dolphins-matter.md @@ -0,0 +1,7 @@ +--- +'@sap-ux-private/preview-middleware-client': patch +'@sap-ux/control-property-editor': patch +'@sap-ux/adp-tooling': patch +--- + +Object Page Add Custom Section quick action support diff --git a/.vscode/launch.json b/.vscode/launch.json index 62f285fe2a..b4155fa203 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -352,6 +352,23 @@ }, "cwd": "${workspaceFolder}/packages/xml-odata-annotation-converter" }, + { + "type": "node", + "request": "launch", + "name": "adp-tooling: Debug Current Jest File", + "program": "${workspaceFolder}/node_modules/jest/bin/jest.js", + "args": ["${fileBasenameNoExtension}", "--config", "jest.config.js", "--coverage=false", "--runInBand"], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true, + "windows": { + "program": "${workspaceFolder}/node_modules/jest/bin/jest" + }, + "cwd": "${workspaceFolder}/packages/adp-tooling", + "env": { + "UX_DEBUG": "false" + } + }, { "type": "node", "request": "launch", diff --git a/packages/adp-tooling/src/preview/change-handler.ts b/packages/adp-tooling/src/preview/change-handler.ts index 5b3e885b7c..842cbd5dfc 100644 --- a/packages/adp-tooling/src/preview/change-handler.ts +++ b/packages/adp-tooling/src/preview/change-handler.ts @@ -1,9 +1,36 @@ import type { Editor } from 'mem-fs-editor'; -import { TemplateFileName } from '../types'; import type { AddXMLChange, CommonChangeProperties, CodeExtChange } from '../types'; import { join } from 'path'; import { DirName } from '@sap-ux/project-access'; import type { Logger } from '@sap-ux/logger'; +import { render } from 'ejs'; +import { randomBytes } from 'crypto'; + +const OBJECT_PAGE_CUSTOM_SECTION = 'OBJECT_PAGE_CUSTOM_SECTION'; + +interface FragmentTemplateConfig { + /** + * Relative path to ../../templates/rta, includes template file name + */ + path: string; + getData: () => T; +} + +const fragmentTemplateDefinitions: Record = { + [OBJECT_PAGE_CUSTOM_SECTION]: { + path: 'common/op-custom-section.xml', + getData: () => { + const uuid = randomBytes(4).toString('hex'); + return { + ids: { + objectPageSection: `op-section-${uuid}`, + objectPageSubSection: `op-subsection-${uuid}`, + hBox: `hbox-${uuid}` + } + }; + } + } +}; /** * A mapping object that defines how to extract change content data from changes based on their type. @@ -58,10 +85,19 @@ export function isAddXMLChange(change: CommonChangeProperties): change is AddXML export function addXmlFragment(basePath: string, change: AddXMLChange, fs: Editor, logger: Logger): void { const { fragmentPath } = change.content; const fullPath = join(basePath, DirName.Changes, fragmentPath); - + const templateConfig = fragmentTemplateDefinitions[change.content?.templateName ?? '']; try { - const fragmentTemplatePath = join(__dirname, '../../templates/rta', TemplateFileName.Fragment); - fs.copy(fragmentTemplatePath, fullPath); + if (templateConfig) { + const fragmentTemplatePath = join(__dirname, '../../templates/rta', templateConfig.path); + const text = fs.read(fragmentTemplatePath); + const template = render(text, templateConfig.getData()); + fs.write(fullPath, template); + } else { + // copy default fragment template + const templateName = 'fragment.xml'; /* TemplateFileName.Fragment */ + const fragmentTemplatePath = join(__dirname, '../../templates/rta', templateName); + fs.copy(fragmentTemplatePath, fullPath); + } logger.info(`XML Fragment "${fragmentPath}" was created`); } catch (error) { logger.error(`Failed to create XML Fragment "${fragmentPath}": ${error}`); diff --git a/packages/adp-tooling/src/types.ts b/packages/adp-tooling/src/types.ts index f0e88e45df..6c2a9ef14a 100644 --- a/packages/adp-tooling/src/types.ts +++ b/packages/adp-tooling/src/types.ts @@ -180,6 +180,7 @@ export interface AddXMLChange extends CommonChangeProperties { targetAggregation: string; index: number; fragmentPath: string; + templateName?: string; }; selector: { id: string; diff --git a/packages/adp-tooling/templates/rta/common/op-custom-section.xml b/packages/adp-tooling/templates/rta/common/op-custom-section.xml new file mode 100644 index 0000000000..d9baa2b6cc --- /dev/null +++ b/packages/adp-tooling/templates/rta/common/op-custom-section.xml @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/packages/adp-tooling/test/unit/preview/change-handler.test.ts b/packages/adp-tooling/test/unit/preview/change-handler.test.ts index 579b050f9b..1950262a9b 100644 --- a/packages/adp-tooling/test/unit/preview/change-handler.test.ts +++ b/packages/adp-tooling/test/unit/preview/change-handler.test.ts @@ -1,5 +1,10 @@ +jest.mock('crypto', () => ({ + randomBytes: jest.fn() +})); + import type { Logger } from '@sap-ux/logger'; import type { Editor } from 'mem-fs-editor'; +import * as crypto from 'crypto'; import { addXmlFragment, @@ -123,7 +128,9 @@ describe('change-handler', () => { describe('addXmlFragment', () => { const mockFs = { exists: jest.fn(), - copy: jest.fn() + copy: jest.fn(), + read: jest.fn(), + write: jest.fn() }; const mockLogger = { @@ -142,6 +149,8 @@ describe('change-handler', () => { beforeEach(() => { mockFs.exists.mockClear(); mockFs.copy.mockClear(); + mockFs.read.mockClear(); + mockFs.write.mockClear(); mockLogger.info.mockClear(); mockLogger.error.mockClear(); }); @@ -167,5 +176,46 @@ describe('change-handler', () => { expect.stringContaining(`Failed to create XML Fragment "${fragmentName}.fragment.xml"`) ); }); + + describe('custom fragments', () => { + beforeEach(() => { + jest.spyOn(crypto, 'randomBytes').mockImplementation((size: number) => Buffer.from('0'.repeat(size))); + }); + it('should create Object Page custom section fragment', () => { + mockFs.exists.mockReturnValue(false); + const updatedChange = { + ...change, + content: { + ...change.content, + templateName: `OBJECT_PAGE_CUSTOM_SECTION` + } + } as unknown as AddXMLChange; + mockFs.read.mockReturnValue(` +id="<%- ids.objectPageSection %>" +id="<%- ids.objectPageSubSection %>" +id="<%- ids.hBox %>"`); + addXmlFragment(path, updatedChange, mockFs as unknown as Editor, mockLogger as unknown as Logger); + + expect(mockFs.read).toHaveBeenCalled(); + expect( + (mockFs.read.mock.calls[0][0] as string) + .replace(/\\/g, '/') + .endsWith('templates/rta/common/op-custom-section.xml') + ).toBe(true); + + expect(mockFs.write).toHaveBeenCalled(); + expect(mockFs.write.mock.calls[0][0].replace(/\\/g, '/')).toMatchInlineSnapshot( + `"project/path/changes/Share.fragment.xml"` + ); + expect(mockFs.write.mock.calls[0][1]).toMatchInlineSnapshot(` + " + id=\\"op-section-30303030\\" + id=\\"op-subsection-30303030\\" + id=\\"hbox-30303030\\"" + `); + + expect(mockLogger.info).toHaveBeenCalledWith(`XML Fragment "${fragmentName}.fragment.xml" was created`); + }); + }); }); }); diff --git a/packages/preview-middleware-client/src/adp/command-executor.ts b/packages/preview-middleware-client/src/adp/command-executor.ts index 6b8ef5c566..63812704d5 100644 --- a/packages/preview-middleware-client/src/adp/command-executor.ts +++ b/packages/preview-middleware-client/src/adp/command-executor.ts @@ -28,13 +28,13 @@ export default class CommandExecutor { * @param designMetadata Design time metadata * @param flexSettings Additional flex settings */ - public async getCommand( + public async getCommand( runtimeControl: ManagedObject, commandName: CommandNames, modifiedValue: object, designMetadata: DesignTimeMetadata, flexSettings: FlexSettings - ): Promise { + ): Promise> { try { return await CommandFactory.getCommandFor( runtimeControl, diff --git a/packages/preview-middleware-client/src/adp/controllers/AddFragment.controller.ts b/packages/preview-middleware-client/src/adp/controllers/AddFragment.controller.ts index 13618c5283..941c5c080e 100644 --- a/packages/preview-middleware-client/src/adp/controllers/AddFragment.controller.ts +++ b/packages/preview-middleware-client/src/adp/controllers/AddFragment.controller.ts @@ -20,6 +20,9 @@ import type RuntimeAuthoring from 'sap/ui/rta/RuntimeAuthoring'; import OverlayRegistry from 'sap/ui/dt/OverlayRegistry'; import type ElementOverlay from 'sap/ui/dt/ElementOverlay'; +/** sap.ui.fl */ +import {type AddFragmentChangeContentType} from 'sap/ui/fl/Change'; + import ControlUtils from '../control-utils'; import CommandExecutor from '../command-executor'; import { getFragments } from '../api-handler'; @@ -274,7 +277,7 @@ export default class AddFragment extends BaseDialog { targetAggregation: targetAggregation ?? 'content' }; - const command = await this.commandExecutor.getCommand( + const command = await this.commandExecutor.getCommand( this.runtimeControl, 'addXML', modifiedValue, @@ -282,6 +285,19 @@ export default class AddFragment extends BaseDialog { flexSettings ); + const templateName = this.getFragmentTemplateName(modifiedValue.targetAggregation); + if (templateName) { + const preparedChange = command.getPreparedChange(); + const content = preparedChange.getContent(); + preparedChange.setContent({ ...content, templateName }); + } await this.commandExecutor.pushAndExecuteCommand(command); } + + private getFragmentTemplateName(targetAggregation: string): string { + const currentControlName = this.runtimeControl.getMetadata().getName(); + return currentControlName === 'sap.uxap.ObjectPageLayout' && targetAggregation === 'sections' + ? 'OBJECT_PAGE_CUSTOM_SECTION' + : ''; + } } diff --git a/packages/preview-middleware-client/src/adp/quick-actions/common/add-controller-to-page.ts b/packages/preview-middleware-client/src/adp/quick-actions/common/add-controller-to-page.ts index 5c4fca62c5..5dd4c9770b 100644 --- a/packages/preview-middleware-client/src/adp/quick-actions/common/add-controller-to-page.ts +++ b/packages/preview-middleware-client/src/adp/quick-actions/common/add-controller-to-page.ts @@ -1,8 +1,5 @@ import OverlayRegistry from 'sap/ui/dt/OverlayRegistry'; import FlexCommand from 'sap/ui/rta/command/FlexCommand'; -import UI5Element from 'sap/ui/core/Element'; - -import { SIMPLE_QUICK_ACTION_KIND, SimpleQuickAction } from '@sap-ux-private/control-property-editor-common'; import { getUi5Version } from '../../../utils/version'; import { getAllSyncViewsIds, getControllerInfoForControl } from '../../utils'; @@ -11,28 +8,25 @@ import type { QuickActionContext, SimpleQuickActionDefinition } from '../../../cpe/quick-actions/quick-action-definition'; - import { DialogNames, handler, isControllerExtensionEnabledForControl } from '../../init-dialogs'; import { getExistingController } from '../../api-handler'; +import { SimpleQuickActionDefinitionBase } from '../simple-quick-action-base'; export const ADD_CONTROLLER_TO_PAGE_TYPE = 'add-controller-to-page'; const CONTROL_TYPES = ['sap.f.DynamicPage', 'sap.uxap.ObjectPageLayout']; - /** * Quick Action for adding controller to a page. */ -export class AddControllerToPageQuickAction implements SimpleQuickActionDefinition { - readonly kind = SIMPLE_QUICK_ACTION_KIND; - readonly type = ADD_CONTROLLER_TO_PAGE_TYPE; - public get id(): string { - return `${this.context.key}-${this.type}`; +export class AddControllerToPageQuickAction + extends SimpleQuickActionDefinitionBase + implements SimpleQuickActionDefinition +{ + constructor(context: QuickActionContext) { + super(ADD_CONTROLLER_TO_PAGE_TYPE, CONTROL_TYPES, '', context); } - isActive = false; private controllerExists = false; - private control: UI5Element | undefined; - constructor(private context: QuickActionContext) {} async initialize(): Promise { for (const control of getRelevantControlFromActivePage( @@ -44,21 +38,15 @@ export class AddControllerToPageQuickAction implements SimpleQuickActionDefiniti const syncViewsIds = await getAllSyncViewsIds(version); const controlInfo = getControllerInfoForControl(control); const data = await getExistingController(controlInfo.controllerName); - this.isActive = isControllerExtensionEnabledForControl(control, syncViewsIds, version); this.controllerExists = data?.controllerExists; - this.control = control; + const isActiveAction = isControllerExtensionEnabledForControl(control, syncViewsIds, version); + this.control = isActiveAction ? control : undefined; break; } } - getActionObject(): SimpleQuickAction { - const key = this.controllerExists ? 'QUICK_ACTION_SHOW_PAGE_CONTROLLER' : 'QUICK_ACTION_ADD_PAGE_CONTROLLER'; - return { - kind: SIMPLE_QUICK_ACTION_KIND, - id: this.id, - enabled: this.isActive, - title: this.context.resourceBundle.getText(key) - }; + protected get textKey() { + return this.controllerExists ? 'QUICK_ACTION_SHOW_PAGE_CONTROLLER' : 'QUICK_ACTION_ADD_PAGE_CONTROLLER'; } async execute(): Promise { diff --git a/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-custom-section.ts b/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-custom-section.ts new file mode 100644 index 0000000000..1f7f81e18d --- /dev/null +++ b/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-custom-section.ts @@ -0,0 +1,35 @@ +import OverlayRegistry from 'sap/ui/dt/OverlayRegistry'; +import FlexCommand from 'sap/ui/rta/command/FlexCommand'; +import ObjectPageLayout from 'sap/uxap/ObjectPageLayout'; + +import { DialogNames, handler } from '../../init-dialogs'; +import { getRelevantControlFromActivePage } from '../../../cpe/quick-actions/utils'; +import { QuickActionContext, SimpleQuickActionDefinition } from '../../../cpe/quick-actions/quick-action-definition'; +import { SimpleQuickActionDefinitionBase } from '../simple-quick-action-base'; + +export const OP_ADD_CUSTOM_SECTION = 'op-add-custom-section'; +const CONTROL_TYPES = ['sap.uxap.ObjectPageLayout']; + +/** + * Quick Action for adding a Header Field to an Object Page. + */ +export class AddCustomSectionQuickAction + extends SimpleQuickActionDefinitionBase + implements SimpleQuickActionDefinition +{ + constructor(context: QuickActionContext) { + super(OP_ADD_CUSTOM_SECTION, CONTROL_TYPES, 'QUICK_ACTION_OP_ADD_CUSTOM_SECTION', context); + } + + async execute(): Promise { + const objectPageLayout = getRelevantControlFromActivePage( + this.context.controlIndex, + this.context.view, + CONTROL_TYPES + )[0] as ObjectPageLayout; + + const overlay = OverlayRegistry.getOverlay(objectPageLayout) || []; + await handler(overlay, this.context.rta, DialogNames.ADD_FRAGMENT, undefined, 'sections'); + return []; + } +} diff --git a/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-header-field.ts b/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-header-field.ts index 93dbbfbd8d..2e252989cb 100644 --- a/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-header-field.ts +++ b/packages/preview-middleware-client/src/adp/quick-actions/common/op-add-header-field.ts @@ -1,52 +1,23 @@ import OverlayRegistry from 'sap/ui/dt/OverlayRegistry'; import FlexCommand from 'sap/ui/rta/command/FlexCommand'; -import UI5Element from 'sap/ui/core/Element'; import ObjectPageLayout from 'sap/uxap/ObjectPageLayout'; import FlexBox from 'sap/m/FlexBox'; -import { SIMPLE_QUICK_ACTION_KIND, SimpleQuickAction } from '@sap-ux-private/control-property-editor-common'; - import { DialogNames, handler } from '../../../adp/init-dialogs'; - import { getRelevantControlFromActivePage } from '../../../cpe/quick-actions/utils'; import { QuickActionContext, SimpleQuickActionDefinition } from '../../../cpe/quick-actions/quick-action-definition'; import { isA } from '../../../utils/core'; +import { SimpleQuickActionDefinitionBase } from '../simple-quick-action-base'; + export const OP_ADD_HEADER_FIELD_TYPE = 'op-add-header-field'; const CONTROL_TYPES = ['sap.uxap.ObjectPageLayout']; /** * Quick Action for adding a Header Field to an Object Page. */ -export class AddHeaderFieldQuickAction implements SimpleQuickActionDefinition { - readonly kind = SIMPLE_QUICK_ACTION_KIND; - readonly type = OP_ADD_HEADER_FIELD_TYPE; - public get id(): string { - return `${this.context.key}-${this.type}`; - } - - isActive = false; - private control: UI5Element | undefined; - constructor(private context: QuickActionContext) {} - - initialize(): void { - for (const control of getRelevantControlFromActivePage( - this.context.controlIndex, - this.context.view, - CONTROL_TYPES - )) { - this.isActive = true; - this.control = control; - break; - } - } - - getActionObject(): SimpleQuickAction { - return { - kind: SIMPLE_QUICK_ACTION_KIND, - id: this.id, - enabled: this.isActive, - title: this.context.resourceBundle.getText('QUICK_ACTION_OP_ADD_HEADER_FIELD') - }; +export class AddHeaderFieldQuickAction extends SimpleQuickActionDefinitionBase implements SimpleQuickActionDefinition { + constructor(context: QuickActionContext) { + super(OP_ADD_HEADER_FIELD_TYPE, CONTROL_TYPES, 'QUICK_ACTION_OP_ADD_HEADER_FIELD', context); } async execute(): Promise { diff --git a/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.ts b/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.ts index 1a25a19e6f..e5ffcdcbf9 100644 --- a/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.ts +++ b/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.ts @@ -2,36 +2,27 @@ import FlexCommand from 'sap/ui/rta/command/FlexCommand'; import CommandFactory from 'sap/ui/rta/command/CommandFactory'; import type FilterBar from 'sap/ui/comp/filterbar/FilterBar'; -import { SIMPLE_QUICK_ACTION_KIND, SimpleQuickAction } from '@sap-ux-private/control-property-editor-common'; - import { QuickActionContext, SimpleQuickActionDefinition } from '../../../cpe/quick-actions/quick-action-definition'; - import { pageHasControlId } from '../../../cpe/quick-actions/utils'; import { getControlById } from '../../../utils/core'; +import { SimpleQuickActionDefinitionBase } from '../simple-quick-action-base'; export const ENABLE_CLEAR_FILTER_BAR_TYPE = 'enable-clear-filter-bar'; const PROPERTY_NAME = 'showClearOnFB'; - const CONTROL_TYPE = 'sap.ui.comp.smartfilterbar.SmartFilterBar'; /** * Quick Action for toggling the visibility of "clear filter bar" button in List Report page. */ -export class ToggleClearFilterBarQuickAction implements SimpleQuickActionDefinition { - readonly kind = SIMPLE_QUICK_ACTION_KIND; - readonly type = ENABLE_CLEAR_FILTER_BAR_TYPE; - - public get id(): string { - return `${this.context.key}-${this.type}`; - } - - public get isActive(): boolean { - return !!this.filterBar; +export class ToggleClearFilterBarQuickAction + extends SimpleQuickActionDefinitionBase + implements SimpleQuickActionDefinition +{ + constructor(context: QuickActionContext) { + super(ENABLE_CLEAR_FILTER_BAR_TYPE, [], '', context); } private isClearButtonEnabled = false; - private filterBar: FilterBar | undefined; - constructor(private context: QuickActionContext) {} initialize(): void { const controls = this.context.controlIndex[CONTROL_TYPE] ?? []; @@ -40,25 +31,19 @@ export class ToggleClearFilterBarQuickAction implements SimpleQuickActionDefinit const modifiedControl = getControlById(control.controlId); if (isActionApplicable && modifiedControl) { this.isClearButtonEnabled = modifiedControl.getShowClearOnFB(); - this.filterBar = modifiedControl; + this.control = modifiedControl; } } } - getActionObject(): SimpleQuickAction { - const key = this.isClearButtonEnabled + protected get textKey() { + return this.isClearButtonEnabled ? 'V2_QUICK_ACTION_LR_DISABLE_CLEAR_FILTER_BAR' : 'V2_QUICK_ACTION_LR_ENABLE_CLEAR_FILTER_BAR'; - return { - kind: SIMPLE_QUICK_ACTION_KIND, - id: this.id, - enabled: this.isActive, - title: this.context.resourceBundle.getText(key) - }; } async execute(): Promise { - if (this.filterBar) { + if (this.control) { const { flexSettings } = this.context; const modifiedValue = { @@ -68,7 +53,7 @@ export class ToggleClearFilterBarQuickAction implements SimpleQuickActionDefinit }; const command = await CommandFactory.getCommandFor( - this.filterBar, + this.control, 'Property', modifiedValue, null, diff --git a/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/registry.ts b/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/registry.ts index 76c1dfb40a..09f5855014 100644 --- a/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/registry.ts +++ b/packages/preview-middleware-client/src/adp/quick-actions/fe-v2/registry.ts @@ -13,6 +13,7 @@ import { AddControllerToPageQuickAction } from '../common/add-controller-to-page import { ToggleClearFilterBarQuickAction } from './lr-toggle-clear-filter-bar'; import { ChangeTableColumnsQuickAction } from './change-table-columns'; import { AddHeaderFieldQuickAction } from '../common/op-add-header-field'; +import { AddCustomSectionQuickAction } from '../common/op-add-custom-section'; type PageName = 'listReport' | 'objectPage'; @@ -50,7 +51,8 @@ export default class FEV2QuickActionRegistry extends QuickActionDefinitionRegist definitions: [ AddControllerToPageQuickAction, ChangeTableColumnsQuickAction, - AddHeaderFieldQuickAction + AddHeaderFieldQuickAction, + AddCustomSectionQuickAction ], view, key: name + index diff --git a/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.ts b/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.ts index b609d4cd64..03b2588d7d 100644 --- a/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.ts +++ b/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.ts @@ -2,12 +2,11 @@ import FlexCommand from 'sap/ui/rta/command/FlexCommand'; import CommandFactory from 'sap/ui/rta/command/CommandFactory'; import FilterBar from 'sap/ui/mdc/FilterBar'; -import { SIMPLE_QUICK_ACTION_KIND, SimpleQuickAction } from '@sap-ux-private/control-property-editor-common'; - import { QuickActionContext, SimpleQuickActionDefinition } from '../../../cpe/quick-actions/quick-action-definition'; import { pageHasControlId } from '../../../cpe/quick-actions/utils'; import { getControlById } from '../../../utils/core'; import { getAppComponent, getPageName, getReference } from './utils'; +import { SimpleQuickActionDefinitionBase } from '../simple-quick-action-base'; export const ENABLE_CLEAR_FILTER_BAR_TYPE = 'enable-clear-filter-bar'; const PROPERTY_PATH = 'controlConfiguration/@com.sap.vocabularies.UI.v1.SelectionFields/showClearButton'; @@ -16,16 +15,15 @@ const CONTROL_TYPE = 'sap.fe.macros.controls.FilterBar'; /** * Quick Action for toggling the visibility of "clear filter bar" button in List Report page. */ -export class ToggleClearFilterBarQuickAction implements SimpleQuickActionDefinition { - readonly kind = SIMPLE_QUICK_ACTION_KIND; - readonly type = ENABLE_CLEAR_FILTER_BAR_TYPE; - readonly forceRefreshAfterExecution = true; - public get id(): string { - return `${this.context.key}-${this.type}`; +export class ToggleClearFilterBarQuickAction + extends SimpleQuickActionDefinitionBase + implements SimpleQuickActionDefinition +{ + constructor(context: QuickActionContext) { + super(ENABLE_CLEAR_FILTER_BAR_TYPE, [], '', context); } - isActive = false; + readonly forceRefreshAfterExecution = true; private isClearButtonEnabled = false; - constructor(private context: QuickActionContext) {} initialize(): void { const controls = this.context.controlIndex[CONTROL_TYPE] ?? []; @@ -33,22 +31,16 @@ export class ToggleClearFilterBarQuickAction implements SimpleQuickActionDefinit const isActionApplicable = pageHasControlId(this.context.view, control.controlId); const filterBar = getControlById(control.controlId); if (isActionApplicable && filterBar) { - this.isActive = true; + this.control = filterBar; this.isClearButtonEnabled = filterBar.getShowClearButton(); } } } - getActionObject(): SimpleQuickAction { - const key = this.isClearButtonEnabled + protected get textKey() { + return this.isClearButtonEnabled ? 'V4_QUICK_ACTION_LR_DISABLE_CLEAR_FILTER_BAR' : 'V4_QUICK_ACTION_LR_ENABLE_CLEAR_FILTER_BAR'; - return { - kind: SIMPLE_QUICK_ACTION_KIND, - id: this.id, - enabled: this.isActive, - title: this.context.resourceBundle.getText(key) - }; } async execute(): Promise { diff --git a/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/registry.ts b/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/registry.ts index 622afb10cf..2ea3aba109 100644 --- a/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/registry.ts +++ b/packages/preview-middleware-client/src/adp/quick-actions/fe-v4/registry.ts @@ -8,6 +8,7 @@ import { AddControllerToPageQuickAction } from '../common/add-controller-to-page import { ToggleClearFilterBarQuickAction } from './lr-toggle-clear-filter-bar'; import { ChangeTableColumnsQuickAction } from './change-table-columns'; import { AddHeaderFieldQuickAction } from '../common/op-add-header-field'; +import { AddCustomSectionQuickAction } from '../common/op-add-custom-section'; type PageName = 'listReport' | 'objectPage'; @@ -46,7 +47,8 @@ export default class FEV4QuickActionRegistry extends QuickActionDefinitionRegist definitions: [ AddControllerToPageQuickAction, ChangeTableColumnsQuickAction, - AddHeaderFieldQuickAction + AddHeaderFieldQuickAction, + AddCustomSectionQuickAction ], view, key: name + index diff --git a/packages/preview-middleware-client/src/adp/quick-actions/simple-quick-action-base.ts b/packages/preview-middleware-client/src/adp/quick-actions/simple-quick-action-base.ts new file mode 100644 index 0000000000..de713e805a --- /dev/null +++ b/packages/preview-middleware-client/src/adp/quick-actions/simple-quick-action-base.ts @@ -0,0 +1,53 @@ +import UI5Element from 'sap/ui/core/Element'; + +import { SIMPLE_QUICK_ACTION_KIND, SimpleQuickAction } from '@sap-ux-private/control-property-editor-common'; + +import { getRelevantControlFromActivePage } from '../../cpe/quick-actions/utils'; +import { QuickActionContext } from '../../cpe/quick-actions/quick-action-definition'; + +/** + * Base class for all simple quick actions. + */ +export abstract class SimpleQuickActionDefinitionBase { + readonly kind = SIMPLE_QUICK_ACTION_KIND; + public get id(): string { + return `${this.context.key}-${this.type}`; + } + + public get isActive(): boolean { + return this.control !== undefined; + } + + protected get textKey(): string { + return this.defaultTextKey; + } + + protected control: UI5Element | undefined; + + constructor( + public readonly type: string, + protected readonly controlTypes: string[], + protected readonly defaultTextKey: string, + protected readonly context: QuickActionContext + ) {} + + initialize(): void { + for (const control of getRelevantControlFromActivePage( + this.context.controlIndex, + this.context.view, + this.controlTypes + )) { + this.control = control; + break; + } + } + + getActionObject(): SimpleQuickAction { + return { + kind: SIMPLE_QUICK_ACTION_KIND, + id: this.id, + enabled: this.isActive, + title: this.context.resourceBundle.getText(this.textKey) + }; + } +} diff --git a/packages/preview-middleware-client/src/messagebundle.properties b/packages/preview-middleware-client/src/messagebundle.properties index 548462d7c9..437da4b560 100644 --- a/packages/preview-middleware-client/src/messagebundle.properties +++ b/packages/preview-middleware-client/src/messagebundle.properties @@ -1,6 +1,7 @@ QUICK_ACTION_ADD_PAGE_CONTROLLER=Add Controller to Page QUICK_ACTION_SHOW_PAGE_CONTROLLER=Show Page Controller QUICK_ACTION_OP_ADD_HEADER_FIELD=Add Header Field +QUICK_ACTION_OP_ADD_CUSTOM_SECTION=Add Custom Section V2_QUICK_ACTION_CHANGE_TABLE_COLUMNS=Change Table Columns diff --git a/packages/preview-middleware-client/test/unit/adp/controllers/AddFragment.controller.test.ts b/packages/preview-middleware-client/test/unit/adp/controllers/AddFragment.controller.test.ts index cf8863171d..254f828cd8 100644 --- a/packages/preview-middleware-client/test/unit/adp/controllers/AddFragment.controller.test.ts +++ b/packages/preview-middleware-client/test/unit/adp/controllers/AddFragment.controller.test.ts @@ -14,6 +14,8 @@ import RuntimeAuthoringMock from 'mock/sap/ui/rta/RuntimeAuthoring'; import { ValueState } from 'mock/sap/ui/core/library'; import OverlayRegistry from 'mock/sap/ui/dt/OverlayRegistry'; import type ManagedObject from 'sap/ui/base/ManagedObject'; +import Core from 'sap/ui/core/Core'; +import { type AddFragmentChangeContentType } from 'sap/ui/fl/Change'; describe('AddFragment', () => { beforeAll(() => { @@ -505,7 +507,8 @@ describe('AddFragment', () => { jest.restoreAllMocks(); }); const testModel = { - getProperty: jest.fn().mockReturnValueOnce('Share').mockReturnValueOnce('0').mockReturnValueOnce('content') + getProperty: jest.fn().mockReturnValueOnce('Share').mockReturnValueOnce('0').mockReturnValueOnce('content'), + setProperty: jest.fn() } as unknown as JSONModel; const rtaMock = new RuntimeAuthoringMock({} as RTAOptions); @@ -517,9 +520,22 @@ describe('AddFragment', () => { }); rtaMock.getFlexSettings.mockReturnValue({ projectId: 'adp.app' }); + const overlays = { + getId: jest.fn().mockReturnValue('some-id') + }; + + sapCoreMock.byId.mockReturnValue({}); + jest.spyOn(ControlUtils, 'getRuntimeControl').mockReturnValue({ + getMetadata: jest.fn().mockReturnValue({ + getAllAggregations: jest.fn().mockReturnValue({}), + getName: jest.fn().mockReturnValue('sap.uxap.ObjectPageLayout'), + getDefaultAggregationName: jest.fn().mockReturnValue('content') + }) + } as unknown as ManagedObject); + const addFragment = new AddFragment( 'adp.extension.controllers.AddFragment', - {} as unknown as UI5Element, + overlays as unknown as UI5Element, rtaMock as unknown as RuntimeAuthoring ); @@ -551,6 +567,14 @@ describe('AddFragment', () => { addFragment.handleDialogClose = jest.fn(); + await addFragment.setup({ + setEscapeHandler: jest.fn(), + destroy: jest.fn(), + setModel: jest.fn(), + open: jest.fn(), + close: jest.fn() + } as unknown as Dialog); + await addFragment.onCreateBtnPress(event as unknown as Event); expect(executeSpy).toHaveBeenCalledWith({ @@ -561,6 +585,111 @@ describe('AddFragment', () => { setModuleName: expect.any(Function) } }); + expect(CommandFactory.getCommandFor.mock.calls[0][4].selector).toBeUndefined(); + }); + + test('creates new custom section fragment and a change', async () => { + sapMock.ui.version = '1.71.62'; + const executeSpy = jest.fn(); + rtaMock.getCommandStack.mockReturnValue({ + pushAndExecute: executeSpy + }); + rtaMock.getFlexSettings.mockReturnValue({ projectId: 'adp.app' }); + + const overlays = { + getId: jest.fn().mockReturnValue('some-id') + }; + + const addFragment = new AddFragment( + 'adp.extension.controllers.AddFragment', + overlays as unknown as UI5Element, + rtaMock as unknown as RuntimeAuthoring, + 'sections' + ); + + const event = { + getSource: jest.fn().mockReturnValue({ + setEnabled: jest.fn() + }) + }; + + const testModel = { + getProperty: jest + .fn() + .mockReturnValueOnce('Share') + .mockReturnValueOnce('0') + .mockReturnValueOnce('sections'), + setProperty: jest.fn() + } as unknown as JSONModel; + addFragment.model = testModel; + + const dummyContent: AddFragmentChangeContentType = { + fragmentPath: 'dummyPath', + index: 1, + targetAggregation: 'sections' + }; + + const setContentSpy = jest.fn(); + const commandForSpy = jest.fn().mockReturnValue({ + _oPreparedChange: { + _oDefinition: { moduleName: 'adp/app/changes/fragments/Share.fragment.xml' }, + setModuleName: jest.fn() + }, + getPreparedChange: jest.fn().mockReturnValue({ + getContent: jest.fn().mockReturnValue(dummyContent), + setContent: setContentSpy + }) + }); + CommandFactory.getCommandFor = commandForSpy; + + fetchMock.mockResolvedValue({ + json: jest.fn().mockReturnValue({ + id: 'id', + reference: 'reference', + namespace: 'namespace', + layer: 'layer' + }), + text: jest.fn().mockReturnValue('XML Fragment was created!'), + ok: true + }); + + jest.spyOn(sap.ui, 'getCore').mockReturnValue({ + byId: jest.fn().mockReturnValue({}) + } as unknown as Core); + + jest.spyOn(ControlUtils, 'getRuntimeControl').mockReturnValue({ + getMetadata: jest.fn().mockReturnValue({ + getAllAggregations: jest.fn().mockReturnValue({}), + getName: jest.fn().mockReturnValue('sap.uxap.ObjectPageLayout') + }) + } as unknown as ManagedObject); + + addFragment.handleDialogClose = jest.fn(); + + await addFragment.setup({ + setEscapeHandler: jest.fn(), + destroy: jest.fn(), + setModel: jest.fn(), + open: jest.fn(), + close: jest.fn() + } as unknown as Dialog); + + await addFragment.onCreateBtnPress(event as unknown as Event); + + expect(executeSpy).toHaveBeenCalledWith({ + _oPreparedChange: { + _oDefinition: { + moduleName: 'adp/app/changes/fragments/Share.fragment.xml' + }, + setModuleName: expect.any(Function) + }, + getPreparedChange: expect.any(Function) + }); + + expect(setContentSpy).toHaveBeenCalledWith({ + ...dummyContent, + templateName: 'OBJECT_PAGE_CUSTOM_SECTION' + }); }); }); }); diff --git a/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v2.test.ts b/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v2.test.ts index 59bf43fc59..aa54c12514 100644 --- a/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v2.test.ts +++ b/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v2.test.ts @@ -10,6 +10,7 @@ jest.mock('../../../../src/adp/init-dialogs', () => { handler: jest.fn() }; }); + import { QuickActionService } from '../../../../src/cpe/quick-actions/quick-action-service'; import { OutlineService } from '../../../../src/cpe/outline/service'; @@ -17,7 +18,7 @@ import FEV2QuickActionRegistry from '../../../../src/adp/quick-actions/fe-v2/reg import { sapCoreMock } from 'mock/window'; import NavContainer from 'mock/sap/m/NavContainer'; import XMLView from 'mock/sap/ui/core/mvc/XMLView'; -import ComponentContainer from 'mock/sap/ui/core/ComponentContainer'; +import ComponentContainer from 'sap/ui/core/ComponentContainer'; import UIComponentMock from 'mock/sap/ui/core/UIComponent'; import Component from 'mock/sap/ui/core/Component'; import CommandFactory from 'mock/sap/ui/rta/command/CommandFactory'; @@ -409,7 +410,7 @@ describe('FE V2 quick actions', () => { getDomRef: () => ({}), getParent: () => pageView, getHeaderContent: () => { - return [new FlexBox()] + return [new FlexBox()]; } }; } @@ -482,6 +483,12 @@ describe('FE V2 quick actions', () => { id: 'objectPage0-op-add-header-field', title: 'Add Header Field', enabled: true + }, + { + kind: 'simple', + id: 'objectPage0-op-add-custom-section', + title: 'Add Custom Section', + enabled: true } ] } @@ -498,5 +505,137 @@ describe('FE V2 quick actions', () => { expect(handler).toHaveBeenCalledWith(mockOverlay, rtaMock, 'AddFragment', undefined, 'items'); }); }); + describe('add custom section', () => { + test('initialize and execute action', async () => { + const pageView = new XMLView(); + FlexUtils.getViewForControl.mockImplementation(() => { + return { + getId: () => 'MyView', + getController: () => { + return { + getMetadata: () => { + return { + getName: () => 'MyController' + }; + } + }; + } + }; + }); + fetchMock.mockResolvedValue({ + json: jest + .fn() + .mockReturnValueOnce({ + controllerExists: false, + controllerPath: '', + controllerPathFromRoot: '', + isRunningInBAS: false + }) + .mockReturnValueOnce({ controllers: [] }), + text: jest.fn(), + ok: true + }); + + sapCoreMock.byId.mockImplementation((id) => { + if (id == 'ObjectPageLayout') { + return { + getDomRef: () => ({}), + getParent: () => pageView, + getHeaderContent: () => { + return [new FlexBox()]; + } + }; + } + if (id == 'NavContainer') { + const container = new NavContainer(); + const component = new UIComponentMock(); + const view = new XMLView(); + pageView.getDomRef.mockImplementation(() => { + return { + contains: () => true + }; + }); + pageView.getViewName.mockImplementation( + () => 'sap.suite.ui.generic.template.ObjectPage.view.Details' + ); + const componentContainer = new ComponentContainer(); + const spy = jest.spyOn(componentContainer, 'getComponent'); + spy.mockImplementation(() => { + return 'component-id'; + }); + jest.spyOn(Component, 'getComponentById').mockImplementation((id: string | undefined) => { + if (id === 'component-id') { + return component; + } + }); + view.getContent.mockImplementation(() => { + return [componentContainer]; + }); + container.getCurrentPage.mockImplementation(() => { + return view; + }); + component.getRootControl.mockImplementation(() => { + return pageView; + }); + return container; + } + }); + + const rtaMock = new RuntimeAuthoringMock({} as RTAOptions) as unknown as RuntimeAuthoring; + const registry = new FEV2QuickActionRegistry(); + const service = new QuickActionService(rtaMock, new OutlineService(rtaMock), [registry]); + await service.init(sendActionMock, subscribeMock); + + await service.reloadQuickActions({ + 'sap.uxap.ObjectPageLayout': [ + { + controlId: 'ObjectPageLayout' + } as any + ], + 'sap.m.NavContainer': [ + { + controlId: 'NavContainer' + } as any + ] + }); + + expect(sendActionMock).toHaveBeenCalledWith( + quickActionListChanged([ + { + title: 'OBJECT PAGE', + actions: [ + { + kind: 'simple', + id: 'objectPage0-add-controller-to-page', + enabled: true, + title: 'Add Controller to Page' + }, + { + kind: 'simple', + id: 'objectPage0-op-add-header-field', + title: 'Add Header Field', + enabled: true + }, + { + kind: 'simple', + id: 'objectPage0-op-add-custom-section', + title: 'Add Custom Section', + enabled: true + } + ] + } + ]) + ); + + await subscribeMock.mock.calls[0][0]( + executeQuickAction({ id: 'objectPage0-op-add-custom-section', kind: 'simple' }) + ); + const { handler } = jest.requireMock<{ handler: () => Promise }>( + '../../../../src/adp/init-dialogs' + ); + + expect(handler).toHaveBeenCalledWith(mockOverlay, rtaMock, 'AddFragment', undefined, 'sections'); + }); + }); }); }); diff --git a/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v4.test.ts b/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v4.test.ts index b4c07040f1..df5fc10b6a 100644 --- a/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v4.test.ts +++ b/packages/preview-middleware-client/test/unit/adp/quick-actions/fe-v4.test.ts @@ -427,7 +427,7 @@ describe('FE V2 quick actions', () => { getDomRef: () => ({}), getParent: () => pageView, getHeaderContent: () => { - return [new FlexBox()] + return [new FlexBox()]; } }; } @@ -459,12 +459,12 @@ describe('FE V2 quick actions', () => { return container; } }); - + const rtaMock = new RuntimeAuthoringMock({} as RTAOptions) as unknown as RuntimeAuthoring; const registry = new FEV4QuickActionRegistry(); const service = new QuickActionService(rtaMock, new OutlineService(rtaMock), [registry]); await service.init(sendActionMock, subscribeMock); - + await service.reloadQuickActions({ 'sap.uxap.ObjectPageLayout': [ { @@ -477,7 +477,7 @@ describe('FE V2 quick actions', () => { } as any ] }); - + expect(sendActionMock).toHaveBeenCalledWith( quickActionListChanged([ { @@ -494,19 +494,25 @@ describe('FE V2 quick actions', () => { id: 'objectPage0-op-add-header-field', title: 'Add Header Field', enabled: true + }, + { + enabled: true, + id: 'objectPage0-op-add-custom-section', + kind: 'simple', + title: 'Add Custom Section' } ] } ]) ); - + await subscribeMock.mock.calls[0][0]( executeQuickAction({ id: 'objectPage0-op-add-header-field', kind: 'simple' }) ); const { handler } = jest.requireMock<{ handler: () => Promise }>( '../../../../src/adp/init-dialogs' ); - + expect(handler).toHaveBeenCalledWith(mockOverlay, rtaMock, 'AddFragment', undefined, 'items'); }); }); diff --git a/packages/preview-middleware-client/types/sap.ui.fl.d.ts b/packages/preview-middleware-client/types/sap.ui.fl.d.ts index 6a7b959071..d414c87af4 100644 --- a/packages/preview-middleware-client/types/sap.ui.fl.d.ts +++ b/packages/preview-middleware-client/types/sap.ui.fl.d.ts @@ -21,8 +21,17 @@ declare module 'sap/ui/fl/Change' { }; fileName: string; } - interface Change { + export interface AddFragmentChangeContentType { + fragmentPath: string; + index: number; + targetAggregation: string; + templateName?: string; + } + + interface Change { getDefinition: () => ChangeDefinition; + getContent: () => ContentType; + setContent: (newContent: ContentType) => void; } export default Change; diff --git a/packages/preview-middleware-client/types/sap.ui.rta.d.ts b/packages/preview-middleware-client/types/sap.ui.rta.d.ts index f4119c5c61..3f540d675e 100644 --- a/packages/preview-middleware-client/types/sap.ui.rta.d.ts +++ b/packages/preview-middleware-client/types/sap.ui.rta.d.ts @@ -43,14 +43,14 @@ declare module 'sap/ui/rta/command/FlexCommand' { import type BaseCommand from 'sap/ui/rta/command/BaseCommand'; import type Change from 'sap/ui/fl/Change'; - interface FlexCommand extends Omit { + interface FlexCommand extends Omit { _oPreparedChange?: { _oDefinition: { moduleName: string; }; setModuleName(moduleName: string): void; }; - getPreparedChange(): Change; + getPreparedChange(): Change; getCommands(): FlexCommand[]; } From af996a9fb1f21e210969acc51f6a243c3751e8d8 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 17 Sep 2024 10:23:36 +0000 Subject: [PATCH 2/9] chore: apply latest changesets --- .changeset/weak-dolphins-matter.md | 7 ------- packages/adp-tooling/CHANGELOG.md | 6 ++++++ packages/adp-tooling/package.json | 2 +- packages/control-property-editor/CHANGELOG.md | 6 ++++++ packages/control-property-editor/package.json | 2 +- packages/create/CHANGELOG.md | 8 ++++++++ packages/create/package.json | 2 +- packages/preview-middleware-client/CHANGELOG.md | 6 ++++++ packages/preview-middleware-client/package.json | 2 +- packages/preview-middleware/CHANGELOG.md | 7 +++++++ packages/preview-middleware/package.json | 2 +- 11 files changed, 38 insertions(+), 12 deletions(-) delete mode 100644 .changeset/weak-dolphins-matter.md diff --git a/.changeset/weak-dolphins-matter.md b/.changeset/weak-dolphins-matter.md deleted file mode 100644 index 1470e78c06..0000000000 --- a/.changeset/weak-dolphins-matter.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@sap-ux-private/preview-middleware-client': patch -'@sap-ux/control-property-editor': patch -'@sap-ux/adp-tooling': patch ---- - -Object Page Add Custom Section quick action support diff --git a/packages/adp-tooling/CHANGELOG.md b/packages/adp-tooling/CHANGELOG.md index 46a362e040..da586e204d 100644 --- a/packages/adp-tooling/CHANGELOG.md +++ b/packages/adp-tooling/CHANGELOG.md @@ -1,5 +1,11 @@ # @sap-ux/adp-tooling +## 0.12.48 + +### Patch Changes + +- 2fd82b1: Object Page Add Custom Section quick action support + ## 0.12.47 ### Patch Changes diff --git a/packages/adp-tooling/package.json b/packages/adp-tooling/package.json index f45220388f..7ea04368ec 100644 --- a/packages/adp-tooling/package.json +++ b/packages/adp-tooling/package.json @@ -9,7 +9,7 @@ "bugs": { "url": "https://github.com/SAP/open-ux-tools/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Aadp-tooling" }, - "version": "0.12.47", + "version": "0.12.48", "license": "Apache-2.0", "author": "@SAP/ux-tools-team", "main": "dist/index.js", diff --git a/packages/control-property-editor/CHANGELOG.md b/packages/control-property-editor/CHANGELOG.md index 052af3f14f..08015a49f5 100644 --- a/packages/control-property-editor/CHANGELOG.md +++ b/packages/control-property-editor/CHANGELOG.md @@ -1,5 +1,11 @@ # @sap-ux/control-property-editor +## 0.5.3 + +### Patch Changes + +- 2fd82b1: Object Page Add Custom Section quick action support + ## 0.5.2 ### Patch Changes diff --git a/packages/control-property-editor/package.json b/packages/control-property-editor/package.json index 98d7860dca..2273bb2f55 100644 --- a/packages/control-property-editor/package.json +++ b/packages/control-property-editor/package.json @@ -3,7 +3,7 @@ "displayName": "Control Property Editor", "description": "Control Property Editor", "license": "Apache-2.0", - "version": "0.5.2", + "version": "0.5.3", "main": "dist/app.js", "repository": { "type": "git", diff --git a/packages/create/CHANGELOG.md b/packages/create/CHANGELOG.md index e483da0c92..6ce3534879 100644 --- a/packages/create/CHANGELOG.md +++ b/packages/create/CHANGELOG.md @@ -1,5 +1,13 @@ # @sap-ux/create +## 0.8.16 + +### Patch Changes + +- Updated dependencies [2fd82b1] + - @sap-ux/adp-tooling@0.12.48 + - @sap-ux/preview-middleware@0.16.65 + ## 0.8.15 ### Patch Changes diff --git a/packages/create/package.json b/packages/create/package.json index 21cc03d5c2..448010bfdd 100644 --- a/packages/create/package.json +++ b/packages/create/package.json @@ -1,7 +1,7 @@ { "name": "@sap-ux/create", "description": "SAP Fiori tools module to add or remove features", - "version": "0.8.15", + "version": "0.8.16", "repository": { "type": "git", "url": "https://github.com/SAP/open-ux-tools.git", diff --git a/packages/preview-middleware-client/CHANGELOG.md b/packages/preview-middleware-client/CHANGELOG.md index 50fddfd5d8..e9b4f2430f 100644 --- a/packages/preview-middleware-client/CHANGELOG.md +++ b/packages/preview-middleware-client/CHANGELOG.md @@ -1,5 +1,11 @@ # @sap-ux-private/preview-middleware-client +## 0.11.4 + +### Patch Changes + +- 2fd82b1: Object Page Add Custom Section quick action support + ## 0.11.3 ### Patch Changes diff --git a/packages/preview-middleware-client/package.json b/packages/preview-middleware-client/package.json index 1b1d1eab14..2e27499630 100644 --- a/packages/preview-middleware-client/package.json +++ b/packages/preview-middleware-client/package.json @@ -1,6 +1,6 @@ { "name": "@sap-ux-private/preview-middleware-client", - "version": "0.11.3", + "version": "0.11.4", "description": "Client-side coding hosted by the preview middleware", "repository": { "type": "git", diff --git a/packages/preview-middleware/CHANGELOG.md b/packages/preview-middleware/CHANGELOG.md index de605be167..c3e3c94f64 100644 --- a/packages/preview-middleware/CHANGELOG.md +++ b/packages/preview-middleware/CHANGELOG.md @@ -1,5 +1,12 @@ # @sap-ux/preview-middleware +## 0.16.65 + +### Patch Changes + +- Updated dependencies [2fd82b1] + - @sap-ux/adp-tooling@0.12.48 + ## 0.16.64 ### Patch Changes diff --git a/packages/preview-middleware/package.json b/packages/preview-middleware/package.json index 2394fcd6f8..fff8836ea5 100644 --- a/packages/preview-middleware/package.json +++ b/packages/preview-middleware/package.json @@ -9,7 +9,7 @@ "bugs": { "url": "https://github.com/SAP/open-ux-tools/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Apreview-middleware" }, - "version": "0.16.64", + "version": "0.16.65", "license": "Apache-2.0", "author": "@SAP/ux-tools-team", "main": "dist/index.js", From 327ebecec60ffccfb2a105005e771555f878a617 Mon Sep 17 00:00:00 2001 From: AlinaGovoruhina <125539086+AlinaGovoruhina@users.noreply.github.com> Date: Tue, 17 Sep 2024 13:55:31 +0300 Subject: [PATCH 3/9] feat(fe-fpm-writer): prompts: add building block questions into groups (#2364) * feat: divide prompt questions in groups * test: update snapshots * fix: custom chart example story * chore: add changeset * fix: export manifest group * refactor: rename group ids * fix: update label and placeholders --- .changeset/flat-cameras-juggle.md | 7 + examples/prompting-ui/src/Custom.story.tsx | 14 +- .../prompts/questions/building-blocks.ts | 17 +- .../building-block/prompts/questions/chart.ts | 53 +++- .../prompts/questions/filter-bar.ts | 47 +++- .../building-block/prompts/questions/table.ts | 26 +- .../src/prompts/translations/i18n.en.json | 62 +++-- .../__snapshots__/prompts.test.ts.snap | 240 +++++++++++++++--- 8 files changed, 375 insertions(+), 91 deletions(-) create mode 100644 .changeset/flat-cameras-juggle.md diff --git a/.changeset/flat-cameras-juggle.md b/.changeset/flat-cameras-juggle.md new file mode 100644 index 0000000000..2e08a04506 --- /dev/null +++ b/.changeset/flat-cameras-juggle.md @@ -0,0 +1,7 @@ +--- +'@sap-ux/fe-fpm-writer': minor +'@sap-ux/prompting-ui': minor +--- + +Divide chart, filter bar and table building block prompts questions into groups, add Manifest Change group. +Update custom chart example in prompting-ui. diff --git a/examples/prompting-ui/src/Custom.story.tsx b/examples/prompting-ui/src/Custom.story.tsx index 4f863dc74e..46f7b3cf5f 100644 --- a/examples/prompting-ui/src/Custom.story.tsx +++ b/examples/prompting-ui/src/Custom.story.tsx @@ -9,13 +9,13 @@ export const CustomChart = (): JSX.Element => { ); diff --git a/packages/fe-fpm-writer/src/building-block/prompts/questions/building-blocks.ts b/packages/fe-fpm-writer/src/building-block/prompts/questions/building-blocks.ts index 9ba5c558f6..2900ed4039 100644 --- a/packages/fe-fpm-writer/src/building-block/prompts/questions/building-blocks.ts +++ b/packages/fe-fpm-writer/src/building-block/prompts/questions/building-blocks.ts @@ -1,11 +1,26 @@ import { i18nNamespaces, translate } from '../../../i18n'; import { BuildingBlockType } from '../../types'; -import type { Answers, Prompts, PromptsType } from '../../../prompts/types'; +import type { Answers, Prompts, PromptsGroup, PromptsType } from '../../../prompts/types'; +import type { TFunction } from 'i18next'; export interface BuildingBlockTypePromptsAnswer extends Answers { buildingBlockType: PromptsType; } +/** + * Returns the manifest prompts group, the same for all available building blocks. + * + * @returns The manifest prompts group. + */ +export const getManifestPromptsGroup = (): PromptsGroup => { + const t: TFunction = translate(i18nNamespaces.buildingBlock, 'prompts.super.manifestGroup.'); + return { + id: 'manifestLibraries', + title: t('manifestLibrariesTitle'), + description: t('manifestLibrariesDescription', { returnObjects: true }) + }; +}; + /** * Returns a list of prompts required to generate building blocks. * diff --git a/packages/fe-fpm-writer/src/building-block/prompts/questions/chart.ts b/packages/fe-fpm-writer/src/building-block/prompts/questions/chart.ts index dc8cf9df9c..156587833e 100644 --- a/packages/fe-fpm-writer/src/building-block/prompts/questions/chart.ts +++ b/packages/fe-fpm-writer/src/building-block/prompts/questions/chart.ts @@ -13,9 +13,12 @@ import { getViewOrFragmentPathPrompt, isCapProject } from '../utils'; -import type { PromptContext, Prompts } from '../../../prompts/types'; +import type { PromptContext, Prompts, PromptsGroup } from '../../../prompts/types'; import { BuildingBlockType } from '../../types'; import type { BuildingBlockConfig, Chart } from '../../types'; +import { getManifestPromptsGroup } from './building-blocks'; + +const MANIFEST_LIBRARIES_GROUP = getManifestPromptsGroup(); export type ChartPromptsAnswer = BuildingBlockConfig & Answers; @@ -24,6 +27,12 @@ const defaultAnswers = { bindingContextType: 'absolute' }; +const groupIds = { + commonChartBuildingBlockProperties: 'chartBuildingBlockProperties', + chartVisualizationProperties: 'chartVisualizationProperties', + chartConfigureEvents: 'chartConfigureEvents' +}; + /** * Returns a list of prompts required to generate a chart building block. * @@ -33,11 +42,31 @@ const defaultAnswers = { export async function getChartBuildingBlockPrompts(context: PromptContext): Promise> { const { project } = context; const t: TFunction = translate(i18nNamespaces.buildingBlock, 'prompts.chart.'); + const groups: PromptsGroup[] = [ + { + id: groupIds.commonChartBuildingBlockProperties, + title: t('chartBuildingBlockPropertiesTitle'), + description: t('chartBuildingBlockPropertiesDescription', { returnObjects: true }) + }, + { + id: groupIds.chartVisualizationProperties, + title: t('chartVisualizationPropertiesTitle'), + description: t('chartVisualizationPropertiesDescription', { returnObjects: true }) + }, + { + id: groupIds.chartConfigureEvents, + title: t('chartConfigureEventsTitle'), + description: t('chartConfigureEventsDescription', { returnObjects: true }) + }, + MANIFEST_LIBRARIES_GROUP + ]; return { + groups, questions: [ getViewOrFragmentPathPrompt(context, t('viewOrFragmentPath.validate'), { message: t('viewOrFragmentPath.message'), guiOptions: { + groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true, dependantPromptNames: ['aggregationPath', 'buildingBlockData.filterBar'] } @@ -45,14 +74,13 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom getBuildingBlockIdPrompt(context, t('id.validation'), { message: t('id.message'), default: defaultAnswers.id, - guiOptions: { - mandatory: true - } + guiOptions: { groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true } }), getBindingContextTypePrompt({ message: t('bindingContextType'), default: defaultAnswers.bindingContextType, guiOptions: { + groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true, dependantPromptNames: ['buildingBlockData.metaPath.qualifier'] } @@ -62,6 +90,7 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom await getCAPServicePrompt(context, { message: t('service'), guiOptions: { + groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true, dependantPromptNames: [] } @@ -71,6 +100,7 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom getEntityPrompt(context, { message: t('entity'), guiOptions: { + groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true, dependantPromptNames: ['buildingBlockData.metaPath.qualifier'] } @@ -80,6 +110,7 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom { message: t('qualifier'), guiOptions: { + groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true, placeholder: t('qualifierPlaceholder'), hint: t('valuesDependentOnEntityTypeInfo') @@ -89,14 +120,13 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom ), getAggregationPathPrompt(context, { message: t('aggregation'), - guiOptions: { - mandatory: true - } + guiOptions: { groupId: groupIds.commonChartBuildingBlockProperties, mandatory: true } }), getFilterBarIdPrompt(context, { message: t('filterBar.message'), type: 'list', guiOptions: { + groupId: groupIds.commonChartBuildingBlockProperties, placeholder: t('filterBar.placeholder'), creation: { placeholder: t('filterBar.inputPlaceholder') } } @@ -111,6 +141,7 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom { name: t('personalization.choices.sort'), value: 'Sort' } ], guiOptions: { + groupId: groupIds.chartVisualizationProperties, placeholder: t('personalization.placeholder'), selectType: 'static' } @@ -123,17 +154,13 @@ export async function getChartBuildingBlockPrompts(context: PromptContext): Prom { name: t('selectionMode.choices.single'), value: 'Single' }, { name: t('selectionMode.choices.multiple'), value: 'Multiple' } ], - guiOptions: { - selectType: 'static' - } + guiOptions: { groupId: groupIds.chartConfigureEvents, selectType: 'static' } }, { type: 'input', name: 'buildingBlockData.selectionChange', message: t('selectionChange'), - guiOptions: { - placeholder: t('selectionChangePlaceholder') - } + guiOptions: { groupId: groupIds.chartConfigureEvents, placeholder: t('selectionChangePlaceholder') } } ], initialAnswers: { diff --git a/packages/fe-fpm-writer/src/building-block/prompts/questions/filter-bar.ts b/packages/fe-fpm-writer/src/building-block/prompts/questions/filter-bar.ts index 98e3b5f1ed..6adc22c584 100644 --- a/packages/fe-fpm-writer/src/building-block/prompts/questions/filter-bar.ts +++ b/packages/fe-fpm-writer/src/building-block/prompts/questions/filter-bar.ts @@ -11,9 +11,13 @@ import { getViewOrFragmentPathPrompt, isCapProject } from '../utils'; -import type { Prompts, PromptContext } from '../../../prompts/types'; +import type { Prompts, PromptContext, PromptsGroup } from '../../../prompts/types'; import { BuildingBlockType } from '../../types'; import type { BuildingBlockConfig, FilterBar } from '../../types'; +import type { TFunction } from 'i18next'; +import { getManifestPromptsGroup } from './building-blocks'; + +const MANIFEST_LIBRARIES_GROUP = getManifestPromptsGroup(); export type FilterBarPromptsAnswer = BuildingBlockConfig & Answers; @@ -22,6 +26,11 @@ const defaultAnswers = { bindingContextType: 'absolute' }; +const groupIds = { + commonFilterBarBuildingBlockProperties: 'filterBarBuildingBlockProperties', + filterConfigureEvents: 'filterConfigureEvents' +}; + /** * Returns a list of prompts required to generate a filterbar building block. * @@ -32,13 +41,27 @@ export async function getFilterBarBuildingBlockPrompts( context: PromptContext ): Promise> { const { project } = context; - const t = translate(i18nNamespaces.buildingBlock, 'prompts.filterBar.'); - + const t: TFunction = translate(i18nNamespaces.buildingBlock, 'prompts.filterBar.'); + const groups: PromptsGroup[] = [ + { + id: groupIds.commonFilterBarBuildingBlockProperties, + title: t('filterBarBuildingBlockPropertiesTitle'), + description: t('filterBarBuildingBlockPropertiesDescription', { returnObjects: true }) + }, + { + id: groupIds.filterConfigureEvents, + title: t('filterBarConfigureEventsTitle'), + description: t('filterBarConfigureEventsDescription', { returnObjects: true }) + }, + MANIFEST_LIBRARIES_GROUP + ]; return { + groups, questions: [ getViewOrFragmentPathPrompt(context, t('viewOrFragmentPath.validate'), { message: t('viewOrFragmentPath.message'), guiOptions: { + groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true, dependantPromptNames: ['aggregationPath'] } @@ -46,14 +69,13 @@ export async function getFilterBarBuildingBlockPrompts( getBuildingBlockIdPrompt(context, t('id.validation'), { message: t('id.message'), default: defaultAnswers.id, - guiOptions: { - mandatory: true - } + guiOptions: { groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true } }), getBindingContextTypePrompt({ message: t('bindingContextType'), default: defaultAnswers.bindingContextType, guiOptions: { + groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true, dependantPromptNames: ['buildingBlockData.metaPath.qualifier'] } @@ -63,6 +85,7 @@ export async function getFilterBarBuildingBlockPrompts( await getCAPServicePrompt(context, { message: t('service'), guiOptions: { + groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true, dependantPromptNames: [] } @@ -71,13 +94,12 @@ export async function getFilterBarBuildingBlockPrompts( : []), getAggregationPathPrompt(context, { message: t('aggregation'), - guiOptions: { - mandatory: true - } + guiOptions: { groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true } }), getEntityPrompt(context, { message: t('entity'), guiOptions: { + groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true, dependantPromptNames: ['buildingBlockData.metaPath.qualifier'] } @@ -87,6 +109,7 @@ export async function getFilterBarBuildingBlockPrompts( { message: t('qualifier'), guiOptions: { + groupId: groupIds.commonFilterBarBuildingBlockProperties, mandatory: true, placeholder: t('qualifierPlaceholder'), hint: t('valuesDependentOnEntityTypeInfo') @@ -97,12 +120,14 @@ export async function getFilterBarBuildingBlockPrompts( { type: 'input', name: 'buildingBlockData.filterChanged', - message: t('filterChanged') + message: t('filterChanged'), + guiOptions: { groupId: groupIds.filterConfigureEvents, placeholder: t('filterChangedPlaceholder') } }, { type: 'input', name: 'buildingBlockData.search', - message: t('search') + message: t('search'), + guiOptions: { groupId: groupIds.filterConfigureEvents, placeholder: t('searchPlaceholder') } } ], initialAnswers: { diff --git a/packages/fe-fpm-writer/src/building-block/prompts/questions/table.ts b/packages/fe-fpm-writer/src/building-block/prompts/questions/table.ts index 7878848a18..f1f30136fe 100644 --- a/packages/fe-fpm-writer/src/building-block/prompts/questions/table.ts +++ b/packages/fe-fpm-writer/src/building-block/prompts/questions/table.ts @@ -17,11 +17,14 @@ import { import type { PromptContext, Prompts, PromptsGroup } from '../../../prompts/types'; import { BuildingBlockType } from '../../types'; import type { BuildingBlockConfig, Table } from '../../types'; +import { getManifestPromptsGroup } from './building-blocks'; + +const MANIFEST_LIBRARIES_GROUP = getManifestPromptsGroup(); export type TablePromptsAnswer = BuildingBlockConfig & Answers; const groupIds = { - commonBlockProperties: 'tableBuildingBlockProperties', + commonTableBuildingBlockProperties: 'tableBuildingBlockProperties', visualisationProperties: 'tableVisualizationProperties' }; @@ -51,7 +54,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom const t: TFunction = translate(i18nNamespaces.buildingBlock, 'prompts.table.'); const groups: PromptsGroup[] = [ { - id: groupIds.commonBlockProperties, + id: groupIds.commonTableBuildingBlockProperties, title: t('tableBuildingBlockPropertiesTitle'), description: t('tableBuildingBlockPropertiesDescription', { returnObjects: true }) }, @@ -59,7 +62,8 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom id: groupIds.visualisationProperties, title: t('tableVisualizationPropertiesTitle'), description: t('tableVisualizationPropertiesDescription', { returnObjects: true }) - } + }, + MANIFEST_LIBRARIES_GROUP ]; return { @@ -69,7 +73,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom getViewOrFragmentPathPrompt(context, t('viewOrFragmentPath.validate'), { message: t('viewOrFragmentPath.message'), guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true, dependantPromptNames: ['aggregationPath', 'buildingBlockData.filterBar'] } @@ -78,7 +82,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom message: t('id.message'), default: defaultAnswers.id, guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true } }), @@ -86,7 +90,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom message: t('bindingContextType'), default: defaultAnswers.bindingContextType, guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true, dependantPromptNames: ['buildingBlockData.metaPath.qualifier'] } @@ -96,7 +100,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom await getCAPServicePrompt(context, { message: t('service'), guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true, dependantPromptNames: [] } @@ -106,7 +110,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom getEntityPrompt(context, { message: t('entity'), guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true, dependantPromptNames: ['buildingBlockData.metaPath.qualifier'] } @@ -117,7 +121,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom message: t('qualifier'), guiOptions: { hint: t('valuesDependentOnEntityTypeInfo'), - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true, placeholder: t('qualifierPlaceholder') } @@ -127,7 +131,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom getAggregationPathPrompt(context, { message: t('aggregation'), guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, mandatory: true } }), @@ -135,7 +139,7 @@ export async function getTableBuildingBlockPrompts(context: PromptContext): Prom message: t('filterBar.message'), type: 'list', guiOptions: { - groupId: groupIds.commonBlockProperties, + groupId: groupIds.commonTableBuildingBlockProperties, placeholder: t('filterBar.placeholder'), creation: { placeholder: t('filterBar.inputPlaceholder') } } diff --git a/packages/fe-fpm-writer/src/prompts/translations/i18n.en.json b/packages/fe-fpm-writer/src/prompts/translations/i18n.en.json index d6a351a730..11b04c021e 100644 --- a/packages/fe-fpm-writer/src/prompts/translations/i18n.en.json +++ b/packages/fe-fpm-writer/src/prompts/translations/i18n.en.json @@ -8,6 +8,12 @@ "filterBar": "Filter Bar", "table": "Table" } + }, + "manifestGroup": { + "manifestLibrariesTitle": "Manifest Libraries", + "manifestLibrariesDescription": [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet." + ] } }, "common": { @@ -44,6 +50,18 @@ } }, "chart": { + "chartBuildingBlockPropertiesTitle": "Chart Building Block Properties", + "chartBuildingBlockPropertiesDescription": [ + "Select the `View or Fragment File` where you would like to insert the chart building block and provide a `Building Block ID` to identify the chart.", + "Select an `Entity Set`, and a `Chart Annotation` you would like to use for the chart building block.", + "Select an `Aggregation Path` to determine where you would like the chart to be placed on the page." + ], + "chartVisualizationPropertiesTitle": "Chart Visualization Properties", + "chartVisualizationPropertiesDescription": ["Configure your chart using the properties below."], + "chartConfigureEventsTitle": "Configure Events", + "chartConfigureEventsDescription": [ + "Configure the below properties to react to events. Event handler methods are invoked when an event occurs." + ], "id": { "message": "Building Block ID", "validation": "An ID is required to generate the chart building block" @@ -80,13 +98,23 @@ "multiple": "Multiple" } }, - "selectionChange": "Selection Change Function", - "selectionChangePlaceholder": "Enter a selecton change function", - "qualifier": "Chart Qualifier", - "qualifierPlaceholder": "Select chart qualifier", - "valuesDependentOnEntityTypeInfo": "Values are dependent on entity type" + "selectionChange": "Selection Change Event", + "selectionChangePlaceholder": "Enter a function to be executed", + "qualifier": "Chart Annotation Path", + "qualifierPlaceholder": "Select a chart annotation path", + "valuesDependentOnEntityTypeInfo": "Values are dependent on entity set" }, "filterBar": { + "filterBarBuildingBlockPropertiesTitle": "Filter Bar Building Block Properties", + "filterBarBuildingBlockPropertiesDescription": [ + "Select the `View or Fragment File` where you would like to insert the filter bar building block and provide a `Building Block ID` to identify the filter bar.", + "Select an `Entity Set`, and a `Selection Field Annotation` you would like to use for the filter bar building block.", + "Select an `Aggregation Path` to determine where you would like the filter bar to be placed on the page." + ], + "filterBarConfigureEventsTitle": "Configure Events", + "filterBarConfigureEventsDescription": [ + "Configure the below properties to react to events. Event handler methods are invoked when an event occurs." + ], "id": { "message": "Building Block ID", "validation": "An ID is required to generate the filter bar building block" @@ -98,21 +126,23 @@ "entity": "Entity", "service": "Service", "metaPath": "Enter the relative path of the property in the meta model", - "filterChanged": "Filter Function", - "search": "Search Function", - "qualifier": "Selection Fields Qualifier", - "qualifierPlaceholder": "Select selection fields qualifier", + "filterChanged": "Filter Changed Event", + "filterChangedPlaceholder": "Enter a function to be executed", + "search": "Search Event", + "searchPlaceholder": "Enter a function to be executed", + "qualifier": "Selection Field Annotation Path", + "qualifierPlaceholder": "Select a selection field annotation path", "aggregation": "Aggregation Path", - "valuesDependentOnEntityTypeInfo": "Values are dependent on entity type", + "valuesDependentOnEntityTypeInfo": "Values are dependent on entity set", "bindingContextType": "Binding Context Path Type" }, "table": { "tableBuildingBlockPropertiesTitle": "Table Building Block Properties", "tableBuildingBlockPropertiesDescription": [ "Select the `View or Fragment File` where you would like to insert the table building block and provide a `Building Block ID` to identify the table.", - "Select an `Entity Type`, and a `Line Item Qualifier` you would like to use for the table building block.", - "Select an `Aggregation Path` to determine where you would like the table to be placed on the page.", - "If you would like to link the table to an existing filter bar, provide the `Associated Filter Bar ID`." + "Select an `Entity Set`, and a `Line Item Annotation` you would like to use for the table building block.", + "Select an `Aggregation Path` to determine where you would like the table to appear on the page.", + "Provide the Associated Filter Bar ID if you want to link the table to an existing filter bar." ], "tableVisualizationPropertiesTitle": "Table Visualization Properties", "tableVisualizationPropertiesDescription": ["Configure your table using the properties below."], @@ -127,8 +157,8 @@ "bindingContextType": "Binding Context Path Type", "entity": "Entity", "service": "Service", - "qualifier": "Line Item Qualifier", - "qualifierPlaceholder": "Select a line item qualifier", + "qualifier": "Line Item Annotation Path", + "qualifierPlaceholder": "Select a line item annotation path", "aggregation": "Aggregation Path", "filterBar": { "message": "Associated Filter Bar ID", @@ -165,7 +195,7 @@ "fullScreenMode": "Enable Full Screen Mode", "pasteFromClipboard": "Enable Paste From Clipboard", "tableSearchableToggle": "Table Searchable Toggle", - "valuesDependentOnEntityTypeInfo": "Values are dependent on entity type" + "valuesDependentOnEntityTypeInfo": "Values are dependent on entity set" } } } diff --git a/packages/fe-fpm-writer/test/unit/prompts/__snapshots__/prompts.test.ts.snap b/packages/fe-fpm-writer/test/unit/prompts/__snapshots__/prompts.test.ts.snap index 220e2f59cc..ad4dce6c6e 100644 --- a/packages/fe-fpm-writer/test/unit/prompts/__snapshots__/prompts.test.ts.snap +++ b/packages/fe-fpm-writer/test/unit/prompts/__snapshots__/prompts.test.ts.snap @@ -28,6 +28,38 @@ Object { exports[`Prompts - no project getChartBuildingBlockPrompts 1`] = ` Object { + "groups": Array [ + Object { + "description": Array [ + "Select the \`View or Fragment File\` where you would like to insert the chart building block and provide a \`Building Block ID\` to identify the chart.", + "Select an \`Entity Set\`, and a \`Chart Annotation\` you would like to use for the chart building block.", + "Select an \`Aggregation Path\` to determine where you would like the chart to be placed on the page.", + ], + "id": "chartBuildingBlockProperties", + "title": "Chart Building Block Properties", + }, + Object { + "description": Array [ + "Configure your chart using the properties below.", + ], + "id": "chartVisualizationProperties", + "title": "Chart Visualization Properties", + }, + Object { + "description": Array [ + "Configure the below properties to react to events. Event handler methods are invoked when an event occurs.", + ], + "id": "chartConfigureEvents", + "title": "Configure Events", + }, + Object { + "description": Array [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet.", + ], + "id": "manifestLibraries", + "title": "Manifest Libraries", + }, + ], "initialAnswers": Object { "buildingBlockData": Object { "buildingBlockType": "chart", @@ -41,6 +73,7 @@ Object { "aggregationPath", "buildingBlockData.filterBar", ], + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Select a view or fragment file", "selectType": "dynamic", @@ -53,6 +86,7 @@ Object { Object { "default": "Chart", "guiOptions": Object { + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Enter a building block ID", }, @@ -77,6 +111,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "chartBuildingBlockProperties", "mandatory": true, "selectType": "static", }, @@ -90,6 +125,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Select an entity", "selectType": "dynamic", @@ -101,18 +137,20 @@ Object { Object { "choices": Array [], "guiOptions": Object { - "hint": "Values are dependent on entity type", + "groupId": "chartBuildingBlockProperties", + "hint": "Values are dependent on entity set", "mandatory": true, - "placeholder": "Select chart qualifier", + "placeholder": "Select a chart annotation path", "selectType": "dynamic", }, - "message": "Chart Qualifier", + "message": "Chart Annotation Path", "name": "buildingBlockData.metaPath.qualifier", "type": "list", }, Object { "choices": Array [], "guiOptions": Object { + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Select an aggregation path", "selectType": "dynamic", @@ -127,6 +165,7 @@ Object { "creation": Object { "placeholder": "Enter a new filter bar ID", }, + "groupId": "chartBuildingBlockProperties", "placeholder": "Select or enter a filter bar ID", "selectType": "dynamic", }, @@ -150,6 +189,7 @@ Object { }, ], "guiOptions": Object { + "groupId": "chartVisualizationProperties", "placeholder": "Select chart personalization", "selectType": "static", }, @@ -169,6 +209,7 @@ Object { }, ], "guiOptions": Object { + "groupId": "chartConfigureEvents", "selectType": "static", }, "message": "Selection Mode", @@ -177,9 +218,10 @@ Object { }, Object { "guiOptions": Object { - "placeholder": "Enter a selecton change function", + "groupId": "chartConfigureEvents", + "placeholder": "Enter a function to be executed", }, - "message": "Selection Change Function", + "message": "Selection Change Event", "name": "buildingBlockData.selectionChange", "type": "input", }, @@ -232,6 +274,31 @@ exports[`Prompts - no project getCodeSnippet get code snippet with placeholders exports[`Prompts - no project getFilterBarBuildingBlockPrompts 1`] = ` Object { + "groups": Array [ + Object { + "description": Array [ + "Select the \`View or Fragment File\` where you would like to insert the filter bar building block and provide a \`Building Block ID\` to identify the filter bar.", + "Select an \`Entity Set\`, and a \`Selection Field Annotation\` you would like to use for the filter bar building block.", + "Select an \`Aggregation Path\` to determine where you would like the filter bar to be placed on the page.", + ], + "id": "filterBarBuildingBlockProperties", + "title": "Filter Bar Building Block Properties", + }, + Object { + "description": Array [ + "Configure the below properties to react to events. Event handler methods are invoked when an event occurs.", + ], + "id": "filterConfigureEvents", + "title": "Configure Events", + }, + Object { + "description": Array [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet.", + ], + "id": "manifestLibraries", + "title": "Manifest Libraries", + }, + ], "initialAnswers": Object { "buildingBlockData": Object { "buildingBlockType": "filter-bar", @@ -244,6 +311,7 @@ Object { "dependantPromptNames": Array [ "aggregationPath", ], + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Select a view or fragment file", "selectType": "dynamic", @@ -256,6 +324,7 @@ Object { Object { "default": "FilterBar", "guiOptions": Object { + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Enter a building block ID", }, @@ -280,6 +349,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "selectType": "static", }, @@ -290,6 +360,7 @@ Object { Object { "choices": Array [], "guiOptions": Object { + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Select an aggregation path", "selectType": "dynamic", @@ -304,6 +375,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Select an entity", "selectType": "dynamic", @@ -315,22 +387,31 @@ Object { Object { "choices": Array [], "guiOptions": Object { - "hint": "Values are dependent on entity type", + "groupId": "filterBarBuildingBlockProperties", + "hint": "Values are dependent on entity set", "mandatory": true, - "placeholder": "Select selection fields qualifier", + "placeholder": "Select a selection field annotation path", "selectType": "dynamic", }, - "message": "Selection Fields Qualifier", + "message": "Selection Field Annotation Path", "name": "buildingBlockData.metaPath.qualifier", "type": "list", }, Object { - "message": "Filter Function", + "guiOptions": Object { + "groupId": "filterConfigureEvents", + "placeholder": "Enter a function to be executed", + }, + "message": "Filter Changed Event", "name": "buildingBlockData.filterChanged", "type": "input", }, Object { - "message": "Search Function", + "guiOptions": Object { + "groupId": "filterConfigureEvents", + "placeholder": "Enter a function to be executed", + }, + "message": "Search Event", "name": "buildingBlockData.search", "type": "input", }, @@ -344,9 +425,9 @@ Object { Object { "description": Array [ "Select the \`View or Fragment File\` where you would like to insert the table building block and provide a \`Building Block ID\` to identify the table.", - "Select an \`Entity Type\`, and a \`Line Item Qualifier\` you would like to use for the table building block.", - "Select an \`Aggregation Path\` to determine where you would like the table to be placed on the page.", - "If you would like to link the table to an existing filter bar, provide the \`Associated Filter Bar ID\`.", + "Select an \`Entity Set\`, and a \`Line Item Annotation\` you would like to use for the table building block.", + "Select an \`Aggregation Path\` to determine where you would like the table to appear on the page.", + "Provide the Associated Filter Bar ID if you want to link the table to an existing filter bar.", ], "id": "tableBuildingBlockProperties", "title": "Table Building Block Properties", @@ -358,6 +439,13 @@ Object { "id": "tableVisualizationProperties", "title": "Table Visualization Properties", }, + Object { + "description": Array [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet.", + ], + "id": "manifestLibraries", + "title": "Manifest Libraries", + }, ], "initialAnswers": Object { "buildingBlockData": Object { @@ -437,12 +525,12 @@ Object { "choices": Array [], "guiOptions": Object { "groupId": "tableBuildingBlockProperties", - "hint": "Values are dependent on entity type", + "hint": "Values are dependent on entity set", "mandatory": true, - "placeholder": "Select a line item qualifier", + "placeholder": "Select a line item annotation path", "selectType": "dynamic", }, - "message": "Line Item Qualifier", + "message": "Line Item Annotation Path", "name": "buildingBlockData.metaPath.qualifier", "type": "list", }, @@ -887,6 +975,38 @@ Object { exports[`Prompts getChartBuildingBlockPrompts 1`] = ` Object { + "groups": Array [ + Object { + "description": Array [ + "Select the \`View or Fragment File\` where you would like to insert the chart building block and provide a \`Building Block ID\` to identify the chart.", + "Select an \`Entity Set\`, and a \`Chart Annotation\` you would like to use for the chart building block.", + "Select an \`Aggregation Path\` to determine where you would like the chart to be placed on the page.", + ], + "id": "chartBuildingBlockProperties", + "title": "Chart Building Block Properties", + }, + Object { + "description": Array [ + "Configure your chart using the properties below.", + ], + "id": "chartVisualizationProperties", + "title": "Chart Visualization Properties", + }, + Object { + "description": Array [ + "Configure the below properties to react to events. Event handler methods are invoked when an event occurs.", + ], + "id": "chartConfigureEvents", + "title": "Configure Events", + }, + Object { + "description": Array [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet.", + ], + "id": "manifestLibraries", + "title": "Manifest Libraries", + }, + ], "initialAnswers": Object { "buildingBlockData": Object { "buildingBlockType": "chart", @@ -900,6 +1020,7 @@ Object { "aggregationPath", "buildingBlockData.filterBar", ], + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Select a view or fragment file", "selectType": "dynamic", @@ -912,6 +1033,7 @@ Object { Object { "default": "Chart", "guiOptions": Object { + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Enter a building block ID", }, @@ -936,6 +1058,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "chartBuildingBlockProperties", "mandatory": true, "selectType": "static", }, @@ -949,6 +1072,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Select an entity", "selectType": "dynamic", @@ -960,18 +1084,20 @@ Object { Object { "choices": [Function], "guiOptions": Object { - "hint": "Values are dependent on entity type", + "groupId": "chartBuildingBlockProperties", + "hint": "Values are dependent on entity set", "mandatory": true, - "placeholder": "Select chart qualifier", + "placeholder": "Select a chart annotation path", "selectType": "dynamic", }, - "message": "Chart Qualifier", + "message": "Chart Annotation Path", "name": "buildingBlockData.metaPath.qualifier", "type": "list", }, Object { "choices": [Function], "guiOptions": Object { + "groupId": "chartBuildingBlockProperties", "mandatory": true, "placeholder": "Select an aggregation path", "selectType": "dynamic", @@ -986,6 +1112,7 @@ Object { "creation": Object { "placeholder": "Enter a new filter bar ID", }, + "groupId": "chartBuildingBlockProperties", "placeholder": "Select or enter a filter bar ID", "selectType": "dynamic", }, @@ -1009,6 +1136,7 @@ Object { }, ], "guiOptions": Object { + "groupId": "chartVisualizationProperties", "placeholder": "Select chart personalization", "selectType": "static", }, @@ -1028,6 +1156,7 @@ Object { }, ], "guiOptions": Object { + "groupId": "chartConfigureEvents", "selectType": "static", }, "message": "Selection Mode", @@ -1036,9 +1165,10 @@ Object { }, Object { "guiOptions": Object { - "placeholder": "Enter a selecton change function", + "groupId": "chartConfigureEvents", + "placeholder": "Enter a function to be executed", }, - "message": "Selection Change Function", + "message": "Selection Change Event", "name": "buildingBlockData.selectionChange", "type": "input", }, @@ -1313,6 +1443,31 @@ exports[`Prompts getCodeSnippet get code snippet with placeholders 1`] = ` exports[`Prompts getFilterBarBuildingBlockPrompts 1`] = ` Object { + "groups": Array [ + Object { + "description": Array [ + "Select the \`View or Fragment File\` where you would like to insert the filter bar building block and provide a \`Building Block ID\` to identify the filter bar.", + "Select an \`Entity Set\`, and a \`Selection Field Annotation\` you would like to use for the filter bar building block.", + "Select an \`Aggregation Path\` to determine where you would like the filter bar to be placed on the page.", + ], + "id": "filterBarBuildingBlockProperties", + "title": "Filter Bar Building Block Properties", + }, + Object { + "description": Array [ + "Configure the below properties to react to events. Event handler methods are invoked when an event occurs.", + ], + "id": "filterConfigureEvents", + "title": "Configure Events", + }, + Object { + "description": Array [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet.", + ], + "id": "manifestLibraries", + "title": "Manifest Libraries", + }, + ], "initialAnswers": Object { "buildingBlockData": Object { "buildingBlockType": "filter-bar", @@ -1325,6 +1480,7 @@ Object { "dependantPromptNames": Array [ "aggregationPath", ], + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Select a view or fragment file", "selectType": "dynamic", @@ -1337,6 +1493,7 @@ Object { Object { "default": "FilterBar", "guiOptions": Object { + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Enter a building block ID", }, @@ -1361,6 +1518,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "selectType": "static", }, @@ -1371,6 +1529,7 @@ Object { Object { "choices": [Function], "guiOptions": Object { + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Select an aggregation path", "selectType": "dynamic", @@ -1385,6 +1544,7 @@ Object { "dependantPromptNames": Array [ "buildingBlockData.metaPath.qualifier", ], + "groupId": "filterBarBuildingBlockProperties", "mandatory": true, "placeholder": "Select an entity", "selectType": "dynamic", @@ -1396,22 +1556,31 @@ Object { Object { "choices": [Function], "guiOptions": Object { - "hint": "Values are dependent on entity type", + "groupId": "filterBarBuildingBlockProperties", + "hint": "Values are dependent on entity set", "mandatory": true, - "placeholder": "Select selection fields qualifier", + "placeholder": "Select a selection field annotation path", "selectType": "dynamic", }, - "message": "Selection Fields Qualifier", + "message": "Selection Field Annotation Path", "name": "buildingBlockData.metaPath.qualifier", "type": "list", }, Object { - "message": "Filter Function", + "guiOptions": Object { + "groupId": "filterConfigureEvents", + "placeholder": "Enter a function to be executed", + }, + "message": "Filter Changed Event", "name": "buildingBlockData.filterChanged", "type": "input", }, Object { - "message": "Search Function", + "guiOptions": Object { + "groupId": "filterConfigureEvents", + "placeholder": "Enter a function to be executed", + }, + "message": "Search Event", "name": "buildingBlockData.search", "type": "input", }, @@ -1425,9 +1594,9 @@ Object { Object { "description": Array [ "Select the \`View or Fragment File\` where you would like to insert the table building block and provide a \`Building Block ID\` to identify the table.", - "Select an \`Entity Type\`, and a \`Line Item Qualifier\` you would like to use for the table building block.", - "Select an \`Aggregation Path\` to determine where you would like the table to be placed on the page.", - "If you would like to link the table to an existing filter bar, provide the \`Associated Filter Bar ID\`.", + "Select an \`Entity Set\`, and a \`Line Item Annotation\` you would like to use for the table building block.", + "Select an \`Aggregation Path\` to determine where you would like the table to appear on the page.", + "Provide the Associated Filter Bar ID if you want to link the table to an existing filter bar.", ], "id": "tableBuildingBlockProperties", "title": "Table Building Block Properties", @@ -1439,6 +1608,13 @@ Object { "id": "tableVisualizationProperties", "title": "Table Visualization Properties", }, + Object { + "description": Array [ + "In order for macros to work, we need to ensure that the sap.fe.macros library is maintained in manifest.json. Please see the code snippet.", + ], + "id": "manifestLibraries", + "title": "Manifest Libraries", + }, ], "initialAnswers": Object { "buildingBlockData": Object { @@ -1518,12 +1694,12 @@ Object { "choices": [Function], "guiOptions": Object { "groupId": "tableBuildingBlockProperties", - "hint": "Values are dependent on entity type", + "hint": "Values are dependent on entity set", "mandatory": true, - "placeholder": "Select a line item qualifier", + "placeholder": "Select a line item annotation path", "selectType": "dynamic", }, - "message": "Line Item Qualifier", + "message": "Line Item Annotation Path", "name": "buildingBlockData.metaPath.qualifier", "type": "list", }, From 13b323ee61fd68ce286cc432600f1be7448453f3 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 17 Sep 2024 11:06:43 +0000 Subject: [PATCH 4/9] chore: apply latest changesets --- .changeset/flat-cameras-juggle.md | 7 ------- examples/fe-fpm-cli/CHANGELOG.md | 7 +++++++ examples/fe-fpm-cli/package.json | 2 +- examples/prompting-ui/CHANGELOG.md | 7 +++++++ examples/prompting-ui/package.json | 2 +- examples/simple-generator/CHANGELOG.md | 6 ++++++ examples/simple-generator/package.json | 2 +- packages/fe-fpm-writer/CHANGELOG.md | 7 +++++++ packages/fe-fpm-writer/package.json | 2 +- packages/fiori-elements-writer/CHANGELOG.md | 7 +++++++ packages/fiori-elements-writer/package.json | 2 +- 11 files changed, 39 insertions(+), 12 deletions(-) delete mode 100644 .changeset/flat-cameras-juggle.md diff --git a/.changeset/flat-cameras-juggle.md b/.changeset/flat-cameras-juggle.md deleted file mode 100644 index 2e08a04506..0000000000 --- a/.changeset/flat-cameras-juggle.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@sap-ux/fe-fpm-writer': minor -'@sap-ux/prompting-ui': minor ---- - -Divide chart, filter bar and table building block prompts questions into groups, add Manifest Change group. -Update custom chart example in prompting-ui. diff --git a/examples/fe-fpm-cli/CHANGELOG.md b/examples/fe-fpm-cli/CHANGELOG.md index 87a206e395..7d61757cb6 100644 --- a/examples/fe-fpm-cli/CHANGELOG.md +++ b/examples/fe-fpm-cli/CHANGELOG.md @@ -1,5 +1,12 @@ # @sap-ux/fe-fpm-cli +## 0.0.27 + +### Patch Changes + +- Updated dependencies [327ebec] + - @sap-ux/fe-fpm-writer@0.31.0 + ## 0.0.26 ### Patch Changes diff --git a/examples/fe-fpm-cli/package.json b/examples/fe-fpm-cli/package.json index 21cfd0926f..b21881a81e 100644 --- a/examples/fe-fpm-cli/package.json +++ b/examples/fe-fpm-cli/package.json @@ -1,6 +1,6 @@ { "name": "@sap-ux/fe-fpm-cli", - "version": "0.0.26", + "version": "0.0.27", "description": "A simple CLI to prompt required information to create a building block using the fe-fpm-writer module's prompt and generate functions.", "license": "Apache-2.0", "private": true, diff --git a/examples/prompting-ui/CHANGELOG.md b/examples/prompting-ui/CHANGELOG.md index 220cc1188b..40011731cb 100644 --- a/examples/prompting-ui/CHANGELOG.md +++ b/examples/prompting-ui/CHANGELOG.md @@ -1,5 +1,12 @@ # @sap-ux/fe-fpm-writer-ui +## 0.1.0 + +### Minor Changes + +- 327ebec: Divide chart, filter bar and table building block prompts questions into groups, add Manifest Change group. + Update custom chart example in prompting-ui. + ## 0.0.12 ### Patch Changes diff --git a/examples/prompting-ui/package.json b/examples/prompting-ui/package.json index 1d4d5d250a..296c36070e 100644 --- a/examples/prompting-ui/package.json +++ b/examples/prompting-ui/package.json @@ -1,6 +1,6 @@ { "name": "@sap-ux/prompting-ui", - "version": "0.0.12", + "version": "0.1.0", "description": "This project contains UI storybook stories with exampleS with prompt ui and FPM based building blocks.", "license": "Apache-2.0", "private": true, diff --git a/examples/simple-generator/CHANGELOG.md b/examples/simple-generator/CHANGELOG.md index 0a6e903b73..172089c23e 100644 --- a/examples/simple-generator/CHANGELOG.md +++ b/examples/simple-generator/CHANGELOG.md @@ -1,5 +1,11 @@ # @sap-ux/generator-simple-fe +## 1.0.48 + +### Patch Changes + +- @sap-ux/fiori-elements-writer@1.1.22 + ## 1.0.47 ### Patch Changes diff --git a/examples/simple-generator/package.json b/examples/simple-generator/package.json index 9e2cfb7a73..aa351ddce7 100644 --- a/examples/simple-generator/package.json +++ b/examples/simple-generator/package.json @@ -1,6 +1,6 @@ { "name": "@sap-ux/generator-simple-fe", - "version": "1.0.47", + "version": "1.0.48", "description": "Simple example of a yeoman generator for Fiori elements.", "license": "Apache-2.0", "private": true, diff --git a/packages/fe-fpm-writer/CHANGELOG.md b/packages/fe-fpm-writer/CHANGELOG.md index f0d45d964e..612c21893c 100644 --- a/packages/fe-fpm-writer/CHANGELOG.md +++ b/packages/fe-fpm-writer/CHANGELOG.md @@ -1,5 +1,12 @@ # @sap-ux/fe-fpm-writer +## 0.31.0 + +### Minor Changes + +- 327ebec: Divide chart, filter bar and table building block prompts questions into groups, add Manifest Change group. + Update custom chart example in prompting-ui. + ## 0.30.0 ### Minor Changes diff --git a/packages/fe-fpm-writer/package.json b/packages/fe-fpm-writer/package.json index 6b52f97208..20ad2df4f0 100644 --- a/packages/fe-fpm-writer/package.json +++ b/packages/fe-fpm-writer/package.json @@ -1,7 +1,7 @@ { "name": "@sap-ux/fe-fpm-writer", "description": "SAP Fiori elements flexible programming model writer", - "version": "0.30.0", + "version": "0.31.0", "repository": { "type": "git", "url": "https://github.com/SAP/open-ux-tools.git", diff --git a/packages/fiori-elements-writer/CHANGELOG.md b/packages/fiori-elements-writer/CHANGELOG.md index d32b96ce0f..5a7c04b1d1 100644 --- a/packages/fiori-elements-writer/CHANGELOG.md +++ b/packages/fiori-elements-writer/CHANGELOG.md @@ -1,5 +1,12 @@ # @sap-ux/fiori-elements-writer +## 1.1.22 + +### Patch Changes + +- Updated dependencies [327ebec] + - @sap-ux/fe-fpm-writer@0.31.0 + ## 1.1.21 ### Patch Changes diff --git a/packages/fiori-elements-writer/package.json b/packages/fiori-elements-writer/package.json index ee512400f2..89b2e56c6f 100644 --- a/packages/fiori-elements-writer/package.json +++ b/packages/fiori-elements-writer/package.json @@ -1,7 +1,7 @@ { "name": "@sap-ux/fiori-elements-writer", "description": "SAP Fiori elements application writer", - "version": "1.1.21", + "version": "1.1.22", "repository": { "type": "git", "url": "https://github.com/SAP/open-ux-tools.git", From 9506a730795ebaa68a8bcbc468347af9e122f370 Mon Sep 17 00:00:00 2001 From: Emre Cevik Date: Tue, 17 Sep 2024 14:59:57 +0200 Subject: [PATCH 5/9] fix: uniform funnel checkboxes (#2375) * fix: uniform funnel checkboxes * changeset --- .changeset/empty-parents-prove.md | 5 +++++ .../control-property-editor/src/panels/properties/Funnel.tsx | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 .changeset/empty-parents-prove.md diff --git a/.changeset/empty-parents-prove.md b/.changeset/empty-parents-prove.md new file mode 100644 index 0000000000..d74648641d --- /dev/null +++ b/.changeset/empty-parents-prove.md @@ -0,0 +1,5 @@ +--- +'@sap-ux/control-property-editor': patch +--- + +Uniform funnel checkboxes diff --git a/packages/control-property-editor/src/panels/properties/Funnel.tsx b/packages/control-property-editor/src/panels/properties/Funnel.tsx index b9c2417df9..b66cb9e594 100644 --- a/packages/control-property-editor/src/panels/properties/Funnel.tsx +++ b/packages/control-property-editor/src/panels/properties/Funnel.tsx @@ -47,9 +47,6 @@ const Funnel = (): ReactElement => { contentPadding={UICalloutContentPadding.Standard}> , isChecked?: boolean) => { From c39fb766a33ed43dbd4439c56c1c6f39782cc884 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 17 Sep 2024 13:11:54 +0000 Subject: [PATCH 6/9] chore: apply latest changesets --- .changeset/empty-parents-prove.md | 5 ----- packages/control-property-editor/CHANGELOG.md | 6 ++++++ packages/control-property-editor/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/empty-parents-prove.md diff --git a/.changeset/empty-parents-prove.md b/.changeset/empty-parents-prove.md deleted file mode 100644 index d74648641d..0000000000 --- a/.changeset/empty-parents-prove.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sap-ux/control-property-editor': patch ---- - -Uniform funnel checkboxes diff --git a/packages/control-property-editor/CHANGELOG.md b/packages/control-property-editor/CHANGELOG.md index 08015a49f5..d6c97569dc 100644 --- a/packages/control-property-editor/CHANGELOG.md +++ b/packages/control-property-editor/CHANGELOG.md @@ -1,5 +1,11 @@ # @sap-ux/control-property-editor +## 0.5.4 + +### Patch Changes + +- 9506a73: Uniform funnel checkboxes + ## 0.5.3 ### Patch Changes diff --git a/packages/control-property-editor/package.json b/packages/control-property-editor/package.json index 2273bb2f55..05f42df8d4 100644 --- a/packages/control-property-editor/package.json +++ b/packages/control-property-editor/package.json @@ -3,7 +3,7 @@ "displayName": "Control Property Editor", "description": "Control Property Editor", "license": "Apache-2.0", - "version": "0.5.3", + "version": "0.5.4", "main": "dist/app.js", "repository": { "type": "git", From 30360e992b5039941e9c9585cab01abf7d109824 Mon Sep 17 00:00:00 2001 From: Andis Redmans <90789422+815are@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:55:35 +0300 Subject: [PATCH 7/9] fix(control-property-editor): Update the CSS variable --vscode-font-family with a MacOS-specific font-family to match the VSCode UI when the control property editor is running on MacOS. (#2356) * fix: adjust vscode font family variable adjust vscode font family variable * changeset changeset * conflict issue conflict issue * fix: changeset text issue changeset text issue * fix: remove changeset for ui component remove changeset for ui component --------- Co-authored-by: Klaus Keller <66327622+Klaus-Keller@users.noreply.github.com> --- .changeset/itchy-worms-lay.md | 5 +++++ packages/control-property-editor/src/index.css | 6 +++--- packages/ui-components/.storybook/static/vscode-dark.css | 2 +- packages/ui-components/.storybook/static/vscode-hcb.css | 2 +- packages/ui-components/.storybook/static/vscode-light.css | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 .changeset/itchy-worms-lay.md diff --git a/.changeset/itchy-worms-lay.md b/.changeset/itchy-worms-lay.md new file mode 100644 index 0000000000..423afdf577 --- /dev/null +++ b/.changeset/itchy-worms-lay.md @@ -0,0 +1,5 @@ +--- +'@sap-ux/control-property-editor': patch +--- + +Update the CSS variable "--vscode-font-family" with a MacOS-specific font-family to match the VSCode UI when the control property editor is running on MacOS. diff --git a/packages/control-property-editor/src/index.css b/packages/control-property-editor/src/index.css index a524717989..29b6475e66 100644 --- a/packages/control-property-editor/src/index.css +++ b/packages/control-property-editor/src/index.css @@ -23,7 +23,7 @@ code { } html[data-theme='dark modern'] { - --vscode-font-family: "Segoe WPC", "Segoe UI", sans-serif; + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", sans-serif; --vscode-font-weight: normal; --vscode-font-size: 13px; --vscode-editor-font-family: Consolas, 'Courier New', monospace; @@ -718,7 +718,7 @@ html[data-theme='dark modern'] { } html[data-theme='light modern'] { - --vscode-font-family: "Segoe WPC", "Segoe UI", sans-serif; + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", sans-serif; --vscode-font-weight: normal; --vscode-font-size: 13px; --vscode-editor-font-family: Consolas, 'Courier New', monospace; @@ -1415,7 +1415,7 @@ html[data-theme='light modern'] { } html[data-theme='high contrast black'] { - --vscode-font-family: "Segoe WPC", "Segoe UI", sans-serif; + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", sans-serif; --vscode-font-weight: normal; --vscode-font-size: 13px; --vscode-editor-font-family: Consolas, 'Courier New', monospace; diff --git a/packages/ui-components/.storybook/static/vscode-dark.css b/packages/ui-components/.storybook/static/vscode-dark.css index 72f9942771..be6e9848a0 100644 --- a/packages/ui-components/.storybook/static/vscode-dark.css +++ b/packages/ui-components/.storybook/static/vscode-dark.css @@ -1,5 +1,5 @@ :root { - --vscode-font-family: "Segoe WPC", "Segoe UI", sans-serif; + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", sans-serif; --vscode-font-weight: normal; --vscode-font-size: 13px; --vscode-editor-font-family: Consolas, 'Courier New', monospace; diff --git a/packages/ui-components/.storybook/static/vscode-hcb.css b/packages/ui-components/.storybook/static/vscode-hcb.css index e27e952798..e460f7cf89 100644 --- a/packages/ui-components/.storybook/static/vscode-hcb.css +++ b/packages/ui-components/.storybook/static/vscode-hcb.css @@ -1,5 +1,5 @@ :root { - --vscode-font-family: "Segoe WPC", "Segoe UI", sans-serif; + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", sans-serif; --vscode-font-weight: normal; --vscode-font-size: 13px; --vscode-editor-font-family: Consolas, 'Courier New', monospace; diff --git a/packages/ui-components/.storybook/static/vscode-light.css b/packages/ui-components/.storybook/static/vscode-light.css index 7d81349eeb..6c1f1c9421 100644 --- a/packages/ui-components/.storybook/static/vscode-light.css +++ b/packages/ui-components/.storybook/static/vscode-light.css @@ -1,5 +1,5 @@ :root { - --vscode-font-family: "Segoe WPC", "Segoe UI", sans-serif; + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", sans-serif; --vscode-font-weight: normal; --vscode-font-size: 13px; --vscode-editor-font-family: Consolas, 'Courier New', monospace; From 5587c3f2bd88f6b6a855ade0f568e7d836fa5683 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 17 Sep 2024 14:18:44 +0000 Subject: [PATCH 8/9] chore: apply latest changesets --- .changeset/itchy-worms-lay.md | 5 ----- packages/control-property-editor/CHANGELOG.md | 6 ++++++ packages/control-property-editor/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/itchy-worms-lay.md diff --git a/.changeset/itchy-worms-lay.md b/.changeset/itchy-worms-lay.md deleted file mode 100644 index 423afdf577..0000000000 --- a/.changeset/itchy-worms-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sap-ux/control-property-editor': patch ---- - -Update the CSS variable "--vscode-font-family" with a MacOS-specific font-family to match the VSCode UI when the control property editor is running on MacOS. diff --git a/packages/control-property-editor/CHANGELOG.md b/packages/control-property-editor/CHANGELOG.md index d6c97569dc..6b786b3d80 100644 --- a/packages/control-property-editor/CHANGELOG.md +++ b/packages/control-property-editor/CHANGELOG.md @@ -1,5 +1,11 @@ # @sap-ux/control-property-editor +## 0.5.5 + +### Patch Changes + +- 30360e9: Update the CSS variable "--vscode-font-family" with a MacOS-specific font-family to match the VSCode UI when the control property editor is running on MacOS. + ## 0.5.4 ### Patch Changes diff --git a/packages/control-property-editor/package.json b/packages/control-property-editor/package.json index 05f42df8d4..fe4b488ff2 100644 --- a/packages/control-property-editor/package.json +++ b/packages/control-property-editor/package.json @@ -3,7 +3,7 @@ "displayName": "Control Property Editor", "description": "Control Property Editor", "license": "Apache-2.0", - "version": "0.5.4", + "version": "0.5.5", "main": "dist/app.js", "repository": { "type": "git", From b6a9bbbb053034c220020c5749c40df6391b9d01 Mon Sep 17 00:00:00 2001 From: "Donal Tobin (SAP)" <1914897+donal-tobin-sap@users.noreply.github.com> Date: Tue, 17 Sep 2024 20:50:56 +0100 Subject: [PATCH 9/9] fix(security): update path-to-regex (#2357) - also related parent module express - and related module body-parser - dependencies are dev only - removed test project file change - second upgrade of express overnight - and related module static-server - and related module send Issue: tools-suite/issues/31259 Issue: https://github.com/SAP/open-ux-tools/security/dependabot/148 Issue: https://github.com/SAP/open-ux-tools/security/dependabot/149 Issue: https://github.com/SAP/open-ux-tools/security/dependabot/135 Issue: https://github.com/SAP/open-ux-tools/security/dependabot/151 Issue: https://github.com/SAP/open-ux-tools/security/dependabot/150 Co-authored-by: Austin Devine Co-authored-by: Klaus Keller <66327622+Klaus-Keller@users.noreply.github.com> --- docs/version-overrides.md | 22 +- package.json | 1 + packages/adp-tooling/package.json | 2 +- .../backend-proxy-middleware/package.json | 2 +- packages/cards-editor-middleware/package.json | 3 +- packages/control-property-editor/package.json | 2 +- packages/preview-middleware/package.json | 2 +- packages/reload-middleware/package.json | 2 +- packages/serve-static-middleware/package.json | 4 +- packages/ui5-proxy-middleware/package.json | 2 +- pnpm-lock.yaml | 431 ++++++++++-------- 11 files changed, 263 insertions(+), 210 deletions(-) diff --git a/docs/version-overrides.md b/docs/version-overrides.md index fec5af7a62..4cb01621b4 100644 --- a/docs/version-overrides.md +++ b/docs/version-overrides.md @@ -2,6 +2,26 @@ This document lists the version overrides for vulnerable (nested) dependencies and the reason. -``` +## @ui5/cli -> @ui5/server -> router + +- waiting on UI5 fixes to be released +- may be necessary to upgrade to version 4 of the UI5 cli ``` +┌─────────────────────┬────────────────────────────────────────────────────────┐ +│ high │ path-to-regexp outputs backtracking regular │ +│ │ expressions │ +├─────────────────────┼────────────────────────────────────────────────────────┤ +│ Package │ path-to-regexp │ +├─────────────────────┼────────────────────────────────────────────────────────┤ +│ Vulnerable versions │ <0.1.10 │ +├─────────────────────┼────────────────────────────────────────────────────────┤ +│ Patched versions │ >=0.1.10 │ +├─────────────────────┼────────────────────────────────────────────────────────┤ +│ Paths │ packages\preview-middleware-client > @ui5/cli@3.8.0 > │ +│ │ @ui5/server@3.1.5 > router@1.3.8 > │ +│ │ path-to-regexp@0.1.7 │ +├─────────────────────┼────────────────────────────────────────────────────────┤ +│ More info │ https://github.com/advisories/GHSA-9wv6-86v2-598j │ +└─────────────────────┴────────────────────────────────────────────────────────┘ +``` diff --git a/package.json b/package.json index 38d5329e05..31887c8185 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "packageManager": "pnpm@8.14.0", "pnpm": { "overrides": { + "router>path-to-regexp": "0.1.10" } } } diff --git a/packages/adp-tooling/package.json b/packages/adp-tooling/package.json index 7ea04368ec..6787423b61 100644 --- a/packages/adp-tooling/package.json +++ b/packages/adp-tooling/package.json @@ -65,7 +65,7 @@ "@types/supertest": "2.0.12", "@types/uuid": "10.0.0", "dotenv": "16.3.1", - "express": "4.19.2", + "express": "4.21.0", "nock": "13.4.0", "rimraf": "5.0.5", "supertest": "6.3.3" diff --git a/packages/backend-proxy-middleware/package.json b/packages/backend-proxy-middleware/package.json index 1471e151f8..b1d2f4fc2c 100644 --- a/packages/backend-proxy-middleware/package.json +++ b/packages/backend-proxy-middleware/package.json @@ -48,7 +48,7 @@ "@types/prompts": "2.4.4", "@types/proxy-from-env": "1.0.1", "@types/supertest": "2.0.12", - "express": "4.19.2", + "express": "4.21.0", "nock": "13.4.0", "supertest": "6.3.3", "yaml": "2.2.2" diff --git a/packages/cards-editor-middleware/package.json b/packages/cards-editor-middleware/package.json index f38743f417..ac1880230c 100644 --- a/packages/cards-editor-middleware/package.json +++ b/packages/cards-editor-middleware/package.json @@ -35,7 +35,8 @@ "@types/ejs": "3.1.2", "@types/express": "4.17.21", "@types/supertest": "2.0.12", - "supertest": "6.3.3" + "supertest": "6.3.3", + "express": "4.21.0" }, "peerDependencies": { "express": "4" diff --git a/packages/control-property-editor/package.json b/packages/control-property-editor/package.json index fe4b488ff2..18f829ad7e 100644 --- a/packages/control-property-editor/package.json +++ b/packages/control-property-editor/package.json @@ -37,7 +37,7 @@ "@types/remote-redux-devtools": "0.5.4", "@types/source-map-support": "0.5.0", "@types/react": "16.14.55", - "body-parser": "1.20.1", + "body-parser": "1.20.3", "eslint-plugin-react": "7.33.2", "http-proxy-middleware": "1.3.1", "i18next": "20.6.1", diff --git a/packages/preview-middleware/package.json b/packages/preview-middleware/package.json index fff8836ea5..df1ac4424e 100644 --- a/packages/preview-middleware/package.json +++ b/packages/preview-middleware/package.json @@ -61,7 +61,7 @@ "copyfiles": "2.4.1", "@types/mem-fs": "1.1.2", "@types/mem-fs-editor": "7.0.1", - "express": "4.19.2", + "express": "4.21.0", "npm-run-all2": "6.2.0", "nock": "13.4.0", "supertest": "6.3.3", diff --git a/packages/reload-middleware/package.json b/packages/reload-middleware/package.json index ae04d08675..547f329853 100644 --- a/packages/reload-middleware/package.json +++ b/packages/reload-middleware/package.json @@ -45,7 +45,7 @@ "@types/livereload": "0.9.5", "@types/supertest": "2.0.12", "axios": "1.7.4", - "express": "4.19.2", + "express": "4.21.0", "supertest": "6.3.3" }, "engines": { diff --git a/packages/serve-static-middleware/package.json b/packages/serve-static-middleware/package.json index 17eb6814b2..5bf38f2a46 100644 --- a/packages/serve-static-middleware/package.json +++ b/packages/serve-static-middleware/package.json @@ -36,8 +36,8 @@ "@sap-ux/logger": "workspace:*" }, "devDependencies": { - "express": "4.19.2", - "serve-static": "1.15.0", + "express": "4.21.0", + "serve-static": "1.16.2", "supertest": "6.3.3", "@types/express": "4.17.21", "@types/serve-static": "1.15.5", diff --git a/packages/ui5-proxy-middleware/package.json b/packages/ui5-proxy-middleware/package.json index a2be82de38..4f6d34807a 100644 --- a/packages/ui5-proxy-middleware/package.json +++ b/packages/ui5-proxy-middleware/package.json @@ -46,7 +46,7 @@ "@types/express": "4.17.21", "@types/supertest": "2.0.12", "@types/proxy-from-env": "1.0.1", - "express": "4.19.2", + "express": "4.21.0", "nock": "13.4.0", "supertest": "6.3.3", "yaml": "2.2.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38350975e0..3031e554ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + router>path-to-regexp: 0.1.10 + importers: .: @@ -213,13 +216,13 @@ importers: version: 8.5.12 babel-loader: specifier: 9.1.3 - version: 9.1.3(@babel/core@7.22.20)(webpack@5.93.0) + version: 9.1.3(@babel/core@7.22.20)(webpack@5.94.0) copyfiles: specifier: 2.4.1 version: 2.4.1 css-loader: specifier: 6.8.1 - version: 6.8.1(webpack@5.93.0) + version: 6.8.1(webpack@5.94.0) eslint-plugin-react: specifier: 7.33.2 version: 7.33.2(eslint@8.57.0) @@ -246,19 +249,19 @@ importers: version: 1.66.1 sass-loader: specifier: 13.3.2 - version: 13.3.2(sass@1.66.1)(webpack@5.93.0) + version: 13.3.2(sass@1.66.1)(webpack@5.94.0) storybook: specifier: 8.1.11 version: 8.1.11(@babel/preset-env@7.22.20)(react-dom@16.14.0)(react@16.14.0) storybook-addon-turbo-build: specifier: 2.0.1 - version: 2.0.1(webpack@5.93.0) + version: 2.0.1(webpack@5.94.0) style-loader: specifier: 3.3.3 - version: 3.3.3(webpack@5.93.0) + version: 3.3.3(webpack@5.94.0) ts-loader: specifier: 9.4.4 - version: 9.4.4(typescript@5.3.3)(webpack@5.93.0) + version: 9.4.4(typescript@5.3.3)(webpack@5.94.0) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@18.11.9)(typescript@5.3.3) @@ -492,8 +495,8 @@ importers: specifier: 16.3.1 version: 16.3.1 express: - specifier: 4.19.2 - version: 4.19.2 + specifier: 4.21.0 + version: 4.21.0 nock: specifier: 13.4.0 version: 13.4.0 @@ -697,8 +700,8 @@ importers: specifier: 2.0.12 version: 2.0.12 express: - specifier: 4.19.2 - version: 4.19.2 + specifier: 4.21.0 + version: 4.21.0 nock: specifier: 13.4.0 version: 13.4.0 @@ -801,9 +804,6 @@ importers: ejs: specifier: 3.1.10 version: 3.1.10 - express: - specifier: '4' - version: 4.19.2 devDependencies: '@types/ejs': specifier: 3.1.2 @@ -814,6 +814,9 @@ importers: '@types/supertest': specifier: 2.0.12 version: 2.0.12 + express: + specifier: 4.21.0 + version: 4.21.0 supertest: specifier: 6.3.3 version: 6.3.3 @@ -931,8 +934,8 @@ importers: specifier: 10.4.7 version: 10.4.7(postcss@8.4.31) body-parser: - specifier: 1.20.1 - version: 1.20.1 + specifier: 1.20.3 + version: 1.20.3 ejs: specifier: 3.1.10 version: 3.1.10 @@ -2071,8 +2074,8 @@ importers: specifier: 16.3.1 version: 16.3.1 express: - specifier: 4.19.2 - version: 4.19.2 + specifier: 4.21.0 + version: 4.21.0 nock: specifier: 13.4.0 version: 13.4.0 @@ -2209,8 +2212,8 @@ importers: specifier: 1.7.4 version: 1.7.4 express: - specifier: 4.19.2 - version: 4.19.2 + specifier: 4.21.0 + version: 4.21.0 supertest: specifier: 6.3.3 version: 6.3.3 @@ -2231,11 +2234,11 @@ importers: specifier: 2.0.12 version: 2.0.12 express: - specifier: 4.19.2 - version: 4.19.2 + specifier: 4.21.0 + version: 4.21.0 serve-static: - specifier: 1.15.0 - version: 1.15.0 + specifier: 1.16.2 + version: 1.16.2 supertest: specifier: 6.3.3 version: 6.3.3 @@ -2453,13 +2456,13 @@ importers: version: 29.7.0(@babel/core@7.22.20) babel-loader: specifier: 9.1.3 - version: 9.1.3(@babel/core@7.22.20)(webpack@5.93.0) + version: 9.1.3(@babel/core@7.22.20)(webpack@5.94.0) copyfiles: specifier: 2.4.1 version: 2.4.1 css-loader: specifier: 6.8.1 - version: 6.8.1(webpack@5.93.0) + version: 6.8.1(webpack@5.94.0) enzyme: specifier: 3.11.0 version: 3.11.0 @@ -2495,19 +2498,19 @@ importers: version: 1.66.1 sass-loader: specifier: 13.3.2 - version: 13.3.2(sass@1.66.1)(webpack@5.93.0) + version: 13.3.2(sass@1.66.1)(webpack@5.94.0) storybook: specifier: 8.1.11 version: 8.1.11(@babel/preset-env@7.22.20)(react-dom@16.14.0)(react@16.14.0) storybook-addon-turbo-build: specifier: 2.0.1 - version: 2.0.1(webpack@5.93.0) + version: 2.0.1(webpack@5.94.0) style-loader: specifier: 3.3.3 - version: 3.3.3(webpack@5.93.0) + version: 3.3.3(webpack@5.94.0) ts-loader: specifier: 9.4.4 - version: 9.4.4(typescript@5.3.3)(webpack@5.93.0) + version: 9.4.4(typescript@5.3.3)(webpack@5.94.0) typescript: specifier: 5.3.3 version: 5.3.3 @@ -2571,13 +2574,13 @@ importers: version: 29.7.0(@babel/core@7.22.20) babel-loader: specifier: 9.1.3 - version: 9.1.3(@babel/core@7.22.20)(webpack@5.93.0) + version: 9.1.3(@babel/core@7.22.20)(webpack@5.94.0) copyfiles: specifier: 2.4.1 version: 2.4.1 css-loader: specifier: 6.8.1 - version: 6.8.1(webpack@5.93.0) + version: 6.8.1(webpack@5.94.0) eslint-plugin-react: specifier: 7.33.2 version: 7.33.2(eslint@8.57.0) @@ -2604,19 +2607,19 @@ importers: version: 1.66.1 sass-loader: specifier: 13.3.2 - version: 13.3.2(sass@1.66.1)(webpack@5.93.0) + version: 13.3.2(sass@1.66.1)(webpack@5.94.0) storybook: specifier: 8.1.11 version: 8.1.11(@babel/preset-env@7.22.20)(react-dom@16.14.0)(react@16.14.0) storybook-addon-turbo-build: specifier: 2.0.1 - version: 2.0.1(webpack@5.93.0) + version: 2.0.1(webpack@5.94.0) style-loader: specifier: 3.3.3 - version: 3.3.3(webpack@5.93.0) + version: 3.3.3(webpack@5.94.0) ts-loader: specifier: 9.4.4 - version: 9.4.4(typescript@5.3.3)(webpack@5.93.0) + version: 9.4.4(typescript@5.3.3)(webpack@5.94.0) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@18.11.9)(typescript@5.3.3) @@ -2942,8 +2945,8 @@ importers: specifier: 2.0.12 version: 2.0.12 express: - specifier: 4.19.2 - version: 4.19.2 + specifier: 4.21.0 + version: 4.21.0 nock: specifier: 13.4.0 version: 13.4.0 @@ -3205,7 +3208,7 @@ packages: '@babel/traverse': 7.24.6 '@babel/types': 7.24.6 convert-source-map: 1.8.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3251,7 +3254,7 @@ packages: '@babel/traverse': 7.24.6 '@babel/types': 7.24.6 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3274,7 +3277,7 @@ packages: '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 convert-source-map: 2.0.0 - debug: 4.3.6 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3450,7 +3453,7 @@ packages: '@babel/core': 7.22.20 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.5 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3465,7 +3468,7 @@ packages: '@babel/core': 7.22.20 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.5 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3480,7 +3483,7 @@ packages: '@babel/core': 7.24.6 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.5 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -5839,7 +5842,7 @@ packages: '@babel/helper-split-export-declaration': 7.24.6 '@babel/parser': 7.24.6 '@babel/types': 7.24.6 - debug: 4.3.5 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5853,7 +5856,7 @@ packages: '@babel/parser': 7.25.3 '@babel/template': 7.25.0 '@babel/types': 7.25.2 - debug: 4.3.6 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -6456,7 +6459,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.6 + debug: 4.3.7 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -6785,7 +6788,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.5 + debug: 4.3.7 minimatch: 3.0.5 transitivePeerDependencies: - supports-color @@ -8202,7 +8205,7 @@ packages: ejs: 3.1.10 esbuild: 0.19.2 esbuild-plugin-alias: 0.2.1 - express: 4.19.2 + express: 4.21.0 fs-extra: 11.1.1 process: 0.11.10 util: 0.12.5 @@ -8236,7 +8239,7 @@ packages: constants-browserify: 1.0.0 css-loader: 6.8.1(webpack@5.88.0) es-module-lexer: 1.5.4 - express: 4.19.2 + express: 4.21.0 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.3.3)(webpack@5.88.0) fs-extra: 11.1.1 html-webpack-plugin: 5.5.0(webpack@5.88.0) @@ -8480,7 +8483,7 @@ packages: compression: 1.7.4 detect-port: 1.5.1 diff: 5.2.0 - express: 4.19.2 + express: 4.21.0 fs-extra: 11.1.1 globby: 14.0.2 lodash: 4.17.21 @@ -8724,7 +8727,7 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.5 + debug: 4.3.7 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.0.4 @@ -9179,13 +9182,6 @@ packages: '@types/estree': 1.0.1 dev: true - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 9.6.0 - '@types/estree': 1.0.5 - dev: true - /@types/eslint@8.4.6: resolution: {integrity: sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==} dependencies: @@ -9193,13 +9189,6 @@ packages: '@types/json-schema': 7.0.12 dev: true - /@types/eslint@9.6.0: - resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: true - /@types/estree@0.0.51: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true @@ -9366,10 +9355,6 @@ packages: /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - /@types/json-stable-stringify@1.0.36: resolution: {integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==} dev: true @@ -9953,7 +9938,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.3.3) '@typescript-eslint/utils': 7.18.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.6 + debug: 4.3.7 eslint: 8.56.0 ts-api-utils: 1.3.0(typescript@5.3.3) typescript: 5.3.3 @@ -9973,7 +9958,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.3.3) '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.5 + debug: 4.3.7 eslint: 8.57.0 ts-api-utils: 1.2.1(typescript@5.3.3) typescript: 5.3.3 @@ -10007,7 +9992,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -10028,7 +10013,7 @@ packages: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.6 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -10050,7 +10035,7 @@ packages: dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -10266,13 +10251,13 @@ packages: '@ui5/builder': 3.2.0 '@ui5/fs': 3.0.5 '@ui5/logger': 3.0.0 - body-parser: 1.20.2 + body-parser: 1.20.3 compression: 1.7.4 cors: 2.8.5 devcert-sanscache: 0.4.8 escape-html: 1.0.3 etag: 1.8.1 - express: 4.19.2 + express: 4.21.0 fresh: 0.5.2 graceful-fs: 4.2.11 mime-types: 2.1.35 @@ -10619,6 +10604,7 @@ packages: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 + dev: true /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -10696,7 +10682,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -10704,7 +10690,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -10713,7 +10699,7 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -10722,7 +10708,7 @@ packages: resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.7 depd: 2.0.0 humanize-ms: 1.2.1 transitivePeerDependencies: @@ -10833,7 +10819,6 @@ packages: engines: {node: '>=0.10.0'} requiresBuild: true dev: false - optional: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -11018,6 +11003,7 @@ packages: /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: true /array-flatten@3.0.0: resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} @@ -11316,7 +11302,7 @@ packages: - supports-color dev: true - /babel-loader@9.1.3(@babel/core@7.22.20)(webpack@5.93.0): + /babel-loader@9.1.3(@babel/core@7.22.20)(webpack@5.94.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -11326,7 +11312,7 @@ packages: '@babel/core': 7.22.20 find-cache-dir: 4.0.0 schema-utils: 4.0.0 - webpack: 5.93.0(esbuild@0.19.2) + webpack: 5.94.0(esbuild@0.19.2) dev: true /babel-plugin-istanbul@6.1.1: @@ -11531,8 +11517,8 @@ packages: requiresBuild: true optional: true - /bare-fs@2.3.1: - resolution: {integrity: sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==} + /bare-fs@2.3.4: + resolution: {integrity: sha512-7YyxitZEq0ey5loOF5gdo1fZQFF7290GziT+VbAJ+JbYTJYaPZwuEz2r/Nq23sm4fjyTgUf2uJI2gkT3xAuSYA==} requiresBuild: true dependencies: bare-events: 2.4.2 @@ -11617,8 +11603,8 @@ packages: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + /body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 @@ -11629,32 +11615,13 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: - supports-color + dev: true /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -11806,6 +11773,7 @@ packages: /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + dev: true /cacache@17.1.3: resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} @@ -12194,7 +12162,6 @@ packages: engines: {node: '>=0.10.0'} requiresBuild: true dev: false - optional: true /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} @@ -12346,7 +12313,7 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 dev: true /compression@1.7.4: @@ -12402,10 +12369,12 @@ packages: engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 + dev: true /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + dev: true /continuation-local-storage@3.2.1: resolution: {integrity: sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==} @@ -12425,10 +12394,12 @@ packages: /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: true /cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + dev: true /cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} @@ -12559,7 +12530,7 @@ packages: webpack: 5.88.0(esbuild@0.19.2) dev: true - /css-loader@6.8.1(webpack@5.93.0): + /css-loader@6.8.1(webpack@5.94.0): resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -12573,7 +12544,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.31) postcss-value-parser: 4.2.0 semver: 7.5.4 - webpack: 5.93.0(esbuild@0.19.2) + webpack: 5.94.0(esbuild@0.19.2) dev: true /css-select@4.3.0: @@ -12708,6 +12679,7 @@ packages: optional: true dependencies: ms: 2.0.0 + dev: true /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -12740,6 +12712,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} @@ -12751,6 +12724,18 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true + + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -12793,7 +12778,7 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 - side-channel: 1.0.4 + side-channel: 1.0.6 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.15 @@ -12907,6 +12892,7 @@ packages: /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: true /detect-content-type@1.2.0: resolution: {integrity: sha512-YCBxuqJLY9rMxV44Ict2kNgjYFN3v1dnsn6sJvd6sUwwU1TWP3D+K2dr/S9AF/fio2/RsAKYdRiEOtNoRbmiag==} @@ -12948,7 +12934,7 @@ packages: resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} dependencies: address: 1.2.2 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -13170,6 +13156,7 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: true /ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} @@ -13217,6 +13204,12 @@ packages: /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + dev: true + + /encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + dev: true /encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -13704,7 +13697,7 @@ packages: dev: true optional: true - /esbuild-loader@3.2.0(webpack@5.93.0): + /esbuild-loader@3.2.0(webpack@5.94.0): resolution: {integrity: sha512-lnIdRMQpk50alCa0QoW0ozc0D3rjJXl02mtMsk9INIcW25RPZhDja332bu85ixwVNbhQ7VfBRcQyZ/qza8mWiA==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -13712,7 +13705,7 @@ packages: esbuild: 0.19.2 get-tsconfig: 4.7.0 loader-utils: 2.0.4 - webpack: 5.93.0(esbuild@0.19.2) + webpack: 5.94.0(esbuild@0.19.2) webpack-sources: 1.4.3 dev: true @@ -13755,7 +13748,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.6 + debug: 4.3.7 esbuild: 0.19.2 transitivePeerDependencies: - supports-color @@ -13877,6 +13870,7 @@ packages: /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -14306,6 +14300,7 @@ packages: /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + dev: true /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} @@ -14395,36 +14390,36 @@ packages: /exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + /express@4.21.0: + resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -14432,6 +14427,7 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color + dev: true /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -14453,7 +14449,7 @@ packages: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} dependencies: - debug: 4.3.5 + debug: 4.3.7 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -14595,12 +14591,12 @@ packages: dependencies: to-regex-range: 5.0.1 - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + /finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -14608,6 +14604,7 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color + dev: true /find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} @@ -14655,7 +14652,7 @@ packages: dependencies: chalk: 4.1.2 commander: 5.1.0 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: false @@ -14827,6 +14824,7 @@ packages: /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + dev: true /fraction.js@4.3.6: resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} @@ -14835,6 +14833,7 @@ packages: /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + dev: true /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -15097,7 +15096,7 @@ packages: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -15339,7 +15338,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.19.2 + uglify-js: 3.19.3 dev: true /has-bigints@1.0.2: @@ -15560,6 +15559,7 @@ packages: setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 + dev: true /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -15567,7 +15567,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -15576,7 +15576,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -15586,7 +15586,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -15655,7 +15655,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -15665,7 +15665,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -15907,7 +15907,7 @@ packages: dependencies: get-intrinsic: 1.2.4 has: 1.0.3 - side-channel: 1.0.4 + side-channel: 1.0.6 dev: true /internal-slot@1.0.7: @@ -15916,7 +15916,7 @@ packages: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.4 + side-channel: 1.0.6 dev: true /interpret@1.4.0: @@ -15947,6 +15947,7 @@ packages: /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + dev: true /is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} @@ -16099,7 +16100,6 @@ packages: dependencies: number-is-nan: 1.0.1 dev: false - optional: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -16449,7 +16449,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.6 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -17741,6 +17741,7 @@ packages: /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + dev: true /mem-fs-editor@9.4.0(mem-fs@2.1.0): resolution: {integrity: sha512-HSSOLSVRrsDdui9I6i96dDtG+oAez/4EB2g4cjSrNhgNQ3M+L57/+22NuPdORSoxvOHjIg/xeOE+C0wwF91D2g==} @@ -17799,8 +17800,9 @@ packages: engines: {node: '>= 0.10.0'} dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + /merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + dev: true /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -17817,11 +17819,12 @@ packages: /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + dev: true /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - debug: 4.3.6 + debug: 4.3.7 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -17845,6 +17848,11 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + /mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + dev: true + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -17854,10 +17862,13 @@ packages: /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} + hasBin: true + dev: true /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} + hasBin: true dev: true /mimic-fn@2.1.0: @@ -18032,6 +18043,7 @@ packages: /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -18469,7 +18481,6 @@ packages: engines: {node: '>=0.10.0'} requiresBuild: true dev: false - optional: true /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} @@ -18716,6 +18727,7 @@ packages: engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 + dev: true /on-headers@1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} @@ -18939,7 +18951,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.5 + debug: 4.3.7 get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 @@ -19105,6 +19117,7 @@ packages: /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + dev: true /pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -19159,8 +19172,9 @@ packages: lru-cache: 10.4.3 minipass: 7.1.2 - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + /path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + dev: true /path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -19593,13 +19607,14 @@ packages: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + dev: true /proxy-agent@6.4.0: resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.5 + debug: 4.3.7 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -19694,6 +19709,13 @@ packages: dependencies: side-channel: 1.0.4 + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + dev: true + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} @@ -19749,15 +19771,6 @@ packages: /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 dev: true /raw-body@2.5.2: @@ -19768,6 +19781,7 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 + dev: true /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} @@ -20382,7 +20396,7 @@ packages: resolution: {integrity: sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==} engines: {node: '>=8.6.0'} dependencies: - debug: 4.3.6 + debug: 4.3.7 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -20554,7 +20568,7 @@ packages: debug: 2.6.9 methods: 1.1.2 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 setprototypeof: 1.2.0 utils-merge: 1.0.1 transitivePeerDependencies: @@ -20663,7 +20677,7 @@ packages: postcss: 8.4.31 dev: false - /sass-loader@13.3.2(sass@1.66.1)(webpack@5.93.0): + /sass-loader@13.3.2(sass@1.66.1)(webpack@5.94.0): resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -20684,7 +20698,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.66.1 - webpack: 5.93.0(esbuild@0.19.2) + webpack: 5.94.0(esbuild@0.19.2) dev: true /sass@1.66.1: @@ -20776,8 +20790,8 @@ packages: engines: {node: '>=10'} dev: true - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + /send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 @@ -20795,6 +20809,7 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color + dev: true /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} @@ -20808,16 +20823,17 @@ packages: randombytes: 2.1.0 dev: true - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + /serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color + dev: true /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -20846,6 +20862,7 @@ packages: /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true /shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} @@ -20900,6 +20917,16 @@ packages: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -20979,7 +21006,7 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 socks: 2.8.1 transitivePeerDependencies: - supports-color @@ -20990,7 +21017,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.5 + debug: 4.3.7 socks: 2.8.1 transitivePeerDependencies: - supports-color @@ -21001,7 +21028,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.7 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -21125,7 +21152,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.6 + debug: 4.3.7 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -21139,7 +21166,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.6 + debug: 4.3.7 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -21185,15 +21212,16 @@ packages: /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + dev: true /store2@2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true - /storybook-addon-turbo-build@2.0.1(webpack@5.93.0): + /storybook-addon-turbo-build@2.0.1(webpack@5.94.0): resolution: {integrity: sha512-NP9e42fOmhkRe93okDlmIJ+2m+j4c9HZSa8EQJPJiJBQiAZ6MrjL6v0jzMukcwhIlu91RtHSkjlACm3xbi9jWQ==} dependencies: - esbuild-loader: 3.2.0(webpack@5.93.0) + esbuild-loader: 3.2.0(webpack@5.94.0) transitivePeerDependencies: - webpack dev: true @@ -21253,7 +21281,6 @@ packages: is-fullwidth-code-point: 1.0.0 strip-ansi: 3.0.1 dev: false - optional: true /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -21281,7 +21308,7 @@ packages: has-symbols: 1.0.3 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.2 - side-channel: 1.0.4 + side-channel: 1.0.6 dev: true /string.prototype.padend@3.1.6: @@ -21376,7 +21403,6 @@ packages: dependencies: ansi-regex: 2.1.1 dev: false - optional: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -21479,13 +21505,13 @@ packages: webpack: 5.88.0(esbuild@0.19.2) dev: true - /style-loader@3.3.3(webpack@5.93.0): + /style-loader@3.3.3(webpack@5.94.0): resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.93.0(esbuild@0.19.2) + webpack: 5.94.0(esbuild@0.19.2) dev: true /stylis@4.2.0: @@ -21498,7 +21524,7 @@ packages: dependencies: component-emitter: 1.3.0 cookiejar: 2.1.4 - debug: 4.3.5 + debug: 4.3.7 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.1 @@ -21575,7 +21601,7 @@ packages: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.1 + bare-fs: 2.3.4 bare-path: 2.1.3 dev: true @@ -21640,7 +21666,7 @@ packages: engines: {node: '>=8'} dev: true - /terser-webpack-plugin@5.3.10(esbuild@0.19.2)(webpack@5.93.0): + /terser-webpack-plugin@5.3.10(esbuild@0.19.2)(webpack@5.94.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -21661,8 +21687,8 @@ packages: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.6 - webpack: 5.93.0(esbuild@0.19.2) + terser: 5.32.0 + webpack: 5.94.0(esbuild@0.19.2) dev: true /terser-webpack-plugin@5.3.9(esbuild@0.19.2)(webpack@5.88.0): @@ -21700,8 +21726,8 @@ packages: source-map-support: 0.5.21 dev: true - /terser@5.31.6: - resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} + /terser@5.32.0: + resolution: {integrity: sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -21783,6 +21809,7 @@ packages: /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + dev: true /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} @@ -21892,7 +21919,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-loader@9.4.4(typescript@5.3.3)(webpack@5.93.0): + /ts-loader@9.4.4(typescript@5.3.3)(webpack@5.94.0): resolution: {integrity: sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==} engines: {node: '>=12.0.0'} peerDependencies: @@ -21904,7 +21931,7 @@ packages: micromatch: 4.0.5 semver: 7.5.4 typescript: 5.3.3 - webpack: 5.93.0(esbuild@0.19.2) + webpack: 5.94.0(esbuild@0.19.2) dev: true /ts-node@10.9.2(@types/node@18.11.9)(typescript@5.3.3): @@ -21981,7 +22008,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/models': 1.0.4 - debug: 4.3.4 + debug: 4.3.7 make-fetch-happen: 11.1.1 transitivePeerDependencies: - supports-color @@ -21992,7 +22019,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@tufjs/models': 2.0.0 - debug: 4.3.6 + debug: 4.3.7 make-fetch-happen: 13.0.0 transitivePeerDependencies: - supports-color @@ -22066,6 +22093,7 @@ packages: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 + dev: true /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} @@ -22168,9 +22196,10 @@ packages: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: true - /uglify-js@3.19.2: - resolution: {integrity: sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==} + /uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} + hasBin: true requiresBuild: true dev: true optional: true @@ -22353,6 +22382,7 @@ packages: /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + dev: true /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -22525,6 +22555,7 @@ packages: /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + dev: true /uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} @@ -22566,6 +22597,7 @@ packages: /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + dev: true /vfile-message@2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} @@ -22771,8 +22803,8 @@ packages: - uglify-js dev: true - /webpack@5.93.0(esbuild@0.19.2): - resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} + /webpack@5.94.0(esbuild@0.19.2): + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -22781,7 +22813,6 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 @@ -22802,7 +22833,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.19.2)(webpack@5.93.0) + terser-webpack-plugin: 5.3.10(esbuild@0.19.2)(webpack@5.94.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -22921,7 +22952,7 @@ packages: /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: - string-width: 4.2.3 + string-width: 1.0.2 dev: false /widest-line@4.0.1: