jostraca 0.1.2 → 0.1.4

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,17 @@ 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;
16
+ declare function get(root: any, path: string | string[]): any;
17
+ declare function camelify(input: any[] | string): string;
18
+ declare function snakeify(input: any[] | string): string;
15
19
  export type { JostracaOptions, Component, };
16
- export { Jostraca, };
20
+ export { Jostraca, cmp, each, select, get, camelify, snakeify, Project, Code, File, Folder, };
package/dist/jostraca.js CHANGED
@@ -24,11 +24,18 @@ 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;
32
+ exports.get = get;
33
+ exports.camelify = camelify;
34
+ exports.snakeify = snakeify;
28
35
  const Fs = __importStar(require("node:fs"));
29
36
  const node_async_hooks_1 = require("node:async_hooks");
37
+ const GLOBAL = global;
30
38
  function Jostraca() {
31
- const GLOBAL = global;
32
39
  GLOBAL.jostraca = new node_async_hooks_1.AsyncLocalStorage();
33
40
  function generate(opts, root) {
34
41
  const fs = opts.fs || Fs;
@@ -38,6 +45,8 @@ function Jostraca() {
38
45
  root();
39
46
  const ctx$ = GLOBAL.jostraca.getStore();
40
47
  const node = ctx$.node;
48
+ // console.log('JOSTRACA TOP')
49
+ // console.dir(node, { depth: null })
41
50
  build(node, {
42
51
  fs,
43
52
  current: {
@@ -48,54 +57,7 @@ function Jostraca() {
48
57
  });
49
58
  });
50
59
  }
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
60
  function build(topnode, ctx) {
98
- // console.dir(topnode, { depth: null })
99
61
  step(topnode, ctx);
100
62
  }
101
63
  function step(node, ctx) {
@@ -148,42 +110,118 @@ function Jostraca() {
148
110
  },
149
111
  content: {
150
112
  before(node, ctx) {
151
- const ccontent = ctx.current.content = node;
152
- ctx.current.file.content.push(ccontent.content);
113
+ const content = ctx.current.content = node;
114
+ ctx.current.file.content.push(content.content);
115
+ },
116
+ after(_node, _ctx) {
117
+ },
118
+ },
119
+ none: {
120
+ before(_node, ctx) {
153
121
  },
154
122
  after(_node, _ctx) {
155
123
  },
156
124
  },
157
125
  };
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
126
  return {
180
- cmp,
181
- each,
182
127
  generate,
183
- Project,
184
- Code,
185
- File,
186
- Folder,
187
128
  };
188
129
  }
130
+ const Code = cmp(function Code(props) {
131
+ props.ctx$.node.kind = 'content';
132
+ let src = props.arg;
133
+ props.ctx$.node.content = src;
134
+ });
135
+ exports.Code = Code;
136
+ const File = cmp(function File(props, children) {
137
+ props.ctx$.node.kind = 'file';
138
+ props.ctx$.node.name = props.name;
139
+ // Code('// FILE START: ' + props.name + '\n')
140
+ each(children);
141
+ // Code('// FILE END: ' + props.name + '\n')
142
+ });
143
+ exports.File = File;
144
+ const Project = cmp(function Project(props, children) {
145
+ props.ctx$.node.kind = 'project';
146
+ props.ctx$.node.name = props.name;
147
+ each(children);
148
+ });
149
+ exports.Project = Project;
150
+ const Folder = cmp(function Folder(props, children) {
151
+ props.ctx$.node.kind = 'folder';
152
+ props.ctx$.node.name = props.name;
153
+ each(children);
154
+ });
155
+ exports.Folder = Folder;
156
+ function cmp(component) {
157
+ const cf = (props, children) => {
158
+ props = props || {};
159
+ if (null == props || 'object' !== typeof props) {
160
+ props = { arg: props };
161
+ }
162
+ props.ctx$ = GLOBAL.jostraca.getStore();
163
+ children = 'function' === typeof children ? [children] : children;
164
+ let node = {
165
+ kind: 'none',
166
+ children: []
167
+ };
168
+ const parent = props.ctx$.node = (props.ctx$.node || node);
169
+ const siblings = props.ctx$.children = (props.ctx$.children || []);
170
+ siblings.push(node);
171
+ props.ctx$.children = node.children;
172
+ props.ctx$.node = node;
173
+ let out = component(props, children);
174
+ props.ctx$.children = siblings;
175
+ props.ctx$.node = parent;
176
+ return out;
177
+ };
178
+ Object.defineProperty(cf, 'name', { value: component.name });
179
+ return cf;
180
+ }
181
+ function each(subject, apply) {
182
+ if (null == apply) {
183
+ if (Array.isArray(subject)) {
184
+ for (let fn of subject) {
185
+ fn();
186
+ }
187
+ }
188
+ }
189
+ else {
190
+ if (Array.isArray(subject)) {
191
+ return subject.map(apply);
192
+ }
193
+ else {
194
+ const entries = Object.entries(subject);
195
+ if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
196
+ entries.sort((a, b) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0);
197
+ }
198
+ return entries.map((n, ...args) => apply(n[1], [0], ...args));
199
+ }
200
+ }
201
+ }
202
+ function select(key, map) {
203
+ const fn = map && map[key];
204
+ return fn ? fn() : undefined;
205
+ }
206
+ function get(root, path) {
207
+ path = 'string' === typeof path ? path.split('.') : path;
208
+ let node = root;
209
+ for (let i = 0; i < path.length && null != node; i++) {
210
+ node = node[path[i]];
211
+ }
212
+ return node;
213
+ }
214
+ function camelify(input) {
215
+ let parts = 'string' == typeof input ? input.split('-') : input.map(n => '' + n);
216
+ return parts
217
+ .map((p) => ('' === p ? '' : (p[0].toUpperCase() + p.substring(1))))
218
+ .join('');
219
+ }
220
+ function snakeify(input) {
221
+ let parts = 'string' == typeof input ? input.split(/([A-Z])/) : input.map(n => '' + n);
222
+ return parts
223
+ .filter((p) => '' !== p)
224
+ .reduce((a, n, i) => ((0 === i % 2 ? a.push(n.toLowerCase()) : a[(i / 2) | 0] += n), a), [])
225
+ .join('-');
226
+ }
189
227
  //# 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.4",
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.2.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
+
28
+
27
29
 
28
- const GLOBAL = (global as any)
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,160 @@ 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
+ }
228
+
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
+ }
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
+ }
242
252
 
243
- Project,
244
- Code,
245
- File,
246
- Folder,
253
+
254
+ function select(key: any, map: Record<string, Function>) {
255
+ const fn = map && map[key]
256
+ return fn ? fn() : undefined
257
+ }
258
+
259
+
260
+
261
+ function get(root: any, path: string | string[]): any {
262
+ path = 'string' === typeof path ? path.split('.') : path
263
+ let node = root
264
+ for (let i = 0; i < path.length && null != node; i++) {
265
+ node = node[path[i]]
247
266
  }
267
+ return node
268
+ }
248
269
 
249
270
 
271
+ function camelify(input: any[] | string) {
272
+ let parts = 'string' == typeof input ? input.split('-') : input.map(n => '' + n)
273
+ return parts
274
+ .map((p: string) => ('' === p ? '' : (p[0].toUpperCase() + p.substring(1))))
275
+ .join('')
250
276
  }
251
277
 
252
278
 
279
+ function snakeify(input: any[] | string) {
280
+ let parts = 'string' == typeof input ? input.split(/([A-Z])/) : input.map(n => '' + n)
281
+ return parts
282
+ .filter((p: string) => '' !== p)
283
+ .reduce((a: any[], n: string, i: number) =>
284
+ ((0 === i % 2 ? a.push(n.toLowerCase()) : a[(i / 2) | 0] += n), a), [])
285
+ .join('-')
286
+ }
287
+
288
+
289
+
253
290
  export type {
254
291
  JostracaOptions,
255
292
  Component,
@@ -258,4 +295,16 @@ export type {
258
295
 
259
296
  export {
260
297
  Jostraca,
298
+ cmp,
299
+
300
+ each,
301
+ select,
302
+ get,
303
+ camelify,
304
+ snakeify,
305
+
306
+ Project,
307
+ Code,
308
+ File,
309
+ Folder,
261
310
  }