@makano/rew 1.2.55 → 1.2.57
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/civet/main.js +17239 -0
- package/lib/rew/cli/cli.js +3 -2
- package/lib/rew/cli/utils.js +18 -10
- package/lib/rew/const/ext.js +5 -0
- package/lib/rew/const/opt.js +4 -2
- package/lib/rew/const/usage.js +12 -0
- package/lib/rew/functions/fs.js +6 -1
- package/lib/rew/functions/import.js +4 -4
- package/lib/rew/functions/require.js +1 -1
- package/lib/rew/main.js +1 -13
- package/lib/rew/modules/compiler.js +72 -25
- package/lib/rew/modules/context.js +12 -0
- package/lib/rew/modules/runtime.js +1 -0
- package/lib/rew/pkgs/serve.js +8 -5
- package/lib/rew/pkgs/web.js +5 -4
- package/package.json +1 -1
- package/runtime.d.ts +15 -10
- package/jsconfig.json +0 -13
- package/lib/coffeescript/browser.js +0 -156
- package/lib/coffeescript/cake.js +0 -134
- package/lib/coffeescript/coffeescript.js +0 -465
- package/lib/coffeescript/command.js +0 -832
- package/lib/coffeescript/grammar.js +0 -1930
- package/lib/coffeescript/helpers.js +0 -513
- package/lib/coffeescript/index.js +0 -230
- package/lib/coffeescript/lexer.js +0 -2316
- package/lib/coffeescript/nodes.js +0 -9784
- package/lib/coffeescript/optparse.js +0 -258
- package/lib/coffeescript/parser.js +0 -20384
- package/lib/coffeescript/register.js +0 -120
- package/lib/coffeescript/repl.js +0 -328
- package/lib/coffeescript/rewriter.js +0 -1448
- package/lib/coffeescript/scope.js +0 -191
- package/lib/coffeescript/sourcemap.js +0 -244
package/lib/rew/cli/cli.js
CHANGED
@@ -17,6 +17,7 @@ const { print, input } = require('../functions/stdout');
|
|
17
17
|
const colors = require('colors');
|
18
18
|
const { req } = require('../misc/req');
|
19
19
|
const { gen_key } = require('../misc/bin');
|
20
|
+
const { REW_FILE_TYPE } = require('../const/ext');
|
20
21
|
|
21
22
|
if (!existsSync(CONFIG_PATH) || !existsSync(CONFIG_PATH + '/repos.yaml')) {
|
22
23
|
mkdirSync(CONFIG_PATH, { recursive: true });
|
@@ -127,7 +128,7 @@ yargs(hideBin(process.argv))
|
|
127
128
|
type: 'string',
|
128
129
|
})
|
129
130
|
.option('dev', {
|
130
|
-
describe:
|
131
|
+
describe: `If your entry file is a .qrew, then just use the ${REW_FILE_TYPE.EXTENSION} instead`,
|
131
132
|
type: 'boolean',
|
132
133
|
})
|
133
134
|
.option('entry', {
|
@@ -354,7 +355,7 @@ yargs(hideBin(process.argv))
|
|
354
355
|
})
|
355
356
|
.option('remove', {
|
356
357
|
alias: 'r',
|
357
|
-
describe: 'Remove all
|
358
|
+
describe: 'Remove all '+REW_FILE_TYPE.EXTENSION,
|
358
359
|
type: 'boolean',
|
359
360
|
});
|
360
361
|
},
|
package/lib/rew/cli/utils.js
CHANGED
@@ -18,6 +18,7 @@ const { seededID } = require('../misc/seededid');
|
|
18
18
|
const loading = require('loading-cli');
|
19
19
|
const sleep = require('../functions/sleep');
|
20
20
|
const { gen_key } = require('../misc/bin');
|
21
|
+
const { REW_FILE_TYPE } = require('../const/ext');
|
21
22
|
|
22
23
|
const binpath = path.join(conf({}).create('').root, '.bin');
|
23
24
|
const logspath = path.join(conf({}).create('').root, '.logs');
|
@@ -49,7 +50,7 @@ module.exports = {
|
|
49
50
|
runFileWithArgv(filePath, options = {}, cargv) {
|
50
51
|
const argv = cargv || process.argv;
|
51
52
|
argv.shift();
|
52
|
-
if (argv[0].endsWith(
|
53
|
+
if (argv[0].endsWith(REW_FILE_TYPE.EXTENSION)) {
|
53
54
|
if (argv[1] == 'run') {
|
54
55
|
argv.splice(0, 3);
|
55
56
|
} else if(argv[1] == '-w' || argv[1] == '--watch'){
|
@@ -118,8 +119,8 @@ module.exports = {
|
|
118
119
|
const create = () => {
|
119
120
|
fs.mkdirSync(projectPath, { recursive: true });
|
120
121
|
const confPath = path.join(projectPath, 'app.yaml');
|
121
|
-
const entryFile = path.join(projectPath, 'main.coffee');
|
122
|
-
fs.writeFileSync(confPath, jsYaml.dump({ manifest: { package: project.package, private: false }, exec: { entry: 'main.coffee' }, assets: { icon: 'assets/icon.png', folder: './assets' }, install: { requirements: [] } }));
|
122
|
+
const entryFile = path.join(projectPath, 'main'+(project.civet ? REW_FILE_TYPE.EXTENSION : '.coffee'));
|
123
|
+
fs.writeFileSync(confPath, jsYaml.dump({ manifest: { package: project.package, private: false }, exec: { entry: 'main'+(project.civet ? REW_FILE_TYPE.EXTENSION : '.coffee') }, assets: { icon: 'assets/icon.png', folder: './assets' }, install: { requirements: [] } }));
|
123
124
|
fs.writeFileSync(entryFile, `print("Hello World!")`);
|
124
125
|
fs.mkdirSync(path.join(projectPath, 'assets'), { recursive: true });
|
125
126
|
if (project.git) {
|
@@ -127,10 +128,14 @@ module.exports = {
|
|
127
128
|
execSync('cd ' + projectPath + ' && git init . && git branch -m main', { stdio: 'ignore' });
|
128
129
|
}
|
129
130
|
if(project.intellisense){
|
130
|
-
fs.copyFileSync(path.join(__dirname, '../../../
|
131
|
+
fs.copyFileSync(path.join(__dirname, '../../../tsconfig.json'), path.join(projectPath, 'tsconfig.json'));
|
131
132
|
fs.copyFileSync(path.join(__dirname, '../../../runtime.d.ts'), path.join(projectPath, 'runtime.d.ts'));
|
132
133
|
}
|
133
134
|
execSync('cd ' + projectPath + ' && npm init -y', { stdio: 'ignore' });
|
135
|
+
if(project.civet){
|
136
|
+
log('Installing NPM Packages');
|
137
|
+
execSync('cd '+projectPath+' && npm i @types/node --no-save', { stdio: 'ignore' });
|
138
|
+
}
|
134
139
|
// log('Installing '+npm_package_name);
|
135
140
|
// exec('cd '+projectPath+' && npm i '+npm_package_name, (err) => {
|
136
141
|
// if(err){
|
@@ -149,9 +154,12 @@ module.exports = {
|
|
149
154
|
project.package = pkg.trim();
|
150
155
|
rl.question(logget(' Use intellisense declarations ? (y/N): '.magenta.bold), (inteli) => {
|
151
156
|
project.intellisense = inteli.toLowerCase() == 'y' || inteli.toLowerCase() == 'yes';
|
152
|
-
rl.question(logget('
|
153
|
-
project.
|
154
|
-
|
157
|
+
rl.question(logget(' Use Civet Types ? (y/N): '.blue.bold), (civet) => {
|
158
|
+
project.civet = civet.toLowerCase() == 'y' || civet.toLowerCase() == 'yes';
|
159
|
+
rl.question(logget(' Use git ? (y/N): '.yellow.bold), (use_git) => {
|
160
|
+
project.git = use_git.toLowerCase() == 'y' || use_git.toLowerCase() == 'yes';
|
161
|
+
create();
|
162
|
+
});
|
155
163
|
});
|
156
164
|
});
|
157
165
|
} else {
|
@@ -173,8 +181,8 @@ module.exports = {
|
|
173
181
|
c.exec.entry = c.exec[options.entry] || c.exec.entry;
|
174
182
|
}
|
175
183
|
if (c.exec.entry) {
|
176
|
-
if (byPath && options.dev) c.exec.entry = c.entry.endsWith('.qrew') ? c.exec.entry.replace(/\.qrew$/, '.coffee') : c.exec.entry;
|
177
184
|
let r = path.resolve(root, c.exec.entry);
|
185
|
+
if (byPath && options.dev) r = r.endsWith('.qrew') ? r.replace(/\.qrew$/, (a, b) => fs.existsSync(r.replace(a, '.coffee')) ? '.coffee' : REW_FILE_TYPE.EXTENSION) : r;
|
178
186
|
if (options.build) {
|
179
187
|
this.build({
|
180
188
|
file: r,
|
@@ -357,9 +365,9 @@ module.exports = {
|
|
357
365
|
if (fs.existsSync(importedFilePath)) {
|
358
366
|
importsArray.push(importStatement);
|
359
367
|
processFile(importedFilePath, importsArray);
|
360
|
-
} else if (fs.existsSync(importedFilePath +
|
368
|
+
} else if (fs.existsSync(importedFilePath + REW_FILE_TYPE.EXTENSION)) {
|
361
369
|
importsArray.push(importStatement);
|
362
|
-
processFile(importedFilePath +
|
370
|
+
processFile(importedFilePath + REW_FILE_TYPE.EXTENSION, importsArray);
|
363
371
|
} else if (fs.existsSync(importedFilePath + '.js')) {
|
364
372
|
importsArray.push(importStatement);
|
365
373
|
processFile(importedFilePath + '.js', importsArray);
|
package/lib/rew/const/opt.js
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
const { REW_FILE_TYPE } = require("./ext");
|
2
|
+
|
1
3
|
const execOptions = {
|
2
4
|
sharedContext: true,
|
3
|
-
resolveExtensions: [
|
5
|
+
resolveExtensions: [REW_FILE_TYPE.EXTENSION, ".coffee", { ext: '.js', options: { type: 'js' } }, { ext: '.qrew', options: { qrew: true } }],
|
4
6
|
nativeRequire: false,
|
5
7
|
useImport: false,
|
6
8
|
cwdAlias: '$',
|
7
|
-
jsxPragma: 'createElement',
|
9
|
+
jsxPragma: '__using__.JSX.createElement',
|
8
10
|
jsx: false
|
9
11
|
};
|
10
12
|
|
package/lib/rew/functions/fs.js
CHANGED
@@ -31,7 +31,11 @@ module.exports = (currentFile) => {
|
|
31
31
|
}
|
32
32
|
|
33
33
|
function rm(filepath, options) {
|
34
|
-
return fs.
|
34
|
+
return fs.rmSync(gp(filepath), { recursive: true,...options });
|
35
|
+
}
|
36
|
+
|
37
|
+
function unlink(filepath, options) {
|
38
|
+
return fs.unlinkSync(gp(filepath));
|
35
39
|
}
|
36
40
|
|
37
41
|
function chmod(filepath, mode, options) {
|
@@ -51,6 +55,7 @@ module.exports = (currentFile) => {
|
|
51
55
|
mkdir,
|
52
56
|
chmod,
|
53
57
|
rm,
|
58
|
+
unlink,
|
54
59
|
fstat,
|
55
60
|
exists,
|
56
61
|
write,
|
@@ -6,6 +6,7 @@ const { existsSync, readFileSync } = require('fs');
|
|
6
6
|
const conf = require('../pkgs/conf');
|
7
7
|
const jsYaml = require('js-yaml');
|
8
8
|
const { execOptions } = require('../const/opt');
|
9
|
+
const { REW_FILE_TYPE } = require('../const/ext');
|
9
10
|
|
10
11
|
const cachedFiles = [];
|
11
12
|
module.exports.cleanCache = () => {
|
@@ -34,7 +35,7 @@ const lookUpInOtherApps = (fullPath) => {
|
|
34
35
|
module.exports.imp = function (runPath, context) {
|
35
36
|
return function (filename, options = {}) {
|
36
37
|
if (!options) options = {};
|
37
|
-
let type = options.type || 'coffee';
|
38
|
+
let type = options.type || filename.endsWith('.coffee') ? 'coffee' : REW_FILE_TYPE.TYPE;
|
38
39
|
let exports,
|
39
40
|
ispkg = findPackage(filename);
|
40
41
|
|
@@ -92,7 +93,7 @@ module.exports.imp = function (runPath, context) {
|
|
92
93
|
const pkg = getPackage(filename)(context, options);
|
93
94
|
exports = pkg._onImport ? pkg._onImport() : pkg;
|
94
95
|
} else if (foundCache) {
|
95
|
-
} else if (type ==
|
96
|
+
} else if (type == REW_FILE_TYPE.TYPE || type == "coffee") {
|
96
97
|
exports = exec({});
|
97
98
|
} else if (type == 'js') {
|
98
99
|
exports = exec({ compile: false });
|
@@ -111,7 +112,7 @@ module.exports.imp = function (runPath, context) {
|
|
111
112
|
}
|
112
113
|
}
|
113
114
|
|
114
|
-
if (options.save && (type == 'js' || type ==
|
115
|
+
if (options.save && (type == 'js' || type == REW_FILE_TYPE.TYPE || type == "coffee")) {
|
115
116
|
if (typeof options.save == 'string') context[options.save] = exports[i];
|
116
117
|
else
|
117
118
|
for (let i in exports) {
|
@@ -135,7 +136,6 @@ module.exports.imp = function (runPath, context) {
|
|
135
136
|
//** Mock imports section
|
136
137
|
/**/ if(!exports) exports = options.mock;
|
137
138
|
/**/ 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
139
|
//**
|
140
140
|
|
141
141
|
return exports;
|
@@ -8,7 +8,7 @@ const cahcedRequires = {};
|
|
8
8
|
const doImp = (path) => wait(async () => await import(resolvedPath));
|
9
9
|
|
10
10
|
module.exports.customRequire = function customRequire(modulePath, filePath) {
|
11
|
-
|
11
|
+
let pathname = modulePath;
|
12
12
|
if (modulePath.startsWith('./') || modulePath.startsWith('../') || path.isAbsolute(modulePath)) {
|
13
13
|
pathname = path.resolve(modulePath);
|
14
14
|
}
|
package/lib/rew/main.js
CHANGED
@@ -1,17 +1,5 @@
|
|
1
|
-
const {
|
2
|
-
const { exec, runPath } = require('./modules/runtime');
|
3
|
-
const fs = require('fs');
|
4
|
-
const { imp } = require('./functions/import');
|
5
|
-
const { FILES } = require('./const/files');
|
1
|
+
const { runPath } = require('./modules/runtime');
|
6
2
|
|
7
3
|
module.exports.run = function (filepath, options = {}, custom_context = {}) {
|
8
|
-
FILES.forEach((file) => {
|
9
|
-
if (fs.existsSync(file.path)) return;
|
10
|
-
if (file.content) {
|
11
|
-
fs.writeFileSync(file.path, file.content);
|
12
|
-
} else {
|
13
|
-
fs.mkdirSync(file.path, { recursive: true });
|
14
|
-
}
|
15
|
-
});
|
16
4
|
return runPath(filepath, options, custom_context);
|
17
5
|
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
const { compile } = require('../../
|
1
|
+
const { compile: compileCivet } = require('../../civet/main');
|
2
2
|
const { execOptions } = require('../const/opt');
|
3
3
|
const { findAppInfo } = require('../misc/findAppInfo');
|
4
4
|
const { from_qrew } = require('../qrew/compile');
|
@@ -7,6 +7,9 @@ const babel = require('@babel/core');
|
|
7
7
|
const path = require('path');
|
8
8
|
const babelReact = require('@babel/preset-react');
|
9
9
|
const { readFileSync } = require('fs');
|
10
|
+
const { wait } = require('../functions/wait');
|
11
|
+
const { REW_FILE_TYPE } = require('../const/ext');
|
12
|
+
const { USING_DEFAULT } = require('../const/usage');
|
10
13
|
|
11
14
|
function tokenizeCoffeeScript(code) {
|
12
15
|
const tokens = [];
|
@@ -115,6 +118,9 @@ function compileRewStuff(content, options) {
|
|
115
118
|
const token = tokens[i];
|
116
119
|
let { token: nextToken, n } = gnextToken(i, 1, tokens) || {};
|
117
120
|
|
121
|
+
if(token.type == "COMMENT" && i < 2 && token.value.startsWith('#!')){
|
122
|
+
continue;
|
123
|
+
}
|
118
124
|
|
119
125
|
if (token.type === 'IDENTIFIER' && token.value === 'opt.set') {
|
120
126
|
const { token: nextNextToken } = gnextToken(i, 2, tokens) || {};
|
@@ -150,18 +156,19 @@ function compileRewStuff(content, options) {
|
|
150
156
|
}
|
151
157
|
|
152
158
|
|
153
|
-
if (token.type === 'IDENTIFIER' && token.value === 'let' && !options.keepImports) {
|
154
|
-
result += '`'
|
155
|
-
hooks.push({
|
156
|
-
index: fnextToken(i, tokens, 'OTHER', ';').ti,
|
157
|
-
value: `\``,
|
158
|
-
});
|
159
|
-
}
|
160
|
-
|
161
159
|
if (token.type === 'IDENTIFIER' && token.value === 'export' && !options.keepImports) {
|
162
160
|
token.value = 'pub';
|
163
161
|
}
|
164
162
|
|
163
|
+
if (token.type === 'IDENTIFIER' && token.value === 'using' && !options.disableUse) {
|
164
|
+
const next = nextToken.value;
|
165
|
+
if(next in USING_DEFAULT) {
|
166
|
+
const { use } = USING_DEFAULT[next];
|
167
|
+
use?.(options);
|
168
|
+
nextToken.value = `"${nextToken.value}"`
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
165
172
|
if (token.type === 'IDENTIFIER' && token.value === 'import' && !options.keepImports) {
|
166
173
|
// console.log(nextToken.type);
|
167
174
|
let ind = i + n + 2;
|
@@ -177,9 +184,12 @@ function compileRewStuff(content, options) {
|
|
177
184
|
const exportsTokens = tokens.slice(ind, closingBraceToken.ti);
|
178
185
|
const exports = exportsTokens
|
179
186
|
.filter((t) => t.type === 'IDENTIFIER')
|
180
|
-
.map((t) => t.value)
|
187
|
+
.map((t, i, arr) => t.value == 'as' ? [arr[i-1].value +': '+arr[i+1].value] : t.value)
|
188
|
+
.flat(1)
|
189
|
+
.filter((t, i, arr) => !arr[i+1]?.match(':') && !arr[i-1]?.match(':'))
|
181
190
|
.join(', ');
|
182
|
-
|
191
|
+
|
192
|
+
result += `{ ${exports} } ${options.type == 'coffee' ? '=' : ':='} inc ${nameToken.value}`;
|
183
193
|
i = nameToken.ti;
|
184
194
|
}
|
185
195
|
} else if (nextToken.value === '*') {
|
@@ -188,7 +198,7 @@ function compileRewStuff(content, options) {
|
|
188
198
|
if (asToken) {
|
189
199
|
const nextToken = fnextToken(asToken.ti + 1, tokens, 'IDENTIFIER');
|
190
200
|
defaultName = nextToken.value;
|
191
|
-
result += `${defaultName} = inc ${nameToken.value}`;
|
201
|
+
result += `${defaultName} ${options.type == 'coffee' ? '=' : ':='} inc ${nameToken.value}`;
|
192
202
|
i = ind + 6;
|
193
203
|
}
|
194
204
|
} else if (nextToken) {
|
@@ -201,13 +211,15 @@ function compileRewStuff(content, options) {
|
|
201
211
|
const exportsTokens = tokens.slice(ind, closingBraceToken.ti);
|
202
212
|
const exports = exportsTokens
|
203
213
|
.filter((t) => t.type === 'IDENTIFIER')
|
204
|
-
.map((t) => t.value)
|
214
|
+
.map((t, i, arr) => t.value == 'as' ? [arr[i-1].value +': '+arr[i+1].value] : t.value)
|
215
|
+
.flat(1)
|
216
|
+
.filter((t, i, arr) => !arr[i+1]?.match(':') && !arr[i-1]?.match(':'))
|
205
217
|
.join(', ');
|
206
|
-
result += `{ default: ${defaultName}, ${exports} } = inc ${nameToken?.value || ''}`;
|
218
|
+
result += `{ default: ${defaultName}, ${exports} } ${options.type == 'coffee' ? '=' : ':='} inc ${nameToken?.value || ''}`;
|
207
219
|
i = closingBraceToken.ti + 4;
|
208
220
|
}
|
209
221
|
} else {
|
210
|
-
result += `{ default: ${defaultName} } = inc ${nameToken?.value || ''}`;
|
222
|
+
result += `{ default: ${defaultName} } ${options.type == 'coffee' ? '=' : ':='} inc ${nameToken?.value || ''}`;
|
211
223
|
i = ind + 2;
|
212
224
|
}
|
213
225
|
}
|
@@ -259,21 +271,56 @@ function compileRewStuff(content, options) {
|
|
259
271
|
return result;
|
260
272
|
}
|
261
273
|
|
262
|
-
const
|
263
|
-
|
274
|
+
const compileCivetStuff = (file, options) => {
|
275
|
+
const compileOptions = {
|
264
276
|
...options,
|
265
|
-
|
266
|
-
|
277
|
+
bare: true,
|
278
|
+
filename: file.content,
|
267
279
|
inlineMap: false,
|
268
|
-
|
280
|
+
js: true
|
281
|
+
};
|
282
|
+
|
283
|
+
const prepared = compileRewStuff(file.content, options);
|
284
|
+
|
285
|
+
const compiled = options.async ? compileCivet(prepared, compileOptions) : wait(compileCivet, prepared, compileOptions);
|
286
|
+
|
287
|
+
return {
|
288
|
+
compiled,
|
289
|
+
options
|
290
|
+
};
|
291
|
+
}
|
292
|
+
|
293
|
+
const cpl = (module.exports.compile = function (file, options = {}) {
|
294
|
+
let compiledCode;
|
295
|
+
const result = compileCivetStuff(file, {
|
296
|
+
...options,
|
297
|
+
parseOptions: {
|
298
|
+
coffeeCompat: options.type == "coffee",
|
299
|
+
}
|
300
|
+
});
|
301
|
+
|
302
|
+
options = result.options;
|
303
|
+
compiledCode = result.compiled;
|
304
|
+
|
305
|
+
const babelify = (code, options) => babel.transformSync(code, {
|
306
|
+
presets: [[babelReact, { pragma: options.jsxPragma || execOptions.jsxPragma }]],
|
307
|
+
plugins: [],
|
308
|
+
}).code;
|
309
|
+
|
310
|
+
if(compiledCode instanceof Promise){
|
311
|
+
return compiledCode.then((compiledCode) => {
|
312
|
+
if (execOptions.jsx || options.jsx) {
|
313
|
+
compiledCode = babelify(compiledCode, options);
|
314
|
+
}
|
315
|
+
return compiledCode;
|
316
|
+
});
|
317
|
+
}
|
318
|
+
|
269
319
|
// console.log(c);
|
270
320
|
if (execOptions.jsx || options.jsx) {
|
271
|
-
|
272
|
-
presets: [[babelReact, { pragma: options.jsxPragma || execOptions.jsxPragma }]],
|
273
|
-
plugins: [],
|
274
|
-
}).code;
|
321
|
+
compiledCode = babelify(compiledCode, options);
|
275
322
|
}
|
276
|
-
return
|
323
|
+
return compiledCode;
|
277
324
|
});
|
278
325
|
|
279
326
|
module.exports.compileFile = function (filepath, options = {}) {
|
@@ -7,6 +7,7 @@ const fsLib = require("../functions/fs");
|
|
7
7
|
const pathLib = require("../functions/path");
|
8
8
|
const execLib = require("../functions/exec");
|
9
9
|
const { findAppInfo } = require("../misc/findAppInfo");
|
10
|
+
const { USING_DEFAULT } = require("../const/usage");
|
10
11
|
|
11
12
|
let mainFile = "";
|
12
13
|
const isMainFile = (filepath) => filepath == mainFile;
|
@@ -30,6 +31,7 @@ module.exports.prepareContext = function (
|
|
30
31
|
},
|
31
32
|
app: findAppInfo(filepath),
|
32
33
|
...fsLib(filepath),
|
34
|
+
__using__: {}
|
33
35
|
};
|
34
36
|
if (options.useContext) {
|
35
37
|
context = {
|
@@ -91,6 +93,16 @@ module.exports.prepareContext = function (
|
|
91
93
|
context.pub = pubFunction(context);
|
92
94
|
context.exports = exportsFunction(context);
|
93
95
|
|
96
|
+
context.using = (name, ...params) => {
|
97
|
+
if(USING_DEFAULT[name]){
|
98
|
+
if(USING_DEFAULT[name].param) {
|
99
|
+
context.__using__[name] = USING_DEFAULT[name].param(...params);
|
100
|
+
}
|
101
|
+
} else {
|
102
|
+
context.__using__[name] = params.length ? params.length > 1 ? [...params] : params : true;
|
103
|
+
}
|
104
|
+
};
|
105
|
+
|
94
106
|
if (
|
95
107
|
context.module.main ||
|
96
108
|
(options.fromMain == true && options.as == "main")
|
@@ -17,6 +17,7 @@ const exec = (module.exports.exec = function (code, context, original = '') {
|
|
17
17
|
|
18
18
|
module.exports.runPath = function runPath(filepath, options = {}, custom_context = {}) {
|
19
19
|
if(filepath.endsWith('.js')) options.type = 'js';
|
20
|
+
if(filepath.endsWith('.coffee')) options.type = 'coffee';
|
20
21
|
let { compiled_code, file } = compileFile(options.code ? { content: options.code, path: filepath } : filepath, options);
|
21
22
|
const context = options.import?.takeThisContext ? custom_context : prepareContext(custom_context, options, file.path, runPath);
|
22
23
|
// context.module.compiled = compiled_code;
|
package/lib/rew/pkgs/serve.js
CHANGED
@@ -5,6 +5,10 @@ const path = require('path');
|
|
5
5
|
const { run } = require('../main');
|
6
6
|
const { runPath } = require('../modules/runtime');
|
7
7
|
const { cleanCache } = require('../functions/import');
|
8
|
+
const { REW_FILE_TYPE } = require('../const/ext');
|
9
|
+
|
10
|
+
const lookUpFiles = ['route', 'page', 'page.s'];
|
11
|
+
|
8
12
|
module.exports = (context) => {
|
9
13
|
|
10
14
|
// http.createServer((req, res) => {
|
@@ -105,7 +109,7 @@ module.exports = (context) => {
|
|
105
109
|
}
|
106
110
|
}
|
107
111
|
|
108
|
-
function findLayoutFiles(filePath, root, isClientSide = true, resolveExtensions = ['.coffee', '.js', '.jsx']) {
|
112
|
+
function findLayoutFiles(filePath, root, isClientSide = true, resolveExtensions = [REW_FILE_TYPE.EXTENSION, '.coffee', '.js', '.jsx']) {
|
109
113
|
const layouts = [];
|
110
114
|
const rootDir = root;
|
111
115
|
let currentDir = path.dirname(filePath);
|
@@ -138,7 +142,7 @@ module.exports = (context) => {
|
|
138
142
|
`;
|
139
143
|
|
140
144
|
const defaultSsrBundlerEntry = (file, layouts, data) => `
|
141
|
-
files = "${layouts.join(',')}
|
145
|
+
files = "${layouts.length ? layouts.join(',')+',' : ''}${file}".split(',')
|
142
146
|
|
143
147
|
renderers = []
|
144
148
|
staticRendering = false
|
@@ -162,13 +166,11 @@ module.exports = (context) => {
|
|
162
166
|
onError = () => error(404, 'Path not found'),
|
163
167
|
root = '',
|
164
168
|
basePath = '',
|
165
|
-
resolveExtensions = ['.coffee', '.js', '.jsx'],
|
169
|
+
resolveExtensions = [REW_FILE_TYPE.EXTENSION, '.coffee', '.js', '.jsx'],
|
166
170
|
bundlerOptions = {},
|
167
171
|
bundlerEntry = defaultBundlerEntry,
|
168
172
|
ssrBundlerEntry = defaultSsrBundlerEntry,
|
169
173
|
}) {
|
170
|
-
|
171
|
-
const lookUpFiles = ['route', 'page', 'page.s'];
|
172
174
|
|
173
175
|
const params = {};
|
174
176
|
|
@@ -176,6 +178,7 @@ module.exports = (context) => {
|
|
176
178
|
const routeParts = pathname.split('/').filter(Boolean);
|
177
179
|
let routePath = root;
|
178
180
|
|
181
|
+
|
179
182
|
Object.keys(params).forEach(key => delete params[key]);
|
180
183
|
|
181
184
|
for (const part of routeParts) {
|
package/lib/rew/pkgs/web.js
CHANGED
@@ -3,6 +3,7 @@ const emitter = require("../functions/emitter");
|
|
3
3
|
const { compile } = require("../modules/compiler");
|
4
4
|
const { wait } = require("../functions/wait");
|
5
5
|
const { generateRandomID } = require("../functions/id");
|
6
|
+
const { REW_FILE_TYPE } = require("../const/ext");
|
6
7
|
|
7
8
|
|
8
9
|
const selfClosingElements = new Set([
|
@@ -476,11 +477,11 @@ module.exports = (context, importOptions) => {
|
|
476
477
|
}
|
477
478
|
return null;
|
478
479
|
},
|
479
|
-
transform(code, id) {
|
480
|
-
if (id.endsWith('.coffee')) {
|
481
|
-
const result = compile({ content: code, path: filepath }, { jsx: true, keepImports: true });
|
480
|
+
async transform(code, id) {
|
481
|
+
if (id.endsWith(REW_FILE_TYPE.EXTENSION) || id.endsWith('.coffee')) {
|
482
|
+
const result = compile({ content: code, path: filepath }, { jsx: true, async: true, keepImports: true });
|
482
483
|
return {
|
483
|
-
code: result,
|
484
|
+
code: await result,
|
484
485
|
map: null,
|
485
486
|
};
|
486
487
|
}
|
package/package.json
CHANGED
package/runtime.d.ts
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
|
2
|
+
|
1
3
|
interface ImportOptions {
|
2
4
|
/**
|
3
5
|
* Determines how to import the given module
|
@@ -61,7 +63,7 @@ interface ModuleConf extends ModuleConfOptionCenter {
|
|
61
63
|
name: string,
|
62
64
|
defaults?: any
|
63
65
|
) => {
|
64
|
-
write: (value: any, ifExists?: boolean) =>
|
66
|
+
write: (value: any, ifExists?: boolean) => any;
|
65
67
|
read: (to?: string | object) => string | object | Buffer;
|
66
68
|
fileRoot: string;
|
67
69
|
exists: boolean;
|
@@ -109,8 +111,8 @@ interface ModuleRuneDB {
|
|
109
111
|
interface ModuleRune {
|
110
112
|
db(dbname: string, data?: object, encryptionKey?: string): ModuleRuneDB;
|
111
113
|
genKey(secret: string): string;
|
112
|
-
push(...values: any[]):
|
113
|
-
pop(...values: any[]):
|
114
|
+
push(...values: any[]): any;
|
115
|
+
pop(...values: any[]): any;
|
114
116
|
}
|
115
117
|
|
116
118
|
interface ModuleThreads {
|
@@ -120,7 +122,7 @@ interface ModuleThreads {
|
|
120
122
|
on: (event: string, callback: (data) => void) => void;
|
121
123
|
off: (event: string, callback: (data) => void) => void;
|
122
124
|
emit: (event: string, data: any) => void;
|
123
|
-
get: () => Promise
|
125
|
+
get: () => Promise<any>;
|
124
126
|
stop: () => void;
|
125
127
|
};
|
126
128
|
};
|
@@ -156,7 +158,8 @@ type StatusErrorObject = {
|
|
156
158
|
error?: string;
|
157
159
|
[key: string]: any;
|
158
160
|
};
|
159
|
-
|
161
|
+
|
162
|
+
export class StatusError extends Error {
|
160
163
|
status: number;
|
161
164
|
[key: string]: any;
|
162
165
|
constructor(status?: number, body?: StatusErrorObject | string);
|
@@ -262,12 +265,9 @@ interface ErrorLike extends Error {
|
|
262
265
|
type ErrorBody = string | object;
|
263
266
|
interface ErrorFormatter {
|
264
267
|
(statusCode?: number, body?: ErrorBody): Response;
|
265
|
-
(error: ErrorLike): Response;
|
266
|
-
}
|
267
|
-
{
|
268
268
|
}
|
269
269
|
|
270
|
-
const IttyRouter: <
|
270
|
+
export const IttyRouter: <
|
271
271
|
RequestType extends IRequest = IRequest,
|
272
272
|
Args extends any[] = any[],
|
273
273
|
ResponseType = any
|
@@ -277,7 +277,7 @@ const IttyRouter: <
|
|
277
277
|
...other
|
278
278
|
}?: IttyRouterOptions) => IttyRouterType<RequestType, Args, ResponseType>;
|
279
279
|
|
280
|
-
const Router: <
|
280
|
+
export const Router: <
|
281
281
|
RequestType = IRequest,
|
282
282
|
Args extends any[] = any[],
|
283
283
|
ResponseType = any
|
@@ -888,6 +888,7 @@ declare const presolve: (...paths: string[]) => string;
|
|
888
888
|
|
889
889
|
declare function exports(value: any): any;
|
890
890
|
|
891
|
+
|
891
892
|
declare function pub(value: any): any;
|
892
893
|
declare function pub(name: string, value: any): any;
|
893
894
|
|
@@ -898,5 +899,9 @@ declare const opt: {
|
|
898
899
|
pop: (key: string) => any;
|
899
900
|
};
|
900
901
|
|
902
|
+
declare const JSX: any;
|
903
|
+
declare const TYPES: any;
|
904
|
+
declare function using(fn: any, ...args: any[]): any;
|
905
|
+
|
901
906
|
declare function wait(fn: CallableFunction, ...args: any[]): any;
|
902
907
|
declare function clear(): void;
|