@makano/rew 1.2.56 → 1.2.57
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.
- 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 +7 -4
- 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);
|
|
@@ -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;
|