@mojojs/core 1.5.0 → 1.6.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/README.md CHANGED
@@ -20,26 +20,21 @@ If you want to stay up to date on the
20
20
 
21
21
  ## Features
22
22
 
23
+ * 3x faster than Express.js.
23
24
  * A **real-time web framework**, allowing you to easily grow single file prototypes into well-structured MVC web
24
25
  applications.
25
- * 3x faster than Express.js.
26
26
  * Powerful out of the box with RESTful routes, WebSockets, plugins, commands, logging, templates, content negotiation,
27
27
  session management, form and JSON validation, testing framework, static file server, cluster mode, CGI detection,
28
28
  first class Unicode support and much more for you to discover.
29
-
30
29
  * A powerful **web development toolkit**, that you can use for all kinds of applications, independently of the web
31
30
  framework.
32
31
  * High performance HTTP and WebSocket client/server implementation with support for HTTPS/WSS, cookies, redirects,
33
32
  urlencoded/multi-part forms, file uploads, JSON/YAML, HTML/XML, mocking, API testing, HTTP/SOCKS proxies, UNIX
34
33
  domain sockets and gzip compression.
35
34
  * HTML/XML parser with CSS selector support.
36
-
37
35
  * No frontend framework, mojo.js is for the **backend**.
38
-
39
36
  * Written in [TypeScript](https://www.typescriptlang.org), with very clean `class` and `async`/`await` based APIs.
40
-
41
37
  * Very few dependencies, to avoid supply chain attacks and allow for "Perl-grade" **long term support**.
42
-
43
38
  * Fresh code based upon decades of experience developing [Mojolicious](https://mojolicious.org) and
44
39
  [Catalyst](http://catalyst.perl.org), free and open source.
45
40
 
@@ -47,10 +47,12 @@ export default async function createFullAppCommand(app, args) {
47
47
  await util.cliCreateFile('tsconfig.json', JSON.stringify(tsConfig, null, 2));
48
48
  await util.cliFixPackage({
49
49
  dependencies: { '@mojojs/core': `^${version}` },
50
- devDependencies: await devDependencies(/^(@types\/.+|tap|typescript)$/),
50
+ devDependencies: await devDependencies(/^(@types\/.+|nodemon|tap|typescript)$/),
51
51
  scripts: {
52
52
  build: 'npx tsc --build ./',
53
53
  'build:test': 'npm run build && npm test',
54
+ dev: 'npx nodemon lib/index.js server',
55
+ start: 'NODE_ENV=production node lib/index.js server -l http://*:8080',
54
56
  test: 'tap --no-coverage test/*.js'
55
57
  }
56
58
  });
@@ -65,8 +67,10 @@ export default async function createFullAppCommand(app, args) {
65
67
  await util.cliCreateFile('test/example.js', jsTest, { indexPath: '../index.js' });
66
68
  await util.cliFixPackage({
67
69
  dependencies: { '@mojojs/core': `^${version}` },
68
- devDependencies: await devDependencies(/^tap$/),
70
+ devDependencies: await devDependencies(/^(nodemon|tap)$/),
69
71
  scripts: {
72
+ dev: 'npx nodemon index.js server',
73
+ start: 'NODE_ENV=production node index.js server -l http://*:8080',
70
74
  test: 'tap --no-coverage test/*.js'
71
75
  }
72
76
  });
@@ -139,7 +143,7 @@ const tmplView = `%% view.layout = 'default';
139
143
  <p>
140
144
  This page was generated from the template "views/example/welcome.html.tmpl" and the layout
141
145
  "views/layouts/default.html.tmpl", <a href="<%%= ctx.urlFor() %>">click here</a> to reload the page or
142
- <a href="<%%= ctx.urlForFile('/index.html') %>">here</a> to move forward to a static page.
146
+ <a href="<%%= ctx.urlForFile('index.html') %>">here</a> to move forward to a static page.
143
147
  </p>
144
148
  `;
145
149
  const staticFile = `<!DOCTYPE html>
@@ -1 +1 @@
1
- {"version":3,"file":"create-full-app.js","sourceRoot":"","sources":["../../src/cli/create-full-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-full-app.js","sourceRoot":"","sources":["../../src/cli/create-full-app.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mojojs/core",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Real-time web framework",
5
5
  "keywords": [
6
6
  "mojojs",
@@ -71,6 +71,7 @@
71
71
  "eslint-plugin-import": "^2.23.4",
72
72
  "eslint-plugin-node": "^11.1.0",
73
73
  "eslint-plugin-prettier": "^4.0.0",
74
+ "nodemon": "^2.0.20",
74
75
  "prettier": "^2.5.0",
75
76
  "tap": "^16.3.0",
76
77
  "typescript": "^4.7.0"
@@ -4,12 +4,12 @@
4
4
  <head>
5
5
  <title>Debug</title>
6
6
  %= ctx.faviconTag()
7
- %= ctx.scriptTag('/mojo/bootstrap/bootstrap.bundle.min.js')
8
- %= ctx.scriptTag('/mojo/highlight.js/highlight.pack.js')
9
- %= ctx.styleTag('/mojo/bootstrap/bootstrap.min.css')
10
- %= ctx.styleTag('/mojo/highlight.js/highlight-mojo-dark.css')
7
+ %= ctx.scriptTag('mojo/bootstrap/bootstrap.bundle.min.js')
8
+ %= ctx.scriptTag('mojo/highlight.js/highlight.pack.js')
9
+ %= ctx.styleTag('mojo/bootstrap/bootstrap.min.css')
10
+ %= ctx.styleTag('mojo/highlight.js/highlight-mojo-dark.css')
11
11
  %= ctx.styleTag('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css')
12
- %= ctx.styleTag('/mojo/mojo.css')
12
+ %= ctx.styleTag('mojo/mojo.css')
13
13
  <script>
14
14
  hljs.initHighlightingOnLoad();
15
15
  window.onload = function() {
@@ -26,8 +26,8 @@
26
26
  <div class="container-fluid">
27
27
  <a href="https://mojojs.org" id="mojobar-brand" class="navbar-brand">
28
28
  <picture>
29
- <img src="<%= ctx.urlForFile('/mojo/logo-white.png') %>"
30
- srcset="<%= ctx.urlForFile('/mojo/logo-white-2x.png') %> 2x">
29
+ <img src="<%= ctx.urlForFile('mojo/logo-white.png') %>"
30
+ srcset="<%= ctx.urlForFile('mojo/logo-white-2x.png') %> 2x">
31
31
  </picture>
32
32
  </a>
33
33
  <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent"
@@ -9,7 +9,7 @@
9
9
  background-color: #caecf6;
10
10
  }
11
11
  #raptor {
12
- background: url(<%= ctx.urlForFile('/mojo/failraptor.png') %>);
12
+ background: url(<%= ctx.urlForFile('mojo/failraptor.png') %>);
13
13
  height: 488px;
14
14
  left: 50%;
15
15
  margin-left: -371px;
@@ -17,7 +17,7 @@
17
17
  top: 60%;
18
18
  }
19
19
  #not-found {
20
- background: url(<%= ctx.urlForFile('/mojo/not-found.png') %>);
20
+ background: url(<%= ctx.urlForFile('mojo/not-found.png') %>);
21
21
  height: 62px;
22
22
  left: 50%;
23
23
  margin-left: -153px;
@@ -30,7 +30,7 @@
30
30
  </head>
31
31
  <body>
32
32
  <a href="<%= ctx.req.baseURL %>">
33
- <img src="<%= ctx.urlForFile('/mojo/no-raptor.png') %>" alt="Bye!" id="no-raptor">
33
+ <img src="<%= ctx.urlForFile('mojo/no-raptor.png') %>" alt="Bye!" id="no-raptor">
34
34
  </a>
35
35
  <div id="not-found"></div>
36
36
  </body>