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,160 +1,160 @@
|
|
|
1
|
-
//const babel_node_tools = require('../babel/babel_node_tools');
|
|
2
|
-
// Index before query would help.
|
|
3
|
-
|
|
4
|
-
// Will index the occurrances of various nodes / things.
|
|
5
|
-
|
|
6
|
-
// Could get more into tree pattern checking too, declaratively saying what to look for and looking for multiple things at once with signature comparisons in a map.
|
|
7
|
-
|
|
8
|
-
// Indexing at every level looks like it would be useful.
|
|
9
|
-
// so in order to get the info about how the names relate to nodes we consult indexes.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const JS_AST_Node_Signature = require('./JS_AST_Node_2.9-Signature');
|
|
13
|
-
|
|
14
|
-
// Could make a more specific feature extraction part.
|
|
15
|
-
// Will come up with more:
|
|
16
|
-
|
|
17
|
-
// 2.1 Identify
|
|
18
|
-
// 2.2 ??? - Extract_Feature?
|
|
19
|
-
|
|
20
|
-
// Will identify more information about what JS is contained.
|
|
21
|
-
// Eg if it's a recognised code library structure that can be extracted.
|
|
22
|
-
// Identify the main block of declarations in a (library or framework) file.
|
|
23
|
-
// Identify the variable definitions in there.
|
|
24
|
-
|
|
25
|
-
// Need more capability here to find and match specified features.
|
|
26
|
-
|
|
27
|
-
// Asking questions about a piece of code - questions to later determine what it is and how to use it.
|
|
28
|
-
|
|
29
|
-
// .matches_type_signature(signature)
|
|
30
|
-
|
|
31
|
-
// . but using a tree is better for checking multiple signatures at once.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// May have a .query object.
|
|
35
|
-
// Somewhat drastic change
|
|
36
|
-
// and .query will be used through its properties
|
|
37
|
-
|
|
38
|
-
// .query.child.declaration.child.declarator.name
|
|
39
|
-
// .query.child.declaration.child.declarator.name
|
|
40
|
-
// const q = node.query.child.declaration.child.declarator.name
|
|
41
|
-
|
|
42
|
-
// exequery(q)
|
|
43
|
-
// q.exe
|
|
44
|
-
|
|
45
|
-
// q.exe function makes sense for the query.
|
|
46
|
-
|
|
47
|
-
// can do qres = node.query.child.declaration.child.declarator.name.exe();
|
|
48
|
-
// qures = node.exeq(node.query.child.declaration.child.declarator.name);
|
|
49
|
-
|
|
50
|
-
// That means cutting down on the amount of potential changes to the non .query querying functionality.
|
|
51
|
-
// May well be worth keeping them for the moment, until / unless completelty superceded by the query api - apart from perhaps in convenience of the functions themselves.
|
|
52
|
-
// Then they could be expressed in one line declarations that show the shorthands available for the really nice query operations.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// Maybe this is 'Explore' rather than 'Query'. Or 'Navigate'.
|
|
60
|
-
// Providing the relationships will be useful in some cases for the queries and running them.
|
|
61
|
-
|
|
62
|
-
// The query objects themselves, will be driven by properties.
|
|
63
|
-
// query obj
|
|
64
|
-
// property called. creates a query object that is given an array of previous / suffix query words.
|
|
65
|
-
// Then when the query is built, it gets executed.
|
|
66
|
-
// Maybe the query execution part will need to be quite substantial.
|
|
67
|
-
// Probably best to do a stage 1 check / plan of the query, to make sure that it makes sense.
|
|
68
|
-
// There could be a multitude of inner type functions, such as filtering and finding things - but it will need to either be recursive, or logically progress correctly processing
|
|
69
|
-
// the query.
|
|
70
|
-
|
|
71
|
-
// User-friendly query objects are definitely the way forward.
|
|
72
|
-
// For the moment though, can do more with some simpler (query?) methods such as node.filter.child
|
|
73
|
-
|
|
74
|
-
// The .query system will be the best way by far to both create and run some more complex queries in a syntax that closely resembles the English language.
|
|
75
|
-
|
|
76
|
-
// These are more like core extended???
|
|
77
|
-
// these are functions / getters / iterators
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
class JS_AST_Node_Basics extends JS_AST_Node_Signature {
|
|
90
|
-
constructor(spec = {}) {
|
|
91
|
-
super(spec);
|
|
92
|
-
//const {deep_iterate, each_child_node, filter_each_child_node} = this;
|
|
93
|
-
|
|
94
|
-
const {child_nodes, deep_iterate} = this;
|
|
95
|
-
|
|
96
|
-
//const each_child_node = this.each.child;
|
|
97
|
-
//const filter_each_child_node = this.filter.child;
|
|
98
|
-
|
|
99
|
-
// sets the childnodes here.
|
|
100
|
-
// will also make available the relevant bable properties.
|
|
101
|
-
|
|
102
|
-
// Use the lower level tools to kind of understand the node.
|
|
103
|
-
// Provide property getters that will do this.
|
|
104
|
-
|
|
105
|
-
// Seeing what pattern / recognised object / pattern it is.
|
|
106
|
-
|
|
107
|
-
const filter_deep_iterate = (fn_filter, max_depth, callback) => {
|
|
108
|
-
|
|
109
|
-
if (!callback && typeof max_depth === 'function') {
|
|
110
|
-
callback = max_depth;
|
|
111
|
-
max_depth = undefined;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
deep_iterate(max_depth, (js_ast_node, depth, path) => {
|
|
115
|
-
if (fn_filter(js_ast_node)) callback(js_ast_node, path, depth);
|
|
116
|
-
})
|
|
117
|
-
}
|
|
118
|
-
const inner_deep_iterate = (max_depth, callback) => {
|
|
119
|
-
if (!callback && typeof max_depth === 'function') {
|
|
120
|
-
callback = max_depth;
|
|
121
|
-
max_depth = undefined;
|
|
122
|
-
}
|
|
123
|
-
filter_deep_iterate(js_ast_node => js_ast_node !== this, max_depth, callback);
|
|
124
|
-
}
|
|
125
|
-
//const filter_inner_deep_iterate = (filter, callback) => inner_deep_iterate((node) => filter(node) ? callback(node) : undefined)
|
|
126
|
-
|
|
127
|
-
const filter_by_type_deep_iterate = (type, max_depth, callback) => {
|
|
128
|
-
if (!callback && typeof max_depth === 'function') {
|
|
129
|
-
callback = max_depth;
|
|
130
|
-
max_depth = undefined;
|
|
131
|
-
}
|
|
132
|
-
filter_deep_iterate(node => node.type == type, max_depth, callback);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const typed_deep_iterate = (babel_type, max_depth, callback) => {
|
|
136
|
-
if (!callback && typeof max_depth === 'function') {
|
|
137
|
-
callback = max_depth;
|
|
138
|
-
max_depth = undefined;
|
|
139
|
-
}
|
|
140
|
-
filter_deep_iterate(js_ast_node => js_ast_node.type === babel_type, max_depth, callback);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const filter_inner_nodes_by_type = (type, callback) => {
|
|
146
|
-
filter_inner_deep_iterate(node => node.type === type, node => callback(node));
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
this.inner_deep_iterate = inner_deep_iterate;
|
|
152
|
-
this.filter_deep_iterate = filter_deep_iterate;
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Indexing may work better with / after these queries.
|
|
158
|
-
// Then there could be another layer of queries after index.
|
|
159
|
-
|
|
1
|
+
//const babel_node_tools = require('../babel/babel_node_tools');
|
|
2
|
+
// Index before query would help.
|
|
3
|
+
|
|
4
|
+
// Will index the occurrances of various nodes / things.
|
|
5
|
+
|
|
6
|
+
// Could get more into tree pattern checking too, declaratively saying what to look for and looking for multiple things at once with signature comparisons in a map.
|
|
7
|
+
|
|
8
|
+
// Indexing at every level looks like it would be useful.
|
|
9
|
+
// so in order to get the info about how the names relate to nodes we consult indexes.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const JS_AST_Node_Signature = require('./JS_AST_Node_2.9-Signature');
|
|
13
|
+
|
|
14
|
+
// Could make a more specific feature extraction part.
|
|
15
|
+
// Will come up with more:
|
|
16
|
+
|
|
17
|
+
// 2.1 Identify
|
|
18
|
+
// 2.2 ??? - Extract_Feature?
|
|
19
|
+
|
|
20
|
+
// Will identify more information about what JS is contained.
|
|
21
|
+
// Eg if it's a recognised code library structure that can be extracted.
|
|
22
|
+
// Identify the main block of declarations in a (library or framework) file.
|
|
23
|
+
// Identify the variable definitions in there.
|
|
24
|
+
|
|
25
|
+
// Need more capability here to find and match specified features.
|
|
26
|
+
|
|
27
|
+
// Asking questions about a piece of code - questions to later determine what it is and how to use it.
|
|
28
|
+
|
|
29
|
+
// .matches_type_signature(signature)
|
|
30
|
+
|
|
31
|
+
// . but using a tree is better for checking multiple signatures at once.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
// May have a .query object.
|
|
35
|
+
// Somewhat drastic change
|
|
36
|
+
// and .query will be used through its properties
|
|
37
|
+
|
|
38
|
+
// .query.child.declaration.child.declarator.name
|
|
39
|
+
// .query.child.declaration.child.declarator.name
|
|
40
|
+
// const q = node.query.child.declaration.child.declarator.name
|
|
41
|
+
|
|
42
|
+
// exequery(q)
|
|
43
|
+
// q.exe
|
|
44
|
+
|
|
45
|
+
// q.exe function makes sense for the query.
|
|
46
|
+
|
|
47
|
+
// can do qres = node.query.child.declaration.child.declarator.name.exe();
|
|
48
|
+
// qures = node.exeq(node.query.child.declaration.child.declarator.name);
|
|
49
|
+
|
|
50
|
+
// That means cutting down on the amount of potential changes to the non .query querying functionality.
|
|
51
|
+
// May well be worth keeping them for the moment, until / unless completelty superceded by the query api - apart from perhaps in convenience of the functions themselves.
|
|
52
|
+
// Then they could be expressed in one line declarations that show the shorthands available for the really nice query operations.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
// Maybe this is 'Explore' rather than 'Query'. Or 'Navigate'.
|
|
60
|
+
// Providing the relationships will be useful in some cases for the queries and running them.
|
|
61
|
+
|
|
62
|
+
// The query objects themselves, will be driven by properties.
|
|
63
|
+
// query obj
|
|
64
|
+
// property called. creates a query object that is given an array of previous / suffix query words.
|
|
65
|
+
// Then when the query is built, it gets executed.
|
|
66
|
+
// Maybe the query execution part will need to be quite substantial.
|
|
67
|
+
// Probably best to do a stage 1 check / plan of the query, to make sure that it makes sense.
|
|
68
|
+
// There could be a multitude of inner type functions, such as filtering and finding things - but it will need to either be recursive, or logically progress correctly processing
|
|
69
|
+
// the query.
|
|
70
|
+
|
|
71
|
+
// User-friendly query objects are definitely the way forward.
|
|
72
|
+
// For the moment though, can do more with some simpler (query?) methods such as node.filter.child
|
|
73
|
+
|
|
74
|
+
// The .query system will be the best way by far to both create and run some more complex queries in a syntax that closely resembles the English language.
|
|
75
|
+
|
|
76
|
+
// These are more like core extended???
|
|
77
|
+
// these are functions / getters / iterators
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class JS_AST_Node_Basics extends JS_AST_Node_Signature {
|
|
90
|
+
constructor(spec = {}) {
|
|
91
|
+
super(spec);
|
|
92
|
+
//const {deep_iterate, each_child_node, filter_each_child_node} = this;
|
|
93
|
+
|
|
94
|
+
const {child_nodes, deep_iterate} = this;
|
|
95
|
+
|
|
96
|
+
//const each_child_node = this.each.child;
|
|
97
|
+
//const filter_each_child_node = this.filter.child;
|
|
98
|
+
|
|
99
|
+
// sets the childnodes here.
|
|
100
|
+
// will also make available the relevant bable properties.
|
|
101
|
+
|
|
102
|
+
// Use the lower level tools to kind of understand the node.
|
|
103
|
+
// Provide property getters that will do this.
|
|
104
|
+
|
|
105
|
+
// Seeing what pattern / recognised object / pattern it is.
|
|
106
|
+
|
|
107
|
+
const filter_deep_iterate = (fn_filter, max_depth, callback) => {
|
|
108
|
+
|
|
109
|
+
if (!callback && typeof max_depth === 'function') {
|
|
110
|
+
callback = max_depth;
|
|
111
|
+
max_depth = undefined;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
deep_iterate(max_depth, (js_ast_node, depth, path) => {
|
|
115
|
+
if (fn_filter(js_ast_node)) callback(js_ast_node, path, depth);
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
const inner_deep_iterate = (max_depth, callback) => {
|
|
119
|
+
if (!callback && typeof max_depth === 'function') {
|
|
120
|
+
callback = max_depth;
|
|
121
|
+
max_depth = undefined;
|
|
122
|
+
}
|
|
123
|
+
filter_deep_iterate(js_ast_node => js_ast_node !== this, max_depth, callback);
|
|
124
|
+
}
|
|
125
|
+
//const filter_inner_deep_iterate = (filter, callback) => inner_deep_iterate((node) => filter(node) ? callback(node) : undefined)
|
|
126
|
+
|
|
127
|
+
const filter_by_type_deep_iterate = (type, max_depth, callback) => {
|
|
128
|
+
if (!callback && typeof max_depth === 'function') {
|
|
129
|
+
callback = max_depth;
|
|
130
|
+
max_depth = undefined;
|
|
131
|
+
}
|
|
132
|
+
filter_deep_iterate(node => node.type == type, max_depth, callback);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const typed_deep_iterate = (babel_type, max_depth, callback) => {
|
|
136
|
+
if (!callback && typeof max_depth === 'function') {
|
|
137
|
+
callback = max_depth;
|
|
138
|
+
max_depth = undefined;
|
|
139
|
+
}
|
|
140
|
+
filter_deep_iterate(js_ast_node => js_ast_node.type === babel_type, max_depth, callback);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
const filter_inner_nodes_by_type = (type, callback) => {
|
|
146
|
+
filter_inner_deep_iterate(node => node.type === type, node => callback(node));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
this.inner_deep_iterate = inner_deep_iterate;
|
|
152
|
+
this.filter_deep_iterate = filter_deep_iterate;
|
|
153
|
+
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Indexing may work better with / after these queries.
|
|
158
|
+
// Then there could be another layer of queries after index.
|
|
159
|
+
|
|
160
160
|
module.exports = JS_AST_Node_Basics;
|
|
@@ -1,179 +1,179 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const JS_AST_Node_Basics = require('./JS_AST_Node_3-Basics');
|
|
4
|
-
|
|
5
|
-
const JS_AST_Abstract_Node = require('./JS_AST_Abstract_Node');
|
|
6
|
-
const JS_AST_Ordinal = require('./JS_AST_Ordinal');
|
|
7
|
-
//const JS_AST_Relationship = require('./JS_AST_Relationship_Node_To_Group');
|
|
8
|
-
const JS_AST_Ordinal_Relationship = require('./JS_AST_Ordinal_Relationship');
|
|
9
|
-
|
|
10
|
-
// Could make a more specific feature extraction part.
|
|
11
|
-
// Will come up with more:
|
|
12
|
-
|
|
13
|
-
// 2.1 Identify
|
|
14
|
-
// 2.2 ??? - Extract_Feature?
|
|
15
|
-
|
|
16
|
-
// Will identify more information about what JS is contained.
|
|
17
|
-
// Eg if it's a recognised code library structure that can be extracted.
|
|
18
|
-
// Identify the main block of declarations in a (library or framework) file.
|
|
19
|
-
// Identify the variable definitions in there.
|
|
20
|
-
|
|
21
|
-
// Need more capability here to find and match specified features.
|
|
22
|
-
|
|
23
|
-
// Asking questions about a piece of code - questions to later determine what it is and how to use it.
|
|
24
|
-
|
|
25
|
-
// .matches_type_signature(signature)
|
|
26
|
-
|
|
27
|
-
// . but using a tree is better for checking multiple signatures at once.
|
|
28
|
-
|
|
29
|
-
// basically 'deep iterate', though could apply to .child or .ancestor
|
|
30
|
-
|
|
31
|
-
// First is basically just an ordinal, part of a relationship.
|
|
32
|
-
// New query system will likely be much better.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class JS_AST_Node_Basics_First extends JS_AST_Node_Basics {
|
|
36
|
-
constructor(spec = {}) {
|
|
37
|
-
super(spec);
|
|
38
|
-
|
|
39
|
-
// An abstract JS AST node
|
|
40
|
-
|
|
41
|
-
const index = 0;
|
|
42
|
-
const {child_nodes} = this;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// first.child.declaration
|
|
47
|
-
// meaning it's not 'first.child'.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
// First is a node condition?
|
|
52
|
-
// or short for get first?
|
|
53
|
-
|
|
54
|
-
// .first.child
|
|
55
|
-
// will need to be first.child.node
|
|
56
|
-
|
|
57
|
-
// .first.declaration
|
|
58
|
-
// .first.child.declaration
|
|
59
|
-
// want it to operate as read in English.
|
|
60
|
-
|
|
61
|
-
// maybe function chaining is the way?
|
|
62
|
-
|
|
63
|
-
// JS_AST_Ordinal
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const ordinal = this.first = new JS_AST_Ordinal({
|
|
67
|
-
origin: this,
|
|
68
|
-
//relationship_to: 'first',
|
|
69
|
-
number: index
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
const {child} = this;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// JS_AST_Ordinal_Relationship
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// Abstract node with a specified type?
|
|
81
|
-
// Or something else?
|
|
82
|
-
const ordinal_child = ordinal.child = new JS_AST_Ordinal_Relationship({
|
|
83
|
-
ordinal: ordinal,
|
|
84
|
-
relationship: child
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
Object.defineProperty(ordinal_child, 'node', {
|
|
88
|
-
get() {
|
|
89
|
-
return child_nodes[index];
|
|
90
|
-
},
|
|
91
|
-
enumerable: true,
|
|
92
|
-
configurable: false
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
// then the with things like declaration it would find that item.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// first.child should be a property lookup.
|
|
100
|
-
|
|
101
|
-
/*
|
|
102
|
-
Object.defineProperty(first, 'child', {
|
|
103
|
-
get() {
|
|
104
|
-
return root_node;
|
|
105
|
-
},
|
|
106
|
-
enumerable: true,
|
|
107
|
-
configurable: false
|
|
108
|
-
});
|
|
109
|
-
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
//const first_child = first.child = new
|
|
113
|
-
|
|
114
|
-
// then the first child is another abstract node.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
/*
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// Could make it a property?
|
|
125
|
-
|
|
126
|
-
const get_first_child = () => this.child_nodes[0];
|
|
127
|
-
|
|
128
|
-
let cached_first;
|
|
129
|
-
|
|
130
|
-
Object.defineProperty(this, 'first', {
|
|
131
|
-
get() {
|
|
132
|
-
|
|
133
|
-
if (!cached_first) {
|
|
134
|
-
cached_first = {
|
|
135
|
-
child: get_first_child(),
|
|
136
|
-
declaration: get_first_declaration_child(),
|
|
137
|
-
identifier: get_first_identifier_child(),
|
|
138
|
-
statement: get_first_statement_child(),
|
|
139
|
-
expression: get_first_expression_child(),
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return cached_first;
|
|
144
|
-
},
|
|
145
|
-
enumerable: true,
|
|
146
|
-
configurable: false
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
// it's a JS_AST_Abstract_Node
|
|
150
|
-
// meaning we can refer to it without actually having the object.
|
|
151
|
-
|
|
152
|
-
// .first is such an abstract node.
|
|
153
|
-
// .first.child
|
|
154
|
-
// .first.expression
|
|
155
|
-
// .first.identifier
|
|
156
|
-
|
|
157
|
-
// and .second, .third, .fourth, quite a lot would be of use.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// .first.child.node property
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// first.child
|
|
169
|
-
|
|
170
|
-
// first.child.declaration
|
|
171
|
-
|
|
172
|
-
*/
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const JS_AST_Node_Basics = require('./JS_AST_Node_3-Basics');
|
|
4
|
+
|
|
5
|
+
const JS_AST_Abstract_Node = require('./JS_AST_Abstract_Node');
|
|
6
|
+
const JS_AST_Ordinal = require('./JS_AST_Ordinal');
|
|
7
|
+
//const JS_AST_Relationship = require('./JS_AST_Relationship_Node_To_Group');
|
|
8
|
+
const JS_AST_Ordinal_Relationship = require('./JS_AST_Ordinal_Relationship');
|
|
9
|
+
|
|
10
|
+
// Could make a more specific feature extraction part.
|
|
11
|
+
// Will come up with more:
|
|
12
|
+
|
|
13
|
+
// 2.1 Identify
|
|
14
|
+
// 2.2 ??? - Extract_Feature?
|
|
15
|
+
|
|
16
|
+
// Will identify more information about what JS is contained.
|
|
17
|
+
// Eg if it's a recognised code library structure that can be extracted.
|
|
18
|
+
// Identify the main block of declarations in a (library or framework) file.
|
|
19
|
+
// Identify the variable definitions in there.
|
|
20
|
+
|
|
21
|
+
// Need more capability here to find and match specified features.
|
|
22
|
+
|
|
23
|
+
// Asking questions about a piece of code - questions to later determine what it is and how to use it.
|
|
24
|
+
|
|
25
|
+
// .matches_type_signature(signature)
|
|
26
|
+
|
|
27
|
+
// . but using a tree is better for checking multiple signatures at once.
|
|
28
|
+
|
|
29
|
+
// basically 'deep iterate', though could apply to .child or .ancestor
|
|
30
|
+
|
|
31
|
+
// First is basically just an ordinal, part of a relationship.
|
|
32
|
+
// New query system will likely be much better.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class JS_AST_Node_Basics_First extends JS_AST_Node_Basics {
|
|
36
|
+
constructor(spec = {}) {
|
|
37
|
+
super(spec);
|
|
38
|
+
|
|
39
|
+
// An abstract JS AST node
|
|
40
|
+
|
|
41
|
+
const index = 0;
|
|
42
|
+
const {child_nodes} = this;
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
// first.child.declaration
|
|
47
|
+
// meaning it's not 'first.child'.
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
// First is a node condition?
|
|
52
|
+
// or short for get first?
|
|
53
|
+
|
|
54
|
+
// .first.child
|
|
55
|
+
// will need to be first.child.node
|
|
56
|
+
|
|
57
|
+
// .first.declaration
|
|
58
|
+
// .first.child.declaration
|
|
59
|
+
// want it to operate as read in English.
|
|
60
|
+
|
|
61
|
+
// maybe function chaining is the way?
|
|
62
|
+
|
|
63
|
+
// JS_AST_Ordinal
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const ordinal = this.first = new JS_AST_Ordinal({
|
|
67
|
+
origin: this,
|
|
68
|
+
//relationship_to: 'first',
|
|
69
|
+
number: index
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const {child} = this;
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
// JS_AST_Ordinal_Relationship
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
// Abstract node with a specified type?
|
|
81
|
+
// Or something else?
|
|
82
|
+
const ordinal_child = ordinal.child = new JS_AST_Ordinal_Relationship({
|
|
83
|
+
ordinal: ordinal,
|
|
84
|
+
relationship: child
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
Object.defineProperty(ordinal_child, 'node', {
|
|
88
|
+
get() {
|
|
89
|
+
return child_nodes[index];
|
|
90
|
+
},
|
|
91
|
+
enumerable: true,
|
|
92
|
+
configurable: false
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// then the with things like declaration it would find that item.
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
// first.child should be a property lookup.
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
Object.defineProperty(first, 'child', {
|
|
103
|
+
get() {
|
|
104
|
+
return root_node;
|
|
105
|
+
},
|
|
106
|
+
enumerable: true,
|
|
107
|
+
configurable: false
|
|
108
|
+
});
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
//const first_child = first.child = new
|
|
113
|
+
|
|
114
|
+
// then the first child is another abstract node.
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
// Could make it a property?
|
|
125
|
+
|
|
126
|
+
const get_first_child = () => this.child_nodes[0];
|
|
127
|
+
|
|
128
|
+
let cached_first;
|
|
129
|
+
|
|
130
|
+
Object.defineProperty(this, 'first', {
|
|
131
|
+
get() {
|
|
132
|
+
|
|
133
|
+
if (!cached_first) {
|
|
134
|
+
cached_first = {
|
|
135
|
+
child: get_first_child(),
|
|
136
|
+
declaration: get_first_declaration_child(),
|
|
137
|
+
identifier: get_first_identifier_child(),
|
|
138
|
+
statement: get_first_statement_child(),
|
|
139
|
+
expression: get_first_expression_child(),
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return cached_first;
|
|
144
|
+
},
|
|
145
|
+
enumerable: true,
|
|
146
|
+
configurable: false
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// it's a JS_AST_Abstract_Node
|
|
150
|
+
// meaning we can refer to it without actually having the object.
|
|
151
|
+
|
|
152
|
+
// .first is such an abstract node.
|
|
153
|
+
// .first.child
|
|
154
|
+
// .first.expression
|
|
155
|
+
// .first.identifier
|
|
156
|
+
|
|
157
|
+
// and .second, .third, .fourth, quite a lot would be of use.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
// .first.child.node property
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
// first.child
|
|
169
|
+
|
|
170
|
+
// first.child.declaration
|
|
171
|
+
|
|
172
|
+
*/
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
179
|
module.exports = JS_AST_Node_Basics_First;
|