jsgui3-server 0.0.75 → 0.0.79

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.
Files changed (158) hide show
  1. package/examples/client-side-popup-menu-button.html +93 -93
  2. package/examples/controls/_html-server-color-palette.js +114 -114
  3. package/examples/controls/html-server-combo-box.js +104 -104
  4. package/examples/controls/html-server-list.js +98 -98
  5. package/examples/controls/html-server-popup-menu-button.js +114 -114
  6. package/examples/controls/html-server-start-stop-toggle-button.js +146 -146
  7. package/examples/controls/scs-arrow-button.js +36 -36
  8. package/examples/controls/scs-date-picker.js +157 -157
  9. package/examples/controls/scs-file-browser.js +82 -82
  10. package/examples/controls/scs-item.js +159 -159
  11. package/examples/controls/scs-month-arrow-selector.js +126 -126
  12. package/examples/controls/scs-month-view.js +95 -95
  13. package/examples/controls/scs-start-stop-toggle-button.js +40 -40
  14. package/examples/controls/scs-tree.js +49 -49
  15. package/examples/controls/scs-year-arrow-selector.js +127 -127
  16. package/examples/demos/date-picker.js +119 -119
  17. package/examples/demos/explain-encapsulation.js +9 -9
  18. package/examples/demos/resizing.js +35 -35
  19. package/examples/demos/server_time.js +6 -6
  20. package/examples/demos/square_box.js +324 -324
  21. package/examples/html-rendering.js +20 -20
  22. package/examples/html-server.js +102 -100
  23. package/fs2.js +1836 -1836
  24. package/module.js +21 -21
  25. package/old/single-control-server.js +418 -418
  26. package/package.json +44 -42
  27. package/publishing/function-publisher.js +202 -202
  28. package/publishing/notes.md +5 -5
  29. package/publishing/observable-publisher.js +118 -118
  30. package/publishing/resource-publisher.js +306 -306
  31. package/resources/data-resource.js +104 -104
  32. package/resources/fs-resource.js +148 -148
  33. package/resources/jsbuilder/Abstract_Single_Declaration.js +105 -0
  34. package/resources/jsbuilder/Abstract_Single_Declaration_Sequence.js +43 -0
  35. package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node.js +62 -0
  36. package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node_Group.js +42 -0
  37. package/resources/jsbuilder/JS_AST/JS_AST_Group_Shared.js +62 -0
  38. package/resources/jsbuilder/JS_AST/JS_AST_Node.js +94 -0
  39. package/resources/jsbuilder/JS_AST/JS_AST_Node_0-Core.js +228 -0
  40. package/resources/jsbuilder/JS_AST/JS_AST_Node_1-Babel.js +338 -0
  41. package/resources/jsbuilder/JS_AST/JS_AST_Node_10-Changing.js +40 -0
  42. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.1-Child.js +97 -0
  43. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.2-Parent.js +38 -0
  44. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.3-Ancestor.js +62 -0
  45. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.2-Inner.js +44 -0
  46. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.3-All.js +73 -0
  47. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.4-Sibling.js +93 -0
  48. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.5-Available_In_Scope.js +29 -0
  49. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.9-Signature.js +116 -0
  50. package/resources/jsbuilder/JS_AST/JS_AST_Node_3-Basics.js +160 -0
  51. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.0-Basics_First.js +179 -0
  52. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.1-Basics_Second.js +88 -0
  53. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.99-Basics_Last.js +92 -0
  54. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1-Basics_Each.js +137 -0
  55. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1.5-Basics_Count.js +74 -0
  56. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.2-Basics_Filter.js +40 -0
  57. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.3-Basics_Collect.js +86 -0
  58. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.4-Basics_Select.js +43 -0
  59. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.5-Basics_Find.js +41 -0
  60. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.6-Basics_Callmap.js +55 -0
  61. package/resources/jsbuilder/JS_AST/JS_AST_Node_4.0-Index_Indexes.js +46 -0
  62. package/resources/jsbuilder/JS_AST/JS_AST_Node_4.1-Index.js +344 -0
  63. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.0-Category.js +39 -0
  64. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.1-Category_Identifier.js +31 -0
  65. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.2-Category_Literal.js +29 -0
  66. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.3-Category_Expression.js +27 -0
  67. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.4-Category_Pattern.js +9 -0
  68. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.5-Category_Declaration.js +44 -0
  69. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.6-Category_Statement.js +22 -0
  70. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.0-Type.js +87 -0
  71. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.1-Type_Class_Declaration.js +9 -0
  72. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.2-Type_Variable_Declaration.js +28 -0
  73. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.3-Type_Variable_Declarator.js +29 -0
  74. package/resources/jsbuilder/JS_AST/JS_AST_Node_7-Query.js +737 -0
  75. package/resources/jsbuilder/JS_AST/JS_AST_Node_8-Features.js +65 -0
  76. package/resources/jsbuilder/JS_AST/JS_AST_Node_9-Planning.js +32 -0
  77. package/resources/jsbuilder/JS_AST/JS_AST_Node_Arrangement.js +15 -0
  78. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object.js +306 -0
  79. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature.js +78 -0
  80. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declaration.js +249 -0
  81. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declarator.js +139 -0
  82. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature.js +10 -0
  83. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exported.js +101 -0
  84. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exports.js +61 -0
  85. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Interpreted.js +180 -0
  86. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/_JSGUI_Root_Node_Interpreted.js +43 -0
  87. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/special_case_objectassign_to_object.js +12 -0
  88. package/resources/jsbuilder/JS_AST/JS_AST_Node_Group.js +35 -0
  89. package/resources/jsbuilder/JS_AST/JS_AST_Operation.js +11 -0
  90. package/resources/jsbuilder/JS_AST/JS_AST_Operation_On_Relationship.js +32 -0
  91. package/resources/jsbuilder/JS_AST/JS_AST_Ordered_Relationship_Node_To_Group.js +38 -0
  92. package/resources/jsbuilder/JS_AST/JS_AST_Ordinal.js +40 -0
  93. package/resources/jsbuilder/JS_AST/JS_AST_Ordinal_Relationship.js +25 -0
  94. package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_To_Group.js +201 -0
  95. package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_Within_Group_To_Node.js +44 -0
  96. package/resources/jsbuilder/JS_AST/_JS_AST_Node_3.8-Query_Features.js +77 -0
  97. package/resources/jsbuilder/JS_AST/query/all.js +0 -0
  98. package/resources/jsbuilder/JS_AST/query/enable_array_as_queryable.js +228 -0
  99. package/resources/jsbuilder/JS_AST/query/find_object_keys.js +405 -0
  100. package/resources/jsbuilder/JS_AST/query/node_queries.js +9 -0
  101. package/resources/jsbuilder/JS_AST/query/root_queries.js +0 -0
  102. package/resources/jsbuilder/JS_AST/query/root_query_identidy.js +12 -0
  103. package/resources/jsbuilder/JS_AST_Node_Extended/JSGUI_Singular_Declaration.js +86 -0
  104. package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Declaration.js +124 -0
  105. package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended.js +88 -0
  106. package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended_0-Core.js +11 -0
  107. package/resources/jsbuilder/JS_Builder.js +10 -36
  108. package/resources/jsbuilder/JS_File/Feature/JS_File_Declared_Object.js +32 -0
  109. package/resources/jsbuilder/JS_File/Feature/JS_File_Exported_Object_Info.js +26 -0
  110. package/resources/jsbuilder/JS_File/Feature/JS_File_Exports.js +79 -0
  111. package/resources/jsbuilder/JS_File/Feature/JS_File_Feature.js +18 -0
  112. package/resources/jsbuilder/JS_File/Feature/JS_File_Imported_Object_Info.js +26 -0
  113. package/resources/jsbuilder/JS_File/Feature/JS_File_Imports.js +9 -0
  114. package/resources/jsbuilder/JS_File/JS_File.js +12 -0
  115. package/resources/jsbuilder/JS_File/JS_File_0-Core.js +202 -0
  116. package/resources/jsbuilder/JS_File/JS_File_1-Early_Parse.js +175 -0
  117. package/resources/jsbuilder/JS_File/JS_File_2-Babel.js +81 -0
  118. package/resources/jsbuilder/JS_File/JS_File_3-JS_AST_Node.js +86 -0
  119. package/resources/jsbuilder/JS_File/JS_File_4-Query.js +414 -0
  120. package/resources/jsbuilder/JS_File/JS_File_4.1-Query_Features.js +415 -0
  121. package/resources/jsbuilder/JS_File/JS_File_5-Planning.js +59 -0
  122. package/resources/jsbuilder/JS_File/JS_File_6-Changing.js +24 -0
  123. package/resources/jsbuilder/JS_File/JS_File_Export_Reference.js +12 -0
  124. package/resources/jsbuilder/JS_File/JS_File_Import_Reference.js +24 -0
  125. package/resources/jsbuilder/JS_File/JS_File_Import_References.js +32 -0
  126. package/resources/jsbuilder/JS_File/JS_File_Processor.js +16 -0
  127. package/resources/jsbuilder/JS_File/JS_Files.js +16 -0
  128. package/resources/jsbuilder/Module.js +14 -0
  129. package/resources/jsbuilder/Platform.js +13 -53
  130. package/resources/jsbuilder/Platforms.js +69 -15
  131. package/resources/jsbuilder/Project.js +109 -0
  132. package/resources/jsbuilder/Reference.js +1 -1
  133. package/resources/jsbuilder/Reference_Sequence.js +16 -7
  134. package/resources/jsbuilder/Scope.js +30 -0
  135. package/resources/jsbuilder/Variable_Name_Provider.js +43 -0
  136. package/resources/jsbuilder/_JS_File.js +226 -0
  137. package/resources/jsbuilder/ast_query.js +21 -0
  138. package/resources/jsbuilder/babel/babel_consts.js +150 -0
  139. package/resources/jsbuilder/babel/babel_node_tools.js +542 -0
  140. package/resources/jsbuilder/babel/deep_iterate/deep_iterate_babel.js +604 -0
  141. package/resources/jsbuilder/build.js +16 -0
  142. package/resources/jsbuilder/platform_notes.md +66 -0
  143. package/resources/jsbuilder/test/test_ast_node.js +451 -0
  144. package/resources/jsbuilder/test/test_js_file.js +303 -11
  145. package/resources/jsbuilder/test/test_project.js +157 -0
  146. package/resources/local-server-info-resource.js +78 -78
  147. package/resources/process-js.js +537 -537
  148. package/resources/server-resource-pool.js +84 -84
  149. package/resources/website-css-resource.js +411 -411
  150. package/resources/website-javascript-resource.js +761 -751
  151. package/resources/website-resource.js +390 -390
  152. package/resources/website-static-html-resource.js +196 -196
  153. package/server.js +170 -170
  154. package/single-control-server.js +398 -398
  155. package/single-page-app.js +129 -129
  156. package/resources/jsbuilder/Declaration.js +0 -15
  157. package/resources/jsbuilder/Declaration_Sequence.js +0 -15
  158. package/resources/jsbuilder/JS_File.js +0 -77
@@ -0,0 +1,93 @@
1
+
2
+
3
+ // sibling.next
4
+ // sibling.all
5
+
6
+ // Sibling relationship
7
+ // And the index is the index within the parent.
8
+
9
+
10
+
11
+ const JS_AST_Node_All = require('./JS_AST_Node_2.3-All');
12
+
13
+ const JS_AST_Ordered_Relationship_Node_To_Group = require('./JS_AST_Ordered_Relationship_Node_To_Group');
14
+
15
+ class JS_AST_Node_Sibling extends JS_AST_Node_All {
16
+ constructor(spec = {}) {
17
+ super(spec);
18
+ const {each_child_node} = this;
19
+
20
+
21
+
22
+ let index;
23
+ Object.defineProperty(this, 'index', {
24
+ get() {
25
+
26
+ if (index === undefined) {
27
+ //console.log('this.path', this.path);
28
+
29
+ const s_path = this.path.split('/').filter(s => s.length > 0).map(s => parseInt(s));
30
+ //console.log('s_path', s_path);
31
+
32
+ index = s_path[s_path.length - 1];
33
+
34
+ //throw 'NYI';
35
+ }
36
+
37
+ return index;
38
+ },
39
+ enumerable: true,
40
+ configurable: false
41
+ });
42
+
43
+
44
+ // sibling.all?
45
+
46
+ // .siblings
47
+ // .siblings.next
48
+
49
+ // could say it's an ordinal relationship.
50
+
51
+ // Ordered_Relationship_Node_To_Group
52
+
53
+ // with an index property.
54
+
55
+ const sibling = new JS_AST_Ordered_Relationship_Node_To_Group({
56
+ origin: this,
57
+ name: 'sibling',
58
+ index: index//,
59
+ //obtainer: () => this.child_nodes,
60
+ //iterator: callback => each(this.child_nodes, callback),
61
+ //each: callback => each(this.child_nodes, callback)//,
62
+ //select: fn_select => select_child_nodes(fn_select)
63
+ });
64
+
65
+ sibling.previous = new JS_AST_Ordered_Relationship_Node_To_Group({
66
+ origin: this,
67
+ name: 'previous-sibling'
68
+ });
69
+ sibling.post = new JS_AST_Ordered_Relationship_Node_To_Group({
70
+ origin: this,
71
+ name: 'post-sibling'
72
+ });
73
+
74
+ this.sibling = sibling;
75
+
76
+ //.previous .next
77
+ //.pre .post
78
+
79
+ // Need to know the position / index within the parent.
80
+
81
+
82
+ // this.sibling.number
83
+ // .own_number?
84
+
85
+
86
+
87
+
88
+
89
+
90
+ }
91
+ }
92
+
93
+ module.exports = JS_AST_Node_Sibling;
@@ -0,0 +1,29 @@
1
+
2
+ const JS_AST_Node_Sibling = require('./JS_AST_Node_2.4-Sibling');
3
+ const JS_AST_Relationship_Node_To_Group = require('./JS_AST_Relationship_Node_To_Group');
4
+
5
+ class JS_AST_Node_Available_In_Scope extends JS_AST_Node_Sibling {
6
+ constructor(spec = {}) {
7
+ super(spec);
8
+ const {each_child_node} = this;
9
+
10
+
11
+ // The scope or in_scope relationship object.
12
+
13
+ const available_in_scope = new JS_AST_Relationship_Node_To_Group({
14
+ origin: this,
15
+ name: 'available_in_scope'//,
16
+ //obtainer: () => this.child_nodes,
17
+ //iterator: callback => each(this.child_nodes, callback),
18
+ //each: callback => each(this.child_nodes, callback)//,
19
+ //select: fn_select => select_child_nodes(fn_select)
20
+ });
21
+
22
+ this.available_in_scope = available_in_scope;
23
+
24
+
25
+ }
26
+ }
27
+
28
+ module.exports = JS_AST_Node_Available_In_Scope;
29
+
@@ -0,0 +1,116 @@
1
+
2
+
3
+ const JS_AST_Node_Available_In_Scope = require('./JS_AST_Node_2.5-Available_In_Scope');
4
+
5
+
6
+ class JS_AST_Node_Signature extends JS_AST_Node_Available_In_Scope {
7
+ constructor(spec = {}) {
8
+ super(spec);
9
+ const {each_child_node} = this;
10
+ let deep_type_signature, type_signature;
11
+ // and then a more shallow type signature.
12
+ // type_signature could go to depth 2 or 3. Let's try it.
13
+ // Want to be able to get small and usable signatures.
14
+
15
+ // Want max depth for the iteration.
16
+ // The stop function integrated within the iteration would be useful there to get that done.
17
+ // Maybe an 'options' object now params have got more complex.
18
+
19
+ const get_deep_type_signature = () => {
20
+ //let res = '[' + this.type + '(';
21
+ //if (!deep_type_signature) {
22
+ //console.log('');
23
+ //console.log('this.path', this.path);
24
+ //console.log('this.type', this.type);
25
+ let res = '' + this.abbreviated_type, inner_res = '', first = true;
26
+
27
+ // Only look at child nodes, not full tree here.
28
+ // each_child_node inner_deep_iterate
29
+ // seems fixed now.
30
+ // no longer supports max_depth but at least it works now.
31
+
32
+ each_child_node(inner_node => {
33
+ if (!first) inner_res = inner_res + ','
34
+ inner_res = inner_res + inner_node.deep_type_signature
35
+ first = false;
36
+ });
37
+ //res = res + ')';
38
+ if (inner_res.length > 0) {
39
+ res = res + '(' + inner_res + ')';
40
+ } else {
41
+
42
+ }
43
+ return res;
44
+ }
45
+
46
+ Object.defineProperty(this, 'type_signature', {
47
+ get() {
48
+ if (!type_signature) type_signature = get_deep_type_signature(1);
49
+ //if (deep_type_signature) return deep_type_signature;
50
+ return type_signature;
51
+
52
+ },
53
+ //set(newValue) { bValue = newValue; },
54
+ enumerable: true,
55
+ configurable: false
56
+ });
57
+
58
+ Object.defineProperty(this, 'deep_type_signature', {
59
+ get() {
60
+ if (!deep_type_signature) deep_type_signature = get_deep_type_signature(100);
61
+ //if (deep_type_signature) return deep_type_signature;
62
+ return deep_type_signature;
63
+
64
+ },
65
+ //set(newValue) { bValue = newValue; },
66
+ enumerable: true,
67
+ configurable: false
68
+ });
69
+
70
+ Object.defineProperty(this, 'signature', {
71
+ get() {
72
+ return this.type_signature
73
+ },
74
+ //set(newValue) { bValue = newValue; },
75
+ enumerable: true,
76
+ configurable: false
77
+ });
78
+
79
+ this.get_deep_type_signature = get_deep_type_signature;
80
+
81
+ }
82
+ }
83
+
84
+ module.exports = JS_AST_Node_Signature;
85
+
86
+
87
+
88
+ // Scope next...?
89
+ // A function that iterates backwards through the scope.
90
+
91
+ // .scoped being a group of those scoped nodes
92
+
93
+ // node.scope.find.identifier.by.name(n)
94
+
95
+ // node.scope.all.declaration
96
+
97
+ // node.scope.each.declaration()
98
+
99
+ // node.shared.scope.all being all nodes in the shared scope
100
+ // node.scope being the scope internal to that node itself?
101
+
102
+ // Will have some kinds of more basic processes that deal with scope.
103
+ // not so OO to begin with, but ability to get the names of all declarations in scope.
104
+
105
+ // The scope or maybe in_scope relationship could be a useful way to do it.
106
+ // Also_In_Scope relationship?
107
+ // Available_In_Scope
108
+ // 2.5-Available_Declarations_In_Scope
109
+ // Just In_Scope as a relationship works OK.
110
+ // Available_In_Scope is a bit clearer though. Maybe In_Scope is fine when it's a relationship, it's clear enough maybe.
111
+
112
+
113
+
114
+
115
+
116
+
@@ -0,0 +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
+
160
+ module.exports = JS_AST_Node_Basics;
@@ -0,0 +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
+
179
+ module.exports = JS_AST_Node_Basics_First;
@@ -0,0 +1,88 @@
1
+
2
+
3
+ const JS_AST_Node_Basics_First = require('./JS_AST_Node_3.0.0-Basics_First');
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
+ class JS_AST_Node_Basics_Second extends JS_AST_Node_Basics_First {
32
+ constructor(spec = {}) {
33
+ super(spec);
34
+
35
+ // An abstract JS AST node
36
+
37
+ const index = 1;
38
+ const {child_nodes} = this;
39
+
40
+ // first.child.declaration
41
+ // meaning it's not 'first.child'.
42
+
43
+
44
+
45
+ // First is a node condition?
46
+ // or short for get first?
47
+
48
+ // .first.child
49
+ // will need to be first.child.node
50
+
51
+ // .first.declaration
52
+ // .first.child.declaration
53
+ // want it to operate as read in English.
54
+
55
+ // maybe function chaining is the way?
56
+
57
+ // JS_AST_Ordinal
58
+
59
+ const ordinal = this.second = new JS_AST_Ordinal({
60
+ origin: this,
61
+ //relationship_to: 'first',
62
+ number: index
63
+ });
64
+
65
+ const {child} = this;
66
+ // JS_AST_Ordinal_Relationship
67
+ // Abstract node with a specified type?
68
+ // Or something else?
69
+
70
+ // Relationship of node to node.
71
+
72
+ const ordinal_child = ordinal.child = new JS_AST_Ordinal_Relationship({
73
+ ordinal: ordinal,
74
+ relationship: child
75
+ });
76
+
77
+ Object.defineProperty(ordinal_child, 'node', {
78
+ get() {
79
+ return child_nodes[index];
80
+ },
81
+ enumerable: true,
82
+ configurable: false
83
+ });
84
+
85
+ }
86
+ }
87
+
88
+ module.exports = JS_AST_Node_Basics_Second;