@bootkit/ng0 0.0.0-alpha.53 → 0.0.0-alpha.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/bootkit-ng0-form.mjs +46 -15
- package/fesm2022/bootkit-ng0-form.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-http.mjs +56 -27
- package/fesm2022/bootkit-ng0-http.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization-locales.mjs +6 -2
- package/fesm2022/bootkit-ng0-localization-locales.mjs.map +1 -1
- package/form/index.d.ts +3 -3
- package/http/index.d.ts +21 -1
- package/package.json +1 -1
|
@@ -486,9 +486,9 @@ function fileMaxSizeValidator(size) {
|
|
|
486
486
|
let value = control?.value;
|
|
487
487
|
if (value instanceof File) {
|
|
488
488
|
return value.size > size ? {
|
|
489
|
-
|
|
489
|
+
fileMaxSize: {
|
|
490
490
|
file: value,
|
|
491
|
-
|
|
491
|
+
max: size,
|
|
492
492
|
multiple: false
|
|
493
493
|
}
|
|
494
494
|
} : null;
|
|
@@ -498,10 +498,10 @@ function fileMaxSizeValidator(size) {
|
|
|
498
498
|
for (let i = 0; i < fileList.length; i++) {
|
|
499
499
|
if (fileList[i].size > size) {
|
|
500
500
|
return {
|
|
501
|
-
|
|
501
|
+
fileMaxSize: {
|
|
502
502
|
file: fileList[i],
|
|
503
503
|
fileList: fileList,
|
|
504
|
-
|
|
504
|
+
max: size,
|
|
505
505
|
multiple: true
|
|
506
506
|
}
|
|
507
507
|
};
|
|
@@ -536,17 +536,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
|
|
|
536
536
|
}]
|
|
537
537
|
}], propDecorators: { fileMaxSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "ng0FileMaxSize", required: true }] }] } });
|
|
538
538
|
|
|
539
|
+
function getExtension(filename) {
|
|
540
|
+
const parts = filename.split('.');
|
|
541
|
+
return parts.length > 1 ? parts.pop().toLowerCase() : '';
|
|
542
|
+
}
|
|
539
543
|
function fileExtensionValidator(allowedExtensions) {
|
|
540
544
|
return (control) => {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
545
|
+
if (allowedExtensions === undefined) {
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
let value = control?.value;
|
|
549
|
+
if (value instanceof File) {
|
|
550
|
+
const ext = getExtension(value.name);
|
|
551
|
+
if (!allowedExtensions.includes(ext)) {
|
|
552
|
+
return {
|
|
553
|
+
fileExtension: {
|
|
554
|
+
file: value,
|
|
555
|
+
extension: ext,
|
|
556
|
+
allowedExtensions: allowedExtensions,
|
|
557
|
+
}
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
return null;
|
|
561
|
+
}
|
|
562
|
+
else if (value?.length > 0) {
|
|
563
|
+
const fileList = value;
|
|
564
|
+
for (let i = 0; i < fileList.length; i++) {
|
|
565
|
+
const ext = getExtension(fileList[i].name);
|
|
566
|
+
if (!allowedExtensions.includes(ext)) {
|
|
567
|
+
return {
|
|
568
|
+
fileExtension: {
|
|
569
|
+
file: fileList[i],
|
|
570
|
+
extension: ext,
|
|
571
|
+
allowedExtensions: allowedExtensions
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return null;
|
|
577
|
+
}
|
|
578
|
+
else {
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
550
581
|
};
|
|
551
582
|
}
|
|
552
583
|
|
|
@@ -559,13 +590,13 @@ class FileExtensionValidatorDirective {
|
|
|
559
590
|
return fileExtensionValidator(this.allowedExtensions())(control);
|
|
560
591
|
}
|
|
561
592
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FileExtensionValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
562
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.11", type: FileExtensionValidatorDirective, isStandalone: true, selector: "[ngModel][ng0File][ng0FileExtension]", inputs: { allowedExtensions: { classPropertyName: "allowedExtensions", publicName: "ng0FileExtension", isSignal: true, isRequired: true, transformFunction: null } }, providers: [{ provide: NG_VALIDATORS, useExisting: FileExtensionValidatorDirective, multi: true, }], exportAs: ["
|
|
593
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.11", type: FileExtensionValidatorDirective, isStandalone: true, selector: "[ngModel][ng0File][ng0FileExtension]", inputs: { allowedExtensions: { classPropertyName: "allowedExtensions", publicName: "ng0FileExtension", isSignal: true, isRequired: true, transformFunction: null } }, providers: [{ provide: NG_VALIDATORS, useExisting: FileExtensionValidatorDirective, multi: true, }], exportAs: ["ng0FileExtension"], ngImport: i0 });
|
|
563
594
|
}
|
|
564
595
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FileExtensionValidatorDirective, decorators: [{
|
|
565
596
|
type: Directive,
|
|
566
597
|
args: [{
|
|
567
598
|
selector: '[ngModel][ng0File][ng0FileExtension]',
|
|
568
|
-
exportAs: '
|
|
599
|
+
exportAs: 'ng0FileExtension',
|
|
569
600
|
standalone: true,
|
|
570
601
|
providers: [{ provide: NG_VALIDATORS, useExisting: FileExtensionValidatorDirective, multi: true, }],
|
|
571
602
|
}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-form.mjs","sources":["../../../projects/ng0/form/focus.directive.ts","../../../projects/ng0/form/number.directive.ts","../../../projects/ng0/form/file-value-accessor.ts","../../../projects/ng0/form/validation/validators/custom/custom-validator.directive.ts","../../../projects/ng0/form/validation/validators/equal-with/equal-with-validator.ts","../../../projects/ng0/form/validation/validators/equal-with/equal-with.directive.ts","../../../projects/ng0/form/validation/validators/file-min-size/file-min-size-validator.ts","../../../projects/ng0/form/validation/validators/file-min-size/file-min-size.directive.ts","../../../projects/ng0/form/validation/validators/file-max-size/file-max-size-validator.ts","../../../projects/ng0/form/validation/validators/file-max-size/file-max-size.directive.ts","../../../projects/ng0/form/validation/validators/file-extension/file-extension-validator.ts","../../../projects/ng0/form/validation/validators/file-extension/file-extension.directive.ts","../../../projects/ng0/form/validation/validators/url/url-validator.ts","../../../projects/ng0/form/validation/validators/url/url-validator.directive.ts","../../../projects/ng0/form/validation/validators/min/min-validator.directive.ts","../../../projects/ng0/form/validation/validators/max/max-validator.directive.ts","../../../projects/ng0/form/validation/validation.module.ts","../../../projects/ng0/form/form.module.ts","../../../projects/ng0/form/public-api.ts","../../../projects/ng0/form/bootkit-ng0-form.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[ng0Focus]',\n exportAs: 'ng0Focus',\n standalone: true\n})\nexport class FocusDirective implements OnInit, OnChanges {\n /** \n * \n */\n @Input() focusOnLoad = true;\n @Input() focusWhen?: boolean;\n private focused = false;\n\n constructor(private elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n if (this.focusOnLoad) {\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['focusWhen']) {\n if (this.focusWhen) {\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n });\n }\n }\n }\n}\n","import { Directive, HostListener, forwardRef, ElementRef, Renderer2, input, booleanAttribute, numberAttribute, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { formatNumber } from '@angular/common';\n\nconst addThousandsSeparator = (str: string) => str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nconst isValidNumber = (str: string) => str.trim() !== '' && !isNaN(Number(str));\nconst removeChar = (str: string, charToRemove: string) => str.split(charToRemove).join('');\n\nconst Keys = {\n backspace: 'Backspace',\n tab: 'Tab',\n arrowLeft: 'ArrowLeft',\n arrowRight: 'ArrowRight',\n delete: 'Delete',\n home: 'Home',\n end: 'End'\n}\n\ninterface InputElementState {\n selectionStart: number;\n selectionEnd: number;\n isCursorInsideIntegerPart: boolean;\n decimalSeparatorPosition: number;\n}\n\n/**\n * Directive to allow only number input in text fields.\n * It supports integer and decimal numbers, negative numbers, min/max values, thousands separator.\n */\n@Directive({\n selector: '[ng0Number]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberDirective),\n multi: true\n }\n ]\n})\nexport class NumberDirective implements ControlValueAccessor {\n private _value?: number;\n private _isDisabled?: boolean;\n private _decimalSeparator!: string;\n private _thousandsSeparator: string = ',';\n private _onChangeCallback?: (v: any) => {};\n private _onTouchedCallback?: () => {};\n private _elmRef = inject(ElementRef<HTMLInputElement>);\n private _renderer = inject(Renderer2);\n\n /**\n * The minimum number of digits to display after the decimal point.\n * Applied only when 'numberType' is set to 'decimal'.\n * @default 1\n */\n public minFractionDigits = input(1, { transform: numberAttribute });\n\n /**\n * The maximum number of digits to display after the decimal point.\n * Applied only when 'numberType' is set to 'decimal'.\n * @default 2\n */\n public maxFractionDigits = input(2, { transform: numberAttribute });\n\n /**\n * Whether to use grouping separators, such as thousands separators\n * @default false\n */\n public useGrouping = input(false, { transform: booleanAttribute });\n\n /**\n * Type of numbers to allow\n * 'decimal' - allow decimal numbers\n * 'integer' - allow integer numbers only\n * @default 'integer'\n */\n public numberType = input<'integer' | 'decimal'>('integer');\n\n constructor() { }\n\n ngOnInit() {\n // Use Intl.NumberFormat to find decimal separator for locale\n const formatted = formatNumber(1.1, 'en', '1.1-1');\n this._decimalSeparator = formatted.replace(/\\d/g, '') || '.';\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this._isDisabled = isDisabled;\n this._renderer.setProperty(this._elmRef.nativeElement, 'disabled', isDisabled);\n }\n\n writeValue(value: any): void {\n var inputValue: string;\n\n if (value === undefined || value === null) {\n inputValue = '';\n this._value = undefined;\n } else if (typeof value === 'number') {\n inputValue = this._formatNumber(value);\n this._value = value;\n }\n else if (typeof value === 'string') {\n const parsedValue = this._value = Number.parseFloat(value);\n inputValue = this._formatNumber(parsedValue);\n } else {\n console.error('NumberDirective: Unsupported value type', value);\n inputValue = 'Invalid';\n }\n\n this._setProperty('value', inputValue);\n }\n\n @HostListener('keydown', ['$event'])\n protected _onKeyDown(event: KeyboardEvent) {\n const key = event.key;\n const state = this._getInputState();\n\n if (this._isKeyAllowed(key)) {\n if (key == Keys.backspace) {\n if (state.selectionStart > 1 && (state.selectionStart === state.selectionEnd)) {\n let value = this._elmRef.nativeElement.value;\n let beforeSelection = value.charAt(state.selectionStart - 1);\n if (beforeSelection === ',') {\n // If the character before the cursor is a comma, we need to skip it\n this._setProperty('selectionStart', state.selectionStart - 2);\n }\n }\n }\n } else {\n event.preventDefault();\n }\n }\n\n @HostListener('input', ['$event.target.value'])\n protected _onInput(value: string) {\n if (value === '') {\n this._value = undefined;\n this._onChangeCallback?.(undefined);\n return;\n }\n\n const state = this._getInputState();\n if (state.isCursorInsideIntegerPart && this.useGrouping()) {\n this._formatIntegerPart(value);\n }\n\n var number = Number(removeChar(this._elmRef.nativeElement.value, this._thousandsSeparator));\n this._value = isNaN(number) ? undefined : number;\n this._onChangeCallback?.(this._value);\n }\n\n private _formatIntegerPart(value: string) {\n let state = this._getInputState();\n\n // Format the input value\n const integerPart = value.split(this._decimalSeparator)[0];\n const decimalPart = value.split(this._decimalSeparator)[1];\n\n if (integerPart.length <= 3) {\n return;\n }\n\n let normalizedIntegerPart = removeChar(integerPart, this._thousandsSeparator); // Remove commas\n\n let formattedValue = addThousandsSeparator(normalizedIntegerPart);\n if (decimalPart !== undefined) {\n formattedValue += this._decimalSeparator + decimalPart;\n }\n\n this._setProperty('value', formattedValue);\n let newSelectionStart: number;\n\n\n // fix the cursor position after formatting\n if (value.length == 1) {\n newSelectionStart = 1;\n } else {\n const newValueLength = formattedValue.length;\n const cursorJump = newValueLength - value.length;\n newSelectionStart = Math.max(0, state.selectionStart + cursorJump);\n }\n\n this._setProperty('selectionStart', newSelectionStart);\n this._setProperty('selectionEnd', newSelectionStart);\n\n // return formattedValue;\n }\n\n @HostListener('blur')\n protected _onBlur() {\n if (this._value !== undefined) {\n let formattedValue = this._formatNumber(this._value);\n this._setProperty('value', formattedValue);\n }\n\n this._onTouchedCallback?.();\n }\n\n @HostListener('paste', ['$event'])\n protected _onPaste(event: ClipboardEvent) {\n // event.\n // value = value.trim();\n }\n\n private _getInputState(): InputElementState {\n let value = this._elmRef.nativeElement.value;\n let decimalSeparatorPosition = value.indexOf(this._decimalSeparator);\n let selectionStart = this._elmRef.nativeElement.selectionStart || 0;\n let selectionEnd = this._elmRef.nativeElement.selectionEnd || 0;\n\n return {\n selectionStart,\n selectionEnd,\n decimalSeparatorPosition,\n isCursorInsideIntegerPart: decimalSeparatorPosition > -1 ? (selectionStart <= decimalSeparatorPosition) : true\n }\n }\n\n private _formatNumber(n: number): string {\n var isInteger = this.numberType() == 'integer';\n return new Intl.NumberFormat('en-US', {\n useGrouping: this.useGrouping(),\n minimumFractionDigits: isInteger ? 0 : this.minFractionDigits(),\n maximumFractionDigits: isInteger ? 0 : this.maxFractionDigits(),\n style: 'decimal',\n }).format(n);\n }\n\n private _isKeyAllowed(key: string) {\n const allowedKeys = [Keys.backspace, Keys.tab, Keys.arrowLeft, Keys.arrowRight, Keys.delete, Keys.home, Keys.end];\n const input = this._elmRef.nativeElement;\n const value = input.value;\n const state = this._getInputState();\n\n if (allowedKeys.includes(key)) {\n return true; // allow control/navigation keys\n }\n\n // Allow one leading minus\n if (key === '-') {\n return (input.selectionStart === 0 || input.selectionEnd === 0) && value.charAt(0) !== '-';\n }\n\n // Allow one dot for decimal\n if (key === this._decimalSeparator) {\n return (this.numberType() == 'decimal') &&\n (!value.includes(this._decimalSeparator)) &&\n (state.selectionStart == input.value.length);\n }\n\n // Allow numbers only\n if (/^\\d$/.test(key)) {\n if (state.isCursorInsideIntegerPart) {\n return true;\n } else {\n var decimalPart = value.split(this._decimalSeparator)[1];\n var maxFractionDigits = this.maxFractionDigits();\n if (maxFractionDigits != undefined && decimalPart.length < maxFractionDigits) {\n return true;\n } else {\n return input.selectionStart !== input.selectionEnd; // allow a new digit if a substring is selected\n }\n }\n }\n\n return false;\n }\n\n private _setProperty(prop: string, value: any) {\n this._renderer.setProperty(this._elmRef.nativeElement, prop, value);\n };\n}\n","import { Directive, ElementRef, forwardRef, inject, Provider, Renderer2, } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * A ControlValueAccessor for file input elements. It supports both single and multiple file selection.\n * It assigns the selected file(s) to the form control's value and handles disabled state.\n * @see https://angular.dev/api/forms/ControlValueAccessor\n */\n@Directive({\n selector: 'input[type=file][ngModel][ng0File]',\n host: {\n '(blur)': '_touchedFn()',\n '(change)': '_onChange($event)',\n },\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileValueAccessor),\n multi: true,\n }],\n})\nexport class FileValueAccessor implements ControlValueAccessor {\n private readonly _renderer = inject(Renderer2);\n private readonly _elementRef = inject(ElementRef);\n protected _changeFn!: (value: any) => {};\n protected _touchedFn!: () => {};\n\n writeValue(value?: any): void {\n }\n\n registerOnChange(fn: any): void {\n this._changeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._touchedFn = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n protected _onChange(e: Event) {\n const input = e.target as HTMLInputElement;\n\n let value;\n if (input.files?.length) {\n value = input.multiple ? input.files : input.files[0]\n } else {\n value = undefined;\n }\n\n this._changeFn(value);\n }\n}","import { Directive, input, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[ng0CustomValidator]',\n exportAs: 'ng0CustomValidator',\n standalone: true,\n providers: [\n { provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true }\n ]\n})\nexport class CustomValidatorDirective implements Validator {\n validator = input.required<(value: any) => ValidationErrors | null>({alias: 'ng0CustomValidator'});\n\n constructor() { }\n\n validate(control: AbstractControl): ValidationErrors | null {\n return this.validator()(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function equalWithValidator(targetValue?: string, inequalityMessage?: string): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n const isValid = control.value === targetValue;\n\n return isValid ? null :\n {\n equalWith: {\n value: control.value,\n message: inequalityMessage\n }\n };\n };\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\nimport { equalWithValidator } from './equal-with-validator';\n\n@Directive({\n selector: '[ng0EqualWith]',\n exportAs: 'ng0EqualWith',\n standalone: true,\n providers: [\n { provide: NG_VALIDATORS, useExisting: EqualWithValidatorDirective, multi: true }\n ]\n})\nexport class EqualWithValidatorDirective implements Validator {\n @Input('ng0EqualWith') targetValue?: string;\n @Input() inequalityMessage?: string;\n\n constructor() {\n }\n\n validate(control: AbstractControl): { [key: string]: any } | null {\n return equalWithValidator(this.targetValue, this.inequalityMessage)(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function fileMinSizeValidator(size: number): ValidatorFn {\n if (size == null || size <= 0) {\n throw new Error('Size must be a positive number');\n }\n\n return (control: AbstractControl): { [key: string]: any } | null => {\n let value = control?.value as FileList | File | undefined;\n\n if (value instanceof File) {\n return value.size < size ? {\n fileMinSize: {\n file: value,\n min: size,\n multiple: false\n }\n } : null;\n } else if ((value as FileList)?.length > 0) {\n const fileList = value as FileList;\n\n for (let i = 0; i < fileList.length; i++) {\n if (fileList[i].size < size) {\n return {\n fileMinSize: {\n file: fileList[i],\n fileList: fileList,\n min: size,\n multiple: true\n }\n };\n }\n }\n return null;\n } else {\n return null;\n }\n };\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { fileMinSizeValidator } from './file-min-size-validator';\n\n@Directive({\n selector: '[ngModel][ng0File][ng0FileMinSize]',\n exportAs: 'ng0FileMinSize',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: FileMinSizeValidatorDirective, multi: true, }],\n})\nexport class FileMinSizeValidatorDirective implements Validator {\n /**\n * Minimum file size in bytes.\n */\n public readonly fileMinSize = input.required({ alias: 'ng0FileMinSize', transform: numberAttribute });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return fileMinSizeValidator(this.fileMinSize())(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function fileMaxSizeValidator(size: number): ValidatorFn {\n if (size == null || size <= 0) {\n throw new Error('Size must be a positive number');\n }\n\n return (control: AbstractControl): { [key: string]: any } | null => {\n let value = control?.value as FileList | File | undefined;\n\n if (value instanceof File) {\n return value.size > size ? {\n fileMinSize: {\n file: value,\n min: size,\n multiple: false\n }\n } : null;\n } else if ((value as FileList)?.length > 0) {\n const fileList = value as FileList;\n\n for (let i = 0; i < fileList.length; i++) {\n if (fileList[i].size > size) {\n return {\n fileMinSize: {\n file: fileList[i],\n fileList: fileList,\n min: size,\n multiple: true\n }\n };\n }\n }\n return null;\n } else {\n return null;\n }\n };\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { fileMaxSizeValidator } from './file-max-size-validator';\n\n@Directive({\n selector: '[ngModel][ng0File][ng0FileMaxSize]',\n exportAs: 'ng0FileMaxSize',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: FileMaxSizeValidatorDirective, multi: true, }],\n})\nexport class FileMaxSizeValidatorDirective implements Validator {\n /**\n * Maximum file size in bytes.\n */\n public readonly fileMaxSize = input.required({ alias: 'ng0FileMaxSize', transform: numberAttribute });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return fileMaxSizeValidator(this.fileMaxSize())(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function fileExtensionValidator(allowedExtensions: string[]): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n let file = control?.value;\n\n // const res = (file instanceof File && file.size > size) ? {\n // fileExtension: {\n // file: file,\n // max: size,\n // }\n // } : null;\n\n // return res;\n\n return null;\n };\n}\n","import { Directive, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { fileExtensionValidator } from './file-extension-validator';\n\n@Directive({\n selector: '[ngModel][ng0File][ng0FileExtension]',\n exportAs: 'ng0MaxFileSize',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: FileExtensionValidatorDirective, multi: true, }],\n})\nexport class FileExtensionValidatorDirective implements Validator {\n /**\n * Allowed file extensions.\n */\n public readonly allowedExtensions = input.required<string[]>({ alias: 'ng0FileExtension' });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return fileExtensionValidator(this.allowedExtensions())(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\nconst urlRegEx = new RegExp('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?');\n\nexport function urlValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n const value = (control.value as string);\n if (!value || urlRegEx.test(value)) {\n return null;\n } else {\n return {\n 'url': {\n value\n }\n };\n }\n };\n}","import { Directive, Input } from '@angular/core';\nimport { FormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { urlValidator } from './url-validator';\n\n@Directive({\n selector: 'input[ng0Url]',\n exportAs: 'ng0Url',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: UrlValidatorDirective, multi: true }]\n})\nexport class UrlValidatorDirective implements Validator {\n /** Directive is enabled or disabled */\n @Input() iscUrl?: boolean | string = true;\n\n validate(control: FormControl): ValidationErrors | null {\n return urlValidator()(control);\n }\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, Validators } from '@angular/forms';\n\n/** Min validator */\n@Directive({\n selector: 'input[type=text][ng0Number][min]',\n exportAs: 'ng0Min',\n standalone: true,\n providers: [{\n provide: NG_VALIDATORS,\n useExisting: MinValidatorDirective,\n multi: true\n }]\n})\nexport class MinValidatorDirective implements Validator {\n min = input.required<number, number | string | undefined | null>({\n transform: numberAttribute,\n });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return Validators.min(this.min())(control);\n }\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, Validators } from '@angular/forms';\n\n/** Max validator */\n@Directive({\n selector: 'input[type=text][ng0Number][max]',\n exportAs: 'ng0Max',\n standalone: true,\n providers: [{\n provide: NG_VALIDATORS,\n useExisting: MaxValidatorDirective,\n multi: true\n }]\n})\nexport class MaxValidatorDirective implements Validator {\n max = input.required<number, number | string | undefined | null>({\n transform: numberAttribute,\n });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return Validators.max(this.max())(control);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { EqualWithValidatorDirective } from './validators/equal-with/equal-with.directive';\nimport { UrlValidatorDirective } from './validators/url/url-validator.directive';\nimport { CustomValidatorDirective } from './validators/custom/custom-validator.directive';\nimport { MinValidatorDirective } from './validators/min/min-validator.directive';\nimport { MaxValidatorDirective } from './validators/max/max-validator.directive';\nimport { FileMaxSizeValidatorDirective } from './validators/file-max-size/file-max-size.directive';\nimport { FileMinSizeValidatorDirective } from './validators/file-min-size/file-min-size.directive';\nimport { FileExtensionValidatorDirective } from './validators/file-extension/file-extension.directive';\n\n\nconst items = [\n // Validators\n MinValidatorDirective,\n MaxValidatorDirective,\n FileMinSizeValidatorDirective,\n FileMaxSizeValidatorDirective,\n FileExtensionValidatorDirective,\n EqualWithValidatorDirective,\n UrlValidatorDirective,\n CustomValidatorDirective,\n\n\n // Directives\n];\n\n@NgModule({\n imports: items,\n exports: items,\n})\nexport class ValidationModule { }\n","import { NgModule } from '@angular/core';\nimport { NumberDirective } from './number.directive';\nimport { FileValueAccessor } from './file-value-accessor';\nimport { ValidationModule } from './validation';\n\nconst items = [\n ValidationModule,\n\n // ErrorDirective,\n // FirstErrorDirective,\n NumberDirective,\n FileValueAccessor,\n];\n\n/**\n * FormModule\n * \n */\n@NgModule({\n imports: items,\n exports: items,\n})\nexport class FormModule { }\n","export * from './focus.directive';\nexport * from './number.directive';\nexport * from './file-value-accessor';\nexport * from './form.module';\n\n// Validation\nexport * from './validation';\n// export * from './validation/error.directive';\n// export * from './validation/first-error.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["items"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-form.mjs","sources":["../../../projects/ng0/form/focus.directive.ts","../../../projects/ng0/form/number.directive.ts","../../../projects/ng0/form/file-value-accessor.ts","../../../projects/ng0/form/validation/validators/custom/custom-validator.directive.ts","../../../projects/ng0/form/validation/validators/equal-with/equal-with-validator.ts","../../../projects/ng0/form/validation/validators/equal-with/equal-with.directive.ts","../../../projects/ng0/form/validation/validators/file-min-size/file-min-size-validator.ts","../../../projects/ng0/form/validation/validators/file-min-size/file-min-size.directive.ts","../../../projects/ng0/form/validation/validators/file-max-size/file-max-size-validator.ts","../../../projects/ng0/form/validation/validators/file-max-size/file-max-size.directive.ts","../../../projects/ng0/form/validation/validators/file-extension/file-extension-validator.ts","../../../projects/ng0/form/validation/validators/file-extension/file-extension.directive.ts","../../../projects/ng0/form/validation/validators/url/url-validator.ts","../../../projects/ng0/form/validation/validators/url/url-validator.directive.ts","../../../projects/ng0/form/validation/validators/min/min-validator.directive.ts","../../../projects/ng0/form/validation/validators/max/max-validator.directive.ts","../../../projects/ng0/form/validation/validation.module.ts","../../../projects/ng0/form/form.module.ts","../../../projects/ng0/form/public-api.ts","../../../projects/ng0/form/bootkit-ng0-form.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[ng0Focus]',\n exportAs: 'ng0Focus',\n standalone: true\n})\nexport class FocusDirective implements OnInit, OnChanges {\n /** \n * \n */\n @Input() focusOnLoad = true;\n @Input() focusWhen?: boolean;\n private focused = false;\n\n constructor(private elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n if (this.focusOnLoad) {\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['focusWhen']) {\n if (this.focusWhen) {\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n });\n }\n }\n }\n}\n","import { Directive, HostListener, forwardRef, ElementRef, Renderer2, input, booleanAttribute, numberAttribute, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { formatNumber } from '@angular/common';\n\nconst addThousandsSeparator = (str: string) => str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nconst isValidNumber = (str: string) => str.trim() !== '' && !isNaN(Number(str));\nconst removeChar = (str: string, charToRemove: string) => str.split(charToRemove).join('');\n\nconst Keys = {\n backspace: 'Backspace',\n tab: 'Tab',\n arrowLeft: 'ArrowLeft',\n arrowRight: 'ArrowRight',\n delete: 'Delete',\n home: 'Home',\n end: 'End'\n}\n\ninterface InputElementState {\n selectionStart: number;\n selectionEnd: number;\n isCursorInsideIntegerPart: boolean;\n decimalSeparatorPosition: number;\n}\n\n/**\n * Directive to allow only number input in text fields.\n * It supports integer and decimal numbers, negative numbers, min/max values, thousands separator.\n */\n@Directive({\n selector: '[ng0Number]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberDirective),\n multi: true\n }\n ]\n})\nexport class NumberDirective implements ControlValueAccessor {\n private _value?: number;\n private _isDisabled?: boolean;\n private _decimalSeparator!: string;\n private _thousandsSeparator: string = ',';\n private _onChangeCallback?: (v: any) => {};\n private _onTouchedCallback?: () => {};\n private _elmRef = inject(ElementRef<HTMLInputElement>);\n private _renderer = inject(Renderer2);\n\n /**\n * The minimum number of digits to display after the decimal point.\n * Applied only when 'numberType' is set to 'decimal'.\n * @default 1\n */\n public minFractionDigits = input(1, { transform: numberAttribute });\n\n /**\n * The maximum number of digits to display after the decimal point.\n * Applied only when 'numberType' is set to 'decimal'.\n * @default 2\n */\n public maxFractionDigits = input(2, { transform: numberAttribute });\n\n /**\n * Whether to use grouping separators, such as thousands separators\n * @default false\n */\n public useGrouping = input(false, { transform: booleanAttribute });\n\n /**\n * Type of numbers to allow\n * 'decimal' - allow decimal numbers\n * 'integer' - allow integer numbers only\n * @default 'integer'\n */\n public numberType = input<'integer' | 'decimal'>('integer');\n\n constructor() { }\n\n ngOnInit() {\n // Use Intl.NumberFormat to find decimal separator for locale\n const formatted = formatNumber(1.1, 'en', '1.1-1');\n this._decimalSeparator = formatted.replace(/\\d/g, '') || '.';\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this._isDisabled = isDisabled;\n this._renderer.setProperty(this._elmRef.nativeElement, 'disabled', isDisabled);\n }\n\n writeValue(value: any): void {\n var inputValue: string;\n\n if (value === undefined || value === null) {\n inputValue = '';\n this._value = undefined;\n } else if (typeof value === 'number') {\n inputValue = this._formatNumber(value);\n this._value = value;\n }\n else if (typeof value === 'string') {\n const parsedValue = this._value = Number.parseFloat(value);\n inputValue = this._formatNumber(parsedValue);\n } else {\n console.error('NumberDirective: Unsupported value type', value);\n inputValue = 'Invalid';\n }\n\n this._setProperty('value', inputValue);\n }\n\n @HostListener('keydown', ['$event'])\n protected _onKeyDown(event: KeyboardEvent) {\n const key = event.key;\n const state = this._getInputState();\n\n if (this._isKeyAllowed(key)) {\n if (key == Keys.backspace) {\n if (state.selectionStart > 1 && (state.selectionStart === state.selectionEnd)) {\n let value = this._elmRef.nativeElement.value;\n let beforeSelection = value.charAt(state.selectionStart - 1);\n if (beforeSelection === ',') {\n // If the character before the cursor is a comma, we need to skip it\n this._setProperty('selectionStart', state.selectionStart - 2);\n }\n }\n }\n } else {\n event.preventDefault();\n }\n }\n\n @HostListener('input', ['$event.target.value'])\n protected _onInput(value: string) {\n if (value === '') {\n this._value = undefined;\n this._onChangeCallback?.(undefined);\n return;\n }\n\n const state = this._getInputState();\n if (state.isCursorInsideIntegerPart && this.useGrouping()) {\n this._formatIntegerPart(value);\n }\n\n var number = Number(removeChar(this._elmRef.nativeElement.value, this._thousandsSeparator));\n this._value = isNaN(number) ? undefined : number;\n this._onChangeCallback?.(this._value);\n }\n\n private _formatIntegerPart(value: string) {\n let state = this._getInputState();\n\n // Format the input value\n const integerPart = value.split(this._decimalSeparator)[0];\n const decimalPart = value.split(this._decimalSeparator)[1];\n\n if (integerPart.length <= 3) {\n return;\n }\n\n let normalizedIntegerPart = removeChar(integerPart, this._thousandsSeparator); // Remove commas\n\n let formattedValue = addThousandsSeparator(normalizedIntegerPart);\n if (decimalPart !== undefined) {\n formattedValue += this._decimalSeparator + decimalPart;\n }\n\n this._setProperty('value', formattedValue);\n let newSelectionStart: number;\n\n\n // fix the cursor position after formatting\n if (value.length == 1) {\n newSelectionStart = 1;\n } else {\n const newValueLength = formattedValue.length;\n const cursorJump = newValueLength - value.length;\n newSelectionStart = Math.max(0, state.selectionStart + cursorJump);\n }\n\n this._setProperty('selectionStart', newSelectionStart);\n this._setProperty('selectionEnd', newSelectionStart);\n\n // return formattedValue;\n }\n\n @HostListener('blur')\n protected _onBlur() {\n if (this._value !== undefined) {\n let formattedValue = this._formatNumber(this._value);\n this._setProperty('value', formattedValue);\n }\n\n this._onTouchedCallback?.();\n }\n\n @HostListener('paste', ['$event'])\n protected _onPaste(event: ClipboardEvent) {\n // event.\n // value = value.trim();\n }\n\n private _getInputState(): InputElementState {\n let value = this._elmRef.nativeElement.value;\n let decimalSeparatorPosition = value.indexOf(this._decimalSeparator);\n let selectionStart = this._elmRef.nativeElement.selectionStart || 0;\n let selectionEnd = this._elmRef.nativeElement.selectionEnd || 0;\n\n return {\n selectionStart,\n selectionEnd,\n decimalSeparatorPosition,\n isCursorInsideIntegerPart: decimalSeparatorPosition > -1 ? (selectionStart <= decimalSeparatorPosition) : true\n }\n }\n\n private _formatNumber(n: number): string {\n var isInteger = this.numberType() == 'integer';\n return new Intl.NumberFormat('en-US', {\n useGrouping: this.useGrouping(),\n minimumFractionDigits: isInteger ? 0 : this.minFractionDigits(),\n maximumFractionDigits: isInteger ? 0 : this.maxFractionDigits(),\n style: 'decimal',\n }).format(n);\n }\n\n private _isKeyAllowed(key: string) {\n const allowedKeys = [Keys.backspace, Keys.tab, Keys.arrowLeft, Keys.arrowRight, Keys.delete, Keys.home, Keys.end];\n const input = this._elmRef.nativeElement;\n const value = input.value;\n const state = this._getInputState();\n\n if (allowedKeys.includes(key)) {\n return true; // allow control/navigation keys\n }\n\n // Allow one leading minus\n if (key === '-') {\n return (input.selectionStart === 0 || input.selectionEnd === 0) && value.charAt(0) !== '-';\n }\n\n // Allow one dot for decimal\n if (key === this._decimalSeparator) {\n return (this.numberType() == 'decimal') &&\n (!value.includes(this._decimalSeparator)) &&\n (state.selectionStart == input.value.length);\n }\n\n // Allow numbers only\n if (/^\\d$/.test(key)) {\n if (state.isCursorInsideIntegerPart) {\n return true;\n } else {\n var decimalPart = value.split(this._decimalSeparator)[1];\n var maxFractionDigits = this.maxFractionDigits();\n if (maxFractionDigits != undefined && decimalPart.length < maxFractionDigits) {\n return true;\n } else {\n return input.selectionStart !== input.selectionEnd; // allow a new digit if a substring is selected\n }\n }\n }\n\n return false;\n }\n\n private _setProperty(prop: string, value: any) {\n this._renderer.setProperty(this._elmRef.nativeElement, prop, value);\n };\n}\n","import { Directive, ElementRef, forwardRef, inject, Provider, Renderer2, } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * A ControlValueAccessor for file input elements. It supports both single and multiple file selection.\n * It assigns the selected file(s) to the form control's value and handles disabled state.\n * @see https://angular.dev/api/forms/ControlValueAccessor\n */\n@Directive({\n selector: 'input[type=file][ngModel][ng0File]',\n host: {\n '(blur)': '_touchedFn()',\n '(change)': '_onChange($event)',\n },\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileValueAccessor),\n multi: true,\n }],\n})\nexport class FileValueAccessor implements ControlValueAccessor {\n private readonly _renderer = inject(Renderer2);\n private readonly _elementRef = inject(ElementRef);\n protected _changeFn!: (value: any) => {};\n protected _touchedFn!: () => {};\n\n writeValue(value?: any): void {\n }\n\n registerOnChange(fn: any): void {\n this._changeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._touchedFn = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n protected _onChange(e: Event) {\n const input = e.target as HTMLInputElement;\n\n let value;\n if (input.files?.length) {\n value = input.multiple ? input.files : input.files[0]\n } else {\n value = undefined;\n }\n\n this._changeFn(value);\n }\n}","import { Directive, input, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[ng0CustomValidator]',\n exportAs: 'ng0CustomValidator',\n standalone: true,\n providers: [\n { provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true }\n ]\n})\nexport class CustomValidatorDirective implements Validator {\n validator = input.required<(value: any) => ValidationErrors | null>({alias: 'ng0CustomValidator'});\n\n constructor() { }\n\n validate(control: AbstractControl): ValidationErrors | null {\n return this.validator()(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function equalWithValidator(targetValue?: string, inequalityMessage?: string): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n const isValid = control.value === targetValue;\n\n return isValid ? null :\n {\n equalWith: {\n value: control.value,\n message: inequalityMessage\n }\n };\n };\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\nimport { equalWithValidator } from './equal-with-validator';\n\n@Directive({\n selector: '[ng0EqualWith]',\n exportAs: 'ng0EqualWith',\n standalone: true,\n providers: [\n { provide: NG_VALIDATORS, useExisting: EqualWithValidatorDirective, multi: true }\n ]\n})\nexport class EqualWithValidatorDirective implements Validator {\n @Input('ng0EqualWith') targetValue?: string;\n @Input() inequalityMessage?: string;\n\n constructor() {\n }\n\n validate(control: AbstractControl): { [key: string]: any } | null {\n return equalWithValidator(this.targetValue, this.inequalityMessage)(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function fileMinSizeValidator(size: number): ValidatorFn {\n if (size == null || size <= 0) {\n throw new Error('Size must be a positive number');\n }\n\n return (control: AbstractControl): { [key: string]: any } | null => {\n let value = control?.value as FileList | File | undefined;\n\n if (value instanceof File) {\n return value.size < size ? {\n fileMinSize: {\n file: value,\n min: size,\n multiple: false\n }\n } : null;\n } else if ((value as FileList)?.length > 0) {\n const fileList = value as FileList;\n\n for (let i = 0; i < fileList.length; i++) {\n if (fileList[i].size < size) {\n return {\n fileMinSize: {\n file: fileList[i],\n fileList: fileList,\n min: size,\n multiple: true\n }\n };\n }\n }\n return null;\n } else {\n return null;\n }\n };\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { fileMinSizeValidator } from './file-min-size-validator';\n\n@Directive({\n selector: '[ngModel][ng0File][ng0FileMinSize]',\n exportAs: 'ng0FileMinSize',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: FileMinSizeValidatorDirective, multi: true, }],\n})\nexport class FileMinSizeValidatorDirective implements Validator {\n /**\n * Minimum file size in bytes.\n */\n public readonly fileMinSize = input.required({ alias: 'ng0FileMinSize', transform: numberAttribute });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return fileMinSizeValidator(this.fileMinSize())(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function fileMaxSizeValidator(size: number): ValidatorFn {\n if (size == null || size <= 0) {\n throw new Error('Size must be a positive number');\n }\n\n return (control: AbstractControl): { [key: string]: any } | null => {\n let value = control?.value as FileList | File | undefined;\n\n if (value instanceof File) {\n return value.size > size ? {\n fileMaxSize: {\n file: value,\n max: size,\n multiple: false\n }\n } : null;\n } else if ((value as FileList)?.length > 0) {\n const fileList = value as FileList;\n\n for (let i = 0; i < fileList.length; i++) {\n if (fileList[i].size > size) {\n return {\n fileMaxSize: {\n file: fileList[i],\n fileList: fileList,\n max: size,\n multiple: true\n }\n };\n }\n }\n return null;\n } else {\n return null;\n }\n };\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { fileMaxSizeValidator } from './file-max-size-validator';\n\n@Directive({\n selector: '[ngModel][ng0File][ng0FileMaxSize]',\n exportAs: 'ng0FileMaxSize',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: FileMaxSizeValidatorDirective, multi: true, }],\n})\nexport class FileMaxSizeValidatorDirective implements Validator {\n /**\n * Maximum file size in bytes.\n */\n public readonly fileMaxSize = input.required({ alias: 'ng0FileMaxSize', transform: numberAttribute });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return fileMaxSizeValidator(this.fileMaxSize())(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nfunction getExtension(filename: string): string {\n const parts = filename.split('.');\n return parts.length > 1 ? parts.pop()!.toLowerCase() : '';\n}\n\nexport function fileExtensionValidator(allowedExtensions?: string[]): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if (allowedExtensions === undefined) {\n return null;\n }\n\n let value = control?.value as FileList | File | undefined;\n\n if (value instanceof File) {\n const ext = getExtension(value.name);\n\n if (!allowedExtensions.includes(ext)) {\n return {\n fileExtension: {\n file: value,\n extension: ext,\n allowedExtensions: allowedExtensions,\n }\n };\n }\n\n return null;\n }\n else if ((value as FileList)?.length > 0) {\n const fileList = value as FileList;\n for (let i = 0; i < fileList.length; i++) {\n const ext = getExtension(fileList[i].name);\n\n if (!allowedExtensions.includes(ext)) {\n return {\n fileExtension: {\n file: fileList[i],\n extension: ext,\n allowedExtensions: allowedExtensions\n }\n };\n }\n }\n return null;\n } else {\n return null;\n }\n };\n}\n","import { Directive, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { fileExtensionValidator } from './file-extension-validator';\n\n@Directive({\n selector: '[ngModel][ng0File][ng0FileExtension]',\n exportAs: 'ng0FileExtension',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: FileExtensionValidatorDirective, multi: true, }],\n})\nexport class FileExtensionValidatorDirective implements Validator {\n /**\n * Allowed file extensions.\n */\n public readonly allowedExtensions = input.required<string[] | undefined>({ alias: 'ng0FileExtension' });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return fileExtensionValidator(this.allowedExtensions())(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\nconst urlRegEx = new RegExp('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?');\n\nexport function urlValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n const value = (control.value as string);\n if (!value || urlRegEx.test(value)) {\n return null;\n } else {\n return {\n 'url': {\n value\n }\n };\n }\n };\n}","import { Directive, Input } from '@angular/core';\nimport { FormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { urlValidator } from './url-validator';\n\n@Directive({\n selector: 'input[ng0Url]',\n exportAs: 'ng0Url',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: UrlValidatorDirective, multi: true }]\n})\nexport class UrlValidatorDirective implements Validator {\n /** Directive is enabled or disabled */\n @Input() iscUrl?: boolean | string = true;\n\n validate(control: FormControl): ValidationErrors | null {\n return urlValidator()(control);\n }\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, Validators } from '@angular/forms';\n\n/** Min validator */\n@Directive({\n selector: 'input[type=text][ng0Number][min]',\n exportAs: 'ng0Min',\n standalone: true,\n providers: [{\n provide: NG_VALIDATORS,\n useExisting: MinValidatorDirective,\n multi: true\n }]\n})\nexport class MinValidatorDirective implements Validator {\n min = input.required<number, number | string | undefined | null>({\n transform: numberAttribute,\n });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return Validators.min(this.min())(control);\n }\n}\n","import { Directive, input, numberAttribute } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, Validators } from '@angular/forms';\n\n/** Max validator */\n@Directive({\n selector: 'input[type=text][ng0Number][max]',\n exportAs: 'ng0Max',\n standalone: true,\n providers: [{\n provide: NG_VALIDATORS,\n useExisting: MaxValidatorDirective,\n multi: true\n }]\n})\nexport class MaxValidatorDirective implements Validator {\n max = input.required<number, number | string | undefined | null>({\n transform: numberAttribute,\n });\n\n validate(control: AbstractControl): ValidationErrors | null {\n return Validators.max(this.max())(control);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { EqualWithValidatorDirective } from './validators/equal-with/equal-with.directive';\nimport { UrlValidatorDirective } from './validators/url/url-validator.directive';\nimport { CustomValidatorDirective } from './validators/custom/custom-validator.directive';\nimport { MinValidatorDirective } from './validators/min/min-validator.directive';\nimport { MaxValidatorDirective } from './validators/max/max-validator.directive';\nimport { FileMaxSizeValidatorDirective } from './validators/file-max-size/file-max-size.directive';\nimport { FileMinSizeValidatorDirective } from './validators/file-min-size/file-min-size.directive';\nimport { FileExtensionValidatorDirective } from './validators/file-extension/file-extension.directive';\n\n\nconst items = [\n // Validators\n MinValidatorDirective,\n MaxValidatorDirective,\n FileMinSizeValidatorDirective,\n FileMaxSizeValidatorDirective,\n FileExtensionValidatorDirective,\n EqualWithValidatorDirective,\n UrlValidatorDirective,\n CustomValidatorDirective,\n\n\n // Directives\n];\n\n@NgModule({\n imports: items,\n exports: items,\n})\nexport class ValidationModule { }\n","import { NgModule } from '@angular/core';\nimport { NumberDirective } from './number.directive';\nimport { FileValueAccessor } from './file-value-accessor';\nimport { ValidationModule } from './validation';\n\nconst items = [\n ValidationModule,\n\n // ErrorDirective,\n // FirstErrorDirective,\n NumberDirective,\n FileValueAccessor,\n];\n\n/**\n * FormModule\n * \n */\n@NgModule({\n imports: items,\n exports: items,\n})\nexport class FormModule { }\n","export * from './focus.directive';\nexport * from './number.directive';\nexport * from './file-value-accessor';\nexport * from './form.module';\n\n// Validation\nexport * from './validation';\n// export * from './validation/error.directive';\n// export * from './validation/first-error.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["items"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
1
|
+
import { HttpClient, HttpEventType } from '@angular/common/http';
|
|
2
2
|
import { Subject, of, tap, Observable, map } from 'rxjs';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, makeEnvironmentProviders, inject, TransferState, Injector, PLATFORM_ID, makeStateKey, runInInjectionContext, Injectable } from '@angular/core';
|
|
@@ -20,6 +20,47 @@ function provideHttpService(config, ...features) {
|
|
|
20
20
|
]);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Utility function to create FormData from an object.
|
|
25
|
+
* The function iterates over the properties of the input object and appends them to a FormData instance.
|
|
26
|
+
* It handles string, File, Blob, number, and nested object types. For nested objects, it stringifies them before appending.
|
|
27
|
+
* This function is useful for preparing data to be sent in a multipart/form-data request,
|
|
28
|
+
* especially when dealing with file uploads and complex data structures.
|
|
29
|
+
* @example
|
|
30
|
+
* const data = {
|
|
31
|
+
* name: 'John Doe',
|
|
32
|
+
* age: 30,
|
|
33
|
+
* profilePicture: fileInput.files[0],
|
|
34
|
+
* preferences: { theme: 'dark', notifications: true }
|
|
35
|
+
* };
|
|
36
|
+
* const formData = toFormData(data);
|
|
37
|
+
* // formData can now be sent in an HTTP request with content type 'multipart/form-data'.
|
|
38
|
+
* @param data The input object containing the data to be converted into FormData. The properties of this object can be of type string, number, File, Blob, or nested objects.
|
|
39
|
+
* @returns The FormData instance containing the data from the input object.
|
|
40
|
+
*/
|
|
41
|
+
function toFormData(data) {
|
|
42
|
+
const formData = new FormData();
|
|
43
|
+
for (const key in data) {
|
|
44
|
+
if (data.hasOwnProperty(key)) {
|
|
45
|
+
const field = data[key];
|
|
46
|
+
let value;
|
|
47
|
+
if (typeof field === 'string' || field instanceof File || field instanceof Blob) {
|
|
48
|
+
value = field;
|
|
49
|
+
}
|
|
50
|
+
else if (typeof field === 'number') {
|
|
51
|
+
value = field.toString();
|
|
52
|
+
}
|
|
53
|
+
else if (typeof field === 'object') {
|
|
54
|
+
value = JSON.stringify(field);
|
|
55
|
+
}
|
|
56
|
+
if (value) {
|
|
57
|
+
formData.append(key, value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return formData;
|
|
62
|
+
}
|
|
63
|
+
|
|
23
64
|
/**
|
|
24
65
|
* HttpService provides a simple HTTP client for making requests.
|
|
25
66
|
* It supports GET, POST, PUT, DELETE methods and can handle DataRequest objects.
|
|
@@ -133,34 +174,22 @@ class HttpService {
|
|
|
133
174
|
return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);
|
|
134
175
|
}
|
|
135
176
|
_makeBody(body, options) {
|
|
136
|
-
|
|
137
|
-
const formData = new FormData();
|
|
138
|
-
for (const key in body) {
|
|
139
|
-
if (body.hasOwnProperty(key)) {
|
|
140
|
-
const field = body[key];
|
|
141
|
-
let value;
|
|
142
|
-
if (typeof field === 'string' || field instanceof File || field instanceof Blob) {
|
|
143
|
-
value = field;
|
|
144
|
-
}
|
|
145
|
-
else if (typeof field === 'number') {
|
|
146
|
-
value = field.toString();
|
|
147
|
-
}
|
|
148
|
-
else if (typeof field === 'object') {
|
|
149
|
-
value = JSON.stringify(field);
|
|
150
|
-
}
|
|
151
|
-
if (value) {
|
|
152
|
-
formData.append(key, value);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return formData;
|
|
157
|
-
}
|
|
158
|
-
return body;
|
|
177
|
+
return options?.contentType === 'multipart/form-data' ? toFormData(body) : body;
|
|
159
178
|
}
|
|
160
179
|
_handleEvents(o, url, options) {
|
|
161
180
|
return o.pipe(tap({
|
|
162
|
-
next:
|
|
163
|
-
|
|
181
|
+
next: (e) => {
|
|
182
|
+
if (options?.observe === 'events') {
|
|
183
|
+
if (e?.type === HttpEventType.DownloadProgress || e?.type === HttpEventType.UploadProgress) {
|
|
184
|
+
this._eventsSubject.next({ type: 'Progress', url, options });
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this._eventsSubject.next({ type: 'Complete', url, options, response: e });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
this._eventsSubject.next({ type: 'Complete', url, options, response: e });
|
|
192
|
+
}
|
|
164
193
|
},
|
|
165
194
|
error: e => {
|
|
166
195
|
this._eventsSubject.next({ type: 'Error', url, options, error: e });
|
|
@@ -265,5 +294,5 @@ function httpDataRequestResolver1(url, dataRequest, options) {
|
|
|
265
294
|
* Generated bundle index. Do not edit.
|
|
266
295
|
*/
|
|
267
296
|
|
|
268
|
-
export { HTTP_SERVICE_CONFIG, HttpService, httpDataRequestResolver1, provideHttpService };
|
|
297
|
+
export { HTTP_SERVICE_CONFIG, HttpService, httpDataRequestResolver1, provideHttpService, toFormData };
|
|
269
298
|
//# sourceMappingURL=bootkit-ng0-http.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/provide.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/types.ts","../../../projects/ng0/http/data-request-resolvers/http-data-request-resolver-1.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from \"@angular/core\";\nimport { HttpDataRequestResolver } from \"./types\";\nimport { HttpService } from \"./http.service\";\n\nexport const HTTP_SERVICE_CONFIG = new InjectionToken<HttpServiceConfig>('HttpServiceConfig');\n\n/**\n * Configuration for the HttpService.\n */\nexport interface HttpServiceConfig {\n /**\n * Base URL for the HTTP requests.\n * This is prepended to all request URLs.\n */\n baseUrl?: string;\n\n /**\n * A Resolver function to convert DataRequest to DataResult.\n */\n dataRequestResolver?: HttpDataRequestResolver;\n}\n\nexport interface HttpServiceFeature { \n ɵproviders: Array<Provider | EnvironmentProviders>;\n}\n\n/**\n * Provides the configuration for the HttpService.\n * @param config \n * @returns \n */\nexport function provideHttpService(config?: HttpServiceConfig, ...features: Partial<HttpServiceFeature>[]) {\n // const mergedfeatures = Object.assign({}, ...features);\n return makeEnvironmentProviders([\n HttpService,\n { provide: HTTP_SERVICE_CONFIG, useValue: config || {} },\n features.map((feature) => feature.ɵproviders),\n ]);\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of, Subject, tap } from 'rxjs';\nimport { HttpRequestOptions, HttpRequestEvent } from './types';\nimport { inject, Inject, Injectable, Injector, makeStateKey, PLATFORM_ID, runInInjectionContext, TransferState } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\nimport { HTTP_SERVICE_CONFIG } from './provide';\n\n/**\n * HttpService provides a simple HTTP client for making requests.\n * It supports GET, POST, PUT, DELETE methods and can handle DataRequest objects.\n * It also supports transfer state for server-side rendering.\n * It emits events for request lifecycle: Send, Progress, Complete and Error.\n * It can be configured with a base URL and a default DataRequest resolver.\n * It can also handle multipart/form-data requests.\n */\n@Injectable()\nexport class HttpService {\n private readonly _config = inject(HTTP_SERVICE_CONFIG);\n private readonly _http = inject(HttpClient);\n private readonly _transferState = inject(TransferState);\n private readonly _injector = inject(Injector);\n private readonly _platformId: Object = inject(PLATFORM_ID);\n private readonly _eventsSubject = new Subject<HttpRequestEvent>();\n private _baseUrl?: string;\n\n public readonly events = this._eventsSubject.asObservable();\n public defaultHeaders?: HttpHeaders;\n\n constructor() {\n this._baseUrl = this._config.baseUrl ?? '';\n }\n\n /**\n * Sends a GET request to the specified URL.\n * @param url The URL to send the request to.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public get<T>(url: string, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n const transferStateData = this._findInTransferState<T>(options);\n if (transferStateData.found) {\n return of(transferStateData.data!);\n }\n\n this._eventsSubject.next({ type: 'Send', url, options });\n let obs = this._http.get<T>(this._makeUrl(url, options), options as any).pipe(\n tap(result => {\n if (isPlatformServer(this._platformId) && options?.transferState) {\n const key = makeStateKey<T>(options.id);\n this._transferState.set(key, result as T);\n }\n })\n );\n return this._handleEvents<T>(obs, url, options);\n }\n\n\n /**\n * Sends a DataRequest to the specified URL and returns a DataResult.\n * This method is used for paginated or filtered data requests.\n * It uses the configured DataRequestResolver to handle the request. \n * @param url The URL to send the request to.\n * @param request The DataRequest object containing the request parameters.\n * @param options The options for the request.\n * @returns An observable of DataResult<T>.\n */\n public getDataResult<T>(url: string, request: DataRequest, options?: HttpRequestOptions): Observable<DataResult<T>> {\n this._verifyOptions(options);\n const transferStateData = this._findInTransferState<DataResult<T>>(options);\n if (transferStateData.found) {\n return of(transferStateData.data!);\n }\n\n this._eventsSubject.next({ type: 'Send', url, options });\n let resolver = this._config.dataRequestResolver;\n if (!resolver) {\n throw new Error('No HttpDataRequestResolver provided.');\n }\n\n const URL = this._makeUrl(url, options);\n let obs = runInInjectionContext<Observable<DataResult<T>>>(this._injector, resolver.bind(null, URL, request, options));\n if (!(obs instanceof Observable)) {\n throw Error('HttpDataRequestResolver should return an observable.');\n }\n\n return this._handleEvents(obs, url, options);\n }\n\n /**\n * Sends a POST request to the specified URL with the given body.\n * @param url The URL to send the request to.\n * @param body The body of the request.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public post<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n const BODY = this._makeBody(body, options);\n let obs = this._http.post(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\n return this._handleEvents<T>(obs, url, options);\n }\n\n /**\n * Sends a PUT request to the specified URL with the given body.\n * @param url The URL to send the request to.\n * @param body The body of the request.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public put<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n const BODY = this._makeBody(body, options);\n let obs = this._http.put(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\n return this._handleEvents<T>(obs, url, options);\n }\n\n /**\n * Sends a DELETE request to the specified URL.\n * @param url The URL to send the request to.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public delete<T>(url: string, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n let obs = this._http.delete(this._makeUrl(url, options), options as any)\n return this._handleEvents<T>(obs, url, options);\n }\n\n private _makeUrl(url: string, options?: HttpRequestOptions) {\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\n }\n\n private _makeBody(body: any, options?: HttpRequestOptions) {\n if (options?.contentType === 'multipart/form-data') {\n const formData = new FormData();\n for (const key in body) {\n if (body.hasOwnProperty(key)) {\n const field = body[key];\n let value;\n\n if (typeof field === 'string' || field instanceof File || field instanceof Blob) {\n value = field;\n } else if (typeof field === 'number') {\n value = field.toString();\n } else if (typeof field === 'object') {\n value = JSON.stringify(field);\n }\n\n if (value) {\n formData.append(key, value);\n }\n }\n }\n\n return formData;\n }\n\n return body;\n }\n\n private _handleEvents<T>(o: Observable<any>, url: string, options?: HttpRequestOptions): Observable<T> {\n return o.pipe(\n tap({\n next: r => {\n this._eventsSubject.next({ type: 'Complete', url, options, response: r });\n },\n error: e => {\n this._eventsSubject.next({ type: 'Error', url, options, error: e });\n }\n })\n )\n }\n\n private _verifyOptions(options?: HttpRequestOptions) {\n if (options?.transferState) {\n if (!options.id) {\n throw Error('To use transferState, set request id')\n }\n\n if (options.observe == 'events' || options.observe == 'response') {\n throw Error('TransferState is only supported with observe \"body\".');\n }\n }\n }\n\n private _findInTransferState<T>(options?: HttpRequestOptions): { found: boolean, data: T | undefined } {\n if (!options?.transferState || isPlatformServer(this._platformId)) {\n return { found: false, data: undefined };\n }\n\n const key = makeStateKey<T>(options.id);\n if (this._transferState.hasKey(key)) {\n const data = this._transferState.get<T>(key, null!);\n if ((options.transferState as any)?.['clearAfterUse']) {\n this._transferState.remove(key); // Free memory\n }\n\n return { found: true, data: data };\n }\n\n return { found: false, data: undefined };\n }\n}\n","import { HttpClient, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\nimport { Observable } from 'rxjs';\n\nexport interface HttpRequestOptions {\n /** Http request ID */\n id?: any;\n params?: HttpParams | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n headers?: HttpHeaders | Record<string, string | string[]>;\n pathType?: 'relative' | 'absolute';\n responseType?: 'json' | 'blob' | 'text';\n contentType?: 'json' | 'multipart/form-data';\n reportProgress?: boolean;\n observe?: 'response' | 'body' | 'events';\n\n /**\n * Additional data to associate with this object.\n */\n tag?: Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n\n /** \n * Save response in transfer state \n * \n */\n transferState?: boolean | {\n /**\n * Clear transfer state after first read.\n */\n clearAfterUse?: boolean;\n };\n}\n\n/**\n * HttpDataRequestResolver is a function that takes a URL, a DataRequest, and options,\n * and returns an Observable that emits a DataResult.\n * This is used to convert a DataRequest into query parameters or request body for an HTTP request.\n * @param url The URL to send the request to.\n * @param dataRequest The DataRequest to convert.\n * @param options Additional options for the request, such as headers.\n */\nexport type HttpDataRequestResolver<T = any> = (url: string, dataRequest: DataRequest, options?: HttpRequestOptions) => Observable<DataResult<T>>;\n\nexport interface HttpRequestEventBase {\n type: 'Send' | 'Complete' | 'Progress' | 'Error';\n url: string;\n options?: HttpRequestOptions\n}\n\nexport interface HttpRequestSendEvent extends HttpRequestEventBase {\n type: 'Send';\n}\n\nexport interface HttpRequestCompleteEvent extends HttpRequestEventBase {\n type: 'Complete';\n response?: any;\n}\n\nexport interface HttpRequestProgressEvent extends HttpRequestEventBase {\n type: 'Progress';\n}\n\nexport interface HttpRequestErrorEvent extends HttpRequestEventBase {\n type: 'Error';\n error: any;\n}\n\nexport type HttpRequestEvent = HttpRequestSendEvent | HttpRequestCompleteEvent | HttpRequestProgressEvent | HttpRequestErrorEvent;\n\n/**\n * HttpDataRequestWriter is a function that takes an HTTP request and a DataRequest\n * and writes the DataRequest parameters to the HTTP request.\n * This is used to convert a DataRequest into query parameters or request body.\n * @param url The URL to send the request to.\n * @param dataRequest The DataRequest to convert.\n * @param httpClient The HttpClient to use for the request.\n * @param options Additional options for the request, such as headers.\n * @template T data item type\n * @returns An Observable that emits the DataResult.\n */\n","import { DataRequest, DataResult } from \"@bootkit/ng0/data\";\nimport { HttpRequestOptions } from \"../types\";\nimport { map, Observable } from \"rxjs\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { inject } from \"@angular/core\";\n\n/**\n * Default implementation of httpDataRequestResolver1.\n * It adds DataRequest parameters as query string to the HTTP request.\n * @param url \n * @param dataRequest \n * @param options\n * @template T data item type\n * @returns \n */\nexport function httpDataRequestResolver1<T = any>(\n url: string,\n dataRequest: DataRequest,\n options?: HttpRequestOptions): Observable<DataResult<T>> {\n var query: Record<string, any> = {};\n\n const httpClient = inject(HttpClient);\n\n if (dataRequest.page) {\n query['page[size]'] = dataRequest.page.size;\n query['page[index]'] = dataRequest.page.index;\n }\n\n if (dataRequest.sort) {\n query['sort[field]'] = dataRequest.sort.field;\n query['sort[asc]'] = dataRequest.sort.asc;\n }\n\n if (Array.isArray(dataRequest.filters)) {\n for (let i = 0; i < dataRequest.filters.length; i++) {\n const filter = dataRequest.filters[i];\n query[`filters[${i}].field`] = filter.field;\n query[`filters[${i}].operator`] = filter.operator;\n query[`filters[${i}].value`] = filter.value;\n }\n }\n\n if (typeof dataRequest.computeTotal == 'boolean') {\n query['computeTotal'] = dataRequest.computeTotal;\n }\n\n return httpClient.get<{ data: T[], total?: number }>(url, {\n params: query,\n headers: options?.headers,\n }).pipe(\n map(result => {\n return new DataResult<T>(result.data, result.total)\n })\n );\n}\n\n// /**\n// * Provides httpDataRequestResolver1.\n// * This is used to convert a DataRequest into query parameters for the HTTP (GET) request.\n// * @returns \n// */\n// export function withHttpDataRequestResolver1(): HttpServiceFeature {\n// return {\n// ɵproviders: [\n// { provide: DEFAULT_DATA_REQUEST_RESOLVER, useValue: HttpDataRequestResolver1 }\n// ]\n// };\n// }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/provide.ts","../../../projects/ng0/http/to-form-data.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/types.ts","../../../projects/ng0/http/data-request-resolvers/http-data-request-resolver-1.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from \"@angular/core\";\nimport { HttpDataRequestResolver } from \"./types\";\nimport { HttpService } from \"./http.service\";\n\nexport const HTTP_SERVICE_CONFIG = new InjectionToken<HttpServiceConfig>('HttpServiceConfig');\n\n/**\n * Configuration for the HttpService.\n */\nexport interface HttpServiceConfig {\n /**\n * Base URL for the HTTP requests.\n * This is prepended to all request URLs.\n */\n baseUrl?: string;\n\n /**\n * A Resolver function to convert DataRequest to DataResult.\n */\n dataRequestResolver?: HttpDataRequestResolver;\n}\n\nexport interface HttpServiceFeature { \n ɵproviders: Array<Provider | EnvironmentProviders>;\n}\n\n/**\n * Provides the configuration for the HttpService.\n * @param config \n * @returns \n */\nexport function provideHttpService(config?: HttpServiceConfig, ...features: Partial<HttpServiceFeature>[]) {\n // const mergedfeatures = Object.assign({}, ...features);\n return makeEnvironmentProviders([\n HttpService,\n { provide: HTTP_SERVICE_CONFIG, useValue: config || {} },\n features.map((feature) => feature.ɵproviders),\n ]);\n}\n","/**\n * Utility function to create FormData from an object.\n * The function iterates over the properties of the input object and appends them to a FormData instance.\n * It handles string, File, Blob, number, and nested object types. For nested objects, it stringifies them before appending.\n * This function is useful for preparing data to be sent in a multipart/form-data request, \n * especially when dealing with file uploads and complex data structures.\n * @example\n * const data = {\n * name: 'John Doe',\n * age: 30,\n * profilePicture: fileInput.files[0],\n * preferences: { theme: 'dark', notifications: true }\n * };\n * const formData = toFormData(data);\n * // formData can now be sent in an HTTP request with content type 'multipart/form-data'.\n * @param data The input object containing the data to be converted into FormData. The properties of this object can be of type string, number, File, Blob, or nested objects.\n * @returns The FormData instance containing the data from the input object.\n */\nexport function toFormData(data: any): FormData {\n const formData = new FormData();\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const field = data[key];\n let value;\n\n if (typeof field === 'string' || field instanceof File || field instanceof Blob) {\n value = field;\n } else if (typeof field === 'number') {\n value = field.toString();\n } else if (typeof field === 'object') {\n value = JSON.stringify(field);\n }\n\n if (value) {\n formData.append(key, value);\n }\n }\n }\n\n return formData;\n}","import { HttpClient, HttpEvent, HttpEventType, HttpHeaders } from '@angular/common/http';\nimport { Observable, of, Subject, tap } from 'rxjs';\nimport { HttpRequestOptions, HttpRequestEvent } from './types';\nimport { inject, Inject, Injectable, Injector, makeStateKey, PLATFORM_ID, runInInjectionContext, TransferState } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\nimport { HTTP_SERVICE_CONFIG } from './provide';\nimport { toFormData } from './to-form-data';\n\n/**\n * HttpService provides a simple HTTP client for making requests.\n * It supports GET, POST, PUT, DELETE methods and can handle DataRequest objects.\n * It also supports transfer state for server-side rendering.\n * It emits events for request lifecycle: Send, Progress, Complete and Error.\n * It can be configured with a base URL and a default DataRequest resolver.\n * It can also handle multipart/form-data requests.\n */\n@Injectable()\nexport class HttpService {\n private readonly _config = inject(HTTP_SERVICE_CONFIG);\n private readonly _http = inject(HttpClient);\n private readonly _transferState = inject(TransferState);\n private readonly _injector = inject(Injector);\n private readonly _platformId: Object = inject(PLATFORM_ID);\n private readonly _eventsSubject = new Subject<HttpRequestEvent>();\n private _baseUrl?: string;\n\n public readonly events = this._eventsSubject.asObservable();\n public defaultHeaders?: HttpHeaders;\n\n constructor() {\n this._baseUrl = this._config.baseUrl ?? '';\n }\n\n /**\n * Sends a GET request to the specified URL.\n * @param url The URL to send the request to.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public get<T>(url: string, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n const transferStateData = this._findInTransferState<T>(options);\n if (transferStateData.found) {\n return of(transferStateData.data!);\n }\n\n this._eventsSubject.next({ type: 'Send', url, options });\n let obs = this._http.get<T>(this._makeUrl(url, options), options as any).pipe(\n tap(result => {\n if (isPlatformServer(this._platformId) && options?.transferState) {\n const key = makeStateKey<T>(options.id);\n this._transferState.set(key, result as T);\n }\n })\n );\n return this._handleEvents<T>(obs, url, options);\n }\n\n\n /**\n * Sends a DataRequest to the specified URL and returns a DataResult.\n * This method is used for paginated or filtered data requests.\n * It uses the configured DataRequestResolver to handle the request. \n * @param url The URL to send the request to.\n * @param request The DataRequest object containing the request parameters.\n * @param options The options for the request.\n * @returns An observable of DataResult<T>.\n */\n public getDataResult<T>(url: string, request: DataRequest, options?: HttpRequestOptions): Observable<DataResult<T>> {\n this._verifyOptions(options);\n const transferStateData = this._findInTransferState<DataResult<T>>(options);\n if (transferStateData.found) {\n return of(transferStateData.data!);\n }\n\n this._eventsSubject.next({ type: 'Send', url, options });\n let resolver = this._config.dataRequestResolver;\n if (!resolver) {\n throw new Error('No HttpDataRequestResolver provided.');\n }\n\n const URL = this._makeUrl(url, options);\n let obs = runInInjectionContext<Observable<DataResult<T>>>(this._injector, resolver.bind(null, URL, request, options));\n if (!(obs instanceof Observable)) {\n throw Error('HttpDataRequestResolver should return an observable.');\n }\n\n return this._handleEvents(obs, url, options);\n }\n\n /**\n * Sends a POST request to the specified URL with the given body.\n * @param url The URL to send the request to.\n * @param body The body of the request.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public post<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n const BODY = this._makeBody(body, options);\n let obs = this._http.post(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\n return this._handleEvents<T>(obs, url, options);\n }\n\n /**\n * Sends a PUT request to the specified URL with the given body.\n * @param url The URL to send the request to.\n * @param body The body of the request.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public put<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n const BODY = this._makeBody(body, options);\n let obs = this._http.put(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\n return this._handleEvents<T>(obs, url, options);\n }\n\n /**\n * Sends a DELETE request to the specified URL.\n * @param url The URL to send the request to.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public delete<T>(url: string, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n let obs = this._http.delete(this._makeUrl(url, options), options as any)\n return this._handleEvents<T>(obs, url, options);\n }\n\n private _makeUrl(url: string, options?: HttpRequestOptions) {\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\n }\n\n private _makeBody(body: any, options?: HttpRequestOptions) {\n return options?.contentType === 'multipart/form-data' ? toFormData(body) : body;\n }\n\n private _handleEvents<T>(o: Observable<any>, url: string, options?: HttpRequestOptions): Observable<T> {\n return o.pipe(\n tap({\n next: (e: any) => {\n if (options?.observe === 'events') {\n if (e?.type === HttpEventType.DownloadProgress || e?.type === HttpEventType.UploadProgress) {\n this._eventsSubject.next({ type: 'Progress', url, options });\n } else {\n this._eventsSubject.next({ type: 'Complete', url, options, response: e });\n }\n } else {\n this._eventsSubject.next({ type: 'Complete', url, options, response: e });\n }\n },\n error: e => {\n this._eventsSubject.next({ type: 'Error', url, options, error: e });\n }\n })\n )\n }\n\n private _verifyOptions(options?: HttpRequestOptions) {\n if (options?.transferState) {\n if (!options.id) {\n throw Error('To use transferState, set request id')\n }\n\n if (options.observe == 'events' || options.observe == 'response') {\n throw Error('TransferState is only supported with observe \"body\".');\n }\n }\n }\n\n private _findInTransferState<T>(options?: HttpRequestOptions): { found: boolean, data: T | undefined } {\n if (!options?.transferState || isPlatformServer(this._platformId)) {\n return { found: false, data: undefined };\n }\n\n const key = makeStateKey<T>(options.id);\n if (this._transferState.hasKey(key)) {\n const data = this._transferState.get<T>(key, null!);\n if ((options.transferState as any)?.['clearAfterUse']) {\n this._transferState.remove(key); // Free memory\n }\n\n return { found: true, data: data };\n }\n\n return { found: false, data: undefined };\n }\n}\n","import { HttpClient, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\nimport { Observable } from 'rxjs';\n\nexport interface HttpRequestOptions {\n /** Http request ID */\n id?: any;\n params?: HttpParams | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n headers?: HttpHeaders | Record<string, string | string[]>;\n pathType?: 'relative' | 'absolute';\n responseType?: 'json' | 'blob' | 'text';\n contentType?: 'json' | 'multipart/form-data';\n reportProgress?: boolean;\n observe?: 'response' | 'body' | 'events';\n\n /**\n * Additional data to associate with this object.\n */\n tag?: Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n\n /** \n * Save response in transfer state \n * \n */\n transferState?: boolean | {\n /**\n * Clear transfer state after first read.\n */\n clearAfterUse?: boolean;\n };\n}\n\n/**\n * HttpDataRequestResolver is a function that takes a URL, a DataRequest, and options,\n * and returns an Observable that emits a DataResult.\n * This is used to convert a DataRequest into query parameters or request body for an HTTP request.\n * @param url The URL to send the request to.\n * @param dataRequest The DataRequest to convert.\n * @param options Additional options for the request, such as headers.\n */\nexport type HttpDataRequestResolver<T = any> = (url: string, dataRequest: DataRequest, options?: HttpRequestOptions) => Observable<DataResult<T>>;\n\nexport interface HttpRequestEventBase {\n type: 'Send' | 'Complete' | 'Progress' | 'Error';\n url: string;\n options?: HttpRequestOptions\n}\n\nexport interface HttpRequestSendEvent extends HttpRequestEventBase {\n type: 'Send';\n}\n\nexport interface HttpRequestCompleteEvent extends HttpRequestEventBase {\n type: 'Complete';\n response?: any;\n}\n\nexport interface HttpRequestProgressEvent extends HttpRequestEventBase {\n type: 'Progress';\n}\n\nexport interface HttpRequestErrorEvent extends HttpRequestEventBase {\n type: 'Error';\n error: any;\n}\n\nexport type HttpRequestEvent = HttpRequestSendEvent | HttpRequestCompleteEvent | HttpRequestProgressEvent | HttpRequestErrorEvent;\n\n/**\n * HttpDataRequestWriter is a function that takes an HTTP request and a DataRequest\n * and writes the DataRequest parameters to the HTTP request.\n * This is used to convert a DataRequest into query parameters or request body.\n * @param url The URL to send the request to.\n * @param dataRequest The DataRequest to convert.\n * @param httpClient The HttpClient to use for the request.\n * @param options Additional options for the request, such as headers.\n * @template T data item type\n * @returns An Observable that emits the DataResult.\n */\n","import { DataRequest, DataResult } from \"@bootkit/ng0/data\";\nimport { HttpRequestOptions } from \"../types\";\nimport { map, Observable } from \"rxjs\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { inject } from \"@angular/core\";\n\n/**\n * Default implementation of httpDataRequestResolver1.\n * It adds DataRequest parameters as query string to the HTTP request.\n * @param url \n * @param dataRequest \n * @param options\n * @template T data item type\n * @returns \n */\nexport function httpDataRequestResolver1<T = any>(\n url: string,\n dataRequest: DataRequest,\n options?: HttpRequestOptions): Observable<DataResult<T>> {\n var query: Record<string, any> = {};\n\n const httpClient = inject(HttpClient);\n\n if (dataRequest.page) {\n query['page[size]'] = dataRequest.page.size;\n query['page[index]'] = dataRequest.page.index;\n }\n\n if (dataRequest.sort) {\n query['sort[field]'] = dataRequest.sort.field;\n query['sort[asc]'] = dataRequest.sort.asc;\n }\n\n if (Array.isArray(dataRequest.filters)) {\n for (let i = 0; i < dataRequest.filters.length; i++) {\n const filter = dataRequest.filters[i];\n query[`filters[${i}].field`] = filter.field;\n query[`filters[${i}].operator`] = filter.operator;\n query[`filters[${i}].value`] = filter.value;\n }\n }\n\n if (typeof dataRequest.computeTotal == 'boolean') {\n query['computeTotal'] = dataRequest.computeTotal;\n }\n\n return httpClient.get<{ data: T[], total?: number }>(url, {\n params: query,\n headers: options?.headers,\n }).pipe(\n map(result => {\n return new DataResult<T>(result.data, result.total)\n })\n );\n}\n\n// /**\n// * Provides httpDataRequestResolver1.\n// * This is used to convert a DataRequest into query parameters for the HTTP (GET) request.\n// * @returns \n// */\n// export function withHttpDataRequestResolver1(): HttpServiceFeature {\n// return {\n// ɵproviders: [\n// { provide: DEFAULT_DATA_REQUEST_RESOLVER, useValue: HttpDataRequestResolver1 }\n// ]\n// };\n// }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,9 @@ const EN_US_LOCALE = new Locale({
|
|
|
26
26
|
minlength: (e) => `Minimum length: ${e.requiredLength}`,
|
|
27
27
|
maxlength: (e) => `Maximum length: ${e.requiredLength}`,
|
|
28
28
|
email: (e) => `Invalid email`,
|
|
29
|
+
fileMinSize: (e) => `Minimum ${formatNumber$1(e.min / 1024 / 1024)} MB${e.fileList ? ` (${e.file.name})` : ''}`,
|
|
30
|
+
fileMaxSize: (e) => `Maximum ${formatNumber$1(e.max / 1024 / 1024)} MB${e.fileList ? ` (${e.file.name})` : ''}`,
|
|
31
|
+
fileExtension: (e) => `Invalid file type`,
|
|
29
32
|
}
|
|
30
33
|
}
|
|
31
34
|
},
|
|
@@ -71,8 +74,9 @@ const FA_IR_LOCALE = new Locale({
|
|
|
71
74
|
minlength: (e) => `حداقل ${e.requiredLength} کاراکتر`,
|
|
72
75
|
maxlength: (e) => `حداکثر ${e.requiredLength} کاراکتر`,
|
|
73
76
|
email: (e) => `ایمیل نامعتبر است`,
|
|
74
|
-
fileMinSize: (e) => `حداقل ${formatNumber(e.min / 1024 / 1024)}
|
|
75
|
-
fileMaxSize: (e) => `حداکثر ${formatNumber(e.max / 1024 / 1024)}
|
|
77
|
+
fileMinSize: (e) => `حداقل ${formatNumber(e.min / 1024 / 1024)} مگابایت${e.fileList ? ` (${e.file.name})` : ''}`,
|
|
78
|
+
fileMaxSize: (e) => `حداکثر ${formatNumber(e.max / 1024 / 1024)} مگابایت${e.fileList ? ` (${e.file.name})` : ''}`,
|
|
79
|
+
fileExtension: (e) => `نوع فایل نامعتبر است`,
|
|
76
80
|
}
|
|
77
81
|
}
|
|
78
82
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-localization-locales.mjs","sources":["../../../projects/ng0/localization/locales/en-us.ts","../../../projects/ng0/localization/locales/fa-ir.ts","../../../projects/ng0/localization/locales/bootkit-ng0-localization-locales.ts"],"sourcesContent":["import { Locale } from '@bootkit/ng0/localization';\
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-localization-locales.mjs","sources":["../../../projects/ng0/localization/locales/en-us.ts","../../../projects/ng0/localization/locales/fa-ir.ts","../../../projects/ng0/localization/locales/bootkit-ng0-localization-locales.ts"],"sourcesContent":["import { Locale } from '@bootkit/ng0/localization';\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const EN_US_LOCALE = new Locale({\n name: 'en',\n rtl: false,\n dictionary: {\n ok: 'Ok',\n cancel: 'Cancel',\n warning: 'Warning',\n areYouSure: 'Are you sure?',\n noRecords: 'No records.',\n first: 'First',\n last: 'Last',\n next: 'Next',\n previous: 'Previous',\n pageXofY: 'Page {0} of {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'Invalid',\n required: (e) => `Required`,\n min: (e) => `Minimum: ${formatNumber(e.min)}`,\n max: (e) => `Maximum: ${formatNumber(e.max)}`,\n minlength: (e) => `Minimum length: ${e.requiredLength}`,\n maxlength: (e) => `Maximum length: ${e.requiredLength}`,\n email: (e) => `Invalid email`,\n fileMinSize: (e) => `Minimum ${formatNumber(e.min / 1024 / 1024)} MB${e.fileList ? ` (${e.file.name})` : ''}`,\n fileMaxSize: (e) => `Maximum ${formatNumber(e.max / 1024 / 1024)} MB${e.fileList ? ` (${e.file.name})` : ''}`,\n fileExtension: (e) => `Invalid file type`,\n }\n }\n },\n formatters: {\n 'boolean': ['No', 'Yes'],\n },\n components: {\n table: {\n noRecords: 'No records found.',\n pagingInfo: (info) => `Showingsdsd ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} of ${formatNumber(info.totalRecords!)} records`\n }\n }\n});\n","import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const FA_IR_LOCALE = new Locale({\n name: 'fa',\n rtl: true,\n date: {\n options: {\n calendar: 'persian'\n }\n },\n dictionary: {\n ok: 'تایید',\n cancel: 'لغو',\n warning: 'هشدار',\n areYouSure: 'آیا مطمئن هستید?',\n noRecords: 'بدون رکورد',\n first: 'اولین',\n last: 'آخرین',\n next: 'بعدی',\n previous: 'قبلی',\n pageXofY: 'صفحه {0} از {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'نامعتبر',\n required: (e) => `الزامی`,\n min: (e) => `حداقل: ${formatNumber(e.min)}`,\n max: (e) => `حداکثر: ${formatNumber(e.max)}`,\n minlength: (e) => `حداقل ${e.requiredLength} کاراکتر`,\n maxlength: (e) => `حداکثر ${e.requiredLength} کاراکتر`,\n email: (e) => `ایمیل نامعتبر است`,\n fileMinSize: (e) => `حداقل ${formatNumber(e.min / 1024 / 1024)} مگابایت${e.fileList ? ` (${e.file.name})` : ''}`,\n fileMaxSize: (e) => `حداکثر ${formatNumber(e.max / 1024 / 1024)} مگابایت${e.fileList ? ` (${e.file.name})` : ''}`,\n fileExtension: (e) => `نوع فایل نامعتبر است`,\n }\n }\n },\n formatters: {\n 'boolean': ['خیر', 'بله'],\n },\n components: {\n table: {\n noRecords: 'رکوردی وجود ندارد',\n pagingInfo: (info) => `نمایش ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} از ${formatNumber(info.totalRecords!)} رکورد`\n }\n },\n data: {\n logicalOperators: {\n contains: 'شامل',\n startsWith: 'شروع',\n endsWith: 'پایان',\n eq: 'مساوی',\n gt: 'بزرگتر',\n gte: 'بزرگتر یا مساوی',\n lt: 'کوچکتر',\n lte: 'کوچکتر یا مساوی',\n ne: 'مخالف',\n\n }\n }\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["formatNumber"],"mappings":"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"}
|
package/form/index.d.ts
CHANGED
|
@@ -132,10 +132,10 @@ declare class FileExtensionValidatorDirective implements Validator {
|
|
|
132
132
|
/**
|
|
133
133
|
* Allowed file extensions.
|
|
134
134
|
*/
|
|
135
|
-
readonly allowedExtensions: i0.InputSignal<string[]>;
|
|
135
|
+
readonly allowedExtensions: i0.InputSignal<string[] | undefined>;
|
|
136
136
|
validate(control: AbstractControl): ValidationErrors | null;
|
|
137
137
|
static ɵfac: i0.ɵɵFactoryDeclaration<FileExtensionValidatorDirective, never>;
|
|
138
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FileExtensionValidatorDirective, "[ngModel][ng0File][ng0FileExtension]", ["
|
|
138
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FileExtensionValidatorDirective, "[ngModel][ng0File][ng0FileExtension]", ["ng0FileExtension"], { "allowedExtensions": { "alias": "ng0FileExtension"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
declare class EqualWithValidatorDirective implements Validator {
|
|
@@ -187,6 +187,6 @@ declare function fileMinSizeValidator(size: number): ValidatorFn;
|
|
|
187
187
|
|
|
188
188
|
declare function fileMaxSizeValidator(size: number): ValidatorFn;
|
|
189
189
|
|
|
190
|
-
declare function fileExtensionValidator(allowedExtensions
|
|
190
|
+
declare function fileExtensionValidator(allowedExtensions?: string[]): ValidatorFn;
|
|
191
191
|
|
|
192
192
|
export { CustomValidatorDirective, EqualWithValidatorDirective, FileExtensionValidatorDirective, FileMaxSizeValidatorDirective, FileMinSizeValidatorDirective, FileValueAccessor, FocusDirective, FormModule, MaxValidatorDirective, MinValidatorDirective, NumberDirective, UrlValidatorDirective, ValidationModule, equalWithValidator, fileExtensionValidator, fileMaxSizeValidator, fileMinSizeValidator };
|
package/http/index.d.ts
CHANGED
|
@@ -127,6 +127,26 @@ declare class HttpService {
|
|
|
127
127
|
static ɵprov: i0.ɵɵInjectableDeclaration<HttpService>;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Utility function to create FormData from an object.
|
|
132
|
+
* The function iterates over the properties of the input object and appends them to a FormData instance.
|
|
133
|
+
* It handles string, File, Blob, number, and nested object types. For nested objects, it stringifies them before appending.
|
|
134
|
+
* This function is useful for preparing data to be sent in a multipart/form-data request,
|
|
135
|
+
* especially when dealing with file uploads and complex data structures.
|
|
136
|
+
* @example
|
|
137
|
+
* const data = {
|
|
138
|
+
* name: 'John Doe',
|
|
139
|
+
* age: 30,
|
|
140
|
+
* profilePicture: fileInput.files[0],
|
|
141
|
+
* preferences: { theme: 'dark', notifications: true }
|
|
142
|
+
* };
|
|
143
|
+
* const formData = toFormData(data);
|
|
144
|
+
* // formData can now be sent in an HTTP request with content type 'multipart/form-data'.
|
|
145
|
+
* @param data The input object containing the data to be converted into FormData. The properties of this object can be of type string, number, File, Blob, or nested objects.
|
|
146
|
+
* @returns The FormData instance containing the data from the input object.
|
|
147
|
+
*/
|
|
148
|
+
declare function toFormData(data: any): FormData;
|
|
149
|
+
|
|
130
150
|
declare const HTTP_SERVICE_CONFIG: InjectionToken<HttpServiceConfig>;
|
|
131
151
|
/**
|
|
132
152
|
* Configuration for the HttpService.
|
|
@@ -163,5 +183,5 @@ declare function provideHttpService(config?: HttpServiceConfig, ...features: Par
|
|
|
163
183
|
*/
|
|
164
184
|
declare function httpDataRequestResolver1<T = any>(url: string, dataRequest: DataRequest, options?: HttpRequestOptions): Observable<DataResult<T>>;
|
|
165
185
|
|
|
166
|
-
export { HTTP_SERVICE_CONFIG, HttpService, httpDataRequestResolver1, provideHttpService };
|
|
186
|
+
export { HTTP_SERVICE_CONFIG, HttpService, httpDataRequestResolver1, provideHttpService, toFormData };
|
|
167
187
|
export type { HttpDataRequestResolver, HttpRequestCompleteEvent, HttpRequestErrorEvent, HttpRequestEvent, HttpRequestEventBase, HttpRequestOptions, HttpRequestProgressEvent, HttpRequestSendEvent, HttpServiceConfig, HttpServiceFeature };
|