@makano/rew 1.2.3 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,7 +17,7 @@ module.exports.curl = function curl(options, url){
17
17
  }).then(async r => {
18
18
  if(options.o) fs.writeFileSync(options.o, Buffer.from(await r.clone().arrayBuffer()));
19
19
  return r;
20
- }).then(r => options.json ? r.clone().json() : r));
20
+ }).then(r => options.json ? r.clone().json() : options.text ? r.clone().text() : r));
21
21
  if(options.a) return f.wait();
22
22
  else return f;
23
23
  }
@@ -23,8 +23,8 @@ module.exports = (currentFile) => {
23
23
  );
24
24
  };
25
25
 
26
- function spawn(command, options) {
27
- return shell.spawn(command, options);
26
+ function spawn(command, ...args) {
27
+ return shell.spawn(command, ...args);
28
28
  }
29
29
 
30
30
  return { exec, spawn };
@@ -1,5 +1,5 @@
1
- module.exports.generateRandomID = function generateRandomID(length = 12) {
2
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
1
+ module.exports.generateRandomID = function generateRandomID(length = 12, _characters) {
2
+ const characters = _characters || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
3
3
  const charactersLength = characters.length;
4
4
  let randomID = '';
5
5
 
@@ -57,7 +57,7 @@ module.exports.imp = function (runPath, context) {
57
57
  exports = foundCache.exports;
58
58
  }
59
59
 
60
- if (!ispkg && !existsSync(filepath)) {
60
+ if (!ispkg && !existsSync(filepath) && !foundCache) {
61
61
  if (Array.isArray(execOptions.resolveExtensions) && execOptions.resolveExtensions.length) {
62
62
  const resolve = execOptions.resolveExtensions.find((ext) =>
63
63
  typeof ext == 'string' ? existsSync(filepath + ext) : existsSync(filepath + (ext.ext || '')),
@@ -119,8 +119,24 @@ module.exports.imp = function (runPath, context) {
119
119
  }
120
120
  }
121
121
 
122
- if (!ispkg) context.module.imports.push(filepath);
123
- if (!ispkg) cachedFiles.push({ filepath, exports });
122
+ // Hehe, i just had an idea for a
123
+ // descriptive code
124
+ // you put them in comment blocks
125
+ // and name it something
126
+ // then you can simple see
127
+ // which part of a code contains a certain
128
+ // task. cool right?
129
+
130
+ //** If is not package, post exec section
131
+ /**/ if (!ispkg) context.module.imports.push(filepath);
132
+ /**/ if (!ispkg) cachedFiles.push({ filepath, exports });
133
+ //**
134
+
135
+ //** Mock imports section
136
+ /**/ if(!exports) exports = options.mock;
137
+ /**/ if(options.mock == null) return null;
138
+ /**/ if(!exports) throw new Error('Import '+filename+' does not export anything. Use the "mock" option to mock a value.');
139
+ //**
124
140
 
125
141
  return exports;
126
142
  };
@@ -0,0 +1,27 @@
1
+ const jsYaml = require("js-yaml");
2
+
3
+
4
+
5
+ function json(thing){
6
+ return JSON.parse(thing);
7
+ }
8
+
9
+ function jsons(thing){
10
+ return JSON.stringify(thing);
11
+ }
12
+
13
+
14
+ function yaml(thing){
15
+ return jsYaml.loadAll(thing)[0];
16
+ }
17
+
18
+ function yamls(thing){
19
+ return jsYaml.dump(thing);
20
+ }
21
+
22
+ module.exports = {
23
+ yaml,
24
+ yamls,
25
+ json,
26
+ jsons
27
+ }
@@ -3,6 +3,7 @@ const path = require('path');
3
3
 
4
4
  module.exports.customRequire = function customRequire(modulePath, filePath) {
5
5
  const resolvedPath = resolveModulePath(modulePath, filePath);
6
+ if(!resolvedPath) throw new Error('Module '+modulePath+' not found');
6
7
  return require(resolvedPath);
7
8
  };
8
9
 
@@ -20,21 +21,40 @@ function resolveModulePath(modulePath, filePath) {
20
21
  if (fs.existsSync(fullPath + '.json')) {
21
22
  return fullPath + '.json';
22
23
  }
24
+
23
25
  if (fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory()) {
24
- const packageJsonPath = path.join(fullPath, 'package.json');
25
- if (fs.existsSync(packageJsonPath)) {
26
- const main = require(packageJsonPath).main || 'index.js';
27
- const mainPath = path.join(fullPath, main);
28
- if (fs.existsSync(mainPath)) {
29
- return mainPath;
30
- }
31
- }
32
- const indexPath = path.join(fullPath, 'index.js');
33
- if (fs.existsSync(indexPath)) {
34
- return indexPath;
35
- }
26
+ return searchInPath(fullPath);
36
27
  }
37
- }
38
28
 
39
- throw new Error(`Cannot find module '${modulePath}'`);
29
+ const rootPath = modulePath.split('/').shift();
30
+ const halfFullPath = path.join(basePath, rootPath);
31
+ if (fs.existsSync(halfFullPath) && fs.statSync(halfFullPath).isDirectory()) {
32
+ return searchInPath(halfFullPath, ['.'].concat(fullPath.split('/').slice(1)).join('/'));
33
+ }
34
+ }
40
35
  }
36
+
37
+ function searchInPath(fullPath, exportses){
38
+ const packageJsonPath = path.join(fullPath, 'package.json');
39
+ if (fs.existsSync(packageJsonPath)) {
40
+ const packageJson = require(packageJsonPath);
41
+ let main = packageJson.main || 'index.js';
42
+ if(exportses){
43
+ if(packageJson.exports){
44
+ if(exportses in packageJson.exports) main = packageJson.exports[exportses];
45
+ }
46
+ }
47
+ if(typeof main == "object"){
48
+ if(Array.isArray(main)) main = main[0].require;
49
+ else main = main.require;
50
+ }
51
+ const mainPath = path.join(fullPath, main);
52
+ if (fs.existsSync(mainPath)) {
53
+ return mainPath;
54
+ }
55
+ }
56
+ const indexPath = path.join(fullPath, 'index.js');
57
+ if (fs.existsSync(indexPath)) {
58
+ return indexPath;
59
+ }
60
+ }
@@ -145,6 +145,19 @@ function compileRewStuff(content, options) {
145
145
  continue;
146
146
  }
147
147
 
148
+
149
+ if (token.type === 'IDENTIFIER' && token.value === 'let') {
150
+ result += '`'
151
+ hooks.push({
152
+ index: fnextToken(i, tokens, 'OTHER', ';').ti,
153
+ value: `\``,
154
+ });
155
+ }
156
+
157
+ if (token.type === 'IDENTIFIER' && token.value === 'export') {
158
+ token.value = 'pub';
159
+ }
160
+
148
161
  if (token.type === 'IDENTIFIER' && token.value === 'import') {
149
162
  // console.log(nextToken.type);
150
163
  let ind = i + n + 2;
@@ -213,9 +226,16 @@ function compileRewStuff(content, options) {
213
226
  nextToken.value &&
214
227
  nextToken.value !== 'undefined'
215
228
  ) {
229
+ let next = {...nextToken};
230
+ if(next.value == 'default'){
231
+ i += 2;
232
+ }
233
+ if(next.value == 'class'){
234
+ next.value = gnextToken(i, n + 1, tokens)?.token.value || "default";
235
+ }
216
236
  hooks.push({
217
237
  index: i + 1,
218
- value: `"${nextToken.value}", `,
238
+ value: `"${next.value}", `,
219
239
  });
220
240
  }
221
241
 
@@ -254,13 +274,20 @@ const cpl = (module.exports.compile = function (file, options = {}) {
254
274
 
255
275
  module.exports.compileFile = function (filepath, options = {}) {
256
276
  const f = getFile(filepath);
277
+ let qrew = false;
257
278
 
258
279
  if(options.qrew || path.extname(filepath) == '.qrew') {
280
+ qrew = true
259
281
  f.content = from_qrew(readFileSync(f.path), options.package || findAppInfo(filepath)?.config.manifest.package || path.basename(filepath).split('.').slice(0, -1).join('.')).toString();
260
- }
282
+ }
261
283
 
262
284
  let compiled_code = cpl(f, { ...options });
263
285
 
286
+ if(options.onlyCompile && !qrew){
287
+ console.log(compiled_code);
288
+ process.exit();
289
+ }
290
+
264
291
  return {
265
292
  compiled_code,
266
293
  file: f,
@@ -42,19 +42,6 @@ module.exports.prepareContext = function (
42
42
  ...defaultContext,
43
43
  ...pathLib(filepath),
44
44
  ...execLib(filepath),
45
- require: (package) => {
46
- try {
47
- return execOptions.nativeRequire || package.startsWith("node:")
48
- ? require(
49
- package.startsWith("node:")
50
- ? package.split("node:")[1]
51
- : package,
52
- )
53
- : customRequire(package, filepath);
54
- } catch (e) {
55
- throw new Error("Module " + package + " not found");
56
- }
57
- },
58
45
  ...custom_context,
59
46
  };
60
47
  }
@@ -66,6 +53,7 @@ module.exports.prepareContext = function (
66
53
  off: (event, listener) => process.off(event, listener),
67
54
  emit: (event, code) => process.emit(event, code),
68
55
  },
56
+ __execFile: global.fileName,
69
57
  env: process.env,
70
58
  cwd: () => process.cwd(),
71
59
  arch: process.arch,
@@ -74,6 +62,21 @@ module.exports.prepareContext = function (
74
62
  context.global = context;
75
63
  context.imports.assert = options.import ?? {};
76
64
  context.imp = imp(runPath, context);
65
+ context.require = (package) => {
66
+ try {
67
+ const search = execOptions.nativeRequire || package.startsWith("node:")
68
+ ? require(
69
+ package.startsWith("node:")
70
+ ? package.split("node:")[1]
71
+ : package,
72
+ )
73
+ : customRequire(package, filepath);
74
+ if(!search) throw new Error("Module " + package + " not found");
75
+ return search;
76
+ } catch (e) {
77
+ throw e;
78
+ }
79
+ };
77
80
  context.inc = (package, asserts) => {
78
81
  try {
79
82
  if (package.startsWith("node:") || package.startsWith("pkg:"))
@@ -22,7 +22,7 @@ function yamlFile(file) {
22
22
  }),
23
23
  ]);
24
24
 
25
- return yaml.load(file.content, { schema });
25
+ return file.content.startsWith('---') ? yaml.loadAll(file.content, { schema })[0] : yaml.load(file.content, { schema });
26
26
  }
27
27
 
28
28
  const importYaml = (module.exports.importYaml = function importYaml(filepath, file) {
@@ -14,7 +14,7 @@ module.exports = (context) => ({
14
14
  CONFIG_PATH,
15
15
  _onImport() {
16
16
  if (context.app) {
17
- return this.create(context.app.config.package);
17
+ return this.create(context.app.config.manifest.package);
18
18
  } else {
19
19
  return this.create(seededID(path.basename(context.module.filepath).replace(/[-_/\.]/g, '')));
20
20
  }
@@ -82,7 +82,7 @@ module.exports = (context) => ({
82
82
  };
83
83
 
84
84
  return {
85
- get: (key, defaultValue) => getData(optionCenter, key) || defaultValue,
85
+ get: (key, defaultValue) => getData(optionCenter, key) ?? defaultValue,
86
86
  set: (key, value) => setData(optionCenter, key, value),
87
87
  remove: (key) => removeData(optionCenter, key),
88
88
  reset: () => fs.writeFileSync(optionCenter.root, dumpYaml(defaults)) && (conf[name] = defaults),
@@ -101,6 +101,7 @@ module.exports = (context) => ({
101
101
  remove: (key) => defaultCenter.remove(key),
102
102
  root: rootPath,
103
103
  package: packageName,
104
+ loadYaml: (file) => jsYaml.load(fs.readFileSync(file, { encoding: 'utf-8' }))
104
105
  };
105
106
  },
106
107
  });
@@ -169,6 +169,7 @@ const createDB = (dbName, dirname, dbData = {}, encryptionKey) => {
169
169
  };
170
170
 
171
171
  const update = (caseRecord, newRecord) => {
172
+
172
173
  let id;
173
174
  if (typeof caseRecord === 'string') {
174
175
  id = caseRecord;
@@ -224,6 +225,9 @@ const createDB = (dbName, dirname, dbData = {}, encryptionKey) => {
224
225
  if (typeof criteria == 'string') return read(criteria);
225
226
  if (!criteria || typeof criteria !== 'object') return null;
226
227
 
228
+
229
+ if (!fs.existsSync(collectionFilePath)) writeDataFile(collectionFilePath, []);
230
+
227
231
  const data = readDataFile(collectionFilePath);
228
232
  const record =
229
233
  data.find((record) => {
@@ -240,7 +244,6 @@ const createDB = (dbName, dirname, dbData = {}, encryptionKey) => {
240
244
 
241
245
  const remove = (id) => {
242
246
  if ('@rune.id' in id) id = id['@rune.id'];
243
- if (!fs.existsSync(collectionFilePath)) return false;
244
247
  let data = readDataFile(collectionFilePath);
245
248
  const index = data.findIndex((record) => record['@rune.id'] === id);
246
249
  if (index !== -1) {
@@ -293,6 +296,8 @@ const createDB = (dbName, dirname, dbData = {}, encryptionKey) => {
293
296
  return sortedData;
294
297
  };
295
298
 
299
+ if (!fs.existsSync(collectionFilePath)) writeDataFile(collectionFilePath, []);
300
+
296
301
  return {
297
302
  insert,
298
303
  read,
@@ -377,6 +382,8 @@ const createDB = (dbName, dirname, dbData = {}, encryptionKey) => {
377
382
  return data;
378
383
  };
379
384
 
385
+ if (!fs.existsSync(mapFilePath)) writeDataFile(mapFilePath, {});
386
+
380
387
  return { set, get, remove, list, transform };
381
388
  };
382
389
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makano/rew",
3
- "version": "1.2.3",
3
+ "version": "1.2.5",
4
4
  "description": "A simple coffescript runtime and app manager",
5
5
  "main": "main.js",
6
6
  "directories": {
@@ -11,6 +11,8 @@
11
11
  },
12
12
  "files": [
13
13
  "lib/",
14
+ "runtime.d.ts",
15
+ "jsconfig.json",
14
16
  "main.js",
15
17
  "README.md"
16
18
  ],
@@ -38,6 +40,7 @@
38
40
  "colors": "^1.4.0",
39
41
  "deasync": "^0.1.30",
40
42
  "js-yaml": "^4.1.0",
43
+ "loading-cli": "^1.1.2",
41
44
  "tiny-msgpack": "^2.2.0",
42
45
  "uuid": "^9.0.1",
43
46
  "vm": "^0.1.0",