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,415 +1,415 @@
|
|
|
1
|
-
const {each, tof} = require('lang-tools');
|
|
2
|
-
const JS_File_Query = require('./JS_File_4-Query');
|
|
3
|
-
|
|
4
|
-
const JS_File_Import_References = require('./JS_File_Import_References');
|
|
5
|
-
|
|
6
|
-
const JS_File_Exports = require('./Feature/JS_File_Exports');
|
|
7
|
-
const JS_AST_Node_Declared_Object = require('../JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object');
|
|
8
|
-
//const { default: JS_File_JS_AST_Node } = require('./JS_File_2-JS_AST_Node');
|
|
9
|
-
//const { default: Import_References } = require('./JS_File_Import_References');
|
|
10
|
-
// Will extract relevant AST code functionality. Files often import things at the beginning, then have declarations, then export what was declared at the end.
|
|
11
|
-
|
|
12
|
-
// Understanding the import declarations so they could be localised.
|
|
13
|
-
// So we can refer to the ast of them, because we have recognised them elsewhere.
|
|
14
|
-
|
|
15
|
-
// Can build the functions into a js file.
|
|
16
|
-
// Later on - renaming local variables within a scope.
|
|
17
|
-
|
|
18
|
-
// JS_File_Writable too...
|
|
19
|
-
// .imports = ... or requires
|
|
20
|
-
// .add_platform?
|
|
21
|
-
|
|
22
|
-
// Or better to create the platform objects out of the functions which have been comprehended from various files.
|
|
23
|
-
// JS_File_Platform?
|
|
24
|
-
// This will be more about understanding the js file. Basic structure will have already been obtained.
|
|
25
|
-
|
|
26
|
-
// Maybe a Babel level below?
|
|
27
|
-
|
|
28
|
-
const log = console.log;
|
|
29
|
-
//const log = () => [];
|
|
30
|
-
|
|
31
|
-
class JS_File_Query_Features extends JS_File_Query {
|
|
32
|
-
constructor(spec) {
|
|
33
|
-
super(spec);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// Not going to use .features for the moment.
|
|
37
|
-
// Will have more properties added to the root node that get the things we are likely looking for.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const made_obselete = () => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const features = {}; // external interface
|
|
47
|
-
const map_arr_features_by_name = {};
|
|
48
|
-
|
|
49
|
-
// Querying features on a file level
|
|
50
|
-
|
|
51
|
-
// Number of imported variables
|
|
52
|
-
// Number of exported variables
|
|
53
|
-
// If it uses module.exports to do this
|
|
54
|
-
// the module.exports statement
|
|
55
|
-
// Number of declarations in the root of the document.
|
|
56
|
-
|
|
57
|
-
// Names of these variables
|
|
58
|
-
// Each of the variables within a JSGUI_Single_Declaration abstraction.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// Queries specific to a type....
|
|
62
|
-
|
|
63
|
-
// root_defined_names
|
|
64
|
-
|
|
65
|
-
// the export feature.
|
|
66
|
-
// Maybe make a 'feature' object. Won't necessarily correspond with specific syntax.
|
|
67
|
-
|
|
68
|
-
// an exports property
|
|
69
|
-
|
|
70
|
-
//let feature_export;
|
|
71
|
-
//let arr_features_declared_object = [];
|
|
72
|
-
|
|
73
|
-
const get_declared_object_features = () => {
|
|
74
|
-
//log('get_declared_object_features');
|
|
75
|
-
const res = [];
|
|
76
|
-
|
|
77
|
-
//console.log('this.body.each', this.body.each);
|
|
78
|
-
//console.log('this.body.each.child', this.body.each.child);
|
|
79
|
-
|
|
80
|
-
this.body.each.child.declaration(node_dec => {
|
|
81
|
-
//log('');
|
|
82
|
-
//log('node_dec', node_dec);
|
|
83
|
-
//log('node_dec.source', node_dec.source);
|
|
84
|
-
|
|
85
|
-
// then get the array of features from each declaration.
|
|
86
|
-
|
|
87
|
-
const node_declared_object_features = JS_AST_Node_Declared_Object.arr_from_js_ast_node(node_dec);
|
|
88
|
-
//log('node_declared_object_features.length', node_declared_object_features.length);
|
|
89
|
-
each(node_declared_object_features, x => res.push(x));
|
|
90
|
-
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
//throw 'stop';
|
|
94
|
-
return res;
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const get_feature_export = () => {
|
|
99
|
-
//let res;
|
|
100
|
-
|
|
101
|
-
log('this.body.type', this.body.type);
|
|
102
|
-
|
|
103
|
-
const get_exports_statement = () => {
|
|
104
|
-
let res_inner;
|
|
105
|
-
|
|
106
|
-
this.body.each.child.expression_statement(child_es => {
|
|
107
|
-
//log('child_es', child_es);
|
|
108
|
-
//log('child_es.source', child_es.source);
|
|
109
|
-
|
|
110
|
-
const ase = child_es.child_nodes[0];
|
|
111
|
-
if (ase.t === 'AsE') {
|
|
112
|
-
if (ase.child_nodes.length === 2) {
|
|
113
|
-
const me = ase.child_nodes[0];
|
|
114
|
-
if (me.t === 'ME') {
|
|
115
|
-
// then 2 ids.
|
|
116
|
-
|
|
117
|
-
if (me.child_nodes.length === 0);
|
|
118
|
-
const names = [me.child_nodes[0].name, me.child_nodes[1].name];
|
|
119
|
-
|
|
120
|
-
if (names[0] === 'module' && names[1] === 'exports') {
|
|
121
|
-
res_inner = child_es;
|
|
122
|
-
}
|
|
123
|
-
//log('names', names);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
//
|
|
128
|
-
})
|
|
129
|
-
return res_inner;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const exports_statement = get_exports_statement();
|
|
134
|
-
log('get_feature_export exports_statement', exports_statement);
|
|
135
|
-
|
|
136
|
-
const res = new JS_File_Exports({
|
|
137
|
-
ast_node_exports_statement: exports_statement
|
|
138
|
-
});
|
|
139
|
-
// Can return undefined.
|
|
140
|
-
|
|
141
|
-
return res;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
Object.defineProperty(this, 'features', {
|
|
145
|
-
// Using shorthand method names (ES2015 feature).
|
|
146
|
-
// This is equivalent to:
|
|
147
|
-
// get: function() { return bValue; },
|
|
148
|
-
// set: function(newValue) { bValue = newValue; },
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
get() {
|
|
152
|
-
return features;
|
|
153
|
-
},
|
|
154
|
-
//set(newValue) { bValue = newValue; },
|
|
155
|
-
enumerable: true,
|
|
156
|
-
configurable: false
|
|
157
|
-
});
|
|
158
|
-
// get_declared_object_features
|
|
159
|
-
|
|
160
|
-
Object.defineProperty(features, 'declared_objects', {
|
|
161
|
-
// Using shorthand method names (ES2015 feature).
|
|
162
|
-
// This is equivalent to:
|
|
163
|
-
// get: function() { return bValue; },
|
|
164
|
-
// set: function(newValue) { bValue = newValue; },
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
get() {
|
|
168
|
-
if (!map_arr_features_by_name['declared_objects']) {
|
|
169
|
-
map_arr_features_by_name['declared_objects'] = get_declared_object_features();
|
|
170
|
-
}
|
|
171
|
-
return map_arr_features_by_name['declared_objects'];
|
|
172
|
-
//return features;
|
|
173
|
-
},
|
|
174
|
-
//set(newValue) { bValue = newValue; },
|
|
175
|
-
enumerable: true,
|
|
176
|
-
configurable: false
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// features
|
|
180
|
-
|
|
181
|
-
Object.defineProperty(features, 'export', {
|
|
182
|
-
// Using shorthand method names (ES2015 feature).
|
|
183
|
-
// This is equivalent to:
|
|
184
|
-
// get: function() { return bValue; },
|
|
185
|
-
// set: function(newValue) { bValue = newValue; },
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
get() {
|
|
189
|
-
if (!map_arr_features_by_name['export']) {
|
|
190
|
-
map_arr_features_by_name['export'] = get_feature_export();
|
|
191
|
-
}
|
|
192
|
-
return map_arr_features_by_name['export'];
|
|
193
|
-
//return features;
|
|
194
|
-
},
|
|
195
|
-
//set(newValue) { bValue = newValue; },
|
|
196
|
-
enumerable: true,
|
|
197
|
-
configurable: false
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
let _exported;
|
|
201
|
-
let _exported_keys;
|
|
202
|
-
|
|
203
|
-
const that = this;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
Object.defineProperty(this, 'exported', {
|
|
208
|
-
// Using shorthand method names (ES2015 feature).
|
|
209
|
-
// This is equivalent to:
|
|
210
|
-
// get: function() { return bValue; },
|
|
211
|
-
// set: function(newValue) { bValue = newValue; },
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
get() {
|
|
215
|
-
if (_exported === undefined) { // can be false
|
|
216
|
-
// will lookup the assignment statement
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
throw 'NYI';
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
// use the map / index of variable names / usage (incl dotted paths)
|
|
223
|
-
//this.body.find()
|
|
224
|
-
|
|
225
|
-
_exported = {
|
|
226
|
-
|
|
227
|
-
};
|
|
228
|
-
Object.defineProperty(_exported, 'keys', {
|
|
229
|
-
get() {
|
|
230
|
-
if (_exported_keys === undefined) {
|
|
231
|
-
const jsf = that;
|
|
232
|
-
|
|
233
|
-
const mdecnames = jsf.body.node.map.declaration.identifier.name;
|
|
234
|
-
log('mdecnames', mdecnames);
|
|
235
|
-
|
|
236
|
-
log('jsf.features.export', jsf.features.export);
|
|
237
|
-
log('jsf.features.export.name', jsf.features.export.name);
|
|
238
|
-
log('jsf.features.export.exported_object_name', jsf.features.export.exported_object_name);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
// No longer finds the export declaration as a feature
|
|
242
|
-
|
|
243
|
-
// Probably will have a query-export section specifically for this.
|
|
244
|
-
|
|
245
|
-
const export_dec = mdecnames.get(jsf.features.export.exported_object_name);
|
|
246
|
-
log('export_dec', export_dec);
|
|
247
|
-
log('export_dec.source', export_dec.source);
|
|
248
|
-
|
|
249
|
-
//log('export_dec.collect.child.identifier.name', export_dec.collect.child.identifier.name);
|
|
250
|
-
|
|
251
|
-
// Or some means to collect keys....
|
|
252
|
-
//log('export_dec.child.count', export_dec.child.count);
|
|
253
|
-
//log('export_dec.child.first.child.count', export_dec.child.first.child.count);
|
|
254
|
-
|
|
255
|
-
//log('export_dec.child.first.collect.child.type()', export_dec.child.first.collect.child.type());
|
|
256
|
-
//log('export_dec.child.first.collect.child.category()', export_dec.child.first.collect.child.category());
|
|
257
|
-
|
|
258
|
-
// .collect.type
|
|
259
|
-
|
|
260
|
-
const cats = export_dec.child.first.collect.child.category();
|
|
261
|
-
const types = export_dec.child.first.collect.child.type();
|
|
262
|
-
|
|
263
|
-
log('cats', cats);
|
|
264
|
-
log('types', types);
|
|
265
|
-
|
|
266
|
-
let res = false;
|
|
267
|
-
if (cats[0] === 'Identifier' && cats[1] === 'Expression') {
|
|
268
|
-
const expression = export_dec.child.first.child.last;
|
|
269
|
-
if (types[1] === 'ObjectExpression') {
|
|
270
|
-
log('expression', expression);
|
|
271
|
-
log('expression.child.shared.type', expression.child.shared.type);
|
|
272
|
-
// Reading keys out of an object expression like this would be helpful.
|
|
273
|
-
//log('oe.keys', oe.keys);
|
|
274
|
-
|
|
275
|
-
if (expression.child.shared.type === 'ObjectProperty') {
|
|
276
|
-
//const keys = oe.child.first.collect.child.last.name;
|
|
277
|
-
const ops = expression.child_nodes;
|
|
278
|
-
|
|
279
|
-
// can't overwrite the 'name' property of a function, so it seems.
|
|
280
|
-
|
|
281
|
-
// but not what we want here!!!
|
|
282
|
-
//const keys = oe.collect.child.identifier.str_name();
|
|
283
|
-
//const keys = oe.collect.child.first.value();
|
|
284
|
-
|
|
285
|
-
// oe.keys
|
|
286
|
-
res = [];
|
|
287
|
-
// have it get a keys property?
|
|
288
|
-
// consider explanding the API in such ways.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
expression.filter(n => n.type === 'StringLiteral', n => {
|
|
292
|
-
//log('n', n);
|
|
293
|
-
//log('n.source', n.source);
|
|
294
|
-
res.push(n.source.split('\'').join(''));
|
|
295
|
-
})
|
|
296
|
-
//const keys = ow.collect.literal.value;
|
|
297
|
-
//log('ops', ops);
|
|
298
|
-
|
|
299
|
-
//log('1) keys', keys);
|
|
300
|
-
} else {
|
|
301
|
-
throw 'stop';
|
|
302
|
-
}
|
|
303
|
-
//oe.each.child
|
|
304
|
-
} else {
|
|
305
|
-
|
|
306
|
-
if (types[1] === 'NewExpression') {
|
|
307
|
-
console.log('expression', expression);
|
|
308
|
-
|
|
309
|
-
// Current lang-tools:
|
|
310
|
-
|
|
311
|
-
// A new Evented_Class gets made.
|
|
312
|
-
// Then various values get assigned to it.
|
|
313
|
-
|
|
314
|
-
// Let's deal with the case of a class being made, and then Object.assign used to give it properties.
|
|
315
|
-
// It is a special case, but part of how jsgui is currently put together.
|
|
316
|
-
// So the jsgui object itself operates eventfully.
|
|
317
|
-
|
|
318
|
-
// Maybe put special cases in their own file?
|
|
319
|
-
// There could be quite a lot of them. Want to allow unusual syntax to be understood so that inventive JS can be built effectively too.
|
|
320
|
-
|
|
321
|
-
// Special case queries.
|
|
322
|
-
// Make the special cases operate as JS_AST_Nodes.
|
|
323
|
-
// The special case instance would check that the node it's attempting to wrap fits in with it's suitability test.
|
|
324
|
-
|
|
325
|
-
// Knowing when to use a special case...
|
|
326
|
-
// Could be from signature matching, could be from program logic like this.
|
|
327
|
-
|
|
328
|
-
// However, the special case may be a feature of the whole file.
|
|
329
|
-
// May also be considered a feature of the root node.
|
|
330
|
-
|
|
331
|
-
// Root_Node_Feature
|
|
332
|
-
// So yes it applies to nodes and uses that architecture. Then it can also be easily be applied to files.
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
} else {
|
|
353
|
-
throw 'stop';
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
} else {
|
|
361
|
-
throw 'stop';
|
|
362
|
-
}
|
|
363
|
-
//return res;
|
|
364
|
-
|
|
365
|
-
_exported_keys = res;
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
}
|
|
371
|
-
return _exported_keys;
|
|
372
|
-
}
|
|
373
|
-
})
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
//throw 'stop';
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
}
|
|
380
|
-
return _exported;
|
|
381
|
-
//return features;
|
|
382
|
-
},
|
|
383
|
-
//set(newValue) { bValue = newValue; },
|
|
384
|
-
enumerable: true,
|
|
385
|
-
configurable: false
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
// An 'exported' object would be useful here.
|
|
389
|
-
|
|
390
|
-
// exported keys is the main thing we need to know.
|
|
391
|
-
// maybe it's false.
|
|
392
|
-
|
|
393
|
-
// such as if it exports a class
|
|
394
|
-
|
|
395
|
-
// .exported.class
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// Exports feature.
|
|
405
|
-
|
|
406
|
-
//file.root.find_assignment_by_name('module.exports');
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
414
|
-
}
|
|
1
|
+
const {each, tof} = require('lang-tools');
|
|
2
|
+
const JS_File_Query = require('./JS_File_4-Query');
|
|
3
|
+
|
|
4
|
+
const JS_File_Import_References = require('./JS_File_Import_References');
|
|
5
|
+
|
|
6
|
+
const JS_File_Exports = require('./Feature/JS_File_Exports');
|
|
7
|
+
const JS_AST_Node_Declared_Object = require('../JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object');
|
|
8
|
+
//const { default: JS_File_JS_AST_Node } = require('./JS_File_2-JS_AST_Node');
|
|
9
|
+
//const { default: Import_References } = require('./JS_File_Import_References');
|
|
10
|
+
// Will extract relevant AST code functionality. Files often import things at the beginning, then have declarations, then export what was declared at the end.
|
|
11
|
+
|
|
12
|
+
// Understanding the import declarations so they could be localised.
|
|
13
|
+
// So we can refer to the ast of them, because we have recognised them elsewhere.
|
|
14
|
+
|
|
15
|
+
// Can build the functions into a js file.
|
|
16
|
+
// Later on - renaming local variables within a scope.
|
|
17
|
+
|
|
18
|
+
// JS_File_Writable too...
|
|
19
|
+
// .imports = ... or requires
|
|
20
|
+
// .add_platform?
|
|
21
|
+
|
|
22
|
+
// Or better to create the platform objects out of the functions which have been comprehended from various files.
|
|
23
|
+
// JS_File_Platform?
|
|
24
|
+
// This will be more about understanding the js file. Basic structure will have already been obtained.
|
|
25
|
+
|
|
26
|
+
// Maybe a Babel level below?
|
|
27
|
+
|
|
28
|
+
const log = console.log;
|
|
29
|
+
//const log = () => [];
|
|
30
|
+
|
|
31
|
+
class JS_File_Query_Features extends JS_File_Query {
|
|
32
|
+
constructor(spec) {
|
|
33
|
+
super(spec);
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
// Not going to use .features for the moment.
|
|
37
|
+
// Will have more properties added to the root node that get the things we are likely looking for.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
const made_obselete = () => {
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
const features = {}; // external interface
|
|
47
|
+
const map_arr_features_by_name = {};
|
|
48
|
+
|
|
49
|
+
// Querying features on a file level
|
|
50
|
+
|
|
51
|
+
// Number of imported variables
|
|
52
|
+
// Number of exported variables
|
|
53
|
+
// If it uses module.exports to do this
|
|
54
|
+
// the module.exports statement
|
|
55
|
+
// Number of declarations in the root of the document.
|
|
56
|
+
|
|
57
|
+
// Names of these variables
|
|
58
|
+
// Each of the variables within a JSGUI_Single_Declaration abstraction.
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// Queries specific to a type....
|
|
62
|
+
|
|
63
|
+
// root_defined_names
|
|
64
|
+
|
|
65
|
+
// the export feature.
|
|
66
|
+
// Maybe make a 'feature' object. Won't necessarily correspond with specific syntax.
|
|
67
|
+
|
|
68
|
+
// an exports property
|
|
69
|
+
|
|
70
|
+
//let feature_export;
|
|
71
|
+
//let arr_features_declared_object = [];
|
|
72
|
+
|
|
73
|
+
const get_declared_object_features = () => {
|
|
74
|
+
//log('get_declared_object_features');
|
|
75
|
+
const res = [];
|
|
76
|
+
|
|
77
|
+
//console.log('this.body.each', this.body.each);
|
|
78
|
+
//console.log('this.body.each.child', this.body.each.child);
|
|
79
|
+
|
|
80
|
+
this.body.each.child.declaration(node_dec => {
|
|
81
|
+
//log('');
|
|
82
|
+
//log('node_dec', node_dec);
|
|
83
|
+
//log('node_dec.source', node_dec.source);
|
|
84
|
+
|
|
85
|
+
// then get the array of features from each declaration.
|
|
86
|
+
|
|
87
|
+
const node_declared_object_features = JS_AST_Node_Declared_Object.arr_from_js_ast_node(node_dec);
|
|
88
|
+
//log('node_declared_object_features.length', node_declared_object_features.length);
|
|
89
|
+
each(node_declared_object_features, x => res.push(x));
|
|
90
|
+
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
//throw 'stop';
|
|
94
|
+
return res;
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const get_feature_export = () => {
|
|
99
|
+
//let res;
|
|
100
|
+
|
|
101
|
+
log('this.body.type', this.body.type);
|
|
102
|
+
|
|
103
|
+
const get_exports_statement = () => {
|
|
104
|
+
let res_inner;
|
|
105
|
+
|
|
106
|
+
this.body.each.child.expression_statement(child_es => {
|
|
107
|
+
//log('child_es', child_es);
|
|
108
|
+
//log('child_es.source', child_es.source);
|
|
109
|
+
|
|
110
|
+
const ase = child_es.child_nodes[0];
|
|
111
|
+
if (ase.t === 'AsE') {
|
|
112
|
+
if (ase.child_nodes.length === 2) {
|
|
113
|
+
const me = ase.child_nodes[0];
|
|
114
|
+
if (me.t === 'ME') {
|
|
115
|
+
// then 2 ids.
|
|
116
|
+
|
|
117
|
+
if (me.child_nodes.length === 0);
|
|
118
|
+
const names = [me.child_nodes[0].name, me.child_nodes[1].name];
|
|
119
|
+
|
|
120
|
+
if (names[0] === 'module' && names[1] === 'exports') {
|
|
121
|
+
res_inner = child_es;
|
|
122
|
+
}
|
|
123
|
+
//log('names', names);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//
|
|
128
|
+
})
|
|
129
|
+
return res_inner;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
const exports_statement = get_exports_statement();
|
|
134
|
+
log('get_feature_export exports_statement', exports_statement);
|
|
135
|
+
|
|
136
|
+
const res = new JS_File_Exports({
|
|
137
|
+
ast_node_exports_statement: exports_statement
|
|
138
|
+
});
|
|
139
|
+
// Can return undefined.
|
|
140
|
+
|
|
141
|
+
return res;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
Object.defineProperty(this, 'features', {
|
|
145
|
+
// Using shorthand method names (ES2015 feature).
|
|
146
|
+
// This is equivalent to:
|
|
147
|
+
// get: function() { return bValue; },
|
|
148
|
+
// set: function(newValue) { bValue = newValue; },
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
get() {
|
|
152
|
+
return features;
|
|
153
|
+
},
|
|
154
|
+
//set(newValue) { bValue = newValue; },
|
|
155
|
+
enumerable: true,
|
|
156
|
+
configurable: false
|
|
157
|
+
});
|
|
158
|
+
// get_declared_object_features
|
|
159
|
+
|
|
160
|
+
Object.defineProperty(features, 'declared_objects', {
|
|
161
|
+
// Using shorthand method names (ES2015 feature).
|
|
162
|
+
// This is equivalent to:
|
|
163
|
+
// get: function() { return bValue; },
|
|
164
|
+
// set: function(newValue) { bValue = newValue; },
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
get() {
|
|
168
|
+
if (!map_arr_features_by_name['declared_objects']) {
|
|
169
|
+
map_arr_features_by_name['declared_objects'] = get_declared_object_features();
|
|
170
|
+
}
|
|
171
|
+
return map_arr_features_by_name['declared_objects'];
|
|
172
|
+
//return features;
|
|
173
|
+
},
|
|
174
|
+
//set(newValue) { bValue = newValue; },
|
|
175
|
+
enumerable: true,
|
|
176
|
+
configurable: false
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// features
|
|
180
|
+
|
|
181
|
+
Object.defineProperty(features, 'export', {
|
|
182
|
+
// Using shorthand method names (ES2015 feature).
|
|
183
|
+
// This is equivalent to:
|
|
184
|
+
// get: function() { return bValue; },
|
|
185
|
+
// set: function(newValue) { bValue = newValue; },
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
get() {
|
|
189
|
+
if (!map_arr_features_by_name['export']) {
|
|
190
|
+
map_arr_features_by_name['export'] = get_feature_export();
|
|
191
|
+
}
|
|
192
|
+
return map_arr_features_by_name['export'];
|
|
193
|
+
//return features;
|
|
194
|
+
},
|
|
195
|
+
//set(newValue) { bValue = newValue; },
|
|
196
|
+
enumerable: true,
|
|
197
|
+
configurable: false
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
let _exported;
|
|
201
|
+
let _exported_keys;
|
|
202
|
+
|
|
203
|
+
const that = this;
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
Object.defineProperty(this, 'exported', {
|
|
208
|
+
// Using shorthand method names (ES2015 feature).
|
|
209
|
+
// This is equivalent to:
|
|
210
|
+
// get: function() { return bValue; },
|
|
211
|
+
// set: function(newValue) { bValue = newValue; },
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
get() {
|
|
215
|
+
if (_exported === undefined) { // can be false
|
|
216
|
+
// will lookup the assignment statement
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
throw 'NYI';
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
// use the map / index of variable names / usage (incl dotted paths)
|
|
223
|
+
//this.body.find()
|
|
224
|
+
|
|
225
|
+
_exported = {
|
|
226
|
+
|
|
227
|
+
};
|
|
228
|
+
Object.defineProperty(_exported, 'keys', {
|
|
229
|
+
get() {
|
|
230
|
+
if (_exported_keys === undefined) {
|
|
231
|
+
const jsf = that;
|
|
232
|
+
|
|
233
|
+
const mdecnames = jsf.body.node.map.declaration.identifier.name;
|
|
234
|
+
log('mdecnames', mdecnames);
|
|
235
|
+
|
|
236
|
+
log('jsf.features.export', jsf.features.export);
|
|
237
|
+
log('jsf.features.export.name', jsf.features.export.name);
|
|
238
|
+
log('jsf.features.export.exported_object_name', jsf.features.export.exported_object_name);
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
// No longer finds the export declaration as a feature
|
|
242
|
+
|
|
243
|
+
// Probably will have a query-export section specifically for this.
|
|
244
|
+
|
|
245
|
+
const export_dec = mdecnames.get(jsf.features.export.exported_object_name);
|
|
246
|
+
log('export_dec', export_dec);
|
|
247
|
+
log('export_dec.source', export_dec.source);
|
|
248
|
+
|
|
249
|
+
//log('export_dec.collect.child.identifier.name', export_dec.collect.child.identifier.name);
|
|
250
|
+
|
|
251
|
+
// Or some means to collect keys....
|
|
252
|
+
//log('export_dec.child.count', export_dec.child.count);
|
|
253
|
+
//log('export_dec.child.first.child.count', export_dec.child.first.child.count);
|
|
254
|
+
|
|
255
|
+
//log('export_dec.child.first.collect.child.type()', export_dec.child.first.collect.child.type());
|
|
256
|
+
//log('export_dec.child.first.collect.child.category()', export_dec.child.first.collect.child.category());
|
|
257
|
+
|
|
258
|
+
// .collect.type
|
|
259
|
+
|
|
260
|
+
const cats = export_dec.child.first.collect.child.category();
|
|
261
|
+
const types = export_dec.child.first.collect.child.type();
|
|
262
|
+
|
|
263
|
+
log('cats', cats);
|
|
264
|
+
log('types', types);
|
|
265
|
+
|
|
266
|
+
let res = false;
|
|
267
|
+
if (cats[0] === 'Identifier' && cats[1] === 'Expression') {
|
|
268
|
+
const expression = export_dec.child.first.child.last;
|
|
269
|
+
if (types[1] === 'ObjectExpression') {
|
|
270
|
+
log('expression', expression);
|
|
271
|
+
log('expression.child.shared.type', expression.child.shared.type);
|
|
272
|
+
// Reading keys out of an object expression like this would be helpful.
|
|
273
|
+
//log('oe.keys', oe.keys);
|
|
274
|
+
|
|
275
|
+
if (expression.child.shared.type === 'ObjectProperty') {
|
|
276
|
+
//const keys = oe.child.first.collect.child.last.name;
|
|
277
|
+
const ops = expression.child_nodes;
|
|
278
|
+
|
|
279
|
+
// can't overwrite the 'name' property of a function, so it seems.
|
|
280
|
+
|
|
281
|
+
// but not what we want here!!!
|
|
282
|
+
//const keys = oe.collect.child.identifier.str_name();
|
|
283
|
+
//const keys = oe.collect.child.first.value();
|
|
284
|
+
|
|
285
|
+
// oe.keys
|
|
286
|
+
res = [];
|
|
287
|
+
// have it get a keys property?
|
|
288
|
+
// consider explanding the API in such ways.
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
expression.filter(n => n.type === 'StringLiteral', n => {
|
|
292
|
+
//log('n', n);
|
|
293
|
+
//log('n.source', n.source);
|
|
294
|
+
res.push(n.source.split('\'').join(''));
|
|
295
|
+
})
|
|
296
|
+
//const keys = ow.collect.literal.value;
|
|
297
|
+
//log('ops', ops);
|
|
298
|
+
|
|
299
|
+
//log('1) keys', keys);
|
|
300
|
+
} else {
|
|
301
|
+
throw 'stop';
|
|
302
|
+
}
|
|
303
|
+
//oe.each.child
|
|
304
|
+
} else {
|
|
305
|
+
|
|
306
|
+
if (types[1] === 'NewExpression') {
|
|
307
|
+
console.log('expression', expression);
|
|
308
|
+
|
|
309
|
+
// Current lang-tools:
|
|
310
|
+
|
|
311
|
+
// A new Evented_Class gets made.
|
|
312
|
+
// Then various values get assigned to it.
|
|
313
|
+
|
|
314
|
+
// Let's deal with the case of a class being made, and then Object.assign used to give it properties.
|
|
315
|
+
// It is a special case, but part of how jsgui is currently put together.
|
|
316
|
+
// So the jsgui object itself operates eventfully.
|
|
317
|
+
|
|
318
|
+
// Maybe put special cases in their own file?
|
|
319
|
+
// There could be quite a lot of them. Want to allow unusual syntax to be understood so that inventive JS can be built effectively too.
|
|
320
|
+
|
|
321
|
+
// Special case queries.
|
|
322
|
+
// Make the special cases operate as JS_AST_Nodes.
|
|
323
|
+
// The special case instance would check that the node it's attempting to wrap fits in with it's suitability test.
|
|
324
|
+
|
|
325
|
+
// Knowing when to use a special case...
|
|
326
|
+
// Could be from signature matching, could be from program logic like this.
|
|
327
|
+
|
|
328
|
+
// However, the special case may be a feature of the whole file.
|
|
329
|
+
// May also be considered a feature of the root node.
|
|
330
|
+
|
|
331
|
+
// Root_Node_Feature
|
|
332
|
+
// So yes it applies to nodes and uses that architecture. Then it can also be easily be applied to files.
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
} else {
|
|
353
|
+
throw 'stop';
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
} else {
|
|
361
|
+
throw 'stop';
|
|
362
|
+
}
|
|
363
|
+
//return res;
|
|
364
|
+
|
|
365
|
+
_exported_keys = res;
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
return _exported_keys;
|
|
372
|
+
}
|
|
373
|
+
})
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
//throw 'stop';
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
}
|
|
380
|
+
return _exported;
|
|
381
|
+
//return features;
|
|
382
|
+
},
|
|
383
|
+
//set(newValue) { bValue = newValue; },
|
|
384
|
+
enumerable: true,
|
|
385
|
+
configurable: false
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
// An 'exported' object would be useful here.
|
|
389
|
+
|
|
390
|
+
// exported keys is the main thing we need to know.
|
|
391
|
+
// maybe it's false.
|
|
392
|
+
|
|
393
|
+
// such as if it exports a class
|
|
394
|
+
|
|
395
|
+
// .exported.class
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Exports feature.
|
|
405
|
+
|
|
406
|
+
//file.root.find_assignment_by_name('module.exports');
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
415
|
module.exports = JS_File_Query_Features;
|