jsgui3-server 0.0.121 → 0.0.123
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/.vscode/settings.json +6 -0
- package/README.md +10 -10
- package/controls/Active_HTML_Document.js +116 -116
- package/controls/README.md +7 -7
- package/controls/page/admin.js +74 -74
- package/controls/panel/admin.js +11 -11
- package/examples/_css/basic.css +913 -913
- package/examples/_css/database-control.css +51 -51
- package/examples/_css/jsgui.css +66 -66
- package/examples/_css/multi-layout.css +23 -23
- package/examples/_css/style.css +1669 -1669
- package/examples/_css/top-and-bottom-bars.css +54 -54
- package/examples/box/1) square box/client.js +188 -188
- package/examples/box/1) square box/server.js +112 -112
- package/examples/box/2) twenty square boxes/css flex wrap/client.js +112 -248
- package/examples/box/2) twenty square boxes/css flex wrap/server.js +39 -112
- package/examples/box/3) twenty selectable square boxes/css flex wrap/client.js +129 -0
- package/examples/{controls/15) window, text field → box/3) twenty selectable square boxes/css flex wrap}/server.js +38 -38
- package/examples/boxes/square_boxes.js +45 -48
- package/examples/boxes/square_boxes_client.js +132 -136
- package/examples/client-side-popup-menu-button.html +93 -93
- package/examples/color_palette.js +51 -51
- package/examples/color_palette_client.js +95 -95
- package/examples/controls/1) window/client.js +186 -186
- package/examples/controls/1) window/server.js +117 -117
- package/examples/controls/10) window, mirrored text inputs/client.js +118 -320
- package/examples/controls/10) window, mirrored text inputs/server.js +37 -117
- package/examples/controls/11) window, mirrored text fields/client.js +493 -251
- package/examples/controls/11) window, mirrored text fields/server.js +117 -117
- package/examples/controls/11b) window, shared Data_Object model mirrored text fields/client.js +613 -331
- package/examples/controls/11b) window, shared Data_Object model mirrored text fields/server.js +117 -117
- package/examples/controls/11c) window, shared Data_Value model mirrored text fields/client.js +617 -617
- package/examples/controls/11c) window, shared Data_Value model mirrored text fields/server.js +117 -117
- package/examples/controls/11d) window, shared model mirrored integer text fields/client.js +611 -280
- package/examples/controls/11d) window, shared model mirrored integer text fields/server.js +134 -22
- package/examples/controls/12) window, Select_Options control/client.js +66 -452
- package/examples/controls/12) window, Select_Options control/server.js +19 -117
- package/examples/controls/13) window, Dropdown_Menu control/client.js +66 -0
- package/examples/controls/13) window, Dropdown_Menu control/server.js +20 -0
- package/examples/controls/2) two windows/client.js +193 -193
- package/examples/controls/2) two windows/server.js +113 -113
- package/examples/controls/3) five windows/client.js +217 -217
- package/examples/controls/3) five windows/server.js +116 -115
- package/examples/controls/4) window, tabbed panel/client.js +54 -225
- package/examples/controls/4) window, tabbed panel/server.js +17 -117
- package/examples/controls/5) window, grid/client.js +204 -484
- package/examples/controls/5) window, grid/server.js +117 -119
- package/examples/controls/6) window, color_palette/client.js +68 -204
- package/examples/controls/6) window, color_palette/server.js +117 -117
- package/examples/controls/7) window, month_view/client.js +40 -231
- package/examples/controls/7) window, month_view/server.js +117 -117
- package/examples/controls/8) window, checkbox/client.js +33 -209
- package/examples/controls/8) window, checkbox/server.js +117 -117
- package/examples/controls/9) window, date picker/client.js +76 -303
- package/examples/controls/9) window, date picker/server.js +117 -117
- package/examples/controls/9b) window, shared data.model mirrored date pickers/README.md +51 -0
- package/examples/controls/9b) window, shared data.model mirrored date pickers/client.js +83 -398
- package/examples/controls/9b) window, shared data.model mirrored date pickers/server.js +117 -117
- package/examples/controls/__old/_html-server-color-palette.js +114 -114
- package/examples/controls/__old/html-server-combo-box.js +104 -104
- package/examples/controls/__old/html-server-list.js +98 -98
- package/examples/controls/__old/html-server-popup-menu-button.js +114 -114
- package/examples/controls/__old/html-server-start-stop-toggle-button.js +146 -146
- package/examples/controls/__old/scs-arrow-button.js +36 -36
- package/examples/controls/__old/scs-date-picker.js +157 -157
- package/examples/controls/__old/scs-file-browser.js +82 -82
- package/examples/controls/__old/scs-item.js +159 -159
- package/examples/controls/__old/scs-month-arrow-selector.js +126 -126
- package/examples/controls/__old/scs-month-view.js +94 -94
- package/examples/controls/__old/scs-start-stop-toggle-button.js +40 -40
- package/examples/controls/__old/scs-tree.js +49 -49
- package/examples/controls/__old/scs-year-arrow-selector.js +127 -127
- package/examples/demos/date-picker.js +119 -119
- package/examples/demos/explain-encapsulation.js +9 -9
- package/examples/demos/resizing.js +35 -35
- package/examples/demos/server_time.js +6 -6
- package/examples/grids/grid_1.js +45 -45
- package/examples/grids/grid_1_client.js +329 -329
- package/examples/html-rendering.js +20 -20
- package/examples/html-server.js +105 -105
- package/examples/introducing jsgui3/server.js +110 -110
- package/examples/mx_display/mx_display_1.js +45 -45
- package/examples/mx_display/mx_display_1_client.js +444 -444
- package/fs2.js +1836 -1836
- package/http/responders/HTTP_Responder.js +15 -15
- package/http/responders/static/Static_Route_HTTP_Responder.js +105 -105
- package/module.js +34 -34
- package/old/_single-control-server.js +418 -418
- package/old/single-control-server.js +368 -368
- package/old/single-page-app.js +131 -131
- package/package.json +42 -42
- package/page-context.js +92 -92
- package/publishers/helpers/assigners/Assigner.js +10 -10
- package/publishers/helpers/assigners/static-compressed-response-buffers/Single_Control_Webpage_Server_Static_Compressed_Response_Buffers_Assigner.js +150 -150
- package/publishers/helpers/assigners/static-headers/Single_Control_Webpage_Server_Static_Headers_Assigner.js +109 -109
- package/publishers/helpers/assigners/static-routes/Single_Control_Webpage_Server_Static_Routes_Assigner.js +91 -91
- package/publishers/helpers/assigners/static-uncompressed-response-buffers/Single_Control_Webpage_Server_Static_Uncompressed_Response_Buffers_Assigner.js +104 -104
- package/publishers/helpers/preparers/static/bundle/Ready_To_Serve_Preparer.js +18 -18
- package/publishers/helpers/preparers/static/bundle/Static_Routes_Responses_Webpage_Bundle_Preparer.js +44 -44
- package/publishers/http-function-publisher.js +212 -212
- package/publishers/http-html-page-publisher.js +5 -5
- package/publishers/http-html-publisher.js +24 -24
- package/publishers/http-js-publisher.js +135 -135
- package/publishers/http-observable-publisher.js +124 -124
- package/publishers/http-publisher.js +53 -53
- package/publishers/http-resource-publisher.js +325 -325
- package/publishers/http-webpage-publisher.js +659 -658
- package/publishers/http-webpageorsite-publisher.js +343 -343
- package/publishers/http-website-publisher.js +640 -640
- package/publishers/notes.md +9 -9
- package/resources/README.md +16 -16
- package/resources/_old_website-javascript-resource.js +994 -994
- package/resources/_old_website-resource.js +507 -507
- package/resources/compile/server-resource-compilation.js +43 -43
- package/resources/data-resource.js +118 -118
- package/resources/fs-resource.js +146 -146
- package/resources/jsbuilder/Abstract_Single_Declaration.js +105 -105
- package/resources/jsbuilder/Abstract_Single_Declaration_Sequence.js +42 -42
- package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node.js +61 -61
- package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node_Group.js +41 -41
- package/resources/jsbuilder/JS_AST/JS_AST_Group_Shared.js +61 -61
- package/resources/jsbuilder/JS_AST/JS_AST_Node.js +93 -93
- package/resources/jsbuilder/JS_AST/JS_AST_Node_0-Core.js +253 -253
- package/resources/jsbuilder/JS_AST/JS_AST_Node_1-Babel.js +337 -337
- package/resources/jsbuilder/JS_AST/JS_AST_Node_10-Changing.js +39 -39
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.1-Child.js +96 -96
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.2-Parent.js +37 -37
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.3-Ancestor.js +61 -61
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.2-Inner.js +43 -43
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.3-All.js +72 -72
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.4-Sibling.js +92 -92
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.5-Available_In_Scope.js +29 -29
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.9-Signature.js +116 -116
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3-Basics.js +159 -159
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.0-Basics_First.js +178 -178
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.1-Basics_Second.js +87 -87
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.99-Basics_Last.js +91 -91
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1-Basics_Each.js +136 -136
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1.5-Basics_Count.js +73 -73
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.2-Basics_Filter.js +39 -39
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.3-Basics_Collect.js +85 -85
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.4-Basics_Select.js +42 -42
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.5-Basics_Find.js +40 -40
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.6-Basics_Callmap.js +54 -54
- package/resources/jsbuilder/JS_AST/JS_AST_Node_4.0-Index_Indexes.js +45 -45
- package/resources/jsbuilder/JS_AST/JS_AST_Node_4.1-Index.js +343 -343
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.0-Category.js +38 -38
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.1-Category_Identifier.js +30 -30
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.2-Category_Literal.js +28 -28
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.3-Category_Expression.js +26 -26
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.4-Category_Pattern.js +8 -8
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.5-Category_Declaration.js +43 -43
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.6-Category_Statement.js +21 -21
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.0-Type.js +89 -89
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.1-Type_Class_Declaration.js +8 -8
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.2-Type_Variable_Declaration.js +27 -27
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.3-Type_Variable_Declarator.js +28 -28
- package/resources/jsbuilder/JS_AST/JS_AST_Node_7-Query.js +736 -736
- package/resources/jsbuilder/JS_AST/JS_AST_Node_8-Features.js +64 -64
- package/resources/jsbuilder/JS_AST/JS_AST_Node_9-Planning.js +31 -31
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Arrangement.js +15 -15
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object.js +305 -305
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature.js +77 -77
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declaration.js +248 -248
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declarator.js +138 -138
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature.js +10 -10
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exported.js +100 -100
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exports.js +60 -60
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Interpreted.js +179 -179
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/_JSGUI_Root_Node_Interpreted.js +43 -43
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/special_case_objectassign_to_object.js +12 -12
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Group.js +35 -35
- package/resources/jsbuilder/JS_AST/JS_AST_Operation.js +11 -11
- package/resources/jsbuilder/JS_AST/JS_AST_Operation_On_Relationship.js +31 -31
- package/resources/jsbuilder/JS_AST/JS_AST_Ordered_Relationship_Node_To_Group.js +37 -37
- package/resources/jsbuilder/JS_AST/JS_AST_Ordinal.js +39 -39
- package/resources/jsbuilder/JS_AST/JS_AST_Ordinal_Relationship.js +25 -25
- package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_To_Group.js +200 -200
- package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_Within_Group_To_Node.js +43 -43
- package/resources/jsbuilder/JS_AST/_JS_AST_Node_3.8-Query_Features.js +76 -76
- package/resources/jsbuilder/JS_AST/query/enable_array_as_queryable.js +227 -227
- package/resources/jsbuilder/JS_AST/query/find_object_keys.js +404 -404
- package/resources/jsbuilder/JS_AST/query/node_queries.js +8 -8
- package/resources/jsbuilder/JS_AST/query/root_query_identidy.js +11 -11
- package/resources/jsbuilder/JS_AST_Node_Extended/JSGUI_Singular_Declaration.js +85 -85
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Declaration.js +123 -123
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended.js +87 -87
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended_0-Core.js +10 -10
- package/resources/jsbuilder/JS_Builder.js +10 -10
- package/resources/jsbuilder/JS_File/Feature/JS_File_Declared_Object.js +31 -31
- package/resources/jsbuilder/JS_File/Feature/JS_File_Exported_Object_Info.js +25 -25
- package/resources/jsbuilder/JS_File/Feature/JS_File_Exports.js +78 -78
- package/resources/jsbuilder/JS_File/Feature/JS_File_Feature.js +17 -17
- package/resources/jsbuilder/JS_File/Feature/JS_File_Imported_Object_Info.js +25 -25
- package/resources/jsbuilder/JS_File/Feature/JS_File_Imports.js +8 -8
- package/resources/jsbuilder/JS_File/JS_File.js +12 -12
- package/resources/jsbuilder/JS_File/JS_File_0-Core.js +202 -202
- package/resources/jsbuilder/JS_File/JS_File_1-Early_Parse.js +175 -175
- package/resources/jsbuilder/JS_File/JS_File_2-Babel.js +81 -81
- package/resources/jsbuilder/JS_File/JS_File_3-JS_AST_Node.js +86 -86
- package/resources/jsbuilder/JS_File/JS_File_4-Query.js +413 -413
- package/resources/jsbuilder/JS_File/JS_File_4.1-Query_Features.js +414 -414
- package/resources/jsbuilder/JS_File/JS_File_5-Planning.js +59 -59
- package/resources/jsbuilder/JS_File/JS_File_6-Changing.js +24 -24
- package/resources/jsbuilder/JS_File/JS_File_Export_Reference.js +12 -12
- package/resources/jsbuilder/JS_File/JS_File_Import_Reference.js +23 -23
- package/resources/jsbuilder/JS_File/JS_File_Import_References.js +31 -31
- package/resources/jsbuilder/JS_File/JS_File_Processor.js +16 -16
- package/resources/jsbuilder/JS_File/JS_Files.js +15 -15
- package/resources/jsbuilder/Module.js +14 -14
- package/resources/jsbuilder/Platform.js +13 -13
- package/resources/jsbuilder/Platforms.js +69 -69
- package/resources/jsbuilder/Project.js +109 -109
- package/resources/jsbuilder/Reference.js +1 -1
- package/resources/jsbuilder/Reference_Sequence.js +16 -16
- package/resources/jsbuilder/Scope.js +29 -29
- package/resources/jsbuilder/Variable_Name_Provider.js +42 -42
- package/resources/jsbuilder/_JS_File.js +225 -225
- package/resources/jsbuilder/ast_query.js +20 -20
- package/resources/jsbuilder/babel/babel_consts.js +162 -162
- package/resources/jsbuilder/babel/babel_node_tools.js +541 -541
- package/resources/jsbuilder/babel/deep_iterate/deep_iterate_babel.js +923 -904
- package/resources/jsbuilder/build.js +16 -16
- package/resources/jsbuilder/platform_notes.md +66 -66
- package/resources/jsbuilder/test/test_ast_node.js +381 -381
- package/resources/jsbuilder/test/test_js_file.js +303 -303
- package/resources/jsbuilder/test/test_project.js +157 -157
- package/resources/local-server-info-resource.js +96 -96
- package/resources/notes.txt +10 -10
- package/resources/old/website-image-resource.js +1185 -1185
- package/resources/process-js.js +498 -498
- package/resources/processors/bundlers/bundle.js +29 -29
- package/resources/processors/bundlers/bundler.js +23 -23
- package/resources/processors/bundlers/css-bundler.js +234 -234
- package/resources/processors/bundlers/js/JS_Bundler.js +51 -51
- package/resources/processors/bundlers/js/esbuild/Advanced_JS_Bundler_Using_ESBuild.js +388 -391
- package/resources/processors/bundlers/js/esbuild/Bundler_Using_ESBuild.js +8 -8
- package/resources/processors/bundlers/js/esbuild/Core_JS_Non_Minifying_Bundler_Using_ESBuild.js +188 -188
- package/resources/processors/bundlers/js/esbuild/Core_JS_Single_File_Minifying_Bundler_Using_ESBuild.js +191 -192
- package/resources/processors/bundlers/js/esbuild/_Old_CSS_Extractor.js +239 -239
- package/resources/processors/bundlers/js-bundler.js +263 -263
- package/resources/processors/bundlers/test_ast.js +73 -73
- package/resources/processors/bundlers/webpage-bundler.js +404 -404
- package/resources/processors/bundlers/website-bundler.js +22 -22
- package/resources/processors/extractors/Extractor.js +9 -11
- package/resources/processors/extractors/js/css_and_js/AST_Node/CSS_And_JS_From_JS_String_Using_AST_Node_Extractor.js +239 -254
- package/resources/processors/extractors/js/css_and_js/CSS_And_JS_From_JS_String_Extractor.js +3 -3
- package/resources/processors/extractors/string/Pos_Span_String_Extractor.js +93 -93
- package/resources/server-installed-tools.js +28 -28
- package/resources/server-resource-pool.js +41 -41
- package/resources/website-audio-resource.js +735 -735
- package/resources/website-css-resource.js +411 -411
- package/resources/website-image-resource.js +412 -412
- package/resources/website-javascript-resource-processor.js +908 -908
- package/resources/website-javascript-resource.js +874 -874
- package/resources/website-resource-processor.js +10 -10
- package/resources/website-resource.js +164 -164
- package/resources/website-static-html-resource.js +199 -199
- package/resources/website-template-html-resource.js +231 -231
- package/roadmap.md +75 -75
- package/server.js +609 -573
- package/static-page-context.js +13 -13
- package/website/webpage.js +81 -81
- package/website/website-group.js +15 -15
- package/website/website.js +260 -260
- package/examples/controls/11d) window, shared model mirrored integer text fields/both.js +0 -17
- package/examples/controls/13) window, shared model mirrored lat_long/client.js +0 -933
- package/examples/controls/13) window, shared model mirrored lat_long/server.js +0 -50
- package/examples/controls/14) window, control compositional model/client.js +0 -328
- package/examples/controls/14) window, control compositional model/server.js +0 -118
- package/examples/controls/14a) window, control spec has compositional model/client.js +0 -440
- package/examples/controls/14a) window, control spec has compositional model/server.js +0 -118
- package/examples/controls/15) window, text field/client.js +0 -256
- package/examples/controls/16) Window([Text_Input])/client.js +0 -266
- package/examples/controls/16) Window([Text_Input])/server.js +0 -109
- package/examples/controls/16a) Window([Text_Input]) Integer data.model.data_type/client.js +0 -494
- package/examples/controls/16a) Window([Text_Input]) Integer data.model.data_type/isomorphic.js +0 -24
- package/examples/controls/16a) Window([Text_Input]) Integer data.model.data_type/server.js +0 -73
- package/examples/controls/2b) two window, context menus/client.js +0 -193
- package/examples/controls/2b) two window, context menus/server.js +0 -114
- package/examples/controls/4a) window, tabbed panel with various controls inside/client.js +0 -233
- package/examples/controls/4a) window, tabbed panel with various controls inside/server.js +0 -118
|
@@ -1,136 +1,136 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// Publishes the HTML format.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const HTTP_Publisher = require('./http-publisher');
|
|
7
|
-
|
|
8
|
-
// This part will process the requests and responses, not the JS resource itself.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class HTTP_JS_Publisher extends HTTP_Publisher {
|
|
13
|
-
constructor(spec) {
|
|
14
|
-
|
|
15
|
-
// Should probably take one or more JS Resources.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
super(spec);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Will publish HTML documents over HTTP, but seems as though it would need to be configured / called with
|
|
23
|
-
// something to render as well as a rendering engine and parameters.
|
|
24
|
-
|
|
25
|
-
// compilation = rendering? not exactly.
|
|
26
|
-
|
|
27
|
-
// handle_http()
|
|
28
|
-
|
|
29
|
-
'handle_http'(req, res) {
|
|
30
|
-
|
|
31
|
-
// Will the resource itself process the requests? Maybe only the Resource Publisher should do that.
|
|
32
|
-
// A greater level of abstraction there, more splitting of responsibilities.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
console.log('HTTP_JS_Publisher processing req.url', req.url);
|
|
39
|
-
var remoteAddress = req.connection.remoteAddress;
|
|
40
|
-
var custom_paths = this.custom_paths;
|
|
41
|
-
var rurl = req.url.replace(/\./g, '☺');
|
|
42
|
-
var custom_response_entry = custom_paths[rurl];
|
|
43
|
-
var pool = this.pool;
|
|
44
|
-
if (custom_response_entry) {
|
|
45
|
-
const ae = req.headers['accept-encoding'];
|
|
46
|
-
let data_to_serve;
|
|
47
|
-
let o_head = {
|
|
48
|
-
'Content-Type': 'text/javascript'
|
|
49
|
-
}
|
|
50
|
-
if (ae.includes('gzip')) {
|
|
51
|
-
o_head['Content-Encoding'] = 'gzip';
|
|
52
|
-
data_to_serve = custom_response_entry._.gzip;
|
|
53
|
-
} else {
|
|
54
|
-
data_to_serve = custom_response_entry._.raw;
|
|
55
|
-
}
|
|
56
|
-
res.writeHead(200, o_head);
|
|
57
|
-
res.end(data_to_serve);
|
|
58
|
-
} else {
|
|
59
|
-
//var served_directories = this.served_directories;
|
|
60
|
-
//console.log('served_directories', served_directories);
|
|
61
|
-
var url_parts = url.parse(req.url, true);
|
|
62
|
-
//console.log('url_parts ' + stringify(url_parts));
|
|
63
|
-
var splitPath = url_parts.path.substr(1).split('/');
|
|
64
|
-
|
|
65
|
-
var wildcard_value = req.params.wildcard_value;
|
|
66
|
-
//console.log('*** wildcard_value', wildcard_value);
|
|
67
|
-
|
|
68
|
-
if (wildcard_value == 'web/require.js') {
|
|
69
|
-
|
|
70
|
-
} else {
|
|
71
|
-
var disk_path = path.dirname(require.main.filename) + '/' + 'js/' + wildcard_value;
|
|
72
|
-
var compress = false;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
//console.log('disk_path', disk_path);
|
|
76
|
-
|
|
77
|
-
if (compress) {
|
|
78
|
-
throw 'NYI with Babel';
|
|
79
|
-
|
|
80
|
-
} else {
|
|
81
|
-
// try to load it from the project's js path.
|
|
82
|
-
//console.log('disk_path', disk_path);
|
|
83
|
-
var project_js_path = 'js/' + wildcard_value;
|
|
84
|
-
//console.log('project_js_path', project_js_path);
|
|
85
|
-
|
|
86
|
-
fs2.load_file_as_string(disk_path, function (err, str_js) {
|
|
87
|
-
if (err) {
|
|
88
|
-
console.log('error loading from project_js_path: ', project_js_path);
|
|
89
|
-
console.log(err);
|
|
90
|
-
} else {
|
|
91
|
-
// Have loaded the js from the project path, we can serve it.
|
|
92
|
-
console.log('have loaded js');
|
|
93
|
-
// serve the js.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
//res.writeHead(200, {'Content-Type': 'text/javascript'});
|
|
97
|
-
// Could possibly stream it from disk instead, that would likely be more efficient.
|
|
98
|
-
console.log('str_js.length', str_js.length);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
// use gzip in many cases.
|
|
102
|
-
// want to support that.
|
|
103
|
-
|
|
104
|
-
// a streaming middleware fn could work...?
|
|
105
|
-
|
|
106
|
-
zlib.deflate(str_js, function (err, buffer) {
|
|
107
|
-
console.log('deflated buffer.length', buffer.length);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (err) throw err;
|
|
111
|
-
res.writeHead(200, {
|
|
112
|
-
'Content-Encoding': 'deflate',
|
|
113
|
-
'Content-Type': 'text/javascript'
|
|
114
|
-
});
|
|
115
|
-
res.end(buffer);
|
|
116
|
-
//res.writeHead(200, {'Content-Type': 'text/javascript'});
|
|
117
|
-
//response.end(servableJs);
|
|
118
|
-
//res.end(minified.code);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
//response.end(servableJs);
|
|
123
|
-
//res.end(str_js);
|
|
124
|
-
//throw 'stop';
|
|
125
|
-
}
|
|
126
|
-
})
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// Publishes the HTML format.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const HTTP_Publisher = require('./http-publisher');
|
|
7
|
+
|
|
8
|
+
// This part will process the requests and responses, not the JS resource itself.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class HTTP_JS_Publisher extends HTTP_Publisher {
|
|
13
|
+
constructor(spec) {
|
|
14
|
+
|
|
15
|
+
// Should probably take one or more JS Resources.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
super(spec);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Will publish HTML documents over HTTP, but seems as though it would need to be configured / called with
|
|
23
|
+
// something to render as well as a rendering engine and parameters.
|
|
24
|
+
|
|
25
|
+
// compilation = rendering? not exactly.
|
|
26
|
+
|
|
27
|
+
// handle_http()
|
|
28
|
+
|
|
29
|
+
'handle_http'(req, res) {
|
|
30
|
+
|
|
31
|
+
// Will the resource itself process the requests? Maybe only the Resource Publisher should do that.
|
|
32
|
+
// A greater level of abstraction there, more splitting of responsibilities.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
console.log('HTTP_JS_Publisher processing req.url', req.url);
|
|
39
|
+
var remoteAddress = req.connection.remoteAddress;
|
|
40
|
+
var custom_paths = this.custom_paths;
|
|
41
|
+
var rurl = req.url.replace(/\./g, '☺');
|
|
42
|
+
var custom_response_entry = custom_paths[rurl];
|
|
43
|
+
var pool = this.pool;
|
|
44
|
+
if (custom_response_entry) {
|
|
45
|
+
const ae = req.headers['accept-encoding'];
|
|
46
|
+
let data_to_serve;
|
|
47
|
+
let o_head = {
|
|
48
|
+
'Content-Type': 'text/javascript'
|
|
49
|
+
}
|
|
50
|
+
if (ae.includes('gzip')) {
|
|
51
|
+
o_head['Content-Encoding'] = 'gzip';
|
|
52
|
+
data_to_serve = custom_response_entry._.gzip;
|
|
53
|
+
} else {
|
|
54
|
+
data_to_serve = custom_response_entry._.raw;
|
|
55
|
+
}
|
|
56
|
+
res.writeHead(200, o_head);
|
|
57
|
+
res.end(data_to_serve);
|
|
58
|
+
} else {
|
|
59
|
+
//var served_directories = this.served_directories;
|
|
60
|
+
//console.log('served_directories', served_directories);
|
|
61
|
+
var url_parts = url.parse(req.url, true);
|
|
62
|
+
//console.log('url_parts ' + stringify(url_parts));
|
|
63
|
+
var splitPath = url_parts.path.substr(1).split('/');
|
|
64
|
+
|
|
65
|
+
var wildcard_value = req.params.wildcard_value;
|
|
66
|
+
//console.log('*** wildcard_value', wildcard_value);
|
|
67
|
+
|
|
68
|
+
if (wildcard_value == 'web/require.js') {
|
|
69
|
+
|
|
70
|
+
} else {
|
|
71
|
+
var disk_path = path.dirname(require.main.filename) + '/' + 'js/' + wildcard_value;
|
|
72
|
+
var compress = false;
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
//console.log('disk_path', disk_path);
|
|
76
|
+
|
|
77
|
+
if (compress) {
|
|
78
|
+
throw 'NYI with Babel';
|
|
79
|
+
|
|
80
|
+
} else {
|
|
81
|
+
// try to load it from the project's js path.
|
|
82
|
+
//console.log('disk_path', disk_path);
|
|
83
|
+
var project_js_path = 'js/' + wildcard_value;
|
|
84
|
+
//console.log('project_js_path', project_js_path);
|
|
85
|
+
|
|
86
|
+
fs2.load_file_as_string(disk_path, function (err, str_js) {
|
|
87
|
+
if (err) {
|
|
88
|
+
console.log('error loading from project_js_path: ', project_js_path);
|
|
89
|
+
console.log(err);
|
|
90
|
+
} else {
|
|
91
|
+
// Have loaded the js from the project path, we can serve it.
|
|
92
|
+
console.log('have loaded js');
|
|
93
|
+
// serve the js.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
//res.writeHead(200, {'Content-Type': 'text/javascript'});
|
|
97
|
+
// Could possibly stream it from disk instead, that would likely be more efficient.
|
|
98
|
+
console.log('str_js.length', str_js.length);
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
// use gzip in many cases.
|
|
102
|
+
// want to support that.
|
|
103
|
+
|
|
104
|
+
// a streaming middleware fn could work...?
|
|
105
|
+
|
|
106
|
+
zlib.deflate(str_js, function (err, buffer) {
|
|
107
|
+
console.log('deflated buffer.length', buffer.length);
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
if (err) throw err;
|
|
111
|
+
res.writeHead(200, {
|
|
112
|
+
'Content-Encoding': 'deflate',
|
|
113
|
+
'Content-Type': 'text/javascript'
|
|
114
|
+
});
|
|
115
|
+
res.end(buffer);
|
|
116
|
+
//res.writeHead(200, {'Content-Type': 'text/javascript'});
|
|
117
|
+
//response.end(servableJs);
|
|
118
|
+
//res.end(minified.code);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
//response.end(servableJs);
|
|
123
|
+
//res.end(str_js);
|
|
124
|
+
//throw 'stop';
|
|
125
|
+
}
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
136
|
module.exports = HTTP_JS_Publisher;
|
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
const jsgui = require('jsgui3-html');
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
Evented_Class
|
|
5
|
-
} = jsgui;
|
|
6
|
-
|
|
7
|
-
const {
|
|
8
|
-
observable
|
|
9
|
-
} = require('fnl');
|
|
10
|
-
|
|
11
|
-
const HTTP_Publisher = require('./http-publisher');
|
|
12
|
-
|
|
13
|
-
// Evented_Class_Publisher?
|
|
14
|
-
// Evented_Publisher
|
|
15
|
-
|
|
16
|
-
// Want to do this over websockets too.
|
|
17
|
-
// Should be a single ws point.
|
|
18
|
-
// Could give out conntection keys alongside the HTTP request.
|
|
19
|
-
// All the security needed - give out a 256 bit key in the HTML doc, require it to open the websocket connection.
|
|
20
|
-
// Seems simple, would work with a single process auth provider, then could have centralised auth and token issuance and checking.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class Observable_Publisher extends HTTP_Publisher {
|
|
24
|
-
constructor(spec) {
|
|
25
|
-
super(spec);
|
|
26
|
-
let obs, schema;
|
|
27
|
-
// needs to hook into the server though...
|
|
28
|
-
if (spec.next && spec.complete && spec.error) {
|
|
29
|
-
obs = spec;
|
|
30
|
-
} else {
|
|
31
|
-
|
|
32
|
-
if (spec.obs) {
|
|
33
|
-
obs = spec.obs;
|
|
34
|
-
} else {
|
|
35
|
-
throw 'No observable found.';
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
//let {schema} = spec;
|
|
39
|
-
|
|
40
|
-
schema = spec.schema;
|
|
41
|
-
|
|
42
|
-
//console.trace();
|
|
43
|
-
//throw 'NYI';
|
|
44
|
-
}
|
|
45
|
-
// need to be able to process (http) requests.
|
|
46
|
-
// reobserve that observable to prevent too many events being attached.
|
|
47
|
-
|
|
48
|
-
// reobserve
|
|
49
|
-
// code here could be written as resobserve function.
|
|
50
|
-
// or just obs on an existing obs?
|
|
51
|
-
|
|
52
|
-
let obs2 = observable((next, complete, error) => {
|
|
53
|
-
obs.on('next', data => {
|
|
54
|
-
next(data);
|
|
55
|
-
})
|
|
56
|
-
return [];
|
|
57
|
-
})
|
|
58
|
-
this.type = 'observable';
|
|
59
|
-
|
|
60
|
-
// Also should publish when it's over.
|
|
61
|
-
|
|
62
|
-
/*
|
|
63
|
-
|
|
64
|
-
=> Request
|
|
65
|
-
GET /stream HTTP/1.1
|
|
66
|
-
Host: example.com
|
|
67
|
-
Accept: text/event-stream
|
|
68
|
-
|
|
69
|
-
<= Response
|
|
70
|
-
HTTP/1.1 200 OK
|
|
71
|
-
Connection: keep-alive
|
|
72
|
-
Content-Type: text/event-stream
|
|
73
|
-
Transfer-Encoding: chunked
|
|
74
|
-
|
|
75
|
-
retry: 15000
|
|
76
|
-
|
|
77
|
-
data: First message is a simple string.
|
|
78
|
-
|
|
79
|
-
data: {"message": "JSON payload"}
|
|
80
|
-
|
|
81
|
-
event: foo
|
|
82
|
-
data: Message of type "foo"
|
|
83
|
-
|
|
84
|
-
id: 42
|
|
85
|
-
event: bar
|
|
86
|
-
data: Multi-line message of
|
|
87
|
-
data: type "bar" and id "42"
|
|
88
|
-
|
|
89
|
-
id: 43
|
|
90
|
-
data: Last message, id "43"
|
|
91
|
-
|
|
92
|
-
1
|
|
93
|
-
2
|
|
94
|
-
3
|
|
95
|
-
4
|
|
96
|
-
event: message\n
|
|
97
|
-
data: this is an important message\n
|
|
98
|
-
data: that has two lines\n
|
|
99
|
-
\n
|
|
100
|
-
|
|
101
|
-
*/
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
this.handle_http = (req, res) => {
|
|
105
|
-
// need to handle observable http request.
|
|
106
|
-
// Begin sending to that connection...
|
|
107
|
-
// Following SSE would be nice.
|
|
108
|
-
res.writeHead(200, {
|
|
109
|
-
'Content-Type': 'text/event-stream',
|
|
110
|
-
'Transfer-Encoding': 'chunked',
|
|
111
|
-
//'Trailer': 'Content-MD5'
|
|
112
|
-
});
|
|
113
|
-
res.write('OK\n');
|
|
114
|
-
let obs2_handler = data => {
|
|
115
|
-
//console.log('data', data);
|
|
116
|
-
let s_data = JSON.stringify(data);
|
|
117
|
-
//res.write(s_data + '\n');
|
|
118
|
-
res.write('event: message\ndata:' + s_data + '\n\n');
|
|
119
|
-
}
|
|
120
|
-
obs2.on('next', obs2_handler);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
1
|
+
const jsgui = require('jsgui3-html');
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
Evented_Class
|
|
5
|
+
} = jsgui;
|
|
6
|
+
|
|
7
|
+
const {
|
|
8
|
+
observable
|
|
9
|
+
} = require('fnl');
|
|
10
|
+
|
|
11
|
+
const HTTP_Publisher = require('./http-publisher');
|
|
12
|
+
|
|
13
|
+
// Evented_Class_Publisher?
|
|
14
|
+
// Evented_Publisher
|
|
15
|
+
|
|
16
|
+
// Want to do this over websockets too.
|
|
17
|
+
// Should be a single ws point.
|
|
18
|
+
// Could give out conntection keys alongside the HTTP request.
|
|
19
|
+
// All the security needed - give out a 256 bit key in the HTML doc, require it to open the websocket connection.
|
|
20
|
+
// Seems simple, would work with a single process auth provider, then could have centralised auth and token issuance and checking.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class Observable_Publisher extends HTTP_Publisher {
|
|
24
|
+
constructor(spec) {
|
|
25
|
+
super(spec);
|
|
26
|
+
let obs, schema;
|
|
27
|
+
// needs to hook into the server though...
|
|
28
|
+
if (spec.next && spec.complete && spec.error) {
|
|
29
|
+
obs = spec;
|
|
30
|
+
} else {
|
|
31
|
+
|
|
32
|
+
if (spec.obs) {
|
|
33
|
+
obs = spec.obs;
|
|
34
|
+
} else {
|
|
35
|
+
throw 'No observable found.';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//let {schema} = spec;
|
|
39
|
+
|
|
40
|
+
schema = spec.schema;
|
|
41
|
+
|
|
42
|
+
//console.trace();
|
|
43
|
+
//throw 'NYI';
|
|
44
|
+
}
|
|
45
|
+
// need to be able to process (http) requests.
|
|
46
|
+
// reobserve that observable to prevent too many events being attached.
|
|
47
|
+
|
|
48
|
+
// reobserve
|
|
49
|
+
// code here could be written as resobserve function.
|
|
50
|
+
// or just obs on an existing obs?
|
|
51
|
+
|
|
52
|
+
let obs2 = observable((next, complete, error) => {
|
|
53
|
+
obs.on('next', data => {
|
|
54
|
+
next(data);
|
|
55
|
+
})
|
|
56
|
+
return [];
|
|
57
|
+
})
|
|
58
|
+
this.type = 'observable';
|
|
59
|
+
|
|
60
|
+
// Also should publish when it's over.
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
|
|
64
|
+
=> Request
|
|
65
|
+
GET /stream HTTP/1.1
|
|
66
|
+
Host: example.com
|
|
67
|
+
Accept: text/event-stream
|
|
68
|
+
|
|
69
|
+
<= Response
|
|
70
|
+
HTTP/1.1 200 OK
|
|
71
|
+
Connection: keep-alive
|
|
72
|
+
Content-Type: text/event-stream
|
|
73
|
+
Transfer-Encoding: chunked
|
|
74
|
+
|
|
75
|
+
retry: 15000
|
|
76
|
+
|
|
77
|
+
data: First message is a simple string.
|
|
78
|
+
|
|
79
|
+
data: {"message": "JSON payload"}
|
|
80
|
+
|
|
81
|
+
event: foo
|
|
82
|
+
data: Message of type "foo"
|
|
83
|
+
|
|
84
|
+
id: 42
|
|
85
|
+
event: bar
|
|
86
|
+
data: Multi-line message of
|
|
87
|
+
data: type "bar" and id "42"
|
|
88
|
+
|
|
89
|
+
id: 43
|
|
90
|
+
data: Last message, id "43"
|
|
91
|
+
|
|
92
|
+
1
|
|
93
|
+
2
|
|
94
|
+
3
|
|
95
|
+
4
|
|
96
|
+
event: message\n
|
|
97
|
+
data: this is an important message\n
|
|
98
|
+
data: that has two lines\n
|
|
99
|
+
\n
|
|
100
|
+
|
|
101
|
+
*/
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
this.handle_http = (req, res) => {
|
|
105
|
+
// need to handle observable http request.
|
|
106
|
+
// Begin sending to that connection...
|
|
107
|
+
// Following SSE would be nice.
|
|
108
|
+
res.writeHead(200, {
|
|
109
|
+
'Content-Type': 'text/event-stream',
|
|
110
|
+
'Transfer-Encoding': 'chunked',
|
|
111
|
+
//'Trailer': 'Content-MD5'
|
|
112
|
+
});
|
|
113
|
+
res.write('OK\n');
|
|
114
|
+
let obs2_handler = data => {
|
|
115
|
+
//console.log('data', data);
|
|
116
|
+
let s_data = JSON.stringify(data);
|
|
117
|
+
//res.write(s_data + '\n');
|
|
118
|
+
res.write('event: message\ndata:' + s_data + '\n\n');
|
|
119
|
+
}
|
|
120
|
+
obs2.on('next', obs2_handler);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
125
|
module.exports = Observable_Publisher;
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
//const { Publisher } = require('jsgui3-html');
|
|
2
|
-
|
|
3
|
-
const {Evented_Class} = require('lang-tools');
|
|
4
|
-
|
|
5
|
-
// Could have this as the general purpose HTTP publishing component / system / part of the system.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// Some kind of mapping between what the response asks for and the functions to get the results along with the parameters to call them with.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class HTTP_Publisher extends Evented_Class {
|
|
14
|
-
constructor(spec) {
|
|
15
|
-
super(spec)
|
|
16
|
-
|
|
17
|
-
/*
|
|
18
|
-
this.handle_http = (req, res) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
*/
|
|
24
|
-
}
|
|
25
|
-
handle_http(req, res) {
|
|
26
|
-
console.trace();
|
|
27
|
-
throw 'HTTP_Publisher: Use handle_http of subclass.';
|
|
28
|
-
// Determine input content type (if any)
|
|
29
|
-
// Headers, auth
|
|
30
|
-
// Then get more of a programmatic model of what it requires to be done.
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// Use the app router to determine where the request is to go.
|
|
35
|
-
|
|
36
|
-
const do_response = () => {
|
|
37
|
-
res.writeHead(200, {
|
|
38
|
-
//'Content-Type': 'text/event-stream',
|
|
39
|
-
'Transfer-Encoding': 'chunked',
|
|
40
|
-
//'Trailer': 'Content-MD5'
|
|
41
|
-
});
|
|
42
|
-
res.write('OK\n');
|
|
43
|
-
let obs2_handler = data => {
|
|
44
|
-
//console.log('data', data);
|
|
45
|
-
let s_data = JSON.stringify(data);
|
|
46
|
-
//res.write(s_data + '\n');
|
|
47
|
-
res.write('event: message\ndata:' + s_data + '\n\n');
|
|
48
|
-
}
|
|
49
|
-
obs2.on('next', obs2_handler);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
1
|
+
//const { Publisher } = require('jsgui3-html');
|
|
2
|
+
|
|
3
|
+
const {Evented_Class} = require('lang-tools');
|
|
4
|
+
|
|
5
|
+
// Could have this as the general purpose HTTP publishing component / system / part of the system.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// Some kind of mapping between what the response asks for and the functions to get the results along with the parameters to call them with.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class HTTP_Publisher extends Evented_Class {
|
|
14
|
+
constructor(spec) {
|
|
15
|
+
super(spec)
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
this.handle_http = (req, res) => {
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
*/
|
|
24
|
+
}
|
|
25
|
+
handle_http(req, res) {
|
|
26
|
+
console.trace();
|
|
27
|
+
throw 'HTTP_Publisher: Use handle_http of subclass.';
|
|
28
|
+
// Determine input content type (if any)
|
|
29
|
+
// Headers, auth
|
|
30
|
+
// Then get more of a programmatic model of what it requires to be done.
|
|
31
|
+
//
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
// Use the app router to determine where the request is to go.
|
|
35
|
+
|
|
36
|
+
const do_response = () => {
|
|
37
|
+
res.writeHead(200, {
|
|
38
|
+
//'Content-Type': 'text/event-stream',
|
|
39
|
+
'Transfer-Encoding': 'chunked',
|
|
40
|
+
//'Trailer': 'Content-MD5'
|
|
41
|
+
});
|
|
42
|
+
res.write('OK\n');
|
|
43
|
+
let obs2_handler = data => {
|
|
44
|
+
//console.log('data', data);
|
|
45
|
+
let s_data = JSON.stringify(data);
|
|
46
|
+
//res.write(s_data + '\n');
|
|
47
|
+
res.write('event: message\ndata:' + s_data + '\n\n');
|
|
48
|
+
}
|
|
49
|
+
obs2.on('next', obs2_handler);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
54
|
module.exports = HTTP_Publisher;
|