@sealcode/sealgen 0.8.43 → 0.8.47
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/.eslintrc.js +1 -1
- package/.mocharc.js +10 -0
- package/.nycrc +6 -0
- package/.prettierrc +20 -13
- package/@types/add-route.d.ts +3 -1
- package/@types/build.d.ts +3 -1
- package/@types/forms/fields/boolean.test.d.ts +1 -0
- package/@types/forms/fields/email.test.d.ts +1 -0
- package/@types/forms/fields/enum-multiple.test.d.ts +1 -0
- package/@types/forms/fields/enum.test.d.ts +1 -0
- package/@types/forms/fields/number.test.d.ts +1 -0
- package/@types/forms/fields/pick-from-list.test.d.ts +1 -0
- package/@types/forms/fields/regexp.test.d.ts +1 -0
- package/@types/forms/form.test.d.ts +6 -0
- package/@types/forms/multiform.test.d.ts +1 -0
- package/@types/mount.d.ts +1 -1
- package/@types/page/mountable-with-fields.d.ts +1 -1
- package/@types/test_utils/locator_is_visible.d.ts +2 -0
- package/@types/utils/assert-throws.d.ts +1 -0
- package/@types/utils/browser-creator.d.ts +1 -0
- package/@types/utils/utils.d.ts +1 -0
- package/lib/add-route.js +3 -3
- package/lib/add-route.js.map +1 -1
- package/lib/add-route.test.js +55 -0
- package/lib/add-route.test.js.map +1 -0
- package/lib/build.js +3 -2
- package/lib/build.js.map +1 -1
- package/lib/cli.js +1 -1
- package/lib/cli.js.map +1 -1
- package/lib/example.test.js +4 -0
- package/lib/example.test.js.map +1 -0
- package/lib/forms/fields/boolean.test.js +37 -0
- package/lib/forms/fields/boolean.test.js.map +1 -0
- package/lib/forms/fields/email.test.js +25 -0
- package/lib/forms/fields/email.test.js.map +1 -0
- package/lib/forms/fields/enum-multiple.test.js +32 -0
- package/lib/forms/fields/enum-multiple.test.js.map +1 -0
- package/lib/forms/fields/enum.test.js +26 -0
- package/lib/forms/fields/enum.test.js.map +1 -0
- package/lib/forms/fields/number.js +0 -1
- package/lib/forms/fields/number.js.map +1 -1
- package/lib/forms/fields/number.test.js +35 -0
- package/lib/forms/fields/number.test.js.map +1 -0
- package/lib/forms/fields/pick-from-list.test.js +22 -0
- package/lib/forms/fields/pick-from-list.test.js.map +1 -0
- package/lib/forms/fields/regexp.test.js +26 -0
- package/lib/forms/fields/regexp.test.js.map +1 -0
- package/lib/forms/form.test.js +275 -0
- package/lib/forms/form.test.js.map +1 -0
- package/lib/forms/multiform.js +11 -2
- package/lib/forms/multiform.js.map +1 -1
- package/lib/forms/multiform.test.js +431 -0
- package/lib/forms/multiform.test.js.map +1 -0
- package/lib/make-env.js +1 -1
- package/lib/mount.js +38 -3
- package/lib/mount.js.map +1 -1
- package/lib/test_utils/locator_is_visible.js +15 -0
- package/lib/test_utils/locator_is_visible.js.map +1 -0
- package/lib/utils/assert-throws.js +24 -0
- package/lib/utils/assert-throws.js.map +1 -0
- package/lib/utils/browser-creator.js +14 -0
- package/lib/utils/browser-creator.js.map +1 -0
- package/lib/utils/exec.js.map +1 -1
- package/lib/utils/question.js.map +1 -1
- package/lib/utils/utils.js +3 -1
- package/lib/utils/utils.js.map +1 -1
- package/mocha_root_hooks.js +6 -0
- package/package.json +16 -8
- package/src/add-route.test.ts +58 -0
- package/src/add-route.ts +6 -5
- package/src/build.ts +6 -3
- package/src/cli.ts +2 -2
- package/src/forms/fields/boolean.test.ts +36 -0
- package/src/forms/fields/email.test.ts +24 -0
- package/src/forms/fields/enum-multiple.test.ts +31 -0
- package/src/forms/fields/enum.test.ts +25 -0
- package/src/forms/fields/number.test.ts +34 -0
- package/src/forms/fields/number.ts +0 -1
- package/src/forms/fields/pick-from-list.test.ts +19 -0
- package/src/forms/fields/regexp.test.ts +25 -0
- package/src/forms/form.test.ts +351 -0
- package/src/forms/multiform.test.ts +540 -0
- package/src/forms/multiform.ts +12 -2
- package/src/make-env.ts +1 -1
- package/src/mount.ts +43 -9
- package/src/page/mountable-with-fields.ts +1 -1
- package/src/test_utils/locator_is_visible.ts +17 -0
- package/src/utils/assert-throws.ts +18 -0
- package/src/utils/browser-creator.js +10 -0
- package/src/utils/exec.ts +8 -2
- package/src/utils/question.ts +4 -1
- package/src/utils/utils.ts +1 -0
- package/tsconfig.json +2 -3
- package/.nyc_output/1c5dff80-7861-427a-b1bb-d0686211f098.json +0 -1
- package/.nyc_output/a38a0d08-1f1f-4973-b5e2-efc434c1593d.json +0 -1
- package/.nyc_output/processinfo/1c5dff80-7861-427a-b1bb-d0686211f098.json +0 -1
- package/.nyc_output/processinfo/a38a0d08-1f1f-4973-b5e2-efc434c1593d.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
- package/.xunit +0 -3
- package/@types/forms/fields/files-multiple.d.ts +0 -12
- package/coverage/clover.xml +0 -79
- package/lib/forms/fields/files-multiple.js +0 -18
- package/lib/forms/fields/files-multiple.js.map +0 -1
- package/lib/sealgen-url.js +0 -1
- package/lib/sealgen-url.js.map +0 -1
- package/lib/tests/manual/multiform.js +0 -95
- package/lib/tests/manual/multiform.js.map +0 -1
- package/src/tests/manual/multiform.ts +0 -112
- package/test.js +0 -68
- /package/@types/{tests/manual/multiform.d.ts → add-route.test.d.ts} +0 -0
- /package/@types/{sealgen-url.d.ts → example.test.d.ts} +0 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.form_factory = void 0;
|
|
7
|
+
const router_1 = __importDefault(require("@koa/router"));
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const koa_1 = __importDefault(require("koa"));
|
|
10
|
+
const index_1 = require("../index");
|
|
11
|
+
const mount_1 = require("../mount");
|
|
12
|
+
const locator_is_visible_1 = require("../test_utils/locator_is_visible");
|
|
13
|
+
const browser_creator_1 = require("../utils/browser-creator");
|
|
14
|
+
const utils_1 = require("../utils/utils");
|
|
15
|
+
const fields = {
|
|
16
|
+
text: new index_1.Fields.SimpleFormField(true),
|
|
17
|
+
};
|
|
18
|
+
function form_factory(canAccessFun) {
|
|
19
|
+
const result = new (class extends index_1.Form {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.fields = fields;
|
|
23
|
+
this.submitButtonText = "Submit";
|
|
24
|
+
this.controls = [
|
|
25
|
+
new index_1.Controls.SimpleInput(fields.text, {
|
|
26
|
+
label: "This is a test:",
|
|
27
|
+
type: "password",
|
|
28
|
+
}),
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
async onSubmit() {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
if (canAccessFun)
|
|
36
|
+
result.canAccess = canAccessFun;
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
exports.form_factory = form_factory;
|
|
40
|
+
describe("form test", () => {
|
|
41
|
+
let page;
|
|
42
|
+
before(async () => {
|
|
43
|
+
const browser = await browser_creator_1.getBrowser();
|
|
44
|
+
const context = await browser.newContext();
|
|
45
|
+
page = await context.newPage();
|
|
46
|
+
});
|
|
47
|
+
describe("basic tests", async () => {
|
|
48
|
+
let server;
|
|
49
|
+
before(async () => {
|
|
50
|
+
const app = new koa_1.default();
|
|
51
|
+
const router = new router_1.default();
|
|
52
|
+
mount_1.mount(router, "/", form_factory(), true);
|
|
53
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
54
|
+
server = app.listen(8080);
|
|
55
|
+
await page.goto("http://localhost:8080");
|
|
56
|
+
});
|
|
57
|
+
after(async () => {
|
|
58
|
+
server.close();
|
|
59
|
+
});
|
|
60
|
+
it("does not allow to submit an empty form when there's a required field", async () => {
|
|
61
|
+
await page.getByRole("button", { name: "Submit", exact: true }).click();
|
|
62
|
+
await utils_1.assertThrowsAsync(async () => {
|
|
63
|
+
return page.getByText("Done").click({ timeout: 500 });
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
it("allows to submit a form when all required fields have a value", async () => {
|
|
67
|
+
await page.getByPlaceholder("password").click();
|
|
68
|
+
await page.getByPlaceholder("password").fill("testpasswd");
|
|
69
|
+
await page.getByRole("button", { name: "Submit", exact: true }).click();
|
|
70
|
+
await page.getByText("Done").click();
|
|
71
|
+
});
|
|
72
|
+
it("does not allow submitting an empty form by circumventing HTML-based validation", async () => {
|
|
73
|
+
const res_axios = await axios_1.default.post("http://localhost:8080", {
|
|
74
|
+
text: "",
|
|
75
|
+
}, {
|
|
76
|
+
validateStatus: (status) => {
|
|
77
|
+
if (status == 422)
|
|
78
|
+
return true;
|
|
79
|
+
return false;
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
if (!res_axios.data.includes("Some fields are invalid")) {
|
|
83
|
+
throw new Error("when sending a empty request with axios, the error didnt appear");
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("canAccess tests", async () => {
|
|
88
|
+
let server;
|
|
89
|
+
afterEach(async () => {
|
|
90
|
+
server.close();
|
|
91
|
+
});
|
|
92
|
+
it("allows visit when configured when canAccess returns true", async () => {
|
|
93
|
+
const app = new koa_1.default();
|
|
94
|
+
const router = new router_1.default();
|
|
95
|
+
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
96
|
+
return { canAccess: true, message: "" };
|
|
97
|
+
}), true);
|
|
98
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
99
|
+
server = app.listen(8080);
|
|
100
|
+
const response = await page.goto("http://localhost:8080");
|
|
101
|
+
if (response?.status() != 200) {
|
|
102
|
+
throw new Error(`Should return 200 status and it returns ${response?.status()}`);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
describe("declines access when canAccess returns false", async () => {
|
|
106
|
+
const app = new koa_1.default();
|
|
107
|
+
const router = new router_1.default();
|
|
108
|
+
before(async () => {
|
|
109
|
+
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
110
|
+
return { canAccess: false, message: "" };
|
|
111
|
+
}), true);
|
|
112
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
113
|
+
});
|
|
114
|
+
beforeEach(async () => {
|
|
115
|
+
server = app.listen(8080);
|
|
116
|
+
});
|
|
117
|
+
it("prevents the form from rendering", async () => {
|
|
118
|
+
const response = await page.goto("http://localhost:8080");
|
|
119
|
+
if (response?.status() != 403) {
|
|
120
|
+
throw new Error(`Should return 403 status and it returns ${response?.status()}`);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
it("does not allow submitting of the form through axios", async () => {
|
|
124
|
+
await axios_1.default.post("http://localhost:8080", {
|
|
125
|
+
text: "sample",
|
|
126
|
+
}, {
|
|
127
|
+
validateStatus: (status) => {
|
|
128
|
+
if (status == 403)
|
|
129
|
+
return true;
|
|
130
|
+
return false;
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
it("passes the context to canAccess (false case)", async () => {
|
|
136
|
+
const app = new koa_1.default();
|
|
137
|
+
const router = new router_1.default();
|
|
138
|
+
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
139
|
+
return ctx.$context && ctx.$context.user_id
|
|
140
|
+
? { canAccess: true, message: "" }
|
|
141
|
+
: { canAccess: false, message: "" };
|
|
142
|
+
}), true);
|
|
143
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
144
|
+
server = app.listen(8080);
|
|
145
|
+
const response = await page.goto("http://localhost:8080");
|
|
146
|
+
if (response?.status() != 403) {
|
|
147
|
+
throw new Error(`Should return 403 status and it returns ${response?.status()}`);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
it("passes the context to canAccess (true case)", async () => {
|
|
151
|
+
const app = new koa_1.default();
|
|
152
|
+
const router = new router_1.default();
|
|
153
|
+
router.use(async (ctx, next) => {
|
|
154
|
+
ctx.$context = {
|
|
155
|
+
user_id: "miguel",
|
|
156
|
+
};
|
|
157
|
+
await next();
|
|
158
|
+
});
|
|
159
|
+
mount_1.mount(router, "/", form_factory(async (ctx) => {
|
|
160
|
+
return ctx.$context && ctx.$context.user_id
|
|
161
|
+
? { canAccess: true, message: "" }
|
|
162
|
+
: { canAccess: false, message: "" };
|
|
163
|
+
}), true);
|
|
164
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
165
|
+
server = app.listen(8080);
|
|
166
|
+
const response = await page.goto("http://localhost:8080");
|
|
167
|
+
if (response?.status() != 200) {
|
|
168
|
+
throw new Error(`Should return 200 status and it returns ${response?.status()}`);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe("validation e2e", async () => {
|
|
173
|
+
describe("validation message", async () => {
|
|
174
|
+
let server;
|
|
175
|
+
before(async () => {
|
|
176
|
+
const app = new koa_1.default();
|
|
177
|
+
const router = new router_1.default();
|
|
178
|
+
mount_1.mount(router, "/", new (class extends index_1.Form {
|
|
179
|
+
constructor() {
|
|
180
|
+
super(...arguments);
|
|
181
|
+
this.fields = fields;
|
|
182
|
+
this.submitButtonText = "Submit";
|
|
183
|
+
this.controls = [
|
|
184
|
+
new index_1.Controls.SimpleInput(fields.text, {
|
|
185
|
+
label: "This is a test:",
|
|
186
|
+
type: "password",
|
|
187
|
+
}),
|
|
188
|
+
];
|
|
189
|
+
}
|
|
190
|
+
async onSubmit() {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
async validateValues(ctx, data) {
|
|
194
|
+
if (data.text === "incorrect")
|
|
195
|
+
return {
|
|
196
|
+
valid: false,
|
|
197
|
+
error: "Incorrect input",
|
|
198
|
+
};
|
|
199
|
+
return { valid: true, error: "" };
|
|
200
|
+
}
|
|
201
|
+
})(), true);
|
|
202
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
203
|
+
server = app.listen(8080);
|
|
204
|
+
await page.goto("http://localhost:8080");
|
|
205
|
+
});
|
|
206
|
+
after(async () => {
|
|
207
|
+
server.close();
|
|
208
|
+
});
|
|
209
|
+
it("shows up when incorrect input is given", async () => {
|
|
210
|
+
await page.getByPlaceholder("password").click();
|
|
211
|
+
await page.getByPlaceholder("password").fill("incorrect");
|
|
212
|
+
await page.getByRole("button", { name: "Submit" }).click();
|
|
213
|
+
if (!(await locator_is_visible_1.locator_is_visible(page.getByText("Incorrect input"))))
|
|
214
|
+
throw new Error("validation message doens't show up when input is incorrect");
|
|
215
|
+
});
|
|
216
|
+
it("doesn't show when correct input is given", async () => {
|
|
217
|
+
await page.getByPlaceholder("password").click();
|
|
218
|
+
await page.getByPlaceholder("password").fill("correct");
|
|
219
|
+
await page.getByRole("button", { name: "Submit" }).click();
|
|
220
|
+
await utils_1.assertThrowsAsync(async () => {
|
|
221
|
+
return page.getByText("Incorrect input").click({ timeout: 500 });
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe("field specific validation message", async () => {
|
|
226
|
+
let server;
|
|
227
|
+
before(async () => {
|
|
228
|
+
const app = new koa_1.default();
|
|
229
|
+
const router = new router_1.default();
|
|
230
|
+
const fields = {
|
|
231
|
+
text: new index_1.Fields.EmailField(true),
|
|
232
|
+
};
|
|
233
|
+
mount_1.mount(router, "/", new (class extends index_1.Form {
|
|
234
|
+
constructor() {
|
|
235
|
+
super(...arguments);
|
|
236
|
+
this.fields = fields;
|
|
237
|
+
this.submitButtonText = "Submit";
|
|
238
|
+
this.controls = [
|
|
239
|
+
new index_1.Controls.SimpleInput(fields.text, {
|
|
240
|
+
label: "This is a test:",
|
|
241
|
+
type: "text",
|
|
242
|
+
}),
|
|
243
|
+
];
|
|
244
|
+
}
|
|
245
|
+
async onSubmit() {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
})(), true);
|
|
249
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
250
|
+
server = app.listen(8080);
|
|
251
|
+
await page.goto("http://localhost:8080");
|
|
252
|
+
});
|
|
253
|
+
after(async () => {
|
|
254
|
+
server.close();
|
|
255
|
+
});
|
|
256
|
+
it("shows up when incorrect input is given", async () => {
|
|
257
|
+
await page.getByPlaceholder("text").click();
|
|
258
|
+
await page.getByPlaceholder("text").fill("notanemail");
|
|
259
|
+
await page.getByRole("button", { name: "Submit" }).click();
|
|
260
|
+
await page.getByText("Please enter a proper email address").click();
|
|
261
|
+
});
|
|
262
|
+
it("doesn't show up when correct input is given", async () => {
|
|
263
|
+
await page.getByPlaceholder("text").click();
|
|
264
|
+
await page.getByPlaceholder("text").fill("yes@an.email");
|
|
265
|
+
await page.getByRole("button", { name: "Submit" }).click();
|
|
266
|
+
utils_1.assertThrowsAsync(async () => {
|
|
267
|
+
return page
|
|
268
|
+
.getByText("Please enter a proper email address")
|
|
269
|
+
.click({ timeout: 500 });
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=form.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.test.js","sourceRoot":"","sources":["../../src/forms/form.test.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiC;AACjC,kDAA0B;AAC1B,8CAAuC;AAEvC,oCAA4E;AAC5E,oCAAiC;AACjC,yEAAsE;AACtE,8DAAsD;AACtD,0CAAmD;AAEnD,MAAM,MAAM,GAAG;IACd,IAAI,EAAE,IAAI,cAAM,CAAC,eAAe,CAAC,IAAI,CAAC;CACtC,CAAC;AAEF,SAAgB,YAAY,CAAC,YAAqC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAM,SAAQ,YAAyB;QAAvC;;YACnB,WAAM,GAAG,MAAM,CAAC;YAChB,qBAAgB,GAAG,QAAQ,CAAC;YAC5B,aAAQ,GAAG;gBACV,IAAI,gBAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE;oBACrC,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,UAAU;iBAChB,CAAC;aACF,CAAC;QAKH,CAAC;QAHA,KAAK,CAAC,QAAQ;YACb,OAAO;QACR,CAAC;KACD,CAAC,EAAE,CAAC;IACL,IAAI,YAAY;QAAE,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;IAClD,OAAO,MAAM,CAAC;AACf,CAAC;AAjBD,oCAiBC;AAED,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IAC1B,IAAI,IAAU,CAAC;IAEf,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,MAAM,4BAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAClC,IAAI,MAAiC,CAAC;QAEtC,MAAM,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;YAE5B,aAAK,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;YACzC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACxE,MAAM,yBAAiB,CAAC,KAAK,IAAI,EAAE;gBAClC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACxE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,SAAS,GAAG,MAAM,eAAK,CAAC,IAAI,CACjC,uBAAuB,EACvB;gBACC,IAAI,EAAE,EAAE;aACR,EACD;gBACC,cAAc,EAAE,CAAC,MAAc,EAAE,EAAE;oBAClC,IAAI,MAAM,IAAI,GAAG;wBAAE,OAAO,IAAI,CAAC;oBAC/B,OAAO,KAAK,CAAC;gBACd,CAAC;aACD,CACD,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;gBACxD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;aACnF;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QACtC,IAAI,MAAiC,CAAC;QAEtC,SAAS,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;YAE5B,aAAK,CACJ,MAAM,EACN,GAAG,EACH,YAAY,CACX,KAAK,EAAE,GAAgB,EAAoD,EAAE;gBAC5E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzC,CAAC,CACD,EACD,IAAI,CACJ,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1D,IAAI,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;aACjF;QACF,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;YAE5B,MAAM,CAAC,KAAK,IAAI,EAAE;gBACjB,aAAK,CACJ,MAAM,EACN,GAAG,EACH,YAAY,CACX,KAAK,EACJ,GAAgB,EACmC,EAAE;oBACrD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBAC1C,CAAC,CACD,EACD,IAAI,CACJ,CAAC;gBACF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,KAAK,IAAI,EAAE;gBACrB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBAC1D,IAAI,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE;oBAC9B,MAAM,IAAI,KAAK,CACd,2CAA2C,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC/D,CAAC;iBACF;YACF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,eAAK,CAAC,IAAI,CACf,uBAAuB,EACvB;oBACC,IAAI,EAAE,QAAQ;iBACd,EACD;oBACC,cAAc,EAAE,CAAC,MAAc,EAAE,EAAE;wBAClC,IAAI,MAAM,IAAI,GAAG;4BAAE,OAAO,IAAI,CAAC;wBAC/B,OAAO,KAAK,CAAC;oBACd,CAAC;iBACD,CACD,CAAC;YACH,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;YAE5B,aAAK,CACJ,MAAM,EACN,GAAG,EACH,YAAY,CACX,KAAK,EAAE,GAAgB,EAAoD,EAAE;gBAC5E,OAAO,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO;oBAC1C,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;oBAClC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACtC,CAAC,CACD,EACD,IAAI,CACJ,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1D,IAAI,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;aACjF;QACF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;YAE5B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAgB,EAAE,IAAS,EAAE,EAAE;gBAChD,GAAG,CAAC,QAAQ,GAAG;oBACd,OAAO,EAAE,QAAQ;iBACV,CAAC;gBACT,MAAM,IAAI,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YACH,aAAK,CACJ,MAAM,EACN,GAAG,EACH,YAAY,CACX,KAAK,EAAE,GAAgB,EAAoD,EAAE;gBAC5E,OAAO,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO;oBAC1C,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;oBAClC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACtC,CAAC,CACD,EACD,IAAI,CACJ,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1D,IAAI,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;aACjF;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QACrC,QAAQ,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YACzC,IAAI,MAAiC,CAAC;YAEtC,MAAM,CAAC,KAAK,IAAI,EAAE;gBACjB,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;gBAE5B,aAAK,CACJ,MAAM,EACN,GAAG,EACH,IAAI,CAAC,KAAM,SAAQ,YAAyB;oBAAvC;;wBACJ,WAAM,GAAG,MAAM,CAAC;wBAChB,qBAAgB,GAAG,QAAQ,CAAC;wBAC5B,aAAQ,GAAG;4BACV,IAAI,gBAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE;gCACrC,KAAK,EAAE,iBAAiB;gCACxB,IAAI,EAAE,UAAU;6BAChB,CAAC;yBACF,CAAC;oBAiBH,CAAC;oBAfA,KAAK,CAAC,QAAQ;wBACb,OAAO;oBACR,CAAC;oBAED,KAAK,CAAC,cAAc,CACnB,GAAgB,EAChB,IAAmC;wBAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;4BAC5B,OAAO;gCACN,KAAK,EAAE,KAAK;gCACZ,KAAK,EAAE,iBAAiB;6BACxB,CAAC;wBACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;oBACnC,CAAC;iBACD,CAAC,EAAE,EACJ,IAAI,CACJ,CAAC;gBAEF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;gBACtD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1D,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC3D,IAAI,CAAC,CAAC,MAAM,uCAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACjE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC3D,MAAM,yBAAiB,CAAC,KAAK,IAAI,EAAE;oBAClC,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClE,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACxD,IAAI,MAAiC,CAAC;YAEtC,MAAM,CAAC,KAAK,IAAI,EAAE;gBACjB,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG;oBACd,IAAI,EAAE,IAAI,cAAM,CAAC,UAAU,CAAC,IAAI,CAAC;iBACjC,CAAC;gBAEF,aAAK,CACJ,MAAM,EACN,GAAG,EACH,IAAI,CAAC,KAAM,SAAQ,YAAyB;oBAAvC;;wBACJ,WAAM,GAAG,MAAM,CAAC;wBAChB,qBAAgB,GAAG,QAAQ,CAAC;wBAC5B,aAAQ,GAAG;4BACV,IAAI,gBAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE;gCACrC,KAAK,EAAE,iBAAiB;gCACxB,IAAI,EAAE,MAAM;6BACZ,CAAC;yBACF,CAAC;oBAKH,CAAC;oBAHA,KAAK,CAAC,QAAQ;wBACb,OAAO;oBACR,CAAC;iBACD,CAAC,EAAE,EACJ,IAAI,CACJ,CAAC;gBAEF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;gBACtD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC3D,MAAM,IAAI,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;YACrE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACzD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC3D,yBAAiB,CAAC,KAAK,IAAI,EAAE;oBAC5B,OAAO,IAAI;yBACT,SAAS,CAAC,qCAAqC,CAAC;yBAChD,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/lib/forms/multiform.js
CHANGED
|
@@ -73,7 +73,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
73
73
|
}, show_field_errors);
|
|
74
74
|
}
|
|
75
75
|
async getSubformRawValues(ctx, sub_form_name) {
|
|
76
|
-
const result = Object.fromEntries(Object.entries(this.extractRawValues(ctx))
|
|
76
|
+
const result = Object.fromEntries(Object.entries(await this.extractRawValues(ctx))
|
|
77
77
|
.filter(([key]) => key.startsWith(sub_form_name + FIELD_PREFIX_SEPARATOR))
|
|
78
78
|
.map(([key, value]) => [
|
|
79
79
|
key.slice((sub_form_name + FIELD_PREFIX_SEPARATOR).length),
|
|
@@ -91,7 +91,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
91
91
|
id="${this.name}"
|
|
92
92
|
novalidate
|
|
93
93
|
${
|
|
94
|
-
/* novalidate is here because all the subforms are
|
|
94
|
+
/* novalidate is here because all the subforms are actually one form and errors in one will prevent submitting all of the forms */ ""}
|
|
95
95
|
method="POST"
|
|
96
96
|
></form>
|
|
97
97
|
${this.getSubformsToRender(ctx).map(([form_name]) => {
|
|
@@ -149,6 +149,15 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
|
|
|
149
149
|
});
|
|
150
150
|
for (const [key, form] of Object.entries(this.forms)) {
|
|
151
151
|
router.post(path + (path.endsWith("/") ? "" : "/") + key, async (ctx) => {
|
|
152
|
+
const result = await form.canAccess(ctx);
|
|
153
|
+
if (!result.canAccess) {
|
|
154
|
+
ctx.body = this.renderError(ctx, {
|
|
155
|
+
type: "access",
|
|
156
|
+
message: result.message,
|
|
157
|
+
});
|
|
158
|
+
ctx.status = 403;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
152
161
|
const reaction = await form.handlePost(ctx);
|
|
153
162
|
if (reaction.action == "stay") {
|
|
154
163
|
ctx.status = 422;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiform.js","sourceRoot":"","sources":["../../src/forms/multiform.ts"],"names":[],"mappings":";;;AACA,2DAAyD;AAEzD,2CAAyD;AAEzD,yEAA4E;AAC5E,0CAAwC;AAExC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC,MAAa,SAAU,SAAQ,2CAAmB;IAAlD;;QACC,aAAQ,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"multiform.js","sourceRoot":"","sources":["../../src/forms/multiform.ts"],"names":[],"mappings":"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"}
|