@sealcode/sealgen 0.18.3 → 0.18.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/@types/add-collection.d.ts +1 -0
  2. package/@types/add-crud.d.ts +3 -0
  3. package/@types/add-jdd-component.d.ts +1 -0
  4. package/@types/add-list-route.test.d.ts +1 -0
  5. package/@types/add-route.d.ts +3 -0
  6. package/@types/add-route.test.d.ts +1 -0
  7. package/@types/add-verbose-crud.d.ts +3 -0
  8. package/@types/build.d.ts +3 -0
  9. package/@types/builders/backend-ts-builder.d.ts +7 -0
  10. package/@types/builders/builder.d.ts +11 -0
  11. package/@types/builders/colors-builder.d.ts +10 -0
  12. package/@types/builders/css-builder.d.ts +19 -0
  13. package/@types/builders/fonts-builder.d.ts +7 -0
  14. package/@types/builders/frontend-ts-builder.d.ts +11 -0
  15. package/@types/cli.d.ts +2 -0
  16. package/@types/components/components.d.ts +2 -0
  17. package/@types/components/tabs.d.ts +2 -0
  18. package/@types/components/toggle-modal.d.ts +6 -0
  19. package/@types/crud-field-snippets.d.ts +3 -0
  20. package/@types/embeddable-file-extensions.d.ts +1 -0
  21. package/@types/esbuild-plugins/load-assets.d.ts +5 -0
  22. package/@types/esbuild-plugins/rewrite-asset-imports.d.ts +5 -0
  23. package/@types/example.test.d.ts +1 -0
  24. package/@types/find-css-includes.d.ts +1 -0
  25. package/@types/forms/controls/array.d.ts +35 -0
  26. package/@types/forms/controls/autocomplete.d.ts +22 -0
  27. package/@types/forms/controls/big-radio-group.d.ts +14 -0
  28. package/@types/forms/controls/checkbox-group.d.ts +21 -0
  29. package/@types/forms/controls/checkbox.d.ts +17 -0
  30. package/@types/forms/controls/checkboxed-list-input.d.ts +21 -0
  31. package/@types/forms/controls/checkboxed-list-input.test.d.ts +1 -0
  32. package/@types/forms/controls/collapsible-checkbox-group.d.ts +11 -0
  33. package/@types/forms/controls/collapsible-field-group.d.ts +21 -0
  34. package/@types/forms/controls/controls.d.ts +31 -0
  35. package/@types/forms/controls/derived-frame.d.ts +21 -0
  36. package/@types/forms/controls/derived.d.ts +13 -0
  37. package/@types/forms/controls/dropdown.d.ts +30 -0
  38. package/@types/forms/controls/editable-collection-subset.d.ts +20 -0
  39. package/@types/forms/controls/field-group.d.ts +23 -0
  40. package/@types/forms/controls/file.d.ts +13 -0
  41. package/@types/forms/controls/file.test.d.ts +1 -0
  42. package/@types/forms/controls/form-control.d.ts +20 -0
  43. package/@types/forms/controls/form-field-control.d.ts +13 -0
  44. package/@types/forms/controls/form-header.d.ts +8 -0
  45. package/@types/forms/controls/form-paragraph.d.ts +7 -0
  46. package/@types/forms/controls/frame.d.ts +17 -0
  47. package/@types/forms/controls/hidden-input.d.ts +9 -0
  48. package/@types/forms/controls/html.d.ts +11 -0
  49. package/@types/forms/controls/multiple-files.d.ts +40 -0
  50. package/@types/forms/controls/multiple-photos.d.ts +19 -0
  51. package/@types/forms/controls/number.d.ts +13 -0
  52. package/@types/forms/controls/photo.d.ts +21 -0
  53. package/@types/forms/controls/photo.test.d.ts +1 -0
  54. package/@types/forms/controls/radio.d.ts +16 -0
  55. package/@types/forms/controls/reverse-single-reference.d.ts +1 -0
  56. package/@types/forms/controls/simple-input.d.ts +33 -0
  57. package/@types/forms/controls/single-reference.d.ts +13 -0
  58. package/@types/forms/controls/single-reference.test.d.ts +1 -0
  59. package/@types/forms/controls/table.d.ts +34 -0
  60. package/@types/forms/controls/textarea.d.ts +25 -0
  61. package/@types/forms/controls/tickable.d.ts +25 -0
  62. package/@types/forms/fields/boolean.d.ts +17 -0
  63. package/@types/forms/fields/boolean.test.d.ts +1 -0
  64. package/@types/forms/fields/checkboxed-list.d.ts +21 -0
  65. package/@types/forms/fields/collection-field.d.ts +15 -0
  66. package/@types/forms/fields/email.d.ts +7 -0
  67. package/@types/forms/fields/email.test.d.ts +1 -0
  68. package/@types/forms/fields/enum-multiple.d.ts +18 -0
  69. package/@types/forms/fields/enum-multiple.test.d.ts +1 -0
  70. package/@types/forms/fields/enum.d.ts +18 -0
  71. package/@types/forms/fields/enum.test.d.ts +1 -0
  72. package/@types/forms/fields/existing-sealious-value.d.ts +6 -0
  73. package/@types/forms/fields/field.d.ts +48 -0
  74. package/@types/forms/fields/field.test.d.ts +1 -0
  75. package/@types/forms/fields/fields.d.ts +16 -0
  76. package/@types/forms/fields/file.d.ts +19 -0
  77. package/@types/forms/fields/file.test.d.ts +1 -0
  78. package/@types/forms/fields/multiple-files.d.ts +14 -0
  79. package/@types/forms/fields/number.d.ts +23 -0
  80. package/@types/forms/fields/number.test.d.ts +1 -0
  81. package/@types/forms/fields/pick-from-list.d.ts +14 -0
  82. package/@types/forms/fields/pick-from-list.test.d.ts +1 -0
  83. package/@types/forms/fields/proxy-field.d.ts +13 -0
  84. package/@types/forms/fields/regexp.d.ts +16 -0
  85. package/@types/forms/fields/regexp.test.d.ts +1 -0
  86. package/@types/forms/fields/reverse-single-reference.d.ts +13 -0
  87. package/@types/forms/fields/simple-form-field.d.ts +9 -0
  88. package/@types/forms/fields/structured-array.d.ts +14 -0
  89. package/@types/forms/fields/table.d.ts +13 -0
  90. package/@types/forms/form-types.d.ts +26 -0
  91. package/@types/forms/form.d.ts +31 -0
  92. package/@types/forms/form.test.d.ts +6 -0
  93. package/@types/forms/multiform.d.ts +24 -0
  94. package/@types/forms/multiform.test.d.ts +1 -0
  95. package/@types/generate-collections.d.ts +2 -0
  96. package/@types/generate-components.d.ts +1 -0
  97. package/@types/generate-routes.d.ts +5 -0
  98. package/@types/generate-routes.test.d.ts +1 -0
  99. package/@types/generate-stimulus.d.ts +1 -0
  100. package/@types/get-fonts.d.ts +2 -0
  101. package/@types/index.d.ts +46 -0
  102. package/@types/make-env.d.ts +1 -0
  103. package/@types/make-hidden-inputs.d.ts +5 -0
  104. package/@types/mount.d.ts +7 -0
  105. package/@types/notifier.d.ts +2 -0
  106. package/@types/page/access-control.d.ts +6 -0
  107. package/@types/page/default-list-filters.d.ts +18 -0
  108. package/@types/page/list.d.ts +48 -0
  109. package/@types/page/mountable-with-fields.d.ts +42 -0
  110. package/@types/page/mountable-with-fields.test.d.ts +1 -0
  111. package/@types/page/mountable.d.ts +11 -0
  112. package/@types/page/page.d.ts +19 -0
  113. package/@types/page/props-parser.d.ts +16 -0
  114. package/@types/page/sealious-list.d.ts +20 -0
  115. package/@types/page/sealious-list.test.d.ts +1 -0
  116. package/@types/page/stateful-page.d.ts +63 -0
  117. package/@types/page/stateful-page.test.d.ts +1 -0
  118. package/@types/register-external.d.ts +2 -0
  119. package/@types/register-external.test.d.ts +1 -0
  120. package/@types/run.d.ts +1 -0
  121. package/@types/sanitize.d.ts +1 -0
  122. package/@types/src/builder.d.ts +9 -7
  123. package/@types/src/page/list.d.ts +1 -1
  124. package/@types/src/register-external.d.ts +2 -0
  125. package/@types/src/register-external.test.d.ts +1 -0
  126. package/@types/target-locreq.d.ts +4 -0
  127. package/@types/templates/collection.d.ts +1 -0
  128. package/@types/templates/form.d.ts +16 -0
  129. package/@types/templates/jdd-component.d.ts +1 -0
  130. package/@types/templates/jdd-editor.d.ts +1 -0
  131. package/@types/templates/list.d.ts +1 -0
  132. package/@types/templates/long-running-process.d.ts +1 -0
  133. package/@types/templates/multiform.d.ts +1 -0
  134. package/@types/templates/page.d.ts +1 -0
  135. package/@types/templates/post.d.ts +1 -0
  136. package/@types/templates/redirect.d.ts +1 -0
  137. package/@types/templates/route-test.d.ts +1 -0
  138. package/@types/templates/shared/collection-create-form.d.ts +1 -0
  139. package/@types/templates/shared/collection-edit-form.d.ts +1 -0
  140. package/@types/templates/shared/collection-list.d.ts +16 -0
  141. package/@types/templates/shared/handlers/boolean.d.ts +2 -0
  142. package/@types/templates/shared/handlers/date.d.ts +2 -0
  143. package/@types/templates/shared/handlers/deep-reverse-single-reference.d.ts +2 -0
  144. package/@types/templates/shared/handlers/default.d.ts +2 -0
  145. package/@types/templates/shared/handlers/enum.d.ts +2 -0
  146. package/@types/templates/shared/handlers/file.d.ts +2 -0
  147. package/@types/templates/shared/handlers/image.d.ts +2 -0
  148. package/@types/templates/shared/handlers/int.d.ts +2 -0
  149. package/@types/templates/shared/handlers/jdd.d.ts +2 -0
  150. package/@types/templates/shared/handlers/single-reference.d.ts +2 -0
  151. package/@types/templates/shared/handlers/structured-array.d.ts +2 -0
  152. package/@types/templates/shared/item-delete.d.ts +1 -0
  153. package/@types/templates/shared/shared-crud-form-fields.d.ts +68 -0
  154. package/@types/templates/stateful-page.d.ts +1 -0
  155. package/@types/templates/stimulus-controller.d.ts +1 -0
  156. package/@types/templates/templates.d.ts +21 -0
  157. package/@types/test_utils/exec_async.d.ts +1 -0
  158. package/@types/test_utils/locator_is_visible.d.ts +2 -0
  159. package/@types/test_utils/test-on-real-app.d.ts +27 -0
  160. package/@types/utils/assert-throws.d.ts +1 -0
  161. package/@types/utils/base64.d.ts +2 -0
  162. package/@types/utils/browser-creator.d.ts +1 -0
  163. package/@types/utils/escape-url-params.d.ts +2 -0
  164. package/@types/utils/exec.d.ts +5 -0
  165. package/@types/utils/extract-fields-from-collection.d.ts +14 -0
  166. package/@types/utils/format-external-url.d.ts +1 -0
  167. package/@types/utils/import-path.d.ts +2 -0
  168. package/@types/utils/input-wrapper.d.ts +3 -0
  169. package/@types/utils/list-collections.d.ts +1 -0
  170. package/@types/utils/make-slug.d.ts +1 -0
  171. package/@types/utils/module-dirname.d.ts +1 -0
  172. package/@types/utils/natural-numbers.d.ts +1 -0
  173. package/@types/utils/prettier.d.ts +3 -0
  174. package/@types/utils/question.d.ts +1 -0
  175. package/@types/utils/render-attributes.d.ts +1 -0
  176. package/@types/utils/sleep.d.ts +1 -0
  177. package/@types/utils/translate.d.ts +3 -0
  178. package/@types/utils/url-with-new-params.d.ts +2 -0
  179. package/@types/utils/utils.d.ts +17 -0
  180. package/@types/utils/walk.d.ts +1 -0
  181. package/@types/utils/with-fallback.d.ts +2 -0
  182. package/@types/utils/write-file.d.ts +1 -0
  183. package/README.md +57 -0
  184. package/lib/builders/colors-builder.js +17 -1
  185. package/lib/cli.js +7 -1
  186. package/lib/esbuild-plugins/rewrite-asset-imports.js +4 -2
  187. package/lib/page/list.js +7 -3
  188. package/lib/register-external.js +105 -0
  189. package/lib/register-external.test.js +340 -0
  190. package/package.json +4 -1
  191. package/src/builders/colors-builder.ts +20 -1
  192. package/src/cli.ts +6 -0
  193. package/src/esbuild-plugins/rewrite-asset-imports.ts +4 -2
  194. package/src/forms/controls/single-reference.ts +1 -1
  195. package/src/page/list.ts +17 -4
  196. package/src/register-external.test.ts +469 -0
  197. package/src/register-external.ts +148 -0
  198. package/remove-named-imports.js +0 -68
@@ -0,0 +1,40 @@
1
+ /// <reference types="koa__router" resolution-mode="require"/>
2
+ import Router from "@koa/router";
3
+ import { Collection, CollectionItem, Field as SealiousField } from "sealious";
4
+ import { Context } from "koa";
5
+ import { FlatTemplatable } from "tempstream";
6
+ import { MultipleFiles as MultipleFilesField } from "../fields/multiple-files.js";
7
+ import { FormFieldControl } from "./form-field-control.js";
8
+ import { FormControlContext } from "./form-control.js";
9
+ import { FilePointer } from "@sealcode/file-manager";
10
+ export type MultipleFilesOptions = {
11
+ label?: string;
12
+ uploadLabel?: string;
13
+ getAdditionalFields: (ctx: Context, file: FilePointer) => Promise<Record<string, unknown>>;
14
+ };
15
+ export declare class MultipleFiles extends FormFieldControl {
16
+ field: MultipleFilesField;
17
+ options: MultipleFilesOptions;
18
+ constructor(field: MultipleFilesField, options?: Partial<MultipleFilesOptions>);
19
+ getClassModifiers(): string[];
20
+ mount(router: Router): void;
21
+ deleteFileAssociation(ctx: Context, file_item_id: string): Promise<void>;
22
+ addFileAssociation(ctx: Context, file: FilePointer): Promise<void>;
23
+ getFrameRelativeURL(): string;
24
+ getFrameID(): string;
25
+ renderFrame(_ctx: Context, content?: FlatTemplatable): string | Promise<string>;
26
+ render(fctx: FormControlContext): FlatTemplatable | Promise<FlatTemplatable>;
27
+ getReferencingCollection(): Collection;
28
+ getFileField(): SealiousField<any> | null;
29
+ extractFileFromItem(item: CollectionItem<Collection>): Promise<FilePointer | null>;
30
+ renderFileItemPreview(_fileItem: CollectionItem, file: FilePointer): Promise<FlatTemplatable>;
31
+ renderFileItem(fileItem: CollectionItem, file: FilePointer): Promise<FlatTemplatable>;
32
+ renderFileRemoveButton(fileItem: CollectionItem): FlatTemplatable;
33
+ getFileItems(ctx: Context): Promise<CollectionItem<any>[]>;
34
+ getInputAttributes(): {
35
+ type: string;
36
+ name: string;
37
+ multiple: boolean;
38
+ };
39
+ renderFrameContent(ctx: Context): Promise<FlatTemplatable>;
40
+ }
@@ -0,0 +1,19 @@
1
+ import { CollectionItem } from "sealious";
2
+ import { FilePointer } from "@sealcode/file-manager";
3
+ import { FlatTemplatable } from "tempstream";
4
+ import { MultipleFiles, MultipleFilesOptions } from "./multiple-files.js";
5
+ import { MultipleFiles as MultipleFilesField } from "../fields/multiple-files.js";
6
+ import { KoaResponsiveImageRouter } from "koa-responsive-image-router";
7
+ export declare class MultiplePhotos extends MultipleFiles {
8
+ field: MultipleFilesField;
9
+ imageRouter: KoaResponsiveImageRouter;
10
+ constructor(field: MultipleFilesField, imageRouter: KoaResponsiveImageRouter, options?: Partial<MultipleFilesOptions>);
11
+ getClassModifiers(): string[];
12
+ getInputAttributes(): {
13
+ accept: string;
14
+ type: string;
15
+ name: string;
16
+ multiple: boolean;
17
+ };
18
+ renderFileItem(fileItem: CollectionItem, file: FilePointer): Promise<FlatTemplatable>;
19
+ }
@@ -0,0 +1,13 @@
1
+ import { NumberField } from "../fields/number.js";
2
+ import { FormControlContext } from "./form-control.js";
3
+ import { SimpleInput, SimpleInputOptions } from "./simple-input.js";
4
+ export type NumberOptions = SimpleInputOptions & Partial<{
5
+ step: number;
6
+ }>;
7
+ export declare class Number extends SimpleInput<number | null> {
8
+ field: NumberField;
9
+ options: NumberOptions;
10
+ constructor(field: NumberField, options: NumberOptions);
11
+ getType(): string;
12
+ getInputAttributes(fctx: FormControlContext): Promise<Record<string, string | boolean>>;
13
+ }
@@ -0,0 +1,21 @@
1
+ import { Context } from "koa";
2
+ import { FlatTemplatable } from "tempstream";
3
+ import { File } from "./file.js";
4
+ import { FormField } from "../fields/field.js";
5
+ import { SimpleInputOptions } from "./simple-input.js";
6
+ import { FormControlContext } from "./form-control.js";
7
+ import { FileContainer } from "../fields/file.js";
8
+ import { KoaResponsiveImageRouter } from "koa-responsive-image-router";
9
+ import { FilePointer } from "@sealcode/file-manager";
10
+ export declare class Photo extends File {
11
+ field: FormField<boolean, FileContainer>;
12
+ imageRouter: KoaResponsiveImageRouter;
13
+ constructor(field: FormField<boolean, FileContainer>, imageRouter: KoaResponsiveImageRouter, options?: SimpleInputOptions);
14
+ getImgStyle(): Promise<string>;
15
+ renderFilePreview(_ctx: Context, file: FilePointer | null): Promise<FlatTemplatable>;
16
+ getWrapperModifiers(): string[];
17
+ getInputAttributes(fctx: FormControlContext): Promise<{
18
+ accept: string;
19
+ onchange: string;
20
+ }>;
21
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { Context } from "koa";
2
+ import { FormField } from "../fields/field.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { Tickable } from "./tickable.js";
5
+ export declare class Radio extends Tickable<string> {
6
+ field: FormField<boolean, string>;
7
+ value: string;
8
+ type: "radio";
9
+ constructor(field: FormField<boolean, string>, value: string, options: {
10
+ label?: string;
11
+ });
12
+ makeInputID(): string;
13
+ getValueAttribute(): string;
14
+ getWrapperClasses(ctx: Context, data: Record<string, FormDataValue>, value: string): string[];
15
+ isChecked(_ctx: Context, _data: Record<string, FormDataValue>, value: string): boolean;
16
+ }
@@ -0,0 +1,33 @@
1
+ import { Context } from "koa";
2
+ import { FlatTemplatable } from "tempstream";
3
+ import { FormField } from "../fields/field.js";
4
+ import { FormDataValue } from "../form-types.js";
5
+ import { FormControlContext } from "./form-control.js";
6
+ import { FormFieldControl } from "./form-field-control.js";
7
+ export type SimpleInputOptions = {
8
+ id?: string;
9
+ label?: string;
10
+ autocomplete?: boolean;
11
+ hide_errors?: boolean;
12
+ type?: "color" | "date" | "email" | "file" | "month" | "number" | "password" | "search" | "tel" | "text" | "time" | "url" | "week";
13
+ value?: string;
14
+ placeholder?: string;
15
+ readonly?: boolean;
16
+ step?: number;
17
+ suffix?: string;
18
+ };
19
+ export declare class SimpleInput<ParsedValue, Options extends SimpleInputOptions = SimpleInputOptions> extends FormFieldControl {
20
+ field: FormField<boolean, ParsedValue>;
21
+ options: SimpleInputOptions;
22
+ constructor(field: FormField<boolean, ParsedValue>, options?: Options);
23
+ preInput(_ctx: FormControlContext, _data: Record<string, FormDataValue>): Promise<FlatTemplatable>;
24
+ getType(): string;
25
+ getLabel(): string;
26
+ getID(): string;
27
+ getPlaceholder(): string;
28
+ getInputAttributes(fctx: FormControlContext): Promise<Record<string, string | boolean>>;
29
+ postInput(_: Context): Promise<FlatTemplatable>;
30
+ renderInput(_ctx: Context, attributes_str: string, _data: Record<string, FormDataValue>): Promise<FlatTemplatable>;
31
+ getWrapperModifiers(): string[];
32
+ render(fctx: FormControlContext): Promise<FlatTemplatable>;
33
+ }
@@ -0,0 +1,13 @@
1
+ import SealiousSingleReference from "sealious/@types/app/base-chips/field-types/single-reference.js";
2
+ import { CollectionField } from "../fields/collection-field.js";
3
+ import { DropdownOptions, FreeformDropdown } from "./dropdown.js";
4
+ import { Collection, CollectionItem } from "sealious";
5
+ export declare class SingleReferenceDropdown<F extends SealiousSingleReference, Required extends boolean> extends FreeformDropdown {
6
+ field: CollectionField<F, Required>;
7
+ options: DropdownOptions & {
8
+ getLabel?: (item: CollectionItem<Collection>) => string;
9
+ };
10
+ constructor(field: CollectionField<F, Required>, options?: DropdownOptions & {
11
+ getLabel?: (item: CollectionItem<Collection>) => string;
12
+ });
13
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ /// <reference types="koa__router" resolution-mode="require"/>
2
+ import Router from "@koa/router";
3
+ import { Context } from "koa";
4
+ import { FlatTemplatable } from "tempstream";
5
+ import { FormField } from "../fields/field.js";
6
+ import { Table as TableField } from "../fields/table.js";
7
+ import { Form } from "../form.js";
8
+ import { FormControl, FormControlContext } from "./form-control.js";
9
+ export type TableControlOptions<F extends Record<string, FormField>> = {
10
+ render_fields: {
11
+ [field_name in keyof F]: (fctx: FormControlContext, name: string, value: string) => FlatTemplatable | Promise<FlatTemplatable>;
12
+ };
13
+ allow_removing?: boolean;
14
+ label_add?: string;
15
+ label: string;
16
+ label_remove?: string;
17
+ } & ({
18
+ allow_adding: false;
19
+ } | {
20
+ allow_adding: true;
21
+ make_new_row: (ctx: Context) => Promise<{
22
+ [field_name in keyof F]: unknown;
23
+ }>;
24
+ });
25
+ export declare class Table<F extends Record<string, FormField>> extends FormControl {
26
+ table_field: TableField<F>;
27
+ options: TableControlOptions<F>;
28
+ role: "input";
29
+ constructor(table_field: TableField<F>, options: TableControlOptions<F>);
30
+ render(fctx: FormControlContext): Promise<FlatTemplatable>;
31
+ getFrameID(): string;
32
+ getActionURL(field_name: string, action: Record<string, unknown>): string;
33
+ mount(router: Router, form: Form<any, any>): void;
34
+ }
@@ -0,0 +1,25 @@
1
+ import { Context } from "koa";
2
+ import { FormField } from "../fields/field.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FormControlContext } from "./form-control.js";
5
+ import { SimpleInput, SimpleInputOptions } from "./simple-input.js";
6
+ export declare class Textarea extends SimpleInput<string | null> {
7
+ field: FormField<boolean, string | null>;
8
+ options: SimpleInputOptions & {
9
+ label?: string;
10
+ rows?: number;
11
+ cols?: number;
12
+ description?: string;
13
+ autogrow?: boolean;
14
+ };
15
+ constructor(field: FormField<boolean, string | null>, options?: SimpleInputOptions & {
16
+ label?: string;
17
+ rows?: number;
18
+ cols?: number;
19
+ description?: string;
20
+ autogrow?: boolean;
21
+ });
22
+ renderDescription(): string;
23
+ getInputAttributes(fctx: FormControlContext): Promise<Record<string, string | boolean>>;
24
+ renderInput(ctx: Context, attributes: string, data: Record<string, FormDataValue>): Promise<string>;
25
+ }
@@ -0,0 +1,25 @@
1
+ import { Context } from "koa";
2
+ import { FlatTemplatable } from "tempstream";
3
+ import { FormField } from "../fields/field.js";
4
+ import { FormDataValue } from "../form-types.js";
5
+ import { FormControlContext } from "./form-control.js";
6
+ import { FormFieldControl } from "./form-field-control.js";
7
+ export type TickableOptions<T> = {
8
+ id?: string;
9
+ name?: string;
10
+ label?: string;
11
+ hide_errors?: boolean;
12
+ readonly?: boolean;
13
+ default_value: T;
14
+ };
15
+ export declare abstract class Tickable<T> extends FormFieldControl {
16
+ field: FormField<boolean, T>;
17
+ options: TickableOptions<T>;
18
+ constructor(field: FormField<boolean, T>, options: TickableOptions<T>);
19
+ type: "checkbox" | "radio";
20
+ abstract getValueAttribute(ctx: Context, data: Record<string, FormDataValue>, value: T): string;
21
+ abstract isChecked(ctx: Context, data: Record<string, FormDataValue>, value: T): boolean;
22
+ makeInputID(ctx: Context, data: Record<string, FormDataValue>, value: T): string;
23
+ getWrapperClasses(ctx: Context, data: Record<string, FormDataValue>, value: T): string[];
24
+ render(fctx: FormControlContext): Promise<FlatTemplatable>;
25
+ }
@@ -0,0 +1,17 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export declare class Boolean<Required extends boolean> extends FormField<Required, boolean> {
5
+ error_message: string;
6
+ predicate: (v: unknown, w: unknown) => {
7
+ readonly match: boolean;
8
+ readonly wildcard: boolean;
9
+ };
10
+ constructor(required: Required, error_message?: string);
11
+ isValueValid(_: Context, value: boolean): Promise<{
12
+ valid: boolean;
13
+ message: string;
14
+ }>;
15
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<boolean>>;
16
+ getEmptyValue(): boolean;
17
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField, FormFieldValidationResponse } from "./field.js";
4
+ export type CheckboxedListItem = {
5
+ value: string;
6
+ label?: string;
7
+ group?: string;
8
+ };
9
+ export declare class CheckboxedListField<Required extends boolean> extends FormField<Required, Record<string, "on">> {
10
+ required: Required;
11
+ generateOptions: (ctx: Context) => Promise<CheckboxedListItem[]>;
12
+ isVisible: (ctx: Context) => Promise<boolean>;
13
+ constructor(required: Required, generateOptions: (ctx: Context) => Promise<CheckboxedListItem[]>, isVisible?: (ctx: Context) => Promise<boolean>);
14
+ predicate: (v: unknown, w: unknown) => {
15
+ readonly match: boolean;
16
+ readonly wildcard: string[];
17
+ };
18
+ isValueValid(_: Context, value: unknown): Promise<FormFieldValidationResponse>;
19
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<Record<string, "on">>>;
20
+ getEmptyValue(): Record<string, "on">;
21
+ }
@@ -0,0 +1,15 @@
1
+ import { Context } from "koa";
2
+ import { ExtractFieldDecoded, Field } from "sealious";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField, FormFieldValidationResponse } from "./field.js";
5
+ export declare class CollectionField<F extends Field<any>, Required extends boolean> extends FormField<Required, ExtractFieldDecoded<F> | null> {
6
+ sealiousField: F;
7
+ constructor(required: Required, sealiousField: F);
8
+ predicate: (v: unknown, w: unknown) => {
9
+ readonly match: true;
10
+ readonly wildcard: unknown;
11
+ };
12
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<ExtractFieldDecoded<F> | null>>;
13
+ isValueValid(ctx: Context, value: ExtractFieldDecoded<F>): Promise<FormFieldValidationResponse>;
14
+ getEmptyValue(): ExtractFieldDecoded<F>;
15
+ }
@@ -0,0 +1,7 @@
1
+ import { RegExpField } from "./regexp.js";
2
+ export declare class EmailField<Required extends boolean> extends RegExpField<Required> {
3
+ error_message: string;
4
+ default_value: string;
5
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
6
+ constructor(required: Required, error_message?: string, default_value?: string);
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export declare class EnumMultipleField<Options extends readonly string[], Required extends boolean> extends FormField<Required, string[]> {
5
+ options: Options;
6
+ error_message: (options: Options) => string;
7
+ constructor(required: Required, options: Options, error_message?: (options: Options) => string);
8
+ predicate: (v: unknown, w: unknown) => {
9
+ readonly match: boolean;
10
+ readonly wildcard: Options[number];
11
+ };
12
+ isValueValid(_: Context, values: string[]): Promise<{
13
+ valid: boolean;
14
+ message: string;
15
+ }>;
16
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string[]>>;
17
+ getEmptyValue(): string[];
18
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export declare class EnumField<Options extends readonly string[], Required extends boolean> extends FormField<Required, string> {
5
+ options: Options;
6
+ error_message: (options: Options) => string;
7
+ constructor(required: Required, options: Options, error_message?: (options: Options) => string);
8
+ predicate: (v: unknown, w: unknown) => {
9
+ readonly match: boolean;
10
+ readonly wildcard: Options[number];
11
+ };
12
+ isValueValid(_: Context, value: unknown): Promise<{
13
+ valid: boolean;
14
+ message: string;
15
+ }>;
16
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string>>;
17
+ getEmptyValue(): string;
18
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { Field } from "sealious";
2
+ import { PickFromListField } from "./pick-from-list.js";
3
+ export declare class ExistingSealiousValue<Required extends boolean> extends PickFromListField<Required> {
4
+ constructor(required: Required, field: Field<unknown>);
5
+ getEmptyValue(): string;
6
+ }
@@ -0,0 +1,48 @@
1
+ import { Predicate, predicates } from "@sealcode/ts-predicates";
2
+ import { Context } from "koa";
3
+ import { FormDataValue } from "../form-types.js";
4
+ export type FormFieldValidationResponse = {
5
+ valid: boolean;
6
+ message: string;
7
+ };
8
+ export type FormFieldValidationFn<ValueType> = (ctx: Context, value: ValueType, field: FormField<boolean, ValueType>) => Promise<FormFieldValidationResponse>;
9
+ export type FieldParsedValue<T> = T extends FormField<infer R> ? R : never;
10
+ export type GetPredicate<F extends FormField> = F extends FormField<true> ? F["predicate"] : F["predicate"] | typeof predicates.undefined;
11
+ export type FieldsToShape<T extends Record<string, FormField>> = {
12
+ [property in keyof T]: GetPredicate<T[property]>;
13
+ };
14
+ export declare function fieldsToShape<Fields extends Record<string, FormField>>(obj: Fields): FieldsToShape<Fields>;
15
+ export type FieldParseResult<T> = {
16
+ parsable: true;
17
+ error: null;
18
+ parsed_value: T;
19
+ } | {
20
+ parsable: false;
21
+ error: string;
22
+ parsed_value: null;
23
+ };
24
+ export declare abstract class FormField<Required extends boolean = boolean, ParsedValue = unknown> {
25
+ readonly required: Required;
26
+ name: string;
27
+ constructor(required: Required);
28
+ predicate: Predicate;
29
+ mapToFilter: (parsed: ParsedValue) => unknown;
30
+ init(fieldname: string): Promise<void>;
31
+ _validate(ctx: Context, value: ParsedValue): Promise<FormFieldValidationResponse>;
32
+ abstract getEmptyValue(): ParsedValue;
33
+ isValueValid(_ctx: Context, _value: ParsedValue): Promise<FormFieldValidationResponse>;
34
+ abstract parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<ParsedValue>>;
35
+ getValue(ctx: Context, all_form_values: Record<string, FormDataValue>, validate: true): Promise<{
36
+ valid: boolean;
37
+ message: string;
38
+ parsed: ParsedValue | null;
39
+ raw: FormDataValue;
40
+ }>;
41
+ getValue(ctx: Context, all_form_values: Record<string, FormDataValue>, validate?: false): Promise<{
42
+ message: string;
43
+ parsed: ParsedValue | null;
44
+ raw: FormDataValue;
45
+ }>;
46
+ setMapToFilter(fn: (parsed: ParsedValue) => unknown): this;
47
+ getDatabaseValue(ctx: Context, data: Record<string, FormDataValue>): Promise<unknown>;
48
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ export * from "./simple-form-field.js";
2
+ export * from "./checkboxed-list.js";
3
+ export * from "./collection-field.js";
4
+ export * from "./number.js";
5
+ export * from "./pick-from-list.js";
6
+ export * from "./regexp.js";
7
+ export * from "./email.js";
8
+ export * from "./enum.js";
9
+ export * from "./boolean.js";
10
+ export * from "./enum-multiple.js";
11
+ export * from "./existing-sealious-value.js";
12
+ export * from "./file.js";
13
+ export * from "./multiple-files.js";
14
+ export * from "./reverse-single-reference.js";
15
+ export * from "./structured-array.js";
16
+ export * from "./table.js";
@@ -0,0 +1,19 @@
1
+ import { Context } from "koa";
2
+ import { FileManager, FilePointer } from "@sealcode/file-manager";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ export type FileContainer = {
6
+ old: FilePointer | null;
7
+ new: FilePointer | null;
8
+ };
9
+ export declare class File<Required extends boolean> extends FormField<Required, FileContainer> {
10
+ readonly required: Required;
11
+ file_manager: FileManager;
12
+ constructor(required: Required, file_manager: FileManager);
13
+ parse(_ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<FileContainer>>;
14
+ getDatabaseValue(ctx: Context, data: Record<string, FormDataValue>): Promise<FilePointer | undefined>;
15
+ getEmptyValue(): {
16
+ old: null;
17
+ new: null;
18
+ };
19
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import { Context } from "koa";
2
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
3
+ import { FormField } from "./field.js";
4
+ export declare class MultipleFiles extends FormField<false> {
5
+ collection_field: SealiousFieldTypes.ReverseSingleReference;
6
+ getItemId: (ctx: Context) => Promise<string> | string;
7
+ constructor(collection_field: SealiousFieldTypes.ReverseSingleReference, getItemId: (ctx: Context) => Promise<string> | string);
8
+ getEmptyValue(): undefined;
9
+ parse(): Promise<{
10
+ readonly parsed_value: undefined;
11
+ readonly parsable: true;
12
+ readonly error: null;
13
+ }>;
14
+ }
@@ -0,0 +1,23 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export declare class NumberField<DefaultValue extends number | null = number, Required extends boolean = boolean> extends FormField<Required, number | DefaultValue> {
5
+ default_value: DefaultValue;
6
+ options: Partial<{
7
+ max: number;
8
+ min: number;
9
+ decimalDigits: number;
10
+ }>;
11
+ constructor(required: Required, default_value: DefaultValue, options?: Partial<{
12
+ max: number;
13
+ min: number;
14
+ decimalDigits: number;
15
+ }>);
16
+ predicate: import("@sealcode/ts-predicates").Predicate<number>;
17
+ isValueValid(_: Context, value: unknown): Promise<{
18
+ valid: boolean;
19
+ message: string;
20
+ }>;
21
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<number>>;
22
+ getEmptyValue(): DefaultValue;
23
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import { Context } from "koa";
2
+ import type { DropdownOption } from "../controls/dropdown.js";
3
+ import { FormFieldValidationResponse } from "./field.js";
4
+ import { SimpleFormField } from "./simple-form-field.js";
5
+ export declare class PickFromListField<Required extends boolean> extends SimpleFormField<Required> {
6
+ required: Required;
7
+ generateOptions: (ctx: Context) => Promise<DropdownOption[]>;
8
+ customValidation: (ctx: Context, value: unknown, instance: PickFromListField<Required>) => Promise<FormFieldValidationResponse>;
9
+ constructor(required: Required, generateOptions: (ctx: Context) => Promise<DropdownOption[]>, customValidation?: (ctx: Context, value: unknown, instance: PickFromListField<Required>) => Promise<FormFieldValidationResponse>);
10
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ isValueValid(ctx: Context, value: string): Promise<FormFieldValidationResponse>;
12
+ valueInList(ctx: Context, value: unknown): Promise<FormFieldValidationResponse>;
13
+ getEmptyValue(): string;
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { FormField } from "./field.js";
2
+ export declare class ProxyFormField<T> extends FormField<boolean, T> {
3
+ name: string;
4
+ empty_value: T;
5
+ parsed_value: T;
6
+ constructor(required: boolean, name: string, empty_value: T, parsed_value: T);
7
+ getEmptyValue(): T;
8
+ parse(): Promise<{
9
+ readonly parsable: true;
10
+ readonly error: null;
11
+ readonly parsed_value: T;
12
+ }>;
13
+ }
@@ -0,0 +1,16 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export declare class RegExpField<Required extends boolean> extends FormField<Required> {
5
+ regexp: RegExp;
6
+ error_message: string;
7
+ default_value: string;
8
+ constructor(required: Required, regexp: RegExp, error_message: string, default_value?: string);
9
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
10
+ isValueValid(_: Context, value: unknown): Promise<{
11
+ valid: boolean;
12
+ message: string;
13
+ }>;
14
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string>>;
15
+ getEmptyValue(): string;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { FormField } from "./field.js";
2
+ import { FieldTypes as SealiousFields } from "sealious";
3
+ import { Context } from "koa";
4
+ export declare class ReverseSingleReference extends FormField {
5
+ sealious_field: SealiousFields.ReverseSingleReference;
6
+ constructor(required: boolean, sealious_field: SealiousFields.ReverseSingleReference);
7
+ parse(ctx: Context, raw_value: unknown): Promise<{
8
+ parsable: true;
9
+ error: null;
10
+ parsed_value: unknown;
11
+ }>;
12
+ getEmptyValue(): never[];
13
+ }
@@ -0,0 +1,9 @@
1
+ import { FormDataValue } from "../form-types.js";
2
+ import { Context } from "koa";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export declare class SimpleFormField<Required extends boolean> extends FormField<Required, string | null> {
5
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
6
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
7
+ getEmptyValue(): string;
8
+ constructor(required: Required);
9
+ }
@@ -0,0 +1,14 @@
1
+ import { Context } from "koa";
2
+ import { Field, FieldsetOutput, FieldTypes } from "sealious";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FormField } from "./field.js";
5
+ export declare class StructuredArrayField<Fields extends Record<string, Field<unknown>>> extends FormField<true, FieldTypes.ArrayStorageInput<FieldsetOutput<Fields>>> {
6
+ sealious_field: FieldTypes.StructuredArray<Fields>;
7
+ constructor(sealious_field: FieldTypes.StructuredArray<Fields>);
8
+ parse(_context: Context, value: FormDataValue): Promise<{
9
+ parsable: true;
10
+ error: null;
11
+ parsed_value: FieldsetOutput<Fields>;
12
+ }>;
13
+ getEmptyValue(): FieldTypes.ArrayStorageInput<FieldsetOutput<Fields>>;
14
+ }
@@ -0,0 +1,13 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ export type ExtractFormFieldParsed<Field extends FormField> = Field extends FormField<true, infer T> ? NonNullable<T> : Field extends FormField<true, infer T> ? T : never;
5
+ export type TableFieldParsed<F extends Record<string, FormField>> = {
6
+ [field_name in keyof F]: ExtractFormFieldParsed<F[field_name]>;
7
+ }[];
8
+ export declare class Table<F extends Record<string, FormField>> extends FormField<false, TableFieldParsed<F>> {
9
+ columns: F;
10
+ constructor(columns: F);
11
+ getEmptyValue(): never[];
12
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<TableFieldParsed<F>>>;
13
+ }