@sealcode/sealgen 0.8.52 → 0.9.0
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/controls/array.d.ts +1 -1
- package/@types/forms/controls/checkbox-group.d.ts +1 -1
- package/@types/forms/controls/collapsible-field-group.d.ts +1 -1
- package/@types/forms/controls/derived-frame.d.ts +1 -0
- package/@types/forms/controls/dropdown.d.ts +2 -2
- package/@types/forms/controls/form-field-control.d.ts +1 -1
- package/@types/forms/controls/html.d.ts +1 -1
- package/@types/forms/controls/multiple-files.d.ts +1 -1
- package/@types/forms/controls/number.d.ts +1 -1
- package/@types/forms/controls/simple-input.d.ts +1 -1
- package/@types/forms/controls/tickable.d.ts +1 -1
- package/@types/forms/fields/field.d.ts +6 -6
- package/@types/forms/fields/file.d.ts +1 -1
- package/@types/forms/form.d.ts +7 -7
- package/@types/index.d.ts +1 -0
- package/@types/page/list.d.ts +13 -17
- package/@types/page/mountable-with-fields.d.ts +2 -2
- package/@types/page/props-parser.d.ts +1 -1
- package/@types/page/sealious-list.d.ts +18 -0
- package/@types/utils/utils.d.ts +3 -3
- package/lib/add-collection.js +7 -7
- package/lib/add-route.js +8 -8
- package/lib/add-route.test.js +4 -4
- package/lib/build.js +44 -11
- package/lib/components/components.js +5 -1
- package/lib/components/tabs.js +2 -2
- package/lib/components/toggle-modal.js +2 -2
- package/lib/find-scss-includes.js +3 -3
- package/lib/forms/controls/array.js +5 -5
- package/lib/forms/controls/big-radio-group.js +2 -2
- package/lib/forms/controls/checkboxed-list-input.js +3 -3
- package/lib/forms/controls/collapsible-field-group.js +1 -1
- package/lib/forms/controls/controls.js +5 -1
- package/lib/forms/controls/derived-frame.js +3 -3
- package/lib/forms/controls/derived.js +2 -2
- package/lib/forms/controls/dropdown.js +2 -2
- package/lib/forms/controls/editable-collection-subset.js +3 -3
- package/lib/forms/controls/field-group.js +1 -1
- package/lib/forms/controls/file.js +1 -1
- package/lib/forms/controls/hidden-input.js +1 -1
- package/lib/forms/controls/multiple-files.js +5 -5
- package/lib/forms/controls/multiple-photos.js +1 -1
- package/lib/forms/controls/photo.js +1 -1
- package/lib/forms/controls/simple-input.js +2 -2
- package/lib/forms/controls/tickable.js +3 -3
- package/lib/forms/fields/boolean.js +3 -3
- package/lib/forms/fields/checkboxed-list.js +3 -3
- package/lib/forms/fields/enum-multiple.js +3 -3
- package/lib/forms/fields/enum.js +2 -2
- package/lib/forms/fields/field.js +6 -2
- package/lib/forms/fields/file.js +6 -6
- package/lib/forms/fields/number.js +5 -5
- package/lib/forms/fields/pick-from-list.js +1 -1
- package/lib/forms/fields/regexp.js +2 -2
- package/lib/forms/fields/simple-form-field.js +4 -4
- package/lib/forms/form.js +9 -9
- package/lib/forms/form.test.js +12 -12
- package/lib/forms/multiform.js +5 -5
- package/lib/forms/multiform.test.js +26 -26
- package/lib/generate-collections.js +9 -5
- package/lib/generate-routes.js +13 -9
- package/lib/index.js +6 -1
- package/lib/make-env.js +1 -1
- package/lib/make-hidden-inputs.js +3 -3
- package/lib/page/list.js +85 -65
- package/lib/page/mountable-with-fields.js +2 -2
- package/lib/page/page.js +1 -1
- package/lib/page/sealious-list.js +53 -0
- package/lib/page/stateful-page.js +9 -9
- package/lib/templates/form.js +1 -1
- package/lib/templates/list.js +10 -9
- package/lib/templates/multiform.js +1 -1
- package/lib/templates/page.js +1 -1
- package/lib/templates/route-test.js +1 -1
- package/lib/templates/stateful-page.js +1 -1
- package/lib/test_utils/locator_is_visible.js +1 -1
- package/lib/utils/exec.js +1 -1
- package/lib/utils/import-path.js +2 -2
- package/lib/utils/input-wrapper.js +1 -1
- package/lib/utils/list-collections.js +2 -2
- package/lib/utils/prettier.js +6 -2
- package/lib/utils/question.js +1 -1
- package/lib/utils/render-attributes.js +1 -1
- package/lib/utils/utils.js +5 -1
- package/lib/utils/walk.js +1 -1
- package/package.json +2 -2
- package/src/add-route.ts +1 -1
- package/src/build.ts +56 -1
- package/src/generate-collections.ts +1 -1
- package/src/generate-routes.ts +1 -1
- package/src/index.ts +1 -0
- package/src/page/list.ts +106 -96
- package/src/page/sealious-list.ts +76 -0
- package/src/templates/list.ts +8 -7
- package/src/utils/import-path.ts +1 -1
package/lib/forms/form.test.js
CHANGED
|
@@ -40,7 +40,7 @@ exports.form_factory = form_factory;
|
|
|
40
40
|
describe("form test", () => {
|
|
41
41
|
let page;
|
|
42
42
|
before(async () => {
|
|
43
|
-
const browser = await browser_creator_1.getBrowser();
|
|
43
|
+
const browser = await (0, browser_creator_1.getBrowser)();
|
|
44
44
|
const context = await browser.newContext();
|
|
45
45
|
page = await context.newPage();
|
|
46
46
|
});
|
|
@@ -49,7 +49,7 @@ describe("form test", () => {
|
|
|
49
49
|
before(async () => {
|
|
50
50
|
const app = new koa_1.default();
|
|
51
51
|
const router = new router_1.default();
|
|
52
|
-
mount_1.mount(router, "/", form_factory(), true);
|
|
52
|
+
(0, mount_1.mount)(router, "/", form_factory(), true);
|
|
53
53
|
app.use(router.routes()).use(router.allowedMethods());
|
|
54
54
|
server = app.listen(8080);
|
|
55
55
|
await page.goto("http://localhost:8080");
|
|
@@ -59,7 +59,7 @@ describe("form test", () => {
|
|
|
59
59
|
});
|
|
60
60
|
it("does not allow to submit an empty form when there's a required field", async () => {
|
|
61
61
|
await page.getByRole("button", { name: "Submit", exact: true }).click();
|
|
62
|
-
await utils_1.assertThrowsAsync(async () => {
|
|
62
|
+
await (0, utils_1.assertThrowsAsync)(async () => {
|
|
63
63
|
return page.getByText("Done").click({ timeout: 500 });
|
|
64
64
|
});
|
|
65
65
|
});
|
|
@@ -92,7 +92,7 @@ describe("form test", () => {
|
|
|
92
92
|
it("allows visit when configured when canAccess returns true", async () => {
|
|
93
93
|
const app = new koa_1.default();
|
|
94
94
|
const router = new router_1.default();
|
|
95
|
-
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
95
|
+
(0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
|
|
96
96
|
return { canAccess: true, message: "" };
|
|
97
97
|
}), true);
|
|
98
98
|
app.use(router.routes()).use(router.allowedMethods());
|
|
@@ -106,7 +106,7 @@ describe("form test", () => {
|
|
|
106
106
|
const app = new koa_1.default();
|
|
107
107
|
const router = new router_1.default();
|
|
108
108
|
before(async () => {
|
|
109
|
-
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
109
|
+
(0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
|
|
110
110
|
return { canAccess: false, message: "" };
|
|
111
111
|
}), true);
|
|
112
112
|
app.use(router.routes()).use(router.allowedMethods());
|
|
@@ -135,7 +135,7 @@ describe("form test", () => {
|
|
|
135
135
|
it("passes the context to canAccess (false case)", async () => {
|
|
136
136
|
const app = new koa_1.default();
|
|
137
137
|
const router = new router_1.default();
|
|
138
|
-
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
138
|
+
(0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
|
|
139
139
|
return ctx.$context && ctx.$context.user_id
|
|
140
140
|
? { canAccess: true, message: "" }
|
|
141
141
|
: { canAccess: false, message: "" };
|
|
@@ -156,7 +156,7 @@ describe("form test", () => {
|
|
|
156
156
|
};
|
|
157
157
|
await next();
|
|
158
158
|
});
|
|
159
|
-
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
159
|
+
(0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
|
|
160
160
|
return ctx.$context && ctx.$context.user_id
|
|
161
161
|
? { canAccess: true, message: "" }
|
|
162
162
|
: { canAccess: false, message: "" };
|
|
@@ -175,7 +175,7 @@ describe("form test", () => {
|
|
|
175
175
|
before(async () => {
|
|
176
176
|
const app = new koa_1.default();
|
|
177
177
|
const router = new router_1.default();
|
|
178
|
-
mount_1.mount(router, "/", new (class extends index_1.Form {
|
|
178
|
+
(0, mount_1.mount)(router, "/", new (class extends index_1.Form {
|
|
179
179
|
constructor() {
|
|
180
180
|
super(...arguments);
|
|
181
181
|
this.fields = fields;
|
|
@@ -210,14 +210,14 @@ describe("form test", () => {
|
|
|
210
210
|
await page.getByPlaceholder("password").click();
|
|
211
211
|
await page.getByPlaceholder("password").fill("incorrect");
|
|
212
212
|
await page.getByRole("button", { name: "Submit" }).click();
|
|
213
|
-
if (!(await locator_is_visible_1.locator_is_visible(page.getByText("Incorrect input"))))
|
|
213
|
+
if (!(await (0, locator_is_visible_1.locator_is_visible)(page.getByText("Incorrect input"))))
|
|
214
214
|
throw new Error("validation message doens't show up when input is incorrect");
|
|
215
215
|
});
|
|
216
216
|
it("doesn't show when correct input is given", async () => {
|
|
217
217
|
await page.getByPlaceholder("password").click();
|
|
218
218
|
await page.getByPlaceholder("password").fill("correct");
|
|
219
219
|
await page.getByRole("button", { name: "Submit" }).click();
|
|
220
|
-
await utils_1.assertThrowsAsync(async () => {
|
|
220
|
+
await (0, utils_1.assertThrowsAsync)(async () => {
|
|
221
221
|
return page.getByText("Incorrect input").click({ timeout: 500 });
|
|
222
222
|
});
|
|
223
223
|
});
|
|
@@ -230,7 +230,7 @@ describe("form test", () => {
|
|
|
230
230
|
const fields = {
|
|
231
231
|
text: new index_1.Fields.EmailField(true),
|
|
232
232
|
};
|
|
233
|
-
mount_1.mount(router, "/", new (class extends index_1.Form {
|
|
233
|
+
(0, mount_1.mount)(router, "/", new (class extends index_1.Form {
|
|
234
234
|
constructor() {
|
|
235
235
|
super(...arguments);
|
|
236
236
|
this.fields = fields;
|
|
@@ -263,7 +263,7 @@ describe("form test", () => {
|
|
|
263
263
|
await page.getByPlaceholder("text").click();
|
|
264
264
|
await page.getByPlaceholder("text").fill("yes@an.email");
|
|
265
265
|
await page.getByRole("button", { name: "Submit" }).click();
|
|
266
|
-
utils_1.assertThrowsAsync(async () => {
|
|
266
|
+
(0, utils_1.assertThrowsAsync)(async () => {
|
|
267
267
|
return page
|
|
268
268
|
.getByText("Please enter a proper email address")
|
|
269
269
|
.click({ timeout: 500 });
|
package/lib/forms/multiform.js
CHANGED
|
@@ -14,8 +14,8 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
14
14
|
init() {
|
|
15
15
|
super.init();
|
|
16
16
|
for (const [key, form] of Object.entries(this.forms)) {
|
|
17
|
-
if (key !== sanitize_1.attribute(key)) {
|
|
18
|
-
throw new Error(`Form name "${key}" is not url-safe. Try: "${sanitize_1.attribute(key)}"`);
|
|
17
|
+
if (key !== (0, sanitize_1.attribute)(key)) {
|
|
18
|
+
throw new Error(`Form name "${key}" is not url-safe. Try: "${(0, sanitize_1.attribute)(key)}"`);
|
|
19
19
|
}
|
|
20
20
|
form.makeOpenFormTag = () => `<div>`;
|
|
21
21
|
form.makeCloseFormTag = () => `</div>`;
|
|
@@ -53,7 +53,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
53
53
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
54
|
getSubformsToRender(ctx) {
|
|
55
55
|
const requested_frame = ctx.headers["turbo-frame"];
|
|
56
|
-
if (!ts_predicates_1.is(requested_frame, ts_predicates_1.predicates.or(ts_predicates_1.predicates.undefined, ts_predicates_1.predicates.string))) {
|
|
56
|
+
if (!(0, ts_predicates_1.is)(requested_frame, ts_predicates_1.predicates.or(ts_predicates_1.predicates.undefined, ts_predicates_1.predicates.string))) {
|
|
57
57
|
throw new Error("Wrong turbo-frame header value type");
|
|
58
58
|
}
|
|
59
59
|
const forms_to_render = requested_frame && this.forms[requested_frame]
|
|
@@ -82,7 +82,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
82
82
|
return result;
|
|
83
83
|
}
|
|
84
84
|
async render(ctx, messages, prerenderedForms = {}, show_field_errors) {
|
|
85
|
-
return tempstream_1.tempstream /* HTML */ `${this.renderMessages(ctx, {
|
|
85
|
+
return (0, tempstream_1.tempstream /* HTML */) `${this.renderMessages(ctx, {
|
|
86
86
|
raw_values: {},
|
|
87
87
|
messages,
|
|
88
88
|
})}
|
|
@@ -96,7 +96,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
96
96
|
></form>
|
|
97
97
|
${this.getSubformsToRender(ctx).map(([form_name]) => {
|
|
98
98
|
const frame_form_id = this.name + "_" + form_name + "_frame_form";
|
|
99
|
-
return tempstream_1.tempstream /* HTML */ `<turbo-frame
|
|
99
|
+
return (0, tempstream_1.tempstream /* HTML */) `<turbo-frame
|
|
100
100
|
id="${form_name}"
|
|
101
101
|
contains-subform
|
|
102
102
|
subform-id="${frame_form_id}"
|
|
@@ -48,12 +48,12 @@ function multiform_factory(canAccessFun1, canAccessFun2) {
|
|
|
48
48
|
super(...arguments);
|
|
49
49
|
this.name = "multiform_test";
|
|
50
50
|
this.forms = {
|
|
51
|
-
form1: form_test_1.form_factory(canAccessFun1),
|
|
52
|
-
form2: form_test_1.form_factory(canAccessFun2),
|
|
51
|
+
form1: (0, form_test_1.form_factory)(canAccessFun1),
|
|
52
|
+
form2: (0, form_test_1.form_factory)(canAccessFun2),
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
async render(...args) {
|
|
56
|
-
return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
|
|
56
|
+
return (0, tempstream_1.tempstream /* HTML */) `<!DOCTYPE html>
|
|
57
57
|
<html>
|
|
58
58
|
<head>
|
|
59
59
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -71,7 +71,7 @@ function multiform_factory(canAccessFun1, canAccessFun2) {
|
|
|
71
71
|
async function tests(js_enabled) {
|
|
72
72
|
let page;
|
|
73
73
|
before(async () => {
|
|
74
|
-
const browser = await browser_creator_1.getBrowser();
|
|
74
|
+
const browser = await (0, browser_creator_1.getBrowser)();
|
|
75
75
|
const context = await browser.newContext({
|
|
76
76
|
javaScriptEnabled: js_enabled,
|
|
77
77
|
});
|
|
@@ -85,18 +85,18 @@ async function tests(js_enabled) {
|
|
|
85
85
|
});
|
|
86
86
|
it("checking whether only one submit handler is run", async () => {
|
|
87
87
|
await page.getByText("Form1 done!").click();
|
|
88
|
-
await utils_1.assertThrowsAsync(async () => {
|
|
88
|
+
await (0, utils_1.assertThrowsAsync)(async () => {
|
|
89
89
|
return page.getByText("Form2 done!").click({ timeout: 500 });
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
92
|
it("checking whether the input in the not submitted form prevails", async () => {
|
|
93
|
-
await test_1.expect(page.getByLabel("name")).toHaveValue("sample2");
|
|
93
|
+
await (0, test_1.expect)(page.getByLabel("name")).toHaveValue("sample2");
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
async function general_form_validation_e2e_tests(js_enabled) {
|
|
97
97
|
let browser;
|
|
98
98
|
let page;
|
|
99
|
-
browser = await browser_creator_1.getBrowser();
|
|
99
|
+
browser = await (0, browser_creator_1.getBrowser)();
|
|
100
100
|
const context = await browser.newContext({
|
|
101
101
|
javaScriptEnabled: js_enabled,
|
|
102
102
|
});
|
|
@@ -107,7 +107,7 @@ async function general_form_validation_e2e_tests(js_enabled) {
|
|
|
107
107
|
await page.getByPlaceholder("password").click();
|
|
108
108
|
await page.getByPlaceholder("password").fill("test");
|
|
109
109
|
await page.locator("#multiform_test_form2_submit").click();
|
|
110
|
-
utils_1.assertThrowsAsync(async () => {
|
|
110
|
+
(0, utils_1.assertThrowsAsync)(async () => {
|
|
111
111
|
page.getByText("Incorrect input").click({ timeout: 500 });
|
|
112
112
|
});
|
|
113
113
|
}
|
|
@@ -115,7 +115,7 @@ async function individual_field_validation_e2e_tests(javaScriptEnabled) {
|
|
|
115
115
|
let browser;
|
|
116
116
|
let page;
|
|
117
117
|
before(async () => {
|
|
118
|
-
browser = await browser_creator_1.getBrowser();
|
|
118
|
+
browser = await (0, browser_creator_1.getBrowser)();
|
|
119
119
|
const context = await browser.newContext({
|
|
120
120
|
javaScriptEnabled,
|
|
121
121
|
});
|
|
@@ -132,7 +132,7 @@ async function individual_field_validation_e2e_tests(javaScriptEnabled) {
|
|
|
132
132
|
await page.getByPlaceholder("text").click();
|
|
133
133
|
await page.getByPlaceholder("text").fill("yes@an.email");
|
|
134
134
|
await page.locator("#multiform_test_form1_submit").click();
|
|
135
|
-
utils_1.assertThrowsAsync(async () => {
|
|
135
|
+
(0, utils_1.assertThrowsAsync)(async () => {
|
|
136
136
|
return page.getByText("Please enter a proper email address").click({ timeout: 500 });
|
|
137
137
|
});
|
|
138
138
|
});
|
|
@@ -143,14 +143,14 @@ describe("multiform test", () => {
|
|
|
143
143
|
before(async () => {
|
|
144
144
|
const app = new koa_1.default();
|
|
145
145
|
const router = new router_1.default();
|
|
146
|
-
mount_1.mount(router, "/", new (class extends multiform_1.Multiform {
|
|
146
|
+
(0, mount_1.mount)(router, "/", new (class extends multiform_1.Multiform {
|
|
147
147
|
constructor() {
|
|
148
148
|
super(...arguments);
|
|
149
149
|
this.name = "multiform_test";
|
|
150
150
|
this.forms = { form1, form2 };
|
|
151
151
|
}
|
|
152
152
|
async render(ctx, messages, prerenderedForms, show_field_errors = true) {
|
|
153
|
-
return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
|
|
153
|
+
return (0, tempstream_1.tempstream /* HTML */) `<!DOCTYPE html>
|
|
154
154
|
<html>
|
|
155
155
|
<head>
|
|
156
156
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -180,14 +180,14 @@ describe("multiform test", () => {
|
|
|
180
180
|
before(async () => {
|
|
181
181
|
const app = new koa_1.default();
|
|
182
182
|
const router = new router_1.default();
|
|
183
|
-
mount_1.mount(router, "/", multiform_factory(async (ctx) => {
|
|
183
|
+
(0, mount_1.mount)(router, "/", multiform_factory(async (ctx) => {
|
|
184
184
|
return { canAccess: true, message: "" };
|
|
185
185
|
}, async (ctx) => {
|
|
186
186
|
return { canAccess: true, message: "" };
|
|
187
187
|
}), true);
|
|
188
188
|
app.use(router.routes()).use(router.allowedMethods());
|
|
189
189
|
server = app.listen(8080);
|
|
190
|
-
const browser = await browser_creator_1.getBrowser();
|
|
190
|
+
const browser = await (0, browser_creator_1.getBrowser)();
|
|
191
191
|
const context = await browser.newContext();
|
|
192
192
|
page = await context.newPage();
|
|
193
193
|
});
|
|
@@ -218,14 +218,14 @@ describe("multiform test", () => {
|
|
|
218
218
|
before(async () => {
|
|
219
219
|
const app = new koa_1.default();
|
|
220
220
|
const router = new router_1.default();
|
|
221
|
-
mount_1.mount(router, "/", multiform_factory(async (ctx) => {
|
|
221
|
+
(0, mount_1.mount)(router, "/", multiform_factory(async (ctx) => {
|
|
222
222
|
return { canAccess: false, message: "" };
|
|
223
223
|
}, async (ctx) => {
|
|
224
224
|
return { canAccess: false, message: "" };
|
|
225
225
|
}), true);
|
|
226
226
|
app.use(router.routes()).use(router.allowedMethods());
|
|
227
227
|
server = app.listen(8080);
|
|
228
|
-
const browser = await browser_creator_1.getBrowser();
|
|
228
|
+
const browser = await (0, browser_creator_1.getBrowser)();
|
|
229
229
|
const context = await browser.newContext();
|
|
230
230
|
page = await context.newPage();
|
|
231
231
|
});
|
|
@@ -234,7 +234,7 @@ describe("multiform test", () => {
|
|
|
234
234
|
});
|
|
235
235
|
it("check wether forms didnt render", async () => {
|
|
236
236
|
await page.goto("http://localhost:8080");
|
|
237
|
-
await utils_1.assertThrowsAsync(async () => {
|
|
237
|
+
await (0, utils_1.assertThrowsAsync)(async () => {
|
|
238
238
|
return page
|
|
239
239
|
.locator("#form1")
|
|
240
240
|
.getByText("This is a test:")
|
|
@@ -257,14 +257,14 @@ describe("multiform test", () => {
|
|
|
257
257
|
before(async () => {
|
|
258
258
|
const app = new koa_1.default();
|
|
259
259
|
const router = new router_1.default();
|
|
260
|
-
mount_1.mount(router, "/", multiform_factory(async (ctx) => {
|
|
260
|
+
(0, mount_1.mount)(router, "/", multiform_factory(async (ctx) => {
|
|
261
261
|
return { canAccess: true, message: "" };
|
|
262
262
|
}, async (ctx) => {
|
|
263
263
|
return { canAccess: false, message: "" };
|
|
264
264
|
}), true);
|
|
265
265
|
app.use(router.routes()).use(router.allowedMethods());
|
|
266
266
|
server = app.listen(8080);
|
|
267
|
-
const browser = await browser_creator_1.getBrowser();
|
|
267
|
+
const browser = await (0, browser_creator_1.getBrowser)();
|
|
268
268
|
const context = await browser.newContext({});
|
|
269
269
|
page = await context.newPage();
|
|
270
270
|
});
|
|
@@ -288,7 +288,7 @@ describe("multiform test", () => {
|
|
|
288
288
|
});
|
|
289
289
|
it("check wether form2 does not render", async () => {
|
|
290
290
|
await page.goto("http://localhost:8080");
|
|
291
|
-
await utils_1.assertThrowsAsync(async () => {
|
|
291
|
+
await (0, utils_1.assertThrowsAsync)(async () => {
|
|
292
292
|
return page
|
|
293
293
|
.locator("#form2")
|
|
294
294
|
.getByText("This is a test:")
|
|
@@ -314,7 +314,7 @@ describe("multiform test", () => {
|
|
|
314
314
|
before(async () => {
|
|
315
315
|
const app = new koa_1.default();
|
|
316
316
|
const router = new router_1.default();
|
|
317
|
-
mount_1.mount(router, "/", new (class extends multiform_1.Multiform {
|
|
317
|
+
(0, mount_1.mount)(router, "/", new (class extends multiform_1.Multiform {
|
|
318
318
|
constructor() {
|
|
319
319
|
super(...arguments);
|
|
320
320
|
this.name = "multiform_test";
|
|
@@ -343,11 +343,11 @@ describe("multiform test", () => {
|
|
|
343
343
|
return { valid: true, error: "" };
|
|
344
344
|
}
|
|
345
345
|
})(),
|
|
346
|
-
form2: form_test_1.form_factory(),
|
|
346
|
+
form2: (0, form_test_1.form_factory)(),
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
349
|
async render(...args) {
|
|
350
|
-
return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
|
|
350
|
+
return (0, tempstream_1.tempstream /* HTML */) `<!DOCTYPE html>
|
|
351
351
|
<html>
|
|
352
352
|
<head>
|
|
353
353
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -378,7 +378,7 @@ describe("multiform test", () => {
|
|
|
378
378
|
const fields = {
|
|
379
379
|
text: new __1.Fields.EmailField(true),
|
|
380
380
|
};
|
|
381
|
-
mount_1.mount(router, "/", new (class extends multiform_1.Multiform {
|
|
381
|
+
(0, mount_1.mount)(router, "/", new (class extends multiform_1.Multiform {
|
|
382
382
|
constructor() {
|
|
383
383
|
super(...arguments);
|
|
384
384
|
this.name = "multiform_test";
|
|
@@ -399,11 +399,11 @@ describe("multiform test", () => {
|
|
|
399
399
|
return;
|
|
400
400
|
}
|
|
401
401
|
})(),
|
|
402
|
-
form2: form_test_1.form_factory(),
|
|
402
|
+
form2: (0, form_test_1.form_factory)(),
|
|
403
403
|
};
|
|
404
404
|
}
|
|
405
405
|
async render(...args) {
|
|
406
|
-
return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
|
|
406
|
+
return (0, tempstream_1.tempstream /* HTML */) `<!DOCTYPE html>
|
|
407
407
|
<html>
|
|
408
408
|
<head>
|
|
409
409
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -28,14 +32,14 @@ const prettier = __importStar(require("prettier"));
|
|
|
28
32
|
const fs_1 = require("fs");
|
|
29
33
|
const ts_predicates_1 = require("@sealcode/ts-predicates");
|
|
30
34
|
const prettier_1 = require("./utils/prettier");
|
|
31
|
-
const target_locreq = locreq_1.default(process.cwd());
|
|
35
|
+
const target_locreq = (0, locreq_1.default)(process.cwd());
|
|
32
36
|
async function extractCollectionClassname(full_file_path) {
|
|
33
37
|
const file_content = await fs_1.promises.readFile(full_file_path, "utf-8");
|
|
34
38
|
const result = /export default class (\w+)/.exec(file_content);
|
|
35
39
|
if (result === null) {
|
|
36
40
|
throw new Error("Missing 'export default class' statement?");
|
|
37
41
|
}
|
|
38
|
-
return ts_predicates_1.assertType(result[1], ts_predicates_1.predicates.string, `Missing export default class in '${full_file_path}'?`);
|
|
42
|
+
return (0, ts_predicates_1.assertType)(result[1], ts_predicates_1.predicates.string, `Missing export default class in '${full_file_path}'?`);
|
|
39
43
|
}
|
|
40
44
|
async function generateCollections() {
|
|
41
45
|
const collections_dir = target_locreq.resolve("src/back/collections");
|
|
@@ -57,7 +61,7 @@ async function generateCollections() {
|
|
|
57
61
|
import { App } from "sealious";
|
|
58
62
|
|
|
59
63
|
${file_data
|
|
60
|
-
.map(({ class_name, urlname }) => `import _${class_name} from "./${urlname}";`)
|
|
64
|
+
.map(({ class_name, urlname }) => `import _${class_name} from "./${urlname}.js";`)
|
|
61
65
|
.join("\n")}
|
|
62
66
|
|
|
63
67
|
${file_data
|
|
@@ -70,7 +74,7 @@ ${file_data
|
|
|
70
74
|
.map(({ class_name, urlname }) => ` "${urlname}": ${class_name},`)
|
|
71
75
|
.join("\n")}
|
|
72
76
|
};`;
|
|
73
|
-
await fs_1.promises.writeFile(target_locreq.resolve("src/back/collections/collections.ts"), prettier.format(content, await prettier_1.getPrettierConfig()));
|
|
77
|
+
await fs_1.promises.writeFile(target_locreq.resolve("src/back/collections/collections.ts"), prettier.format(content, await (0, prettier_1.getPrettierConfig)()));
|
|
74
78
|
// eslint-disable-next-line no-console
|
|
75
79
|
console.log("Successfuly generated new src/back/collections/collections.ts file");
|
|
76
80
|
}
|
package/lib/generate-routes.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -32,14 +36,14 @@ const import_path_1 = require("./utils/import-path");
|
|
|
32
36
|
const ts_predicates_1 = require("@sealcode/ts-predicates");
|
|
33
37
|
const escape_url_params_1 = require("./utils/escape-url-params");
|
|
34
38
|
const prettier_1 = require("./utils/prettier");
|
|
35
|
-
const target_locreq = locreq_1.default(process.cwd());
|
|
39
|
+
const target_locreq = (0, locreq_1.default)(process.cwd());
|
|
36
40
|
async function extractActionName(full_file_path) {
|
|
37
41
|
const file_content = await fs_1.promises.readFile(full_file_path, "utf-8");
|
|
38
42
|
const result = /export const actionName = "(\w+)"/.exec(file_content);
|
|
39
43
|
if (result === null) {
|
|
40
44
|
throw new Error("Missing 'export const actionName' statement?");
|
|
41
45
|
}
|
|
42
|
-
return ts_predicates_1.assertType(result[1], ts_predicates_1.predicates.string, "Missing export default class?");
|
|
46
|
+
return (0, ts_predicates_1.assertType)(result[1], ts_predicates_1.predicates.string, "Missing export default class?");
|
|
43
47
|
}
|
|
44
48
|
function generateURL(actionName, url) {
|
|
45
49
|
const parts = url.split("/");
|
|
@@ -60,7 +64,7 @@ function generateURL(actionName, url) {
|
|
|
60
64
|
${actionName}URL.rawURL = "${url}";`;
|
|
61
65
|
}
|
|
62
66
|
async function generateRoutes() {
|
|
63
|
-
const files = await Promise.all((await walk_1.walkDir(target_locreq.resolve("src/back/routes")))
|
|
67
|
+
const files = await Promise.all((await (0, walk_1.walkDir)(target_locreq.resolve("src/back/routes")))
|
|
64
68
|
.filter((f) => f.endsWith(".page.ts") ||
|
|
65
69
|
f.endsWith(".form.ts") ||
|
|
66
70
|
f.endsWith(".multiform.ts") ||
|
|
@@ -71,8 +75,8 @@ async function generateRoutes() {
|
|
|
71
75
|
.map(async (fullpath) => ({
|
|
72
76
|
fullpath,
|
|
73
77
|
actionName: await extractActionName(fullpath),
|
|
74
|
-
url: escape_url_params_1.unescape_url_params("/" +
|
|
75
|
-
path_1.relative(target_locreq.resolve("src/back/routes"), fullpath).replace(/\..+/, "") +
|
|
78
|
+
url: (0, escape_url_params_1.unescape_url_params)("/" +
|
|
79
|
+
(0, path_1.relative)(target_locreq.resolve("src/back/routes"), fullpath).replace(/\..+/, "") +
|
|
76
80
|
"/" // trailing slash is important here, as it enables to use the entire path while building relative URLs. For example, while visiting /users/123, the path ./add-photo leads to /users/add-photo. While visiting /users/123/ (note the trailing slash), the path ./add-photo leads to /users/123/add-photo
|
|
77
81
|
),
|
|
78
82
|
})));
|
|
@@ -80,10 +84,10 @@ async function generateRoutes() {
|
|
|
80
84
|
|
|
81
85
|
import Router from "@koa/router";
|
|
82
86
|
import { mount } from "@sealcode/sealgen";
|
|
83
|
-
import * as URLs from "./urls"
|
|
87
|
+
import * as URLs from "./urls.js"
|
|
84
88
|
|
|
85
89
|
${files
|
|
86
|
-
.map(({ actionName, fullpath }) => `import { default as ${actionName} } from "${import_path_1.importPath(target_locreq.resolve("src/back/routes/routes.ts"), fullpath)}";`)
|
|
90
|
+
.map(({ actionName, fullpath }) => `import { default as ${actionName} } from "${(0, import_path_1.importPath)(target_locreq.resolve("src/back/routes/routes.ts"), fullpath)}";`)
|
|
87
91
|
.join("\n")}
|
|
88
92
|
|
|
89
93
|
export default function mountAutoRoutes(router: Router) {
|
|
@@ -96,7 +100,7 @@ ${files
|
|
|
96
100
|
.map(({ actionName, url }) => generateURL(actionName, url))
|
|
97
101
|
.join("\n")}
|
|
98
102
|
`;
|
|
99
|
-
const prettier_config = await prettier_1.getPrettierConfig();
|
|
103
|
+
const prettier_config = await (0, prettier_1.getPrettierConfig)();
|
|
100
104
|
await fs_1.promises.writeFile(target_locreq.resolve("src/back/routes/routes.ts"), prettier.format(routes_content, prettier_config));
|
|
101
105
|
await fs_1.promises.writeFile(target_locreq.resolve("src/back/routes/urls.ts"), prettier.format(urls_content, prettier_config));
|
|
102
106
|
// eslint-disable-next-line no-console
|
package/lib/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -32,6 +36,7 @@ __exportStar(require("./forms/form"), exports);
|
|
|
32
36
|
__exportStar(require("./page/props-parser"), exports);
|
|
33
37
|
__exportStar(require("./utils/utils"), exports);
|
|
34
38
|
__exportStar(require("./page/list"), exports);
|
|
39
|
+
__exportStar(require("./page/sealious-list"), exports);
|
|
35
40
|
__exportStar(require("./utils/translate"), exports);
|
|
36
41
|
exports.sanitize = __importStar(require("./sanitize"));
|
|
37
42
|
__exportStar(require("./forms/multiform"), exports);
|
package/lib/make-env.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.makeEnv = void 0;
|
|
|
7
7
|
const os_1 = __importDefault(require("os"));
|
|
8
8
|
const fs_1 = require("fs");
|
|
9
9
|
const locreq_1 = __importDefault(require("locreq"));
|
|
10
|
-
const target_locreq = locreq_1.default(process.cwd());
|
|
10
|
+
const target_locreq = (0, locreq_1.default)(process.cwd());
|
|
11
11
|
async function makeEnv() {
|
|
12
12
|
const { uid, gid } = os_1.default.userInfo();
|
|
13
13
|
const content = `USER_ID=${uid}
|
|
@@ -4,14 +4,14 @@ exports.makeHiddenInputs = void 0;
|
|
|
4
4
|
const tempstream_1 = require("tempstream");
|
|
5
5
|
const sanitize_1 = require("./sanitize");
|
|
6
6
|
function makeHiddenInputs(ctx, fields, values, fields_to_skip) {
|
|
7
|
-
return tempstream_1.tempstream `${Object.entries(fields)
|
|
7
|
+
return (0, tempstream_1.tempstream) `${Object.entries(fields)
|
|
8
8
|
.filter(([key]) => !fields_to_skip.includes(key))
|
|
9
|
-
.map(([key, field]) => tempstream_1.tempstream /* HTML */ `<input
|
|
9
|
+
.map(([key, field]) => (0, tempstream_1.tempstream /* HTML */) `<input
|
|
10
10
|
type="hidden"
|
|
11
11
|
name="${key}"
|
|
12
12
|
value="${field
|
|
13
13
|
.getValue(ctx, values)
|
|
14
|
-
.then((r) => sanitize_1.attribute(JSON.stringify(r.raw) || ""))}"
|
|
14
|
+
.then((r) => (0, sanitize_1.attribute)(JSON.stringify(r.raw) || ""))}"
|
|
15
15
|
/>`)}`;
|
|
16
16
|
}
|
|
17
17
|
exports.makeHiddenInputs = makeHiddenInputs;
|