@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.
- package/@types/forms/fields/deep-reverse-single-reference-list.d.ts +1 -5
- package/@types/forms/fields/file.d.ts +1 -1
- package/@types/forms/fields/password.d.ts +1 -2
- package/@types/forms/fields/simple-form-field.d.ts +4 -4
- package/@types/forms/fields/single-reference.d.ts +1 -1
- package/@types/register-external.d.ts +2 -2
- package/@types/templates/form.d.ts +1 -3
- package/@types/templates/jdd-component.d.ts +1 -1
- package/@types/templates/page.d.ts +1 -1
- package/@types/templates/shared/shared-crud-form-fields.d.ts +1 -1
- package/@types/templates/templates.d.ts +1 -21
- package/eslint.config.mjs +56 -0
- package/lib/add-crud.js +1 -4
- package/lib/add-jdd-component.js +3 -3
- package/lib/add-route.js +2 -2
- package/lib/build.js +3 -3
- package/lib/builders/backend-ts-builder.js +0 -1
- package/lib/builders/colors-builder.js +11 -8
- package/lib/builders/fonts-builder.js +0 -1
- package/lib/builders/frontend-ts-builder.js +0 -1
- package/lib/cli.js +2 -2
- package/lib/components/tabs.js +36 -36
- package/lib/esbuild-plugins/rewrite-asset-imports.js +7 -10
- package/lib/forms/controls/array.js +5 -6
- package/lib/forms/controls/checkboxed-list-input.js +1 -2
- package/lib/forms/controls/checkboxed-list-input.test.js +6 -6
- package/lib/forms/controls/derived-frame.js +3 -3
- package/lib/forms/controls/dropdown.js +1 -2
- package/lib/forms/controls/file.test.js +1 -1
- package/lib/forms/controls/form-control.js +1 -1
- package/lib/forms/controls/image.test.js +2 -2
- package/lib/forms/controls/single-reference.test.js +1 -1
- package/lib/forms/controls/table.js +10 -15
- package/lib/forms/controls/textarea.js +1 -1
- package/lib/forms/fields/deep-reverse-single-reference-list.js +1 -1
- package/lib/forms/fields/field.test.js +3 -3
- package/lib/forms/fields/file.js +1 -1
- package/lib/forms/fields/file.test.js +1 -1
- package/lib/forms/fields/password.js +1 -1
- package/lib/forms/fields/simple-form-field.js +4 -3
- package/lib/forms/fields/single-reference.js +1 -1
- package/lib/forms/fields/structured-array.js +0 -2
- package/lib/forms/fields/table.js +1 -1
- package/lib/forms/form.js +0 -1
- package/lib/forms/form.test.js +2 -3
- package/lib/forms/multiform.js +6 -7
- package/lib/forms/multiform.test.js +2 -2
- package/lib/generate-collections.js +2 -3
- package/lib/generate-components.js +2 -3
- package/lib/generate-routes.js +3 -5
- package/lib/generate-routes.test.js +7 -16
- package/lib/generate-stimulus.js +4 -5
- package/lib/get-fonts.js +29 -27
- package/lib/make-env.js +1 -1
- package/lib/make-hidden-inputs.js +4 -4
- package/lib/mount.js +0 -1
- package/lib/notifier.js +3 -3
- package/lib/page/list.js +5 -7
- package/lib/page/mountable.js +0 -1
- package/lib/page/page.js +0 -1
- package/lib/register-external.js +4 -4
- package/lib/templates/form.js +1 -1
- package/lib/templates/jdd-component.js +1 -1
- package/lib/templates/jdd-editor.js +1 -1
- package/lib/templates/page.js +1 -1
- package/lib/templates/shared/collection-create-form.js +4 -5
- package/lib/templates/shared/collection-edit-form.js +4 -5
- package/lib/templates/shared/collection-list.js +2 -2
- package/lib/templates/shared/shared-crud-form-fields.js +3 -5
- package/lib/test_utils/exec_async.js +3 -3
- package/lib/test_utils/test-on-real-app.js +9 -11
- package/lib/utils/write-file.js +1 -1
- package/package.json +9 -8
- package/src/add-collection.ts +1 -3
- package/src/add-crud.ts +2 -7
- package/src/add-jdd-component.ts +4 -5
- package/src/add-route.ts +3 -6
- package/src/build.ts +3 -3
- package/src/builders/backend-ts-builder.ts +0 -1
- package/src/builders/builder.ts +4 -1
- package/src/builders/colors-builder.ts +11 -9
- package/src/builders/css-builder.ts +4 -1
- package/src/builders/fonts-builder.ts +0 -1
- package/src/builders/frontend-ts-builder.ts +0 -1
- package/src/cli.ts +2 -2
- package/src/components/tabs.ts +38 -37
- package/src/components/toggle-modal.ts +1 -1
- package/src/controllers/table-add-button.stimulus.ts +1 -1
- package/src/esbuild-plugins/rewrite-asset-imports.ts +7 -10
- package/src/forms/controls/array.ts +12 -16
- package/src/forms/controls/autocomplete.ts +1 -1
- package/src/forms/controls/big-radio-group.ts +2 -2
- package/src/forms/controls/checkbox-group.ts +1 -1
- package/src/forms/controls/checkboxed-list-input.test.ts +6 -6
- package/src/forms/controls/checkboxed-list-input.ts +18 -22
- package/src/forms/controls/derived-frame.ts +11 -10
- package/src/forms/controls/derived.ts +6 -5
- package/src/forms/controls/dropdown.ts +8 -11
- package/src/forms/controls/editable-collection-subset.ts +2 -1
- package/src/forms/controls/field-group.ts +1 -1
- package/src/forms/controls/file.test.ts +1 -1
- package/src/forms/controls/file.ts +4 -7
- package/src/forms/controls/form-control.ts +1 -1
- package/src/forms/controls/hidden-input.ts +1 -0
- package/src/forms/controls/html.ts +1 -0
- package/src/forms/controls/image.test.ts +2 -2
- package/src/forms/controls/image.ts +1 -1
- package/src/forms/controls/multiple-files.ts +5 -7
- package/src/forms/controls/multiple-images.ts +1 -1
- package/src/forms/controls/simple-input.ts +8 -4
- package/src/forms/controls/single-reference.test.ts +1 -1
- package/src/forms/controls/single-reference.ts +1 -1
- package/src/forms/controls/table.ts +16 -21
- package/src/forms/controls/textarea.ts +1 -1
- package/src/forms/controls/tickable.ts +0 -2
- package/src/forms/fields/boolean.ts +4 -1
- package/src/forms/fields/checkboxed-list.ts +1 -1
- package/src/forms/fields/collection-field.ts +5 -2
- package/src/forms/fields/color.ts +1 -1
- package/src/forms/fields/coordinates.ts +2 -2
- package/src/forms/fields/deep-reverse-single-reference-list.ts +2 -8
- package/src/forms/fields/deep-reverse-single-reference-table.ts +1 -1
- package/src/forms/fields/email.ts +1 -1
- package/src/forms/fields/enum-multiple-sealious.ts +1 -1
- package/src/forms/fields/existing-sealious-value.ts +1 -1
- package/src/forms/fields/field.test.ts +3 -3
- package/src/forms/fields/field.ts +6 -5
- package/src/forms/fields/file.test.ts +1 -1
- package/src/forms/fields/file.ts +2 -2
- package/src/forms/fields/float.ts +1 -1
- package/src/forms/fields/get-field-for-sealious.ts +97 -64
- package/src/forms/fields/int.ts +1 -1
- package/src/forms/fields/number.ts +2 -2
- package/src/forms/fields/password.ts +2 -6
- package/src/forms/fields/pick-from-list-sealious.ts +1 -1
- package/src/forms/fields/pick-from-list.ts +1 -1
- package/src/forms/fields/proxy-field.ts +1 -0
- package/src/forms/fields/simple-form-field.ts +19 -9
- package/src/forms/fields/single-reference.ts +2 -2
- package/src/forms/fields/structured-array.ts +2 -6
- package/src/forms/fields/table.ts +7 -15
- package/src/forms/fields/text.ts +1 -1
- package/src/forms/fields/url.ts +1 -1
- package/src/forms/form-types.ts +3 -4
- package/src/forms/form.test.ts +2 -3
- package/src/forms/form.ts +5 -7
- package/src/forms/multiform.test.ts +6 -6
- package/src/forms/multiform.ts +10 -10
- package/src/generate-collections.ts +2 -3
- package/src/generate-components.ts +2 -3
- package/src/generate-routes.test.ts +7 -16
- package/src/generate-routes.ts +6 -10
- package/src/generate-stimulus.ts +4 -6
- package/src/get-fonts.ts +32 -30
- package/src/make-env.ts +1 -1
- package/src/make-hidden-inputs.ts +8 -7
- package/src/mount.ts +2 -7
- package/src/notifier.ts +4 -6
- package/src/page/default-list-filters.ts +1 -0
- package/src/page/list.ts +18 -20
- package/src/page/mountable-with-fields.ts +3 -3
- package/src/page/mountable.ts +0 -1
- package/src/page/page.ts +2 -3
- package/src/page/props-parser.ts +1 -1
- package/src/page/sealious-list.ts +1 -1
- package/src/page/stateful-page.ts +6 -10
- package/src/register-external.ts +4 -4
- package/src/templates/form.ts +1 -2
- package/src/templates/jdd-component.ts +1 -1
- package/src/templates/jdd-editor.ts +2 -4
- package/src/templates/list.ts +0 -1
- package/src/templates/page.ts +1 -4
- package/src/templates/shared/collection-create-form.ts +5 -6
- package/src/templates/shared/collection-edit-form.ts +5 -6
- package/src/templates/shared/collection-list.ts +2 -2
- package/src/templates/shared/shared-crud-form-fields.ts +4 -9
- package/src/templates/templates.ts +5 -1
- package/src/test_utils/exec_async.ts +3 -4
- package/src/test_utils/test-on-real-app.ts +9 -11
- package/src/utils/browser-creator.js +0 -1
- package/src/utils/exec.ts +0 -1
- package/src/utils/input-wrapper.ts +1 -1
- package/src/utils/wrap-attributes.ts +1 -1
- package/src/utils/write-file.ts +1 -1
- 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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
18
|
-
postSealiousEdit(ctx: Context,
|
|
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(
|
|
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(
|
|
2
|
-
export declare function registerExternalStyles(
|
|
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,
|
|
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
|
|
1
|
+
export declare function pageTemplate(action_name: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function sharedCrudFormFields(collection_name: string
|
|
1
|
+
export declare function sharedCrudFormFields(collection_name: string): Promise<string>;
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
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`
|
package/lib/add-jdd-component.js
CHANGED
|
@@ -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.
|
|
36
|
-
console.
|
|
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.
|
|
70
|
-
console.
|
|
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 (
|
|
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.
|
|
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.
|
|
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:
|
|
216
|
-
|
|
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
|
-
|
|
409
|
+
)}-\${box.getAttribute(
|
|
407
410
|
"data-color-name"
|
|
408
|
-
|
|
411
|
+
)})\`
|
|
409
412
|
: \`var(--color-\${box.getAttribute(
|
|
410
413
|
"data-color-group-name"
|
|
411
|
-
|
|
414
|
+
)}-\${box.getAttribute(
|
|
412
415
|
"data-color-name"
|
|
413
|
-
|
|
416
|
+
)}-\${box.getAttribute(
|
|
414
417
|
"data-color-shade-number"
|
|
415
|
-
|
|
418
|
+
)})\`;
|
|
416
419
|
navigator.clipboard.writeText(css_var);
|
|
417
420
|
pop_toast();
|
|
418
421
|
}
|
|
@@ -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.
|
|
27
|
-
console.
|
|
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
|
},
|
package/lib/components/tabs.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
23
|
+
.tab-label {
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
39
26
|
}
|
|
40
|
-
}
|
|
41
27
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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,
|
|
@@ -18,7 +18,7 @@ describe("checkboxed-list", () => {
|
|
|
18
18
|
});
|
|
19
19
|
it("sends the values", async () => {
|
|
20
20
|
const port = await getPort();
|
|
21
|
-
console.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
${
|
|
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.
|
|
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-
|
|
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.
|
|
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.
|
|
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",
|
|
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")}),`,
|