@sealcode/sealgen 0.19.0 → 0.19.2

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 +1 -1
  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 +2 -1
  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 +13 -5
  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
@@ -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,3 +1,4 @@
1
+ /* eslint @typescript-eslint/no-unused-vars: off */
1
2
  import { FormDataValue } from "../form-types.js";
2
3
  import { Context } from "koa";
3
4
  import { predicates } from "@sealcode/ts-predicates";
@@ -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,
@@ -56,11 +62,13 @@ export class TextBasedSimpleField<
56
62
 
57
63
  async postSealiousCreate(
58
64
  ctx: Context,
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
66
  created_item: CollectionItem<any>
60
67
  ): Promise<void> {}
61
68
 
62
69
  async postSealiousEdit(
63
70
  ctx: Context,
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
72
  edited_item: CollectionItem<any>
65
73
  ): Promise<void> {}
66
74
 
@@ -78,7 +86,7 @@ export class TextBasedSimpleField<
78
86
 
79
87
  export class NumberBasedSimpleField<
80
88
  Required extends boolean,
81
- DefaultControl extends FormControl = SimpleInput
89
+ DefaultControl extends FormControl = SimpleInput,
82
90
  > extends SimpleFormField<Required, DefaultControl, number> {
83
91
  async parse(
84
92
  _: 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
 
@@ -9,19 +9,11 @@ import {
9
9
  import { FormControl } from "../controls/form-control.js";
10
10
 
11
11
  export type ExtractFormFieldParsed<Field extends FormField> =
12
- Field extends FormField<
13
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
- true,
15
- infer T
16
- >
12
+ Field extends FormField<true, infer T>
17
13
  ? NonNullable<T>
18
- : Field extends FormField<
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- true,
21
- infer T
22
- >
23
- ? T
24
- : never;
14
+ : Field extends FormField<true, infer T>
15
+ ? T
16
+ : never;
25
17
 
26
18
  export type TableFieldParsed<F extends Record<string, FormField>> = {
27
19
  [field_name in keyof F]: ExtractFormFieldParsed<F[field_name]>;
@@ -66,9 +58,10 @@ export class Table<F extends Record<string, FormField>> extends FormField<
66
58
  const row_data = raw_value[row_number];
67
59
  const parsed_row: Record<string, unknown> = {};
68
60
  if (!is(row_data, predicates.object)) {
61
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
69
62
  throw new Error(`Expected object, got ${String(row_data)}`);
70
63
  }
71
- for (const key in row_data) {
64
+ for (const key of Object.keys(row_data)) {
72
65
  const field = this.columns[key];
73
66
  if (field == undefined) {
74
67
  return {
@@ -94,10 +87,9 @@ export class Table<F extends Record<string, FormField>> extends FormField<
94
87
  parsed_value: null,
95
88
  };
96
89
  }
97
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
90
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
91
  parsed_row[key] = parse_result.parsed_value as any;
99
92
  }
100
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
101
93
  result.push(parsed_row as { [field_name in keyof F]: unknown });
102
94
  }
103
95
  const ret = { parsed_value: result, parsable: true, error: null };
@@ -2,7 +2,7 @@ import { FormControlContext } from "../controls/form-control.js";
2
2
  import { TextBasedSimpleField } from "./simple-form-field.js";
3
3
 
4
4
  export class Text<
5
- Required extends boolean
5
+ Required extends boolean,
6
6
  > extends TextBasedSimpleField<Required> {
7
7
  constructor(required: Required) {
8
8
  super(required, "text");
@@ -2,7 +2,7 @@ import { FormControlContext } from "../controls/form-control.js";
2
2
  import { TextBasedSimpleField } from "./simple-form-field.js";
3
3
 
4
4
  export class URLField<
5
- Required extends boolean
5
+ Required extends boolean,
6
6
  > extends TextBasedSimpleField<Required> {
7
7
  constructor(required: Required) {
8
8
  super(required, "text");
@@ -14,12 +14,11 @@ export type FormDataValue =
14
14
  | FormDataPrimitive
15
15
  | Record<string, FormDataPrimitive>;
16
16
 
17
- export type FieldValueType<F extends FormField> = F extends FormField<infer R>
18
- ? R
19
- : never;
17
+ export type FieldValueType<F extends FormField> =
18
+ F extends FormField<infer R> ? R : never;
20
19
 
21
20
  export type FormFieldsToValues<
22
- F extends Record<string, FormField<boolean, keyof F>>
21
+ F extends Record<string, FormField<boolean, keyof F>>,
23
22
  > = {
24
23
  [Property in keyof F]: FieldValueType<F[Property]>;
25
24
  };
@@ -36,7 +36,7 @@ export function form_factory(canAccessFun?: Mountable["canAccess"]): Form<typeof
36
36
  }
37
37
 
38
38
  const port = await getPort();
39
- console.log("Using port " + port + " for form.test.ts");
39
+ console.info("Using port " + port + " for form.test.ts");
40
40
 
41
41
  describe("form test", () => {
42
42
  let page: Page;
@@ -91,7 +91,6 @@ describe("form test", () => {
91
91
  },
92
92
  }
93
93
  );
94
- console.log(res_axios.data);
95
94
  if (!res_axios.data.includes("Some fields are invalid")) {
96
95
  throw new Error("when sending a empty request with axios, the error didnt appear");
97
96
  }
@@ -348,7 +347,7 @@ describe("form test", () => {
348
347
  await page.getByPlaceholder("text").click();
349
348
  await page.getByPlaceholder("text").fill("yes@an.email");
350
349
  await page.getByRole("button", { name: "Submit" }).click();
351
- assertThrowsAsync(async () => {
350
+ await assertThrowsAsync(async () => {
352
351
  return page
353
352
  .getByText("Please enter a proper email address")
354
353
  .click({ timeout: 500 });