@makano/rew 1.2.74 → 1.2.76

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.
@@ -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
  ],