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.
- package/examples/client-side-popup-menu-button.html +93 -93
- package/examples/controls/_html-server-color-palette.js +114 -114
- package/examples/controls/html-server-combo-box.js +104 -104
- package/examples/controls/html-server-list.js +98 -98
- package/examples/controls/html-server-popup-menu-button.js +114 -114
- package/examples/controls/html-server-start-stop-toggle-button.js +146 -146
- package/examples/controls/scs-arrow-button.js +36 -36
- package/examples/controls/scs-date-picker.js +157 -157
- package/examples/controls/scs-file-browser.js +82 -82
- package/examples/controls/scs-item.js +159 -159
- package/examples/controls/scs-month-arrow-selector.js +126 -126
- package/examples/controls/scs-month-view.js +95 -95
- package/examples/controls/scs-start-stop-toggle-button.js +40 -40
- package/examples/controls/scs-tree.js +49 -49
- package/examples/controls/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/demos/square_box.js +324 -324
- package/examples/html-rendering.js +20 -20
- package/examples/html-server.js +102 -100
- package/fs2.js +1836 -1836
- package/module.js +21 -21
- package/old/single-control-server.js +418 -418
- package/package.json +44 -42
- package/publishing/function-publisher.js +202 -202
- package/publishing/notes.md +5 -5
- package/publishing/observable-publisher.js +118 -118
- package/publishing/resource-publisher.js +306 -306
- package/resources/data-resource.js +104 -104
- package/resources/fs-resource.js +148 -148
- package/resources/jsbuilder/Abstract_Single_Declaration.js +105 -0
- package/resources/jsbuilder/Abstract_Single_Declaration_Sequence.js +43 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node.js +62 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node_Group.js +42 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Group_Shared.js +62 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node.js +94 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_0-Core.js +228 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_1-Babel.js +338 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_10-Changing.js +40 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.1-Child.js +97 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.2-Parent.js +38 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.3-Ancestor.js +62 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.2-Inner.js +44 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.3-All.js +73 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.4-Sibling.js +93 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.5-Available_In_Scope.js +29 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.9-Signature.js +116 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3-Basics.js +160 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.0-Basics_First.js +179 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.1-Basics_Second.js +88 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.99-Basics_Last.js +92 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1-Basics_Each.js +137 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1.5-Basics_Count.js +74 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.2-Basics_Filter.js +40 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.3-Basics_Collect.js +86 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.4-Basics_Select.js +43 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.5-Basics_Find.js +41 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.6-Basics_Callmap.js +55 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_4.0-Index_Indexes.js +46 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_4.1-Index.js +344 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.0-Category.js +39 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.1-Category_Identifier.js +31 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.2-Category_Literal.js +29 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.3-Category_Expression.js +27 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.4-Category_Pattern.js +9 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.5-Category_Declaration.js +44 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.6-Category_Statement.js +22 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.0-Type.js +87 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.1-Type_Class_Declaration.js +9 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.2-Type_Variable_Declaration.js +28 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.3-Type_Variable_Declarator.js +29 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_7-Query.js +737 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_8-Features.js +65 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_9-Planning.js +32 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Arrangement.js +15 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object.js +306 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature.js +78 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declaration.js +249 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declarator.js +139 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature.js +10 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exported.js +101 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exports.js +61 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Interpreted.js +180 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/_JSGUI_Root_Node_Interpreted.js +43 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/special_case_objectassign_to_object.js +12 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Group.js +35 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Operation.js +11 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Operation_On_Relationship.js +32 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Ordered_Relationship_Node_To_Group.js +38 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Ordinal.js +40 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Ordinal_Relationship.js +25 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_To_Group.js +201 -0
- package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_Within_Group_To_Node.js +44 -0
- package/resources/jsbuilder/JS_AST/_JS_AST_Node_3.8-Query_Features.js +77 -0
- package/resources/jsbuilder/JS_AST/query/all.js +0 -0
- package/resources/jsbuilder/JS_AST/query/enable_array_as_queryable.js +228 -0
- package/resources/jsbuilder/JS_AST/query/find_object_keys.js +405 -0
- package/resources/jsbuilder/JS_AST/query/node_queries.js +9 -0
- package/resources/jsbuilder/JS_AST/query/root_queries.js +0 -0
- package/resources/jsbuilder/JS_AST/query/root_query_identidy.js +12 -0
- package/resources/jsbuilder/JS_AST_Node_Extended/JSGUI_Singular_Declaration.js +86 -0
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Declaration.js +124 -0
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended.js +88 -0
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended_0-Core.js +11 -0
- package/resources/jsbuilder/JS_Builder.js +10 -36
- package/resources/jsbuilder/JS_File/Feature/JS_File_Declared_Object.js +32 -0
- package/resources/jsbuilder/JS_File/Feature/JS_File_Exported_Object_Info.js +26 -0
- package/resources/jsbuilder/JS_File/Feature/JS_File_Exports.js +79 -0
- package/resources/jsbuilder/JS_File/Feature/JS_File_Feature.js +18 -0
- package/resources/jsbuilder/JS_File/Feature/JS_File_Imported_Object_Info.js +26 -0
- package/resources/jsbuilder/JS_File/Feature/JS_File_Imports.js +9 -0
- package/resources/jsbuilder/JS_File/JS_File.js +12 -0
- package/resources/jsbuilder/JS_File/JS_File_0-Core.js +202 -0
- package/resources/jsbuilder/JS_File/JS_File_1-Early_Parse.js +175 -0
- package/resources/jsbuilder/JS_File/JS_File_2-Babel.js +81 -0
- package/resources/jsbuilder/JS_File/JS_File_3-JS_AST_Node.js +86 -0
- package/resources/jsbuilder/JS_File/JS_File_4-Query.js +414 -0
- package/resources/jsbuilder/JS_File/JS_File_4.1-Query_Features.js +415 -0
- package/resources/jsbuilder/JS_File/JS_File_5-Planning.js +59 -0
- package/resources/jsbuilder/JS_File/JS_File_6-Changing.js +24 -0
- package/resources/jsbuilder/JS_File/JS_File_Export_Reference.js +12 -0
- package/resources/jsbuilder/JS_File/JS_File_Import_Reference.js +24 -0
- package/resources/jsbuilder/JS_File/JS_File_Import_References.js +32 -0
- package/resources/jsbuilder/JS_File/JS_File_Processor.js +16 -0
- package/resources/jsbuilder/JS_File/JS_Files.js +16 -0
- package/resources/jsbuilder/Module.js +14 -0
- package/resources/jsbuilder/Platform.js +13 -53
- package/resources/jsbuilder/Platforms.js +69 -15
- package/resources/jsbuilder/Project.js +109 -0
- package/resources/jsbuilder/Reference.js +1 -1
- package/resources/jsbuilder/Reference_Sequence.js +16 -7
- package/resources/jsbuilder/Scope.js +30 -0
- package/resources/jsbuilder/Variable_Name_Provider.js +43 -0
- package/resources/jsbuilder/_JS_File.js +226 -0
- package/resources/jsbuilder/ast_query.js +21 -0
- package/resources/jsbuilder/babel/babel_consts.js +150 -0
- package/resources/jsbuilder/babel/babel_node_tools.js +542 -0
- package/resources/jsbuilder/babel/deep_iterate/deep_iterate_babel.js +604 -0
- package/resources/jsbuilder/build.js +16 -0
- package/resources/jsbuilder/platform_notes.md +66 -0
- package/resources/jsbuilder/test/test_ast_node.js +451 -0
- package/resources/jsbuilder/test/test_js_file.js +303 -11
- package/resources/jsbuilder/test/test_project.js +157 -0
- package/resources/local-server-info-resource.js +78 -78
- package/resources/process-js.js +537 -537
- package/resources/server-resource-pool.js +84 -84
- package/resources/website-css-resource.js +411 -411
- package/resources/website-javascript-resource.js +761 -751
- package/resources/website-resource.js +390 -390
- package/resources/website-static-html-resource.js +196 -196
- package/server.js +170 -170
- package/single-control-server.js +398 -398
- package/single-page-app.js +129 -129
- package/resources/jsbuilder/Declaration.js +0 -15
- package/resources/jsbuilder/Declaration_Sequence.js +0 -15
- package/resources/jsbuilder/JS_File.js +0 -77
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const JS_AST_Node_Basics_Second = require('./JS_AST_Node_3.0.1-Basics_Second');
|
|
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_Last extends JS_AST_Node_Basics_Second {
|
|
32
|
+
constructor(spec = {}) {
|
|
33
|
+
super(spec);
|
|
34
|
+
|
|
35
|
+
// An abstract JS AST node
|
|
36
|
+
|
|
37
|
+
//const index = 'last'; // or -0 meaning last?
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
const {child_nodes} = this;
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
// first.child.declaration
|
|
45
|
+
// meaning it's not 'first.child'.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// First is a node condition?
|
|
50
|
+
// or short for get first?
|
|
51
|
+
|
|
52
|
+
// .first.child
|
|
53
|
+
// will need to be first.child.node
|
|
54
|
+
|
|
55
|
+
// .first.declaration
|
|
56
|
+
// .first.child.declaration
|
|
57
|
+
// want it to operate as read in English.
|
|
58
|
+
|
|
59
|
+
// maybe function chaining is the way?
|
|
60
|
+
|
|
61
|
+
// JS_AST_Ordinal
|
|
62
|
+
|
|
63
|
+
const ordinal = this.last = new JS_AST_Ordinal({
|
|
64
|
+
origin: this,
|
|
65
|
+
//relationship_to: 'first',
|
|
66
|
+
//number: 'last'
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const {child} = this;
|
|
70
|
+
// JS_AST_Ordinal_Relationship
|
|
71
|
+
// Abstract node with a specified type?
|
|
72
|
+
// Or something else?
|
|
73
|
+
|
|
74
|
+
// Relationship of node to node.
|
|
75
|
+
|
|
76
|
+
const ordinal_child = ordinal.child = new JS_AST_Ordinal_Relationship({
|
|
77
|
+
ordinal: ordinal,
|
|
78
|
+
relationship: child
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
Object.defineProperty(ordinal_child, 'node', {
|
|
82
|
+
get() {
|
|
83
|
+
return child_nodes[child_nodes.length - 1];
|
|
84
|
+
},
|
|
85
|
+
enumerable: true,
|
|
86
|
+
configurable: false
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
module.exports = JS_AST_Node_Basics_Last;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
|
|
2
|
+
const JS_AST_Node_Basics_Last = require('./JS_AST_Node_3.0.99-Basics_Last');
|
|
3
|
+
const JS_AST_Operation = require('./JS_AST_Operation');
|
|
4
|
+
const JS_AST_Relationship = require('./JS_AST_Relationship_Node_To_Group');
|
|
5
|
+
|
|
6
|
+
const JS_AST_Operation_On_Relationship = require('./JS_AST_Operation_On_Relationship');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// Operation_On_Relationship
|
|
10
|
+
|
|
11
|
+
// Could make a more specific feature extraction part.
|
|
12
|
+
// Will come up with more:
|
|
13
|
+
|
|
14
|
+
// 2.1 Identify
|
|
15
|
+
// 2.2 ??? - Extract_Feature?
|
|
16
|
+
|
|
17
|
+
// Will identify more information about what JS is contained.
|
|
18
|
+
// Eg if it's a recognised code library structure that can be extracted.
|
|
19
|
+
// Identify the main block of declarations in a (library or framework) file.
|
|
20
|
+
// Identify the variable definitions in there.
|
|
21
|
+
|
|
22
|
+
// Need more capability here to find and match specified features.
|
|
23
|
+
|
|
24
|
+
// Asking questions about a piece of code - questions to later determine what it is and how to use it.
|
|
25
|
+
|
|
26
|
+
// .matches_type_signature(signature)
|
|
27
|
+
|
|
28
|
+
// . but using a tree is better for checking multiple signatures at once.
|
|
29
|
+
|
|
30
|
+
// basically 'deep iterate', though could apply to .child or .ancestor
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// More about traversal than query?
|
|
34
|
+
|
|
35
|
+
class JS_AST_Node_Basics_Each extends JS_AST_Node_Basics_Last {
|
|
36
|
+
constructor(spec = {}) {
|
|
37
|
+
super(spec);
|
|
38
|
+
const {each_child_node, filter_each_child_node} = this;
|
|
39
|
+
|
|
40
|
+
const myeach = new JS_AST_Operation({name: 'each'});
|
|
41
|
+
|
|
42
|
+
////const myeach = cb => deep_iterate(cb);
|
|
43
|
+
|
|
44
|
+
Object.assign(this, {
|
|
45
|
+
each: myeach
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// .child
|
|
49
|
+
// .inner
|
|
50
|
+
// .node (seems like we need this now rather than just calling each)
|
|
51
|
+
// now each is an operation, we need to explicitly tell it what to operate on.
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
const child = new JS_AST_Relationship({
|
|
55
|
+
name: 'child'
|
|
56
|
+
});
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
// each.identifier is another relationship?
|
|
60
|
+
// is_within??? or the within relationship?
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
// And an Operation_Relationship?
|
|
68
|
+
// each child
|
|
69
|
+
|
|
70
|
+
// Operation_Relationship_Node?
|
|
71
|
+
// Since it's each child node, or some kind of node here, we can make use of that somehow.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
const each_child = new JS_AST_Operation_On_Relationship({
|
|
76
|
+
operation: myeach,
|
|
77
|
+
related: child
|
|
78
|
+
}); // But incomplete without being told what to operate on.
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
myeach.child = each_child;
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
// each.identifier
|
|
85
|
+
// has to be a function for the nicest syntax.
|
|
86
|
+
|
|
87
|
+
myeach.identifier = callback => {
|
|
88
|
+
this.filter_deep_iterate(node => node.is_identifier, callback);
|
|
89
|
+
}
|
|
90
|
+
myeach.declaration = callback => {
|
|
91
|
+
this.filter_deep_iterate(node => node.is_declaration, callback);
|
|
92
|
+
}
|
|
93
|
+
myeach.statement = callback => {
|
|
94
|
+
this.filter_deep_iterate(node => node.is_statement, callback);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
//child.each = each_child;
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
const each_child_assignment_expression = (callback) => filter_each_child_node(node => node.type === 'AssignmentExpression', callback);
|
|
108
|
+
const each_child_expression_statement = (callback) => filter_each_child_node(node => node.type === 'ExpressionStatement', callback);
|
|
109
|
+
//const each_child_declaration = (callback) => filter_each_child_node(node => node.is_declaration, callback);
|
|
110
|
+
//const each_declaration_child_node = (callback) => filter_each_child_node(js_ast_node => js_ast_node.is_declaration, callback);
|
|
111
|
+
const each_assignment_expression_child_node = callback => filter_each_child_node(node => node.type === "AssignmentExpression");
|
|
112
|
+
|
|
113
|
+
const each_inner_declaration = (callback) => {
|
|
114
|
+
filter_inner_deep_iterate(node => node.is_declaration, node => {
|
|
115
|
+
callback(node);
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const each_inner_variable_declarator = callback => each_inner_node_of_type('VariableDeclarator', callback);
|
|
120
|
+
const each_inner_identifier = callback => each_inner_node_of_type('Identifier', callback);
|
|
121
|
+
|
|
122
|
+
//each_child.node = cb => each_child_node(callback);
|
|
123
|
+
|
|
124
|
+
//const mechild = myeach.child = cb => each_child_node(cb);
|
|
125
|
+
|
|
126
|
+
//mechild.expression_statement = cb => each_child_expression_statement(cb);
|
|
127
|
+
//mechild.assignment_expression = cb => each_child_assignment_expression(cb);
|
|
128
|
+
//mechild.declaration = cb => each_child_declaration(cb);
|
|
129
|
+
*/
|
|
130
|
+
this.each = myeach;
|
|
131
|
+
//this.each_child_declaration = each_child_declaration;
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
module.exports = JS_AST_Node_Basics_Each
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
|
|
2
|
+
const JS_AST_Node_Basics_Each = require('./JS_AST_Node_3.1-Basics_Each');
|
|
3
|
+
|
|
4
|
+
const JS_AST_Operation = require('./JS_AST_Operation');
|
|
5
|
+
const JS_AST_Relationship = require('./JS_AST_Relationship');
|
|
6
|
+
const JS_AST_Operation_On_Relationship = require('./JS_AST_Operation_On_Relationship');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// Could make a more specific feature extraction part.
|
|
10
|
+
// Will come up with more:
|
|
11
|
+
|
|
12
|
+
// 2.1 Identify
|
|
13
|
+
// 2.2 ??? - Extract_Feature?
|
|
14
|
+
|
|
15
|
+
// Will identify more information about what JS is contained.
|
|
16
|
+
// Eg if it's a recognised code library structure that can be extracted.
|
|
17
|
+
// Identify the main block of declarations in a (library or framework) file.
|
|
18
|
+
// Identify the variable definitions in there.
|
|
19
|
+
|
|
20
|
+
// Need more capability here to find and match specified features.
|
|
21
|
+
|
|
22
|
+
// Asking questions about a piece of code - questions to later determine what it is and how to use it.
|
|
23
|
+
|
|
24
|
+
// .matches_type_signature(signature)
|
|
25
|
+
|
|
26
|
+
// . but using a tree is better for checking multiple signatures at once.
|
|
27
|
+
|
|
28
|
+
// basically 'deep iterate', though could apply to .child or .ancestor
|
|
29
|
+
|
|
30
|
+
// Currently not used anyway. Will make the more advanced .query system.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class JS_AST_Node_Basics_Count extends JS_AST_Node_Basics_Each {
|
|
35
|
+
constructor(spec = {}) {
|
|
36
|
+
super(spec);
|
|
37
|
+
|
|
38
|
+
const {each_child_node, filter_each_child_node} = this;
|
|
39
|
+
|
|
40
|
+
// JS_AST_Property_Operation rather than JS_AST_Function_Operation perhaps
|
|
41
|
+
|
|
42
|
+
const count = new JS_AST_Operation({name: count});
|
|
43
|
+
|
|
44
|
+
const {child} = this;
|
|
45
|
+
//const child = new JS_AST_Relationship({
|
|
46
|
+
// name: 'child'
|
|
47
|
+
//});
|
|
48
|
+
|
|
49
|
+
const count_child = new JS_AST_Operation_On_Relationship({
|
|
50
|
+
operation: count,
|
|
51
|
+
relationship: child
|
|
52
|
+
});
|
|
53
|
+
count.child = count_child;
|
|
54
|
+
|
|
55
|
+
//child.count = count_child;
|
|
56
|
+
|
|
57
|
+
// .count.child.node
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
Object.defineProperty(count_child, 'node', {
|
|
61
|
+
get() {
|
|
62
|
+
return this.child_nodes.length;
|
|
63
|
+
},
|
|
64
|
+
//set(newValue) { bValue = newValue; },
|
|
65
|
+
enumerable: true,
|
|
66
|
+
configurable: false
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
this.count = count;
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
module.exports = JS_AST_Node_Basics_Count
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const JS_AST_Node_Basics_Each = require('./JS_AST_Node_3.1-Basics_Each');
|
|
4
|
+
const JS_AST_Operation = require('./JS_AST_Operation');
|
|
5
|
+
const JS_AST_Relationship_Node_To_Group = require('./JS_AST_Relationship_Node_To_Group');
|
|
6
|
+
|
|
7
|
+
const JS_AST_Operation_On_Relationship = require('./JS_AST_Operation_On_Relationship');
|
|
8
|
+
|
|
9
|
+
class JS_AST_Node_Basics_Filter extends JS_AST_Node_Basics_Each {
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
constructor(spec = {}) {
|
|
13
|
+
super(spec);
|
|
14
|
+
const filter = new JS_AST_Operation({name: 'filter'});
|
|
15
|
+
|
|
16
|
+
const {child, inner, all} = this;
|
|
17
|
+
const {inner_deep_iterate, each_child_node, deep_iterate} = this;
|
|
18
|
+
|
|
19
|
+
const filter_deep_iterate = (fn_filter, callback) => deep_iterate((node) => fn_filter(node) ? callback(node) : undefined)
|
|
20
|
+
const filter_inner_deep_iterate = (fn_filter, callback) => inner_deep_iterate((node) => fn_filter(node) ? callback(node) : undefined)
|
|
21
|
+
const filter_each_child_node = (fn_filter, callback) => each_child_node(js_ast_node => {
|
|
22
|
+
if (fn_filter(js_ast_node)) {
|
|
23
|
+
callback(js_ast_node);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const filter_child_nodes_by_type = (type, callback) => filter_each_child_node(n => n.type === type, callback);
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
this.filter = filter;
|
|
31
|
+
this.filter_deep_iterate = filter_deep_iterate;
|
|
32
|
+
this.filter_inner_deep_iterate = filter_inner_deep_iterate;
|
|
33
|
+
this.filter_each_child_node = filter_each_child_node;
|
|
34
|
+
this.filter_child_nodes_by_type = filter_child_nodes_by_type;
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
module.exports = JS_AST_Node_Basics_Filter
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const JS_AST_Node_Basics_Filter = require('./JS_AST_Node_3.2-Basics_Filter');
|
|
4
|
+
|
|
5
|
+
const JS_AST_Operation = require('./JS_AST_Operation');
|
|
6
|
+
const JS_AST_Relationship = require('./JS_AST_Relationship_Node_To_Group');
|
|
7
|
+
|
|
8
|
+
const JS_AST_Operation_On_Relationship = require('./JS_AST_Operation_On_Relationship');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Collect is still a verb.
|
|
13
|
+
// Maybe all verbs should be functions.
|
|
14
|
+
// Some values with different syntax could be properties.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class JS_AST_Node_Basics_Collect extends JS_AST_Node_Basics_Filter {
|
|
18
|
+
constructor(spec = {}) {
|
|
19
|
+
super(spec);
|
|
20
|
+
|
|
21
|
+
const collect = new JS_AST_Operation({name: 'collect'});
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// or 'deep'? Or just know that 'all' does not include ancestors.
|
|
25
|
+
const {child, inner, all} = this;
|
|
26
|
+
const {inner_deep_iterate, deep_iterate, filter_deep_iterate} = this;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
//const collect_child_nodes = () => this.child_nodes;
|
|
30
|
+
//const collect_child_identifiers = () => this.child_nodes.filter(node => node.is_identifier);
|
|
31
|
+
//const collect_child_declarations = () => this.child_nodes.filter(node => node.is_declaration);
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
let _collected_inner_nodes;
|
|
35
|
+
const collect_inner_nodes = () => {
|
|
36
|
+
if (!_collected_inner_nodes) {
|
|
37
|
+
_collected_inner_nodes = [];
|
|
38
|
+
inner_deep_iterate(node => _collected_inner_nodes.push(node));
|
|
39
|
+
}
|
|
40
|
+
return _collected_inner_nodes;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const _collect_all = () => {
|
|
44
|
+
const res = [];
|
|
45
|
+
deep_iterate(node => res.push(node));
|
|
46
|
+
return res;
|
|
47
|
+
}
|
|
48
|
+
const _collect_child = () => {
|
|
49
|
+
return this.child_nodes; // maybe into a new array?
|
|
50
|
+
}
|
|
51
|
+
const _collect_inner = () => {
|
|
52
|
+
const res = [];
|
|
53
|
+
inner_deep_iterate(node => {
|
|
54
|
+
if (node !== this) {
|
|
55
|
+
res.push(node);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return res;
|
|
59
|
+
}
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
let fn_collect_all, fn_collect_child, fn_collect_inner;
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const _collect_all_identifiers = () => {
|
|
67
|
+
const res = [];
|
|
68
|
+
filter_deep_iterate(node => node.is_identifier, node => res.push(node));
|
|
69
|
+
return res;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const _select_inner = (fn_select) => {
|
|
73
|
+
const res = [];
|
|
74
|
+
inner_deep_iterate(node => {
|
|
75
|
+
if (node !== this && fn_select(node)) {
|
|
76
|
+
res.push(node);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return res;
|
|
80
|
+
}
|
|
81
|
+
*/
|
|
82
|
+
this.collect = collect;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
module.exports = JS_AST_Node_Basics_Collect
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const JS_AST_Node_Basics_Collect = require('./JS_AST_Node_3.3-Basics_Collect');
|
|
4
|
+
const JS_AST_Operation = require('./JS_AST_Operation');
|
|
5
|
+
const JS_AST_Relationship_Node_To_Group = require('./JS_AST_Relationship_Node_To_Group');
|
|
6
|
+
const JS_AST_Operation_On_Relationship = require('./JS_AST_Operation_On_Relationship');
|
|
7
|
+
|
|
8
|
+
const enable_array_as_queryable = require('./query/enable_array_as_queryable');
|
|
9
|
+
|
|
10
|
+
class JS_AST_Node_Basics_Select extends JS_AST_Node_Basics_Collect {
|
|
11
|
+
constructor(spec = {}) {
|
|
12
|
+
super(spec);
|
|
13
|
+
|
|
14
|
+
const {filter_deep_iterate, filter_each_child_node, inner_deep_iterate} = this;
|
|
15
|
+
const select_all = (fn_select) => {
|
|
16
|
+
const res = [];
|
|
17
|
+
filter_deep_iterate(fn_select, node => res.push(node));
|
|
18
|
+
enable_array_as_queryable(res);
|
|
19
|
+
|
|
20
|
+
return res;
|
|
21
|
+
}
|
|
22
|
+
const select_child = (fn_select) => {
|
|
23
|
+
const res = [];
|
|
24
|
+
filter_each_child_node(fn_select, node => res.push(node));
|
|
25
|
+
return res;
|
|
26
|
+
}
|
|
27
|
+
const select_inner = (fn_select) => {
|
|
28
|
+
const res = [];
|
|
29
|
+
inner_deep_iterate(node => {
|
|
30
|
+
if (node !== this && fn_select(node)) {
|
|
31
|
+
res.push(node);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return res;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
this.select_all = select_all;
|
|
38
|
+
this.select_child = select_child;
|
|
39
|
+
this.select_inner = select_inner;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
module.exports = JS_AST_Node_Basics_Select
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const JS_AST_Node_Basics_Select = require('./JS_AST_Node_3.4-Basics_Select');
|
|
4
|
+
|
|
5
|
+
const JS_AST_Operation = require('./JS_AST_Operation');
|
|
6
|
+
const JS_AST_Relationship = require('./JS_AST_Relationship_Node_To_Group');
|
|
7
|
+
const JS_AST_Operation_On_Relationship = require('./JS_AST_Operation_On_Relationship');
|
|
8
|
+
|
|
9
|
+
class JS_AST_Node_Basics_Find extends JS_AST_Node_Basics_Select {
|
|
10
|
+
constructor(spec = {}) {
|
|
11
|
+
super(spec);
|
|
12
|
+
const {deep_iterate} = this;
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
// Not so sure we need this kind of operation object now.
|
|
16
|
+
// .query is how queries will be done in the future.
|
|
17
|
+
|
|
18
|
+
//const find = new JS_AST_Operation({name: 'find'});
|
|
19
|
+
|
|
20
|
+
const find_node = (fn_match) => {
|
|
21
|
+
let res;
|
|
22
|
+
deep_iterate((js_ast_node, path, depth, stop) => {
|
|
23
|
+
if (fn_match(js_ast_node)) {
|
|
24
|
+
if (!res) res = js_ast_node;
|
|
25
|
+
stop();
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return res;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// find.child.node?
|
|
33
|
+
//
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
//find.node = fn_match => find_node(fn_match);
|
|
37
|
+
this.find_node = find_node;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = JS_AST_Node_Basics_Find
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
// 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.
|
|
6
|
+
|
|
7
|
+
// Indexing at every level looks like it would be useful.
|
|
8
|
+
// so in order to get the info about how the names relate to nodes we consult indexes.
|
|
9
|
+
|
|
10
|
+
const { each } = require('lang-mini');
|
|
11
|
+
const JS_AST_Node_Basics_Find = require('./JS_AST_Node_3.5-Basics_Find');
|
|
12
|
+
const JS_AST_Node_Indexes = require('./JS_AST_Node_4.0-Index_Indexes');
|
|
13
|
+
|
|
14
|
+
class JS_AST_Node_Index extends JS_AST_Node_Basics_Find {
|
|
15
|
+
constructor(spec = {}) {
|
|
16
|
+
super(spec);
|
|
17
|
+
const {deep_iterate, each_child_node, inner, child} = this;
|
|
18
|
+
|
|
19
|
+
//const callmap = {};
|
|
20
|
+
|
|
21
|
+
const callmap = (fntostring, map_handlers, default_handler) => {
|
|
22
|
+
const str = fntostring(this);
|
|
23
|
+
// such as get the signature
|
|
24
|
+
let res;
|
|
25
|
+
if (map_handlers[str]) {
|
|
26
|
+
res = map_handlers[str](this);
|
|
27
|
+
} else {
|
|
28
|
+
res = default_handler(this);
|
|
29
|
+
}
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const callmap_deep_iterate = (fntostring, map_handlers, default_handler) => {
|
|
34
|
+
deep_iterate(node => {
|
|
35
|
+
node.callmap(fntostring, map_handlers, default_handler);
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
const callmap_child_nodes = (fntostring, map_handlers, default_handler) => {
|
|
39
|
+
each_child_node(node => {
|
|
40
|
+
node.callmap(fntostring, map_handlers, default_handler);
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const signature_callmap_deep_iterate = (map_handlers, default_handler) => callmap_deep_iterate(node => node.sugnature, map_handlers, default_handler);
|
|
45
|
+
const signature_callmap_child_nodes = (map_handlers, default_handler) => callmap_child_nodes(node => node.sugnature, map_handlers, default_handler);
|
|
46
|
+
//
|
|
47
|
+
|
|
48
|
+
this.callmap = callmap;
|
|
49
|
+
this.callmap_deep_iterate = callmap_deep_iterate;
|
|
50
|
+
this.callmap_child_nodes = callmap_child_nodes;
|
|
51
|
+
this.signature_callmap_deep_iterate = signature_callmap_deep_iterate;
|
|
52
|
+
this.signature_callmap_child_nodes = signature_callmap_child_nodes;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
module.exports = JS_AST_Node_Index;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Indexes because it keeps multiple indexes, ie an index of indexes.
|
|
2
|
+
|
|
3
|
+
class JS_AST_Node_Indexes {
|
|
4
|
+
// Not a type of JS_AST_Node! Change the name?
|
|
5
|
+
constructor(spec = {}) {
|
|
6
|
+
const map_indexes = new Map();
|
|
7
|
+
|
|
8
|
+
const get_index = index_name => {
|
|
9
|
+
if (!map_indexes.has(index_name)) {
|
|
10
|
+
map_indexes.set(index_name, new Map());
|
|
11
|
+
}
|
|
12
|
+
const map_index = map_indexes.get(index_name);
|
|
13
|
+
return map_index;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const set = (index_name, key, value) => {
|
|
17
|
+
const index = get_index(index_name);
|
|
18
|
+
////const arr =
|
|
19
|
+
if (!index.has(key)) {
|
|
20
|
+
index.set(key, []);
|
|
21
|
+
}
|
|
22
|
+
const arr = index.get(key);
|
|
23
|
+
arr.push(value);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const get = (index_name, key) => {
|
|
27
|
+
const map_idx = map_indexes.get(index_name);
|
|
28
|
+
if (map_idx) {
|
|
29
|
+
const arr_items = map_idx.get(key);
|
|
30
|
+
return arr_items;
|
|
31
|
+
} else {
|
|
32
|
+
throw 'stop';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const has_index = (index_name) => map_indexes.has(index_name);
|
|
37
|
+
|
|
38
|
+
Object.assign(this, {
|
|
39
|
+
set: set,
|
|
40
|
+
get: get,
|
|
41
|
+
has_index: has_index
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
module.exports = JS_AST_Node_Indexes;
|