@sealcode/sealgen 0.19.0 → 0.19.3

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 (185) hide show
  1. package/@types/forms/fields/deep-reverse-single-reference-list.d.ts +1 -5
  2. package/@types/forms/fields/file.d.ts +1 -1
  3. package/@types/forms/fields/password.d.ts +1 -2
  4. package/@types/forms/fields/simple-form-field.d.ts +4 -4
  5. package/@types/forms/fields/single-reference.d.ts +1 -1
  6. package/@types/register-external.d.ts +2 -2
  7. package/@types/templates/form.d.ts +1 -3
  8. package/@types/templates/jdd-component.d.ts +1 -1
  9. package/@types/templates/page.d.ts +1 -1
  10. package/@types/templates/shared/shared-crud-form-fields.d.ts +1 -1
  11. package/@types/templates/templates.d.ts +1 -21
  12. package/eslint.config.mjs +56 -0
  13. package/lib/add-crud.js +1 -4
  14. package/lib/add-jdd-component.js +3 -3
  15. package/lib/add-route.js +2 -2
  16. package/lib/build.js +3 -3
  17. package/lib/builders/backend-ts-builder.js +0 -1
  18. package/lib/builders/colors-builder.js +11 -8
  19. package/lib/builders/fonts-builder.js +0 -1
  20. package/lib/builders/frontend-ts-builder.js +0 -1
  21. package/lib/cli.js +2 -2
  22. package/lib/components/tabs.js +36 -36
  23. package/lib/esbuild-plugins/rewrite-asset-imports.js +7 -10
  24. package/lib/forms/controls/array.js +5 -6
  25. package/lib/forms/controls/checkboxed-list-input.js +1 -2
  26. package/lib/forms/controls/checkboxed-list-input.test.js +6 -6
  27. package/lib/forms/controls/derived-frame.js +3 -3
  28. package/lib/forms/controls/dropdown.js +1 -2
  29. package/lib/forms/controls/file.test.js +1 -1
  30. package/lib/forms/controls/form-control.js +1 -1
  31. package/lib/forms/controls/image.test.js +2 -2
  32. package/lib/forms/controls/single-reference.test.js +1 -1
  33. package/lib/forms/controls/table.js +10 -15
  34. package/lib/forms/controls/textarea.js +1 -1
  35. package/lib/forms/fields/deep-reverse-single-reference-list.js +1 -1
  36. package/lib/forms/fields/field.test.js +3 -3
  37. package/lib/forms/fields/file.js +1 -1
  38. package/lib/forms/fields/file.test.js +1 -1
  39. package/lib/forms/fields/password.js +1 -1
  40. package/lib/forms/fields/simple-form-field.js +4 -3
  41. package/lib/forms/fields/single-reference.js +1 -1
  42. package/lib/forms/fields/structured-array.js +0 -2
  43. package/lib/forms/fields/table.js +1 -1
  44. package/lib/forms/form.js +0 -1
  45. package/lib/forms/form.test.js +2 -3
  46. package/lib/forms/multiform.js +6 -7
  47. package/lib/forms/multiform.test.js +2 -2
  48. package/lib/generate-collections.js +2 -3
  49. package/lib/generate-components.js +2 -3
  50. package/lib/generate-routes.js +3 -5
  51. package/lib/generate-routes.test.js +7 -16
  52. package/lib/generate-stimulus.js +4 -5
  53. package/lib/get-fonts.js +29 -27
  54. package/lib/make-env.js +1 -1
  55. package/lib/make-hidden-inputs.js +4 -4
  56. package/lib/mount.js +0 -1
  57. package/lib/notifier.js +3 -3
  58. package/lib/page/list.js +5 -7
  59. package/lib/page/mountable.js +0 -1
  60. package/lib/page/page.js +0 -1
  61. package/lib/register-external.js +4 -4
  62. package/lib/templates/form.js +1 -1
  63. package/lib/templates/jdd-component.js +1 -1
  64. package/lib/templates/jdd-editor.js +1 -1
  65. package/lib/templates/page.js +1 -1
  66. package/lib/templates/shared/collection-create-form.js +4 -5
  67. package/lib/templates/shared/collection-edit-form.js +4 -5
  68. package/lib/templates/shared/collection-list.js +2 -2
  69. package/lib/templates/shared/shared-crud-form-fields.js +3 -5
  70. package/lib/test_utils/exec_async.js +3 -3
  71. package/lib/test_utils/test-on-real-app.js +9 -11
  72. package/lib/utils/write-file.js +1 -1
  73. package/package.json +9 -8
  74. package/src/add-collection.ts +1 -3
  75. package/src/add-crud.ts +2 -7
  76. package/src/add-jdd-component.ts +4 -5
  77. package/src/add-route.ts +3 -6
  78. package/src/build.ts +3 -3
  79. package/src/builders/backend-ts-builder.ts +0 -1
  80. package/src/builders/builder.ts +4 -1
  81. package/src/builders/colors-builder.ts +11 -9
  82. package/src/builders/css-builder.ts +4 -1
  83. package/src/builders/fonts-builder.ts +0 -1
  84. package/src/builders/frontend-ts-builder.ts +0 -1
  85. package/src/cli.ts +2 -2
  86. package/src/components/tabs.ts +38 -37
  87. package/src/components/toggle-modal.ts +1 -1
  88. package/src/controllers/table-add-button.stimulus.ts +1 -1
  89. package/src/esbuild-plugins/rewrite-asset-imports.ts +7 -10
  90. package/src/forms/controls/array.ts +12 -16
  91. package/src/forms/controls/autocomplete.ts +1 -1
  92. package/src/forms/controls/big-radio-group.ts +2 -2
  93. package/src/forms/controls/checkbox-group.ts +1 -1
  94. package/src/forms/controls/checkboxed-list-input.test.ts +6 -6
  95. package/src/forms/controls/checkboxed-list-input.ts +18 -22
  96. package/src/forms/controls/derived-frame.ts +11 -10
  97. package/src/forms/controls/derived.ts +6 -5
  98. package/src/forms/controls/dropdown.ts +8 -11
  99. package/src/forms/controls/editable-collection-subset.ts +2 -1
  100. package/src/forms/controls/field-group.ts +1 -1
  101. package/src/forms/controls/file.test.ts +1 -1
  102. package/src/forms/controls/file.ts +4 -7
  103. package/src/forms/controls/form-control.ts +1 -1
  104. package/src/forms/controls/hidden-input.ts +1 -0
  105. package/src/forms/controls/html.ts +1 -0
  106. package/src/forms/controls/image.test.ts +2 -2
  107. package/src/forms/controls/image.ts +1 -1
  108. package/src/forms/controls/multiple-files.ts +5 -7
  109. package/src/forms/controls/multiple-images.ts +1 -1
  110. package/src/forms/controls/simple-input.ts +8 -4
  111. package/src/forms/controls/single-reference.test.ts +1 -1
  112. package/src/forms/controls/single-reference.ts +1 -1
  113. package/src/forms/controls/table.ts +16 -21
  114. package/src/forms/controls/textarea.ts +1 -1
  115. package/src/forms/controls/tickable.ts +0 -2
  116. package/src/forms/fields/boolean.ts +4 -1
  117. package/src/forms/fields/checkboxed-list.ts +1 -1
  118. package/src/forms/fields/collection-field.ts +5 -2
  119. package/src/forms/fields/color.ts +1 -1
  120. package/src/forms/fields/coordinates.ts +2 -2
  121. package/src/forms/fields/deep-reverse-single-reference-list.ts +2 -8
  122. package/src/forms/fields/deep-reverse-single-reference-table.ts +1 -1
  123. package/src/forms/fields/email.ts +1 -1
  124. package/src/forms/fields/enum-multiple-sealious.ts +1 -1
  125. package/src/forms/fields/existing-sealious-value.ts +1 -1
  126. package/src/forms/fields/field.test.ts +3 -3
  127. package/src/forms/fields/field.ts +6 -5
  128. package/src/forms/fields/file.test.ts +1 -1
  129. package/src/forms/fields/file.ts +2 -2
  130. package/src/forms/fields/float.ts +1 -1
  131. package/src/forms/fields/get-field-for-sealious.ts +97 -64
  132. package/src/forms/fields/int.ts +1 -1
  133. package/src/forms/fields/number.ts +2 -2
  134. package/src/forms/fields/password.ts +2 -6
  135. package/src/forms/fields/pick-from-list-sealious.ts +1 -1
  136. package/src/forms/fields/pick-from-list.ts +1 -1
  137. package/src/forms/fields/proxy-field.ts +1 -0
  138. package/src/forms/fields/simple-form-field.ts +19 -9
  139. package/src/forms/fields/single-reference.ts +2 -2
  140. package/src/forms/fields/structured-array.ts +2 -6
  141. package/src/forms/fields/table.ts +7 -15
  142. package/src/forms/fields/text.ts +1 -1
  143. package/src/forms/fields/url.ts +1 -1
  144. package/src/forms/form-types.ts +3 -4
  145. package/src/forms/form.test.ts +2 -3
  146. package/src/forms/form.ts +5 -7
  147. package/src/forms/multiform.test.ts +6 -6
  148. package/src/forms/multiform.ts +10 -10
  149. package/src/generate-collections.ts +2 -3
  150. package/src/generate-components.ts +2 -3
  151. package/src/generate-routes.test.ts +7 -16
  152. package/src/generate-routes.ts +6 -10
  153. package/src/generate-stimulus.ts +4 -6
  154. package/src/get-fonts.ts +32 -30
  155. package/src/make-env.ts +1 -1
  156. package/src/make-hidden-inputs.ts +8 -7
  157. package/src/mount.ts +2 -7
  158. package/src/notifier.ts +4 -6
  159. package/src/page/default-list-filters.ts +1 -0
  160. package/src/page/list.ts +18 -20
  161. package/src/page/mountable-with-fields.ts +3 -3
  162. package/src/page/mountable.ts +0 -1
  163. package/src/page/page.ts +2 -3
  164. package/src/page/props-parser.ts +1 -1
  165. package/src/page/sealious-list.ts +1 -1
  166. package/src/page/stateful-page.ts +6 -10
  167. package/src/register-external.ts +4 -4
  168. package/src/templates/form.ts +1 -2
  169. package/src/templates/jdd-component.ts +1 -1
  170. package/src/templates/jdd-editor.ts +2 -4
  171. package/src/templates/list.ts +0 -1
  172. package/src/templates/page.ts +1 -4
  173. package/src/templates/shared/collection-create-form.ts +5 -6
  174. package/src/templates/shared/collection-edit-form.ts +5 -6
  175. package/src/templates/shared/collection-list.ts +2 -2
  176. package/src/templates/shared/shared-crud-form-fields.ts +4 -9
  177. package/src/templates/templates.ts +5 -1
  178. package/src/test_utils/exec_async.ts +3 -4
  179. package/src/test_utils/test-on-real-app.ts +9 -11
  180. package/src/utils/browser-creator.js +0 -1
  181. package/src/utils/exec.ts +0 -1
  182. package/src/utils/input-wrapper.ts +1 -1
  183. package/src/utils/wrap-attributes.ts +1 -1
  184. package/src/utils/write-file.ts +1 -1
  185. package/.eslintrc.cjs +0 -44
@@ -22,7 +22,7 @@ export class Textarea extends SimpleInput {
22
22
  return this.options.description
23
23
  ? /* HTML */ `<div class="form-input__description">
24
24
  ${this.options.description}
25
- </div>`
25
+ </div>`
26
26
  : "";
27
27
  }
28
28
 
@@ -65,7 +65,6 @@ export abstract class Tickable<T> extends FormFieldControl {
65
65
  }
66
66
 
67
67
  async render(fctx: FormControlContext): Promise<FlatTemplatable> {
68
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
69
68
  const {
70
69
  parsed: _parsed,
71
70
  valid,
@@ -88,7 +87,6 @@ export abstract class Tickable<T> extends FormFieldControl {
88
87
  ? this.options.label
89
88
  : this.field.name;
90
89
 
91
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
92
90
  const readonly = this.options.readonly || false;
93
91
  const required = this.field.required;
94
92
 
@@ -14,7 +14,10 @@ export class Boolean<Required extends boolean> extends FormField<
14
14
  Checkbox
15
15
  > {
16
16
  predicate = predicates.boolean;
17
- constructor(required: Required, public error_message: string = "") {
17
+ constructor(
18
+ required: Required,
19
+ public error_message: string = ""
20
+ ) {
18
21
  super(required);
19
22
  }
20
23
 
@@ -16,7 +16,7 @@ export type CheckboxedListItem = {
16
16
 
17
17
  export class CheckboxedListField<
18
18
  Required extends boolean,
19
- Values extends string
19
+ Values extends string,
20
20
  > extends FormField<
21
21
  Required,
22
22
  Record<Values, "on">,
@@ -14,9 +14,12 @@ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.j
14
14
  export class CollectionField<
15
15
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
16
  F extends Field<any>,
17
- Required extends boolean
17
+ Required extends boolean,
18
18
  > extends FormField<Required, ExtractFieldDecoded<F> | null, SimpleInput> {
19
- constructor(required: Required, public sealiousField: F) {
19
+ constructor(
20
+ required: Required,
21
+ public sealiousField: F
22
+ ) {
20
23
  super(required);
21
24
  }
22
25
 
@@ -1,7 +1,7 @@
1
1
  import { TextBasedSimpleField } from "./simple-form-field.js";
2
2
 
3
3
  export class Color<
4
- Required extends boolean
4
+ Required extends boolean,
5
5
  > extends TextBasedSimpleField<Required> {
6
6
  constructor(required: Required) {
7
7
  super(required, "color");
@@ -7,7 +7,7 @@ import { SimpleFormField } from "./simple-form-field.js";
7
7
 
8
8
  export class Coordinates<
9
9
  Required extends boolean,
10
- DefaultControl extends FormControl = SimpleInput
10
+ DefaultControl extends FormControl = SimpleInput,
11
11
  > extends SimpleFormField<Required, DefaultControl, [number, number]> {
12
12
  async parse(
13
13
  _: Context,
@@ -26,7 +26,7 @@ export class Coordinates<
26
26
  return {
27
27
  parsed_value: raw_value.map((e) => parseFloat(e)) as [
28
28
  number,
29
- number
29
+ number,
30
30
  ],
31
31
  parsable: true,
32
32
  error: null,
@@ -1,3 +1,4 @@
1
+ /* eslint @typescript-eslint/no-explicit-any: off */
1
2
  import { Context } from "koa";
2
3
  import { CollectionItem, FieldTypes as SealiousFieldTypes } from "sealious";
3
4
  import { FormDataValue, FormData } from "../form-types.js";
@@ -121,14 +122,7 @@ export class DeepReverseSingleReferenceList extends CheckboxedListField<
121
122
  return `new ${vars.form_field_types}.${this.constructor.name}(${vars.sealious_field})`;
122
123
  }
123
124
 
124
- generateCreateValueGetter(
125
- field_info: ExtractedFieldInfo,
126
- vars: {
127
- form_field_types: string;
128
- sealious_field: string;
129
- form_fields: string;
130
- }
131
- ): string {
125
+ generateCreateValueGetter(field_info: ExtractedFieldInfo): string {
132
126
  return `${wrapKeyName(
133
127
  field_info.name
134
128
  )}: undefined /* handled below in postSealiousCreate */`;
@@ -1,4 +1,4 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
1
+ /* eslint @typescript-eslint/no-explicit-any: off */
2
2
  import {
3
3
  FieldTypes as SealiousFieldTypes,
4
4
  Field as SealiousField,
@@ -3,7 +3,7 @@ import { RegExpField } from "./regexp.js";
3
3
  import { SimpleInput } from "../controls/controls.js";
4
4
 
5
5
  export class EmailField<
6
- Required extends boolean
6
+ Required extends boolean,
7
7
  > extends RegExpField<Required> {
8
8
  predicate = predicates.string;
9
9
  constructor(
@@ -6,7 +6,7 @@ import { FormControlContext } from "../controls/form-control.js";
6
6
  import { FormDataValue } from "../form-types.js";
7
7
 
8
8
  export class EnumMultipleSealious<
9
- Values extends string
9
+ Values extends string,
10
10
  > extends CheckboxedListField<boolean, Values> {
11
11
  public sealious_field: SealiousFieldTypes.EnumMultiple<Values>;
12
12
 
@@ -2,7 +2,7 @@ import { Field } from "sealious";
2
2
  import { PickFromListField } from "./pick-from-list.js";
3
3
 
4
4
  export class ExistingSealiousValue<
5
- Required extends boolean
5
+ Required extends boolean,
6
6
  > extends PickFromListField<Required> {
7
7
  constructor(required: Required, field: Field<unknown>) {
8
8
  super(required, async (ctx) => {
@@ -25,7 +25,7 @@ describe("basic field", () => {
25
25
 
26
26
  it("sends the values", async () => {
27
27
  const port = await getPort();
28
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
28
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
29
29
  const app = new Koa();
30
30
  const router = new Router();
31
31
 
@@ -68,7 +68,7 @@ describe("basic field", () => {
68
68
 
69
69
  it("Doesn't call `isValueValid` and `parse` if the value is empty", async () => {
70
70
  const port = await getPort();
71
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
71
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
72
72
  const app = new Koa();
73
73
  const router = new Router();
74
74
 
@@ -120,7 +120,7 @@ describe("basic field", () => {
120
120
 
121
121
  it("Accepts a form where non-required values are empty", async () => {
122
122
  const port = await getPort();
123
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
123
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
124
124
  const app = new Koa();
125
125
  const router = new Router();
126
126
 
@@ -1,4 +1,4 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
1
+ /* eslint @typescript-eslint/no-unused-vars: off, @typescript-eslint/no-explicit-any: off */
2
2
  import { Predicate, predicates } from "@sealcode/ts-predicates";
3
3
  import { Context } from "koa";
4
4
  import { Collection, CollectionItem } from "sealious";
@@ -24,9 +24,10 @@ export type FormFieldValidationFn<ValueType> = (
24
24
 
25
25
  export type FieldParsedValue<T> = T extends FormField<infer R> ? R : never;
26
26
 
27
- export type GetPredicate<F extends FormField> = F extends FormField<true>
28
- ? F["predicate"]
29
- : F["predicate"] | typeof predicates.undefined;
27
+ export type GetPredicate<F extends FormField> =
28
+ F extends FormField<true>
29
+ ? F["predicate"]
30
+ : F["predicate"] | typeof predicates.undefined;
30
31
 
31
32
  // for quickly testing GetPredicate conditonally applying the undefined predicate:
32
33
  // const f = new SimpleFormField(true);
@@ -62,7 +63,7 @@ export abstract class FormField<
62
63
  Required extends boolean = boolean,
63
64
  ParsedValue = unknown,
64
65
  DefaultFormControl extends FormControl = FormControl,
65
- SealiousValue = any
66
+ SealiousValue = any,
66
67
  > {
67
68
  name: string;
68
69
  constructor(public readonly required: Required) {}
@@ -27,7 +27,7 @@ describe("file field", () => {
27
27
 
28
28
  it("should handle as imple upload scenario", async () => {
29
29
  const port = await getPort();
30
- console.log(`Using port http://localhost:${port} form file field test`);
30
+ console.info(`Using port http://localhost:${port} form file field test`);
31
31
  const app = new Koa();
32
32
  const router = new Router();
33
33
 
@@ -46,7 +46,7 @@ export class File<Required extends boolean> extends FormField<
46
46
  )
47
47
  ? await ctx.$app.fileManager.toPointer(
48
48
  raw_value.old as string | FilePointer
49
- )
49
+ )
50
50
  : null;
51
51
  const new_file = hasFieldOfType(
52
52
  raw_value,
@@ -78,7 +78,7 @@ export class File<Required extends boolean> extends FormField<
78
78
  return { old: null, new: null };
79
79
  }
80
80
 
81
- getControl(...args: any[]): FileControl {
81
+ getControl(): FileControl {
82
82
  return new FileControl(this, { label: this.name, autocomplete: false });
83
83
  }
84
84
 
@@ -1,7 +1,7 @@
1
1
  import { NumberBasedSimpleField } from "./simple-form-field.js";
2
2
 
3
3
  export class Float<
4
- Required extends boolean
4
+ Required extends boolean,
5
5
  > extends NumberBasedSimpleField<Required> {
6
6
  constructor(required: Required) {
7
7
  super(required, "number");
@@ -41,70 +41,103 @@ import { Image } from "./image.js";
41
41
  export type SealiousToFormField<T> = T extends SealiousFieldTypes.Boolean
42
42
  ? BooleanField<false>
43
43
  : T extends SealiousFieldTypes.Color
44
- ? Color<false>
45
- : T extends SealiousFieldTypes.ControlAccess<infer R>
46
- ? SealiousToFormField<R>
47
- : T extends SealiousFieldTypes.Date
48
- ? DateField<false>
49
- : T extends SealiousFieldTypes.DateTime
50
- ? DateTime<false>
51
- : T extends SealiousFieldTypes.DeepReverseSingleReference
52
- ? DeepReverseSingleReferenceList | DeepReverseSingleReferenceTable
53
- : T extends SealiousFieldTypes.DisallowUpdate<any, any, any, infer R>
54
- ? SealiousToFormField<R>
55
- : T extends SealiousFieldTypes.Email
56
- ? EmailField<false>
57
- : T extends SealiousFieldTypes.Enum<any>
58
- ? PickFromListSealious<false>
59
- : T extends SealiousFieldTypes.EnumMultiple<infer R>
60
- ? R extends string[]
61
- ? EnumMultipleSealious<R>
62
- : TextBasedSimpleField<false>
63
- : T extends SealiousFieldTypes.File
64
- ? File<false>
65
- : T extends SealiousFieldTypes.Float
66
- ? Float<false>
67
- : T extends SealiousFieldTypes.HTML
68
- ? HTML<false>
69
- : T extends SealiousFieldTypes.Image
70
- ? Image<false>
71
- : T extends SealiousFieldTypes.Int
72
- ? Int<false>
73
- : T extends SealiousFieldTypes.JsonObject
74
- ? JSONField<false>
75
- : T extends SealiousFieldTypes.JDD
76
- ? TextBasedSimpleField<false, SimpleInput>
77
- : T extends SealiousFieldTypes.Password
78
- ? Password<false>
79
- : T extends SealiousFieldTypes.ReverseSingleReference
80
- ? TextBasedSimpleField<false, SimpleInput>
81
- : T extends SealiousFieldTypes.SecretToken
82
- ? TextBasedSimpleField<false, SimpleInput>
83
- : T extends SealiousFieldTypes.SettableBy<infer R>
84
- ? SealiousToFormField<R>
85
- : T extends SealiousFieldTypes.SingleReference
86
- ? SingleReference<Collection, boolean, T>
87
- : T extends SealiousFieldTypes.Text
88
- ? Text<false>
89
- : T extends SealiousFieldTypes.Username
90
- ? CollectionField<SealiousFieldTypes.Username, false>
91
- : T extends SealiousFieldTypes.ValueExistingInCollection
92
- ? SimpleFormField<false>
93
- : T extends SealiousFieldTypes.ValueNotExistingInCollection
94
- ? SimpleFormField<false>
95
- : T extends SealiousRequiredField<any, any, any>
96
- ? SimpleFormField<false>
97
- : T extends SealiousFieldTypes.Url
98
- ? URLField<false>
99
- : T extends SealiousFieldTypes.Money
100
- ? SimpleFormField<false>
101
- : T extends SealiousFieldTypes.Markdown
102
- ? Markdown<false>
103
- : T extends SealiousFieldTypes.Coordinates
104
- ? Coordinates<false>
105
- : T extends SealiousFieldTypes.StructuredArray<infer R>
106
- ? StructuredArrayField<R>
107
- : TextBasedSimpleField<any>;
44
+ ? Color<false>
45
+ : T extends SealiousFieldTypes.ControlAccess<infer R>
46
+ ? SealiousToFormField<R>
47
+ : T extends SealiousFieldTypes.Date
48
+ ? DateField<false>
49
+ : T extends SealiousFieldTypes.DateTime
50
+ ? DateTime<false>
51
+ : T extends SealiousFieldTypes.DeepReverseSingleReference
52
+ ?
53
+ | DeepReverseSingleReferenceList
54
+ | DeepReverseSingleReferenceTable
55
+ : T extends SealiousFieldTypes.DisallowUpdate<
56
+ any,
57
+ any,
58
+ any,
59
+ infer R
60
+ >
61
+ ? SealiousToFormField<R>
62
+ : T extends SealiousFieldTypes.Email
63
+ ? EmailField<false>
64
+ : T extends SealiousFieldTypes.Enum<any>
65
+ ? PickFromListSealious<false>
66
+ : T extends SealiousFieldTypes.EnumMultiple<
67
+ infer R
68
+ >
69
+ ? R extends string[]
70
+ ? EnumMultipleSealious<R>
71
+ : TextBasedSimpleField<false>
72
+ : T extends SealiousFieldTypes.File
73
+ ? File<false>
74
+ : T extends SealiousFieldTypes.Float
75
+ ? Float<false>
76
+ : T extends SealiousFieldTypes.HTML
77
+ ? HTML<false>
78
+ : T extends SealiousFieldTypes.Image
79
+ ? Image<false>
80
+ : T extends SealiousFieldTypes.Int
81
+ ? Int<false>
82
+ : T extends SealiousFieldTypes.JsonObject
83
+ ? JSONField<false>
84
+ : T extends SealiousFieldTypes.JDD
85
+ ? TextBasedSimpleField<
86
+ false,
87
+ SimpleInput
88
+ >
89
+ : T extends SealiousFieldTypes.Password
90
+ ? Password<false>
91
+ : T extends SealiousFieldTypes.ReverseSingleReference
92
+ ? TextBasedSimpleField<
93
+ false,
94
+ SimpleInput
95
+ >
96
+ : T extends SealiousFieldTypes.SecretToken
97
+ ? TextBasedSimpleField<
98
+ false,
99
+ SimpleInput
100
+ >
101
+ : T extends SealiousFieldTypes.SettableBy<
102
+ infer R
103
+ >
104
+ ? SealiousToFormField<R>
105
+ : T extends SealiousFieldTypes.SingleReference
106
+ ? SingleReference<
107
+ Collection,
108
+ boolean,
109
+ T
110
+ >
111
+ : T extends SealiousFieldTypes.Text
112
+ ? Text<false>
113
+ : T extends SealiousFieldTypes.Username
114
+ ? CollectionField<
115
+ SealiousFieldTypes.Username,
116
+ false
117
+ >
118
+ : T extends SealiousFieldTypes.ValueExistingInCollection
119
+ ? SimpleFormField<false>
120
+ : T extends SealiousFieldTypes.ValueNotExistingInCollection
121
+ ? SimpleFormField<false>
122
+ : T extends SealiousRequiredField<
123
+ any,
124
+ any,
125
+ any
126
+ >
127
+ ? SimpleFormField<false>
128
+ : T extends SealiousFieldTypes.Url
129
+ ? URLField<false>
130
+ : T extends SealiousFieldTypes.Money
131
+ ? SimpleFormField<false>
132
+ : T extends SealiousFieldTypes.Markdown
133
+ ? Markdown<false>
134
+ : T extends SealiousFieldTypes.Coordinates
135
+ ? Coordinates<false>
136
+ : T extends SealiousFieldTypes.StructuredArray<
137
+ infer R
138
+ >
139
+ ? StructuredArrayField<R>
140
+ : TextBasedSimpleField<any>;
108
141
 
109
142
  export function sealiousToFormField<SF extends SealiousField<any>>(
110
143
  sealious_field: SF
@@ -2,7 +2,7 @@ import { FormControlContext } from "../controls/form-control.js";
2
2
  import { NumberBasedSimpleField } from "./simple-form-field.js";
3
3
 
4
4
  export class Int<
5
- Required extends boolean
5
+ Required extends boolean,
6
6
  > extends NumberBasedSimpleField<Required> {
7
7
  constructor(required: Required) {
8
8
  super(required, "number");
@@ -6,7 +6,7 @@ import { FieldParseResult, FormField } from "./field.js";
6
6
 
7
7
  export class NumberField<
8
8
  DefaultValue extends number | null = number,
9
- Required extends boolean = boolean
9
+ Required extends boolean = boolean,
10
10
  > extends FormField<Required, number | DefaultValue, SimpleInput> {
11
11
  constructor(
12
12
  required: Required,
@@ -52,7 +52,7 @@ export class NumberField<
52
52
  parseFloat(value.toString()).toFixed(
53
53
  this.options.decimalDigits
54
54
  )
55
- )
55
+ )
56
56
  : parseFloat(value.toString()),
57
57
  error: null,
58
58
  };
@@ -1,17 +1,13 @@
1
- import { Context } from "koa";
2
1
  import { TextBasedSimpleField } from "./simple-form-field.js";
3
2
 
4
3
  export class Password<
5
- Required extends boolean
4
+ Required extends boolean,
6
5
  > extends TextBasedSimpleField<Required> {
7
6
  constructor(required: Required) {
8
7
  super(required, "password");
9
8
  }
10
9
 
11
- async sealiousValueToForm(
12
- ctx: Context,
13
- value: unknown
14
- ): Promise<undefined> {
10
+ async sealiousValueToForm(): Promise<undefined> {
15
11
  return undefined;
16
12
  }
17
13
  }
@@ -3,7 +3,7 @@ import { PickFromListField } from "./pick-from-list.js";
3
3
  import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
4
4
 
5
5
  export class PickFromListSealious<
6
- Required extends boolean
6
+ Required extends boolean,
7
7
  > extends PickFromListField<Required> {
8
8
  constructor(public sealious_field: SealiousFieldTypes.Enum<string>) {
9
9
  super(sealious_field.required as Required, async (ctx) =>
@@ -5,7 +5,7 @@ import { FormFieldValidationResponse } from "./field.js";
5
5
  import { TextBasedSimpleField } from "./simple-form-field.js";
6
6
 
7
7
  export class PickFromListField<
8
- Required extends boolean
8
+ Required extends boolean,
9
9
  > extends TextBasedSimpleField<Required, Dropdown> {
10
10
  constructor(
11
11
  public required: Required,
@@ -1,6 +1,7 @@
1
1
  import { FormControl } from "../controls/form-control.js";
2
2
  import { FormField } from "./field.js";
3
3
 
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
5
  export class ProxyFormField<T> extends FormField<boolean, T, any> {
5
6
  constructor(
6
7
  required: boolean,
@@ -1,4 +1,5 @@
1
- import { FormDataValue } from "../form-types.js";
1
+ /* eslint @typescript-eslint/no-unused-vars: off */
2
+ import { FormData, FormDataValue } from "../form-types.js";
2
3
  import { Context } from "koa";
3
4
  import { predicates } from "@sealcode/ts-predicates";
4
5
  import { FieldParseResult, FormField } from "./field.js";
@@ -10,34 +11,39 @@ import { FormControlContext } from "../controls/form-control.js";
10
11
  export abstract class SimpleFormField<
11
12
  Required extends boolean,
12
13
  DefaultControl extends FormControl = SimpleInput,
13
- Parsed = string
14
+ Parsed = string,
14
15
  > extends FormField<Required, Parsed, DefaultControl> {
15
16
  predicate = predicates.string;
16
17
 
17
- constructor(required: Required, public type: string = "text") {
18
+ constructor(
19
+ required: Required,
20
+ public type: string = "text"
21
+ ) {
18
22
  super(required);
19
23
  }
20
24
 
21
25
  async sealiousValueToForm(
22
- ctx: Context,
26
+ _ctx: Context,
23
27
  value: unknown
24
28
  ): Promise<FormDataValue> {
25
29
  if (value === null) {
26
30
  return "";
27
31
  }
32
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
28
33
  return String(value) as FormDataValue;
29
34
  }
30
35
  }
31
36
 
32
37
  export class TextBasedSimpleField<
33
38
  Required extends boolean,
34
- DefaultControl extends FormControl = SimpleInput
39
+ DefaultControl extends FormControl = SimpleInput,
35
40
  > extends SimpleFormField<Required, DefaultControl, string | null> {
36
41
  async parse(
37
42
  _: Context,
38
43
  raw_value: FormDataValue
39
44
  ): Promise<FieldParseResult<string>> {
40
45
  return {
46
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
41
47
  parsed_value: (raw_value || "").toString(),
42
48
  parsable: true,
43
49
  error: null,
@@ -55,13 +61,17 @@ export class TextBasedSimpleField<
55
61
  }
56
62
 
57
63
  async postSealiousCreate(
58
- ctx: Context,
59
- created_item: CollectionItem<any>
64
+ _ctx: Context,
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
+ _created_item: CollectionItem<any>,
67
+ _formData: FormData
60
68
  ): Promise<void> {}
61
69
 
62
70
  async postSealiousEdit(
63
71
  ctx: Context,
64
- edited_item: CollectionItem<any>
72
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
+ _edited_item: CollectionItem<any>,
74
+ _formData: FormData
65
75
  ): Promise<void> {}
66
76
 
67
77
  getControl(): DefaultControl {
@@ -78,7 +88,7 @@ export class TextBasedSimpleField<
78
88
 
79
89
  export class NumberBasedSimpleField<
80
90
  Required extends boolean,
81
- DefaultControl extends FormControl = SimpleInput
91
+ DefaultControl extends FormControl = SimpleInput,
82
92
  > extends SimpleFormField<Required, DefaultControl, number> {
83
93
  async parse(
84
94
  _: Context,
@@ -9,7 +9,7 @@ import { toPascalCase } from "js-convert-case";
9
9
  export class SingleReference<
10
10
  TargetCollection extends Collection,
11
11
  Required extends boolean,
12
- F extends SealiousFieldTypes.SingleReference
12
+ F extends SealiousFieldTypes.SingleReference,
13
13
  > extends CollectionField<F, Required> {
14
14
  getControl(): SingleReferenceDropdown<TargetCollection, F, Required> {
15
15
  return new SingleReferenceDropdown(this, {
@@ -28,7 +28,7 @@ export class SingleReference<
28
28
  return parsed || undefined;
29
29
  }
30
30
 
31
- async sealiousValueToForm(ctx: Context, value: string | null) {
31
+ async sealiousValueToForm(_ctx: Context, value: string | null) {
32
32
  return value || undefined;
33
33
  }
34
34
 
@@ -20,7 +20,7 @@ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.j
20
20
  import { Table } from "./table.js";
21
21
 
22
22
  export class StructuredArray<
23
- SealiousFields extends Record<string, SealiousField<unknown>>
23
+ SealiousFields extends Record<string, SealiousField<unknown>>,
24
24
  > extends Table<{
25
25
  [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
26
26
  }> {
@@ -50,8 +50,6 @@ export class StructuredArray<
50
50
  SealiousFields[name]
51
51
  >;
52
52
  }> {
53
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
55
53
  return new TableControl<{
56
54
  [name in keyof SealiousFields]: SealiousToFormField<
57
55
  SealiousFields[name]
@@ -65,9 +63,7 @@ export class StructuredArray<
65
63
  ])
66
64
  ) as unknown as Record<keyof SealiousFields, FormControl>,
67
65
  allow_adding: true,
68
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
70
- make_new_row: () => ({} as any),
66
+ make_new_row: () => ({}) as any,
71
67
  });
72
68
  }
73
69