@sealcode/sealgen 0.19.23 → 0.19.25-hotfix1

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 (240) hide show
  1. package/@types/forms/controls/array.d.ts +3 -1
  2. package/@types/forms/controls/controls.d.ts +0 -1
  3. package/@types/forms/controls/dropdown.d.ts +6 -6
  4. package/@types/forms/controls/single-reference.d.ts +8 -6
  5. package/@types/forms/fields/CollectionField.d.ts +1 -0
  6. package/@types/forms/fields/boolean.d.ts +1 -2
  7. package/@types/forms/fields/collection-field.d.ts +12 -5
  8. package/@types/forms/fields/coordinates.d.ts +2 -2
  9. package/@types/forms/fields/date.d.ts +1 -2
  10. package/@types/forms/fields/datetime.d.ts +1 -2
  11. package/@types/forms/fields/deep-reverse-single-reference-list.d.ts +1 -1
  12. package/@types/forms/fields/deep-reverse-single-reference-table.d.ts +1 -2
  13. package/@types/forms/fields/enum-multiple-sealious.d.ts +1 -2
  14. package/@types/forms/fields/field.d.ts +8 -4
  15. package/@types/forms/fields/fields.d.ts +1 -0
  16. package/@types/forms/fields/file.d.ts +4 -3
  17. package/@types/forms/fields/int.d.ts +1 -2
  18. package/@types/forms/fields/json.d.ts +1 -2
  19. package/@types/forms/fields/phone-number-with-country-code.d.ts +1 -2
  20. package/@types/forms/fields/pick-from-list.d.ts +2 -2
  21. package/@types/forms/fields/regexp.d.ts +1 -2
  22. package/@types/forms/fields/simple-form-field.d.ts +3 -4
  23. package/@types/forms/fields/single-reference.d.ts +2 -3
  24. package/@types/forms/fields/structured-array.d.ts +1 -2
  25. package/@types/forms/fields/structured.d.ts +19 -0
  26. package/@types/forms/fields/text.d.ts +1 -2
  27. package/@types/forms/fields/url.d.ts +1 -2
  28. package/@types/forms/multiform.d.ts +4 -3
  29. package/@types/index.d.ts +29 -18
  30. package/@types/page/stateful-page.d.ts +3 -2
  31. package/@types/src/add-collection.d.ts +1 -0
  32. package/@types/src/add-crud.d.ts +3 -0
  33. package/@types/src/add-crud.test.d.ts +1 -0
  34. package/@types/src/add-jdd-component.d.ts +1 -0
  35. package/@types/src/add-list-route.test.d.ts +1 -0
  36. package/@types/src/add-route.d.ts +3 -0
  37. package/@types/src/add-route.test.d.ts +1 -0
  38. package/@types/src/build.d.ts +3 -0
  39. package/@types/src/builders/backend-ts-builder.d.ts +7 -0
  40. package/@types/src/builders/builder.d.ts +11 -0
  41. package/@types/src/builders/colors-builder.d.ts +10 -0
  42. package/@types/src/builders/css-builder.d.ts +19 -0
  43. package/@types/src/builders/fonts-builder.d.ts +7 -0
  44. package/@types/src/builders/frontend-ts-builder.d.ts +11 -0
  45. package/@types/src/cli.d.ts +2 -0
  46. package/@types/src/components/components.d.ts +2 -0
  47. package/@types/src/components/tabs.d.ts +2 -0
  48. package/@types/src/components/toggle-modal.d.ts +6 -0
  49. package/@types/src/controllers/password-generate-button.stimulus.d.ts +5 -0
  50. package/@types/src/controllers/sealgen-table.stimulus.d.ts +13 -0
  51. package/@types/src/embeddable-file-extensions.d.ts +1 -0
  52. package/@types/src/esbuild-plugins/load-assets.d.ts +5 -0
  53. package/@types/src/esbuild-plugins/rewrite-asset-imports.d.ts +5 -0
  54. package/@types/src/example.test.d.ts +1 -0
  55. package/@types/src/forms/controls/array.d.ts +33 -0
  56. package/@types/src/forms/controls/autocomplete.d.ts +22 -0
  57. package/@types/src/forms/controls/big-radio-group.d.ts +14 -0
  58. package/@types/src/forms/controls/checkbox-group.d.ts +21 -0
  59. package/@types/src/forms/controls/checkbox.d.ts +17 -0
  60. package/@types/src/forms/controls/checkboxed-list-input.d.ts +21 -0
  61. package/@types/src/forms/controls/checkboxed-list-input.test.d.ts +1 -0
  62. package/@types/src/forms/controls/collapsible-checkbox-group.d.ts +11 -0
  63. package/@types/src/forms/controls/collapsible-field-group.d.ts +21 -0
  64. package/@types/src/forms/controls/controls.d.ts +32 -0
  65. package/@types/src/forms/controls/derived-frame.d.ts +19 -0
  66. package/@types/src/forms/controls/derived.d.ts +13 -0
  67. package/@types/src/forms/controls/dropdown.d.ts +30 -0
  68. package/@types/src/forms/controls/editable-collection-subset.d.ts +20 -0
  69. package/@types/src/forms/controls/field-group.d.ts +23 -0
  70. package/@types/src/forms/controls/file.d.ts +12 -0
  71. package/@types/src/forms/controls/file.test.d.ts +1 -0
  72. package/@types/src/forms/controls/form-control.d.ts +23 -0
  73. package/@types/src/forms/controls/form-field-control.d.ts +13 -0
  74. package/@types/src/forms/controls/form-header.d.ts +8 -0
  75. package/@types/src/forms/controls/form-paragraph.d.ts +7 -0
  76. package/@types/src/forms/controls/frame.d.ts +17 -0
  77. package/@types/src/forms/controls/hidden-input.d.ts +9 -0
  78. package/@types/src/forms/controls/html.d.ts +11 -0
  79. package/@types/src/forms/controls/hybrid.d.ts +10 -0
  80. package/@types/src/forms/controls/image.d.ts +19 -0
  81. package/@types/src/forms/controls/image.test.d.ts +1 -0
  82. package/@types/src/forms/controls/multiple-files.d.ts +42 -0
  83. package/@types/src/forms/controls/multiple-images.d.ts +19 -0
  84. package/@types/src/forms/controls/number.d.ts +13 -0
  85. package/@types/src/forms/controls/password-with-generator.d.ts +6 -0
  86. package/@types/src/forms/controls/radio.d.ts +16 -0
  87. package/@types/src/forms/controls/simple-input.d.ts +35 -0
  88. package/@types/src/forms/controls/single-reference.d.ts +14 -0
  89. package/@types/src/forms/controls/single-reference.test.d.ts +1 -0
  90. package/@types/{forms/controls/table.d.sync-conflict-20260502-145940-GP5D735.ts → src/forms/controls/table.d.ts} +2 -0
  91. package/@types/src/forms/controls/textarea.d.ts +25 -0
  92. package/@types/src/forms/controls/tickable.d.ts +25 -0
  93. package/@types/src/forms/fields/boolean.d.ts +22 -0
  94. package/@types/src/forms/fields/boolean.test.d.ts +1 -0
  95. package/@types/src/forms/fields/checkboxed-list.d.ts +23 -0
  96. package/@types/src/forms/fields/collection-field.d.ts +22 -0
  97. package/@types/src/forms/fields/color.d.ts +4 -0
  98. package/@types/src/forms/fields/coordinates.d.ts +14 -0
  99. package/@types/src/forms/fields/date.d.ts +13 -0
  100. package/@types/src/forms/fields/datetime.d.ts +14 -0
  101. package/@types/src/forms/fields/deep-reverse-single-reference-list.d.ts +20 -0
  102. package/@types/src/forms/fields/deep-reverse-single-reference-table.d.ts +16 -0
  103. package/@types/src/forms/fields/email.d.ts +10 -0
  104. package/@types/src/forms/fields/email.test.d.ts +1 -0
  105. package/@types/src/forms/fields/enum-multiple-sealious.d.ts +16 -0
  106. package/@types/src/forms/fields/existing-sealious-value.d.ts +6 -0
  107. package/@types/src/forms/fields/field.d.ts +85 -0
  108. package/@types/src/forms/fields/field.test.d.ts +1 -0
  109. package/@types/src/forms/fields/fields.d.ts +34 -0
  110. package/@types/src/forms/fields/file.d.ts +25 -0
  111. package/@types/src/forms/fields/file.test.d.ts +1 -0
  112. package/@types/src/forms/fields/float.d.ts +4 -0
  113. package/@types/src/forms/fields/get-field-for-sealious.d.ts +33 -0
  114. package/@types/src/forms/fields/html.d.ts +6 -0
  115. package/@types/src/forms/fields/hybrid.d.ts +11 -0
  116. package/@types/src/forms/fields/image.d.ts +5 -0
  117. package/@types/src/forms/fields/int.d.ts +6 -0
  118. package/@types/src/forms/fields/item-draft.d.ts +20 -0
  119. package/@types/src/forms/fields/json.d.ts +13 -0
  120. package/@types/src/forms/fields/markdown.d.ts +6 -0
  121. package/@types/src/forms/fields/multiple-files.d.ts +16 -0
  122. package/@types/src/forms/fields/number.d.ts +25 -0
  123. package/@types/src/forms/fields/number.test.d.ts +1 -0
  124. package/@types/src/forms/fields/password.d.ts +10 -0
  125. package/@types/src/forms/fields/phone-number-with-country-code.d.ts +13 -0
  126. package/@types/src/forms/fields/phone-number.d.ts +17 -0
  127. package/@types/src/forms/fields/pick-from-list-sealious.d.ts +11 -0
  128. package/@types/src/forms/fields/pick-from-list.d.ts +15 -0
  129. package/@types/src/forms/fields/pick-from-list.test.d.ts +1 -0
  130. package/@types/src/forms/fields/proxy-field.d.ts +15 -0
  131. package/@types/src/forms/fields/regexp.d.ts +21 -0
  132. package/@types/src/forms/fields/regexp.test.d.ts +1 -0
  133. package/@types/src/forms/fields/simple-form-field.d.ts +31 -0
  134. package/@types/src/forms/fields/single-reference.d.ts +19 -0
  135. package/@types/src/forms/fields/structured-array.d.ts +23 -0
  136. package/@types/src/forms/fields/table.d.ts +16 -0
  137. package/@types/src/forms/fields/text.d.ts +6 -0
  138. package/@types/src/forms/fields/url.d.ts +6 -0
  139. package/@types/src/forms/form-types.d.ts +28 -0
  140. package/@types/src/forms/form.d.ts +34 -0
  141. package/@types/src/forms/form.test.d.ts +6 -0
  142. package/@types/src/forms/multiform.d.ts +23 -0
  143. package/@types/src/forms/multiform.test.d.ts +1 -0
  144. package/@types/src/generate-collections.d.ts +2 -0
  145. package/@types/src/generate-components.d.ts +1 -0
  146. package/@types/src/generate-routes.d.ts +5 -0
  147. package/@types/src/generate-routes.test.d.ts +1 -0
  148. package/@types/src/generate-stimulus.d.ts +1 -0
  149. package/@types/src/get-fonts.d.ts +2 -0
  150. package/@types/{index.d.sync-conflict-20260502-145557-GP5D735.ts → src/index.d.ts} +1 -0
  151. package/@types/src/make-env.d.ts +1 -0
  152. package/@types/src/make-hidden-inputs.d.ts +5 -0
  153. package/@types/src/mount.d.ts +6 -0
  154. package/@types/src/notifier.d.ts +2 -0
  155. package/@types/src/page/access-control.d.ts +6 -0
  156. package/@types/src/page/default-list-filters.d.ts +18 -0
  157. package/@types/src/page/list.d.ts +49 -0
  158. package/@types/src/page/mountable-with-fields.d.ts +49 -0
  159. package/@types/src/page/mountable-with-fields.test.d.ts +1 -0
  160. package/@types/src/page/mountable.d.ts +10 -0
  161. package/@types/src/page/page.d.ts +18 -0
  162. package/@types/src/page/props-parser.d.ts +15 -0
  163. package/@types/src/page/sealious-list.d.ts +20 -0
  164. package/@types/src/page/sealious-list.test.d.ts +1 -0
  165. package/@types/src/page/stateful-page.d.ts +63 -0
  166. package/@types/src/page/stateful-page.test.d.ts +1 -0
  167. package/@types/src/register-external.d.ts +2 -0
  168. package/@types/src/register-external.test.d.ts +1 -0
  169. package/@types/src/run.d.ts +1 -0
  170. package/@types/src/sanitize.d.ts +1 -0
  171. package/@types/src/target-locreq.d.ts +4 -0
  172. package/@types/src/templates/collection.d.ts +1 -0
  173. package/@types/src/templates/form.d.ts +14 -0
  174. package/@types/src/templates/form.test.d.ts +1 -0
  175. package/@types/src/templates/jdd-component.d.ts +1 -0
  176. package/@types/src/templates/jdd-editor.d.ts +1 -0
  177. package/@types/src/templates/list.d.ts +1 -0
  178. package/@types/src/templates/long-running-process.d.ts +1 -0
  179. package/@types/src/templates/multiform.d.ts +1 -0
  180. package/@types/src/templates/page.d.ts +1 -0
  181. package/@types/src/templates/post.d.ts +1 -0
  182. package/@types/src/templates/redirect.d.ts +1 -0
  183. package/@types/src/templates/route-test.d.ts +1 -0
  184. package/@types/src/templates/shared/collection-create-form.d.ts +1 -0
  185. package/@types/src/templates/shared/collection-edit-form.d.ts +1 -0
  186. package/@types/src/templates/shared/collection-list.d.ts +16 -0
  187. package/@types/src/templates/shared/item-delete.d.ts +1 -0
  188. package/@types/src/templates/shared/shared-crud-form-fields.d.ts +1 -0
  189. package/@types/src/templates/stateful-page.d.ts +1 -0
  190. package/@types/src/templates/stimulus-controller.d.ts +1 -0
  191. package/@types/src/templates/templates.d.ts +1 -0
  192. package/@types/src/test_utils/exec_async.d.ts +1 -0
  193. package/@types/src/test_utils/locator_is_visible.d.ts +2 -0
  194. package/@types/src/test_utils/test-on-real-app.d.ts +26 -0
  195. package/@types/src/utils/assert-throws.d.ts +1 -0
  196. package/@types/src/utils/base64.d.ts +2 -0
  197. package/@types/src/utils/browser-creator.d.ts +1 -0
  198. package/@types/src/utils/escape-url-params.d.ts +2 -0
  199. package/@types/src/utils/exec.d.ts +5 -0
  200. package/@types/src/utils/extract-fields-from-collection.d.ts +14 -0
  201. package/@types/src/utils/format-external-url.d.ts +1 -0
  202. package/@types/src/utils/import-path.d.ts +2 -0
  203. package/@types/src/utils/input-wrapper.d.ts +5 -0
  204. package/@types/src/utils/list-collections.d.ts +1 -0
  205. package/@types/src/utils/make-slug.d.ts +1 -0
  206. package/@types/src/utils/module-dirname.d.ts +1 -0
  207. package/@types/src/utils/natural-numbers.d.ts +1 -0
  208. package/@types/src/utils/prettier.d.ts +3 -0
  209. package/@types/src/utils/question.d.ts +1 -0
  210. package/@types/src/utils/render-attributes.d.ts +1 -0
  211. package/@types/src/utils/sleep.d.ts +1 -0
  212. package/@types/src/utils/translate.d.ts +4 -0
  213. package/@types/src/utils/url-with-new-params.d.ts +2 -0
  214. package/@types/src/utils/utils.d.ts +17 -0
  215. package/@types/src/utils/walk.d.ts +1 -0
  216. package/@types/src/utils/with-fallback.d.ts +2 -0
  217. package/@types/src/utils/wrap-attributes.d.ts +3 -0
  218. package/@types/src/utils/write-file.d.ts +1 -0
  219. package/@types/templates/long-running-process.d.ts +1 -1
  220. package/@types/templates/multiform.d.ts +1 -1
  221. package/@types/templates/route-test.d.ts +1 -1
  222. package/@types/templates/shared/item-delete.d.ts +1 -1
  223. package/@types/templates/stateful-page.d.ts +1 -1
  224. package/lib/add-crud.js +2 -8
  225. package/lib/builders/backend-ts-builder.js +1 -1
  226. package/lib/forms/controls/textarea.js +2 -1
  227. package/lib/templates/long-running-process.js +2 -4
  228. package/lib/templates/multiform.js +2 -4
  229. package/lib/templates/route-test.js +4 -8
  230. package/lib/templates/shared/item-delete.js +3 -7
  231. package/lib/templates/stateful-page.js +2 -4
  232. package/package.json +1 -1
  233. package/src/add-crud.ts +2 -8
  234. package/src/builders/backend-ts-builder.ts +1 -0
  235. package/src/forms/controls/textarea.ts +5 -4
  236. package/src/templates/long-running-process.ts +2 -5
  237. package/src/templates/multiform.ts +2 -8
  238. package/src/templates/route-test.ts +4 -11
  239. package/src/templates/shared/item-delete.ts +3 -8
  240. package/src/templates/stateful-page.ts +2 -5
@@ -0,0 +1,20 @@
1
+ import { Collection, FieldTypes as SealiousFieldTypes } from "sealious";
2
+ import { Hybrid } from "./hybrid.js";
3
+ import { FormField } from "./field.js";
4
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
5
+ export declare class ItemDraft<C extends Collection> extends Hybrid<{
6
+ [name in keyof C["fields"]]: FormField;
7
+ }> {
8
+ sealious_field: SealiousFieldTypes.ItemDraft<C>;
9
+ constructor(sealious_field: SealiousFieldTypes.ItemDraft<C>);
10
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
11
+ form_field_types: string;
12
+ sealious_field: string;
13
+ }): string;
14
+ generateImportsForFieldList(field_info: ExtractedFieldInfo): {
15
+ what: string;
16
+ from: string;
17
+ as?: string;
18
+ type?: boolean;
19
+ }[];
20
+ }
@@ -0,0 +1,13 @@
1
+ import { Context } from "koa";
2
+ import { FormControlContext } from "../controls/form-control.js";
3
+ import { Textarea } from "../controls/textarea.js";
4
+ import { FormDataValue } from "../form-types.js";
5
+ import { FieldParseResult } from "./field.js";
6
+ import { SimpleFormField } from "./simple-form-field.js";
7
+ export declare class JSONField<Required extends boolean> extends SimpleFormField<Required, Textarea, Record<string, unknown>> {
8
+ constructor(required: Required);
9
+ getControl(): Textarea;
10
+ getEmptyValue(): Record<string, unknown>;
11
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<Record<string, unknown>>>;
12
+ getSealiousCreateValue(fctx: FormControlContext): Promise<Record<string, unknown> | null>;
13
+ }
@@ -0,0 +1,6 @@
1
+ import { Textarea } from "../controls/textarea.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class Markdown<Required extends boolean> extends TextBasedSimpleField<Required, Textarea> {
4
+ constructor(required: Required);
5
+ getControl(): Textarea;
6
+ }
@@ -0,0 +1,16 @@
1
+ import { Context } from "koa";
2
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
3
+ import { FormField } from "./field.js";
4
+ import { MultipleFiles as MultipleFilesControl } from "../controls/multiple-files.js";
5
+ export declare class MultipleFiles extends FormField<false, undefined, MultipleFilesControl> {
6
+ collection_field: SealiousFieldTypes.ReverseSingleReference;
7
+ getItemId: (ctx: Context) => Promise<string> | string;
8
+ constructor(collection_field: SealiousFieldTypes.ReverseSingleReference, getItemId: (ctx: Context) => Promise<string> | string);
9
+ getEmptyValue(): undefined;
10
+ parse(): Promise<{
11
+ readonly parsed_value: undefined;
12
+ readonly parsable: true;
13
+ readonly error: null;
14
+ }>;
15
+ getControl(): MultipleFilesControl;
16
+ }
@@ -0,0 +1,25 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ export declare class NumberField<DefaultValue extends number | null = number, Required extends boolean = boolean> extends FormField<Required, number | DefaultValue, SimpleInput> {
6
+ default_value: DefaultValue;
7
+ options: Partial<{
8
+ max: number;
9
+ min: number;
10
+ decimalDigits: number;
11
+ }>;
12
+ constructor(required: Required, default_value: DefaultValue, options?: Partial<{
13
+ max: number;
14
+ min: number;
15
+ decimalDigits: number;
16
+ }>);
17
+ predicate: import("@sealcode/ts-predicates").Predicate<number>;
18
+ isValueValid(_: Context, value: unknown): Promise<{
19
+ valid: boolean;
20
+ message: string;
21
+ }>;
22
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<number>>;
23
+ getEmptyValue(): DefaultValue;
24
+ getControl(): SimpleInput;
25
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class Password<Required extends boolean> extends TextBasedSimpleField<Required> {
4
+ constructor(required: Required);
5
+ sealiousValueToForm(): Promise<undefined>;
6
+ generateInitialValue(field_info: ExtractedFieldInfo, vars: {
7
+ form_field_types: string;
8
+ form_fields: string;
9
+ }): string;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { Context } from "koa";
2
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
3
+ import { FormControl } from "../controls/controls.js";
4
+ import { FormDataValue } from "../form-types.js";
5
+ import { FieldParseResult, FormField } from "./field.js";
6
+ import { FormControlContext } from "../../index.js";
7
+ export declare class PhoneNumberWithCountryCode<Required extends boolean> extends FormField<Required, SealiousFieldTypes.PhoneNumberValue> {
8
+ getEmptyValue(): SealiousFieldTypes.PhoneNumberValue;
9
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<SealiousFieldTypes.PhoneNumberValue>>;
10
+ getControl(): FormControl;
11
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
12
+ sealiousValueToForm(ctx: Context, sealiousValue: SealiousFieldTypes.PhoneNumberValue | null): Promise<FormDataValue>;
13
+ }
@@ -0,0 +1,17 @@
1
+ import { Context } from "koa";
2
+ import { FormControl } from "../controls/controls.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FormField } from "./field.js";
5
+ export declare class PhoneNumberWithoutCountryCode<Required extends boolean> extends FormField<Required, string> {
6
+ getEmptyValue(): string;
7
+ parse(ctx: Context, raw_value: FormDataValue): Promise<{
8
+ parsable: true;
9
+ parsed_value: string;
10
+ error: null;
11
+ } | {
12
+ parsable: false;
13
+ parsed_value: null;
14
+ error: string;
15
+ }>;
16
+ getControl(): FormControl;
17
+ }
@@ -0,0 +1,11 @@
1
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
2
+ import { PickFromListField } from "./pick-from-list.js";
3
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
4
+ export declare class PickFromListSealious<Required extends boolean> extends PickFromListField<Required> {
5
+ sealious_field: SealiousFieldTypes.Enum<string>;
6
+ constructor(sealious_field: SealiousFieldTypes.Enum<string>);
7
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
8
+ form_field_types: string;
9
+ sealious_field: string;
10
+ }): string;
11
+ }
@@ -0,0 +1,15 @@
1
+ import { Context } from "koa";
2
+ import { Dropdown, DropdownOption } from "../controls/dropdown.js";
3
+ import { FormFieldValidationResponse } from "./field.js";
4
+ import { TextBasedSimpleField } from "./simple-form-field.js";
5
+ export declare class PickFromListField<Required extends boolean> extends TextBasedSimpleField<Required, Dropdown> {
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
+ getControl(): Dropdown;
15
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { FormControl } from "../controls/form-control.js";
2
+ import { FormField } from "./field.js";
3
+ export declare class ProxyFormField<T> extends FormField<boolean, T, any> {
4
+ name: string;
5
+ empty_value: T;
6
+ parsed_value: T;
7
+ constructor(required: boolean, name: string, empty_value: T, parsed_value: T);
8
+ getEmptyValue(): T;
9
+ parse(): Promise<{
10
+ readonly parsable: true;
11
+ readonly error: null;
12
+ readonly parsed_value: T;
13
+ }>;
14
+ getControl(): FormControl;
15
+ }
@@ -0,0 +1,21 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ import { FormControlContext } from "../controls/form-control.js";
6
+ export declare class RegExpField<Required extends boolean> extends FormField<Required, string, SimpleInput, string> {
7
+ regexp: RegExp;
8
+ error_message: string;
9
+ default_value: string;
10
+ constructor(required: Required, regexp: RegExp, error_message: string, default_value?: string);
11
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
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
+ getControl(): SimpleInput;
19
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
20
+ sealiousValueToForm(ctx: Context, sealious_value: string | null): Promise<FormDataValue>;
21
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import { FormData, FormDataValue } from "../form-types.js";
2
+ import { Context } from "koa";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ import { SimpleInput } from "../controls/simple-input.js";
5
+ import { FormControl } from "../controls/controls.js";
6
+ import { CollectionItem } from "sealious";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ export declare abstract class SimpleFormField<Required extends boolean, DefaultControl extends FormControl = SimpleInput, Parsed = string> extends FormField<Required, Parsed, DefaultControl> {
9
+ type: string;
10
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ placeholder: string;
12
+ constructor(required: Required, type?: string);
13
+ sealiousValueToForm(_ctx: Context, value: unknown): Promise<FormDataValue>;
14
+ setPlaceholder(placeholder: string): this;
15
+ }
16
+ export declare class TextBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput> extends SimpleFormField<Required, DefaultControl, string | null> {
17
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
18
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string | null>;
19
+ postSealiousCreate(_ctx: Context, _created_item: CollectionItem<any>, _formData: FormData): Promise<void>;
20
+ postSealiousEdit(ctx: Context, _edited_item: CollectionItem<any>, _formData: FormData): Promise<void>;
21
+ getControl(): DefaultControl;
22
+ getEmptyValue(): string;
23
+ }
24
+ export declare class NumberBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput> extends SimpleFormField<Required, DefaultControl, number> {
25
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<number>>;
26
+ getSealiousCreateValue(fctx: FormControlContext): Promise<number | undefined>;
27
+ postSealiousCreate(): Promise<void>;
28
+ postSealiousEdit(): Promise<void>;
29
+ getControl(): DefaultControl;
30
+ getEmptyValue(): number;
31
+ }
@@ -0,0 +1,19 @@
1
+ import { Collection, FieldTypes as SealiousFieldTypes } from "sealious";
2
+ import { CollectionField } from "./collection-field.js";
3
+ import { SingleReferenceDropdown } from "../controls/single-reference.js";
4
+ import { FormControlContext } from "../controls/form-control.js";
5
+ import { Context } from "koa";
6
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
7
+ export declare class SingleReference<TargetCollection extends Collection, Required extends boolean, F extends SealiousFieldTypes.SingleReference> extends CollectionField<F, Required> {
8
+ getControl(): SingleReferenceDropdown<TargetCollection, F, Required>;
9
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string | undefined>;
10
+ sealiousValueToForm(_ctx: Context, value: string | null): Promise<string | undefined>;
11
+ generateImportsForFieldList(field_info: ExtractedFieldInfo): {
12
+ what: string;
13
+ from: string;
14
+ }[];
15
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
16
+ form_field_types: string;
17
+ sealious_field: string;
18
+ }): string;
19
+ }
@@ -0,0 +1,23 @@
1
+ import { Context } from "koa";
2
+ import { Field as SealiousField, FieldTypes as SealiousFieldTypes } from "sealious";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { Table as TableControl } from "../controls/table.js";
5
+ import { SealiousToFormField } from "./get-field-for-sealious.js";
6
+ import { FormControlContext } from "../controls/form-control.js";
7
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
8
+ import { Table } from "./table.js";
9
+ export declare class StructuredArray<SealiousFields extends Record<string, SealiousField<unknown>>> extends Table<{
10
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
11
+ }> {
12
+ sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>;
13
+ constructor(sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>);
14
+ getControl(): TableControl<{
15
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
16
+ }>;
17
+ generateFieldDeclaration(_field_info: ExtractedFieldInfo, vars: {
18
+ form_field_types: string;
19
+ sealious_field: string;
20
+ }): string;
21
+ getSealiousCreateValue(fctx: FormControlContext): Promise<import("./table.js").TableFieldParsed<{ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>; }>>;
22
+ sealiousValueToForm(ctx: Context, sealiousValue: Record<string, FormDataValue | null>[] | null): Promise<FormDataValue>;
23
+ }
@@ -0,0 +1,16 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ import { Table as TableControl } from "../controls/table.js";
5
+ export type ExtractFormFieldParsed<Field extends FormField> = Field extends FormField<true, infer T> ? NonNullable<T> : Field extends FormField<true, infer T> ? T : never;
6
+ export type TableFieldParsed<F extends Record<string, FormField>> = {
7
+ [field_name in keyof F]: ExtractFormFieldParsed<F[field_name]>;
8
+ }[];
9
+ export declare class Table<F extends Record<string, FormField>> extends FormField<false, TableFieldParsed<F>> {
10
+ columns: F;
11
+ constructor(columns: F);
12
+ getEmptyValue(): never[];
13
+ setName(name: string): this;
14
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<TableFieldParsed<F>>>;
15
+ getControl(): TableControl<F>;
16
+ }
@@ -0,0 +1,6 @@
1
+ import { FormControlContext } from "../controls/form-control.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class Text<Required extends boolean> extends TextBasedSimpleField<Required> {
4
+ constructor(required: Required);
5
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { FormControlContext } from "../controls/form-control.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class URLField<Required extends boolean> extends TextBasedSimpleField<Required> {
4
+ constructor(required: Required);
5
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string | null>;
6
+ }
@@ -0,0 +1,28 @@
1
+ import { FilePointer } from "@sealcode/file-manager";
2
+ import type { FlatTemplatable } from "tempstream";
3
+ import type { FormField } from "./fields/field.js";
4
+ import { FieldMessages } from "./controls/form-control.js";
5
+ export type FormDataPrimitive = string | string[] | number | undefined | FilePointer;
6
+ export type FormDataValue = FormDataPrimitive | Record<string, FormDataPrimitive>;
7
+ export type FieldValueType<F extends FormField> = F extends FormField<infer R> ? R : never;
8
+ export type FormFieldsToValues<F extends Record<string, FormField<boolean, keyof F>>> = {
9
+ [Property in keyof F]: FieldValueType<F[Property]>;
10
+ };
11
+ export type FormMessage = {
12
+ type: "info" | "success" | "error";
13
+ text: string;
14
+ };
15
+ export type FormData<Fieldnames extends string = string> = {
16
+ raw_values: Record<Fieldnames, FormDataValue>;
17
+ messages: FormMessage[];
18
+ field_messages: FieldMessages<Fieldnames>;
19
+ };
20
+ export type FormReaction = {
21
+ action: "stay";
22
+ content: FlatTemplatable;
23
+ messages?: FormMessage[];
24
+ } | {
25
+ action: "redirect";
26
+ url: string;
27
+ messages?: FormMessage[];
28
+ };
@@ -0,0 +1,34 @@
1
+ import { Context } from "koa";
2
+ import Router from "@koa/router";
3
+ import { FormData, FormDataValue, FormMessage, FormReaction } from "./form-types.js";
4
+ import { Fields, MountableWithFields, PageErrorMessage } from "../page/mountable-with-fields.js";
5
+ import { Readable } from "stream";
6
+ import { FormField } from "../index.js";
7
+ import { FieldMessages } from "./controls/form-control.js";
8
+ export declare abstract class Form<F extends Fields, SubmitResult> extends MountableWithFields<F> {
9
+ defaultSuccessMessage: string;
10
+ submitButtonText: string;
11
+ action: string;
12
+ useTurbo: boolean;
13
+ form_id: string;
14
+ canAccess(_: Context): Promise<{
15
+ canAccess: boolean;
16
+ message: string;
17
+ }>;
18
+ renderError(_: Context, error: PageErrorMessage): Promise<JSX.Element | Readable>;
19
+ makeSubmitButton(): JSX.Element;
20
+ render(ctx: Context, data: FormData, show_field_errors: boolean): Promise<JSX.Element | Readable>;
21
+ makeFormClasses(_ctx: Context): Promise<string[]>;
22
+ makeOpenFormTag(ctx: Context): JSX.Element;
23
+ makeCloseFormTag(): JSX.Element;
24
+ onValuesInvalid(ctx: Context, form_messages: FormMessage[], field_errors: FieldMessages<keyof Fields>): Promise<FormReaction>;
25
+ onError(ctx: Context, data: FormData, error: unknown): Promise<FormReaction>;
26
+ abstract onSubmit(ctx: Context, data: FormData): SubmitResult | Promise<SubmitResult>;
27
+ onSuccess(ctx: Context, _data: FormData, _submitResult: SubmitResult): Promise<FormReaction>;
28
+ getRawValuesOnSuccess(ctx: Context): Promise<Record<string, FormDataValue>>;
29
+ handlePost(ctx: Context): Promise<FormReaction>;
30
+ init(path: string, router: Router): void;
31
+ mount(router: Router, path: string): void;
32
+ extractRawValues(ctx: Context): Promise<Record<string, FormDataValue>>;
33
+ static initFieldNames(fields: Record<string, FormField>): void;
34
+ }
@@ -0,0 +1,6 @@
1
+ import { Controls, Fields, Form, Mountable } from "../index.js";
2
+ declare const fields: {
3
+ text: Fields.TextBasedSimpleField<true, Controls.SimpleInput<import("./controls/simple-input.js").SimpleInputOptions>>;
4
+ };
5
+ export declare function form_factory(canAccessFun?: Mountable["canAccess"]): Form<typeof fields, void>;
6
+ export {};
@@ -0,0 +1,23 @@
1
+ import Router from "@koa/router";
2
+ import { Context } from "koa";
3
+ import { FlatTemplatable } from "tempstream";
4
+ import { Fields, MountableWithFields } from "../page/mountable-with-fields.js";
5
+ import type { FormDataValue, FormMessage } from "./form-types.js";
6
+ import { Form } from "./form.js";
7
+ export declare class Multiform extends MountableWithFields {
8
+ getControls: () => never[];
9
+ name: string;
10
+ forms: Record<string, Form<Fields, unknown>>;
11
+ init(path: string, router: Router): void;
12
+ extractRawValues(ctx: Context): Promise<Record<string, FormDataValue>>;
13
+ canAccess(): Promise<{
14
+ canAccess: boolean;
15
+ message: string;
16
+ }>;
17
+ getSubformsToRender(ctx: Context): Array<readonly [string, Form<any, unknown>]>;
18
+ renderSubform(ctx: Context, sub_form_name: string, show_field_errors: boolean): Promise<FlatTemplatable>;
19
+ getSubformRawValues(ctx: Context, sub_form_name: string): Promise<Record<string, FormDataValue>>;
20
+ render(ctx: Context, messages: FormMessage[], prerenderedForms: Record<string, FlatTemplatable | undefined> | undefined, show_field_errors: boolean): Promise<FlatTemplatable>;
21
+ makeBottomScript(): string;
22
+ mount(router: Router, path: string): void;
23
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare function extractCollectionClassname(full_file_path: string): Promise<string>;
2
+ export declare function generateCollections(): Promise<void>;
@@ -0,0 +1 @@
1
+ export declare function generateComponents(): Promise<void>;
@@ -0,0 +1,5 @@
1
+ export declare function generateURL(actionName: string, url: string): string;
2
+ export declare function sortRoutes<T extends {
3
+ url: string;
4
+ }>(urls: T[]): T[];
5
+ export declare function generateRoutes(): Promise<void>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare function generateStimulusControllers(controller_dirs: string[]): Promise<void>;
@@ -0,0 +1,2 @@
1
+ export declare const FONTS_CONFIG_PATH = "src/fonts.json";
2
+ export declare function getFonts(_?: Record<string, string | boolean>): Promise<void>;
@@ -45,3 +45,4 @@ export interface HTMLArgs {
45
45
  hideNavigation?: boolean;
46
46
  }
47
47
  export type HTMLFunc = (args: HTMLArgs) => Readable | Promise<Readable>;
48
+ export type BreadcrumbLabel = string | ((ctx: Context) => Promise<string>);
@@ -0,0 +1 @@
1
+ export declare function makeEnv(): Promise<void>;
@@ -0,0 +1,5 @@
1
+ import { Context } from "koa";
2
+ import { FlatTemplatable } from "tempstream";
3
+ import { FormField } from "./forms/fields/field.js";
4
+ import { FormDataValue } from "./forms/form-types.js";
5
+ export declare function makeHiddenInputs(ctx: Context, fields: Record<string, FormField>, values: Record<string, FormDataValue>, fields_to_skip: string[]): FlatTemplatable;
@@ -0,0 +1,6 @@
1
+ import Router from "@koa/router";
2
+ import { FileManager } from "@sealcode/file-manager";
3
+ import { Mountable } from "./page/mountable.js";
4
+ export declare function mount(router: Router, url: string | {
5
+ rawURL: string;
6
+ }, mountable: Mountable, use_dummy_app?: boolean, file_manager?: FileManager | undefined): void;
@@ -0,0 +1,2 @@
1
+ export declare const APP_BACK_ALIVE_SIGNAL = "app-back-alive";
2
+ export declare function make_notifier(port: number, app_port: number): (message: string) => void;
@@ -0,0 +1,6 @@
1
+ import { Context } from "koa";
2
+ import { ActionName, Collection } from "sealious";
3
+ export declare function peopleWhoCan(action: ActionName, collection: Collection): (ctx: Context) => Promise<{
4
+ canAccess: boolean;
5
+ message: string;
6
+ }>;
@@ -0,0 +1,18 @@
1
+ import type { Context } from "koa";
2
+ import { Field } from "sealious";
3
+ import { FlatTemplatable } from "tempstream";
4
+ export type ListFilterRender = (value: string, field: Field<any>, ctx: Context) => FlatTemplatable;
5
+ export type DefaultListFilter = {
6
+ render: ListFilterRender;
7
+ prepareValue?: (filter_value: unknown) => unknown;
8
+ };
9
+ export declare const BooleanListFilter: {
10
+ render: (value: string, field: Field<any>) => string;
11
+ };
12
+ export declare const SimpleTextFilter: {
13
+ render: (value: string, field: Field<any>) => string;
14
+ prepareValue: (value: string) => {
15
+ regex: string;
16
+ };
17
+ };
18
+ export declare const DefaultListFilters: Record<"boolean" | "text" | "fallback", DefaultListFilter>;
@@ -0,0 +1,49 @@
1
+ import { ShapeToType } from "@sealcode/ts-predicates";
2
+ import { Context } from "koa";
3
+ import { FlatTemplatable, Templatable } from "tempstream";
4
+ import { FormControl } from "../forms/controls/controls.js";
5
+ import { FormField } from "../forms/fields/field.js";
6
+ import { NumberField } from "../forms/fields/number.js";
7
+ import { TextBasedSimpleField } from "../forms/fields/simple-form-field.js";
8
+ import { FormDataValue } from "../forms/form-types.js";
9
+ import { Page } from "./page.js";
10
+ import Router from "@koa/router";
11
+ export declare const BasePagePropsShape: {};
12
+ export type BasePageProps = ShapeToType<typeof BasePagePropsShape>;
13
+ export declare const DEFAULT_ITEMS_PER_PAGE = 12;
14
+ export declare const BaseListPageFields: {
15
+ readonly page: NumberField<1, false>;
16
+ readonly itemsPerPage: NumberField<12, false>;
17
+ readonly sort: TextBasedSimpleField<false, import("../forms/controls/simple-input.js").SimpleInput<import("../forms/controls/simple-input.js").SimpleInputOptions>>;
18
+ };
19
+ export type ListSort = {
20
+ field: string;
21
+ order: "asc" | "desc";
22
+ };
23
+ export declare abstract class ListPage<ItemType, F extends typeof BaseListPageFields> extends Page<F> {
24
+ abstract getItems(ctx: Context, page: number, itemsPerPage: number | null, values: Record<string, FormDataValue>): Promise<ItemType[]>;
25
+ abstract getTotalPages(ctx: Context, itemsPerPage: number, values: Record<string, FormDataValue>): Promise<number>;
26
+ abstract renderItem(ctx: Context, item: ItemType, index: number): Promise<FlatTemplatable>;
27
+ filterFields: Record<string, FormField>;
28
+ filterControls: FormControl[];
29
+ init(path: string, router: Router): void;
30
+ renderListContainer(_: Context, content: Templatable): FlatTemplatable;
31
+ getPaginationConfig(ctx: Context): Promise<{
32
+ page: number;
33
+ itemsPerPage: number | null;
34
+ }>;
35
+ renderItems(ctx: Context, values?: Record<string, FormDataValue>, items?: ItemType[]): Promise<FlatTemplatable>;
36
+ renderPagination(ctx: Context, values: Record<string, FormDataValue>): Promise<FlatTemplatable>;
37
+ private renderPageButton;
38
+ getFilterValues(ctx: Context): Promise<Record<string, unknown>>;
39
+ getSort(ctx: Context): Promise<ListSort | null>;
40
+ makeSortLink(ctx: Context, field: string, order: "asc" | "desc" | null): string;
41
+ renderFilters(ctx: Context): Promise<FlatTemplatable>;
42
+ renderHeading(ctx: Context, field: string, label?: string): Promise<FlatTemplatable>;
43
+ getDefaultSort(_: Context): ListSort | null;
44
+ renderTableHead(ctx: Context, fields: {
45
+ field: string;
46
+ label?: string;
47
+ }[]): FlatTemplatable;
48
+ render(ctx: Context): Promise<FlatTemplatable>;
49
+ }
@@ -0,0 +1,49 @@
1
+ import { ShapeToType } from "@sealcode/ts-predicates";
2
+ import { Context } from "koa";
3
+ import { FlatTemplatable } from "tempstream";
4
+ import { FieldMessages, FormControl, FormControlContext } from "../forms/controls/form-control.js";
5
+ import type { FieldsToShape, FormField } from "../forms/fields/field.js";
6
+ import type { FormDataValue, FormMessage, FormData } from "../forms/form-types.js";
7
+ import { Mountable } from "./mountable.js";
8
+ import Router from "@koa/router";
9
+ export type PageErrorMessage = {
10
+ type: "access" | "internal";
11
+ message: string;
12
+ };
13
+ export type Fields = Record<string, FormField<boolean, any>>;
14
+ type Resolved<T> = T extends Promise<infer X> ? X : never;
15
+ type ParsedValue<T extends FormField> = Resolved<ReturnType<T["getParsedValue"]>>["parsed"];
16
+ export declare abstract class MountableWithFields<F extends Fields = Fields> extends Mountable {
17
+ getFields: () => F;
18
+ fields: F;
19
+ initialized: boolean;
20
+ field_names_prefix: string;
21
+ form_id: string;
22
+ abstract getControls: (fields: F) => FormControl[];
23
+ controls: FormControl[];
24
+ constructor();
25
+ /** most routes should be setup using .mount(), but mount runs before
26
+ initialization so we don't yet have controls, app, etc ready for dynamic
27
+ routes **/
28
+ init(path: string, router: Router): void;
29
+ makeFormControlContext(ctx: Context, data: FormData, validate: boolean, field_name_prefix?: string, form_id?: string): FormControlContext;
30
+ validateValues(_ctx: Context, _data: Record<string, FormDataValue>): Promise<{
31
+ valid: boolean;
32
+ error: string;
33
+ }>;
34
+ getInitialValues(_ctx: Context): Promise<Record<string, FormDataValue>>;
35
+ validate(ctx: Context, values: Record<string, FormDataValue>): Promise<{
36
+ valid: boolean;
37
+ field_errors: FieldMessages;
38
+ form_messages: FormMessage[];
39
+ }>;
40
+ renderControls(fctx: FormControlContext): FlatTemplatable;
41
+ renderError(_: Context, error: PageErrorMessage): Promise<FlatTemplatable>;
42
+ renderMessages(_: Context, data: FormData<keyof Fields>): FlatTemplatable;
43
+ abstract extractRawValues(ctx: Context): Promise<Record<string, FormDataValue>>;
44
+ getParsedValues(ctx: Context): Promise<{
45
+ [field in keyof F]: F[field] extends FormField<true> ? Exclude<ParsedValue<F[field]>, null> : ParsedValue<F[field]>;
46
+ }>;
47
+ getDatabaseValues(ctx: Context): Promise<ShapeToType<FieldsToShape<F>>>;
48
+ }
49
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import Router from "@koa/router";
2
+ import { Context } from "koa";
3
+ export declare abstract class Mountable {
4
+ init(_path: string, _router: Router): void;
5
+ abstract mount(router: Router, path: string): void;
6
+ abstract canAccess(ctx: Context): Promise<{
7
+ canAccess: boolean;
8
+ message: string;
9
+ }>;
10
+ }