jostraca 0.1.2 → 0.1.3

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.
@@ -4,13 +4,14 @@ type JostracaOptions = {
4
4
  };
5
5
  type Component = (props: any, children?: any) => void;
6
6
  declare function Jostraca(): {
7
- cmp: (component: Function) => Component;
8
- each: (subject: any, apply?: any) => any;
9
7
  generate: (opts: JostracaOptions, root: Function) => void;
10
- Project: Component;
11
- Code: Component;
12
- File: Component;
13
- Folder: Component;
14
8
  };
9
+ declare const Code: Component;
10
+ declare const File: Component;
11
+ declare const Project: Component;
12
+ declare const Folder: Component;
13
+ declare function cmp(component: Function): Component;
14
+ declare function each(subject: any, apply?: any): any;
15
+ declare function select(key: any, map: Record<string, Function>): any;
15
16
  export type { JostracaOptions, Component, };
16
- export { Jostraca, };
17
+ export { Jostraca, cmp, each, select, Project, Code, File, Folder, };
package/dist/jostraca.js CHANGED
@@ -24,11 +24,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  return result;
25
25
  };
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.Folder = exports.File = exports.Code = exports.Project = void 0;
27
28
  exports.Jostraca = Jostraca;
29
+ exports.cmp = cmp;
30
+ exports.each = each;
31
+ exports.select = select;
28
32
  const Fs = __importStar(require("node:fs"));
29
33
  const node_async_hooks_1 = require("node:async_hooks");
34
+ const GLOBAL = global;
30
35
  function Jostraca() {
31
- const GLOBAL = global;
32
36
  GLOBAL.jostraca = new node_async_hooks_1.AsyncLocalStorage();
33
37
  function generate(opts, root) {
34
38
  const fs = opts.fs || Fs;
@@ -38,6 +42,8 @@ function Jostraca() {
38
42
  root();
39
43
  const ctx$ = GLOBAL.jostraca.getStore();
40
44
  const node = ctx$.node;
45
+ // console.log('JOSTRACA TOP')
46
+ // console.dir(node, { depth: null })
41
47
  build(node, {
42
48
  fs,
43
49
  current: {
@@ -48,54 +54,7 @@ function Jostraca() {
48
54
  });
49
55
  });
50
56
  }
51
- function cmp(component) {
52
- const cf = (props, children) => {
53
- props = props || {};
54
- if (null == props || 'object' !== typeof props) {
55
- props = { arg: props };
56
- }
57
- props.ctx$ = GLOBAL.jostraca.getStore();
58
- children = 'function' === typeof children ? [children] : children;
59
- let node = {
60
- kind: 'content',
61
- children: []
62
- };
63
- const parent = props.ctx$.node = (props.ctx$.node || node);
64
- const siblings = props.ctx$.children = (props.ctx$.children || []);
65
- siblings.push(node);
66
- props.ctx$.children = node.children;
67
- props.ctx$.node = node;
68
- let out = component(props, children);
69
- props.ctx$.children = siblings;
70
- props.ctx$.node = parent;
71
- return out;
72
- };
73
- Object.defineProperty(cf, 'name', { value: component.name });
74
- return cf;
75
- }
76
- function each(subject, apply) {
77
- if (null == apply) {
78
- if (Array.isArray(subject)) {
79
- for (let fn of subject) {
80
- fn();
81
- }
82
- }
83
- }
84
- else {
85
- if (Array.isArray(subject)) {
86
- return subject.map(apply);
87
- }
88
- else {
89
- const entries = Object.entries(subject);
90
- if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
91
- entries.sort((a, b) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0);
92
- }
93
- return entries.map((n, ...args) => apply(n[1], [0], ...args));
94
- }
95
- }
96
- }
97
57
  function build(topnode, ctx) {
98
- // console.dir(topnode, { depth: null })
99
58
  step(topnode, ctx);
100
59
  }
101
60
  function step(node, ctx) {
@@ -148,42 +107,97 @@ function Jostraca() {
148
107
  },
149
108
  content: {
150
109
  before(node, ctx) {
151
- const ccontent = ctx.current.content = node;
152
- ctx.current.file.content.push(ccontent.content);
110
+ const content = ctx.current.content = node;
111
+ ctx.current.file.content.push(content.content);
112
+ },
113
+ after(_node, _ctx) {
114
+ },
115
+ },
116
+ none: {
117
+ before(_node, ctx) {
153
118
  },
154
119
  after(_node, _ctx) {
155
120
  },
156
121
  },
157
122
  };
158
- const Code = cmp(function Code(props) {
159
- let src = props.arg;
160
- props.ctx$.node.content = src;
161
- });
162
- const File = cmp(function File(props, children) {
163
- props.ctx$.node.kind = 'file';
164
- props.ctx$.node.name = props.name;
165
- // Code('// FILE START: ' + props.name + '\n')
166
- each(children);
167
- // Code('// FILE END: ' + props.name + '\n')
168
- });
169
- const Project = cmp(function Project(props, children) {
170
- props.ctx$.node.kind = 'project';
171
- props.ctx$.node.name = props.name;
172
- each(children);
173
- });
174
- const Folder = cmp(function Folder(props, children) {
175
- props.ctx$.node.kind = 'folder';
176
- props.ctx$.node.name = props.name;
177
- each(children);
178
- });
179
123
  return {
180
- cmp,
181
- each,
182
124
  generate,
183
- Project,
184
- Code,
185
- File,
186
- Folder,
187
125
  };
188
126
  }
127
+ const Code = cmp(function Code(props) {
128
+ props.ctx$.node.kind = 'content';
129
+ let src = props.arg;
130
+ props.ctx$.node.content = src;
131
+ });
132
+ exports.Code = Code;
133
+ const File = cmp(function File(props, children) {
134
+ props.ctx$.node.kind = 'file';
135
+ props.ctx$.node.name = props.name;
136
+ // Code('// FILE START: ' + props.name + '\n')
137
+ each(children);
138
+ // Code('// FILE END: ' + props.name + '\n')
139
+ });
140
+ exports.File = File;
141
+ const Project = cmp(function Project(props, children) {
142
+ props.ctx$.node.kind = 'project';
143
+ props.ctx$.node.name = props.name;
144
+ each(children);
145
+ });
146
+ exports.Project = Project;
147
+ const Folder = cmp(function Folder(props, children) {
148
+ props.ctx$.node.kind = 'folder';
149
+ props.ctx$.node.name = props.name;
150
+ each(children);
151
+ });
152
+ exports.Folder = Folder;
153
+ function cmp(component) {
154
+ const cf = (props, children) => {
155
+ props = props || {};
156
+ if (null == props || 'object' !== typeof props) {
157
+ props = { arg: props };
158
+ }
159
+ props.ctx$ = GLOBAL.jostraca.getStore();
160
+ children = 'function' === typeof children ? [children] : children;
161
+ let node = {
162
+ kind: 'none',
163
+ children: []
164
+ };
165
+ const parent = props.ctx$.node = (props.ctx$.node || node);
166
+ const siblings = props.ctx$.children = (props.ctx$.children || []);
167
+ siblings.push(node);
168
+ props.ctx$.children = node.children;
169
+ props.ctx$.node = node;
170
+ let out = component(props, children);
171
+ props.ctx$.children = siblings;
172
+ props.ctx$.node = parent;
173
+ return out;
174
+ };
175
+ Object.defineProperty(cf, 'name', { value: component.name });
176
+ return cf;
177
+ }
178
+ function each(subject, apply) {
179
+ if (null == apply) {
180
+ if (Array.isArray(subject)) {
181
+ for (let fn of subject) {
182
+ fn();
183
+ }
184
+ }
185
+ }
186
+ else {
187
+ if (Array.isArray(subject)) {
188
+ return subject.map(apply);
189
+ }
190
+ else {
191
+ const entries = Object.entries(subject);
192
+ if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
193
+ entries.sort((a, b) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0);
194
+ }
195
+ return entries.map((n, ...args) => apply(n[1], [0], ...args));
196
+ }
197
+ }
198
+ }
199
+ function select(key, map) {
200
+ const fn = map && map[key];
201
+ return fn ? fn() : undefined;
202
+ }
189
203
  //# sourceMappingURL=jostraca.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jostraca.js","sourceRoot":"","sources":["../src/jostraca.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jostraca.js","sourceRoot":"","sources":["../src/jostraca.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jostraca",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "main": "dist/jostraca.js",
5
5
  "type": "commonjs",
6
6
  "types": "dist/jostraca.d.ts",
@@ -34,7 +34,7 @@
34
34
  ],
35
35
  "devDependencies": {
36
36
  "@hapi/code": "^9.0.3",
37
- "@types/node": "22.0.0",
37
+ "@types/node": "22.1.0",
38
38
  "esbuild": "^0.23.0",
39
39
  "memfs": "^4.11.1",
40
40
  "typescript": "^5.5.4"
package/src/jostraca.ts CHANGED
@@ -23,9 +23,11 @@ type Node = {
23
23
  type Component = (props: any, children?: any) => void
24
24
 
25
25
 
26
- function Jostraca() {
26
+ const GLOBAL = (global as any)
27
+
27
28
 
28
- const GLOBAL = (global as any)
29
+
30
+ function Jostraca() {
29
31
  GLOBAL.jostraca = new AsyncLocalStorage()
30
32
 
31
33
 
@@ -39,6 +41,9 @@ function Jostraca() {
39
41
  const ctx$ = GLOBAL.jostraca.getStore()
40
42
  const node = ctx$.node
41
43
 
44
+ // console.log('JOSTRACA TOP')
45
+ // console.dir(node, { depth: null })
46
+
42
47
  build(
43
48
  node,
44
49
  {
@@ -53,65 +58,7 @@ function Jostraca() {
53
58
  }
54
59
 
55
60
 
56
- function cmp(component: Function): Component {
57
- const cf = (props: any, children?: any) => {
58
- props = props || {}
59
- if (null == props || 'object' !== typeof props) {
60
- props = { arg: props }
61
- }
62
- props.ctx$ = GLOBAL.jostraca.getStore()
63
- children = 'function' === typeof children ? [children] : children
64
-
65
- let node = {
66
- kind: 'content',
67
- children: []
68
- }
69
-
70
- const parent = props.ctx$.node = (props.ctx$.node || node)
71
- const siblings = props.ctx$.children = (props.ctx$.children || [])
72
- siblings.push(node)
73
-
74
- props.ctx$.children = node.children
75
- props.ctx$.node = node
76
-
77
- let out = component(props, children)
78
-
79
- props.ctx$.children = siblings
80
- props.ctx$.node = parent
81
-
82
- return out
83
- }
84
- Object.defineProperty(cf, 'name', { value: component.name })
85
- return cf
86
- }
87
-
88
-
89
- function each(subject: any, apply?: any) {
90
- if (null == apply) {
91
- if (Array.isArray(subject)) {
92
- for (let fn of subject) {
93
- fn()
94
- }
95
- }
96
- }
97
- else {
98
- if (Array.isArray(subject)) {
99
- return subject.map(apply)
100
- }
101
- else {
102
- const entries: any = Object.entries(subject)
103
- if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
104
- entries.sort((a: any, b: any) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0)
105
- }
106
- return entries.map((n: any, ...args: any[]) =>
107
- apply(n[1], [0], ...args))
108
- }
109
- }
110
- }
111
-
112
-
113
61
  function build(topnode: Node, ctx: any) {
114
- // console.dir(topnode, { depth: null })
115
62
  step(topnode, ctx)
116
63
  }
117
64
 
@@ -186,70 +133,132 @@ function Jostraca() {
186
133
 
187
134
  content: {
188
135
  before(node: Node, ctx: any) {
189
- const ccontent = ctx.current.content = node
190
- ctx.current.file.content.push(ccontent.content)
136
+ const content = ctx.current.content = node
137
+ ctx.current.file.content.push(content.content)
191
138
  },
192
139
 
193
140
  after(_node: Node, _ctx: any) {
141
+ },
142
+ },
143
+
144
+
145
+ none: {
146
+ before(_node: Node, ctx: any) {
147
+ },
194
148
 
149
+ after(_node: Node, _ctx: any) {
195
150
  },
196
151
  },
197
152
 
153
+ }
154
+
198
155
 
156
+ return {
157
+ generate,
199
158
  }
159
+ }
200
160
 
201
161
 
162
+ const Code = cmp(function Code(props: any) {
163
+ props.ctx$.node.kind = 'content'
164
+ let src = props.arg
165
+ props.ctx$.node.content = src
166
+ })
202
167
 
203
- const Code = cmp(function Code(props: any) {
204
- let src = props.arg
205
- props.ctx$.node.content = src
206
- })
207
168
 
169
+ const File = cmp(function File(props: any, children: any) {
170
+ props.ctx$.node.kind = 'file'
171
+ props.ctx$.node.name = props.name
208
172
 
209
- const File = cmp(function File(props: any, children: any) {
210
- props.ctx$.node.kind = 'file'
211
- props.ctx$.node.name = props.name
173
+ // Code('// FILE START: ' + props.name + '\n')
212
174
 
213
- // Code('// FILE START: ' + props.name + '\n')
175
+ each(children)
214
176
 
215
- each(children)
177
+ // Code('// FILE END: ' + props.name + '\n')
178
+ })
216
179
 
217
- // Code('// FILE END: ' + props.name + '\n')
218
- })
219
180
 
181
+ const Project: Component = cmp(function Project(props: any, children: any) {
182
+ props.ctx$.node.kind = 'project'
183
+ props.ctx$.node.name = props.name
220
184
 
221
- const Project: Component = cmp(function Project(props: any, children: any) {
222
- props.ctx$.node.kind = 'project'
223
- props.ctx$.node.name = props.name
185
+ each(children)
186
+ })
224
187
 
225
- each(children)
226
- })
227
188
 
189
+ const Folder = cmp(function Folder(props: any, children: any) {
190
+ props.ctx$.node.kind = 'folder'
191
+ props.ctx$.node.name = props.name
228
192
 
229
- const Folder = cmp(function Folder(props: any, children: any) {
230
- props.ctx$.node.kind = 'folder'
231
- props.ctx$.node.name = props.name
193
+ each(children)
194
+ })
232
195
 
233
- each(children)
234
- })
235
196
 
197
+ function cmp(component: Function): Component {
198
+ const cf = (props: any, children?: any) => {
199
+ props = props || {}
200
+ if (null == props || 'object' !== typeof props) {
201
+ props = { arg: props }
202
+ }
203
+ props.ctx$ = GLOBAL.jostraca.getStore()
204
+ children = 'function' === typeof children ? [children] : children
236
205
 
206
+ let node = {
207
+ kind: 'none',
208
+ children: []
209
+ }
237
210
 
238
- return {
239
- cmp,
240
- each,
241
- generate,
211
+ const parent = props.ctx$.node = (props.ctx$.node || node)
212
+ const siblings = props.ctx$.children = (props.ctx$.children || [])
213
+ siblings.push(node)
214
+
215
+ props.ctx$.children = node.children
216
+ props.ctx$.node = node
217
+
218
+ let out = component(props, children)
219
+
220
+ props.ctx$.children = siblings
221
+ props.ctx$.node = parent
222
+
223
+ return out
224
+ }
225
+ Object.defineProperty(cf, 'name', { value: component.name })
226
+ return cf
227
+ }
242
228
 
243
- Project,
244
- Code,
245
- File,
246
- Folder,
229
+
230
+ function each(subject: any, apply?: any) {
231
+ if (null == apply) {
232
+ if (Array.isArray(subject)) {
233
+ for (let fn of subject) {
234
+ fn()
235
+ }
236
+ }
247
237
  }
238
+ else {
239
+ if (Array.isArray(subject)) {
240
+ return subject.map(apply)
241
+ }
242
+ else {
243
+ const entries: any = Object.entries(subject)
244
+ if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
245
+ entries.sort((a: any, b: any) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0)
246
+ }
247
+ return entries.map((n: any, ...args: any[]) =>
248
+ apply(n[1], [0], ...args))
249
+ }
250
+ }
251
+ }
248
252
 
249
253
 
254
+ function select(key: any, map: Record<string, Function>) {
255
+ const fn = map && map[key]
256
+ return fn ? fn() : undefined
250
257
  }
251
258
 
252
259
 
260
+
261
+
253
262
  export type {
254
263
  JostracaOptions,
255
264
  Component,
@@ -258,4 +267,13 @@ export type {
258
267
 
259
268
  export {
260
269
  Jostraca,
270
+ cmp,
271
+
272
+ each,
273
+ select,
274
+
275
+ Project,
276
+ Code,
277
+ File,
278
+ Folder,
261
279
  }