@makano/rew 1.2.74 → 1.2.76

Sign up to get free protection for your applications and to get access to all the features.
@@ -123,10 +123,31 @@ yargs(hideBin(process.argv))
123
123
  yargs.positional('path', {
124
124
  describe: 'Path of the project to create',
125
125
  type: 'string',
126
+ }).option('git', {
127
+ alias: 'g',
128
+ describe: `Enable Git Option`,
129
+ type: 'boolean',
130
+ }).option('civet', {
131
+ alias: 'c',
132
+ describe: `Use civet for main`,
133
+ type: 'boolean',
134
+ }).option('types', {
135
+ alias: 't',
136
+ describe: `Create @types/rew in node modules`,
137
+ type: 'boolean',
138
+ }).option('name', {
139
+ alias: 'n',
140
+ describe: `The package name`,
141
+ type: 'string'
142
+ }).option('ignore', {
143
+ alias: 'i',
144
+ describe: `Use default options`,
145
+ type: 'boolean',
146
+ default: false
126
147
  });
127
148
  },
128
149
  (argv) => {
129
- require('./utils').createProject(argv.path);
150
+ require('./utils').createProject(argv.path, argv);
130
151
  },
131
152
  )
132
153
  .command(
@@ -8,7 +8,7 @@ let last = '';
8
8
 
9
9
  const log = (module.exports.log = function (...toPrint) {
10
10
  let prefix = start ? startPrefix : middlePrefix;
11
- let returns = false;
11
+ let returns = false, nosep = false;
12
12
  if (toPrint[toPrint.length - 1] == ':end') {
13
13
  prefix = endPrefix;
14
14
  toPrint.pop();
@@ -17,13 +17,17 @@ const log = (module.exports.log = function (...toPrint) {
17
17
  returns = true;
18
18
  toPrint.pop();
19
19
  }
20
+ if (toPrint[toPrint.length - 1] == ':nosep') {
21
+ nosep = true;
22
+ toPrint.pop();
23
+ }
20
24
  if (prefix == endPrefix && start) prefix = separator;
21
25
  // if(last == endPrefix && prefix == separator) prefix = startPrefix;
22
- if (!start) console.log(last == endPrefix ? startPrefix : separator);
26
+ if (!start && !returns && !nosep) console.log(last == endPrefix ? startPrefix : separator);
23
27
  if (start) start = false;
24
28
  last = prefix;
25
29
  if (returns) return [prefix, ...toPrint].join(' ');
26
- else console.log(prefix, ...toPrint);
30
+ else if (toPrint.length) console.log(prefix, ...toPrint);
27
31
  });
28
32
 
29
33
  module.exports.logget = function (...toPrint) {
@@ -26,6 +26,7 @@ const {
26
26
  cachepath,
27
27
  localBinPath
28
28
  } = require('./helpers');
29
+ const { input } = require('../functions/stdout');
29
30
 
30
31
  module.exports = {
31
32
  conf(command, fullPath, key, value) {
@@ -77,13 +78,19 @@ module.exports = {
77
78
  }
78
79
  }
79
80
  },
80
- createProject: (ppath) => {
81
+ createProject: (ppath, argv) => {
81
82
  const projectPath = path.join(process.cwd(), ppath);
82
83
  log(''.cyan, 'Creating at'.blue, ppath.yellow);
83
- const rl = readline.createInterface({
84
- input: process.stdin,
85
- output: process.stdout,
86
- });
84
+
85
+ const b = (value, type) => type == "boolean" ? (value.toString() == 'y' || value.toString() == "yes" ? true : false) : value;
86
+
87
+ const registerInput = (name, promptText, type, argvName, defaultValue) => {
88
+ if(type == 'boolean') defaultValue = false;
89
+ let prompted = false;
90
+ project[name] = argv[argvName] ?? (argv.ignore ? defaultValue ?? b(input(promptText, prompted = log() || true), type) : b(input(promptText, prompted = log() || true), type));
91
+ log(name.grey+'?'.grey, type == 'string' ? project[name].green : (project[name] == true ? 'yes'.cyan : 'no'.yellow), prompted ? ':nosep' : '');
92
+ }
93
+
87
94
  const project = {};
88
95
  const create = () => {
89
96
  fs.mkdirSync(projectPath, { recursive: true });
@@ -97,8 +104,8 @@ module.exports = {
97
104
  execSync('cd ' + projectPath + ' && git init . && git branch -m main', { stdio: 'ignore' });
98
105
  }
99
106
  if(project.intellisense){
100
- fs.copyFileSync(path.join(__dirname, '../../../tsconfig.json'), path.join(projectPath, 'tsconfig.json'));
101
- fs.copyFileSync(path.join(__dirname, '../../../runtime.d.ts'), path.join(projectPath, 'runtime.d.ts'));
107
+ fs.mkdirSync(path.join(projectPath, 'node_modules/@types/rew'), { recursive: true });
108
+ fs.copyFileSync(path.join(__dirname, '../../../runtime.d.ts'), path.join(projectPath, 'node_modules/@types/rew/index.d.ts'));
102
109
  }
103
110
  execSync('cd ' + projectPath + ' && npm init -y', { stdio: 'ignore' });
104
111
  if(project.civet){
@@ -115,29 +122,41 @@ module.exports = {
115
122
  // }
116
123
  // });
117
124
  log('Done.'.blue.bold, ':end');
118
- rl.close();
119
125
  };
120
126
  if (!fs.existsSync(projectPath)) {
121
- rl.question(logget(' Package Name: '.blue), (pkg) => {
122
- if (pkg.trim()) {
123
- project.package = pkg.trim();
124
- rl.question(logget(' Use intellisense declarations ? (y/N): '.magenta.bold), (inteli) => {
125
- project.intellisense = inteli.toLowerCase() == 'y' || inteli.toLowerCase() == 'yes';
126
- rl.question(logget(' Use Civet For main ? (y/N): '.blue.bold), (civet) => {
127
- project.civet = civet.toLowerCase() == 'y' || civet.toLowerCase() == 'yes';
128
- rl.question(logget('󰊢 Use git ? (y/N): '.yellow.bold), (use_git) => {
129
- project.git = use_git.toLowerCase() == 'y' || use_git.toLowerCase() == 'yes';
130
- create();
131
- });
132
- });
133
- });
134
- } else {
135
- rl.close();
136
- }
137
- });
127
+
128
+ registerInput(
129
+ 'package',
130
+ logget(' Package Name: '.blue),
131
+ 'string',
132
+ 'name',
133
+ path.basename(projectPath)
134
+ )
135
+
136
+ registerInput(
137
+ 'intellisense',
138
+ logget(' Use intellisense declarations ? (y/N): '.magenta),
139
+ 'boolean',
140
+ 'types'
141
+ )
142
+
143
+ registerInput(
144
+ 'civet',
145
+ logget(' Use Civet For main ? (y/N): '.blue),
146
+ 'boolean',
147
+ 'civet'
148
+ )
149
+
150
+ registerInput(
151
+ 'git',
152
+ logget('󰊢 Use git ? (y/N): '.yellow),
153
+ 'boolean',
154
+ 'git'
155
+ )
156
+
157
+ create();
138
158
  } else {
139
159
  log(` Project ${ppath} already exists at ${projectPath}`.red.bold, ':end');
140
- rl.close();
141
160
  }
142
161
  },
143
162
  runApp(pathOrPackage, options) {
@@ -9,7 +9,9 @@ const execOptions = {
9
9
  jsxPragma: '__using__.JSX.createElement',
10
10
  jsx: false,
11
11
  typescript: false,
12
- decorators: false
12
+ decorators: false,
13
+
14
+ _syntaxAliases: {}
13
15
  };
14
16
 
15
17
  module.exports.execOptions = execOptions;
@@ -6,7 +6,7 @@ const { getFile, file } = require('./fs');
6
6
  const babel = require('@babel/core');
7
7
  const path = require('path');
8
8
  const babelReact = require('@babel/preset-react');
9
- const { readFileSync } = require('fs');
9
+ const { readFileSync, existsSync } = require('fs');
10
10
  const { wait } = require('../functions/wait');
11
11
  const { REW_FILE_TYPE } = require('../const/ext');
12
12
  const { USING_DEFAULT } = require('../const/usage');
@@ -122,12 +122,43 @@ const fnextToken = (i, tokens, type, value) => {
122
122
  .find((t) => t.type == type && (value ? t.value == value : true));
123
123
  };
124
124
 
125
+ function declareAlias(aliases, token) {
126
+ const regex = /^#declare(\*)?\s+(\w+)\s+"([^"]+)"\s*=\s*([\s\S]*);$/;
127
+ const match = token.value.trim().match(regex);
128
+
129
+ if (match) {
130
+ const isPublic = !!match[1];
131
+ const type = match[2] == "key" ? 'IDENTIFIER' : match[2];
132
+ const name = match[3];
133
+ const value = match[4].trim();
134
+
135
+ const aliasValue = value.startsWith('${')
136
+ ? new Function('token', 'tokens', 'code', value.slice(2, -1))
137
+ : value;
138
+
139
+ aliases[type] = aliases[type] || {};
140
+ aliases[type][name] = aliasValue;
141
+
142
+ if(isPublic){
143
+ execOptions._syntaxAliases[type] = execOptions._syntaxAliases[type] || {};
144
+ execOptions._syntaxAliases[type][name] = aliasValue;
145
+ }
146
+ }
147
+ }
148
+
125
149
  function compileRewStuff(content, options) {
126
150
  const tokens = tokenizeCoffeeScript(content);
127
151
  let result = '';
152
+ let multilineDeclareBuffer = [];
153
+ let multilineDeclare = false;
128
154
 
129
155
  let hooks = [];
130
156
 
157
+
158
+ const aliases = {
159
+ ...execOptions._syntaxAliases
160
+ }
161
+
131
162
  for (let i = 0; i < tokens.length; i++) {
132
163
  const token = tokens[i];
133
164
  let { token: nextToken, n } = gnextToken(i, 1, tokens) || {};
@@ -136,6 +167,30 @@ function compileRewStuff(content, options) {
136
167
  continue;
137
168
  }
138
169
 
170
+ if ((token.type === "COMMENT" && multilineDeclare) || (token.type !== "COMMENT" && multilineDeclare)) {
171
+ if(token.type === "COMMENT"){
172
+ multilineDeclareBuffer.push(token.value.startsWith('###') ? token.value.slice(3) : token.value.slice(1));
173
+ if (token.value.includes(';')) {
174
+ multilineDeclare = false;
175
+ const combinedDeclaration = multilineDeclareBuffer.join('\n');
176
+ declareAlias(aliases, { ...token, value: combinedDeclaration });
177
+ multilineDeclareBuffer = [];
178
+ }
179
+ } else {
180
+ multilineDeclare = false;
181
+ multilineDeclareBuffer = [];
182
+ }
183
+ }
184
+
185
+ if (token.type === "COMMENT" && token.value.startsWith('#declare')) {
186
+ if (token.value.includes(';')) {
187
+ declareAlias(aliases, token);
188
+ } else {
189
+ multilineDeclare = true;
190
+ multilineDeclareBuffer.push(token.value);
191
+ }
192
+ }
193
+
139
194
  if (token.type === 'IDENTIFIER' && token.value === 'opt.set') {
140
195
  const { token: nextNextToken } = gnextToken(i, 2, tokens) || {};
141
196
  if (nextNextToken && nextNextToken.value.slice(1).slice(0, -1) == 'jsxPragma') {
@@ -269,6 +324,17 @@ function compileRewStuff(content, options) {
269
324
  });
270
325
  }
271
326
 
327
+ const aliasType = aliases[token.type];
328
+ if (aliasType && aliasType[token.value]) {
329
+ const aliasValue = aliasType[token.value];
330
+ if (typeof aliasValue === 'function') {
331
+ result += aliasValue(token, tokens, result) || "";
332
+ } else {
333
+ result += aliasValue;
334
+ }
335
+ continue;
336
+ }
337
+
272
338
  // if(token.type === 'TRIPLE_STRING'){
273
339
  // token.value = '```'+token.value.slice(3).slice(0, -3).replace(/\#\{/g, '${')+'```';
274
340
  // }
@@ -282,10 +348,19 @@ function compileRewStuff(content, options) {
282
348
  }
283
349
  });
284
350
  }
351
+
352
+ if (token.type === "COMMENT" && token.value.startsWith('#include')) {
353
+ const includeContent = token.value.split(' ')[1] || '';
354
+ const filename = options.filename ? path.resolve(path.dirname(options.filename), includeContent) : includeContent;
355
+ if (existsSync(filename)) {
356
+ result += '\n'+ compileRewStuff(readFileSync(filename).toString(), {
357
+ ...options,
358
+ filename
359
+ });
360
+ }
361
+ }
285
362
  }
286
363
 
287
- // console.log(result)
288
-
289
364
  return result;
290
365
  }
291
366
 
@@ -298,7 +373,10 @@ const compileCivetStuff = (file, options) => {
298
373
  js: true
299
374
  };
300
375
 
301
- const prepared = compileRewStuff(file.content, options);
376
+ const prepared = compileRewStuff(file.content, {
377
+ filename: file.path,
378
+ ...options
379
+ });
302
380
  let compiled = options.async ? compileCivet(prepared, compileOptions) : wait(compileCivet, prepared, compileOptions);
303
381
 
304
382
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makano/rew",
3
- "version": "1.2.74",
3
+ "version": "1.2.76",
4
4
  "description": "A simple coffescript runtime and app manager",
5
5
  "main": "main.js",
6
6
  "directories": {
@@ -12,7 +12,6 @@
12
12
  "files": [
13
13
  "lib/",
14
14
  "runtime.d.ts",
15
- "jsconfig.json",
16
15
  "main.js",
17
16
  "README.md"
18
17
  ],