@awesomeness-js/server 1.0.2 → 1.1.1
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 +61 -0
- package/build/build.js +7 -0
- package/build/postBuild.js +7 -0
- package/example-.awesomeness/componentLocations.js +15 -0
- package/example-.awesomeness/config.js +5 -21
- package/example-site/example.awesomenessjs.com/api/readme.md +1 -0
- package/example-site/example.awesomenessjs.com/components/example/index.js +3 -0
- package/example-site/example.awesomenessjs.com/components/notCommonExample/_.css +1 -0
- package/example-site/example.awesomenessjs.com/components/notCommonExample/index.js +3 -0
- package/example-site/example.awesomenessjs.com/pages/_md/_info.js +15 -0
- package/example-site/example.awesomenessjs.com/pages/_md/css/example.css +4 -0
- package/example-site/example.awesomenessjs.com/pages/_md/drafts/example.md +32 -0
- package/example-site/example.awesomenessjs.com/pages/_md/getBlogData.js +117 -0
- package/example-site/example.awesomenessjs.com/pages/_md/getData.js +36 -0
- package/example-site/example.awesomenessjs.com/pages/_md/js/callToAction.js +43 -0
- package/example-site/example.awesomenessjs.com/pages/_md/js/init.js +88 -0
- package/example-site/example.awesomenessjs.com/pages/_md/meta.template.md +33 -0
- package/example-site/example.awesomenessjs.com/pages/_md/pages/mission.md +345 -0
- package/example-site/example.awesomenessjs.com/pages/_template/_info.js +9 -0
- package/example-site/example.awesomenessjs.com/pages/_template/css/_.css +4 -0
- package/example-site/example.awesomenessjs.com/pages/_template/getData.js +6 -0
- package/example-site/example.awesomenessjs.com/pages/_template/js/init.js +3 -0
- package/example-site/example.awesomenessjs.com/pages/blog/_info.js +14 -0
- package/example-site/example.awesomenessjs.com/pages/blog/css/topics.css +17 -0
- package/example-site/example.awesomenessjs.com/pages/blog/getData.js +22 -0
- package/example-site/example.awesomenessjs.com/pages/blog/js/colors.js +159 -0
- package/example-site/example.awesomenessjs.com/pages/blog/js/init.js +242 -0
- package/example-site/example.awesomenessjs.com/pages/blog/js/tag.js +111 -0
- package/example-site/example.awesomenessjs.com/pages/examples/_info.js +9 -0
- package/example-site/example.awesomenessjs.com/pages/examples/css/footer.css +6 -0
- package/example-site/example.awesomenessjs.com/pages/examples/css/intro.css +67 -0
- package/example-site/example.awesomenessjs.com/pages/examples/css/nav.css +221 -0
- package/example-site/example.awesomenessjs.com/pages/examples/getData.js +8 -0
- package/example-site/example.awesomenessjs.com/pages/examples/js/init.js +15 -0
- package/example-site/example.awesomenessjs.com/pages/examples/js/updateState.js +14 -0
- package/example-site/example.awesomenessjs.com/pages/start/_info.js +11 -0
- package/example-site/example.awesomenessjs.com/pages/start/css/footer.css +6 -0
- package/example-site/example.awesomenessjs.com/pages/start/css/intro.css +67 -0
- package/example-site/example.awesomenessjs.com/pages/start/css/nav.css +221 -0
- package/example-site/example.awesomenessjs.com/pages/start/getData.js +8 -0
- package/example-site/example.awesomenessjs.com/pages/start/js/init.js +30 -0
- package/example-site/example.awesomenessjs.com/pages/start/js/updateState.js +14 -0
- package/example-site/example.awesomenessjs.com/public/images/awesomeness.webp +0 -0
- package/example-site/example.awesomenessjs.com/public/manifest.webmanifest.json +8 -0
- package/example-site/example.awesomenessjs.com/specialRoutes.js +14 -0
- package/index.js +105 -25
- package/package.json +5 -2
- package/{server → src}/applicationMap.js +1 -1
- package/{server → src}/awesomenessNormalizeRequest.js +24 -3
- package/{server → src}/componentDependencies.js +11 -5
- package/{config.js → src/config.js} +6 -1
- package/{server → src}/fetchPage.js +6 -6
- package/src/getConfig.js +3 -0
- package/src/init.js +3 -0
- package/{server → src}/koa/attachAwesomenessRequest.js +5 -6
- package/{server → src}/koa/cors.js +2 -4
- package/{server → src}/koa/errorHandler.js +3 -3
- package/{server → src}/koa/finalFormat.js +2 -5
- package/{server → src}/koa/jsonBodyParser.js +3 -3
- package/src/koa/routeRequest.js +334 -0
- package/{server → src}/koa/serverUp.js +2 -4
- package/{server → src}/koa/staticFiles.js +10 -11
- package/{server → src}/koa/timeout.js +3 -3
- package/{server → src}/pageInfo.js +6 -6
- package/{server → src}/reRoute.js +3 -2
- package/{server → src}/resolveRealCasePath.js +1 -1
- package/{start.js → src/start.js} +14 -13
- package/{server → src}/validateRequest.js +1 -1
- package/{server → src}/ws/handlers.js +4 -2
- package/{server → src}/ws/index.js +2 -2
- package/ui/README.md +438 -0
- package/ui/awesomeness-ui.instructions.md +156 -0
- package/ui/build.js +119 -0
- package/ui/commonComponent.test.js +27 -0
- package/ui/components/blogPost/all.css +371 -0
- package/ui/components/blogPost/headerImage.js +153 -0
- package/ui/components/blogPost/index.js +45 -0
- package/ui/components/blogPost/marked.js +74 -0
- package/ui/components/blogPost/md.js +73 -0
- package/ui/components/blogPost/parseAwesomeness.jQuery.js +47 -0
- package/ui/components/blogPost/readme.md +8 -0
- package/ui/components/colors/README.md +65 -0
- package/ui/components/colors/dynamic.css +1884 -0
- package/ui/components/colors/dynamic.css.js +135 -0
- package/ui/components/colors/dynamic.css.php +79 -0
- package/ui/components/colors/example.js +133 -0
- package/ui/components/colors/index.js +65 -0
- package/ui/components/colors/map.js +13 -0
- package/ui/components/colors/random.js +17 -0
- package/ui/components/colors/tailwind-colors.css +247 -0
- package/ui/components/insertIntoList/insertIntoList.jquery.js +150 -0
- package/ui/components/statusPage/index.css +120 -0
- package/ui/components/statusPage/index.js +39 -0
- package/ui/components/tag/category.js +8 -0
- package/ui/components/tag/index.js +33 -0
- package/ui/components/tag/list.js +42 -0
- package/ui/components/tag/map.js +64 -0
- package/ui/components/tag/tagMap.css +60 -0
- package/ui/components/tag/tags.css +20 -0
- package/ui/core/css/_normalize.css +57 -0
- package/ui/core/css/dynamic/flex.js +36 -0
- package/ui/core/css/dynamic/grid.js +185 -0
- package/ui/core/css/dynamic/shortcuts.js +48 -0
- package/ui/core/css/dynamic/spacing.js +61 -0
- package/ui/core/css/dynamic/text.js +80 -0
- package/ui/core/css/dynamic/width.js +75 -0
- package/ui/core/css/dynamic.js +40 -0
- package/ui/core/js/app/api.js +143 -0
- package/ui/core/js/app/init.js +88 -0
- package/ui/core/js/app/initDarkMode.js +26 -0
- package/ui/core/js/app/initialScroll.js +28 -0
- package/ui/core/js/app/meta/update/components.js +65 -0
- package/ui/core/js/app/meta/update/pages.js +86 -0
- package/ui/core/js/app/metaUpdates.js +10 -0
- package/ui/core/js/app/page.js +319 -0
- package/ui/core/js/app/resize.js +52 -0
- package/ui/core/js/app/state/back.js +16 -0
- package/ui/core/js/app/state/create.js +50 -0
- package/ui/core/js/app/state/get.js +5 -0
- package/ui/core/js/app/state/init.js +25 -0
- package/ui/core/js/app.js +41 -0
- package/ui/core/js/jquery-3.7.1.min.js +2 -0
- package/ui/core/public/app.css +1 -0
- package/ui/core/public/app.js +975 -0
- package/ui/core/public/favicon.ico +0 -0
- package/ui/core/public/index.html +40 -0
- package/server/koa/routeRequest.js +0 -286
- /package/{server/errors.js → errors.js} +0 -0
- /package/{server → src}/brotliJsonResponse.js +0 -0
- /package/{server → src}/checkAccess.js +0 -0
- /package/{server → src}/getMD.js +0 -0
- /package/{server → src}/specialPaths.js +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
.introPage{
|
|
2
|
+
background-image: url('/tools/images/awesomeness.webp');
|
|
3
|
+
background-repeat: no-repeat;
|
|
4
|
+
background-size: cover;
|
|
5
|
+
background-position: 50% 50%;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.landing-area {
|
|
9
|
+
overflow: auto;
|
|
10
|
+
position: relative;
|
|
11
|
+
width: 40%;
|
|
12
|
+
text-align: center;
|
|
13
|
+
color: #fff;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.app-size-xl .landing-area { width: 60%; }
|
|
17
|
+
.app-size-d .landing-area { width: 60%; }
|
|
18
|
+
.app-size-t .landing-area { width: 70%; }
|
|
19
|
+
.app-size-p .landing-area { width: 95%; }
|
|
20
|
+
|
|
21
|
+
.landing-area h1{
|
|
22
|
+
color: #fff;
|
|
23
|
+
text-transform: uppercase;
|
|
24
|
+
font-weight: 700;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.landing-area h2{
|
|
28
|
+
margin-bottom: 10px;
|
|
29
|
+
font-weight: 300;
|
|
30
|
+
font-size: 1.4em;
|
|
31
|
+
text-transform: capitalize;
|
|
32
|
+
color: #fff;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.landing-area button {
|
|
36
|
+
width: 46%;
|
|
37
|
+
margin: 2%;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.landing-area button i{
|
|
41
|
+
text-align: center;
|
|
42
|
+
font-size: 2em;
|
|
43
|
+
position: relative;
|
|
44
|
+
display: block;
|
|
45
|
+
width: 100%;
|
|
46
|
+
padding-bottom: 23px;
|
|
47
|
+
right:auto;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.landing-area .a-button {
|
|
51
|
+
background-color: #fff;
|
|
52
|
+
color: #13408d;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.landing-area .b-button {
|
|
56
|
+
background-color: #13408d;
|
|
57
|
+
color: #fff;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.divider{
|
|
61
|
+
width: 50%;
|
|
62
|
+
height: 1px;
|
|
63
|
+
display: block;
|
|
64
|
+
margin-left: 25%;
|
|
65
|
+
background-color: #fff;
|
|
66
|
+
margin: 19px 25%;
|
|
67
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
.main-nav {
|
|
2
|
+
background-color: #010816;
|
|
3
|
+
overflow: auto;
|
|
4
|
+
z-index: 3;
|
|
5
|
+
position: absolute;
|
|
6
|
+
width: 100%;
|
|
7
|
+
top: 62px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.main{
|
|
11
|
+
padding-top: 137px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.nav-container {
|
|
15
|
+
background-color: #010816;
|
|
16
|
+
color: #fff;
|
|
17
|
+
opacity: 1;
|
|
18
|
+
position: fixed;
|
|
19
|
+
right: 0;
|
|
20
|
+
top: -63px;
|
|
21
|
+
transition: all 420ms;
|
|
22
|
+
width: 100%;
|
|
23
|
+
z-index: 3;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.nav-container.showExtra{
|
|
27
|
+
top:0px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.nav-logo {
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
float: left;
|
|
33
|
+
font-size: 2em;
|
|
34
|
+
font-weight: 600;
|
|
35
|
+
height: 75px;
|
|
36
|
+
padding-top: 15px;
|
|
37
|
+
text-align: center;
|
|
38
|
+
width: 300px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.nav-list {
|
|
42
|
+
float: right;
|
|
43
|
+
height: 75px;
|
|
44
|
+
margin: 0px;
|
|
45
|
+
padding: 25px 45px 25px 0px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.app-size-p .nav-list,
|
|
49
|
+
.app-size-t .nav-list{
|
|
50
|
+
width: 100%;
|
|
51
|
+
height: inherit;
|
|
52
|
+
padding-top: 0px;
|
|
53
|
+
display: none;
|
|
54
|
+
}
|
|
55
|
+
.app-size-p .nav-list.active,
|
|
56
|
+
.app-size-t .nav-list.active{
|
|
57
|
+
display: block;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
.app-size-p .nav-list li,
|
|
62
|
+
.app-size-t .nav-list li{
|
|
63
|
+
width: 100%;
|
|
64
|
+
height: inherit;
|
|
65
|
+
text-align: right;
|
|
66
|
+
padding: 10px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
.nav-list li {
|
|
71
|
+
-webkit-touch-callout: none;
|
|
72
|
+
-webkit-user-select: none;
|
|
73
|
+
-khtml-user-select: none;
|
|
74
|
+
-moz-user-select: none;
|
|
75
|
+
-ms-user-select: none;
|
|
76
|
+
user-select: none;
|
|
77
|
+
border-bottom: solid 1px #00000000;
|
|
78
|
+
cursor: pointer;
|
|
79
|
+
display: block;
|
|
80
|
+
float: left;
|
|
81
|
+
font-size: 1.3em;
|
|
82
|
+
font-weight: 300;
|
|
83
|
+
margin-left: 30px;
|
|
84
|
+
padding-bottom: 3px;
|
|
85
|
+
transition: all 420ms;
|
|
86
|
+
position: relative;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.nav-list li:hover,
|
|
90
|
+
.nav-sub-list li:hover,
|
|
91
|
+
.nav-button:hover,
|
|
92
|
+
.nav-logo:hover{
|
|
93
|
+
color:#ffab55;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.app-size-xl .nav-list li.active,
|
|
97
|
+
.app-size-d .nav-list li.active{
|
|
98
|
+
border-bottom: solid 1px #0858e1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.app-size-t .nav-list li,
|
|
102
|
+
.app-size-p .nav-list li{
|
|
103
|
+
padding-right:45px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.nav-button {
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
float: right;
|
|
109
|
+
height: 75px;
|
|
110
|
+
padding: 19px 12px 19px 0px;
|
|
111
|
+
text-align: center;
|
|
112
|
+
width: 60px;
|
|
113
|
+
display: none;
|
|
114
|
+
font-size: 2.3em;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.app-size-p .nav-button,
|
|
118
|
+
.app-size-t .nav-button{
|
|
119
|
+
display: block;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
.nav-top {
|
|
124
|
+
position: absolute;
|
|
125
|
+
z-index: 3;
|
|
126
|
+
top: 0px;
|
|
127
|
+
width:100%;
|
|
128
|
+
display: block;
|
|
129
|
+
overflow: auto;
|
|
130
|
+
font-size: .85em;
|
|
131
|
+
padding: 13px 32px 13px 0px;
|
|
132
|
+
background-color: #0858e1;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.app-size-p .nav-top,
|
|
136
|
+
.app-size-p .nav-call-to-action {
|
|
137
|
+
padding-right: 15px;
|
|
138
|
+
}
|
|
139
|
+
.app-size-p .nav-action{
|
|
140
|
+
padding-left: 15px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
.nav-action{
|
|
145
|
+
float: right;
|
|
146
|
+
background-color: #d92c2c;
|
|
147
|
+
padding: 10px 40px 10px 25px;
|
|
148
|
+
position: relative;
|
|
149
|
+
cursor: pointer;
|
|
150
|
+
transition: all 420ms;
|
|
151
|
+
}
|
|
152
|
+
.nav-action:hover{
|
|
153
|
+
background-color:#053587;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.nav-action i {
|
|
157
|
+
font-size: 1em;
|
|
158
|
+
float: right;
|
|
159
|
+
position: absolute;
|
|
160
|
+
top: 12px;
|
|
161
|
+
right: 13px;
|
|
162
|
+
}
|
|
163
|
+
.nav-call-to-action{
|
|
164
|
+
float: right;
|
|
165
|
+
padding: 10px 25px 10px 0px;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.nav-sub-list{
|
|
169
|
+
transition: all 420ms;
|
|
170
|
+
display: block;
|
|
171
|
+
width: 100%;
|
|
172
|
+
overflow: auto;
|
|
173
|
+
background-color:#182a4d;
|
|
174
|
+
margin-bottom: 0px;
|
|
175
|
+
top: 0px;
|
|
176
|
+
position: absolute;
|
|
177
|
+
padding-right: 10px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.nav-sub-list li{
|
|
181
|
+
cursor: pointer;
|
|
182
|
+
z-index: 0;
|
|
183
|
+
transition: all 420ms;
|
|
184
|
+
display: inline-block;
|
|
185
|
+
overflow: auto;
|
|
186
|
+
background-color: #182a4d;
|
|
187
|
+
float: left;
|
|
188
|
+
padding: 20px 22px;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.nav-sub-list.active{
|
|
192
|
+
top: 120px;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.app-size-t .nav-sub-list,
|
|
196
|
+
.app-size-p .nav-sub-list{
|
|
197
|
+
top: -235px;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.app-size-t .nav-sub-list li,
|
|
201
|
+
.app-size-p .nav-sub-list li{
|
|
202
|
+
padding-right: 50px;
|
|
203
|
+
text-align: right;
|
|
204
|
+
width: 100%;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.app-size-p .nav-sub-list.active,
|
|
208
|
+
.app-size-t .nav-sub-list.active{
|
|
209
|
+
top: 415px;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.app-size-p .nav-list li i,
|
|
213
|
+
.app-size-t .nav-list li i {
|
|
214
|
+
position: absolute;
|
|
215
|
+
right: 4px;
|
|
216
|
+
top: 14px;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.nav-list li i {
|
|
220
|
+
position: relative;
|
|
221
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import ui from '#ui';
|
|
2
|
+
|
|
3
|
+
app.pages.start.init = function(data, options){
|
|
4
|
+
|
|
5
|
+
app.pages.start.updateState();
|
|
6
|
+
|
|
7
|
+
// create HTML first
|
|
8
|
+
// could be done in parts broken down in the scripts folder
|
|
9
|
+
var $body = $('body');
|
|
10
|
+
|
|
11
|
+
// good idea to keep everything #app
|
|
12
|
+
// css that gets updated dynamically will be in the body via the #css div
|
|
13
|
+
// so replacing the whole body is generally not good idea
|
|
14
|
+
var $app = $('<div id="app"></div>').appendTo($body);
|
|
15
|
+
|
|
16
|
+
// Do whatever you want
|
|
17
|
+
$(`<div style="padding-top: 40vh; text-align: center;">
|
|
18
|
+
<div class="text-xl">Awesomeness</div>
|
|
19
|
+
<div class="text-xs">Build something awesome</div>
|
|
20
|
+
</div>`)
|
|
21
|
+
.appendTo($app);
|
|
22
|
+
|
|
23
|
+
ui._example();
|
|
24
|
+
ui.notCommonExample();
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
window.dispatchEvent(new Event('resize'));
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
app.pages.start.updateState = function(){
|
|
2
|
+
|
|
3
|
+
// set initial
|
|
4
|
+
history.replaceState(0,'Awesomeness PWA', '/');
|
|
5
|
+
document.title = 'Awesomeness | Vanilla JS to build PWAs';
|
|
6
|
+
|
|
7
|
+
var startData = {};
|
|
8
|
+
|
|
9
|
+
startData.title = 'Awesomeness | Vanilla JS to build PWA';
|
|
10
|
+
startData.url = '/';
|
|
11
|
+
|
|
12
|
+
app.state.state[0] = startData;
|
|
13
|
+
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default [
|
|
2
|
+
{
|
|
3
|
+
pattern: '/blog/:tag',
|
|
4
|
+
handler: async (awesomenessRequest, params) => {
|
|
5
|
+
|
|
6
|
+
// test by returning json 200
|
|
7
|
+
awesomenessRequest.data.tag = params.tag;
|
|
8
|
+
awesomenessRequest.pageRoute = 'blog';
|
|
9
|
+
|
|
10
|
+
awesomenessRequest.pageInit = 'blog';
|
|
11
|
+
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
];
|
package/index.js
CHANGED
|
@@ -1,25 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
/**
|
|
2
|
+
* This file is auto-generated by the build script.
|
|
3
|
+
* It consolidates API functions for use in the application.
|
|
4
|
+
* Do not edit manually.
|
|
5
|
+
*/
|
|
6
|
+
import _applicationMap from './src/applicationMap.js';
|
|
7
|
+
import _awesomenessNormalizeRequest from './src/awesomenessNormalizeRequest.js';
|
|
8
|
+
import _brotliJsonResponse from './src/brotliJsonResponse.js';
|
|
9
|
+
import _checkAccess from './src/checkAccess.js';
|
|
10
|
+
import _componentDependencies from './src/componentDependencies.js';
|
|
11
|
+
import _config from './src/config.js';
|
|
12
|
+
import _fetchPage from './src/fetchPage.js';
|
|
13
|
+
import _getConfig from './src/getConfig.js';
|
|
14
|
+
import _getMD from './src/getMD.js';
|
|
15
|
+
import _init from './src/init.js';
|
|
16
|
+
import _koa_attachAwesomenessRequest from './src/koa/attachAwesomenessRequest.js';
|
|
17
|
+
import _koa_cors from './src/koa/cors.js';
|
|
18
|
+
import _koa_errorHandler from './src/koa/errorHandler.js';
|
|
19
|
+
import _koa_finalFormat from './src/koa/finalFormat.js';
|
|
20
|
+
import _koa_jsonBodyParser from './src/koa/jsonBodyParser.js';
|
|
21
|
+
import _koa_routeRequest from './src/koa/routeRequest.js';
|
|
22
|
+
import _koa_serverUp from './src/koa/serverUp.js';
|
|
23
|
+
import _koa_staticFiles from './src/koa/staticFiles.js';
|
|
24
|
+
import _koa_timeout from './src/koa/timeout.js';
|
|
25
|
+
import _pageInfo from './src/pageInfo.js';
|
|
26
|
+
import _reRoute from './src/reRoute.js';
|
|
27
|
+
import _resolveRealCasePath from './src/resolveRealCasePath.js';
|
|
28
|
+
import _specialPaths from './src/specialPaths.js';
|
|
29
|
+
import _start from './src/start.js';
|
|
30
|
+
import _validateRequest from './src/validateRequest.js';
|
|
31
|
+
import _ws_handlers from './src/ws/handlers.js';
|
|
32
|
+
import _ws_index from './src/ws/index.js';
|
|
33
|
+
|
|
34
|
+
export { _applicationMap as applicationMap };
|
|
35
|
+
export { _awesomenessNormalizeRequest as awesomenessNormalizeRequest };
|
|
36
|
+
export { _brotliJsonResponse as brotliJsonResponse };
|
|
37
|
+
export { _checkAccess as checkAccess };
|
|
38
|
+
export { _componentDependencies as componentDependencies };
|
|
39
|
+
export { _config as config };
|
|
40
|
+
export { _fetchPage as fetchPage };
|
|
41
|
+
export { _getConfig as getConfig };
|
|
42
|
+
export { _getMD as getMD };
|
|
43
|
+
export { _init as init };
|
|
44
|
+
export { _pageInfo as pageInfo };
|
|
45
|
+
export { _reRoute as reRoute };
|
|
46
|
+
export { _resolveRealCasePath as resolveRealCasePath };
|
|
47
|
+
export { _specialPaths as specialPaths };
|
|
48
|
+
export { _start as start };
|
|
49
|
+
export { _validateRequest as validateRequest };
|
|
50
|
+
|
|
51
|
+
export const koa = {
|
|
52
|
+
attachAwesomenessRequest: _koa_attachAwesomenessRequest,
|
|
53
|
+
cors: _koa_cors,
|
|
54
|
+
errorHandler: _koa_errorHandler,
|
|
55
|
+
finalFormat: _koa_finalFormat,
|
|
56
|
+
jsonBodyParser: _koa_jsonBodyParser,
|
|
57
|
+
routeRequest: _koa_routeRequest,
|
|
58
|
+
serverUp: _koa_serverUp,
|
|
59
|
+
staticFiles: _koa_staticFiles,
|
|
60
|
+
timeout: _koa_timeout
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const ws = {
|
|
64
|
+
handlers: _ws_handlers,
|
|
65
|
+
index: _ws_index
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
export default {
|
|
70
|
+
applicationMap: _applicationMap,
|
|
71
|
+
awesomenessNormalizeRequest: _awesomenessNormalizeRequest,
|
|
72
|
+
brotliJsonResponse: _brotliJsonResponse,
|
|
73
|
+
checkAccess: _checkAccess,
|
|
74
|
+
componentDependencies: _componentDependencies,
|
|
75
|
+
config: _config,
|
|
76
|
+
fetchPage: _fetchPage,
|
|
77
|
+
getConfig: _getConfig,
|
|
78
|
+
getMD: _getMD,
|
|
79
|
+
init: _init,
|
|
80
|
+
pageInfo: _pageInfo,
|
|
81
|
+
reRoute: _reRoute,
|
|
82
|
+
/**
|
|
83
|
+
* Case-insensitive real path resolver.
|
|
84
|
+
* Works correctly on Windows, macOS, and Linux/Docker.
|
|
85
|
+
*/
|
|
86
|
+
resolveRealCasePath: _resolveRealCasePath,
|
|
87
|
+
specialPaths: _specialPaths,
|
|
88
|
+
start: _start,
|
|
89
|
+
validateRequest: _validateRequest,
|
|
90
|
+
koa: {
|
|
91
|
+
attachAwesomenessRequest: _koa_attachAwesomenessRequest,
|
|
92
|
+
cors: _koa_cors,
|
|
93
|
+
errorHandler: _koa_errorHandler,
|
|
94
|
+
finalFormat: _koa_finalFormat,
|
|
95
|
+
jsonBodyParser: _koa_jsonBodyParser,
|
|
96
|
+
routeRequest: _koa_routeRequest,
|
|
97
|
+
serverUp: _koa_serverUp,
|
|
98
|
+
staticFiles: _koa_staticFiles,
|
|
99
|
+
timeout: _koa_timeout,
|
|
100
|
+
},
|
|
101
|
+
ws: {
|
|
102
|
+
handlers: _ws_handlers,
|
|
103
|
+
index: _ws_index,
|
|
104
|
+
},
|
|
105
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awesomeness-js/server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Awesomeness Multi-Site Server",
|
|
5
5
|
"author": "Scott Forte",
|
|
6
6
|
"type": "module",
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
"url": "git+https://github.com/awesomeness-js/server.git"
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
13
|
-
"test": "vitest"
|
|
13
|
+
"test": "vitest",
|
|
14
|
+
"prebuild": "node ./build/build.js",
|
|
15
|
+
"build": "tsc && npm run postBuild",
|
|
16
|
+
"postBuild": "node ./build/postBuild.js"
|
|
14
17
|
},
|
|
15
18
|
"exports": {
|
|
16
19
|
".": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import getConfig from "./getConfig.js";
|
|
2
2
|
import applicationMap from './applicationMap.js';
|
|
3
3
|
import reRoute from './reRoute.js';
|
|
4
4
|
|
|
@@ -7,7 +7,6 @@ async function awesomenessNormalizeRequest({
|
|
|
7
7
|
} = {}) {
|
|
8
8
|
|
|
9
9
|
const awesomenessConfig = getConfig();
|
|
10
|
-
|
|
11
10
|
|
|
12
11
|
const domain = req.headers.host;
|
|
13
12
|
|
|
@@ -77,6 +76,25 @@ async function awesomenessNormalizeRequest({
|
|
|
77
76
|
|
|
78
77
|
}
|
|
79
78
|
|
|
79
|
+
const startTime = performance.now();
|
|
80
|
+
|
|
81
|
+
const log = (message, data = {}) => {
|
|
82
|
+
|
|
83
|
+
const timeElapsed = performance.now() - startTime;
|
|
84
|
+
|
|
85
|
+
if(awesomenessConfig.debug){
|
|
86
|
+
|
|
87
|
+
awesomenessRequest.logData.push({
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
timeElapsed,
|
|
90
|
+
message,
|
|
91
|
+
data
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
};
|
|
97
|
+
|
|
80
98
|
const awesomenessRequest = {
|
|
81
99
|
|
|
82
100
|
// request info
|
|
@@ -111,7 +129,10 @@ async function awesomenessNormalizeRequest({
|
|
|
111
129
|
urlParams,
|
|
112
130
|
|
|
113
131
|
// just because
|
|
114
|
-
_RAW: req
|
|
132
|
+
_RAW: req,
|
|
133
|
+
|
|
134
|
+
log,
|
|
135
|
+
logData: []
|
|
115
136
|
};
|
|
116
137
|
|
|
117
138
|
awesomenessRequest.reRoute = (destination)=>{
|
|
@@ -31,7 +31,7 @@ function extractUiFirstParts(str) {
|
|
|
31
31
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
function componentDependencies(allComponents, {
|
|
34
|
+
export default function componentDependencies(allComponents, {
|
|
35
35
|
componentLocations = [],
|
|
36
36
|
namespace = "ui",
|
|
37
37
|
showDetails = false,
|
|
@@ -58,7 +58,6 @@ function componentDependencies(allComponents, {
|
|
|
58
58
|
|
|
59
59
|
// baseUrl should point at a directory; we resolve component under it
|
|
60
60
|
const componentUrl = new URL(`./${component}/`, baseUrl);
|
|
61
|
-
|
|
62
61
|
|
|
63
62
|
return path.resolve(urlToFsPath(componentUrl));
|
|
64
63
|
|
|
@@ -66,6 +65,7 @@ function componentDependencies(allComponents, {
|
|
|
66
65
|
|
|
67
66
|
let allFiles;
|
|
68
67
|
let chosenRoot;
|
|
68
|
+
let lastErr;
|
|
69
69
|
|
|
70
70
|
for (const root of candidateRoots) {
|
|
71
71
|
|
|
@@ -75,21 +75,29 @@ function componentDependencies(allComponents, {
|
|
|
75
75
|
dir: root,
|
|
76
76
|
ignore
|
|
77
77
|
});
|
|
78
|
+
|
|
78
79
|
chosenRoot = root;
|
|
80
|
+
|
|
79
81
|
break; // first match wins
|
|
80
82
|
|
|
81
|
-
} catch {
|
|
83
|
+
} catch(e) {
|
|
84
|
+
|
|
82
85
|
// try next
|
|
86
|
+
lastErr = e;
|
|
87
|
+
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
}
|
|
86
91
|
|
|
92
|
+
|
|
93
|
+
|
|
87
94
|
if (!allFiles) {
|
|
88
95
|
|
|
89
96
|
throw {
|
|
90
97
|
message: "component does not exist (no location matched)",
|
|
91
98
|
component,
|
|
92
99
|
tried: candidateRoots,
|
|
100
|
+
cause: lastErr?.message ?? lastErr,
|
|
93
101
|
};
|
|
94
102
|
|
|
95
103
|
}
|
|
@@ -297,5 +305,3 @@ function componentDependencies(allComponents, {
|
|
|
297
305
|
return out;
|
|
298
306
|
|
|
299
307
|
}
|
|
300
|
-
|
|
301
|
-
export { componentDependencies };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import { fileURLToPath } from "url";
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import componentDependencies from "./componentDependencies.js";
|
|
5
5
|
import pageInfo from "./pageInfo.js";
|
|
6
6
|
import { each, md5, combineFiles } from "@awesomeness-js/utils";
|
|
7
|
-
import
|
|
7
|
+
import getConfig from "./getConfig.js";
|
|
8
8
|
|
|
9
9
|
const componentNamespace = "ui";
|
|
10
10
|
const pageNamespaceBase = `app.pages`;
|
|
@@ -23,11 +23,11 @@ export default async function fetchPage(
|
|
|
23
23
|
|
|
24
24
|
const awesomenessConfig = getConfig();
|
|
25
25
|
|
|
26
|
-
// normalize
|
|
26
|
+
// normalize siteDir__URL (expected to point at the /sites/ directory)
|
|
27
27
|
const sitesRootPath =
|
|
28
|
-
awesomenessConfig.
|
|
29
|
-
? fileURLToPath(awesomenessConfig.
|
|
30
|
-
: awesomenessConfig.
|
|
28
|
+
awesomenessConfig.siteDir__URL instanceof URL
|
|
29
|
+
? fileURLToPath(awesomenessConfig.siteDir__URL)
|
|
30
|
+
: awesomenessConfig.siteDir__URL;
|
|
31
31
|
|
|
32
32
|
const sitePagesRoot = path.join(sitesRootPath, awesomenessRequest.site, "pages");
|
|
33
33
|
|
package/src/getConfig.js
ADDED
package/src/init.js
ADDED