@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
@@ -16,9 +16,5 @@ export declare class DeepReverseSingleReferenceList extends CheckboxedListField<
16
16
  form_field_types: string;
17
17
  sealious_field: string;
18
18
  }): string;
19
- generateCreateValueGetter(field_info: ExtractedFieldInfo, vars: {
20
- form_field_types: string;
21
- sealious_field: string;
22
- form_fields: string;
23
- }): string;
19
+ generateCreateValueGetter(field_info: ExtractedFieldInfo): string;
24
20
  }
@@ -17,7 +17,7 @@ export declare class File<Required extends boolean> extends FormField<Required,
17
17
  old: null;
18
18
  new: null;
19
19
  };
20
- getControl(...args: any[]): FileControl;
20
+ getControl(): FileControl;
21
21
  getSealiousCreateValue(fctx: FormControlContext): Promise<FilePointer | undefined>;
22
22
  sealiousValueToForm(ctx: Context, sealiousValue: FilePointer | string | null): Promise<{
23
23
  old: FilePointer | undefined;
@@ -1,6 +1,5 @@
1
- import { Context } from "koa";
2
1
  import { TextBasedSimpleField } from "./simple-form-field.js";
3
2
  export declare class Password<Required extends boolean> extends TextBasedSimpleField<Required> {
4
3
  constructor(required: Required);
5
- sealiousValueToForm(ctx: Context, value: unknown): Promise<undefined>;
4
+ sealiousValueToForm(): Promise<undefined>;
6
5
  }
@@ -1,4 +1,4 @@
1
- import { FormDataValue } from "../form-types.js";
1
+ import { FormData, FormDataValue } from "../form-types.js";
2
2
  import { Context } from "koa";
3
3
  import { FieldParseResult, FormField } from "./field.js";
4
4
  import { SimpleInput } from "../controls/simple-input.js";
@@ -9,13 +9,13 @@ export declare abstract class SimpleFormField<Required extends boolean, DefaultC
9
9
  type: string;
10
10
  predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
11
  constructor(required: Required, type?: string);
12
- sealiousValueToForm(ctx: Context, value: unknown): Promise<FormDataValue>;
12
+ sealiousValueToForm(_ctx: Context, value: unknown): Promise<FormDataValue>;
13
13
  }
14
14
  export declare class TextBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput> extends SimpleFormField<Required, DefaultControl, string | null> {
15
15
  parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
16
16
  getSealiousCreateValue(fctx: FormControlContext): Promise<string | null>;
17
- postSealiousCreate(ctx: Context, created_item: CollectionItem<any>): Promise<void>;
18
- postSealiousEdit(ctx: Context, edited_item: CollectionItem<any>): Promise<void>;
17
+ postSealiousCreate(_ctx: Context, _created_item: CollectionItem<any>, _formData: FormData): Promise<void>;
18
+ postSealiousEdit(ctx: Context, _edited_item: CollectionItem<any>, _formData: FormData): Promise<void>;
19
19
  getControl(): DefaultControl;
20
20
  getEmptyValue(): string;
21
21
  }
@@ -7,7 +7,7 @@ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.j
7
7
  export declare class SingleReference<TargetCollection extends Collection, Required extends boolean, F extends SealiousFieldTypes.SingleReference> extends CollectionField<F, Required> {
8
8
  getControl(): SingleReferenceDropdown<TargetCollection, F, Required>;
9
9
  getSealiousCreateValue(fctx: FormControlContext): Promise<string | undefined>;
10
- sealiousValueToForm(ctx: Context, value: string | null): Promise<string | undefined>;
10
+ sealiousValueToForm(_ctx: Context, value: string | null): Promise<string | undefined>;
11
11
  generateImportsForFieldList(field_info: ExtractedFieldInfo): {
12
12
  what: string;
13
13
  from: string;
@@ -1,2 +1,2 @@
1
- export declare function registerExternalControllers(args: Record<string, string | boolean>): Promise<void>;
2
- export declare function registerExternalStyles(args: Record<string, string | boolean>): Promise<void>;
1
+ export declare function registerExternalControllers(_args: Record<string, string | boolean>): Promise<void>;
2
+ export declare function registerExternalStyles(_args: Record<string, string | boolean>): Promise<void>;
@@ -10,7 +10,5 @@ declare const defaults: {
10
10
  other_methods: string;
11
11
  success_message: string;
12
12
  };
13
- export declare function formTemplate(action_name: string, newfilefullpath: string, _params?: Partial<typeof defaults> & {
14
- success_message: string;
15
- }): Promise<string>;
13
+ export declare function formTemplate(action_name: string, _params?: Partial<typeof defaults>): Promise<string>;
16
14
  export {};
@@ -1 +1 @@
1
- export declare function jddComponentTemplate(component_name: string): string;
1
+ export declare function jddComponentTemplate(component_name: string): Promise<string>;
@@ -1 +1 @@
1
- export declare function pageTemplate(action_name: string, newfilefullpath: string): Promise<string>;
1
+ export declare function pageTemplate(action_name: string): Promise<string>;
@@ -1 +1 @@
1
- export declare function sharedCrudFormFields(collection_name: string, newfilefullpath: string): Promise<string>;
1
+ export declare function sharedCrudFormFields(collection_name: string): Promise<string>;
@@ -1,21 +1 @@
1
- import { formTemplate } from "./form.js";
2
- import { jddComponentTemplate } from "./jdd-component.js";
3
- import { LongRunningProcessTemplate } from "./long-running-process.js";
4
- import { multiformTemplate } from "./multiform.js";
5
- import { pageTemplate } from "./page.js";
6
- import { postTemplate } from "./post.js";
7
- import { redirectTemplate } from "./redirect.js";
8
- import { statefulPageTemplate } from "./stateful-page.js";
9
- import { jddEditorTemplate } from "./jdd-editor.js";
10
- export declare const Templates: {
11
- page: typeof pageTemplate;
12
- form: typeof formTemplate;
13
- list: (action_name: string, newfilefullpath: string) => Promise<string>;
14
- multiform: typeof multiformTemplate;
15
- redirect: typeof redirectTemplate;
16
- post: typeof postTemplate;
17
- sreact: typeof statefulPageTemplate;
18
- lpr: typeof LongRunningProcessTemplate;
19
- jdd: typeof jddComponentTemplate;
20
- "jdd-editor": typeof jddEditorTemplate;
21
- };
1
+ export declare const Templates: Record<string, (action: string, params: any) => Promise<string>>;
@@ -0,0 +1,56 @@
1
+ import eslint from "@eslint/js";
2
+ import { defineConfig } from "eslint/config";
3
+ import tseslint from "typescript-eslint";
4
+ import eslintConfigPrettier from "eslint-config-prettier";
5
+
6
+ export default defineConfig(
7
+ eslint.configs.recommended,
8
+ tseslint.configs.recommended,
9
+ tseslint.configs.recommendedTypeChecked,
10
+ eslintConfigPrettier,
11
+ {
12
+ languageOptions: {
13
+ parserOptions: {
14
+ projectService: true,
15
+ tsconfigRootDir: import.meta.dirname,
16
+ },
17
+ },
18
+ },
19
+ {
20
+ rules: {
21
+ "@typescript-eslint/no-unused-vars": "warn",
22
+ "prefer-const": "warn",
23
+ "no-console": ["error", { allow: ["warn", "error", "info"] }],
24
+ "no-await-in-loop": "error",
25
+ "@typescript-eslint/require-await": "off",
26
+ "@typescript-eslint/prefer-promise-reject-errors": "off",
27
+ "@typescript-eslint/no-unused-vars": [
28
+ "error",
29
+ {
30
+ args: "after-used",
31
+ argsIgnorePattern: "^_",
32
+ caughtErrorsIgnorePattern: "^_",
33
+ destructuredArrayIgnorePattern: "^_",
34
+ varsIgnorePattern: "^_",
35
+ },
36
+ ],
37
+ },
38
+ },
39
+ defineConfig({
40
+ files: ["src/**/*.test.ts"],
41
+ rules: {
42
+ "no-empty-pattern": "off",
43
+ "@typescript-eslint/no-unused-vars": "off",
44
+ "@typescript-eslint/no-empty-object-type": "off",
45
+ "@typescript-eslint/no-explicit-any": "off",
46
+ "prefer-const": "off",
47
+ "@typescript-eslint/no-unsafe-assignment": "off",
48
+ "@typescript-eslint/no-unsafe-member-access": "off",
49
+ "@typescript-eslint/no-unsafe-call": "off",
50
+ "no-await-in-loop": "off",
51
+ "@typescript-eslint/no-misused-promises": "off",
52
+ "@typescript-eslint/no-unsafe-argument": "off",
53
+ "@typescript-eslint/no-unsafe-return": "off",
54
+ },
55
+ })
56
+ );
package/lib/add-crud.js CHANGED
@@ -75,10 +75,7 @@ async function addCRUD(params, app_directory = process.cwd()) {
75
75
  const fields_path = target_locreq.resolve(
76
76
  `src/back/routes/${escape_url_params(url)}/shared.ts`
77
77
  );
78
- const fields_content = await sharedCrudFormFields(
79
- collection_name,
80
- fields_path
81
- );
78
+ const fields_content = await sharedCrudFormFields(collection_name);
82
79
  await writeFile(fields_path, fields_content);
83
80
  const create_path = target_locreq.resolve(
84
81
  `src/back/routes/${escape_url_params(url)}/create.form.ts`
@@ -21,7 +21,7 @@ async function addJDDComponent() {
21
21
  return;
22
22
  }
23
23
  await fs.mkdir(resolve(file_path, "../"), { recursive: true });
24
- await fs.writeFile(file_path, jddComponentTemplate(component_name));
24
+ await fs.writeFile(file_path, await jddComponentTemplate(component_name));
25
25
  const css_file_path = target_locreq.resolve(
26
26
  `src/back/jdd-components/${toKebabCase(component_name)}/${toKebabCase(
27
27
  component_name
@@ -32,8 +32,8 @@ async function addJDDComponent() {
32
32
  `.${toKebabCase(component_name)} {
33
33
  }`
34
34
  );
35
- console.log(`Created ${file_path}`);
36
- console.log(`Created ${css_file_path}`);
35
+ console.info(`Created ${file_path}`);
36
+ console.info(`Created ${css_file_path}`);
37
37
  await generateComponents();
38
38
  }
39
39
  export {
package/lib/add-route.js CHANGED
@@ -66,8 +66,8 @@ async function addRoute(params, app_directory = process.cwd()) {
66
66
  }
67
67
  await fs.mkdir(resolve(file_path, "../"), { recursive: true });
68
68
  await fs.writeFile(file_path, await template(action, file_path));
69
- console.log(`${file_path} created`);
70
- console.log(`${test_file_path} created`);
69
+ console.info(`${file_path} created`);
70
+ console.info(`${test_file_path} created`);
71
71
  await generateRoutes();
72
72
  }
73
73
  export {
package/lib/build.js CHANGED
@@ -57,7 +57,7 @@ async function build(watch) {
57
57
  copy_to_public.map(async ({ from, to }) => {
58
58
  try {
59
59
  await fs.stat(resolve(project_dir, "public", to));
60
- } catch (e) {
60
+ } catch (_e) {
61
61
  await fs.mkdir(resolve(project_dir, "public", to, "../"), {
62
62
  recursive: true
63
63
  });
@@ -93,7 +93,7 @@ async function build(watch) {
93
93
  const notifier = make_notifier(port, 8080);
94
94
  await write_notifier_config(watch, port);
95
95
  watcher.on("all", (_, file_path) => {
96
- console.log("Detected a change!", file_path);
96
+ console.info("Detected a change!", file_path);
97
97
  builders.forEach((builder) => {
98
98
  const owns_a_file = builder.ownsFile(file_path);
99
99
  if (owns_a_file) {
@@ -114,7 +114,7 @@ async function buildProject({
114
114
  try {
115
115
  await build(watch);
116
116
  } catch (e) {
117
- console.log("CAUGHT!");
117
+ console.error("CAUGHT!");
118
118
  console.error(e.message);
119
119
  if (!watch) {
120
120
  process.exit(1);
@@ -16,7 +16,6 @@ class BackendTSBuilder extends Builder {
16
16
  ownsFile(file_path) {
17
17
  return (file_path.endsWith(".ts") || file_path.endsWith(".tsx")) && !file_path.endsWith("src/back/collections/collections.ts") && !file_path.endsWith("src/back/routes/routes.ts") && !file_path.endsWith("src/back/routes/urls.ts") && !file_path.endsWith("stimulus.ts") && !file_path.startsWith("src/front");
18
18
  }
19
- // eslint-disable-next-line @typescript-eslint/no-empty-function
20
19
  async dispose() {
21
20
  }
22
21
  async _build() {
@@ -18,7 +18,6 @@ class ColorsBuilder extends Builder {
18
18
  ownsFile(file_path) {
19
19
  return file_path == COLORS_TS_PATH;
20
20
  }
21
- // eslint-disable-next-line @typescript-eslint/no-empty-function
22
21
  async dispose() {
23
22
  }
24
23
  async _build() {
@@ -212,8 +211,12 @@ class ColorsBuilder extends Builder {
212
211
 
213
212
  .hex {
214
213
  padding: 8px;
215
- font-family: Menlo, Consolas, Monaco,
216
- Liberation Mono, Lucida Console,
214
+ font-family:
215
+ Menlo,
216
+ Consolas,
217
+ Monaco,
218
+ Liberation Mono,
219
+ Lucida Console,
217
220
  monospace;
218
221
  opacity: 0.5;
219
222
  visibility: hidden;
@@ -403,16 +406,16 @@ class ColorsBuilder extends Builder {
403
406
  )
404
407
  ? \`var(--color-\${box.getAttribute(
405
408
  "data-color-group-name"
406
- )}-\${box.getAttribute(
409
+ )}-\${box.getAttribute(
407
410
  "data-color-name"
408
- )})\`
411
+ )})\`
409
412
  : \`var(--color-\${box.getAttribute(
410
413
  "data-color-group-name"
411
- )}-\${box.getAttribute(
414
+ )}-\${box.getAttribute(
412
415
  "data-color-name"
413
- )}-\${box.getAttribute(
416
+ )}-\${box.getAttribute(
414
417
  "data-color-shade-number"
415
- )})\`;
418
+ )})\`;
416
419
  navigator.clipboard.writeText(css_var);
417
420
  pop_toast();
418
421
  }
@@ -7,7 +7,6 @@ class FontsBuilder extends Builder {
7
7
  ownsFile(file_path) {
8
8
  return file_path == FONTS_CONFIG_PATH;
9
9
  }
10
- // eslint-disable-next-line @typescript-eslint/no-empty-function
11
10
  async dispose() {
12
11
  }
13
12
  async _build() {
@@ -16,7 +16,6 @@ class FrontendTSBuilder extends Builder {
16
16
  ownsFile(file_path) {
17
17
  return file_path.startsWith("src/front") || file_path.endsWith(".stimulus.ts");
18
18
  }
19
- // eslint-disable-next-line @typescript-eslint/no-empty-function
20
19
  async dispose() {
21
20
  }
22
21
  async _build() {
package/lib/cli.js CHANGED
@@ -23,8 +23,8 @@ const actions = {
23
23
  "generate-routes": generateRoutes,
24
24
  build: buildProject,
25
25
  default: async function() {
26
- console.log("Usage: `npx sealgen <action>`");
27
- console.log(
26
+ console.info("Usage: `npx sealgen <action>`");
27
+ console.info(
28
28
  `Available actions: ${Object.keys(actions).filter((e) => e != "default").join(", ")}`
29
29
  );
30
30
  },
@@ -5,51 +5,51 @@ function name_to_id(str) {
5
5
  const style = (hide_tabs_width) => (
6
6
  /* HTML */
7
7
  `<style>
8
- .tab-label {
9
- height: 45px;
10
- line-height: 45px;
11
- padding: 0 45px;
12
- display: block;
13
- float: left;
14
- box-sizing: border-box;
15
- border-bottom: 3px solid transparent;
16
- cursor: pointer;
17
- font-size: 18px;
18
- -webkit-user-select: none;
19
- user-select: none;
20
- }
21
-
22
- @media screen and (max-width: ${hide_tabs_width}px) {
23
8
  .tab-label {
24
- display: none;
9
+ height: 45px;
10
+ line-height: 45px;
11
+ padding: 0 45px;
12
+ display: block;
13
+ float: left;
14
+ box-sizing: border-box;
15
+ border-bottom: 3px solid transparent;
16
+ cursor: pointer;
17
+ font-size: 18px;
18
+ -webkit-user-select: none;
19
+ user-select: none;
25
20
  }
26
- }
27
21
 
28
- .tab-label--mobile {
29
- line-height: unset;
30
- padding-top: 30px;
31
- padding-left: 0;
32
- pointer-events: none;
33
- padding-bottom: 30px;
34
- color: $font-graphite;
35
- border-bottom: 2px solid $font-primary;
36
- display: none;
37
22
  @media screen and (max-width: ${hide_tabs_width}px) {
38
- display: block;
23
+ .tab-label {
24
+ display: none;
25
+ }
39
26
  }
40
- }
41
27
 
42
- .tab-content {
43
- padding-top: 30px;
44
- clear: both;
45
- }
28
+ .tab-label--mobile {
29
+ line-height: unset;
30
+ padding-top: 30px;
31
+ padding-left: 0;
32
+ pointer-events: none;
33
+ padding-bottom: 30px;
34
+ color: $font-graphite;
35
+ border-bottom: 2px solid $font-primary;
36
+ display: none;
37
+ @media screen and (max-width: ${hide_tabs_width}px) {
38
+ display: block;
39
+ }
40
+ }
46
41
 
47
- @media screen and (max-width: ${hide_tabs_width}px) {
48
42
  .tab-content {
49
- display: block !important;
43
+ padding-top: 30px;
44
+ clear: both;
45
+ }
46
+
47
+ @media screen and (max-width: ${hide_tabs_width}px) {
48
+ .tab-content {
49
+ display: block !important;
50
+ }
50
51
  }
51
- }
52
- </style>`
52
+ </style>`
53
53
  );
54
54
  function tabs(tabs2, selected_tab_style = "font-weight: bold;", selected_index = 0, hide_tabs_width = 0) {
55
55
  return (
@@ -20,16 +20,13 @@ const rewrite_asset_imports_plugin = (project_dir) => ({
20
20
  `^import ([^ ]+, )?(\\w+|{[^}]+}) from "([^"]+)";`,
21
21
  "gm"
22
22
  );
23
- contents = contents.replaceAll(
24
- regex_import,
25
- (line, _, original_path) => {
26
- const replaced = line.replace(
27
- `"src/`,
28
- `"` + resolve(project_dir, "./dist") + "/"
29
- );
30
- return replaced;
31
- }
32
- );
23
+ contents = contents.replaceAll(regex_import, (line) => {
24
+ const replaced = line.replace(
25
+ `"src/`,
26
+ `"` + resolve(project_dir, "./dist") + "/"
27
+ );
28
+ return replaced;
29
+ });
33
30
  return {
34
31
  contents,
35
32
  loader: extname(args.path) === ".tsx" ? "tsx" : "ts"
@@ -52,11 +52,11 @@ class StructuredArray extends FormFieldControl {
52
52
  async (values, { inner_form_id, field_name: field_name2 }) => (
53
53
  /* HTML */
54
54
  `<input
55
- name="${field_name2}"
56
- type="hidden"
57
- value="${values[field_name2] || ""}"
58
- form="${inner_form_id}"
59
- />`
55
+ name="${field_name2}"
56
+ type="hidden"
57
+ value="${values[field_name2] || ""}"
58
+ form="${inner_form_id}"
59
+ />`
60
60
  ),
61
61
  async () => ({
62
62
  inner_form_id: this.getInnerFormID(),
@@ -158,7 +158,6 @@ class StructuredArray extends FormFieldControl {
158
158
  data: field_data.data || []
159
159
  });
160
160
  await item.save(ctx.$context);
161
- console.log(await item.getDecodedBody(ctx.$context, {}));
162
161
  ctx.body = this._render(
163
162
  ctx,
164
163
  form_id,
@@ -61,8 +61,7 @@ class CheckboxedListInput extends FormFieldControl {
61
61
  ${group_label}
62
62
  </h3>
63
63
 
64
- ${// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
65
- options2.map(
64
+ ${options2.map(
66
65
  ({ value, label }) => this.renderOption({
67
66
  name,
68
67
  value,
@@ -18,7 +18,7 @@ describe("checkboxed-list", () => {
18
18
  });
19
19
  it("sends the values", async () => {
20
20
  const port = await getPort();
21
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
21
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
22
22
  const app = new Koa();
23
23
  const router = new Router();
24
24
  const fields = {
@@ -62,7 +62,7 @@ describe("checkboxed-list", () => {
62
62
  describe("behavior with (non)required", () => {
63
63
  it("allows to send a form when no value is selected and fiels is not required", async () => {
64
64
  const port = await getPort();
65
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
65
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
66
66
  const app = new Koa();
67
67
  const router = new Router();
68
68
  const fields = {
@@ -105,7 +105,7 @@ describe("checkboxed-list", () => {
105
105
  });
106
106
  it("does not allow to send a form when no value is selected and field IS required", async () => {
107
107
  const port = await getPort();
108
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
108
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
109
109
  const app = new Koa();
110
110
  const router = new Router();
111
111
  const fields = {
@@ -149,7 +149,7 @@ describe("checkboxed-list", () => {
149
149
  });
150
150
  it("allows to send a form when no value is selected and field IS required", async () => {
151
151
  const port = await getPort();
152
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
152
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
153
153
  const app = new Koa();
154
154
  const router = new Router();
155
155
  const fields = {
@@ -194,7 +194,7 @@ describe("checkboxed-list", () => {
194
194
  });
195
195
  it("renders the label", async () => {
196
196
  const port = await getPort();
197
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
197
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
198
198
  const app = new Koa();
199
199
  const router = new Router();
200
200
  const fields = {
@@ -233,7 +233,7 @@ describe("checkboxed-list", () => {
233
233
  });
234
234
  it("groups checkboxes based on the value of the 'group' attribute", async () => {
235
235
  const port = await getPort();
236
- console.log(`Using port ${port} form checkboxed-list-input.test.ts`);
236
+ console.info(`Using port ${port} form checkboxed-list-input.test.ts`);
237
237
  const app = new Koa();
238
238
  const router = new Router();
239
239
  const fields = {
@@ -10,12 +10,12 @@ class DerivedFrame extends Derived {
10
10
  async (values, consts) => (
11
11
  /* HTML */
12
12
  `<turbo-frame
13
- id="${consts.frame_id}"
14
- src="./${consts.frame_id}?${Object.entries({
13
+ id="${consts.frame_id}"
14
+ src="./${consts.frame_id}?${Object.entries({
15
15
  ...consts,
16
16
  ...values || {}
17
17
  }).map(([key, value]) => `${key}=${value}`).join("&")}"
18
- ></turbo-frame>`
18
+ ></turbo-frame>`
19
19
  ),
20
20
  async (fctx) => ({
21
21
  form_id: fctx.form_id,
@@ -37,8 +37,7 @@ class FreeformDropdown extends SimpleInput {
37
37
  return (
38
38
  /* HTML */
39
39
  tempstream`<select ${attributes_str}>
40
- ${// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
41
- Promise.resolve(this.generateOptions(ctx)).then(
40
+ ${Promise.resolve(this.generateOptions(ctx)).then(
42
41
  (options) => options.map(
43
42
  ({ value, label }) => `<option value="${attribute(value)}" ${(value || "") == picked_value ? "selected" : ""}>${label}</option>`
44
43
  )
@@ -20,7 +20,7 @@ describe("file-control", () => {
20
20
  });
21
21
  it("doesn't require image input if it already has old-value", async () => {
22
22
  const port = await getPort();
23
- console.log(`Using port ${port} for image.test.ts`);
23
+ console.info(`Using port ${port} for image.test.ts`);
24
24
  const app = new Koa();
25
25
  const router = new Router();
26
26
  const fields = {
@@ -9,7 +9,7 @@ class FormControlContext {
9
9
  }
10
10
  }
11
11
  class FormControl {
12
- // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
13
  mount(_router, _form) {
14
14
  }
15
15
  }
@@ -21,7 +21,7 @@ describe("photo-control", () => {
21
21
  });
22
22
  it("sends the old photo if it wasn't changed and it has an initial value", async () => {
23
23
  const port = await getPort();
24
- console.log(`Using port ${port} for photo.test.ts`);
24
+ console.info(`Using port ${port} for photo.test.ts`);
25
25
  const app = new Koa();
26
26
  const router = new Router();
27
27
  const fields = {
@@ -68,7 +68,7 @@ describe("photo-control", () => {
68
68
  });
69
69
  it("doesn't require image input if it already has old-value", async () => {
70
70
  const port = await getPort();
71
- console.log(`Using port ${port} for photo.test.ts`);
71
+ console.info(`Using port ${port} for photo.test.ts`);
72
72
  const app = new Koa();
73
73
  const router = new Router();
74
74
  const fields = {
@@ -30,7 +30,7 @@ describe("single-reference.test", () => {
30
30
  const form_file_path = "src/back/routes/some-form.form.ts";
31
31
  await test_app.addFile(
32
32
  form_file_path,
33
- await formTemplate("SomeForm", form_file_path, {
33
+ await formTemplate("SomeForm", {
34
34
  postimport: `import {Comments} from "../collections/collections.js"; import {Fields} from "@sealcode/sealgen";`,
35
35
  fields: `article: new Fields.CollectionField(true, Comments.fields.article),`,
36
36
  controls: `new Controls.SingleReferenceDropdown(fields.article, {getLabel: item=>item.get("title")}),`,