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,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;
|