@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.
Files changed (111) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.mocharc.js +10 -0
  3. package/.nycrc +6 -0
  4. package/.prettierrc +20 -13
  5. package/@types/add-route.d.ts +3 -1
  6. package/@types/build.d.ts +3 -1
  7. package/@types/forms/fields/boolean.test.d.ts +1 -0
  8. package/@types/forms/fields/email.test.d.ts +1 -0
  9. package/@types/forms/fields/enum-multiple.test.d.ts +1 -0
  10. package/@types/forms/fields/enum.test.d.ts +1 -0
  11. package/@types/forms/fields/number.test.d.ts +1 -0
  12. package/@types/forms/fields/pick-from-list.test.d.ts +1 -0
  13. package/@types/forms/fields/regexp.test.d.ts +1 -0
  14. package/@types/forms/form.test.d.ts +6 -0
  15. package/@types/forms/multiform.test.d.ts +1 -0
  16. package/@types/mount.d.ts +1 -1
  17. package/@types/page/mountable-with-fields.d.ts +1 -1
  18. package/@types/test_utils/locator_is_visible.d.ts +2 -0
  19. package/@types/utils/assert-throws.d.ts +1 -0
  20. package/@types/utils/browser-creator.d.ts +1 -0
  21. package/@types/utils/utils.d.ts +1 -0
  22. package/lib/add-route.js +3 -3
  23. package/lib/add-route.js.map +1 -1
  24. package/lib/add-route.test.js +55 -0
  25. package/lib/add-route.test.js.map +1 -0
  26. package/lib/build.js +3 -2
  27. package/lib/build.js.map +1 -1
  28. package/lib/cli.js +1 -1
  29. package/lib/cli.js.map +1 -1
  30. package/lib/example.test.js +4 -0
  31. package/lib/example.test.js.map +1 -0
  32. package/lib/forms/fields/boolean.test.js +37 -0
  33. package/lib/forms/fields/boolean.test.js.map +1 -0
  34. package/lib/forms/fields/email.test.js +25 -0
  35. package/lib/forms/fields/email.test.js.map +1 -0
  36. package/lib/forms/fields/enum-multiple.test.js +32 -0
  37. package/lib/forms/fields/enum-multiple.test.js.map +1 -0
  38. package/lib/forms/fields/enum.test.js +26 -0
  39. package/lib/forms/fields/enum.test.js.map +1 -0
  40. package/lib/forms/fields/number.js +0 -1
  41. package/lib/forms/fields/number.js.map +1 -1
  42. package/lib/forms/fields/number.test.js +35 -0
  43. package/lib/forms/fields/number.test.js.map +1 -0
  44. package/lib/forms/fields/pick-from-list.test.js +22 -0
  45. package/lib/forms/fields/pick-from-list.test.js.map +1 -0
  46. package/lib/forms/fields/regexp.test.js +26 -0
  47. package/lib/forms/fields/regexp.test.js.map +1 -0
  48. package/lib/forms/form.test.js +275 -0
  49. package/lib/forms/form.test.js.map +1 -0
  50. package/lib/forms/multiform.js +11 -2
  51. package/lib/forms/multiform.js.map +1 -1
  52. package/lib/forms/multiform.test.js +431 -0
  53. package/lib/forms/multiform.test.js.map +1 -0
  54. package/lib/make-env.js +1 -1
  55. package/lib/mount.js +38 -3
  56. package/lib/mount.js.map +1 -1
  57. package/lib/test_utils/locator_is_visible.js +15 -0
  58. package/lib/test_utils/locator_is_visible.js.map +1 -0
  59. package/lib/utils/assert-throws.js +24 -0
  60. package/lib/utils/assert-throws.js.map +1 -0
  61. package/lib/utils/browser-creator.js +14 -0
  62. package/lib/utils/browser-creator.js.map +1 -0
  63. package/lib/utils/exec.js.map +1 -1
  64. package/lib/utils/question.js.map +1 -1
  65. package/lib/utils/utils.js +3 -1
  66. package/lib/utils/utils.js.map +1 -1
  67. package/mocha_root_hooks.js +6 -0
  68. package/package.json +16 -8
  69. package/src/add-route.test.ts +58 -0
  70. package/src/add-route.ts +6 -5
  71. package/src/build.ts +6 -3
  72. package/src/cli.ts +2 -2
  73. package/src/forms/fields/boolean.test.ts +36 -0
  74. package/src/forms/fields/email.test.ts +24 -0
  75. package/src/forms/fields/enum-multiple.test.ts +31 -0
  76. package/src/forms/fields/enum.test.ts +25 -0
  77. package/src/forms/fields/number.test.ts +34 -0
  78. package/src/forms/fields/number.ts +0 -1
  79. package/src/forms/fields/pick-from-list.test.ts +19 -0
  80. package/src/forms/fields/regexp.test.ts +25 -0
  81. package/src/forms/form.test.ts +351 -0
  82. package/src/forms/multiform.test.ts +540 -0
  83. package/src/forms/multiform.ts +12 -2
  84. package/src/make-env.ts +1 -1
  85. package/src/mount.ts +43 -9
  86. package/src/page/mountable-with-fields.ts +1 -1
  87. package/src/test_utils/locator_is_visible.ts +17 -0
  88. package/src/utils/assert-throws.ts +18 -0
  89. package/src/utils/browser-creator.js +10 -0
  90. package/src/utils/exec.ts +8 -2
  91. package/src/utils/question.ts +4 -1
  92. package/src/utils/utils.ts +1 -0
  93. package/tsconfig.json +2 -3
  94. package/.nyc_output/1c5dff80-7861-427a-b1bb-d0686211f098.json +0 -1
  95. package/.nyc_output/a38a0d08-1f1f-4973-b5e2-efc434c1593d.json +0 -1
  96. package/.nyc_output/processinfo/1c5dff80-7861-427a-b1bb-d0686211f098.json +0 -1
  97. package/.nyc_output/processinfo/a38a0d08-1f1f-4973-b5e2-efc434c1593d.json +0 -1
  98. package/.nyc_output/processinfo/index.json +0 -1
  99. package/.xunit +0 -3
  100. package/@types/forms/fields/files-multiple.d.ts +0 -12
  101. package/coverage/clover.xml +0 -79
  102. package/lib/forms/fields/files-multiple.js +0 -18
  103. package/lib/forms/fields/files-multiple.js.map +0 -1
  104. package/lib/sealgen-url.js +0 -1
  105. package/lib/sealgen-url.js.map +0 -1
  106. package/lib/tests/manual/multiform.js +0 -95
  107. package/lib/tests/manual/multiform.js.map +0 -1
  108. package/src/tests/manual/multiform.ts +0 -112
  109. package/test.js +0 -68
  110. /package/@types/{tests/manual/multiform.d.ts → add-route.test.d.ts} +0 -0
  111. /package/@types/{sealgen-url.d.ts → example.test.d.ts} +0 -0
@@ -0,0 +1,431 @@
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
+ const router_1 = __importDefault(require("@koa/router"));
7
+ const koa_1 = __importDefault(require("koa"));
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const test_1 = require("@playwright/test");
10
+ const tempstream_1 = require("tempstream");
11
+ const __1 = require("..");
12
+ const mount_1 = require("../mount");
13
+ const multiform_1 = require("./multiform");
14
+ const utils_1 = require("../utils/utils");
15
+ const form_test_1 = require("./form.test");
16
+ const browser_creator_1 = require("../utils/browser-creator");
17
+ const fields1 = {
18
+ email: new __1.Fields.SimpleFormField(true),
19
+ };
20
+ const form1 = new (class extends __1.Form {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.defaultSuccessMessage = "Form1 done!";
24
+ this.controls = [new __1.Controls.FormHeader("form1"), new __1.Controls.SimpleInput(fields1.email)];
25
+ this.fields = fields1;
26
+ }
27
+ onSubmit() {
28
+ return;
29
+ }
30
+ })();
31
+ const fields2 = {
32
+ name: new __1.Fields.SimpleFormField(true),
33
+ };
34
+ const form2 = new (class extends __1.Form {
35
+ constructor() {
36
+ super(...arguments);
37
+ this.defaultSuccessMessage = "Form2 done!";
38
+ this.controls = [new __1.Controls.FormHeader("form2"), new __1.Controls.SimpleInput(fields2.name)];
39
+ this.fields = fields2;
40
+ }
41
+ onSubmit() {
42
+ return;
43
+ }
44
+ })();
45
+ function multiform_factory(canAccessFun1, canAccessFun2) {
46
+ return new (class extends multiform_1.Multiform {
47
+ constructor() {
48
+ super(...arguments);
49
+ this.name = "multiform_test";
50
+ this.forms = {
51
+ form1: form_test_1.form_factory(canAccessFun1),
52
+ form2: form_test_1.form_factory(canAccessFun2),
53
+ };
54
+ }
55
+ async render(...args) {
56
+ return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
57
+ <html>
58
+ <head>
59
+ <title>Multiform Test - Sealgen</title>
60
+ <script type="module">
61
+ import hotwiredTurbo from "https://cdn.skypack.dev/pin/@hotwired/turbo@v7.0.0-9XNv1By6uiqRlBzQLO2d/mode=imports,min/optimized/@hotwired/turbo.js";
62
+ </script>
63
+ </head>
64
+ <body>
65
+ ${super.render(...args)}
66
+ </body>
67
+ </html>`;
68
+ }
69
+ })();
70
+ }
71
+ async function tests(js_enabled) {
72
+ let page;
73
+ before(async () => {
74
+ const browser = await browser_creator_1.getBrowser();
75
+ const context = await browser.newContext({
76
+ javaScriptEnabled: js_enabled,
77
+ });
78
+ page = await context.newPage();
79
+ await page.goto("http://localhost:8080");
80
+ await page.getByLabel("email").click();
81
+ await page.getByLabel("email").fill("sample1");
82
+ await page.getByLabel("name").click();
83
+ await page.getByLabel("name").fill("sample2");
84
+ await page.locator("#multiform_test_form1_submit").click();
85
+ });
86
+ it("checking whether only one submit handler is run", async () => {
87
+ await page.getByText("Form1 done!").click();
88
+ await utils_1.assertThrowsAsync(async () => {
89
+ return page.getByText("Form2 done!").click({ timeout: 500 });
90
+ });
91
+ });
92
+ it("checking whether the input in the not submitted form prevails", async () => {
93
+ await test_1.expect(page.getByLabel("name")).toHaveValue("sample2");
94
+ });
95
+ }
96
+ async function general_form_validation_e2e_tests(js_enabled) {
97
+ let browser;
98
+ let page;
99
+ browser = await browser_creator_1.getBrowser();
100
+ const context = await browser.newContext({
101
+ javaScriptEnabled: js_enabled,
102
+ });
103
+ page = await context.newPage();
104
+ await page.goto("http://localhost:8080");
105
+ await page.getByPlaceholder("text").click();
106
+ await page.getByPlaceholder("text").fill("incorrect");
107
+ await page.getByPlaceholder("password").click();
108
+ await page.getByPlaceholder("password").fill("test");
109
+ await page.locator("#multiform_test_form2_submit").click();
110
+ utils_1.assertThrowsAsync(async () => {
111
+ page.getByText("Incorrect input").click({ timeout: 500 });
112
+ });
113
+ }
114
+ async function individual_field_validation_e2e_tests(javaScriptEnabled) {
115
+ let browser;
116
+ let page;
117
+ before(async () => {
118
+ browser = await browser_creator_1.getBrowser();
119
+ const context = await browser.newContext({
120
+ javaScriptEnabled,
121
+ });
122
+ page = await context.newPage();
123
+ await page.goto("http://localhost:8080");
124
+ });
125
+ it("validation message shows when incorrect input is given", async () => {
126
+ await page.getByPlaceholder("text").click();
127
+ await page.getByPlaceholder("text").fill("notanemail");
128
+ await page.locator("#multiform_test_form1_submit").click();
129
+ await page.getByText("Please enter a proper email address").click();
130
+ });
131
+ it("validation message doesn't show when correct input is given", async () => {
132
+ await page.getByPlaceholder("text").click();
133
+ await page.getByPlaceholder("text").fill("yes@an.email");
134
+ await page.locator("#multiform_test_form1_submit").click();
135
+ utils_1.assertThrowsAsync(async () => {
136
+ return page.getByText("Please enter a proper email address").click({ timeout: 500 });
137
+ });
138
+ });
139
+ }
140
+ describe("multiform test", () => {
141
+ describe("basic tests", async () => {
142
+ let server;
143
+ before(async () => {
144
+ const app = new koa_1.default();
145
+ const router = new router_1.default();
146
+ mount_1.mount(router, "/", new (class extends multiform_1.Multiform {
147
+ constructor() {
148
+ super(...arguments);
149
+ this.name = "multiform_test";
150
+ this.forms = { form1, form2 };
151
+ }
152
+ async render(ctx, messages, prerenderedForms, show_field_errors = true) {
153
+ return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
154
+ <html>
155
+ <head>
156
+ <title>Multiform Test - Sealgen</title>
157
+ <script type="module">
158
+ import hotwiredTurbo from "https://cdn.skypack.dev/pin/@hotwired/turbo@v7.0.0-9XNv1By6uiqRlBzQLO2d/mode=imports,min/optimized/@hotwired/turbo.js";
159
+ </script>
160
+ </head>
161
+ <body>
162
+ ${super.render(ctx, messages, prerenderedForms, show_field_errors)}
163
+ </body>
164
+ </html>`;
165
+ }
166
+ })(), true);
167
+ app.use(router.routes()).use(router.allowedMethods());
168
+ server = app.listen(8080);
169
+ });
170
+ after(() => {
171
+ server.close();
172
+ });
173
+ describe("turbolinks + js enabled", async () => tests(true));
174
+ describe("turbolinks + js disabled", async () => tests(false));
175
+ });
176
+ describe("canAccess", async () => {
177
+ let page;
178
+ let server;
179
+ describe("allow access to both forms when both canAccess return true", async () => {
180
+ before(async () => {
181
+ const app = new koa_1.default();
182
+ const router = new router_1.default();
183
+ mount_1.mount(router, "/", multiform_factory(async (ctx) => {
184
+ return { canAccess: true, message: "" };
185
+ }, async (ctx) => {
186
+ return { canAccess: true, message: "" };
187
+ }), true);
188
+ app.use(router.routes()).use(router.allowedMethods());
189
+ server = app.listen(8080);
190
+ const browser = await browser_creator_1.getBrowser();
191
+ const context = await browser.newContext();
192
+ page = await context.newPage();
193
+ });
194
+ after(async () => {
195
+ server.close();
196
+ });
197
+ it("check wether it renders", async () => {
198
+ const response = await page.goto("http://localhost:8080");
199
+ if (response?.status() != 200) {
200
+ throw new Error(`Should return 200 status and it returns ${response?.status()}`);
201
+ }
202
+ await page.locator("#form1").getByText("This is a test:").click();
203
+ await page.locator("#form2").getByText("This is a test:").click();
204
+ });
205
+ it("check wether you can submit through http (axios)", async () => {
206
+ await axios_1.default.post("http://localhost:8080/form2", {
207
+ form2__text: "pass",
208
+ }, {
209
+ validateStatus: (status) => {
210
+ if (status == 422)
211
+ return true;
212
+ return false;
213
+ },
214
+ });
215
+ });
216
+ });
217
+ describe("deny access to both forms", async () => {
218
+ before(async () => {
219
+ const app = new koa_1.default();
220
+ const router = new router_1.default();
221
+ mount_1.mount(router, "/", multiform_factory(async (ctx) => {
222
+ return { canAccess: false, message: "" };
223
+ }, async (ctx) => {
224
+ return { canAccess: false, message: "" };
225
+ }), true);
226
+ app.use(router.routes()).use(router.allowedMethods());
227
+ server = app.listen(8080);
228
+ const browser = await browser_creator_1.getBrowser();
229
+ const context = await browser.newContext();
230
+ page = await context.newPage();
231
+ });
232
+ after(async () => {
233
+ server.close();
234
+ });
235
+ it("check wether forms didnt render", async () => {
236
+ await page.goto("http://localhost:8080");
237
+ await utils_1.assertThrowsAsync(async () => {
238
+ return page
239
+ .locator("#form1")
240
+ .getByText("This is a test:")
241
+ .click({ timeout: 300 });
242
+ });
243
+ });
244
+ it("check wether it's possible to submit through http", async () => {
245
+ await axios_1.default.post("http://localhost:8080/form2", {
246
+ form2__text: "pass",
247
+ }, {
248
+ validateStatus: (status) => {
249
+ if (status == 403)
250
+ return true;
251
+ return false;
252
+ },
253
+ });
254
+ });
255
+ });
256
+ describe("allow access to one form, deny to the other", async () => {
257
+ before(async () => {
258
+ const app = new koa_1.default();
259
+ const router = new router_1.default();
260
+ mount_1.mount(router, "/", multiform_factory(async (ctx) => {
261
+ return { canAccess: true, message: "" };
262
+ }, async (ctx) => {
263
+ return { canAccess: false, message: "" };
264
+ }), true);
265
+ app.use(router.routes()).use(router.allowedMethods());
266
+ server = app.listen(8080);
267
+ const browser = await browser_creator_1.getBrowser();
268
+ const context = await browser.newContext({});
269
+ page = await context.newPage();
270
+ });
271
+ after(async () => {
272
+ server.close();
273
+ });
274
+ it("check wether form1 renders", async () => {
275
+ await page.goto("http://localhost:8080");
276
+ await page.locator("#form1").getByText("This is a test:").click({ timeout: 300 });
277
+ });
278
+ it("check wether it's possible to submit to form1 through http", async () => {
279
+ await axios_1.default.post("http://localhost:8080/form1", {
280
+ form1__text: "pass",
281
+ }, {
282
+ validateStatus: (status) => {
283
+ if (status == 422)
284
+ return true;
285
+ return false;
286
+ },
287
+ });
288
+ });
289
+ it("check wether form2 does not render", async () => {
290
+ await page.goto("http://localhost:8080");
291
+ await utils_1.assertThrowsAsync(async () => {
292
+ return page
293
+ .locator("#form2")
294
+ .getByText("This is a test:")
295
+ .click({ timeout: 300 });
296
+ });
297
+ });
298
+ it("check wether it's possible to submit to form2 through http", async () => {
299
+ await axios_1.default.post("http://localhost:8080/form2", {
300
+ form2__text: "pass",
301
+ }, {
302
+ validateStatus: (status) => {
303
+ if (status == 403)
304
+ return true;
305
+ return false;
306
+ },
307
+ });
308
+ });
309
+ });
310
+ });
311
+ describe("validation e2e", async () => {
312
+ describe("basic tests", async () => {
313
+ let server;
314
+ before(async () => {
315
+ const app = new koa_1.default();
316
+ const router = new router_1.default();
317
+ mount_1.mount(router, "/", new (class extends multiform_1.Multiform {
318
+ constructor() {
319
+ super(...arguments);
320
+ this.name = "multiform_test";
321
+ this.forms = {
322
+ form1: new (class extends __1.Form {
323
+ constructor() {
324
+ super(...arguments);
325
+ this.fields = fields1;
326
+ this.submitButtonText = "Submit";
327
+ this.controls = [
328
+ new __1.Controls.SimpleInput(fields1.email, {
329
+ label: "This is a test:",
330
+ type: "text",
331
+ }),
332
+ ];
333
+ }
334
+ async onSubmit() {
335
+ return;
336
+ }
337
+ async validateValues(ctx, data) {
338
+ if (data.email === "incorrect")
339
+ return {
340
+ valid: false,
341
+ error: "Incorrect input",
342
+ };
343
+ return { valid: true, error: "" };
344
+ }
345
+ })(),
346
+ form2: form_test_1.form_factory(),
347
+ };
348
+ }
349
+ async render(...args) {
350
+ return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
351
+ <html>
352
+ <head>
353
+ <title>Multiform Test - Sealgen</title>
354
+ <script type="module">
355
+ import hotwiredTurbo from "https://cdn.skypack.dev/pin/@hotwired/turbo@v7.0.0-9XNv1By6uiqRlBzQLO2d/mode=imports,min/optimized/@hotwired/turbo.js";
356
+ </script>
357
+ </head>
358
+ <body>
359
+ ${super.render(...args)}
360
+ </body>
361
+ </html>`;
362
+ }
363
+ })(), true);
364
+ app.use(router.routes()).use(router.allowedMethods());
365
+ server = app.listen(8080);
366
+ });
367
+ after(async () => {
368
+ server.close();
369
+ });
370
+ it("js enabled", async () => general_form_validation_e2e_tests(true));
371
+ it("js disabled", async () => general_form_validation_e2e_tests(false));
372
+ });
373
+ describe("field specific validation", async () => {
374
+ let server;
375
+ before(async () => {
376
+ const app = new koa_1.default();
377
+ const router = new router_1.default();
378
+ const fields = {
379
+ text: new __1.Fields.EmailField(true),
380
+ };
381
+ mount_1.mount(router, "/", new (class extends multiform_1.Multiform {
382
+ constructor() {
383
+ super(...arguments);
384
+ this.name = "multiform_test";
385
+ this.forms = {
386
+ form1: new (class extends __1.Form {
387
+ constructor() {
388
+ super(...arguments);
389
+ this.fields = fields;
390
+ this.submitButtonText = "Submit";
391
+ this.controls = [
392
+ new __1.Controls.SimpleInput(fields.text, {
393
+ label: "This is a test:",
394
+ type: "text",
395
+ }),
396
+ ];
397
+ }
398
+ async onSubmit() {
399
+ return;
400
+ }
401
+ })(),
402
+ form2: form_test_1.form_factory(),
403
+ };
404
+ }
405
+ async render(...args) {
406
+ return tempstream_1.tempstream /* HTML */ `<!DOCTYPE html>
407
+ <html>
408
+ <head>
409
+ <title>Multiform Test - Sealgen</title>
410
+ <script type="module">
411
+ import hotwiredTurbo from "https://cdn.skypack.dev/pin/@hotwired/turbo@v7.0.0-9XNv1By6uiqRlBzQLO2d/mode=imports,min/optimized/@hotwired/turbo.js";
412
+ </script>
413
+ </head>
414
+ <body>
415
+ ${super.render(...args)}
416
+ </body>
417
+ </html>`;
418
+ }
419
+ })(), true);
420
+ app.use(router.routes()).use(router.allowedMethods());
421
+ server = app.listen(8080);
422
+ });
423
+ after(async () => {
424
+ server.close();
425
+ });
426
+ describe("js enabled", async () => individual_field_validation_e2e_tests(true));
427
+ describe("js disabled", async () => individual_field_validation_e2e_tests(false));
428
+ });
429
+ });
430
+ });
431
+ //# sourceMappingURL=multiform.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiform.test.js","sourceRoot":"","sources":["../../src/forms/multiform.test.ts"],"names":[],"mappings":"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"}
package/lib/make-env.js CHANGED
@@ -11,7 +11,7 @@ const target_locreq = 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}
14
- GROUD_ID=${gid}
14
+ GROUP_ID=${gid}
15
15
  `;
16
16
  const path = target_locreq.resolve(".env");
17
17
  await fs_1.promises.writeFile(path, content);
package/lib/mount.js CHANGED
@@ -10,16 +10,51 @@ async function handleHtmlPromise(ctx, next) {
10
10
  }
11
11
  ctx.set("content-type", "text/html;charset=utf-8");
12
12
  }
13
- function mount(router, url, mountable) {
13
+ function mount(router, url, mountable, use_dummy_app = false) {
14
14
  const raw_url = typeof url === "string" ? url : url.rawURL;
15
- router.use(raw_url, sealious_1.Middlewares.extractContext(), sealious_1.Middlewares.parseBody(), handleHtmlPromise);
15
+ const args = use_dummy_app
16
+ ? [
17
+ async (ctx, next) => {
18
+ // this dummy is a temporary solution it's ilustrating the ways that
19
+ // sealgen is coupled with sealious. Definitely room for improvement in this
20
+ // regard
21
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
22
+ ctx.$app = {
23
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
24
+ Logger: new Proxy({}, {
25
+ get: (_target, prop) => {
26
+ if (prop === "info") {
27
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
28
+ return () => { };
29
+ }
30
+ else {
31
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
32
+ return () => { };
33
+ }
34
+ },
35
+ }),
36
+ getString: (x) => x,
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ };
39
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
40
+ await next();
41
+ },
42
+ sealious_1.Middlewares.parseBody(),
43
+ handleHtmlPromise,
44
+ ]
45
+ : [
46
+ sealious_1.Middlewares.extractContext(),
47
+ sealious_1.Middlewares.parseBody(),
48
+ handleHtmlPromise,
49
+ ];
50
+ router.use(raw_url, ...args);
16
51
  mountable.init();
17
52
  // to automatically add trailing slashes:
18
53
  router.get(raw_url.slice(0, -1), async (ctx, next) => {
19
54
  const url2 = ctx.URL;
20
55
  if (!url2.pathname.endsWith("/")) {
21
56
  url2.pathname += "/";
22
- ctx.redirect(url2.pathname);
57
+ ctx.redirect(url2.href);
23
58
  }
24
59
  await next();
25
60
  });
package/lib/mount.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":";;;AAEA,uCAAuC;AAGvC,KAAK,UAAU,iBAAiB,CAAC,GAAY,EAAE,IAAc;IAC5D,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,GAAG,CAAC,IAAI,YAAY,OAAO,EAAE;QAChC,mEAAmE;QACnE,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC;KAC1B;IACD,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,KAAK,CACpB,MAAc,EACd,GAAgC,EAChC,SAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3D,MAAM,CAAC,GAAG,CACT,OAAO,EACP,sBAAW,CAAC,cAAc,EAAE,EAC5B,sBAAW,CAAC,SAAS,EAAE,EACvB,iBAAiB,CACjB,CAAC;IACF,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjB,yCAAyC;IACzC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC5B;QACD,MAAM,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC7B,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;YACjB,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,OAAO,IAAI,WAAW,CAAC;YAChD,OAAO;SACP;QACD,MAAM,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AApCD,sBAoCC"}
1
+ {"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.locator_is_visible = void 0;
4
+ const sleep_1 = require("../utils/sleep");
5
+ async function locator_is_visible(locator, timeout = 500) {
6
+ let exists = false;
7
+ while (timeout > 0 && !exists) {
8
+ await sleep_1.sleep(50);
9
+ timeout -= 50;
10
+ exists = await locator.isVisible();
11
+ }
12
+ return exists;
13
+ }
14
+ exports.locator_is_visible = locator_is_visible;
15
+ //# sourceMappingURL=locator_is_visible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator_is_visible.js","sourceRoot":"","sources":["../../src/test_utils/locator_is_visible.ts"],"names":[],"mappings":";;;AAEA,0CAAuC;AAEhC,KAAK,UAAU,kBAAkB,CACvC,OAAgB,EAChB,OAAO,GAAG,GAAG;IAEb,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,OAAO,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;QAC9B,MAAM,aAAK,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,IAAI,EAAE,CAAC;QACd,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;KACnC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAZD,gDAYC"}
@@ -0,0 +1,24 @@
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.assertThrowsAsync = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ async function assertThrowsAsync(fn, error_handler) {
9
+ let error = null;
10
+ try {
11
+ await fn();
12
+ }
13
+ catch (e) {
14
+ error = e;
15
+ }
16
+ finally {
17
+ assert_1.default.notStrictEqual(error, null, "It didn't throw");
18
+ if (error_handler) {
19
+ await error_handler(error);
20
+ }
21
+ }
22
+ }
23
+ exports.assertThrowsAsync = assertThrowsAsync;
24
+ //# sourceMappingURL=assert-throws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-throws.js","sourceRoot":"","sources":["../../src/utils/assert-throws.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAErB,KAAK,UAAU,iBAAiB,CACtC,EAA0B,EAC1B,aAAoD;IAEpD,IAAI,KAAK,GAAY,IAAI,CAAC;IAC1B,IAAI;QACH,MAAM,EAAE,EAAE,CAAC;KACX;IAAC,OAAO,CAAU,EAAE;QACpB,KAAK,GAAG,CAAC,CAAC;KACV;YAAS;QACT,gBAAM,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACtD,IAAI,aAAa,EAAE;YAClB,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;SAC3B;KACD;AACF,CAAC;AAfD,8CAeC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBrowser = void 0;
4
+ const playwright_1 = require("playwright");
5
+ let browser_promise = null;
6
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
7
+ async function getBrowser() {
8
+ if (!browser_promise)
9
+ browser_promise = playwright_1.firefox.launch();
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
11
+ return browser_promise;
12
+ }
13
+ exports.getBrowser = getBrowser;
14
+ //# sourceMappingURL=browser-creator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-creator.js","sourceRoot":"","sources":["../../src/utils/browser-creator.js"],"names":[],"mappings":";;;AAAA,2CAAqC;AAErC,IAAI,eAAe,GAAG,IAAI,CAAC;AAE3B,6EAA6E;AACtE,KAAK,UAAU,UAAU;IAC/B,IAAI,CAAC,eAAe;QAAE,eAAe,GAAG,oBAAO,CAAC,MAAM,EAAE,CAAC;IACzD,+DAA+D;IAC/D,OAAO,eAAe,CAAC;AACxB,CAAC;AAJD,gCAIC"}
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iDAAsC;AAE/B,KAAK,UAAU,IAAI,CACzB,OAAe,EACf,IAAc;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,qBAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YAChC,IAAI,QAAQ,KAAK,CAAC,EAAE;gBACnB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;aACtC;iBAAM;gBACN,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtB,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;aACrC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AApBD,oBAoBC"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iDAAsC;AAE/B,KAAK,UAAU,IAAI,CACzB,OAAe,EACf,IAAc;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,qBAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,EAAE,CAChB,MAAM,EACN,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAC7C,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,CAChB,MAAM,EACN,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAC7C,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YAChC,IAAI,QAAQ,KAAK,CAAC,EAAE;gBACnB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;aACtC;iBAAM;gBACN,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtB,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;aACrC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AA1BD,oBA0BC"}
@@ -1 +1 @@
1
- {"version":3,"file":"question.js","sourceRoot":"","sources":["../../src/utils/question.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAEpC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,SAAsC;IAClF,MAAM,EAAE,GAAG,0BAAe,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC1C,4CAA4C;QAC5C,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;YACvB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACzB;KACD;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AACf,CAAC;AAjBD,4BAiBC"}
1
+ {"version":3,"file":"question.js","sourceRoot":"","sources":["../../src/utils/question.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAEpC,KAAK,UAAU,QAAQ,CAC7B,IAAY,EACZ,SAAsC;IAEtC,MAAM,EAAE,GAAG,0BAAe,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC1C,4CAA4C;QAC5C,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;YACvB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACzB;KACD;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AACf,CAAC;AApBD,4BAoBC"}
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.walkDir = exports.listCollections = exports.curryImportPath = exports.importPath = exports.exec = exports.UrlWithNewParams = exports.naturalNumbers = exports.sleep = void 0;
13
+ exports.assertThrowsAsync = exports.walkDir = exports.listCollections = exports.curryImportPath = exports.importPath = exports.exec = exports.UrlWithNewParams = exports.naturalNumbers = exports.sleep = void 0;
14
14
  var sleep_1 = require("./sleep");
15
15
  Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return sleep_1.sleep; } });
16
16
  var natural_numbers_1 = require("./natural-numbers");
@@ -26,6 +26,8 @@ var list_collections_1 = require("./list-collections");
26
26
  Object.defineProperty(exports, "listCollections", { enumerable: true, get: function () { return list_collections_1.listCollections; } });
27
27
  var walk_1 = require("./walk");
28
28
  Object.defineProperty(exports, "walkDir", { enumerable: true, get: function () { return walk_1.walkDir; } });
29
+ var assert_throws_1 = require("./assert-throws");
30
+ Object.defineProperty(exports, "assertThrowsAsync", { enumerable: true, get: function () { return assert_throws_1.assertThrowsAsync; } });
29
31
  __exportStar(require("./make-slug"), exports);
30
32
  __exportStar(require("./render-attributes"), exports);
31
33
  __exportStar(require("./format-external-url"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAGA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,6CAA4D;AAAnD,yGAAA,UAAU,OAAA;AAAE,8GAAA,eAAe,OAAA;AACpC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,8CAA4B;AAC5B,sDAAoC;AACpC,wDAAsC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAGA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,6CAA4D;AAAnD,yGAAA,UAAU,OAAA;AAAE,8GAAA,eAAe,OAAA;AACpC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAC1B,8CAA4B;AAC5B,sDAAoC;AACpC,wDAAsC"}
@@ -0,0 +1,6 @@
1
+ exports.mochaHooks = {
2
+ async afterAll() {
3
+ let browser = await require("./src/utils/browser-creator").getBrowser();
4
+ browser.close();
5
+ },
6
+ };