@sealcode/sealgen 0.7.8 → 0.7.10

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/index.d.ts CHANGED
@@ -19,3 +19,4 @@ export * from "./utils/translate";
19
19
  export * as sanitize from "./sanitize";
20
20
  export * from "./forms/multiform";
21
21
  export * as Components from "./components/components";
22
+ export * from "./mount";
@@ -0,0 +1,4 @@
1
+ /// <reference types="koa__router" />
2
+ import Router from "@koa/router";
3
+ import { Mountable } from "./page/mountable";
4
+ export declare function mount(router: Router, url: string, mountable: Mountable): void;
@@ -59,41 +59,14 @@ async function generateRoutes() {
59
59
  })));
60
60
  const routes_content = `// DO NOT EDIT! This file is generated automaticaly with npm run generate-routes
61
61
 
62
- import Koa, { Context } from "koa";
63
62
  import Router from "@koa/router";
64
- import { Middlewares } from "sealious";
65
- import { Mountable } from "@sealcode/sealgen";
63
+ import { mount } from "@sealcode/sealgen";
66
64
  import * as URLs from "./urls"
67
65
 
68
66
  ${files
69
67
  .map(({ actionName, fullpath }) => `import { default as ${actionName} } from "${import_path_1.importPath(target_locreq.resolve("src/back/routes/routes.ts"), fullpath)}";`)
70
68
  .join("\n")}
71
69
 
72
- async function handleHtmlPromise(ctx: Context, next: Koa.Next) {
73
- await next();
74
- if (ctx.body instanceof Promise) {
75
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
76
- ctx.body = await ctx.body;
77
- }
78
- ctx.set("content-type", "text/html;charset=utf-8");
79
- }
80
-
81
- function mount(router: Router, URL: string, mountable: Mountable) {
82
- router.use(
83
- URL,
84
- Middlewares.extractContext(),
85
- Middlewares.parseBody(),
86
- handleHtmlPromise
87
- );
88
- mountable.init();
89
- mountable.mount(router, URL);
90
- // to automatically add trailing slashes:
91
- router.get(URL.slice(0, -1), (ctx) => {
92
- ctx.redirect(ctx.originalUrl + "/");
93
- });
94
- router.use(URL, (ctx) => ctx.set("content-type", "text/html;charset=utf-8"));
95
- }
96
-
97
70
  export default function mountAutoRoutes(router: Router) {
98
71
  ${files
99
72
  .map(({ actionName }) => ` mount(router, URLs.${actionName}URL, ${actionName});`)
@@ -1 +1 @@
1
- {"version":3,"file":"generate-routes.js","sourceRoot":"","sources":["../src/generate-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-routes.js","sourceRoot":"","sources":["../src/generate-routes.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -35,4 +35,5 @@ __exportStar(require("./utils/translate"), exports);
35
35
  exports.sanitize = __importStar(require("./sanitize"));
36
36
  __exportStar(require("./forms/multiform"), exports);
37
37
  exports.Components = __importStar(require("./components/components"));
38
+ __exportStar(require("./mount"), exports);
38
39
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAWA,sEAAsD;AACtD,+DAA+C;AAC/C,mDAAiC;AACjC,8CAA4B;AAC5B,+CAA6B;AAC7B,sDAAoC;AACpC,gDAA8B;AAC9B,8CAA4B;AAC5B,oDAAkC;AAClC,uDAAuC;AACvC,oDAAkC;AAClC,sEAAsD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAWA,sEAAsD;AACtD,+DAA+C;AAC/C,mDAAiC;AACjC,8CAA4B;AAC5B,+CAA6B;AAC7B,sDAAoC;AACpC,gDAA8B;AAC9B,8CAA4B;AAC5B,oDAAkC;AAClC,uDAAuC;AACvC,oDAAkC;AAClC,sEAAsD;AACtD,0CAAwB"}
@@ -11,7 +11,7 @@ function makeHiddenInputs(ctx, fields, values, fields_to_skip) {
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) => sanitize_1.attribute(JSON.stringify(r.raw) || ""))}"
15
15
  />`)}`;
16
16
  }
17
17
  exports.makeHiddenInputs = makeHiddenInputs;
@@ -1 +1 @@
1
- {"version":3,"file":"make-hidden-inputs.js","sourceRoot":"","sources":["../src/make-hidden-inputs.ts"],"names":[],"mappings":";;;AACA,2CAAyD;AAGzD,yCAAuC;AAEvC,SAAgB,gBAAgB,CAC/B,GAAY,EACZ,MAAiC,EACjC,MAAqC,EACrC,cAAwB;IAExB,OAAO,uBAAU,CAAA,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAChD,GAAG,CACH,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,uBAAU,CAAA,UAAU,CAAC;;YAE9B,GAAG;aACF,KAAK;SACZ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;SACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAC7C,CACH,EAAE,CAAC;AACN,CAAC;AAjBD,4CAiBC"}
1
+ {"version":3,"file":"make-hidden-inputs.js","sourceRoot":"","sources":["../src/make-hidden-inputs.ts"],"names":[],"mappings":";;;AACA,2CAAyD;AAGzD,yCAAuC;AAEvC,SAAgB,gBAAgB,CAC/B,GAAY,EACZ,MAAiC,EACjC,MAAqC,EACrC,cAAwB;IAExB,OAAO,uBAAU,CAAA,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAChD,GAAG,CACH,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,uBAAU,CAAA,UAAU,CAAC;;YAE9B,GAAG;aACF,KAAK;SACZ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;SACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;MACnD,CACH,EAAE,CAAC;AACN,CAAC;AAjBD,4CAiBC"}
package/lib/mount.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mount = void 0;
4
+ const sealious_1 = require("sealious");
5
+ async function handleHtmlPromise(ctx, next) {
6
+ await next();
7
+ if (ctx.body instanceof Promise) {
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
9
+ ctx.body = await ctx.body;
10
+ }
11
+ ctx.set("content-type", "text/html;charset=utf-8");
12
+ }
13
+ function mount(router, url, mountable) {
14
+ router.use(url, sealious_1.Middlewares.extractContext(), sealious_1.Middlewares.parseBody(), handleHtmlPromise);
15
+ mountable.init();
16
+ mountable.mount(router, url);
17
+ // to automatically add trailing slashes:
18
+ router.get(url.slice(0, -1), (ctx) => {
19
+ const url2 = new URL(url);
20
+ url2.pathname += "/";
21
+ ctx.redirect(url2.toString());
22
+ });
23
+ router.use(url, (ctx) => ctx.set("content-type", "text/html;charset=utf-8"));
24
+ }
25
+ exports.mount = mount;
26
+ //# sourceMappingURL=mount.js.map
@@ -0,0 +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,CAAC,MAAc,EAAE,GAAW,EAAE,SAAoB;IACtE,MAAM,CAAC,GAAG,CACT,GAAG,EACH,sBAAW,CAAC,cAAc,EAAE,EAC5B,sBAAW,CAAC,SAAS,EAAE,EACvB,iBAAiB,CACjB,CAAC;IACF,SAAS,CAAC,IAAI,EAAE,CAAC;IACjB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,yCAAyC;IACzC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACvB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAClD,CAAC;AACH,CAAC;AAlBD,sBAkBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sealcode/sealgen",
3
- "version": "0.7.8",
3
+ "version": "0.7.10",
4
4
  "description": "Module to automate adding routes and collections to a sealious application",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -18,6 +18,7 @@
18
18
  "devDependencies": {
19
19
  "@types/koa__router": "^8.0.4",
20
20
  "@types/mocha": "^9.0.0",
21
+ "@types/node": "^18.11.4",
21
22
  "@types/prettier": "^2.7.0",
22
23
  "@types/prompts": "^2.0.14",
23
24
  "@typescript-eslint/eslint-plugin": "^4.29.3",
@@ -53,10 +53,8 @@ export async function generateRoutes(): Promise<void> {
53
53
 
54
54
  const routes_content = `// DO NOT EDIT! This file is generated automaticaly with npm run generate-routes
55
55
 
56
- import Koa, { Context } from "koa";
57
56
  import Router from "@koa/router";
58
- import { Middlewares } from "sealious";
59
- import { Mountable } from "@sealcode/sealgen";
57
+ import { mount } from "@sealcode/sealgen";
60
58
  import * as URLs from "./urls"
61
59
 
62
60
  ${files
@@ -69,31 +67,6 @@ ${files
69
67
  )
70
68
  .join("\n")}
71
69
 
72
- async function handleHtmlPromise(ctx: Context, next: Koa.Next) {
73
- await next();
74
- if (ctx.body instanceof Promise) {
75
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
76
- ctx.body = await ctx.body;
77
- }
78
- ctx.set("content-type", "text/html;charset=utf-8");
79
- }
80
-
81
- function mount(router: Router, URL: string, mountable: Mountable) {
82
- router.use(
83
- URL,
84
- Middlewares.extractContext(),
85
- Middlewares.parseBody(),
86
- handleHtmlPromise
87
- );
88
- mountable.init();
89
- mountable.mount(router, URL);
90
- // to automatically add trailing slashes:
91
- router.get(URL.slice(0, -1), (ctx) => {
92
- ctx.redirect(ctx.originalUrl + "/");
93
- });
94
- router.use(URL, (ctx) => ctx.set("content-type", "text/html;charset=utf-8"));
95
- }
96
-
97
70
  export default function mountAutoRoutes(router: Router) {
98
71
  ${files
99
72
  .map(
package/src/index.ts CHANGED
@@ -21,3 +21,4 @@ export * from "./utils/translate";
21
21
  export * as sanitize from "./sanitize";
22
22
  export * from "./forms/multiform";
23
23
  export * as Components from "./components/components";
24
+ export * from "./mount";
@@ -18,7 +18,7 @@ export function makeHiddenInputs(
18
18
  name="${key}"
19
19
  value="${field
20
20
  .getValue(ctx, values)
21
- .then((r) => attribute(JSON.stringify(r.raw)))}"
21
+ .then((r) => attribute(JSON.stringify(r.raw) || ""))}"
22
22
  />`
23
23
  )}`;
24
24
  }
package/src/mount.ts ADDED
@@ -0,0 +1,33 @@
1
+ import Router from "@koa/router";
2
+ import Koa, { Context } from "koa";
3
+ import { Middlewares } from "sealious";
4
+ import { Mountable } from "./page/mountable";
5
+
6
+ async function handleHtmlPromise(ctx: Context, next: Koa.Next) {
7
+ await next();
8
+ if (ctx.body instanceof Promise) {
9
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
10
+ ctx.body = await ctx.body;
11
+ }
12
+ ctx.set("content-type", "text/html;charset=utf-8");
13
+ }
14
+
15
+ export function mount(router: Router, url: string, mountable: Mountable): void {
16
+ router.use(
17
+ url,
18
+ Middlewares.extractContext(),
19
+ Middlewares.parseBody(),
20
+ handleHtmlPromise
21
+ );
22
+ mountable.init();
23
+ mountable.mount(router, url);
24
+ // to automatically add trailing slashes:
25
+ router.get(url.slice(0, -1), (ctx) => {
26
+ const url2 = new URL(url);
27
+ url2.pathname += "/";
28
+ ctx.redirect(url2.toString());
29
+ });
30
+ router.use(url, (ctx) =>
31
+ ctx.set("content-type", "text/html;charset=utf-8")
32
+ );
33
+ }